Files
2026-01-09 19:24:41 +00:00

3036 lines
89 KiB
JavaScript

import {
makeFilterProps,
useFilter
} from "./chunk-RB6DAYHX.js";
import {
VSelect,
VVirtualScrollItem,
makeVirtualProps,
useVirtual
} from "./chunk-IZDIYS2S.js";
import {
VCheckboxBtn
} from "./chunk-6HLLVLOR.js";
import {
VChip
} from "./chunk-PLNIG6WP.js";
import {
VDivider
} from "./chunk-X3WY3J75.js";
import {
makeDisplayProps,
useDisplay
} from "./chunk-N4LJHDYD.js";
import {
VBtn
} from "./chunk-UQALH6SL.js";
import {
makeVariantProps
} from "./chunk-ADXDXPPR.js";
import {
makeBorderProps
} from "./chunk-X7YBE6PF.js";
import {
makeElevationProps
} from "./chunk-YJD2PNP6.js";
import {
LoaderSlot,
makeLoaderProps,
useLoader
} from "./chunk-UXZ55AO7.js";
import {
makeDensityProps,
useDensity
} from "./chunk-TM3MIDYC.js";
import {
VIcon
} from "./chunk-4XZHKYGH.js";
import {
makeSizeProps
} from "./chunk-PIT7IT55.js";
import {
makeRoundedProps
} from "./chunk-AQK3CYVW.js";
import {
makeTagProps
} from "./chunk-2HZIACSB.js";
import {
IconValue
} from "./chunk-OJDZBU5D.js";
import {
useBackgroundColor
} from "./chunk-BHV5Z34M.js";
import {
useResizeObserver
} from "./chunk-XDSAO7OT.js";
import {
useLocale,
useRtl
} from "./chunk-ENTLCOCZ.js";
import {
useProxiedModel
} from "./chunk-KA77II4V.js";
import {
makeThemeProps,
provideTheme
} from "./chunk-3DSR7NCB.js";
import {
EventProp,
clamp,
consoleError,
convertToUnit,
createRange,
deepEqual,
defineFunctionalComponent,
genericComponent,
getCurrentInstance,
getObjectValueByPath,
getPrefixedEventHandlers,
getPropertyFromItem,
isEmpty,
isObject,
isPrimitive,
keyValues,
makeComponentProps,
omit,
pick,
propsFactory,
provideDefaults,
useRender,
wrapInArray
} from "./chunk-LZ5T2ERG.js";
import {
Fragment,
capitalize,
computed,
createBaseVNode,
createTextVNode,
createVNode,
inject,
mergeProps,
nextTick,
normalizeClass,
normalizeStyle,
onBeforeUpdate,
provide,
ref,
shallowRef,
toDisplayString,
toRaw,
toRef,
toRefs,
toValue,
watch,
watchEffect,
withModifiers
} from "./chunk-2MKFL3BX.js";
// node_modules/vuetify/lib/components/VDataTable/VDataTable.js
import "/home/david/gitea_repo/personal_development/ServerManagerWebApp/frontend/node_modules/vuetify/lib/components/VDataTable/VDataTable.css";
// node_modules/vuetify/lib/components/VDataTable/VDataTableFooter.js
import "/home/david/gitea_repo/personal_development/ServerManagerWebApp/frontend/node_modules/vuetify/lib/components/VDataTable/VDataTableFooter.css";
// node_modules/vuetify/lib/components/VPagination/VPagination.js
import "/home/david/gitea_repo/personal_development/ServerManagerWebApp/frontend/node_modules/vuetify/lib/components/VPagination/VPagination.css";
// node_modules/vuetify/lib/composables/refs.js
function useRefs() {
const refs = ref([]);
onBeforeUpdate(() => refs.value = []);
function updateRef(e, i) {
refs.value[i] = e;
}
return {
refs,
updateRef
};
}
// node_modules/vuetify/lib/components/VPagination/VPagination.js
var makeVPaginationProps = propsFactory({
activeColor: String,
start: {
type: [Number, String],
default: 1
},
modelValue: {
type: Number,
default: (props) => props.start
},
disabled: Boolean,
length: {
type: [Number, String],
default: 1,
validator: (val) => val % 1 === 0
},
totalVisible: [Number, String],
firstIcon: {
type: IconValue,
default: "$first"
},
prevIcon: {
type: IconValue,
default: "$prev"
},
nextIcon: {
type: IconValue,
default: "$next"
},
lastIcon: {
type: IconValue,
default: "$last"
},
ariaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.root"
},
pageAriaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.page"
},
currentPageAriaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.currentPage"
},
firstAriaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.first"
},
previousAriaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.previous"
},
nextAriaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.next"
},
lastAriaLabel: {
type: String,
default: "$vuetify.pagination.ariaLabel.last"
},
ellipsis: {
type: String,
default: "..."
},
showFirstLastPage: Boolean,
...makeBorderProps(),
...makeComponentProps(),
...makeDensityProps(),
...makeElevationProps(),
...makeRoundedProps(),
...makeSizeProps(),
...makeTagProps({
tag: "nav"
}),
...makeThemeProps(),
...makeVariantProps({
variant: "text"
})
}, "VPagination");
var VPagination = genericComponent()({
name: "VPagination",
props: makeVPaginationProps(),
emits: {
"update:modelValue": (value) => true,
first: (value) => true,
prev: (value) => true,
next: (value) => true,
last: (value) => true
},
setup(props, _ref) {
let {
slots,
emit
} = _ref;
const page = useProxiedModel(props, "modelValue");
const {
t,
n
} = useLocale();
const {
isRtl
} = useRtl();
const {
themeClasses
} = provideTheme(props);
const {
width
} = useDisplay();
const maxButtons = shallowRef(-1);
provideDefaults(void 0, {
scoped: true
});
const {
resizeRef
} = useResizeObserver((entries) => {
if (!entries.length) return;
const {
target,
contentRect
} = entries[0];
const firstItem = target.querySelector(".v-pagination__list > *");
if (!firstItem) return;
const totalWidth = contentRect.width;
const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;
maxButtons.value = getMax(totalWidth, itemWidth);
});
const length = computed(() => parseInt(props.length, 10));
const start = computed(() => parseInt(props.start, 10));
const totalVisible = computed(() => {
if (props.totalVisible != null) return parseInt(props.totalVisible, 10);
else if (maxButtons.value >= 0) return maxButtons.value;
return getMax(width.value, 58);
});
function getMax(totalWidth, itemWidth) {
const minButtons = props.showFirstLastPage ? 5 : 3;
return Math.max(0, Math.floor(
// Round to two decimal places to avoid floating point errors
Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))
));
}
const range = computed(() => {
if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
if (totalVisible.value <= 0) return [];
else if (totalVisible.value === 1) return [page.value];
if (length.value <= totalVisible.value) {
return createRange(length.value, start.value);
}
const even = totalVisible.value % 2 === 0;
const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);
const left = even ? middle : middle + 1;
const right = length.value - middle;
if (left - page.value >= 0) {
return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];
} else if (page.value - right >= (even ? 1 : 0)) {
const rangeLength = totalVisible.value - 1;
const rangeStart = length.value - rangeLength + start.value;
return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
} else {
const rangeLength = Math.max(1, totalVisible.value - 2);
const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
}
});
function setValue(e, value, event) {
e.preventDefault();
page.value = value;
event && emit(event, value);
}
const {
refs,
updateRef
} = useRefs();
provideDefaults({
VPaginationBtn: {
color: toRef(() => props.color),
border: toRef(() => props.border),
density: toRef(() => props.density),
size: toRef(() => props.size),
variant: toRef(() => props.variant),
rounded: toRef(() => props.rounded),
elevation: toRef(() => props.elevation)
}
});
const items = computed(() => {
return range.value.map((item, index) => {
const ref2 = (e) => updateRef(e, index);
if (typeof item === "string") {
return {
isActive: false,
key: `ellipsis-${index}`,
page: item,
props: {
ref: ref2,
ellipsis: true,
icon: true,
disabled: true
}
};
} else {
const isActive = item === page.value;
return {
isActive,
key: item,
page: n(item),
props: {
ref: ref2,
ellipsis: false,
icon: true,
disabled: !!props.disabled || Number(props.length) < 2,
color: isActive ? props.activeColor : props.color,
"aria-current": isActive,
"aria-label": t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
onClick: (e) => setValue(e, item)
}
};
}
});
});
const controls = computed(() => {
const prevDisabled = !!props.disabled || page.value <= start.value;
const nextDisabled = !!props.disabled || page.value >= start.value + length.value - 1;
return {
first: props.showFirstLastPage ? {
icon: isRtl.value ? props.lastIcon : props.firstIcon,
onClick: (e) => setValue(e, start.value, "first"),
disabled: prevDisabled,
"aria-label": t(props.firstAriaLabel),
"aria-disabled": prevDisabled
} : void 0,
prev: {
icon: isRtl.value ? props.nextIcon : props.prevIcon,
onClick: (e) => setValue(e, page.value - 1, "prev"),
disabled: prevDisabled,
"aria-label": t(props.previousAriaLabel),
"aria-disabled": prevDisabled
},
next: {
icon: isRtl.value ? props.prevIcon : props.nextIcon,
onClick: (e) => setValue(e, page.value + 1, "next"),
disabled: nextDisabled,
"aria-label": t(props.nextAriaLabel),
"aria-disabled": nextDisabled
},
last: props.showFirstLastPage ? {
icon: isRtl.value ? props.firstIcon : props.lastIcon,
onClick: (e) => setValue(e, start.value + length.value - 1, "last"),
disabled: nextDisabled,
"aria-label": t(props.lastAriaLabel),
"aria-disabled": nextDisabled
} : void 0
};
});
function updateFocus() {
const currentIndex = page.value - start.value;
refs.value[currentIndex]?.$el.focus();
}
function onKeydown(e) {
if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {
page.value = page.value - 1;
nextTick(updateFocus);
} else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
page.value = page.value + 1;
nextTick(updateFocus);
}
}
useRender(() => createVNode(props.tag, {
"ref": resizeRef,
"class": normalizeClass(["v-pagination", themeClasses.value, props.class]),
"style": normalizeStyle(props.style),
"role": "navigation",
"aria-label": t(props.ariaLabel),
"onKeydown": onKeydown,
"data-test": "v-pagination-root"
}, {
default: () => [createBaseVNode("ul", {
"class": "v-pagination__list"
}, [props.showFirstLastPage && createBaseVNode("li", {
"key": "first",
"class": "v-pagination__first",
"data-test": "v-pagination-first"
}, [slots.first ? slots.first(controls.value.first) : createVNode(VBtn, mergeProps({
"_as": "VPaginationBtn"
}, controls.value.first), null)]), createBaseVNode("li", {
"key": "prev",
"class": "v-pagination__prev",
"data-test": "v-pagination-prev"
}, [slots.prev ? slots.prev(controls.value.prev) : createVNode(VBtn, mergeProps({
"_as": "VPaginationBtn"
}, controls.value.prev), null)]), items.value.map((item, index) => createBaseVNode("li", {
"key": item.key,
"class": normalizeClass(["v-pagination__item", {
"v-pagination__item--is-active": item.isActive
}]),
"data-test": "v-pagination-item"
}, [slots.item ? slots.item(item) : createVNode(VBtn, mergeProps({
"_as": "VPaginationBtn"
}, item.props), {
default: () => [item.page]
})])), createBaseVNode("li", {
"key": "next",
"class": "v-pagination__next",
"data-test": "v-pagination-next"
}, [slots.next ? slots.next(controls.value.next) : createVNode(VBtn, mergeProps({
"_as": "VPaginationBtn"
}, controls.value.next), null)]), props.showFirstLastPage && createBaseVNode("li", {
"key": "last",
"class": "v-pagination__last",
"data-test": "v-pagination-last"
}, [slots.last ? slots.last(controls.value.last) : createVNode(VBtn, mergeProps({
"_as": "VPaginationBtn"
}, controls.value.last), null)])])]
}));
return {};
}
});
// node_modules/vuetify/lib/components/VDataTable/composables/paginate.js
var makeDataTablePaginateProps = propsFactory({
page: {
type: [Number, String],
default: 1
},
itemsPerPage: {
type: [Number, String],
default: 10
}
}, "DataTable-paginate");
var VDataTablePaginationSymbol = /* @__PURE__ */ Symbol.for("vuetify:data-table-pagination");
function createPagination(props) {
const page = useProxiedModel(props, "page", void 0, (value) => Number(value ?? 1));
const itemsPerPage = useProxiedModel(props, "itemsPerPage", void 0, (value) => Number(value ?? 10));
return {
page,
itemsPerPage
};
}
function providePagination(options) {
const {
page,
itemsPerPage,
itemsLength
} = options;
const startIndex = computed(() => {
if (itemsPerPage.value === -1) return 0;
return itemsPerPage.value * (page.value - 1);
});
const stopIndex = computed(() => {
if (itemsPerPage.value === -1) return itemsLength.value;
return Math.min(itemsLength.value, startIndex.value + itemsPerPage.value);
});
const pageCount = computed(() => {
if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
return Math.ceil(itemsLength.value / itemsPerPage.value);
});
watch([page, pageCount], () => {
if (page.value > pageCount.value) {
page.value = pageCount.value;
}
});
function setItemsPerPage(value) {
itemsPerPage.value = value;
page.value = 1;
}
function nextPage() {
page.value = clamp(page.value + 1, 1, pageCount.value);
}
function prevPage() {
page.value = clamp(page.value - 1, 1, pageCount.value);
}
function setPage(value) {
page.value = clamp(value, 1, pageCount.value);
}
const data = {
page,
itemsPerPage,
startIndex,
stopIndex,
pageCount,
itemsLength,
nextPage,
prevPage,
setPage,
setItemsPerPage
};
provide(VDataTablePaginationSymbol, data);
return data;
}
function usePagination() {
const data = inject(VDataTablePaginationSymbol);
if (!data) throw new Error("Missing pagination!");
return data;
}
function usePaginatedItems(options) {
const vm = getCurrentInstance("usePaginatedItems");
const {
items,
startIndex,
stopIndex,
itemsPerPage
} = options;
const paginatedItems = computed(() => {
if (itemsPerPage.value <= 0) return items.value;
return items.value.slice(startIndex.value, stopIndex.value);
});
watch(paginatedItems, (val) => {
vm.emit("update:currentItems", val);
}, {
immediate: true
});
return {
paginatedItems
};
}
// node_modules/vuetify/lib/components/VDataTable/VDataTableFooter.js
var makeVDataTableFooterProps = propsFactory({
color: String,
prevIcon: {
type: IconValue,
default: "$prev"
},
nextIcon: {
type: IconValue,
default: "$next"
},
firstIcon: {
type: IconValue,
default: "$first"
},
lastIcon: {
type: IconValue,
default: "$last"
},
itemsPerPageText: {
type: String,
default: "$vuetify.dataFooter.itemsPerPageText"
},
pageText: {
type: String,
default: "$vuetify.dataFooter.pageText"
},
firstPageLabel: {
type: String,
default: "$vuetify.dataFooter.firstPage"
},
prevPageLabel: {
type: String,
default: "$vuetify.dataFooter.prevPage"
},
nextPageLabel: {
type: String,
default: "$vuetify.dataFooter.nextPage"
},
lastPageLabel: {
type: String,
default: "$vuetify.dataFooter.lastPage"
},
itemsPerPageOptions: {
type: Array,
default: () => [{
value: 10,
title: "10"
}, {
value: 25,
title: "25"
}, {
value: 50,
title: "50"
}, {
value: 100,
title: "100"
}, {
value: -1,
title: "$vuetify.dataFooter.itemsPerPageAll"
}]
},
showCurrentPage: Boolean
}, "VDataTableFooter");
var VDataTableFooter = genericComponent()({
name: "VDataTableFooter",
props: makeVDataTableFooterProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
t
} = useLocale();
const {
page,
pageCount,
startIndex,
stopIndex,
itemsLength,
itemsPerPage,
setItemsPerPage
} = usePagination();
const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map((option) => {
if (typeof option === "number") {
return {
value: option,
title: option === -1 ? t("$vuetify.dataFooter.itemsPerPageAll") : String(option)
};
}
return {
...option,
title: !isNaN(Number(option.title)) ? option.title : t(option.title)
};
}));
useRender(() => {
const paginationProps = VPagination.filterProps(props);
return createBaseVNode("div", {
"class": "v-data-table-footer"
}, [slots.prepend?.(), createBaseVNode("div", {
"class": "v-data-table-footer__items-per-page"
}, [createBaseVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
"items": itemsPerPageOptions.value,
"itemColor": props.color,
"modelValue": itemsPerPage.value,
"onUpdate:modelValue": (v) => setItemsPerPage(Number(v)),
"density": "compact",
"variant": "outlined",
"aria-label": t(props.itemsPerPageText),
"hideDetails": true
}, null)]), createBaseVNode("div", {
"class": "v-data-table-footer__info"
}, [createBaseVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), createBaseVNode("div", {
"class": "v-data-table-footer__pagination"
}, [createVNode(VPagination, mergeProps({
"modelValue": page.value,
"onUpdate:modelValue": ($event) => page.value = $event,
"density": "comfortable",
"firstAriaLabel": props.firstPageLabel,
"lastAriaLabel": props.lastPageLabel,
"length": pageCount.value,
"nextAriaLabel": props.nextPageLabel,
"previousAriaLabel": props.prevPageLabel,
"rounded": true,
"showFirstLastPage": true,
"totalVisible": props.showCurrentPage ? 1 : 0,
"variant": "plain"
}, omit(paginationProps, ["color"])), null)])]);
});
return {};
}
});
// node_modules/vuetify/lib/components/VDataTable/VDataTableColumn.js
var VDataTableColumn = defineFunctionalComponent({
align: {
type: String,
default: "start"
},
fixed: {
type: [Boolean, String],
default: false
},
fixedOffset: [Number, String],
fixedEndOffset: [Number, String],
height: [Number, String],
lastFixed: Boolean,
firstFixedEnd: Boolean,
noPadding: Boolean,
indent: [Number, String],
empty: Boolean,
tag: String,
width: [Number, String],
maxWidth: [Number, String],
nowrap: Boolean
}, (props, _ref) => {
let {
slots
} = _ref;
const Tag = props.tag ?? "td";
const fixedSide = typeof props.fixed === "string" ? props.fixed : props.fixed ? "start" : "none";
return createVNode(Tag, {
"class": normalizeClass(["v-data-table__td", {
"v-data-table-column--fixed": fixedSide === "start",
"v-data-table-column--fixed-end": fixedSide === "end",
"v-data-table-column--last-fixed": props.lastFixed,
"v-data-table-column--first-fixed-end": props.firstFixedEnd,
"v-data-table-column--no-padding": props.noPadding,
"v-data-table-column--nowrap": props.nowrap,
"v-data-table-column--empty": props.empty
}, `v-data-table-column--align-${props.align}`]),
"style": {
height: convertToUnit(props.height),
width: convertToUnit(props.width),
maxWidth: convertToUnit(props.maxWidth),
left: fixedSide === "start" ? convertToUnit(props.fixedOffset || null) : void 0,
right: fixedSide === "end" ? convertToUnit(props.fixedEndOffset || null) : void 0,
paddingInlineStart: props.indent ? convertToUnit(props.indent) : void 0
}
}, {
default: () => [slots.default?.()]
});
});
// node_modules/vuetify/lib/components/VDataTable/composables/headers.js
var makeDataTableHeaderProps = propsFactory({
headers: Array
}, "DataTable-header");
var VDataTableHeadersSymbol = /* @__PURE__ */ Symbol.for("vuetify:data-table-headers");
var defaultHeader = {
title: "",
sortable: false
};
var defaultActionHeader = {
...defaultHeader,
width: 48
};
function priorityQueue() {
let arr = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [];
const queue = arr.map((element) => ({
element,
priority: 0
}));
return {
enqueue: (element, priority) => {
let added = false;
for (let i = 0; i < queue.length; i++) {
const item = queue[i];
if (item.priority > priority) {
queue.splice(i, 0, {
element,
priority
});
added = true;
break;
}
}
if (!added) queue.push({
element,
priority
});
},
size: () => queue.length,
count: () => {
let count = 0;
if (!queue.length) return 0;
const whole = Math.floor(queue[0].priority);
for (let i = 0; i < queue.length; i++) {
if (Math.floor(queue[i].priority) === whole) count += 1;
}
return count;
},
dequeue: () => {
return queue.shift();
}
};
}
function extractLeaves(item) {
let columns = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
if (!item.children) {
columns.push(item);
} else {
for (const child of item.children) {
extractLeaves(child, columns);
}
}
return columns;
}
function extractKeys(headers) {
let keys = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : /* @__PURE__ */ new Set();
for (const item of headers) {
if (item.key) keys.add(item.key);
if (item.children) {
extractKeys(item.children, keys);
}
}
return keys;
}
function getDefaultItem(item) {
if (!item.key) return void 0;
if (item.key === "data-table-group") return defaultHeader;
if (["data-table-expand", "data-table-select"].includes(item.key)) return defaultActionHeader;
return void 0;
}
function getDepth(item) {
let depth = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
if (!item.children) return depth;
return Math.max(depth, ...item.children.map((child) => getDepth(child, depth + 1)));
}
function parseFixedColumns(items) {
let seenFixed = false;
function setFixed(item, side) {
let parentFixedSide = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "none";
if (!item) return;
if (parentFixedSide !== "none") {
item.fixed = parentFixedSide;
}
if (item.fixed === true) {
item.fixed = "start";
}
if (item.fixed === side) {
if (item.children) {
if (side === "start") {
for (let i = item.children.length - 1; i >= 0; i--) {
setFixed(item.children[i], side, side);
}
} else {
for (let i = 0; i < item.children.length; i++) {
setFixed(item.children[i], side, side);
}
}
} else {
if (!seenFixed && side === "start") {
item.lastFixed = true;
} else if (!seenFixed && side === "end") {
item.firstFixedEnd = true;
} else if (isNaN(Number(item.width))) {
consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
} else {
item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);
}
seenFixed = true;
}
} else {
if (item.children) {
if (side === "start") {
for (let i = item.children.length - 1; i >= 0; i--) {
setFixed(item.children[i], side);
}
} else {
for (let i = 0; i < item.children.length; i++) {
setFixed(item.children[i], side);
}
}
} else {
seenFixed = false;
}
}
}
for (let i = items.length - 1; i >= 0; i--) {
setFixed(items[i], "start");
}
for (let i = 0; i < items.length; i++) {
setFixed(items[i], "end");
}
let fixedOffset = 0;
for (let i = 0; i < items.length; i++) {
fixedOffset = setFixedOffset(items[i], fixedOffset);
}
let fixedEndOffset = 0;
for (let i = items.length - 1; i >= 0; i--) {
fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);
}
}
function setFixedOffset(item) {
let offset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
if (!item) return offset;
if (item.children) {
item.fixedOffset = offset;
for (const child of item.children) {
offset = setFixedOffset(child, offset);
}
} else if (item.fixed && item.fixed !== "end") {
item.fixedOffset = offset;
offset += parseFloat(item.width || "0") || 0;
}
return offset;
}
function setFixedEndOffset(item) {
let offset = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
if (!item) return offset;
if (item.children) {
item.fixedEndOffset = offset;
for (const child of item.children) {
offset = setFixedEndOffset(child, offset);
}
} else if (item.fixed === "end") {
item.fixedEndOffset = offset;
offset += parseFloat(item.width || "0") || 0;
}
return offset;
}
function parse(items, maxDepth) {
const headers = [];
let currentDepth = 0;
const queue = priorityQueue(items);
while (queue.size() > 0) {
let rowSize = queue.count();
const row = [];
let fraction = 1;
while (rowSize > 0) {
const {
element: item,
priority
} = queue.dequeue();
const diff = maxDepth - currentDepth - getDepth(item);
row.push({
...item,
rowspan: diff ?? 1,
colspan: item.children ? extractLeaves(item).length : 1
});
if (item.children) {
for (const child of item.children) {
const sort = priority % 1 + fraction / Math.pow(10, currentDepth + 2);
queue.enqueue(child, currentDepth + diff + sort);
}
}
fraction += 1;
rowSize -= 1;
}
currentDepth += 1;
headers.push(row);
}
const columns = items.map((item) => extractLeaves(item)).flat();
return {
columns,
headers
};
}
function convertToInternalHeaders(items) {
const internalHeaders = [];
for (const item of items) {
const defaultItem = {
...getDefaultItem(item),
...item
};
const key = defaultItem.key ?? (typeof defaultItem.value === "string" ? defaultItem.value : null);
const value = defaultItem.value ?? key ?? null;
const internalItem = {
...defaultItem,
key,
value,
sortable: defaultItem.sortable ?? (defaultItem.key != null || !!defaultItem.sort),
children: defaultItem.children ? convertToInternalHeaders(defaultItem.children) : void 0
};
internalHeaders.push(internalItem);
}
return internalHeaders;
}
function createHeaders(props, options) {
const headers = ref([]);
const columns = ref([]);
const sortFunctions = ref({});
const sortRawFunctions = ref({});
const filterFunctions = ref({});
watchEffect(() => {
const _headers = props.headers || Object.keys(props.items[0] ?? {}).map((key) => ({
key,
title: capitalize(key)
}));
const items = _headers.slice();
const keys = extractKeys(items);
if (options?.groupBy?.value.length && !keys.has("data-table-group")) {
items.unshift({
key: "data-table-group",
title: "Group"
});
}
if (options?.showSelect?.value && !keys.has("data-table-select")) {
items.unshift({
key: "data-table-select"
});
}
if (options?.showExpand?.value && !keys.has("data-table-expand")) {
items.push({
key: "data-table-expand"
});
}
const internalHeaders = convertToInternalHeaders(items);
parseFixedColumns(internalHeaders);
const maxDepth = Math.max(...internalHeaders.map((item) => getDepth(item))) + 1;
const parsed = parse(internalHeaders, maxDepth);
headers.value = parsed.headers;
columns.value = parsed.columns;
const flatHeaders = parsed.headers.flat(1);
for (const header of flatHeaders) {
if (!header.key) continue;
if (header.sortable) {
if (header.sort) {
sortFunctions.value[header.key] = header.sort;
}
if (header.sortRaw) {
sortRawFunctions.value[header.key] = header.sortRaw;
}
}
if (header.filter) {
filterFunctions.value[header.key] = header.filter;
}
}
});
const data = {
headers,
columns,
sortFunctions,
sortRawFunctions,
filterFunctions
};
provide(VDataTableHeadersSymbol, data);
return data;
}
function useHeaders() {
const data = inject(VDataTableHeadersSymbol);
if (!data) throw new Error("Missing headers!");
return data;
}
// node_modules/vuetify/lib/components/VDataTable/composables/select.js
var singleSelectStrategy = {
showSelectAll: false,
allSelected: () => [],
select: (_ref) => {
let {
items,
value
} = _ref;
return new Set(value ? [items[0]?.value] : []);
},
selectAll: (_ref2) => {
let {
selected
} = _ref2;
return selected;
}
};
var pageSelectStrategy = {
showSelectAll: true,
allSelected: (_ref3) => {
let {
currentPage
} = _ref3;
return currentPage;
},
select: (_ref4) => {
let {
items,
value,
selected
} = _ref4;
for (const item of items) {
if (value) selected.add(item.value);
else selected.delete(item.value);
}
return selected;
},
selectAll: (_ref5) => {
let {
value,
currentPage,
selected
} = _ref5;
return pageSelectStrategy.select({
items: currentPage,
value,
selected
});
}
};
var allSelectStrategy = {
showSelectAll: true,
allSelected: (_ref6) => {
let {
allItems
} = _ref6;
return allItems;
},
select: (_ref7) => {
let {
items,
value,
selected
} = _ref7;
for (const item of items) {
if (value) selected.add(item.value);
else selected.delete(item.value);
}
return selected;
},
selectAll: (_ref8) => {
let {
value,
allItems
} = _ref8;
return new Set(value ? allItems.map((item) => item.value) : []);
}
};
var makeDataTableSelectProps = propsFactory({
showSelect: Boolean,
selectStrategy: {
type: [String, Object],
default: "page"
},
modelValue: {
type: Array,
default: () => []
},
valueComparator: Function
}, "DataTable-select");
var VDataTableSelectionSymbol = /* @__PURE__ */ Symbol.for("vuetify:data-table-selection");
function provideSelection(props, _ref9) {
let {
allItems,
currentPage
} = _ref9;
const selected = useProxiedModel(props, "modelValue", props.modelValue, (v) => {
const customComparator = props.valueComparator;
if (customComparator) {
return new Set(wrapInArray(v).map((v2) => {
return allItems.value.find((item) => customComparator(v2, item.value))?.value ?? v2;
}));
}
return new Set(wrapInArray(v).map((v2) => {
return isPrimitive(v2) ? allItems.value.find((item) => v2 === item.value)?.value ?? v2 : allItems.value.find((item) => deepEqual(v2, item.value))?.value ?? v2;
}));
}, (v) => {
return [...v.values()];
});
const allSelectable = computed(() => allItems.value.filter((item) => item.selectable));
const currentPageSelectable = computed(() => currentPage.value.filter((item) => item.selectable));
const selectStrategy = computed(() => {
if (typeof props.selectStrategy === "object") return props.selectStrategy;
switch (props.selectStrategy) {
case "single":
return singleSelectStrategy;
case "all":
return allSelectStrategy;
case "page":
default:
return pageSelectStrategy;
}
});
const lastSelectedIndex = shallowRef(null);
function isSelected(items) {
return wrapInArray(items).every((item) => selected.value.has(item.value));
}
function isSomeSelected(items) {
return wrapInArray(items).some((item) => selected.value.has(item.value));
}
function select(items, value) {
const newSelected = selectStrategy.value.select({
items,
value,
selected: new Set(selected.value)
});
selected.value = newSelected;
}
function toggleSelect(item, index, event) {
const items = [];
index = index ?? currentPage.value.findIndex((i) => i.value === item.value);
if (props.selectStrategy !== "single" && event?.shiftKey && lastSelectedIndex.value !== null) {
const [start, end] = [lastSelectedIndex.value, index].sort((a, b) => a - b);
items.push(...currentPage.value.slice(start, end + 1).filter((item2) => item2.selectable));
} else {
items.push(item);
lastSelectedIndex.value = index;
}
select(items, !isSelected([item]));
}
function selectAll(value) {
const newSelected = selectStrategy.value.selectAll({
value,
allItems: allSelectable.value,
currentPage: currentPageSelectable.value,
selected: new Set(selected.value)
});
selected.value = newSelected;
}
const someSelected = computed(() => selected.value.size > 0);
const allSelected = computed(() => {
const items = selectStrategy.value.allSelected({
allItems: allSelectable.value,
currentPage: currentPageSelectable.value
});
return !!items.length && isSelected(items);
});
const showSelectAll = toRef(() => selectStrategy.value.showSelectAll);
const data = {
toggleSelect,
select,
selectAll,
isSelected,
isSomeSelected,
someSelected,
allSelected,
showSelectAll,
lastSelectedIndex,
selectStrategy
};
provide(VDataTableSelectionSymbol, data);
return data;
}
function useSelection() {
const data = inject(VDataTableSelectionSymbol);
if (!data) throw new Error("Missing selection!");
return data;
}
// node_modules/vuetify/lib/components/VDataTable/composables/sort.js
var makeDataTableSortProps = propsFactory({
initialSortOrder: {
type: String,
default: "asc",
validator: (v) => !v || ["asc", "desc"].includes(v)
},
sortBy: {
type: Array,
default: () => []
},
customKeySort: Object,
multiSort: {
type: [Boolean, Object],
default: false
},
mustSort: Boolean
}, "DataTable-sort");
var VDataTableSortSymbol = /* @__PURE__ */ Symbol.for("vuetify:data-table-sort");
function createSort(props) {
const initialSortOrder = toRef(() => props.initialSortOrder);
const sortBy = useProxiedModel(props, "sortBy");
const mustSort = toRef(() => props.mustSort);
const multiSort = toRef(() => props.multiSort);
return {
initialSortOrder,
sortBy,
multiSort,
mustSort
};
}
function resolveMultiSort(multiSort, event) {
if (!isObject(multiSort)) {
return {
active: !!multiSort
};
}
const {
key,
mode,
modifier
} = multiSort;
const reverseMode = modifier === "alt" && event?.altKey || modifier === "shift" && event?.shiftKey;
return {
active: !key || event?.ctrlKey || event?.metaKey || false,
mode: reverseMode ? mode === "append" ? "prepend" : "append" : mode
};
}
function provideSort(options) {
const {
initialSortOrder,
sortBy,
mustSort,
multiSort,
page
} = options;
const toggleSort = (column, event) => {
if (column.key == null) return;
let newSortBy = sortBy.value.map((x) => ({
...x
})) ?? [];
const item = newSortBy.find((x) => x.key === column.key);
const initialOrder = initialSortOrder.value;
const secondaryOrder = initialSortOrder.value === "desc" ? "asc" : "desc";
if (!item) {
const {
active,
mode
} = resolveMultiSort(multiSort.value, event);
if (active) {
if (mode === "prepend") {
newSortBy.unshift({
key: column.key,
order: initialOrder
});
} else {
newSortBy.push({
key: column.key,
order: initialOrder
});
}
} else {
newSortBy = [{
key: column.key,
order: initialOrder
}];
}
} else if (item.order === secondaryOrder) {
if (mustSort.value && newSortBy.length === 1) {
item.order = initialSortOrder.value;
} else {
newSortBy = newSortBy.filter((x) => x.key !== column.key);
}
} else {
item.order = secondaryOrder;
}
sortBy.value = newSortBy;
if (page) page.value = 1;
};
function isSorted(column) {
return !!sortBy.value.find((item) => item.key === column.key);
}
const data = {
sortBy,
toggleSort,
isSorted
};
provide(VDataTableSortSymbol, data);
return data;
}
function useSort() {
const data = inject(VDataTableSortSymbol);
if (!data) throw new Error("Missing sort!");
return data;
}
function useSortedItems(props, items, sortBy, options) {
const locale = useLocale();
const sortedItems = computed(() => {
if (!sortBy.value.length) return items.value;
return sortItems(items.value, sortBy.value, locale.current.value, {
transform: options?.transform,
sortFunctions: {
...props.customKeySort,
...options?.sortFunctions?.value
},
sortRawFunctions: options?.sortRawFunctions?.value
});
});
return {
sortedItems
};
}
function sortItems(items, sortByItems, locale, options) {
const stringCollator = new Intl.Collator(locale, {
sensitivity: "accent",
usage: "sort"
});
const transformedItems = items.map((item) => [item, options?.transform ? options.transform(item) : item]);
return transformedItems.sort((a, b) => {
for (let i = 0; i < sortByItems.length; i++) {
let hasCustomResult = false;
const sortKey = sortByItems[i].key;
const sortOrder = sortByItems[i].order ?? "asc";
if (sortOrder === false) continue;
let sortA = getObjectValueByPath(a[1], sortKey);
let sortB = getObjectValueByPath(b[1], sortKey);
let sortARaw = a[0].raw;
let sortBRaw = b[0].raw;
if (sortOrder === "desc") {
[sortA, sortB] = [sortB, sortA];
[sortARaw, sortBRaw] = [sortBRaw, sortARaw];
}
if (options?.sortRawFunctions?.[sortKey]) {
const customResult = options.sortRawFunctions[sortKey](sortARaw, sortBRaw);
if (customResult == null) continue;
hasCustomResult = true;
if (customResult) return customResult;
}
if (options?.sortFunctions?.[sortKey]) {
const customResult = options.sortFunctions[sortKey](sortA, sortB);
if (customResult == null) continue;
hasCustomResult = true;
if (customResult) return customResult;
}
if (hasCustomResult) continue;
if (sortA instanceof Date && sortB instanceof Date) {
sortA = sortA.getTime();
sortB = sortB.getTime();
}
[sortA, sortB] = [sortA, sortB].map((s) => s != null ? s.toString().toLocaleLowerCase() : s);
if (sortA !== sortB) {
if (isEmpty(sortA) && isEmpty(sortB)) return 0;
if (isEmpty(sortA)) return -1;
if (isEmpty(sortB)) return 1;
if (!isNaN(sortA) && !isNaN(sortB)) return Number(sortA) - Number(sortB);
return stringCollator.compare(sortA, sortB);
}
}
return 0;
}).map((_ref) => {
let [item] = _ref;
return item;
});
}
// node_modules/vuetify/lib/components/VDataTable/VDataTableHeaders.js
var makeVDataTableHeadersProps = propsFactory({
color: String,
disableSort: Boolean,
fixedHeader: Boolean,
multiSort: Boolean,
initialSortOrder: String,
sortAscIcon: {
type: IconValue,
default: "$sortAsc"
},
sortDescIcon: {
type: IconValue,
default: "$sortDesc"
},
headerProps: {
type: Object
},
/** @deprecated */
sticky: Boolean,
...makeDensityProps(),
...makeDisplayProps(),
...makeLoaderProps()
}, "VDataTableHeaders");
var VDataTableHeaders = genericComponent()({
name: "VDataTableHeaders",
props: makeVDataTableHeadersProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
t
} = useLocale();
const {
toggleSort,
sortBy,
isSorted
} = useSort();
const {
someSelected,
allSelected,
selectAll,
showSelectAll
} = useSelection();
const {
columns,
headers
} = useHeaders();
const {
loaderClasses
} = useLoader(props);
function getFixedStyles(column, y) {
if (!(props.sticky || props.fixedHeader) && !column.fixed) return void 0;
const fixedSide = typeof column.fixed === "string" ? column.fixed : column.fixed ? "start" : "none";
return {
position: "sticky",
left: fixedSide === "start" ? convertToUnit(column.fixedOffset) : void 0,
right: fixedSide === "end" ? convertToUnit(column.fixedEndOffset) : void 0,
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : void 0
};
}
function handleEnterKeyPress(event, column) {
if (event.key === "Enter" && !props.disableSort) {
toggleSort(column, event);
}
}
function getSortIcon(column) {
const item = sortBy.value.find((item2) => item2.key === column.key);
return !item && props.initialSortOrder === "asc" || item?.order === "asc" ? props.sortAscIcon : props.sortDescIcon;
}
const {
backgroundColorClasses,
backgroundColorStyles
} = useBackgroundColor(() => props.color);
const {
displayClasses,
mobile
} = useDisplay(props);
const slotProps = computed(() => ({
headers: headers.value,
columns: columns.value,
toggleSort,
isSorted,
sortBy: sortBy.value,
someSelected: someSelected.value,
allSelected: allSelected.value,
selectAll,
getSortIcon
}));
const headerCellClasses = computed(() => ["v-data-table__th", {
"v-data-table__th--sticky": props.sticky || props.fixedHeader
}, displayClasses.value, loaderClasses.value]);
const VDataTableHeaderCell = (_ref2) => {
let {
column,
x,
y
} = _ref2;
const noPadding = column.key === "data-table-select" || column.key === "data-table-expand";
const isEmpty2 = column.key === "data-table-group" && column.width === 0 && !column.title;
const headerProps = mergeProps(props.headerProps ?? {}, column.headerProps ?? {});
return createVNode(VDataTableColumn, mergeProps({
"tag": "th",
"align": column.align,
"class": [{
"v-data-table__th--sortable": column.sortable && !props.disableSort,
"v-data-table__th--sorted": isSorted(column),
"v-data-table__th--fixed": column.fixed
}, ...headerCellClasses.value],
"style": {
width: convertToUnit(column.width),
minWidth: convertToUnit(column.minWidth),
maxWidth: convertToUnit(column.maxWidth),
...getFixedStyles(column, y)
},
"colspan": column.colspan,
"rowspan": column.rowspan,
"fixed": column.fixed,
"nowrap": column.nowrap,
"lastFixed": column.lastFixed,
"firstFixedEnd": column.firstFixedEnd,
"noPadding": noPadding,
"empty": isEmpty2,
"tabindex": column.sortable ? 0 : void 0,
"onClick": column.sortable ? (event) => toggleSort(column, event) : void 0,
"onKeydown": column.sortable ? (event) => handleEnterKeyPress(event, column) : void 0
}, headerProps), {
default: () => {
const columnSlotName = `header.${column.key}`;
const columnSlotProps = {
column,
selectAll,
isSorted,
toggleSort,
sortBy: sortBy.value,
someSelected: someSelected.value,
allSelected: allSelected.value,
getSortIcon
};
if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
if (isEmpty2) return "";
if (column.key === "data-table-select") {
return slots["header.data-table-select"]?.(columnSlotProps) ?? (showSelectAll.value && createVNode(VCheckboxBtn, {
"color": props.color,
"density": props.density,
"modelValue": allSelected.value,
"indeterminate": someSelected.value && !allSelected.value,
"onUpdate:modelValue": selectAll
}, null));
}
return createBaseVNode("div", {
"class": "v-data-table-header__content"
}, [createBaseVNode("span", null, [column.title]), column.sortable && !props.disableSort && createVNode(VIcon, {
"key": "icon",
"class": "v-data-table-header__sort-icon",
"icon": getSortIcon(column)
}, null), props.multiSort && isSorted(column) && createBaseVNode("div", {
"key": "badge",
"class": normalizeClass(["v-data-table-header__sort-badge", ...backgroundColorClasses.value]),
"style": normalizeStyle(backgroundColorStyles.value)
}, [sortBy.value.findIndex((x2) => x2.key === column.key) + 1])]);
}
});
};
const VDataTableMobileHeaderCell = () => {
const displayItems = computed(() => {
return columns.value.filter((column) => column?.sortable && !props.disableSort);
});
const showSelectColumn = columns.value.find((column) => column.key === "data-table-select");
return createVNode(VDataTableColumn, mergeProps({
"tag": "th",
"class": [...headerCellClasses.value],
"colspan": headers.value.length + 1
}, props.headerProps), {
default: () => [createBaseVNode("div", {
"class": "v-data-table-header__content"
}, [createVNode(VSelect, {
"chips": true,
"color": props.color,
"class": "v-data-table__td-sort-select",
"clearable": true,
"density": "default",
"items": displayItems.value,
"label": t("$vuetify.dataTable.sortBy"),
"multiple": props.multiSort,
"variant": "underlined",
"onClick:clear": () => sortBy.value = []
}, {
append: showSelectColumn ? () => createVNode(VCheckboxBtn, {
"color": props.color,
"density": "compact",
"modelValue": allSelected.value,
"indeterminate": someSelected.value && !allSelected.value,
"onUpdate:modelValue": () => selectAll(!allSelected.value)
}, null) : void 0,
chip: (props2) => createVNode(VChip, {
"onClick": props2.item.raw?.sortable ? () => toggleSort(props2.item.raw) : void 0,
"onMousedown": (e) => {
e.preventDefault();
e.stopPropagation();
}
}, {
default: () => [props2.item.title, createVNode(VIcon, {
"class": normalizeClass(["v-data-table__td-sort-icon", isSorted(props2.item.raw) && "v-data-table__td-sort-icon-active"]),
"icon": getSortIcon(props2.item.raw),
"size": "small"
}, null)]
})
})])]
});
};
useRender(() => {
return mobile.value ? createBaseVNode("tr", null, [createVNode(VDataTableMobileHeaderCell, null, null)]) : createBaseVNode(Fragment, null, [slots.headers ? slots.headers(slotProps.value) : headers.value.map((row, y) => createBaseVNode("tr", null, [row.map((column, x) => createVNode(VDataTableHeaderCell, {
"column": column,
"x": x,
"y": y
}, null))])), props.loading && createBaseVNode("tr", {
"class": "v-data-table-progress"
}, [createBaseVNode("th", {
"colspan": columns.value.length
}, [createVNode(LoaderSlot, {
"name": "v-data-table-progress",
"absolute": true,
"active": true,
"color": typeof props.loading === "boolean" || props.loading === "true" ? props.color : props.loading,
"indeterminate": true
}, {
default: slots.loader
})])])]);
});
}
});
// node_modules/vuetify/lib/components/VDataTable/composables/group.js
var makeDataTableGroupProps = propsFactory({
groupBy: {
type: Array,
default: () => []
}
}, "DataTable-group");
var VDataTableGroupSymbol = /* @__PURE__ */ Symbol.for("vuetify:data-table-group");
function createGroupBy(props) {
const groupBy = useProxiedModel(props, "groupBy");
return {
groupBy
};
}
function provideGroupBy(options) {
const {
disableSort,
groupBy,
sortBy
} = options;
const opened = ref(/* @__PURE__ */ new Set());
const sortByWithGroups = computed(() => {
return groupBy.value.map((val) => ({
...val,
order: val.order ?? false
})).concat(disableSort?.value ? [] : sortBy.value);
});
function isGroupOpen(group) {
return opened.value.has(group.id);
}
function toggleGroup(group) {
const newOpened = new Set(opened.value);
if (!isGroupOpen(group)) newOpened.add(group.id);
else newOpened.delete(group.id);
opened.value = newOpened;
}
function extractRows(items) {
function dive(group) {
const arr = [];
for (const item of group.items) {
if ("type" in item && item.type === "group") {
arr.push(...dive(item));
} else {
arr.push(item);
}
}
return [...new Set(arr)];
}
return dive({
type: "group",
items,
id: "dummy",
key: "dummy",
value: "dummy",
depth: 0
});
}
const data = {
sortByWithGroups,
toggleGroup,
opened,
groupBy,
extractRows,
isGroupOpen
};
provide(VDataTableGroupSymbol, data);
return data;
}
function useGroupBy() {
const data = inject(VDataTableGroupSymbol);
if (!data) throw new Error("Missing group!");
return data;
}
function groupItemsByProperty(items, groupBy) {
if (!items.length) return [];
const groups = /* @__PURE__ */ new Map();
for (const item of items) {
const value = getObjectValueByPath(item.raw, groupBy);
if (!groups.has(value)) {
groups.set(value, []);
}
groups.get(value).push(item);
}
return groups;
}
function groupItems(items, groupBy) {
let depth = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
let prefix = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : "root";
if (!groupBy.length) return [];
const groupedItems = groupItemsByProperty(items, groupBy[0]);
const groups = [];
const rest = groupBy.slice(1);
groupedItems.forEach((items2, value) => {
const key = groupBy[0];
const id = `${prefix}_${key}_${value}`;
groups.push({
depth,
id,
key,
value,
items: rest.length ? groupItems(items2, rest, depth + 1, id) : items2,
type: "group"
});
});
return groups;
}
function flattenItems(items, opened, hasSummary) {
const flatItems = [];
for (const item of items) {
if ("type" in item && item.type === "group") {
if (item.value != null) {
flatItems.push(item);
}
if (opened.has(item.id) || item.value == null) {
flatItems.push(...flattenItems(item.items, opened, hasSummary));
if (hasSummary) {
flatItems.push({
...item,
type: "group-summary"
});
}
}
} else {
flatItems.push(item);
}
}
return flatItems;
}
function useGroupedItems(items, groupBy, opened, hasSummary) {
const flatItems = computed(() => {
if (!groupBy.value.length) return items.value;
const groupedItems = groupItems(items.value, groupBy.value.map((item) => item.key));
return flattenItems(groupedItems, opened.value, toValue(hasSummary));
});
return {
flatItems
};
}
// node_modules/vuetify/lib/components/VDataTable/VDataTableGroupHeaderRow.js
var makeVDataTableGroupHeaderRowProps = propsFactory({
item: {
type: Object,
required: true
},
groupCollapseIcon: {
type: IconValue,
default: "$tableGroupCollapse"
},
groupExpandIcon: {
type: IconValue,
default: "$tableGroupExpand"
},
...makeDensityProps()
}, "VDataTableGroupHeaderRow");
var VDataTableGroupHeaderRow = genericComponent()({
name: "VDataTableGroupHeaderRow",
props: makeVDataTableGroupHeaderRowProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
isGroupOpen,
toggleGroup,
extractRows
} = useGroupBy();
const {
isSelected,
isSomeSelected,
select
} = useSelection();
const {
columns
} = useHeaders();
const rows = computed(() => {
return extractRows([props.item]);
});
const colspan = toRef(() => columns.value.length - (columns.value.some((c) => c.key === "data-table-select") ? 1 : 0));
return () => createBaseVNode("tr", {
"class": "v-data-table-group-header-row",
"style": {
"--v-data-table-group-header-row-depth": props.item.depth
}
}, [columns.value.map((column) => {
if (column.key === "data-table-group") {
const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;
const onClick = () => toggleGroup(props.item);
return slots["data-table-group"]?.({
item: props.item,
count: rows.value.length,
props: {
icon,
onClick
}
}) ?? createVNode(VDataTableColumn, {
"class": "v-data-table-group-header-row__column",
"colspan": colspan.value
}, {
default: () => [createVNode(VBtn, {
"size": "small",
"variant": "text",
"icon": icon,
"onClick": onClick
}, null), createBaseVNode("span", null, [props.item.value]), createBaseVNode("span", null, [createTextVNode("("), rows.value.length, createTextVNode(")")])]
});
} else if (column.key === "data-table-select") {
const selectableRows = rows.value.filter((x) => x.selectable);
const modelValue = selectableRows.length > 0 && isSelected(selectableRows);
const indeterminate = isSomeSelected(selectableRows) && !modelValue;
const selectGroup = (v) => select(selectableRows, v);
return slots["data-table-select"]?.({
props: {
modelValue,
indeterminate,
"onUpdate:modelValue": selectGroup
}
}) ?? createVNode(VDataTableColumn, {
"class": "v-data-table__td--select-row",
"noPadding": true
}, {
default: () => [createVNode(VCheckboxBtn, {
"density": props.density,
"disabled": selectableRows.length === 0,
"modelValue": modelValue,
"indeterminate": indeterminate,
"onUpdate:modelValue": selectGroup
}, null)]
});
}
return "";
})]);
}
});
// node_modules/vuetify/lib/components/VDataTable/composables/expand.js
var makeDataTableExpandProps = propsFactory({
expandOnClick: Boolean,
showExpand: Boolean,
expanded: {
type: Array,
default: () => []
}
}, "DataTable-expand");
var VDataTableExpandedKey = /* @__PURE__ */ Symbol.for("vuetify:datatable:expanded");
function provideExpanded(props) {
const expandOnClick = toRef(() => props.expandOnClick);
const expanded = useProxiedModel(props, "expanded", props.expanded, (v) => {
return new Set(v);
}, (v) => {
return [...v.values()];
});
function expand(item, value) {
const newExpanded = new Set(expanded.value);
const rawValue = toRaw(item.value);
if (!value) {
const item2 = [...expanded.value].find((x) => toRaw(x) === rawValue);
newExpanded.delete(item2);
} else {
newExpanded.add(rawValue);
}
expanded.value = newExpanded;
}
function isExpanded(item) {
const rawValue = toRaw(item.value);
return [...expanded.value].some((x) => toRaw(x) === rawValue);
}
function toggleExpand(item) {
expand(item, !isExpanded(item));
}
const data = {
expand,
expanded,
expandOnClick,
isExpanded,
toggleExpand
};
provide(VDataTableExpandedKey, data);
return data;
}
function useExpanded() {
const data = inject(VDataTableExpandedKey);
if (!data) throw new Error("foo");
return data;
}
// node_modules/vuetify/lib/components/VDataTable/VDataTableRow.js
var makeVDataTableRowProps = propsFactory({
color: String,
index: Number,
item: Object,
cellProps: [Object, Function],
collapseIcon: {
type: IconValue,
default: "$collapse"
},
expandIcon: {
type: IconValue,
default: "$expand"
},
onClick: EventProp(),
onContextmenu: EventProp(),
onDblclick: EventProp(),
...makeDensityProps(),
...makeDisplayProps()
}, "VDataTableRow");
var VDataTableRow = genericComponent()({
name: "VDataTableRow",
props: makeVDataTableRowProps(),
setup(props, _ref) {
let {
slots
} = _ref;
const {
displayClasses,
mobile
} = useDisplay(props, "v-data-table__tr");
const {
isSelected,
toggleSelect,
someSelected,
allSelected,
selectAll
} = useSelection();
const {
isExpanded,
toggleExpand
} = useExpanded();
const {
toggleSort,
sortBy,
isSorted
} = useSort();
const {
columns
} = useHeaders();
useRender(() => createBaseVNode("tr", {
"class": normalizeClass(["v-data-table__tr", {
"v-data-table__tr--clickable": !!(props.onClick || props.onContextmenu || props.onDblclick)
}, displayClasses.value]),
"onClick": props.onClick,
"onContextmenu": props.onContextmenu,
"onDblclick": props.onDblclick
}, [props.item && columns.value.map((column, i) => {
const item = props.item;
const slotName = `item.${column.key}`;
const headerSlotName = `header.${column.key}`;
const slotProps = {
index: props.index,
item: item.raw,
internalItem: item,
value: getObjectValueByPath(item.columns, column.key),
column,
isSelected,
toggleSelect,
isExpanded,
toggleExpand
};
const columnSlotProps = {
column,
selectAll,
isSorted,
toggleSort,
sortBy: sortBy.value,
someSelected: someSelected.value,
allSelected: allSelected.value,
getSortIcon: () => ""
};
const cellProps = typeof props.cellProps === "function" ? props.cellProps({
index: slotProps.index,
item: slotProps.item,
internalItem: slotProps.internalItem,
value: slotProps.value,
column
}) : props.cellProps;
const columnCellProps = typeof column.cellProps === "function" ? column.cellProps({
index: slotProps.index,
item: slotProps.item,
internalItem: slotProps.internalItem,
value: slotProps.value
}) : column.cellProps;
const noPadding = column.key === "data-table-select" || column.key === "data-table-expand";
const isEmpty2 = column.key === "data-table-group" && column.width === 0 && !column.title;
return createVNode(VDataTableColumn, mergeProps({
"align": column.align,
"indent": column.indent,
"class": {
"v-data-table__td--expanded-row": column.key === "data-table-expand",
"v-data-table__td--select-row": column.key === "data-table-select"
},
"fixed": column.fixed,
"fixedOffset": column.fixedOffset,
"fixedEndOffset": column.fixedEndOffset,
"lastFixed": column.lastFixed,
"firstFixedEnd": column.firstFixedEnd,
"maxWidth": !mobile.value ? column.maxWidth : void 0,
"noPadding": noPadding,
"empty": isEmpty2,
"nowrap": column.nowrap,
"width": !mobile.value ? column.width : void 0
}, cellProps, columnCellProps), {
default: () => {
if (column.key === "data-table-select") {
return slots["item.data-table-select"]?.({
...slotProps,
props: {
color: props.color,
disabled: !item.selectable,
modelValue: isSelected([item]),
onClick: withModifiers(() => toggleSelect(item), ["stop"])
}
}) ?? createVNode(VCheckboxBtn, {
"color": props.color,
"disabled": !item.selectable,
"density": props.density,
"modelValue": isSelected([item]),
"onClick": withModifiers((event) => toggleSelect(item, props.index, event), ["stop"])
}, null);
}
if (column.key === "data-table-expand") {
return slots["item.data-table-expand"]?.({
...slotProps,
props: {
icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,
size: "small",
variant: "text",
onClick: withModifiers(() => toggleExpand(item), ["stop"])
}
}) ?? createVNode(VBtn, {
"icon": isExpanded(item) ? props.collapseIcon : props.expandIcon,
"size": "small",
"variant": "text",
"onClick": withModifiers(() => toggleExpand(item), ["stop"])
}, null);
}
if (slots[slotName] && !mobile.value) return slots[slotName](slotProps);
const displayValue = toDisplayString(slotProps.value);
return !mobile.value ? displayValue : createBaseVNode(Fragment, null, [createBaseVNode("div", {
"class": "v-data-table__td-title"
}, [slots[headerSlotName]?.(columnSlotProps) ?? column.title]), createBaseVNode("div", {
"class": "v-data-table__td-value"
}, [slots[slotName]?.(slotProps) ?? displayValue])]);
}
});
})]));
}
});
// node_modules/vuetify/lib/components/VDataTable/VDataTableRows.js
var makeVDataTableRowsProps = propsFactory({
color: String,
loading: [Boolean, String],
loadingText: {
type: String,
default: "$vuetify.dataIterator.loadingText"
},
hideNoData: Boolean,
items: {
type: Array,
default: () => []
},
noDataText: {
type: String,
default: "$vuetify.noDataText"
},
rowProps: [Object, Function],
cellProps: [Object, Function],
...pick(makeVDataTableRowProps(), ["collapseIcon", "expandIcon", "density"]),
...pick(makeVDataTableGroupHeaderRowProps(), ["groupCollapseIcon", "groupExpandIcon", "density"]),
...makeDisplayProps()
}, "VDataTableRows");
var VDataTableRows = genericComponent()({
name: "VDataTableRows",
inheritAttrs: false,
props: makeVDataTableRowsProps(),
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
columns
} = useHeaders();
const {
expandOnClick,
toggleExpand,
isExpanded
} = useExpanded();
const {
isSelected,
toggleSelect
} = useSelection();
const {
toggleGroup,
isGroupOpen
} = useGroupBy();
const {
t
} = useLocale();
const {
mobile
} = useDisplay(props);
useRender(() => {
const groupHeaderRowProps = pick(props, ["groupCollapseIcon", "groupExpandIcon", "density"]);
if (props.loading && (!props.items.length || slots.loading)) {
return createBaseVNode("tr", {
"class": "v-data-table-rows-loading",
"key": "loading"
}, [createBaseVNode("td", {
"colspan": columns.value.length
}, [slots.loading?.() ?? t(props.loadingText)])]);
}
if (!props.loading && !props.items.length && !props.hideNoData) {
return createBaseVNode("tr", {
"class": "v-data-table-rows-no-data",
"key": "no-data"
}, [createBaseVNode("td", {
"colspan": columns.value.length
}, [slots["no-data"]?.() ?? t(props.noDataText)])]);
}
return createBaseVNode(Fragment, null, [props.items.map((item, index) => {
if (item.type === "group") {
const slotProps2 = {
index,
item,
columns: columns.value,
isExpanded,
toggleExpand,
isSelected,
toggleSelect,
toggleGroup,
isGroupOpen
};
return slots["group-header"] ? slots["group-header"](slotProps2) : createVNode(VDataTableGroupHeaderRow, mergeProps({
"key": `group-header_${item.id}`,
"item": item
}, getPrefixedEventHandlers(attrs, ":groupHeader", () => slotProps2), groupHeaderRowProps), slots);
}
if (item.type === "group-summary") {
const slotProps2 = {
index,
item,
columns: columns.value,
toggleGroup
};
return slots["group-summary"]?.(slotProps2) ?? "";
}
const slotProps = {
index: item.virtualIndex ?? index,
item: item.raw,
internalItem: item,
columns: columns.value,
isExpanded,
toggleExpand,
isSelected,
toggleSelect
};
const itemSlotProps = {
...slotProps,
props: mergeProps({
key: `item_${item.key ?? item.index}`,
onClick: expandOnClick.value ? () => {
toggleExpand(item);
} : void 0,
index,
item,
color: props.color,
cellProps: props.cellProps,
collapseIcon: props.collapseIcon,
expandIcon: props.expandIcon,
density: props.density,
mobile: mobile.value
}, getPrefixedEventHandlers(attrs, ":row", () => slotProps), typeof props.rowProps === "function" ? props.rowProps({
item: slotProps.item,
index: slotProps.index,
internalItem: slotProps.internalItem
}) : props.rowProps)
};
return createBaseVNode(Fragment, {
"key": itemSlotProps.props.key
}, [slots.item ? slots.item(itemSlotProps) : createVNode(VDataTableRow, itemSlotProps.props, slots), isExpanded(item) && slots["expanded-row"]?.(slotProps)]);
})]);
});
return {};
}
});
// node_modules/vuetify/lib/components/VTable/VTable.js
import "/home/david/gitea_repo/personal_development/ServerManagerWebApp/frontend/node_modules/vuetify/lib/components/VTable/VTable.css";
var makeVTableProps = propsFactory({
fixedHeader: Boolean,
fixedFooter: Boolean,
height: [Number, String],
hover: Boolean,
striped: {
type: String,
default: null,
validator: (v) => ["even", "odd"].includes(v)
},
...makeComponentProps(),
...makeDensityProps(),
...makeTagProps(),
...makeThemeProps()
}, "VTable");
var VTable = genericComponent()({
name: "VTable",
props: makeVTableProps(),
setup(props, _ref) {
let {
slots,
emit
} = _ref;
const {
themeClasses
} = provideTheme(props);
const {
densityClasses
} = useDensity(props);
useRender(() => createVNode(props.tag, {
"class": normalizeClass(["v-table", {
"v-table--fixed-height": !!props.height,
"v-table--fixed-header": props.fixedHeader,
"v-table--fixed-footer": props.fixedFooter,
"v-table--has-top": !!slots.top,
"v-table--has-bottom": !!slots.bottom,
"v-table--hover": props.hover,
"v-table--striped-even": props.striped === "even",
"v-table--striped-odd": props.striped === "odd"
}, themeClasses.value, densityClasses.value, props.class]),
"style": normalizeStyle(props.style)
}, {
default: () => [slots.top?.(), slots.default ? createBaseVNode("div", {
"class": "v-table__wrapper",
"style": {
height: convertToUnit(props.height)
}
}, [createBaseVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
}));
return {};
}
});
// node_modules/vuetify/lib/components/VDataTable/composables/items.js
var makeDataTableItemsProps = propsFactory({
items: {
type: Array,
default: () => []
},
itemValue: {
type: [String, Array, Function],
default: "id"
},
itemSelectable: {
type: [String, Array, Function],
default: null
},
rowProps: [Object, Function],
cellProps: [Object, Function],
returnObject: Boolean
}, "DataTable-items");
function transformItem(props, item, index, columns) {
const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue);
const selectable = getPropertyFromItem(item, props.itemSelectable, true);
const itemColumns = columns.reduce((obj, column) => {
if (column.key != null) obj[column.key] = getPropertyFromItem(item, column.value);
return obj;
}, {});
return {
type: "item",
key: props.returnObject ? getPropertyFromItem(item, props.itemValue) : value,
index,
value,
selectable,
columns: itemColumns,
raw: item
};
}
function transformItems(props, items, columns) {
return items.map((item, index) => transformItem(props, item, index, columns));
}
function useDataTableItems(props, columns) {
const items = computed(() => transformItems(props, props.items, columns.value));
return {
items
};
}
// node_modules/vuetify/lib/components/VDataTable/composables/options.js
function useOptions(_ref) {
let {
page,
itemsPerPage,
sortBy,
groupBy,
search
} = _ref;
const vm = getCurrentInstance("VDataTable");
const options = () => ({
page: page.value,
itemsPerPage: itemsPerPage.value,
sortBy: sortBy.value,
groupBy: groupBy.value,
search: search.value
});
let oldOptions = null;
watch(options, (value) => {
if (deepEqual(oldOptions, value)) return;
if (oldOptions && oldOptions.search !== value.search) {
page.value = 1;
}
vm.emit("update:options", value);
oldOptions = value;
}, {
deep: true,
immediate: true
});
}
// node_modules/vuetify/lib/components/VDataTable/VDataTable.js
var makeDataTableProps = propsFactory({
...makeVDataTableRowsProps(),
hideDefaultBody: Boolean,
hideDefaultFooter: Boolean,
hideDefaultHeader: Boolean,
width: [String, Number],
search: String,
...makeDataTableExpandProps(),
...makeDataTableGroupProps(),
...makeDataTableHeaderProps(),
...makeDataTableItemsProps(),
...makeDataTableSelectProps(),
...makeDataTableSortProps(),
...omit(makeVDataTableHeadersProps(), ["multiSort", "initialSortOrder"]),
...makeVTableProps()
}, "DataTable");
var makeVDataTableProps = propsFactory({
...makeDataTablePaginateProps(),
...makeDataTableProps(),
...makeFilterProps(),
...makeVDataTableFooterProps()
}, "VDataTable");
var VDataTable = genericComponent()({
name: "VDataTable",
props: makeVDataTableProps(),
emits: {
"update:modelValue": (value) => true,
"update:page": (value) => true,
"update:itemsPerPage": (value) => true,
"update:sortBy": (value) => true,
"update:options": (value) => true,
"update:groupBy": (value) => true,
"update:expanded": (value) => true,
"update:currentItems": (value) => true
},
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
groupBy
} = createGroupBy(props);
const {
initialSortOrder,
sortBy,
multiSort,
mustSort
} = createSort(props);
const {
page,
itemsPerPage
} = createPagination(props);
const {
disableSort
} = toRefs(props);
const {
columns,
headers,
sortFunctions,
sortRawFunctions,
filterFunctions
} = createHeaders(props, {
groupBy,
showSelect: toRef(() => props.showSelect),
showExpand: toRef(() => props.showExpand)
});
const {
items
} = useDataTableItems(props, columns);
const search = toRef(() => props.search);
const {
filteredItems
} = useFilter(props, items, search, {
transform: (item) => item.columns,
customKeyFilter: filterFunctions
});
const {
toggleSort
} = provideSort({
initialSortOrder,
sortBy,
multiSort,
mustSort,
page
});
const {
sortByWithGroups,
opened,
extractRows,
isGroupOpen,
toggleGroup
} = provideGroupBy({
groupBy,
sortBy,
disableSort
});
const {
sortedItems
} = useSortedItems(props, filteredItems, sortByWithGroups, {
transform: (item) => ({
...item.raw,
...item.columns
}),
sortFunctions,
sortRawFunctions
});
const {
flatItems
} = useGroupedItems(sortedItems, groupBy, opened, () => !!slots["group-summary"]);
const itemsLength = computed(() => flatItems.value.length);
const {
startIndex,
stopIndex,
pageCount,
setItemsPerPage
} = providePagination({
page,
itemsPerPage,
itemsLength
});
const {
paginatedItems
} = usePaginatedItems({
items: flatItems,
startIndex,
stopIndex,
itemsPerPage
});
const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value));
const {
isSelected,
select,
selectAll,
toggleSelect,
someSelected,
allSelected
} = provideSelection(props, {
allItems: items,
currentPage: paginatedItemsWithoutGroups
});
const {
isExpanded,
toggleExpand
} = provideExpanded(props);
useOptions({
page,
itemsPerPage,
sortBy,
groupBy,
search
});
provideDefaults({
VDataTableRows: {
hideNoData: toRef(() => props.hideNoData),
noDataText: toRef(() => props.noDataText),
loading: toRef(() => props.loading),
loadingText: toRef(() => props.loadingText)
}
});
const slotProps = computed(() => ({
page: page.value,
itemsPerPage: itemsPerPage.value,
sortBy: sortBy.value,
pageCount: pageCount.value,
toggleSort,
setItemsPerPage,
someSelected: someSelected.value,
allSelected: allSelected.value,
isSelected,
select,
selectAll,
toggleSelect,
isExpanded,
toggleExpand,
isGroupOpen,
toggleGroup,
items: paginatedItemsWithoutGroups.value.map((item) => item.raw),
internalItems: paginatedItemsWithoutGroups.value,
groupedItems: paginatedItems.value,
columns: columns.value,
headers: headers.value
}));
useRender(() => {
const dataTableFooterProps = VDataTableFooter.filterProps(props);
const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ["multiSort"]));
const dataTableRowsProps = VDataTableRows.filterProps(props);
const tableProps = VTable.filterProps(props);
return createVNode(VTable, mergeProps({
"class": ["v-data-table", {
"v-data-table--show-select": props.showSelect,
"v-data-table--loading": props.loading
}, props.class],
"style": props.style
}, tableProps, {
"fixedHeader": props.fixedHeader || props.sticky
}), {
top: () => slots.top?.(slotProps.value),
default: () => slots.default ? slots.default(slotProps.value) : createBaseVNode(Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createBaseVNode("thead", {
"key": "thead"
}, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
"multiSort": !!props.multiSort
}), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createBaseVNode("tbody", null, [slots["body.prepend"]?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
"items": paginatedItems.value
}), slots), slots["body.append"]?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && createBaseVNode(Fragment, null, [createVNode(VDivider, null, null), createVNode(VDataTableFooter, dataTableFooterProps, {
prepend: slots["footer.prepend"]
})])
});
});
return {};
}
});
// node_modules/vuetify/lib/components/VDataTable/VDataTableVirtual.js
var makeVDataTableVirtualProps = propsFactory({
...omit(makeDataTableProps(), ["hideDefaultFooter"]),
...makeDataTableGroupProps(),
...makeVirtualProps(),
...makeFilterProps()
}, "VDataTableVirtual");
var VDataTableVirtual = genericComponent()({
name: "VDataTableVirtual",
props: makeVDataTableVirtualProps(),
emits: {
"update:modelValue": (value) => true,
"update:sortBy": (value) => true,
"update:options": (value) => true,
"update:groupBy": (value) => true,
"update:expanded": (value) => true
},
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
groupBy
} = createGroupBy(props);
const {
initialSortOrder,
sortBy,
multiSort,
mustSort
} = createSort(props);
const {
disableSort
} = toRefs(props);
const {
columns,
headers,
filterFunctions,
sortFunctions,
sortRawFunctions
} = createHeaders(props, {
groupBy,
showSelect: toRef(() => props.showSelect),
showExpand: toRef(() => props.showExpand)
});
const {
items
} = useDataTableItems(props, columns);
const search = toRef(() => props.search);
const {
filteredItems
} = useFilter(props, items, search, {
transform: (item) => item.columns,
customKeyFilter: filterFunctions
});
const {
toggleSort
} = provideSort({
initialSortOrder,
sortBy,
multiSort,
mustSort
});
const {
sortByWithGroups,
opened,
extractRows,
isGroupOpen,
toggleGroup
} = provideGroupBy({
groupBy,
sortBy,
disableSort
});
const {
sortedItems
} = useSortedItems(props, filteredItems, sortByWithGroups, {
transform: (item) => ({
...item.raw,
...item.columns
}),
sortFunctions,
sortRawFunctions
});
const {
flatItems
} = useGroupedItems(sortedItems, groupBy, opened, () => !!slots["group-summary"]);
const allItems = computed(() => extractRows(flatItems.value));
const {
isSelected,
select,
selectAll,
toggleSelect,
someSelected,
allSelected
} = provideSelection(props, {
allItems,
currentPage: allItems
});
const {
isExpanded,
toggleExpand
} = provideExpanded(props);
const {
containerRef,
markerRef,
paddingTop,
paddingBottom,
computedItems,
handleItemResize,
handleScroll,
handleScrollend,
calculateVisibleItems,
scrollToIndex
} = useVirtual(props, flatItems);
const displayItems = computed(() => computedItems.value.map((item) => ({
...item.raw,
virtualIndex: item.index
})));
useOptions({
sortBy,
page: shallowRef(1),
itemsPerPage: shallowRef(-1),
groupBy,
search
});
provideDefaults({
VDataTableRows: {
hideNoData: toRef(() => props.hideNoData),
noDataText: toRef(() => props.noDataText),
loading: toRef(() => props.loading),
loadingText: toRef(() => props.loadingText)
}
});
const slotProps = computed(() => ({
sortBy: sortBy.value,
toggleSort,
someSelected: someSelected.value,
allSelected: allSelected.value,
isSelected,
select,
selectAll,
toggleSelect,
isExpanded,
toggleExpand,
isGroupOpen,
toggleGroup,
items: allItems.value.map((item) => item.raw),
internalItems: allItems.value,
groupedItems: flatItems.value,
columns: columns.value,
headers: headers.value
}));
useRender(() => {
const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ["multiSort"]));
const dataTableRowsProps = VDataTableRows.filterProps(props);
const tableProps = VTable.filterProps(props);
return createVNode(VTable, mergeProps({
"class": ["v-data-table", {
"v-data-table--loading": props.loading
}, props.class],
"style": props.style
}, tableProps, {
"fixedHeader": props.fixedHeader || props.sticky
}), {
top: () => slots.top?.(slotProps.value),
wrapper: () => createBaseVNode("div", {
"ref": containerRef,
"onScrollPassive": handleScroll,
"onScrollend": handleScrollend,
"class": "v-table__wrapper",
"style": {
height: convertToUnit(props.height)
}
}, [createBaseVNode("table", null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createBaseVNode("thead", {
"key": "thead"
}, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
"multiSort": !!props.multiSort
}), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createBaseVNode("tbody", {
"key": "tbody"
}, [createBaseVNode("tr", {
"ref": markerRef,
"style": {
height: convertToUnit(paddingTop.value),
border: 0
}
}, [createBaseVNode("td", {
"colspan": columns.value.length,
"style": {
height: 0,
border: 0
}
}, null)]), slots["body.prepend"]?.(slotProps.value), createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
"items": displayItems.value
}), {
...slots,
item: (itemSlotProps) => createVNode(VVirtualScrollItem, {
"key": itemSlotProps.internalItem.index,
"renderless": true,
"onUpdate:height": (height) => handleItemResize(itemSlotProps.internalItem.index, height)
}, {
default: (_ref2) => {
let {
itemRef
} = _ref2;
return slots.item?.({
...itemSlotProps,
itemRef
}) ?? createVNode(VDataTableRow, mergeProps(itemSlotProps.props, {
"ref": itemRef,
"key": itemSlotProps.internalItem.index,
"index": itemSlotProps.index
}), slots);
}
})
}), slots["body.append"]?.(slotProps.value), createBaseVNode("tr", {
"style": {
height: convertToUnit(paddingBottom.value),
border: 0
}
}, [createBaseVNode("td", {
"colspan": columns.value.length,
"style": {
height: 0,
border: 0
}
}, null)])]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)])]),
bottom: () => slots.bottom?.(slotProps.value)
});
});
return {
calculateVisibleItems,
scrollToIndex
};
}
});
// node_modules/vuetify/lib/components/VDataTable/VDataTableServer.js
var makeVDataTableServerProps = propsFactory({
itemsLength: {
type: [Number, String],
required: true
},
...makeDataTablePaginateProps(),
...makeDataTableProps(),
...makeVDataTableFooterProps()
}, "VDataTableServer");
var VDataTableServer = genericComponent()({
name: "VDataTableServer",
props: makeVDataTableServerProps(),
emits: {
"update:modelValue": (value) => true,
"update:page": (page) => true,
"update:itemsPerPage": (page) => true,
"update:sortBy": (sortBy) => true,
"update:options": (options) => true,
"update:expanded": (options) => true,
"update:groupBy": (value) => true
},
setup(props, _ref) {
let {
attrs,
slots
} = _ref;
const {
groupBy
} = createGroupBy(props);
const {
initialSortOrder,
sortBy,
multiSort,
mustSort
} = createSort(props);
const {
page,
itemsPerPage
} = createPagination(props);
const {
disableSort
} = toRefs(props);
const itemsLength = computed(() => parseInt(props.itemsLength, 10));
const {
columns,
headers
} = createHeaders(props, {
groupBy,
showSelect: toRef(() => props.showSelect),
showExpand: toRef(() => props.showExpand)
});
const {
items
} = useDataTableItems(props, columns);
const {
toggleSort
} = provideSort({
initialSortOrder,
sortBy,
multiSort,
mustSort,
page
});
const {
opened,
isGroupOpen,
toggleGroup,
extractRows
} = provideGroupBy({
groupBy,
sortBy,
disableSort
});
const {
pageCount,
setItemsPerPage
} = providePagination({
page,
itemsPerPage,
itemsLength
});
const {
flatItems
} = useGroupedItems(items, groupBy, opened, () => !!slots["group-summary"]);
const {
isSelected,
select,
selectAll,
toggleSelect,
someSelected,
allSelected
} = provideSelection(props, {
allItems: items,
currentPage: items
});
const {
isExpanded,
toggleExpand
} = provideExpanded(props);
const itemsWithoutGroups = computed(() => extractRows(items.value));
useOptions({
page,
itemsPerPage,
sortBy,
groupBy,
search: toRef(() => props.search)
});
provide("v-data-table", {
toggleSort,
sortBy
});
provideDefaults({
VDataTableRows: {
hideNoData: toRef(() => props.hideNoData),
noDataText: toRef(() => props.noDataText),
loading: toRef(() => props.loading),
loadingText: toRef(() => props.loadingText)
}
});
const slotProps = computed(() => ({
page: page.value,
itemsPerPage: itemsPerPage.value,
sortBy: sortBy.value,
pageCount: pageCount.value,
toggleSort,
setItemsPerPage,
someSelected: someSelected.value,
allSelected: allSelected.value,
isSelected,
select,
selectAll,
toggleSelect,
isExpanded,
toggleExpand,
isGroupOpen,
toggleGroup,
items: itemsWithoutGroups.value.map((item) => item.raw),
internalItems: itemsWithoutGroups.value,
groupedItems: flatItems.value,
columns: columns.value,
headers: headers.value
}));
useRender(() => {
const dataTableFooterProps = VDataTableFooter.filterProps(props);
const dataTableHeadersProps = VDataTableHeaders.filterProps(omit(props, ["multiSort"]));
const dataTableRowsProps = VDataTableRows.filterProps(props);
const tableProps = VTable.filterProps(props);
return createVNode(VTable, mergeProps({
"class": ["v-data-table", {
"v-data-table--loading": props.loading
}, props.class],
"style": props.style
}, tableProps, {
"fixedHeader": props.fixedHeader || props.sticky
}), {
top: () => slots.top?.(slotProps.value),
default: () => slots.default ? slots.default(slotProps.value) : createBaseVNode(Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createBaseVNode("thead", {
"key": "thead",
"class": "v-data-table__thead",
"role": "rowgroup"
}, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
"multiSort": !!props.multiSort
}), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createBaseVNode("tbody", {
"class": "v-data-table__tbody",
"role": "rowgroup"
}, [slots["body.prepend"]?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
"items": flatItems.value
}), slots), slots["body.append"]?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
bottom: () => slots.bottom ? slots.bottom(slotProps.value) : !props.hideDefaultFooter && createBaseVNode(Fragment, null, [createVNode(VDivider, null, null), createVNode(VDataTableFooter, dataTableFooterProps, {
prepend: slots["footer.prepend"]
})])
});
});
}
});
export {
makeDataTableExpandProps,
provideExpanded,
makeDataTableGroupProps,
provideGroupBy,
useGroupedItems,
useOptions,
makeDataTablePaginateProps,
createPagination,
providePagination,
usePaginatedItems,
makeDataTableSelectProps,
provideSelection,
makeDataTableSortProps,
createSort,
provideSort,
useSortedItems,
VPagination,
VDataTableFooter,
VDataTableHeaders,
VDataTableRow,
VDataTableRows,
VTable,
VDataTable,
VDataTableVirtual,
VDataTableServer
};
//# sourceMappingURL=chunk-FCTFWI5H.js.map