Tracking de l'application VApp (IHM du jeu)

This commit is contained in:
2025-05-11 18:04:12 +02:00
commit 89e9db9b62
17763 changed files with 3718499 additions and 0 deletions

26
VApp/node_modules/vuetify/lib/composables/border.mjs generated vendored Normal file
View File

@ -0,0 +1,26 @@
// Utilities
import { computed, isRef } from 'vue';
import { getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeBorderProps = propsFactory({
border: [Boolean, Number, String]
}, 'border');
export function useBorder(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const borderClasses = computed(() => {
const border = isRef(props) ? props.value : props.border;
const classes = [];
if (border === true || border === '') {
classes.push(`${name}--border`);
} else if (typeof border === 'string' || border === 0) {
for (const value of String(border).split(' ')) {
classes.push(`border-${value}`);
}
}
return classes;
});
return {
borderClasses
};
}
//# sourceMappingURL=border.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"border.mjs","names":["computed","isRef","getCurrentInstanceName","propsFactory","makeBorderProps","border","Boolean","Number","String","useBorder","props","name","arguments","length","undefined","borderClasses","value","classes","push","split"],"sources":["../../src/composables/border.ts"],"sourcesContent":["// Utilities\nimport { computed, isRef } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nexport interface BorderProps {\n border?: boolean | number | string\n}\n\n// Composables\nexport const makeBorderProps = propsFactory({\n border: [Boolean, Number, String],\n}, 'border')\n\nexport function useBorder (\n props: BorderProps,\n name = getCurrentInstanceName(),\n) {\n const borderClasses = computed(() => {\n const border = isRef(props) ? props.value : props.border\n const classes: string[] = []\n\n if (border === true || border === '') {\n classes.push(`${name}--border`)\n } else if (\n typeof border === 'string' ||\n border === 0\n ) {\n for (const value of String(border).split(' ')) {\n classes.push(`border-${value}`)\n }\n }\n\n return classes\n })\n\n return { borderClasses }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,sBAAsB,EAAEC,YAAY,6BAE7C;AAKA;AACA,OAAO,MAAMC,eAAe,GAAGD,YAAY,CAAC;EAC1CE,MAAM,EAAE,CAACC,OAAO,EAAEC,MAAM,EAAEC,MAAM;AAClC,CAAC,EAAE,QAAQ,CAAC;AAEZ,OAAO,SAASC,SAASA,CACvBC,KAAkB,EAElB;EAAA,IADAC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGV,sBAAsB,CAAC,CAAC;EAE/B,MAAMa,aAAa,GAAGf,QAAQ,CAAC,MAAM;IACnC,MAAMK,MAAM,GAAGJ,KAAK,CAACS,KAAK,CAAC,GAAGA,KAAK,CAACM,KAAK,GAAGN,KAAK,CAACL,MAAM;IACxD,MAAMY,OAAiB,GAAG,EAAE;IAE5B,IAAIZ,MAAM,KAAK,IAAI,IAAIA,MAAM,KAAK,EAAE,EAAE;MACpCY,OAAO,CAACC,IAAI,CAAE,GAAEP,IAAK,UAAS,CAAC;IACjC,CAAC,MAAM,IACL,OAAON,MAAM,KAAK,QAAQ,IAC1BA,MAAM,KAAK,CAAC,EACZ;MACA,KAAK,MAAMW,KAAK,IAAIR,MAAM,CAACH,MAAM,CAAC,CAACc,KAAK,CAAC,GAAG,CAAC,EAAE;QAC7CF,OAAO,CAACC,IAAI,CAAE,UAASF,KAAM,EAAC,CAAC;MACjC;IACF;IAEA,OAAOC,OAAO;EAChB,CAAC,CAAC;EAEF,OAAO;IAAEF;EAAc,CAAC;AAC1B"}

134
VApp/node_modules/vuetify/lib/composables/calendar.mjs generated vendored Normal file
View File

@ -0,0 +1,134 @@
// Composables
import { getWeek, useDate } from "./date/date.mjs";
import { useProxiedModel } from "./proxiedModel.mjs"; // Utilities
import { computed } from 'vue';
import { propsFactory, wrapInArray } from "../util/index.mjs"; // Types
// Types
// Composables
export const makeCalendarProps = propsFactory({
allowedDates: [Array, Function],
disabled: Boolean,
displayValue: null,
modelValue: Array,
month: [Number, String],
max: null,
min: null,
showAdjacentMonths: Boolean,
year: [Number, String],
weekdays: {
type: Array,
default: () => [0, 1, 2, 3, 4, 5, 6]
}
}, 'calendar');
export function useCalendar(props) {
const adapter = useDate();
const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v));
const displayValue = computed(() => {
if (props.displayValue) return adapter.date(props.displayValue);
if (model.value.length > 0) return adapter.date(model.value[0]);
if (props.min) return adapter.date(props.min);
if (Array.isArray(props.allowedDates)) return adapter.date(props.allowedDates[0]);
return adapter.date();
});
const year = useProxiedModel(props, 'year', undefined, v => {
const value = v != null ? Number(v) : adapter.getYear(displayValue.value);
return adapter.startOfYear(adapter.setYear(adapter.date(), value));
}, v => adapter.getYear(v));
const month = useProxiedModel(props, 'month', undefined, v => {
const value = v != null ? Number(v) : adapter.getMonth(displayValue.value);
const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
return adapter.setMonth(date, value);
}, v => adapter.getMonth(v));
const weeksInMonth = computed(() => {
const weeks = adapter.getWeekArray(month.value);
const days = weeks.flat();
// Make sure there's always 6 weeks in month (6 * 7 days)
// But only do it if we're not hiding adjacent months?
const daysInMonth = 6 * 7;
if (days.length < daysInMonth) {
const lastDay = days[days.length - 1];
let week = [];
for (let day = 1; day <= daysInMonth - days.length; day++) {
week.push(adapter.addDays(lastDay, day));
if (day % 7 === 0) {
weeks.push(week);
week = [];
}
}
}
return weeks;
});
function genDays(days, today) {
return days.filter(date => {
return props.weekdays.includes(adapter.toJsDate(date).getDay());
}).map((date, index) => {
const isoDate = adapter.toISO(date);
const isAdjacent = !adapter.isSameMonth(date, month.value);
const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value));
const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value));
const isSame = adapter.isSameDay(date, month.value);
return {
date,
isoDate,
formatted: adapter.format(date, 'keyboardDate'),
year: adapter.getYear(date),
month: adapter.getMonth(date),
isDisabled: isDisabled(date),
isWeekStart: index % 7 === 0,
isWeekEnd: index % 7 === 6,
isToday: adapter.isSameDay(date, today),
isAdjacent,
isHidden: isAdjacent && !props.showAdjacentMonths,
isStart,
isSelected: model.value.some(value => adapter.isSameDay(date, value)),
isEnd,
isSame,
localized: adapter.format(date, 'dayOfMonth')
};
});
}
const daysInWeek = computed(() => {
const lastDay = adapter.startOfWeek(model.value);
const week = [];
for (let day = 0; day <= 6; day++) {
week.push(adapter.addDays(lastDay, day));
}
const days = week;
const today = adapter.date();
return genDays(days, today);
});
const daysInMonth = computed(() => {
const days = weeksInMonth.value.flat();
const today = adapter.date();
return genDays(days, today);
});
const weekNumbers = computed(() => {
return weeksInMonth.value.map(week => {
return week.length ? getWeek(adapter, week[0]) : null;
});
});
function isDisabled(value) {
if (props.disabled) return true;
const date = adapter.date(value);
if (props.min && adapter.isAfter(adapter.date(props.min), date)) return true;
if (props.max && adapter.isAfter(date, adapter.date(props.max))) return true;
if (Array.isArray(props.allowedDates) && props.allowedDates.length > 0) {
return !props.allowedDates.some(d => adapter.isSameDay(adapter.date(d), date));
}
if (typeof props.allowedDates === 'function') {
return !props.allowedDates(date);
}
return false;
}
return {
displayValue,
daysInMonth,
daysInWeek,
genDays,
model,
weeksInMonth,
weekNumbers
};
}
//# sourceMappingURL=calendar.mjs.map

File diff suppressed because one or more lines are too long

64
VApp/node_modules/vuetify/lib/composables/color.mjs generated vendored Normal file
View File

@ -0,0 +1,64 @@
// Utilities
import { computed, isRef } from 'vue';
import { destructComputed, getForeground, isCssColor, isParsableColor, parseColor } from "../util/index.mjs"; // Types
// Composables
export function useColor(colors) {
return destructComputed(() => {
const classes = [];
const styles = {};
if (colors.value.background) {
if (isCssColor(colors.value.background)) {
styles.backgroundColor = colors.value.background;
if (!colors.value.text && isParsableColor(colors.value.background)) {
const backgroundColor = parseColor(colors.value.background);
if (backgroundColor.a == null || backgroundColor.a === 1) {
const textColor = getForeground(backgroundColor);
styles.color = textColor;
styles.caretColor = textColor;
}
}
} else {
classes.push(`bg-${colors.value.background}`);
}
}
if (colors.value.text) {
if (isCssColor(colors.value.text)) {
styles.color = colors.value.text;
styles.caretColor = colors.value.text;
} else {
classes.push(`text-${colors.value.text}`);
}
}
return {
colorClasses: classes,
colorStyles: styles
};
});
}
export function useTextColor(props, name) {
const colors = computed(() => ({
text: isRef(props) ? props.value : name ? props[name] : null
}));
const {
colorClasses: textColorClasses,
colorStyles: textColorStyles
} = useColor(colors);
return {
textColorClasses,
textColorStyles
};
}
export function useBackgroundColor(props, name) {
const colors = computed(() => ({
background: isRef(props) ? props.value : name ? props[name] : null
}));
const {
colorClasses: backgroundColorClasses,
colorStyles: backgroundColorStyles
} = useColor(colors);
return {
backgroundColorClasses,
backgroundColorStyles
};
}
//# sourceMappingURL=color.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,11 @@
// Utilities
import { propsFactory } from "../util/propsFactory.mjs"; // Types
// Composables
export const makeComponentProps = propsFactory({
class: [String, Array],
style: {
type: [String, Array, Object],
default: null
}
}, 'component');
//# sourceMappingURL=component.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"component.mjs","names":["propsFactory","makeComponentProps","class","String","Array","style","type","Object","default"],"sources":["../../src/composables/component.ts"],"sourcesContent":["// Utilities\nimport { propsFactory } from '@/util/propsFactory'\n\n// Types\nimport type { PropType, StyleValue } from 'vue'\n\nexport type ClassValue = any\n\nexport interface ComponentProps {\n class?: ClassValue\n style: StyleValue | undefined\n}\n\n// Composables\nexport const makeComponentProps = propsFactory({\n class: [String, Array] as PropType<ClassValue>,\n style: {\n type: [String, Array, Object] as PropType<StyleValue>,\n default: null,\n },\n}, 'component')\n"],"mappings":"AAAA;AAAA,SACSA,YAAY,oCAErB;AAUA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,YAAY,CAAC;EAC7CE,KAAK,EAAE,CAACC,MAAM,EAAEC,KAAK,CAAyB;EAC9CC,KAAK,EAAE;IACLC,IAAI,EAAE,CAACH,MAAM,EAAEC,KAAK,EAAEG,MAAM,CAAyB;IACrDC,OAAO,EAAE;EACX;AACF,CAAC,EAAE,WAAW,CAAC"}

View File

@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=DateAdapter.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"DateAdapter.mjs","names":[],"sources":["../../../src/composables/date/DateAdapter.ts"],"sourcesContent":["export interface DateAdapter<T = unknown> {\n date (value?: any): T | null\n format (date: T, formatString: string): string\n toJsDate (value: T): Date\n parseISO (date: string): T\n toISO (date: T): string\n\n startOfDay (date: T): T\n endOfDay (date: T): T\n startOfWeek (date: T): T\n endOfWeek (date: T): T\n startOfMonth (date: T): T\n endOfMonth (date: T): T\n startOfYear (date: T): T\n endOfYear (date: T): T\n\n isBefore (date: T, comparing: T): boolean\n isAfter (date: T, comparing: T): boolean\n isEqual (date: T, comparing: T): boolean\n isSameDay (date: T, comparing: T): boolean\n isSameMonth (date: T, comparing: T): boolean\n isValid (date: any): boolean\n isWithinRange (date: T, range: [T, T]): boolean\n\n addMinutes (date: T, amount: number): T\n addHours (date: T, amount: number): T\n addDays (date: T, amount: number): T\n addWeeks (date: T, amount: number): T\n addMonths (date: T, amount: number): T\n\n getYear (date: T): number\n setYear (date: T, year: number): T\n getDiff (date: T, comparing: T | string, unit?: string): number\n getWeekArray (date: T): T[][]\n getWeekdays (): string[]\n getMonth (date: T): number\n setMonth (date: T, month: number): T\n getNextMonth (date: T): T\n getHours (date: T): number\n setHours (date: T, hours: number): T\n getMinutes (date: T): number\n setMinutes (date: T, minutes: number): T\n}\n"],"mappings":""}

View File

@ -0,0 +1,557 @@
// Utilities
import { createRange, padStart } from "../../../util/index.mjs"; // Types
const firstDay = {
'001': 1,
AD: 1,
AE: 6,
AF: 6,
AG: 0,
AI: 1,
AL: 1,
AM: 1,
AN: 1,
AR: 1,
AS: 0,
AT: 1,
AU: 1,
AX: 1,
AZ: 1,
BA: 1,
BD: 0,
BE: 1,
BG: 1,
BH: 6,
BM: 1,
BN: 1,
BR: 0,
BS: 0,
BT: 0,
BW: 0,
BY: 1,
BZ: 0,
CA: 0,
CH: 1,
CL: 1,
CM: 1,
CN: 1,
CO: 0,
CR: 1,
CY: 1,
CZ: 1,
DE: 1,
DJ: 6,
DK: 1,
DM: 0,
DO: 0,
DZ: 6,
EC: 1,
EE: 1,
EG: 6,
ES: 1,
ET: 0,
FI: 1,
FJ: 1,
FO: 1,
FR: 1,
GB: 1,
'GB-alt-variant': 0,
GE: 1,
GF: 1,
GP: 1,
GR: 1,
GT: 0,
GU: 0,
HK: 0,
HN: 0,
HR: 1,
HU: 1,
ID: 0,
IE: 1,
IL: 0,
IN: 0,
IQ: 6,
IR: 6,
IS: 1,
IT: 1,
JM: 0,
JO: 6,
JP: 0,
KE: 0,
KG: 1,
KH: 0,
KR: 0,
KW: 6,
KZ: 1,
LA: 0,
LB: 1,
LI: 1,
LK: 1,
LT: 1,
LU: 1,
LV: 1,
LY: 6,
MC: 1,
MD: 1,
ME: 1,
MH: 0,
MK: 1,
MM: 0,
MN: 1,
MO: 0,
MQ: 1,
MT: 0,
MV: 5,
MX: 0,
MY: 1,
MZ: 0,
NI: 0,
NL: 1,
NO: 1,
NP: 0,
NZ: 1,
OM: 6,
PA: 0,
PE: 0,
PH: 0,
PK: 0,
PL: 1,
PR: 0,
PT: 0,
PY: 0,
QA: 6,
RE: 1,
RO: 1,
RS: 1,
RU: 1,
SA: 0,
SD: 6,
SE: 1,
SG: 0,
SI: 1,
SK: 1,
SM: 1,
SV: 0,
SY: 6,
TH: 0,
TJ: 1,
TM: 1,
TR: 1,
TT: 0,
TW: 0,
UA: 1,
UM: 0,
US: 0,
UY: 1,
UZ: 1,
VA: 1,
VE: 0,
VI: 0,
VN: 1,
WS: 0,
XK: 1,
YE: 0,
ZA: 0,
ZW: 0
};
function getWeekArray(date, locale) {
const weeks = [];
let currentWeek = [];
const firstDayOfMonth = startOfMonth(date);
const lastDayOfMonth = endOfMonth(date);
const firstDayWeekIndex = (firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
const lastDayWeekIndex = (lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()] + 7) % 7;
for (let i = 0; i < firstDayWeekIndex; i++) {
const adjacentDay = new Date(firstDayOfMonth);
adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i));
currentWeek.push(adjacentDay);
}
for (let i = 1; i <= lastDayOfMonth.getDate(); i++) {
const day = new Date(date.getFullYear(), date.getMonth(), i);
// Add the day to the current week
currentWeek.push(day);
// If the current week has 7 days, add it to the weeks array and start a new week
if (currentWeek.length === 7) {
weeks.push(currentWeek);
currentWeek = [];
}
}
for (let i = 1; i < 7 - lastDayWeekIndex; i++) {
const adjacentDay = new Date(lastDayOfMonth);
adjacentDay.setDate(adjacentDay.getDate() + i);
currentWeek.push(adjacentDay);
}
if (currentWeek.length > 0) {
weeks.push(currentWeek);
}
return weeks;
}
function startOfWeek(date) {
const d = new Date(date);
while (d.getDay() !== 0) {
d.setDate(d.getDate() - 1);
}
return d;
}
function endOfWeek(date) {
const d = new Date(date);
while (d.getDay() !== 6) {
d.setDate(d.getDate() + 1);
}
return d;
}
function startOfMonth(date) {
return new Date(date.getFullYear(), date.getMonth(), 1);
}
function endOfMonth(date) {
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
}
function parseLocalDate(value) {
const parts = value.split('-').map(Number);
// new Date() uses local time zone when passing individual date component values
return new Date(parts[0], parts[1] - 1, parts[2]);
}
const _YYYMMDD = /^([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))$/;
function date(value) {
if (value == null) return new Date();
if (value instanceof Date) return value;
if (typeof value === 'string') {
let parsed;
if (_YYYMMDD.test(value)) {
return parseLocalDate(value);
} else {
parsed = Date.parse(value);
}
if (!isNaN(parsed)) return new Date(parsed);
}
return null;
}
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
function getWeekdays(locale) {
const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()];
return createRange(7).map(i => {
const weekday = new Date(sundayJanuarySecond2000);
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
return new Intl.DateTimeFormat(locale, {
weekday: 'narrow'
}).format(weekday);
});
}
function format(value, formatString, locale, formats) {
const newDate = date(value) ?? new Date();
const customFormat = formats?.[formatString];
if (typeof customFormat === 'function') {
return customFormat(newDate, formatString, locale);
}
let options = {};
switch (formatString) {
case 'fullDateWithWeekday':
options = {
weekday: 'long',
day: 'numeric',
month: 'long',
year: 'numeric'
};
break;
case 'hours12h':
options = {
hour: 'numeric',
hour12: true
};
break;
case 'normalDateWithWeekday':
options = {
weekday: 'short',
day: 'numeric',
month: 'short'
};
break;
case 'keyboardDate':
options = {
day: '2-digit',
month: '2-digit',
year: 'numeric'
};
break;
case 'monthAndDate':
options = {
month: 'long',
day: 'numeric'
};
break;
case 'monthAndYear':
options = {
month: 'long',
year: 'numeric'
};
break;
case 'month':
options = {
month: 'long'
};
break;
case 'monthShort':
options = {
month: 'short'
};
break;
case 'dayOfMonth':
return new Intl.NumberFormat(locale).format(newDate.getDate());
case 'shortDate':
options = {
year: '2-digit',
month: 'numeric',
day: 'numeric'
};
break;
case 'weekdayShort':
options = {
weekday: 'short'
};
break;
case 'year':
options = {
year: 'numeric'
};
break;
default:
options = customFormat ?? {
timeZone: 'UTC',
timeZoneName: 'short'
};
}
return new Intl.DateTimeFormat(locale, options).format(newDate);
}
function toISO(adapter, value) {
const date = adapter.toJsDate(value);
const year = date.getFullYear();
const month = padStart(String(date.getMonth() + 1), 2, '0');
const day = padStart(String(date.getDate()), 2, '0');
return `${year}-${month}-${day}`;
}
function parseISO(value) {
const [year, month, day] = value.split('-').map(Number);
return new Date(year, month - 1, day);
}
function addMinutes(date, amount) {
const d = new Date(date);
d.setMinutes(d.getMinutes() + amount);
return d;
}
function addHours(date, amount) {
const d = new Date(date);
d.setHours(d.getHours() + amount);
return d;
}
function addDays(date, amount) {
const d = new Date(date);
d.setDate(d.getDate() + amount);
return d;
}
function addWeeks(date, amount) {
const d = new Date(date);
d.setDate(d.getDate() + amount * 7);
return d;
}
function addMonths(date, amount) {
const d = new Date(date);
d.setMonth(d.getMonth() + amount);
return d;
}
function getYear(date) {
return date.getFullYear();
}
function getMonth(date) {
return date.getMonth();
}
function getNextMonth(date) {
return new Date(date.getFullYear(), date.getMonth() + 1, 1);
}
function getHours(date) {
return date.getHours();
}
function getMinutes(date) {
return date.getMinutes();
}
function startOfYear(date) {
return new Date(date.getFullYear(), 0, 1);
}
function endOfYear(date) {
return new Date(date.getFullYear(), 11, 31);
}
function isWithinRange(date, range) {
return isAfter(date, range[0]) && isBefore(date, range[1]);
}
function isValid(date) {
const d = new Date(date);
return d instanceof Date && !isNaN(d.getTime());
}
function isAfter(date, comparing) {
return date.getTime() > comparing.getTime();
}
function isBefore(date, comparing) {
return date.getTime() < comparing.getTime();
}
function isEqual(date, comparing) {
return date.getTime() === comparing.getTime();
}
function isSameDay(date, comparing) {
return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
}
function isSameMonth(date, comparing) {
return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
}
function getDiff(date, comparing, unit) {
const d = new Date(date);
const c = new Date(comparing);
if (unit === 'month') {
return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
}
return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
}
function setHours(date, count) {
const d = new Date(date);
d.setHours(count);
return d;
}
function setMinutes(date, count) {
const d = new Date(date);
d.setMinutes(count);
return d;
}
function setMonth(date, count) {
const d = new Date(date);
d.setMonth(count);
return d;
}
function setYear(date, year) {
const d = new Date(date);
d.setFullYear(year);
return d;
}
function startOfDay(date) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
}
function endOfDay(date) {
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);
}
export class VuetifyDateAdapter {
constructor(options) {
this.locale = options.locale;
this.formats = options.formats;
}
date(value) {
return date(value);
}
toJsDate(date) {
return date;
}
toISO(date) {
return toISO(this, date);
}
parseISO(date) {
return parseISO(date);
}
addMinutes(date, amount) {
return addMinutes(date, amount);
}
addHours(date, amount) {
return addHours(date, amount);
}
addDays(date, amount) {
return addDays(date, amount);
}
addWeeks(date, amount) {
return addWeeks(date, amount);
}
addMonths(date, amount) {
return addMonths(date, amount);
}
getWeekArray(date) {
return getWeekArray(date, this.locale);
}
startOfWeek(date) {
return startOfWeek(date);
}
endOfWeek(date) {
return endOfWeek(date);
}
startOfMonth(date) {
return startOfMonth(date);
}
endOfMonth(date) {
return endOfMonth(date);
}
format(date, formatString) {
return format(date, formatString, this.locale, this.formats);
}
isEqual(date, comparing) {
return isEqual(date, comparing);
}
isValid(date) {
return isValid(date);
}
isWithinRange(date, range) {
return isWithinRange(date, range);
}
isAfter(date, comparing) {
return isAfter(date, comparing);
}
isBefore(date, comparing) {
return !isAfter(date, comparing) && !isEqual(date, comparing);
}
isSameDay(date, comparing) {
return isSameDay(date, comparing);
}
isSameMonth(date, comparing) {
return isSameMonth(date, comparing);
}
setMinutes(date, count) {
return setMinutes(date, count);
}
setHours(date, count) {
return setHours(date, count);
}
setMonth(date, count) {
return setMonth(date, count);
}
setYear(date, year) {
return setYear(date, year);
}
getDiff(date, comparing, unit) {
return getDiff(date, comparing, unit);
}
getWeekdays() {
return getWeekdays(this.locale);
}
getYear(date) {
return getYear(date);
}
getMonth(date) {
return getMonth(date);
}
getNextMonth(date) {
return getNextMonth(date);
}
getHours(date) {
return getHours(date);
}
getMinutes(date) {
return getMinutes(date);
}
startOfDay(date) {
return startOfDay(date);
}
endOfDay(date) {
return endOfDay(date);
}
startOfYear(date) {
return startOfYear(date);
}
endOfYear(date) {
return endOfYear(date);
}
}
//# sourceMappingURL=vuetify.mjs.map

File diff suppressed because one or more lines are too long

100
VApp/node_modules/vuetify/lib/composables/date/date.mjs generated vendored Normal file
View File

@ -0,0 +1,100 @@
// Composables
import { useLocale } from "../locale.mjs"; // Utilities
import { inject, reactive, watch } from 'vue';
import { mergeDeep } from "../../util/index.mjs"; // Types
// Adapters
import { VuetifyDateAdapter } from "./adapters/vuetify.mjs";
/** Supports module augmentation to specify date object types */
export const DateOptionsSymbol = Symbol.for('vuetify:date-options');
export const DateAdapterSymbol = Symbol.for('vuetify:date-adapter');
export function createDate(options, locale) {
const _options = mergeDeep({
adapter: VuetifyDateAdapter,
locale: {
af: 'af-ZA',
// ar: '', # not the same value for all variants
bg: 'bg-BG',
ca: 'ca-ES',
ckb: '',
cs: 'cs-CZ',
de: 'de-DE',
el: 'el-GR',
en: 'en-US',
// es: '', # not the same value for all variants
et: 'et-EE',
fa: 'fa-IR',
fi: 'fi-FI',
// fr: '', #not the same value for all variants
hr: 'hr-HR',
hu: 'hu-HU',
he: 'he-IL',
id: 'id-ID',
it: 'it-IT',
ja: 'ja-JP',
ko: 'ko-KR',
lv: 'lv-LV',
lt: 'lt-LT',
nl: 'nl-NL',
no: 'no-NO',
pl: 'pl-PL',
pt: 'pt-PT',
ro: 'ro-RO',
ru: 'ru-RU',
sk: 'sk-SK',
sl: 'sl-SI',
srCyrl: 'sr-SP',
srLatn: 'sr-SP',
sv: 'sv-SE',
th: 'th-TH',
tr: 'tr-TR',
az: 'az-AZ',
uk: 'uk-UA',
vi: 'vi-VN',
zhHans: 'zh-CN',
zhHant: 'zh-TW'
}
}, options);
return {
options: _options,
instance: createInstance(_options, locale)
};
}
function createInstance(options, locale) {
const instance = reactive(typeof options.adapter === 'function'
// eslint-disable-next-line new-cap
? new options.adapter({
locale: options.locale[locale.current.value] ?? locale.current.value,
formats: options.formats
}) : options.adapter);
watch(locale.current, value => {
instance.locale = options.locale[value] ?? value ?? instance.locale;
});
return instance;
}
export function useDate() {
const options = inject(DateOptionsSymbol);
if (!options) throw new Error('[Vuetify] Could not find injected date options');
const locale = useLocale();
return createInstance(options, locale);
}
// https://stackoverflow.com/questions/274861/how-do-i-calculate-the-week-number-given-a-date/275024#275024
export function getWeek(adapter, value) {
const date = adapter.toJsDate(value);
let year = date.getFullYear();
let d1w1 = new Date(year, 0, 1);
if (date < d1w1) {
year = year - 1;
d1w1 = new Date(year, 0, 1);
} else {
const tv = new Date(year + 1, 0, 1);
if (date >= tv) {
year = year + 1;
d1w1 = tv;
}
}
const diffTime = Math.abs(date.getTime() - d1w1.getTime());
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
return Math.floor(diffDays / 7) + 1;
}
//# sourceMappingURL=date.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
export { createDate, useDate, DateAdapterSymbol } from "./date.mjs";
//# sourceMappingURL=index.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"index.mjs","names":["createDate","useDate","DateAdapterSymbol"],"sources":["../../../src/composables/date/index.ts"],"sourcesContent":["export { createDate, useDate, DateAdapterSymbol } from './date'\nexport type { DateAdapter } from './DateAdapter'\nexport type { DateOptions, DateInstance } from './date'\n"],"mappings":"SAASA,UAAU,EAAEC,OAAO,EAAEC,iBAAiB"}

104
VApp/node_modules/vuetify/lib/composables/defaults.mjs generated vendored Normal file
View File

@ -0,0 +1,104 @@
// Utilities
import { computed, inject, provide, ref, shallowRef, unref, watchEffect } from 'vue';
import { getCurrentInstance, injectSelf, mergeDeep, toKebabCase } from "../util/index.mjs"; // Types
export const DefaultsSymbol = Symbol.for('vuetify:defaults');
export function createDefaults(options) {
return ref(options);
}
export function injectDefaults() {
const defaults = inject(DefaultsSymbol);
if (!defaults) throw new Error('[Vuetify] Could not find defaults instance');
return defaults;
}
export function provideDefaults(defaults, options) {
const injectedDefaults = injectDefaults();
const providedDefaults = ref(defaults);
const newDefaults = computed(() => {
const disabled = unref(options?.disabled);
if (disabled) return injectedDefaults.value;
const scoped = unref(options?.scoped);
const reset = unref(options?.reset);
const root = unref(options?.root);
if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
let properties = mergeDeep(providedDefaults.value, {
prev: injectedDefaults.value
});
if (scoped) return properties;
if (reset || root) {
const len = Number(reset || Infinity);
for (let i = 0; i <= len; i++) {
if (!properties || !('prev' in properties)) {
break;
}
properties = properties.prev;
}
if (properties && typeof root === 'string' && root in properties) {
properties = mergeDeep(mergeDeep(properties, {
prev: properties
}), properties[root]);
}
return properties;
}
return properties.prev ? mergeDeep(properties.prev, properties) : properties;
});
provide(DefaultsSymbol, newDefaults);
return newDefaults;
}
function propIsDefined(vnode, prop) {
return typeof vnode.props?.[prop] !== 'undefined' || typeof vnode.props?.[toKebabCase(prop)] !== 'undefined';
}
export function internalUseDefaults() {
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
let name = arguments.length > 1 ? arguments[1] : undefined;
let defaults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : injectDefaults();
const vm = getCurrentInstance('useDefaults');
name = name ?? vm.type.name ?? vm.type.__name;
if (!name) {
throw new Error('[Vuetify] Could not determine component name');
}
const componentDefaults = computed(() => defaults.value?.[props._as ?? name]);
const _props = new Proxy(props, {
get(target, prop) {
const propValue = Reflect.get(target, prop);
if (prop === 'class' || prop === 'style') {
return [componentDefaults.value?.[prop], propValue].filter(v => v != null);
} else if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
return componentDefaults.value?.[prop] ?? defaults.value?.global?.[prop] ?? propValue;
}
return propValue;
}
});
const _subcomponentDefaults = shallowRef();
watchEffect(() => {
if (componentDefaults.value) {
const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
let [key] = _ref;
return key.startsWith(key[0].toUpperCase());
});
_subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
} else {
_subcomponentDefaults.value = undefined;
}
});
function provideSubDefaults() {
const injected = injectSelf(DefaultsSymbol, vm);
provide(DefaultsSymbol, computed(() => {
return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
}));
}
return {
props: _props,
provideSubDefaults
};
}
export function useDefaults() {
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
let name = arguments.length > 1 ? arguments[1] : undefined;
const {
props: _props,
provideSubDefaults
} = internalUseDefaults(props, name);
provideSubDefaults();
return _props;
}
//# sourceMappingURL=defaults.mjs.map

File diff suppressed because one or more lines are too long

32
VApp/node_modules/vuetify/lib/composables/delay.mjs generated vendored Normal file
View File

@ -0,0 +1,32 @@
// Utilities
import { defer, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeDelayProps = propsFactory({
closeDelay: [Number, String],
openDelay: [Number, String]
}, 'delay');
export function useDelay(props, cb) {
let clearDelay = () => {};
function runDelay(isOpening) {
clearDelay?.();
const delay = Number(isOpening ? props.openDelay : props.closeDelay);
return new Promise(resolve => {
clearDelay = defer(delay, () => {
cb?.(isOpening);
resolve(isOpening);
});
});
}
function runOpenDelay() {
return runDelay(true);
}
function runCloseDelay() {
return runDelay(false);
}
return {
clearDelay,
runOpenDelay,
runCloseDelay
};
}
//# sourceMappingURL=delay.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"delay.mjs","names":["defer","propsFactory","makeDelayProps","closeDelay","Number","String","openDelay","useDelay","props","cb","clearDelay","runDelay","isOpening","delay","Promise","resolve","runOpenDelay","runCloseDelay"],"sources":["../../src/composables/delay.ts"],"sourcesContent":["// Utilities\nimport { defer, propsFactory } from '@/util'\n\n// Types\nexport interface DelayProps {\n closeDelay?: number | string\n openDelay?: number | string\n}\n\n// Composables\nexport const makeDelayProps = propsFactory({\n closeDelay: [Number, String],\n openDelay: [Number, String],\n}, 'delay')\n\nexport function useDelay (props: DelayProps, cb?: (value: boolean) => void) {\n let clearDelay: (() => void) = () => {}\n\n function runDelay (isOpening: boolean) {\n clearDelay?.()\n\n const delay = Number(isOpening ? props.openDelay : props.closeDelay)\n\n return new Promise(resolve => {\n clearDelay = defer(delay, () => {\n cb?.(isOpening)\n resolve(isOpening)\n })\n })\n }\n\n function runOpenDelay () {\n return runDelay(true)\n }\n\n function runCloseDelay () {\n return runDelay(false)\n }\n\n return {\n clearDelay,\n runOpenDelay,\n runCloseDelay,\n }\n}\n"],"mappings":"AAAA;AAAA,SACSA,KAAK,EAAEC,YAAY,6BAE5B;AAMA;AACA,OAAO,MAAMC,cAAc,GAAGD,YAAY,CAAC;EACzCE,UAAU,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;EAC5BC,SAAS,EAAE,CAACF,MAAM,EAAEC,MAAM;AAC5B,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,SAASE,QAAQA,CAAEC,KAAiB,EAAEC,EAA6B,EAAE;EAC1E,IAAIC,UAAwB,GAAGA,CAAA,KAAM,CAAC,CAAC;EAEvC,SAASC,QAAQA,CAAEC,SAAkB,EAAE;IACrCF,UAAU,GAAG,CAAC;IAEd,MAAMG,KAAK,GAAGT,MAAM,CAACQ,SAAS,GAAGJ,KAAK,CAACF,SAAS,GAAGE,KAAK,CAACL,UAAU,CAAC;IAEpE,OAAO,IAAIW,OAAO,CAACC,OAAO,IAAI;MAC5BL,UAAU,GAAGV,KAAK,CAACa,KAAK,EAAE,MAAM;QAC9BJ,EAAE,GAAGG,SAAS,CAAC;QACfG,OAAO,CAACH,SAAS,CAAC;MACpB,CAAC,CAAC;IACJ,CAAC,CAAC;EACJ;EAEA,SAASI,YAAYA,CAAA,EAAI;IACvB,OAAOL,QAAQ,CAAC,IAAI,CAAC;EACvB;EAEA,SAASM,aAAaA,CAAA,EAAI;IACxB,OAAON,QAAQ,CAAC,KAAK,CAAC;EACxB;EAEA,OAAO;IACLD,UAAU;IACVM,YAAY;IACZC;EACF,CAAC;AACH"}

26
VApp/node_modules/vuetify/lib/composables/density.mjs generated vendored Normal file
View File

@ -0,0 +1,26 @@
// Utilities
import { computed } from 'vue';
import { getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
const allowedDensities = [null, 'default', 'comfortable', 'compact'];
// typeof allowedDensities[number] evalutes to any
// when generating api types for whatever reason.
// Composables
export const makeDensityProps = propsFactory({
density: {
type: String,
default: 'default',
validator: v => allowedDensities.includes(v)
}
}, 'density');
export function useDensity(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const densityClasses = computed(() => {
return `${name}--density-${props.density}`;
});
return {
densityClasses
};
}
//# sourceMappingURL=density.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"density.mjs","names":["computed","getCurrentInstanceName","propsFactory","allowedDensities","makeDensityProps","density","type","String","default","validator","v","includes","useDensity","props","name","arguments","length","undefined","densityClasses"],"sources":["../../src/composables/density.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst allowedDensities = [null, 'default', 'comfortable', 'compact'] as const\n\n// typeof allowedDensities[number] evalutes to any\n// when generating api types for whatever reason.\nexport type Density = null | 'default' | 'comfortable' | 'compact'\n\nexport interface DensityProps {\n density?: Density\n}\n\n// Composables\nexport const makeDensityProps = propsFactory({\n density: {\n type: String as PropType<Density>,\n default: 'default',\n validator: (v: any) => allowedDensities.includes(v),\n },\n}, 'density')\n\nexport function useDensity (\n props: DensityProps,\n name = getCurrentInstanceName(),\n) {\n const densityClasses = computed(() => {\n return `${name}--density-${props.density}`\n })\n\n return { densityClasses }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,QAAQ,KAAK;AAAA,SACrBC,sBAAsB,EAAEC,YAAY,6BAE7C;AAGA,MAAMC,gBAAgB,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,CAAU;;AAE7E;AACA;;AAOA;AACA,OAAO,MAAMC,gBAAgB,GAAGF,YAAY,CAAC;EAC3CG,OAAO,EAAE;IACPC,IAAI,EAAEC,MAA2B;IACjCC,OAAO,EAAE,SAAS;IAClBC,SAAS,EAAGC,CAAM,IAAKP,gBAAgB,CAACQ,QAAQ,CAACD,CAAC;EACpD;AACF,CAAC,EAAE,SAAS,CAAC;AAEb,OAAO,SAASE,UAAUA,CACxBC,KAAmB,EAEnB;EAAA,IADAC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGd,sBAAsB,CAAC,CAAC;EAE/B,MAAMiB,cAAc,GAAGlB,QAAQ,CAAC,MAAM;IACpC,OAAQ,GAAEc,IAAK,aAAYD,KAAK,CAACR,OAAQ,EAAC;EAC5C,CAAC,CAAC;EAEF,OAAO;IAAEa;EAAe,CAAC;AAC3B"}

View File

@ -0,0 +1,26 @@
// Utilities
import { computed } from 'vue';
import { convertToUnit, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeDimensionProps = propsFactory({
height: [Number, String],
maxHeight: [Number, String],
maxWidth: [Number, String],
minHeight: [Number, String],
minWidth: [Number, String],
width: [Number, String]
}, 'dimension');
export function useDimension(props) {
const dimensionStyles = computed(() => ({
height: convertToUnit(props.height),
maxHeight: convertToUnit(props.maxHeight),
maxWidth: convertToUnit(props.maxWidth),
minHeight: convertToUnit(props.minHeight),
minWidth: convertToUnit(props.minWidth),
width: convertToUnit(props.width)
}));
return {
dimensionStyles
};
}
//# sourceMappingURL=dimensions.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"dimensions.mjs","names":["computed","convertToUnit","propsFactory","makeDimensionProps","height","Number","String","maxHeight","maxWidth","minHeight","minWidth","width","useDimension","props","dimensionStyles"],"sources":["../../src/composables/dimensions.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { convertToUnit, propsFactory } from '@/util'\n\n// Types\nexport interface DimensionProps {\n height?: number | string\n maxHeight?: number | string\n maxWidth?: number | string\n minHeight?: number | string\n minWidth?: number | string\n width?: number | string\n}\n\n// Composables\nexport const makeDimensionProps = propsFactory({\n height: [Number, String],\n maxHeight: [Number, String],\n maxWidth: [Number, String],\n minHeight: [Number, String],\n minWidth: [Number, String],\n width: [Number, String],\n}, 'dimension')\n\nexport function useDimension (props: DimensionProps) {\n const dimensionStyles = computed(() => ({\n height: convertToUnit(props.height),\n maxHeight: convertToUnit(props.maxHeight),\n maxWidth: convertToUnit(props.maxWidth),\n minHeight: convertToUnit(props.minHeight),\n minWidth: convertToUnit(props.minWidth),\n width: convertToUnit(props.width),\n }))\n\n return { dimensionStyles }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,QAAQ,KAAK;AAAA,SACrBC,aAAa,EAAEC,YAAY,6BAEpC;AAUA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,YAAY,CAAC;EAC7CE,MAAM,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;EACxBC,SAAS,EAAE,CAACF,MAAM,EAAEC,MAAM,CAAC;EAC3BE,QAAQ,EAAE,CAACH,MAAM,EAAEC,MAAM,CAAC;EAC1BG,SAAS,EAAE,CAACJ,MAAM,EAAEC,MAAM,CAAC;EAC3BI,QAAQ,EAAE,CAACL,MAAM,EAAEC,MAAM,CAAC;EAC1BK,KAAK,EAAE,CAACN,MAAM,EAAEC,MAAM;AACxB,CAAC,EAAE,WAAW,CAAC;AAEf,OAAO,SAASM,YAAYA,CAAEC,KAAqB,EAAE;EACnD,MAAMC,eAAe,GAAGd,QAAQ,CAAC,OAAO;IACtCI,MAAM,EAAEH,aAAa,CAACY,KAAK,CAACT,MAAM,CAAC;IACnCG,SAAS,EAAEN,aAAa,CAACY,KAAK,CAACN,SAAS,CAAC;IACzCC,QAAQ,EAAEP,aAAa,CAACY,KAAK,CAACL,QAAQ,CAAC;IACvCC,SAAS,EAAER,aAAa,CAACY,KAAK,CAACJ,SAAS,CAAC;IACzCC,QAAQ,EAAET,aAAa,CAACY,KAAK,CAACH,QAAQ,CAAC;IACvCC,KAAK,EAAEV,aAAa,CAACY,KAAK,CAACF,KAAK;EAClC,CAAC,CAAC,CAAC;EAEH,OAAO;IAAEG;EAAgB,CAAC;AAC5B"}

View File

@ -0,0 +1,69 @@
// Utilities
import { h, mergeProps, render, resolveComponent } from 'vue';
// Types
export const useDirectiveComponent = (component, props) => {
const concreteComponent = typeof component === 'string' ? resolveComponent(component) : component;
return {
mounted(el, binding, vnode) {
const {
value
} = binding;
// Get the children from the props or directive value, or the element's children
const children = props.text || value.text || el.innerHTML;
// If vnode.ctx is the same as the instance, then we're bound to a plain element
// and need to find the nearest parent component instance to inherit provides from
const provides = (vnode.ctx === binding.instance.$ ? findComponentParent(vnode, binding.instance.$)?.provides : vnode.ctx?.provides) ?? binding.instance.$.provides;
const node = h(concreteComponent, mergeProps(props, value), children);
node.appContext = Object.assign(Object.create(null), binding.instance.$.appContext, {
provides
});
render(node, el);
},
unmounted(el) {
render(null, el);
}
};
};
function findComponentParent(vnode, root) {
// Walk the tree from root until we find the child vnode
const stack = new Set();
const walk = children => {
for (const child of children) {
if (!child) continue;
if (child === vnode) {
return true;
}
stack.add(child);
if (Array.isArray(child.children)) {
const result = walk(child.children);
if (result) {
return result;
}
} else if (child.component?.vnode) {
const result = walk([child.component?.subTree]);
if (result) {
return result;
}
}
stack.delete(child);
}
return false;
};
if (!walk([root.subTree])) {
throw new Error('Could not find original vnode');
}
// Return the first component parent
const result = Array.from(stack).reverse();
for (const child of result) {
if (child.component) {
return child.component;
}
}
return root;
}
//# sourceMappingURL=directiveComponent.mjs.map

File diff suppressed because one or more lines are too long

148
VApp/node_modules/vuetify/lib/composables/display.mjs generated vendored Normal file
View File

@ -0,0 +1,148 @@
// Utilities
import { computed, inject, reactive, shallowRef, toRefs, watchEffect } from 'vue';
import { getCurrentInstanceName, mergeDeep, propsFactory } from "../util/index.mjs";
import { IN_BROWSER, SUPPORTS_TOUCH } from "../util/globals.mjs"; // Types
export const breakpoints = ['sm', 'md', 'lg', 'xl', 'xxl']; // no xs
export const DisplaySymbol = Symbol.for('vuetify:display');
const defaultDisplayOptions = {
mobileBreakpoint: 'lg',
thresholds: {
xs: 0,
sm: 600,
md: 960,
lg: 1280,
xl: 1920,
xxl: 2560
}
};
const parseDisplayOptions = function () {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDisplayOptions;
return mergeDeep(defaultDisplayOptions, options);
};
function getClientWidth(ssr) {
return IN_BROWSER && !ssr ? window.innerWidth : typeof ssr === 'object' && ssr.clientWidth || 0;
}
function getClientHeight(ssr) {
return IN_BROWSER && !ssr ? window.innerHeight : typeof ssr === 'object' && ssr.clientHeight || 0;
}
function getPlatform(ssr) {
const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr';
function match(regexp) {
return Boolean(userAgent.match(regexp));
}
const android = match(/android/i);
const ios = match(/iphone|ipad|ipod/i);
const cordova = match(/cordova/i);
const electron = match(/electron/i);
const chrome = match(/chrome/i);
const edge = match(/edge/i);
const firefox = match(/firefox/i);
const opera = match(/opera/i);
const win = match(/win/i);
const mac = match(/mac/i);
const linux = match(/linux/i);
return {
android,
ios,
cordova,
electron,
chrome,
edge,
firefox,
opera,
win,
mac,
linux,
touch: SUPPORTS_TOUCH,
ssr: userAgent === 'ssr'
};
}
export function createDisplay(options, ssr) {
const {
thresholds,
mobileBreakpoint
} = parseDisplayOptions(options);
const height = shallowRef(getClientHeight(ssr));
const platform = shallowRef(getPlatform(ssr));
const state = reactive({});
const width = shallowRef(getClientWidth(ssr));
function updateSize() {
height.value = getClientHeight();
width.value = getClientWidth();
}
function update() {
updateSize();
platform.value = getPlatform();
}
// eslint-disable-next-line max-statements
watchEffect(() => {
const xs = width.value < thresholds.sm;
const sm = width.value < thresholds.md && !xs;
const md = width.value < thresholds.lg && !(sm || xs);
const lg = width.value < thresholds.xl && !(md || sm || xs);
const xl = width.value < thresholds.xxl && !(lg || md || sm || xs);
const xxl = width.value >= thresholds.xxl;
const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';
const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];
const mobile = width.value < breakpointValue;
state.xs = xs;
state.sm = sm;
state.md = md;
state.lg = lg;
state.xl = xl;
state.xxl = xxl;
state.smAndUp = !xs;
state.mdAndUp = !(xs || sm);
state.lgAndUp = !(xs || sm || md);
state.xlAndUp = !(xs || sm || md || lg);
state.smAndDown = !(md || lg || xl || xxl);
state.mdAndDown = !(lg || xl || xxl);
state.lgAndDown = !(xl || xxl);
state.xlAndDown = !xxl;
state.name = name;
state.height = height.value;
state.width = width.value;
state.mobile = mobile;
state.mobileBreakpoint = mobileBreakpoint;
state.platform = platform.value;
state.thresholds = thresholds;
});
if (IN_BROWSER) {
window.addEventListener('resize', updateSize, {
passive: true
});
}
return {
...toRefs(state),
update,
ssr: !!ssr
};
}
export const makeDisplayProps = propsFactory({
mobileBreakpoint: [Number, String]
}, 'display');
export function useDisplay() {
let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const display = inject(DisplaySymbol);
if (!display) throw new Error('Could not find Vuetify display injection');
const mobile = computed(() => {
if (!props.mobileBreakpoint) return display.mobile.value;
const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
return display.width.value < breakpointValue;
});
const displayClasses = computed(() => {
if (!name) return {};
return {
[`${name}--mobile`]: mobile.value
};
});
return {
...display,
displayClasses,
mobile
};
}
//# sourceMappingURL=display.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
// Utilities
import { computed, isRef } from 'vue';
import { propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeElevationProps = propsFactory({
elevation: {
type: [Number, String],
validator(v) {
const value = parseInt(v);
return !isNaN(value) && value >= 0 &&
// Material Design has a maximum elevation of 24
// https://material.io/design/environment/elevation.html#default-elevations
value <= 24;
}
}
}, 'elevation');
export function useElevation(props) {
const elevationClasses = computed(() => {
const elevation = isRef(props) ? props.value : props.elevation;
const classes = [];
if (elevation == null) return classes;
classes.push(`elevation-${elevation}`);
return classes;
});
return {
elevationClasses
};
}
//# sourceMappingURL=elevation.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"elevation.mjs","names":["computed","isRef","propsFactory","makeElevationProps","elevation","type","Number","String","validator","v","value","parseInt","isNaN","useElevation","props","elevationClasses","classes","push"],"sources":["../../src/composables/elevation.ts"],"sourcesContent":["// Utilities\nimport { computed, isRef } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\nexport interface ElevationProps {\n elevation?: number | string | null\n}\n\n// Composables\nexport const makeElevationProps = propsFactory({\n elevation: {\n type: [Number, String],\n validator (v: any) {\n const value = parseInt(v)\n\n return (\n !isNaN(value) &&\n value >= 0 &&\n // Material Design has a maximum elevation of 24\n // https://material.io/design/environment/elevation.html#default-elevations\n value <= 24\n )\n },\n },\n}, 'elevation')\n\ntype ElevationData = {\n elevationClasses: Ref<string[]>\n}\n\nexport function useElevation (props: ElevationProps | Ref<number | string | undefined>): ElevationData {\n const elevationClasses = computed(() => {\n const elevation = isRef(props) ? props.value : props.elevation\n const classes: string[] = []\n\n if (elevation == null) return classes\n\n classes.push(`elevation-${elevation}`)\n\n return classes\n })\n\n return { elevationClasses }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,YAAY,6BAErB;AAMA;AACA,OAAO,MAAMC,kBAAkB,GAAGD,YAAY,CAAC;EAC7CE,SAAS,EAAE;IACTC,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACtBC,SAASA,CAAEC,CAAM,EAAE;MACjB,MAAMC,KAAK,GAAGC,QAAQ,CAACF,CAAC,CAAC;MAEzB,OACE,CAACG,KAAK,CAACF,KAAK,CAAC,IACbA,KAAK,IAAI,CAAC;MACV;MACA;MACAA,KAAK,IAAI,EAAE;IAEf;EACF;AACF,CAAC,EAAE,WAAW,CAAC;AAMf,OAAO,SAASG,YAAYA,CAAEC,KAAwD,EAAiB;EACrG,MAAMC,gBAAgB,GAAGf,QAAQ,CAAC,MAAM;IACtC,MAAMI,SAAS,GAAGH,KAAK,CAACa,KAAK,CAAC,GAAGA,KAAK,CAACJ,KAAK,GAAGI,KAAK,CAACV,SAAS;IAC9D,MAAMY,OAAiB,GAAG,EAAE;IAE5B,IAAIZ,SAAS,IAAI,IAAI,EAAE,OAAOY,OAAO;IAErCA,OAAO,CAACC,IAAI,CAAE,aAAYb,SAAU,EAAC,CAAC;IAEtC,OAAOY,OAAO;EAChB,CAAC,CAAC;EAEF,OAAO;IAAED;EAAiB,CAAC;AAC7B"}

116
VApp/node_modules/vuetify/lib/composables/filter.mjs generated vendored Normal file
View File

@ -0,0 +1,116 @@
/* eslint-disable max-statements */
/* eslint-disable no-labels */
// Utilities
import { computed, ref, unref, watchEffect } from 'vue';
import { getPropertyFromItem, propsFactory, wrapInArray } from "../util/index.mjs"; // Types
/**
* - match without highlight
* - single match (index), length already known
* - single match (start, end)
* - multiple matches (start, end), probably shouldn't overlap
*/
// Composables
export const defaultFilter = (value, query, item) => {
if (value == null || query == null) return -1;
return value.toString().toLocaleLowerCase().indexOf(query.toString().toLocaleLowerCase());
};
export const makeFilterProps = propsFactory({
customFilter: Function,
customKeyFilter: Object,
filterKeys: [Array, String],
filterMode: {
type: String,
default: 'intersection'
},
noFilter: Boolean
}, 'filter');
export function filterItems(items, query, options) {
const array = [];
// always ensure we fall back to a functioning filter
const filter = options?.default ?? defaultFilter;
const keys = options?.filterKeys ? wrapInArray(options.filterKeys) : false;
const customFiltersLength = Object.keys(options?.customKeyFilter ?? {}).length;
if (!items?.length) return array;
loop: for (let i = 0; i < items.length; i++) {
const [item, transformed = item] = wrapInArray(items[i]);
const customMatches = {};
const defaultMatches = {};
let match = -1;
if (query && !options?.noFilter) {
if (typeof item === 'object') {
const filterKeys = keys || Object.keys(transformed);
for (const key of filterKeys) {
const value = getPropertyFromItem(transformed, key, transformed);
const keyFilter = options?.customKeyFilter?.[key];
match = keyFilter ? keyFilter(value, query, item) : filter(value, query, item);
if (match !== -1 && match !== false) {
if (keyFilter) customMatches[key] = match;else defaultMatches[key] = match;
} else if (options?.filterMode === 'every') {
continue loop;
}
}
} else {
match = filter(item, query, item);
if (match !== -1 && match !== false) {
defaultMatches.title = match;
}
}
const defaultMatchesLength = Object.keys(defaultMatches).length;
const customMatchesLength = Object.keys(customMatches).length;
if (!defaultMatchesLength && !customMatchesLength) continue;
if (options?.filterMode === 'union' && customMatchesLength !== customFiltersLength && !defaultMatchesLength) continue;
if (options?.filterMode === 'intersection' && (customMatchesLength !== customFiltersLength || !defaultMatchesLength)) continue;
}
array.push({
index: i,
matches: {
...defaultMatches,
...customMatches
}
});
}
return array;
}
export function useFilter(props, items, query, options) {
const filteredItems = ref([]);
const filteredMatches = ref(new Map());
const transformedItems = computed(() => options?.transform ? unref(items).map(item => [item, options.transform(item)]) : unref(items));
watchEffect(() => {
const _query = typeof query === 'function' ? query() : unref(query);
const strQuery = typeof _query !== 'string' && typeof _query !== 'number' ? '' : String(_query);
const results = filterItems(transformedItems.value, strQuery, {
customKeyFilter: {
...props.customKeyFilter,
...unref(options?.customKeyFilter)
},
default: props.customFilter,
filterKeys: props.filterKeys,
filterMode: props.filterMode,
noFilter: props.noFilter
});
const originalItems = unref(items);
const _filteredItems = [];
const _filteredMatches = new Map();
results.forEach(_ref => {
let {
index,
matches
} = _ref;
const item = originalItems[index];
_filteredItems.push(item);
_filteredMatches.set(item.value, matches);
});
filteredItems.value = _filteredItems;
filteredMatches.value = _filteredMatches;
});
function getMatches(item) {
return filteredMatches.value.get(item.value);
}
return {
filteredItems,
filteredMatches,
getMatches
};
}
//# sourceMappingURL=filter.mjs.map

File diff suppressed because one or more lines are too long

31
VApp/node_modules/vuetify/lib/composables/focus.mjs generated vendored Normal file
View File

@ -0,0 +1,31 @@
// Composables
import { useProxiedModel } from "./proxiedModel.mjs"; // Utilities
import { computed } from 'vue';
import { EventProp, getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeFocusProps = propsFactory({
focused: Boolean,
'onUpdate:focused': EventProp()
}, 'focus');
export function useFocus(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const isFocused = useProxiedModel(props, 'focused');
const focusClasses = computed(() => {
return {
[`${name}--focused`]: isFocused.value
};
});
function focus() {
isFocused.value = true;
}
function blur() {
isFocused.value = false;
}
return {
focusClasses,
isFocused,
focus,
blur
};
}
//# sourceMappingURL=focus.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"focus.mjs","names":["useProxiedModel","computed","EventProp","getCurrentInstanceName","propsFactory","makeFocusProps","focused","Boolean","useFocus","props","name","arguments","length","undefined","isFocused","focusClasses","value","focus","blur"],"sources":["../../src/composables/focus.ts"],"sourcesContent":["// Composables\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Utilities\nimport { computed } from 'vue'\nimport { EventProp, getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nexport interface FocusProps {\n focused: boolean\n 'onUpdate:focused': ((focused: boolean) => any) | undefined\n}\n\n// Composables\nexport const makeFocusProps = propsFactory({\n focused: Boolean,\n 'onUpdate:focused': EventProp<[boolean]>(),\n}, 'focus')\n\nexport function useFocus (\n props: FocusProps,\n name = getCurrentInstanceName()\n) {\n const isFocused = useProxiedModel(props, 'focused')\n const focusClasses = computed(() => {\n return ({\n [`${name}--focused`]: isFocused.value,\n })\n })\n\n function focus () {\n isFocused.value = true\n }\n\n function blur () {\n isFocused.value = false\n }\n\n return { focusClasses, isFocused, focus, blur }\n}\n"],"mappings":"AAAA;AAAA,SACSA,eAAe,8BAExB;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,SAAS,EAAEC,sBAAsB,EAAEC,YAAY,6BAExD;AAMA;AACA,OAAO,MAAMC,cAAc,GAAGD,YAAY,CAAC;EACzCE,OAAO,EAAEC,OAAO;EAChB,kBAAkB,EAAEL,SAAS,CAAY;AAC3C,CAAC,EAAE,OAAO,CAAC;AAEX,OAAO,SAASM,QAAQA,CACtBC,KAAiB,EAEjB;EAAA,IADAC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGR,sBAAsB,CAAC,CAAC;EAE/B,MAAMW,SAAS,GAAGd,eAAe,CAACS,KAAK,EAAE,SAAS,CAAC;EACnD,MAAMM,YAAY,GAAGd,QAAQ,CAAC,MAAM;IAClC,OAAQ;MACN,CAAE,GAAES,IAAK,WAAU,GAAGI,SAAS,CAACE;IAClC,CAAC;EACH,CAAC,CAAC;EAEF,SAASC,KAAKA,CAAA,EAAI;IAChBH,SAAS,CAACE,KAAK,GAAG,IAAI;EACxB;EAEA,SAASE,IAAIA,CAAA,EAAI;IACfJ,SAAS,CAACE,KAAK,GAAG,KAAK;EACzB;EAEA,OAAO;IAAED,YAAY;IAAED,SAAS;IAAEG,KAAK;IAAEC;EAAK,CAAC;AACjD"}

126
VApp/node_modules/vuetify/lib/composables/form.mjs generated vendored Normal file
View File

@ -0,0 +1,126 @@
// Composables
import { useProxiedModel } from "./proxiedModel.mjs"; // Utilities
import { computed, inject, provide, ref, shallowRef, toRef, watch } from 'vue';
import { consoleWarn, propsFactory } from "../util/index.mjs"; // Types
export const FormKey = Symbol.for('vuetify:form');
export const makeFormProps = propsFactory({
disabled: Boolean,
fastFail: Boolean,
readonly: Boolean,
modelValue: {
type: Boolean,
default: null
},
validateOn: {
type: String,
default: 'input'
}
}, 'form');
export function createForm(props) {
const model = useProxiedModel(props, 'modelValue');
const isDisabled = computed(() => props.disabled);
const isReadonly = computed(() => props.readonly);
const isValidating = shallowRef(false);
const items = ref([]);
const errors = ref([]);
async function validate() {
const results = [];
let valid = true;
errors.value = [];
isValidating.value = true;
for (const item of items.value) {
const itemErrorMessages = await item.validate();
if (itemErrorMessages.length > 0) {
valid = false;
results.push({
id: item.id,
errorMessages: itemErrorMessages
});
}
if (!valid && props.fastFail) break;
}
errors.value = results;
isValidating.value = false;
return {
valid,
errors: errors.value
};
}
function reset() {
items.value.forEach(item => item.reset());
}
function resetValidation() {
items.value.forEach(item => item.resetValidation());
}
watch(items, () => {
let valid = 0;
let invalid = 0;
const results = [];
for (const item of items.value) {
if (item.isValid === false) {
invalid++;
results.push({
id: item.id,
errorMessages: item.errorMessages
});
} else if (item.isValid === true) valid++;
}
errors.value = results;
model.value = invalid > 0 ? false : valid === items.value.length ? true : null;
}, {
deep: true
});
provide(FormKey, {
register: _ref => {
let {
id,
validate,
reset,
resetValidation
} = _ref;
if (items.value.some(item => item.id === id)) {
consoleWarn(`Duplicate input name "${id}"`);
}
items.value.push({
id,
validate,
reset,
resetValidation,
isValid: null,
errorMessages: []
});
},
unregister: id => {
items.value = items.value.filter(item => {
return item.id !== id;
});
},
update: (id, isValid, errorMessages) => {
const found = items.value.find(item => item.id === id);
if (!found) return;
found.isValid = isValid;
found.errorMessages = errorMessages;
},
isDisabled,
isReadonly,
isValidating,
isValid: model,
items,
validateOn: toRef(props, 'validateOn')
});
return {
errors,
isDisabled,
isReadonly,
isValidating,
isValid: model,
items,
validate,
reset,
resetValidation
};
}
export function useForm() {
return inject(FormKey, null);
}
//# sourceMappingURL=form.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,95 @@
// Types
const Refs = Symbol('Forwarded refs');
/** Omit properties starting with P */
function getDescriptor(obj, key) {
let currentObj = obj;
while (currentObj) {
const descriptor = Reflect.getOwnPropertyDescriptor(currentObj, key);
if (descriptor) return descriptor;
currentObj = Object.getPrototypeOf(currentObj);
}
return undefined;
}
export function forwardRefs(target) {
for (var _len = arguments.length, refs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
refs[_key - 1] = arguments[_key];
}
target[Refs] = refs;
return new Proxy(target, {
get(target, key) {
if (Reflect.has(target, key)) {
return Reflect.get(target, key);
}
// Skip internal properties
if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return;
for (const ref of refs) {
if (ref.value && Reflect.has(ref.value, key)) {
const val = Reflect.get(ref.value, key);
return typeof val === 'function' ? val.bind(ref.value) : val;
}
}
},
has(target, key) {
if (Reflect.has(target, key)) {
return true;
}
// Skip internal properties
if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return false;
for (const ref of refs) {
if (ref.value && Reflect.has(ref.value, key)) {
return true;
}
}
return false;
},
set(target, key, value) {
if (Reflect.has(target, key)) {
return Reflect.set(target, key, value);
}
// Skip internal properties
if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return false;
for (const ref of refs) {
if (ref.value && Reflect.has(ref.value, key)) {
return Reflect.set(ref.value, key, value);
}
}
return false;
},
getOwnPropertyDescriptor(target, key) {
const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
if (descriptor) return descriptor;
// Skip internal properties
if (typeof key === 'symbol' || key.startsWith('$') || key.startsWith('__')) return;
// Check each ref's own properties
for (const ref of refs) {
if (!ref.value) continue;
const descriptor = getDescriptor(ref.value, key) ?? ('_' in ref.value ? getDescriptor(ref.value._?.setupState, key) : undefined);
if (descriptor) return descriptor;
}
// Recursive search up each ref's prototype
for (const ref of refs) {
const childRefs = ref.value && ref.value[Refs];
if (!childRefs) continue;
const queue = childRefs.slice();
while (queue.length) {
const ref = queue.shift();
const descriptor = getDescriptor(ref.value, key);
if (descriptor) return descriptor;
const childRefs = ref.value && ref.value[Refs];
if (childRefs) queue.push(...childRefs);
}
}
return undefined;
}
});
}
//# sourceMappingURL=forwardRefs.mjs.map

File diff suppressed because one or more lines are too long

105
VApp/node_modules/vuetify/lib/composables/goto.mjs generated vendored Normal file
View File

@ -0,0 +1,105 @@
// Utilities
import { inject } from 'vue';
import { mergeDeep, refElement } from "../util/index.mjs"; // Types
export const GoToSymbol = Symbol.for('vuetify:goto');
function genDefaults() {
return {
container: undefined,
duration: 300,
layout: false,
offset: 0,
easing: 'easeInOutCubic',
patterns: {
linear: t => t,
easeInQuad: t => t ** 2,
easeOutQuad: t => t * (2 - t),
easeInOutQuad: t => t < 0.5 ? 2 * t ** 2 : -1 + (4 - 2 * t) * t,
easeInCubic: t => t ** 3,
easeOutCubic: t => --t ** 3 + 1,
easeInOutCubic: t => t < 0.5 ? 4 * t ** 3 : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
easeInQuart: t => t ** 4,
easeOutQuart: t => 1 - --t ** 4,
easeInOutQuart: t => t < 0.5 ? 8 * t ** 4 : 1 - 8 * --t ** 4,
easeInQuint: t => t ** 5,
easeOutQuint: t => 1 + --t ** 5,
easeInOutQuint: t => t < 0.5 ? 16 * t ** 5 : 1 + 16 * --t ** 5
}
};
}
function getContainer(el) {
return getTarget(el) ?? (document.scrollingElement || document.body);
}
function getTarget(el) {
return typeof el === 'string' ? document.querySelector(el) : refElement(el);
}
function getOffset(target, horizontal, rtl) {
if (typeof target === 'number') return horizontal && rtl ? -target : target;
let el = getTarget(target);
let totalOffset = 0;
while (el) {
totalOffset += horizontal ? el.offsetLeft : el.offsetTop;
el = el.offsetParent;
}
return totalOffset;
}
export function createGoTo(options, locale) {
return {
rtl: locale.isRtl,
options: mergeDeep(genDefaults(), options)
};
}
async function scrollTo(_target, _options, horizontal, goTo) {
const options = mergeDeep(goTo?.options, _options);
const rtl = goTo?.rtl.value;
const target = (typeof _target === 'number' ? _target : getTarget(_target)) ?? 0;
const container = options.container === 'parent' && target instanceof HTMLElement ? target.parentElement : getContainer(options.container);
const ease = typeof options.easing === 'function' ? options.easing : options.patterns[options.easing];
if (!ease) throw new TypeError(`Easing function "${options.easing}" not found.`);
let targetLocation;
if (typeof target === 'number') {
targetLocation = getOffset(target, horizontal, rtl);
} else {
targetLocation = getOffset(target, horizontal, rtl) - getOffset(container, horizontal, rtl);
if (options.layout) {
const styles = window.getComputedStyle(target);
const layoutOffset = styles.getPropertyValue('--v-layout-top');
if (layoutOffset) targetLocation -= parseInt(layoutOffset, 10);
}
}
targetLocation += options.offset;
const startLocation = (horizontal ? container.scrollLeft : container.scrollTop) ?? 0;
if (targetLocation === startLocation) return Promise.resolve(targetLocation);
const startTime = performance.now();
return new Promise(resolve => requestAnimationFrame(function step(currentTime) {
const timeElapsed = currentTime - startTime;
const progress = Math.abs(options.duration ? Math.min(timeElapsed / options.duration, 1) : 1);
const location = Math.floor(startLocation + (targetLocation - startLocation) * ease(progress));
container[horizontal ? 'scrollLeft' : 'scrollTop'] = location;
if (progress === 1) return resolve(targetLocation);
let clientSize;
let reachEnd;
if (!horizontal) {
clientSize = container === document.body ? document.documentElement.clientHeight : container.clientHeight;
reachEnd = clientSize + container.scrollTop >= container.scrollHeight;
if (targetLocation > container.scrollTop && reachEnd) return resolve(targetLocation);
} else {
clientSize = container === document.body ? document.documentElement.clientWidth : container.clientWidth;
reachEnd = clientSize + container.scrollLeft >= container.scrollWidth;
if (targetLocation > container.scrollLeft && reachEnd) return resolve(targetLocation);
}
requestAnimationFrame(step);
}));
}
export function useGoTo() {
let _options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
const goTo = inject(GoToSymbol);
if (!goTo) throw new Error('[Vuetify] Could not find injected goto instance');
async function go(target, options) {
return scrollTo(target, mergeDeep(_options, options), false, goTo);
}
go.horizontal = async (target, options) => {
return scrollTo(target, mergeDeep(_options, options), true, goTo);
};
return go;
}
//# sourceMappingURL=goto.mjs.map

File diff suppressed because one or more lines are too long

207
VApp/node_modules/vuetify/lib/composables/group.mjs generated vendored Normal file
View File

@ -0,0 +1,207 @@
// Composables
import { useProxiedModel } from "./proxiedModel.mjs"; // Utilities
import { computed, inject, onBeforeUnmount, onMounted, provide, reactive, toRef, unref, watch } from 'vue';
import { consoleWarn, deepEqual, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory, wrapInArray } from "../util/index.mjs"; // Types
export const makeGroupProps = propsFactory({
modelValue: {
type: null,
default: undefined
},
multiple: Boolean,
mandatory: [Boolean, String],
max: Number,
selectedClass: String,
disabled: Boolean
}, 'group');
export const makeGroupItemProps = propsFactory({
value: null,
disabled: Boolean,
selectedClass: String
}, 'group-item');
// Composables
export function useGroupItem(props, injectKey) {
let required = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
const vm = getCurrentInstance('useGroupItem');
if (!vm) {
throw new Error('[Vuetify] useGroupItem composable must be used inside a component setup function');
}
const id = getUid();
provide(Symbol.for(`${injectKey.description}:id`), id);
const group = inject(injectKey, null);
if (!group) {
if (!required) return group;
throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`);
}
const value = toRef(props, 'value');
const disabled = computed(() => !!(group.disabled.value || props.disabled));
group.register({
id,
value,
disabled
}, vm);
onBeforeUnmount(() => {
group.unregister(id);
});
const isSelected = computed(() => {
return group.isSelected(id);
});
const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass]);
watch(isSelected, value => {
vm.emit('group:selected', {
value
});
});
return {
id,
isSelected,
toggle: () => group.select(id, !isSelected.value),
select: value => group.select(id, value),
selectedClass,
value,
disabled,
group
};
}
export function useGroup(props, injectKey) {
let isUnmounted = false;
const items = reactive([]);
const selected = useProxiedModel(props, 'modelValue', [], v => {
if (v == null) return [];
return getIds(items, wrapInArray(v));
}, v => {
const arr = getValues(items, v);
return props.multiple ? arr : arr[0];
});
const groupVm = getCurrentInstance('useGroup');
function register(item, vm) {
// Is there a better way to fix this typing?
const unwrapped = item;
const key = Symbol.for(`${injectKey.description}:id`);
const children = findChildrenWithProvide(key, groupVm?.vnode);
const index = children.indexOf(vm);
if (unref(unwrapped.value) == null) {
unwrapped.value = index;
}
if (index > -1) {
items.splice(index, 0, unwrapped);
} else {
items.push(unwrapped);
}
}
function unregister(id) {
if (isUnmounted) return;
// TODO: re-evaluate this line's importance in the future
// should we only modify the model if mandatory is set.
// selected.value = selected.value.filter(v => v !== id)
forceMandatoryValue();
const index = items.findIndex(item => item.id === id);
items.splice(index, 1);
}
// If mandatory and nothing is selected, then select first non-disabled item
function forceMandatoryValue() {
const item = items.find(item => !item.disabled);
if (item && props.mandatory === 'force' && !selected.value.length) {
selected.value = [item.id];
}
}
onMounted(() => {
forceMandatoryValue();
});
onBeforeUnmount(() => {
isUnmounted = true;
});
function select(id, value) {
const item = items.find(item => item.id === id);
if (value && item?.disabled) return;
if (props.multiple) {
const internalValue = selected.value.slice();
const index = internalValue.findIndex(v => v === id);
const isSelected = ~index;
value = value ?? !isSelected;
// We can't remove value if group is
// mandatory, value already exists,
// and it is the only value
if (isSelected && props.mandatory && internalValue.length <= 1) return;
// We can't add value if it would
// cause max limit to be exceeded
if (!isSelected && props.max != null && internalValue.length + 1 > props.max) return;
if (index < 0 && value) internalValue.push(id);else if (index >= 0 && !value) internalValue.splice(index, 1);
selected.value = internalValue;
} else {
const isSelected = selected.value.includes(id);
if (props.mandatory && isSelected) return;
selected.value = value ?? !isSelected ? [id] : [];
}
}
function step(offset) {
// getting an offset from selected value obviously won't work with multiple values
if (props.multiple) consoleWarn('This method is not supported when using "multiple" prop');
if (!selected.value.length) {
const item = items.find(item => !item.disabled);
item && (selected.value = [item.id]);
} else {
const currentId = selected.value[0];
const currentIndex = items.findIndex(i => i.id === currentId);
let newIndex = (currentIndex + offset) % items.length;
let newItem = items[newIndex];
while (newItem.disabled && newIndex !== currentIndex) {
newIndex = (newIndex + offset) % items.length;
newItem = items[newIndex];
}
if (newItem.disabled) return;
selected.value = [items[newIndex].id];
}
}
const state = {
register,
unregister,
selected,
select,
disabled: toRef(props, 'disabled'),
prev: () => step(items.length - 1),
next: () => step(1),
isSelected: id => selected.value.includes(id),
selectedClass: computed(() => props.selectedClass),
items: computed(() => items),
getItemIndex: value => getItemIndex(items, value)
};
provide(injectKey, state);
return state;
}
function getItemIndex(items, value) {
const ids = getIds(items, [value]);
if (!ids.length) return -1;
return items.findIndex(item => item.id === ids[0]);
}
function getIds(items, modelValue) {
const ids = [];
modelValue.forEach(value => {
const item = items.find(item => deepEqual(value, item.value));
const itemByIndex = items[value];
if (item?.value != null) {
ids.push(item.id);
} else if (itemByIndex != null) {
ids.push(itemByIndex.id);
}
});
return ids;
}
function getValues(items, ids) {
const values = [];
ids.forEach(id => {
const itemIndex = items.findIndex(item => item.id === id);
if (~itemIndex) {
const item = items[itemIndex];
values.push(item.value != null ? item.value : itemIndex);
}
});
return values;
}
//# sourceMappingURL=group.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,20 @@
// Composables
import { useDisplay } from "./display.mjs"; // Utilities
import { onMounted, shallowRef } from 'vue';
import { IN_BROWSER } from "../util/index.mjs";
export function useHydration() {
if (!IN_BROWSER) return shallowRef(false);
const {
ssr
} = useDisplay();
if (ssr) {
const isMounted = shallowRef(false);
onMounted(() => {
isMounted.value = true;
});
return isMounted;
} else {
return shallowRef(true);
}
}
//# sourceMappingURL=hydration.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"hydration.mjs","names":["useDisplay","onMounted","shallowRef","IN_BROWSER","useHydration","ssr","isMounted","value"],"sources":["../../src/composables/hydration.ts"],"sourcesContent":["// Composables\nimport { useDisplay } from '@/composables/display'\n\n// Utilities\nimport { onMounted, shallowRef } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\nexport function useHydration () {\n if (!IN_BROWSER) return shallowRef(false)\n\n const { ssr } = useDisplay()\n\n if (ssr) {\n const isMounted = shallowRef(false)\n onMounted(() => {\n isMounted.value = true\n })\n return isMounted\n } else {\n return shallowRef(true)\n }\n}\n"],"mappings":"AAAA;AAAA,SACSA,UAAU,yBAEnB;AACA,SAASC,SAAS,EAAEC,UAAU,QAAQ,KAAK;AAAA,SAClCC,UAAU;AAEnB,OAAO,SAASC,YAAYA,CAAA,EAAI;EAC9B,IAAI,CAACD,UAAU,EAAE,OAAOD,UAAU,CAAC,KAAK,CAAC;EAEzC,MAAM;IAAEG;EAAI,CAAC,GAAGL,UAAU,CAAC,CAAC;EAE5B,IAAIK,GAAG,EAAE;IACP,MAAMC,SAAS,GAAGJ,UAAU,CAAC,KAAK,CAAC;IACnCD,SAAS,CAAC,MAAM;MACdK,SAAS,CAACC,KAAK,GAAG,IAAI;IACxB,CAAC,CAAC;IACF,OAAOD,SAAS;EAClB,CAAC,MAAM;IACL,OAAOJ,UAAU,CAAC,IAAI,CAAC;EACzB;AACF"}

150
VApp/node_modules/vuetify/lib/composables/icons.mjs generated vendored Normal file
View File

@ -0,0 +1,150 @@
import { mergeProps as _mergeProps, createVNode as _createVNode } from "vue";
// Icons
import { aliases, mdi } from "../iconsets/mdi.mjs"; // Utilities
import { computed, inject, unref } from 'vue';
import { defineComponent, genericComponent, mergeDeep, propsFactory } from "../util/index.mjs"; // Types
export const IconValue = [String, Function, Object, Array];
export const IconSymbol = Symbol.for('vuetify:icons');
export const makeIconProps = propsFactory({
icon: {
type: IconValue
},
// Could not remove this and use makeTagProps, types complained because it is not required
tag: {
type: String,
required: true
}
}, 'icon');
export const VComponentIcon = genericComponent()({
name: 'VComponentIcon',
props: makeIconProps(),
setup(props, _ref) {
let {
slots
} = _ref;
return () => {
const Icon = props.icon;
return _createVNode(props.tag, null, {
default: () => [props.icon ? _createVNode(Icon, null, null) : slots.default?.()]
});
};
}
});
export const VSvgIcon = defineComponent({
name: 'VSvgIcon',
inheritAttrs: false,
props: makeIconProps(),
setup(props, _ref2) {
let {
attrs
} = _ref2;
return () => {
return _createVNode(props.tag, _mergeProps(attrs, {
"style": null
}), {
default: () => [_createVNode("svg", {
"class": "v-icon__svg",
"xmlns": "http://www.w3.org/2000/svg",
"viewBox": "0 0 24 24",
"role": "img",
"aria-hidden": "true"
}, [Array.isArray(props.icon) ? props.icon.map(path => Array.isArray(path) ? _createVNode("path", {
"d": path[0],
"fill-opacity": path[1]
}, null) : _createVNode("path", {
"d": path
}, null)) : _createVNode("path", {
"d": props.icon
}, null)])]
});
};
}
});
export const VLigatureIcon = defineComponent({
name: 'VLigatureIcon',
props: makeIconProps(),
setup(props) {
return () => {
return _createVNode(props.tag, null, {
default: () => [props.icon]
});
};
}
});
export const VClassIcon = defineComponent({
name: 'VClassIcon',
props: makeIconProps(),
setup(props) {
return () => {
return _createVNode(props.tag, {
"class": props.icon
}, null);
};
}
});
export const defaultSets = {
svg: {
component: VSvgIcon
},
class: {
component: VClassIcon
}
};
// Composables
export function createIcons(options) {
return mergeDeep({
defaultSet: 'mdi',
sets: {
...defaultSets,
mdi
},
aliases: {
...aliases,
/* eslint-disable max-len */
vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],
'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z'
/* eslint-enable max-len */
}
}, options);
}
export const useIcon = props => {
const icons = inject(IconSymbol);
if (!icons) throw new Error('Missing Vuetify Icons provide!');
const iconData = computed(() => {
const iconAlias = unref(props);
if (!iconAlias) return {
component: VComponentIcon
};
let icon = iconAlias;
if (typeof icon === 'string') {
icon = icon.trim();
if (icon.startsWith('$')) {
icon = icons.aliases?.[icon.slice(1)];
}
}
if (!icon) throw new Error(`Could not find aliased icon "${iconAlias}"`);
if (Array.isArray(icon)) {
return {
component: VSvgIcon,
icon
};
} else if (typeof icon !== 'string') {
return {
component: VComponentIcon,
icon
};
}
const iconSetName = Object.keys(icons.sets).find(setName => typeof icon === 'string' && icon.startsWith(`${setName}:`));
const iconName = iconSetName ? icon.slice(iconSetName.length + 1) : icon;
const iconSet = icons.sets[iconSetName ?? icons.defaultSet];
return {
component: iconSet.component,
icon: iconName
};
});
return {
iconData
};
};
//# sourceMappingURL=icons.mjs.map

File diff suppressed because one or more lines are too long

12
VApp/node_modules/vuetify/lib/composables/index.mjs generated vendored Normal file
View File

@ -0,0 +1,12 @@
/*
* PUBLIC INTERFACES ONLY
* Imports in our code should be to the composable directly, not this file
*/
export { useDate } from "./date/index.mjs";
export { useDefaults } from "./defaults.mjs";
export { useDisplay } from "./display.mjs";
export { useGoTo } from "./goto.mjs";
export { useLayout } from "./layout.mjs";
export { useLocale, useRtl } from "./locale.mjs";
export { useTheme } from "./theme.mjs";
//# sourceMappingURL=index.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"index.mjs","names":["useDate","useDefaults","useDisplay","useGoTo","useLayout","useLocale","useRtl","useTheme"],"sources":["../../src/composables/index.ts"],"sourcesContent":["/*\n * PUBLIC INTERFACES ONLY\n * Imports in our code should be to the composable directly, not this file\n */\n\nexport { useDate } from './date'\nexport { useDefaults } from './defaults'\nexport { useDisplay } from './display'\nexport { useGoTo } from './goto'\nexport { useLayout } from './layout'\nexport { useLocale, useRtl } from './locale'\nexport { useTheme } from './theme'\n\nexport type { DateInstance } from './date'\nexport type { DefaultsInstance } from './defaults'\nexport type { DisplayBreakpoint, DisplayInstance, DisplayThresholds } from './display'\nexport type { SubmitEventPromise } from './form'\nexport type { GoToInstance } from './goto'\nexport type { IconAliases, IconProps, IconSet, IconOptions } from './icons'\nexport type { LocaleInstance, LocaleMessages, RtlInstance, LocaleOptions, RtlOptions } from './locale'\nexport type { ThemeDefinition, ThemeInstance } from './theme'\n"],"mappings":"AAAA;AACA;AACA;AACA;AAHA,SAKSA,OAAO;AAAA,SACPC,WAAW;AAAA,SACXC,UAAU;AAAA,SACVC,OAAO;AAAA,SACPC,SAAS;AAAA,SACTC,SAAS,EAAEC,MAAM;AAAA,SACjBC,QAAQ"}

View File

@ -0,0 +1,30 @@
// Utilities
import { onBeforeUnmount, ref, shallowRef, watch } from 'vue';
import { SUPPORTS_INTERSECTION } from "../util/index.mjs";
export function useIntersectionObserver(callback, options) {
const intersectionRef = ref();
const isIntersecting = shallowRef(false);
if (SUPPORTS_INTERSECTION) {
const observer = new IntersectionObserver(entries => {
callback?.(entries, observer);
isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
}, options);
onBeforeUnmount(() => {
observer.disconnect();
});
watch(intersectionRef, (newValue, oldValue) => {
if (oldValue) {
observer.unobserve(oldValue);
isIntersecting.value = false;
}
if (newValue) observer.observe(newValue);
}, {
flush: 'post'
});
}
return {
intersectionRef,
isIntersecting
};
}
//# sourceMappingURL=intersectionObserver.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"intersectionObserver.mjs","names":["onBeforeUnmount","ref","shallowRef","watch","SUPPORTS_INTERSECTION","useIntersectionObserver","callback","options","intersectionRef","isIntersecting","observer","IntersectionObserver","entries","value","find","entry","disconnect","newValue","oldValue","unobserve","observe","flush"],"sources":["../../src/composables/intersectionObserver.ts"],"sourcesContent":["// Utilities\nimport { onBeforeUnmount, ref, shallowRef, watch } from 'vue'\nimport { SUPPORTS_INTERSECTION } from '@/util'\n\nexport function useIntersectionObserver (callback?: IntersectionObserverCallback, options?: IntersectionObserverInit) {\n const intersectionRef = ref<HTMLElement>()\n const isIntersecting = shallowRef(false)\n\n if (SUPPORTS_INTERSECTION) {\n const observer = new IntersectionObserver((entries: IntersectionObserverEntry[]) => {\n callback?.(entries, observer)\n\n isIntersecting.value = !!entries.find(entry => entry.isIntersecting)\n }, options)\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(intersectionRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(oldValue)\n isIntersecting.value = false\n }\n\n if (newValue) observer.observe(newValue)\n }, {\n flush: 'post',\n })\n }\n\n return { intersectionRef, isIntersecting }\n}\n"],"mappings":"AAAA;AACA,SAASA,eAAe,EAAEC,GAAG,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACpDC,qBAAqB;AAE9B,OAAO,SAASC,uBAAuBA,CAAEC,QAAuC,EAAEC,OAAkC,EAAE;EACpH,MAAMC,eAAe,GAAGP,GAAG,CAAc,CAAC;EAC1C,MAAMQ,cAAc,GAAGP,UAAU,CAAC,KAAK,CAAC;EAExC,IAAIE,qBAAqB,EAAE;IACzB,MAAMM,QAAQ,GAAG,IAAIC,oBAAoB,CAAEC,OAAoC,IAAK;MAClFN,QAAQ,GAAGM,OAAO,EAAEF,QAAQ,CAAC;MAE7BD,cAAc,CAACI,KAAK,GAAG,CAAC,CAACD,OAAO,CAACE,IAAI,CAACC,KAAK,IAAIA,KAAK,CAACN,cAAc,CAAC;IACtE,CAAC,EAAEF,OAAO,CAAC;IAEXP,eAAe,CAAC,MAAM;MACpBU,QAAQ,CAACM,UAAU,CAAC,CAAC;IACvB,CAAC,CAAC;IAEFb,KAAK,CAACK,eAAe,EAAE,CAACS,QAAQ,EAAEC,QAAQ,KAAK;MAC7C,IAAIA,QAAQ,EAAE;QACZR,QAAQ,CAACS,SAAS,CAACD,QAAQ,CAAC;QAC5BT,cAAc,CAACI,KAAK,GAAG,KAAK;MAC9B;MAEA,IAAII,QAAQ,EAAEP,QAAQ,CAACU,OAAO,CAACH,QAAQ,CAAC;IAC1C,CAAC,EAAE;MACDI,KAAK,EAAE;IACT,CAAC,CAAC;EACJ;EAEA,OAAO;IAAEb,eAAe;IAAEC;EAAe,CAAC;AAC5C"}

272
VApp/node_modules/vuetify/lib/composables/layout.mjs generated vendored Normal file
View File

@ -0,0 +1,272 @@
// Composables
import { useResizeObserver } from "./resizeObserver.mjs"; // Utilities
import { computed, inject, onActivated, onBeforeUnmount, onDeactivated, onMounted, provide, reactive, ref, shallowRef } from 'vue';
import { convertToUnit, findChildrenWithProvide, getCurrentInstance, getUid, propsFactory } from "../util/index.mjs"; // Types
export const VuetifyLayoutKey = Symbol.for('vuetify:layout');
export const VuetifyLayoutItemKey = Symbol.for('vuetify:layout-item');
const ROOT_ZINDEX = 1000;
export const makeLayoutProps = propsFactory({
overlaps: {
type: Array,
default: () => []
},
fullHeight: Boolean
}, 'layout');
// Composables
export const makeLayoutItemProps = propsFactory({
name: {
type: String
},
order: {
type: [Number, String],
default: 0
},
absolute: Boolean
}, 'layout-item');
export function useLayout() {
const layout = inject(VuetifyLayoutKey);
if (!layout) throw new Error('[Vuetify] Could not find injected layout');
return {
getLayoutItem: layout.getLayoutItem,
mainRect: layout.mainRect,
mainStyles: layout.mainStyles
};
}
export function useLayoutItem(options) {
const layout = inject(VuetifyLayoutKey);
if (!layout) throw new Error('[Vuetify] Could not find injected layout');
const id = options.id ?? `layout-item-${getUid()}`;
const vm = getCurrentInstance('useLayoutItem');
provide(VuetifyLayoutItemKey, {
id
});
const isKeptAlive = shallowRef(false);
onDeactivated(() => isKeptAlive.value = true);
onActivated(() => isKeptAlive.value = false);
const {
layoutItemStyles,
layoutItemScrimStyles
} = layout.register(vm, {
...options,
active: computed(() => isKeptAlive.value ? false : options.active.value),
id
});
onBeforeUnmount(() => layout.unregister(id));
return {
layoutItemStyles,
layoutRect: layout.layoutRect,
layoutItemScrimStyles
};
}
const generateLayers = (layout, positions, layoutSizes, activeItems) => {
let previousLayer = {
top: 0,
left: 0,
right: 0,
bottom: 0
};
const layers = [{
id: '',
layer: {
...previousLayer
}
}];
for (const id of layout) {
const position = positions.get(id);
const amount = layoutSizes.get(id);
const active = activeItems.get(id);
if (!position || !amount || !active) continue;
const layer = {
...previousLayer,
[position.value]: parseInt(previousLayer[position.value], 10) + (active.value ? parseInt(amount.value, 10) : 0)
};
layers.push({
id,
layer
});
previousLayer = layer;
}
return layers;
};
export function createLayout(props) {
const parentLayout = inject(VuetifyLayoutKey, null);
const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX);
const registered = ref([]);
const positions = reactive(new Map());
const layoutSizes = reactive(new Map());
const priorities = reactive(new Map());
const activeItems = reactive(new Map());
const disabledTransitions = reactive(new Map());
const {
resizeRef,
contentRect: layoutRect
} = useResizeObserver();
const computedOverlaps = computed(() => {
const map = new Map();
const overlaps = props.overlaps ?? [];
for (const overlap of overlaps.filter(item => item.includes(':'))) {
const [top, bottom] = overlap.split(':');
if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue;
const topPosition = positions.get(top);
const bottomPosition = positions.get(bottom);
const topAmount = layoutSizes.get(top);
const bottomAmount = layoutSizes.get(bottom);
if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;
map.set(bottom, {
position: topPosition.value,
amount: parseInt(topAmount.value, 10)
});
map.set(top, {
position: bottomPosition.value,
amount: -parseInt(bottomAmount.value, 10)
});
}
return map;
});
const layers = computed(() => {
const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b);
const layout = [];
for (const p of uniquePriorities) {
const items = registered.value.filter(id => priorities.get(id)?.value === p);
layout.push(...items);
}
return generateLayers(layout, positions, layoutSizes, activeItems);
});
const transitionsEnabled = computed(() => {
return !Array.from(disabledTransitions.values()).some(ref => ref.value);
});
const mainRect = computed(() => {
return layers.value[layers.value.length - 1].layer;
});
const mainStyles = computed(() => {
return {
'--v-layout-left': convertToUnit(mainRect.value.left),
'--v-layout-right': convertToUnit(mainRect.value.right),
'--v-layout-top': convertToUnit(mainRect.value.top),
'--v-layout-bottom': convertToUnit(mainRect.value.bottom),
...(transitionsEnabled.value ? undefined : {
transition: 'none'
})
};
});
const items = computed(() => {
return layers.value.slice(1).map((_ref, index) => {
let {
id
} = _ref;
const {
layer
} = layers.value[index];
const size = layoutSizes.get(id);
const position = positions.get(id);
return {
id,
...layer,
size: Number(size.value),
position: position.value
};
});
});
const getLayoutItem = id => {
return items.value.find(item => item.id === id);
};
const rootVm = getCurrentInstance('createLayout');
const isMounted = shallowRef(false);
onMounted(() => {
isMounted.value = true;
});
provide(VuetifyLayoutKey, {
register: (vm, _ref2) => {
let {
id,
order,
position,
layoutSize,
elementSize,
active,
disableTransitions,
absolute
} = _ref2;
priorities.set(id, order);
positions.set(id, position);
layoutSizes.set(id, layoutSize);
activeItems.set(id, active);
disableTransitions && disabledTransitions.set(id, disableTransitions);
const instances = findChildrenWithProvide(VuetifyLayoutItemKey, rootVm?.vnode);
const instanceIndex = instances.indexOf(vm);
if (instanceIndex > -1) registered.value.splice(instanceIndex, 0, id);else registered.value.push(id);
const index = computed(() => items.value.findIndex(i => i.id === id));
const zIndex = computed(() => rootZIndex.value + layers.value.length * 2 - index.value * 2);
const layoutItemStyles = computed(() => {
const isHorizontal = position.value === 'left' || position.value === 'right';
const isOppositeHorizontal = position.value === 'right';
const isOppositeVertical = position.value === 'bottom';
const styles = {
[position.value]: 0,
zIndex: zIndex.value,
transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -110) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}%)`,
position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',
...(transitionsEnabled.value ? undefined : {
transition: 'none'
})
};
if (!isMounted.value) return styles;
const item = items.value[index.value];
if (!item) throw new Error(`[Vuetify] Could not find layout item "${id}"`);
const overlap = computedOverlaps.value.get(id);
if (overlap) {
item[overlap.position] += overlap.amount;
}
return {
...styles,
height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,
left: isOppositeHorizontal ? undefined : `${item.left}px`,
right: isOppositeHorizontal ? `${item.right}px` : undefined,
top: position.value !== 'bottom' ? `${item.top}px` : undefined,
bottom: position.value !== 'top' ? `${item.bottom}px` : undefined,
width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : elementSize.value ? `${elementSize.value}px` : undefined
};
});
const layoutItemScrimStyles = computed(() => ({
zIndex: zIndex.value - 1
}));
return {
layoutItemStyles,
layoutItemScrimStyles,
zIndex
};
},
unregister: id => {
priorities.delete(id);
positions.delete(id);
layoutSizes.delete(id);
activeItems.delete(id);
disabledTransitions.delete(id);
registered.value = registered.value.filter(v => v !== id);
},
mainRect,
mainStyles,
getLayoutItem,
items,
layoutRect,
rootZIndex
});
const layoutClasses = computed(() => ['v-layout', {
'v-layout--full-height': props.fullHeight
}]);
const layoutStyles = computed(() => ({
zIndex: parentLayout ? rootZIndex.value : undefined,
position: parentLayout ? 'relative' : undefined,
overflow: parentLayout ? 'hidden' : undefined
}));
return {
layoutClasses,
layoutStyles,
getLayoutItem,
items,
layoutRect,
layoutRef: resizeRef
};
}
//# sourceMappingURL=layout.mjs.map

File diff suppressed because one or more lines are too long

20
VApp/node_modules/vuetify/lib/composables/lazy.mjs generated vendored Normal file
View File

@ -0,0 +1,20 @@
// Utilities
import { computed, shallowRef, watch } from 'vue';
import { propsFactory } from "../util/index.mjs"; // Types
export const makeLazyProps = propsFactory({
eager: Boolean
}, 'lazy');
export function useLazy(props, active) {
const isBooted = shallowRef(false);
const hasContent = computed(() => isBooted.value || props.eager || active.value);
watch(active, () => isBooted.value = true);
function onAfterLeave() {
if (!props.eager) isBooted.value = false;
}
return {
isBooted,
hasContent,
onAfterLeave
};
}
//# sourceMappingURL=lazy.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"lazy.mjs","names":["computed","shallowRef","watch","propsFactory","makeLazyProps","eager","Boolean","useLazy","props","active","isBooted","hasContent","value","onAfterLeave"],"sources":["../../src/composables/lazy.ts"],"sourcesContent":["// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport { propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport const makeLazyProps = propsFactory({\n eager: Boolean,\n}, 'lazy')\n\nexport function useLazy (props: { eager: boolean }, active: Ref<boolean>) {\n const isBooted = shallowRef(false)\n const hasContent = computed(() => isBooted.value || props.eager || active.value)\n\n watch(active, () => isBooted.value = true)\n\n function onAfterLeave () {\n if (!props.eager) isBooted.value = false\n }\n\n return { isBooted, hasContent, onAfterLeave }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACxCC,YAAY,6BAErB;AAGA,OAAO,MAAMC,aAAa,GAAGD,YAAY,CAAC;EACxCE,KAAK,EAAEC;AACT,CAAC,EAAE,MAAM,CAAC;AAEV,OAAO,SAASC,OAAOA,CAAEC,KAAyB,EAAEC,MAAoB,EAAE;EACxE,MAAMC,QAAQ,GAAGT,UAAU,CAAC,KAAK,CAAC;EAClC,MAAMU,UAAU,GAAGX,QAAQ,CAAC,MAAMU,QAAQ,CAACE,KAAK,IAAIJ,KAAK,CAACH,KAAK,IAAII,MAAM,CAACG,KAAK,CAAC;EAEhFV,KAAK,CAACO,MAAM,EAAE,MAAMC,QAAQ,CAACE,KAAK,GAAG,IAAI,CAAC;EAE1C,SAASC,YAAYA,CAAA,EAAI;IACvB,IAAI,CAACL,KAAK,CAACH,KAAK,EAAEK,QAAQ,CAACE,KAAK,GAAG,KAAK;EAC1C;EAEA,OAAO;IAAEF,QAAQ;IAAEC,UAAU;IAAEE;EAAa,CAAC;AAC/C"}

View File

@ -0,0 +1,94 @@
// Utilities
import { computed } from 'vue';
import { deepEqual, getPropertyFromItem, omit, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeItemsProps = propsFactory({
items: {
type: Array,
default: () => []
},
itemTitle: {
type: [String, Array, Function],
default: 'title'
},
itemValue: {
type: [String, Array, Function],
default: 'value'
},
itemChildren: {
type: [Boolean, String, Array, Function],
default: 'children'
},
itemProps: {
type: [Boolean, String, Array, Function],
default: 'props'
},
returnObject: Boolean,
valueComparator: {
type: Function,
default: deepEqual
}
}, 'list-items');
export function transformItem(props, item) {
const title = getPropertyFromItem(item, props.itemTitle, item);
const value = getPropertyFromItem(item, props.itemValue, title);
const children = getPropertyFromItem(item, props.itemChildren);
const itemProps = props.itemProps === true ? typeof item === 'object' && item != null && !Array.isArray(item) ? 'children' in item ? omit(item, ['children']) : item : undefined : getPropertyFromItem(item, props.itemProps);
const _props = {
title,
value,
...itemProps
};
return {
title: String(_props.title ?? ''),
value: _props.value,
props: _props,
children: Array.isArray(children) ? transformItems(props, children) : undefined,
raw: item
};
}
export function transformItems(props, items) {
const array = [];
for (const item of items) {
array.push(transformItem(props, item));
}
return array;
}
export function useItems(props) {
const items = computed(() => transformItems(props, props.items));
const hasNullItem = computed(() => items.value.some(item => item.value === null));
function transformIn(value) {
if (!hasNullItem.value) {
// When the model value is null, return an InternalItem
// based on null only if null is one of the items
value = value.filter(v => v !== null);
}
return value.map(v => {
if (props.returnObject && typeof v === 'string') {
// String model value means value is a custom input value from combobox
// Don't look up existing items if the model value is a string
return transformItem(props, v);
}
return items.value.find(item => props.valueComparator(v, item.value)) || transformItem(props, v);
});
}
function transformOut(value) {
return props.returnObject ? value.map(_ref => {
let {
raw
} = _ref;
return raw;
}) : value.map(_ref2 => {
let {
value
} = _ref2;
return value;
});
}
return {
items,
transformIn,
transformOut
};
}
//# sourceMappingURL=list-items.mjs.map

File diff suppressed because one or more lines are too long

36
VApp/node_modules/vuetify/lib/composables/loader.mjs generated vendored Normal file
View File

@ -0,0 +1,36 @@
import { createVNode as _createVNode } from "vue";
// Components
import { VProgressLinear } from "../components/VProgressLinear/index.mjs"; // Utilities
import { computed } from 'vue';
import { getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeLoaderProps = propsFactory({
loading: [Boolean, String]
}, 'loader');
export function useLoader(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const loaderClasses = computed(() => ({
[`${name}--loading`]: props.loading
}));
return {
loaderClasses
};
}
export function LoaderSlot(props, _ref) {
let {
slots
} = _ref;
return _createVNode("div", {
"class": `${props.name}__loader`
}, [slots.default?.({
color: props.color,
isActive: props.active
}) || _createVNode(VProgressLinear, {
"absolute": props.absolute,
"active": props.active,
"color": props.color,
"height": "2",
"indeterminate": true
}, null)]);
}
//# sourceMappingURL=loader.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"loader.mjs","names":["VProgressLinear","computed","getCurrentInstanceName","propsFactory","makeLoaderProps","loading","Boolean","String","useLoader","props","name","arguments","length","undefined","loaderClasses","LoaderSlot","_ref","slots","_createVNode","default","color","isActive","active","absolute"],"sources":["../../src/composables/loader.tsx"],"sourcesContent":["// Components\nimport { VProgressLinear } from '@/components/VProgressLinear'\n\n// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { ExtractPropTypes, SetupContext } from 'vue'\nimport type { SlotsToProps } from '@/util'\n\nexport interface LoaderSlotProps {\n color: string | undefined\n isActive: boolean\n}\n\nexport interface LoaderProps {\n loading?: boolean | string\n}\n\n// Composables\nexport const makeLoaderProps = propsFactory({\n loading: [Boolean, String],\n}, 'loader')\n\nexport function useLoader (\n props: LoaderProps,\n name = getCurrentInstanceName(),\n) {\n const loaderClasses = computed(() => ({\n [`${name}--loading`]: props.loading,\n }))\n\n return { loaderClasses }\n}\n\nexport function LoaderSlot (\n props: {\n absolute?: boolean\n active: boolean\n name: string\n color?: string\n } & ExtractPropTypes<SlotsToProps<{\n default: LoaderSlotProps\n }>>,\n { slots }: SetupContext,\n) {\n return (\n <div class={ `${props.name}__loader` }>\n { slots.default?.({\n color: props.color,\n isActive: props.active,\n } as LoaderSlotProps) || (\n <VProgressLinear\n absolute={ props.absolute }\n active={ props.active }\n color={ props.color }\n height=\"2\"\n indeterminate\n />\n )}\n </div>\n )\n}\n"],"mappings":";AAAA;AAAA,SACSA,eAAe,mDAExB;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,sBAAsB,EAAEC,YAAY,6BAE7C;AAaA;AACA,OAAO,MAAMC,eAAe,GAAGD,YAAY,CAAC;EAC1CE,OAAO,EAAE,CAACC,OAAO,EAAEC,MAAM;AAC3B,CAAC,EAAE,QAAQ,CAAC;AAEZ,OAAO,SAASC,SAASA,CACvBC,KAAkB,EAElB;EAAA,IADAC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGT,sBAAsB,CAAC,CAAC;EAE/B,MAAMY,aAAa,GAAGb,QAAQ,CAAC,OAAO;IACpC,CAAE,GAAES,IAAK,WAAU,GAAGD,KAAK,CAACJ;EAC9B,CAAC,CAAC,CAAC;EAEH,OAAO;IAAES;EAAc,CAAC;AAC1B;AAEA,OAAO,SAASC,UAAUA,CACxBN,KAOG,EAAAO,IAAA,EAEH;EAAA,IADA;IAAEC;EAAoB,CAAC,GAAAD,IAAA;EAEvB,OAAAE,YAAA;IAAA,SACgB,GAAET,KAAK,CAACC,IAAK;EAAS,IAChCO,KAAK,CAACE,OAAO,GAAG;IAChBC,KAAK,EAAEX,KAAK,CAACW,KAAK;IAClBC,QAAQ,EAAEZ,KAAK,CAACa;EAClB,CAAoB,CAAC,IAAAJ,YAAA,CAAAlB,eAAA;IAAA,YAENS,KAAK,CAACc,QAAQ;IAAA,UAChBd,KAAK,CAACa,MAAM;IAAA,SACbb,KAAK,CAACW,KAAK;IAAA;IAAA;EAAA,QAItB;AAGP"}

108
VApp/node_modules/vuetify/lib/composables/locale.mjs generated vendored Normal file
View File

@ -0,0 +1,108 @@
// Utilities
import { computed, inject, provide, ref } from 'vue';
import { createVuetifyAdapter } from "../locale/adapters/vuetify.mjs"; // Types
export const LocaleSymbol = Symbol.for('vuetify:locale');
function isLocaleInstance(obj) {
return obj.name != null;
}
export function createLocale(options) {
const i18n = options?.adapter && isLocaleInstance(options?.adapter) ? options?.adapter : createVuetifyAdapter(options);
const rtl = createRtl(i18n, options);
return {
...i18n,
...rtl
};
}
export function useLocale() {
const locale = inject(LocaleSymbol);
if (!locale) throw new Error('[Vuetify] Could not find injected locale instance');
return locale;
}
export function provideLocale(props) {
const locale = inject(LocaleSymbol);
if (!locale) throw new Error('[Vuetify] Could not find injected locale instance');
const i18n = locale.provide(props);
const rtl = provideRtl(i18n, locale.rtl, props);
const data = {
...i18n,
...rtl
};
provide(LocaleSymbol, data);
return data;
}
// RTL
export const RtlSymbol = Symbol.for('vuetify:rtl');
function genDefaults() {
return {
af: false,
ar: true,
bg: false,
ca: false,
ckb: false,
cs: false,
de: false,
el: false,
en: false,
es: false,
et: false,
fa: true,
fi: false,
fr: false,
hr: false,
hu: false,
he: true,
id: false,
it: false,
ja: false,
km: false,
ko: false,
lv: false,
lt: false,
nl: false,
no: false,
pl: false,
pt: false,
ro: false,
ru: false,
sk: false,
sl: false,
srCyrl: false,
srLatn: false,
sv: false,
th: false,
tr: false,
az: false,
uk: false,
vi: false,
zhHans: false,
zhHant: false
};
}
export function createRtl(i18n, options) {
const rtl = ref(options?.rtl ?? genDefaults());
const isRtl = computed(() => rtl.value[i18n.current.value] ?? false);
return {
isRtl,
rtl,
rtlClasses: computed(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`)
};
}
export function provideRtl(locale, rtl, props) {
const isRtl = computed(() => props.rtl ?? rtl.value[locale.current.value] ?? false);
return {
isRtl,
rtl,
rtlClasses: computed(() => `v-locale--is-${isRtl.value ? 'rtl' : 'ltr'}`)
};
}
export function useRtl() {
const locale = inject(LocaleSymbol);
if (!locale) throw new Error('[Vuetify] Could not find injected rtl instance');
return {
isRtl: locale.isRtl,
rtlClasses: locale.rtlClasses
};
}
//# sourceMappingURL=locale.mjs.map

File diff suppressed because one or more lines are too long

59
VApp/node_modules/vuetify/lib/composables/location.mjs generated vendored Normal file
View File

@ -0,0 +1,59 @@
// Composables
import { useRtl } from "./locale.mjs"; // Utilities
import { computed } from 'vue';
import { parseAnchor, propsFactory } from "../util/index.mjs"; // Types
const oppositeMap = {
center: 'center',
top: 'bottom',
bottom: 'top',
left: 'right',
right: 'left'
};
export const makeLocationProps = propsFactory({
location: String
}, 'location');
export function useLocation(props) {
let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
let offset = arguments.length > 2 ? arguments[2] : undefined;
const {
isRtl
} = useRtl();
const locationStyles = computed(() => {
if (!props.location) return {};
const {
side,
align
} = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
function getOffset(side) {
return offset ? offset(side) : 0;
}
const styles = {};
if (side !== 'center') {
if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
}
if (align !== 'center') {
if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
} else {
if (side === 'center') styles.top = styles.left = '50%';else {
styles[{
top: 'left',
bottom: 'left',
left: 'top',
right: 'top'
}[side]] = '50%';
}
styles.transform = {
top: 'translateX(-50%)',
bottom: 'translateX(-50%)',
left: 'translateY(-50%)',
right: 'translateY(-50%)',
center: 'translate(-50%, -50%)'
}[side];
}
return styles;
});
return {
locationStyles
};
}
//# sourceMappingURL=location.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"location.mjs","names":["useRtl","computed","parseAnchor","propsFactory","oppositeMap","center","top","bottom","left","right","makeLocationProps","location","String","useLocation","props","opposite","arguments","length","undefined","offset","isRtl","locationStyles","side","align","split","value","getOffset","styles","transform"],"sources":["../../src/composables/location.ts"],"sourcesContent":["// Composables\nimport { useRtl } from '@/composables/locale'\n\n// Utilities\nimport { computed } from 'vue'\nimport { parseAnchor, propsFactory } from '@/util'\n\n// Types\nimport type { CSSProperties, PropType } from 'vue'\nimport type { Anchor } from '@/util'\n\nconst oppositeMap = {\n center: 'center',\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n} as const\n\nexport interface LocationProps {\n location: Anchor | undefined\n}\n\nexport const makeLocationProps = propsFactory({\n location: String as PropType<Anchor>,\n}, 'location')\n\nexport function useLocation (props: LocationProps, opposite = false, offset?: (side: string) => number) {\n const { isRtl } = useRtl()\n\n const locationStyles = computed(() => {\n if (!props.location) return {}\n\n const { side, align } = parseAnchor(\n props.location.split(' ').length > 1\n ? props.location\n : `${props.location} center` as Anchor,\n isRtl.value\n )\n\n function getOffset (side: string) {\n return offset\n ? offset(side)\n : 0\n }\n\n const styles = {} as CSSProperties\n\n if (side !== 'center') {\n if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`\n else styles[side] = 0\n }\n if (align !== 'center') {\n if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`\n else styles[align] = 0\n } else {\n if (side === 'center') styles.top = styles.left = '50%'\n else {\n styles[({\n top: 'left',\n bottom: 'left',\n left: 'top',\n right: 'top',\n } as const)[side]] = '50%'\n }\n styles.transform = {\n top: 'translateX(-50%)',\n bottom: 'translateX(-50%)',\n left: 'translateY(-50%)',\n right: 'translateY(-50%)',\n center: 'translate(-50%, -50%)',\n }[side]\n }\n\n return styles\n })\n\n return { locationStyles }\n}\n"],"mappings":"AAAA;AAAA,SACSA,MAAM,wBAEf;AACA,SAASC,QAAQ,QAAQ,KAAK;AAAA,SACrBC,WAAW,EAAEC,YAAY,6BAElC;AAIA,MAAMC,WAAW,GAAG;EAClBC,MAAM,EAAE,QAAQ;EAChBC,GAAG,EAAE,QAAQ;EACbC,MAAM,EAAE,KAAK;EACbC,IAAI,EAAE,OAAO;EACbC,KAAK,EAAE;AACT,CAAU;AAMV,OAAO,MAAMC,iBAAiB,GAAGP,YAAY,CAAC;EAC5CQ,QAAQ,EAAEC;AACZ,CAAC,EAAE,UAAU,CAAC;AAEd,OAAO,SAASC,WAAWA,CAAEC,KAAoB,EAAuD;EAAA,IAArDC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;EAAA,IAAEG,MAAiC,GAAAH,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;EACpG,MAAM;IAAEE;EAAM,CAAC,GAAGpB,MAAM,CAAC,CAAC;EAE1B,MAAMqB,cAAc,GAAGpB,QAAQ,CAAC,MAAM;IACpC,IAAI,CAACa,KAAK,CAACH,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE9B,MAAM;MAAEW,IAAI;MAAEC;IAAM,CAAC,GAAGrB,WAAW,CACjCY,KAAK,CAACH,QAAQ,CAACa,KAAK,CAAC,GAAG,CAAC,CAACP,MAAM,GAAG,CAAC,GAChCH,KAAK,CAACH,QAAQ,GACb,GAAEG,KAAK,CAACH,QAAS,SAAkB,EACxCS,KAAK,CAACK,KACR,CAAC;IAED,SAASC,SAASA,CAAEJ,IAAY,EAAE;MAChC,OAAOH,MAAM,GACTA,MAAM,CAACG,IAAI,CAAC,GACZ,CAAC;IACP;IAEA,MAAMK,MAAM,GAAG,CAAC,CAAkB;IAElC,IAAIL,IAAI,KAAK,QAAQ,EAAE;MACrB,IAAIP,QAAQ,EAAEY,MAAM,CAACvB,WAAW,CAACkB,IAAI,CAAC,CAAC,GAAI,eAAcI,SAAS,CAACJ,IAAI,CAAE,KAAI,MACxEK,MAAM,CAACL,IAAI,CAAC,GAAG,CAAC;IACvB;IACA,IAAIC,KAAK,KAAK,QAAQ,EAAE;MACtB,IAAIR,QAAQ,EAAEY,MAAM,CAACvB,WAAW,CAACmB,KAAK,CAAC,CAAC,GAAI,eAAcG,SAAS,CAACH,KAAK,CAAE,KAAI,MAC1EI,MAAM,CAACJ,KAAK,CAAC,GAAG,CAAC;IACxB,CAAC,MAAM;MACL,IAAID,IAAI,KAAK,QAAQ,EAAEK,MAAM,CAACrB,GAAG,GAAGqB,MAAM,CAACnB,IAAI,GAAG,KAAK,MAClD;QACHmB,MAAM,CAAE;UACNrB,GAAG,EAAE,MAAM;UACXC,MAAM,EAAE,MAAM;UACdC,IAAI,EAAE,KAAK;UACXC,KAAK,EAAE;QACT,CAAC,CAAWa,IAAI,CAAC,CAAC,GAAG,KAAK;MAC5B;MACAK,MAAM,CAACC,SAAS,GAAG;QACjBtB,GAAG,EAAE,kBAAkB;QACvBC,MAAM,EAAE,kBAAkB;QAC1BC,IAAI,EAAE,kBAAkB;QACxBC,KAAK,EAAE,kBAAkB;QACzBJ,MAAM,EAAE;MACV,CAAC,CAACiB,IAAI,CAAC;IACT;IAEA,OAAOK,MAAM;EACf,CAAC,CAAC;EAEF,OAAO;IAAEN;EAAe,CAAC;AAC3B"}

View File

@ -0,0 +1,40 @@
// Utilities
import { onBeforeUnmount, onMounted, ref, watch } from 'vue';
import { refElement } from "../util/index.mjs"; // Types
export function useMutationObserver(handler, options) {
const mutationRef = ref();
const {
once,
immediate,
...optionKeys
} = options || {};
const defaultValue = !Object.keys(optionKeys).length;
const observer = new MutationObserver((mutations, observer) => {
handler?.(mutations, observer);
if (options?.once) observer.disconnect();
});
onMounted(() => {
if (!options?.immediate) return;
handler?.([], observer);
});
onBeforeUnmount(() => {
observer.disconnect();
});
watch(mutationRef, (newValue, oldValue) => {
if (oldValue) observer.disconnect();
const el = refElement(newValue);
if (!el) return;
observer.observe(el, {
attributes: options?.attr ?? defaultValue,
characterData: options?.char ?? defaultValue,
childList: options?.child ?? defaultValue,
subtree: options?.sub ?? defaultValue
});
}, {
flush: 'post'
});
return {
mutationRef
};
}
//# sourceMappingURL=mutationObserver.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"mutationObserver.mjs","names":["onBeforeUnmount","onMounted","ref","watch","refElement","useMutationObserver","handler","options","mutationRef","once","immediate","optionKeys","defaultValue","Object","keys","length","observer","MutationObserver","mutations","disconnect","newValue","oldValue","el","observe","attributes","attr","characterData","char","childList","child","subtree","sub","flush"],"sources":["../../src/composables/mutationObserver.ts"],"sourcesContent":["// Utilities\nimport { onBeforeUnmount, onMounted, ref, watch } from 'vue'\nimport { refElement } from '@/util'\n\n// Types\nimport type { ComponentPublicInstance } from 'vue'\n\nexport interface MutationOptions {\n attr?: boolean\n char?: boolean\n child?: boolean\n sub?: boolean\n once?: boolean\n immediate?: boolean\n}\n\nexport function useMutationObserver (\n handler?: MutationCallback,\n options?: MutationOptions,\n) {\n const mutationRef = ref<ComponentPublicInstance | HTMLElement>()\n const { once, immediate, ...optionKeys } = options || {}\n const defaultValue = !Object.keys(optionKeys).length\n\n const observer = new MutationObserver((\n mutations: MutationRecord[],\n observer: MutationObserver\n ) => {\n handler?.(mutations, observer)\n\n if (options?.once) observer.disconnect()\n })\n\n onMounted(() => {\n if (!options?.immediate) return\n\n handler?.([], observer)\n })\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(mutationRef, (newValue, oldValue) => {\n if (oldValue) observer.disconnect()\n\n const el = refElement(newValue)\n\n if (!el) return\n\n observer.observe(el, {\n attributes: options?.attr ?? defaultValue,\n characterData: options?.char ?? defaultValue,\n childList: options?.child ?? defaultValue,\n subtree: options?.sub ?? defaultValue,\n })\n }, {\n flush: 'post',\n })\n\n return { mutationRef }\n}\n"],"mappings":"AAAA;AACA,SAASA,eAAe,EAAEC,SAAS,EAAEC,GAAG,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACnDC,UAAU,6BAEnB;AAYA,OAAO,SAASC,mBAAmBA,CACjCC,OAA0B,EAC1BC,OAAyB,EACzB;EACA,MAAMC,WAAW,GAAGN,GAAG,CAAwC,CAAC;EAChE,MAAM;IAAEO,IAAI;IAAEC,SAAS;IAAE,GAAGC;EAAW,CAAC,GAAGJ,OAAO,IAAI,CAAC,CAAC;EACxD,MAAMK,YAAY,GAAG,CAACC,MAAM,CAACC,IAAI,CAACH,UAAU,CAAC,CAACI,MAAM;EAEpD,MAAMC,QAAQ,GAAG,IAAIC,gBAAgB,CAAC,CACpCC,SAA2B,EAC3BF,QAA0B,KACvB;IACHV,OAAO,GAAGY,SAAS,EAAEF,QAAQ,CAAC;IAE9B,IAAIT,OAAO,EAAEE,IAAI,EAAEO,QAAQ,CAACG,UAAU,CAAC,CAAC;EAC1C,CAAC,CAAC;EAEFlB,SAAS,CAAC,MAAM;IACd,IAAI,CAACM,OAAO,EAAEG,SAAS,EAAE;IAEzBJ,OAAO,GAAG,EAAE,EAAEU,QAAQ,CAAC;EACzB,CAAC,CAAC;EAEFhB,eAAe,CAAC,MAAM;IACpBgB,QAAQ,CAACG,UAAU,CAAC,CAAC;EACvB,CAAC,CAAC;EAEFhB,KAAK,CAACK,WAAW,EAAE,CAACY,QAAQ,EAAEC,QAAQ,KAAK;IACzC,IAAIA,QAAQ,EAAEL,QAAQ,CAACG,UAAU,CAAC,CAAC;IAEnC,MAAMG,EAAE,GAAGlB,UAAU,CAACgB,QAAQ,CAAC;IAE/B,IAAI,CAACE,EAAE,EAAE;IAETN,QAAQ,CAACO,OAAO,CAACD,EAAE,EAAE;MACnBE,UAAU,EAAEjB,OAAO,EAAEkB,IAAI,IAAIb,YAAY;MACzCc,aAAa,EAAEnB,OAAO,EAAEoB,IAAI,IAAIf,YAAY;MAC5CgB,SAAS,EAAErB,OAAO,EAAEsB,KAAK,IAAIjB,YAAY;MACzCkB,OAAO,EAAEvB,OAAO,EAAEwB,GAAG,IAAInB;IAC3B,CAAC,CAAC;EACJ,CAAC,EAAE;IACDoB,KAAK,EAAE;EACT,CAAC,CAAC;EAEF,OAAO;IAAExB;EAAY,CAAC;AACxB"}

View File

@ -0,0 +1,192 @@
// Composables
import { useProxiedModel } from "../proxiedModel.mjs"; // Utilities
import { computed, inject, onBeforeUnmount, provide, ref, shallowRef, toRaw } from 'vue';
import { listOpenStrategy, multipleOpenStrategy, singleOpenStrategy } from "./openStrategies.mjs";
import { classicSelectStrategy, independentSelectStrategy, independentSingleSelectStrategy, leafSelectStrategy, leafSingleSelectStrategy } from "./selectStrategies.mjs";
import { getCurrentInstance, getUid, propsFactory } from "../../util/index.mjs"; // Types
export const VNestedSymbol = Symbol.for('vuetify:nested');
export const emptyNested = {
id: shallowRef(),
root: {
register: () => null,
unregister: () => null,
parents: ref(new Map()),
children: ref(new Map()),
open: () => null,
openOnSelect: () => null,
select: () => null,
opened: ref(new Set()),
selected: ref(new Map()),
selectedValues: ref([])
}
};
export const makeNestedProps = propsFactory({
selectStrategy: [String, Function],
openStrategy: [String, Object],
opened: Array,
selected: Array,
mandatory: Boolean
}, 'nested');
export const useNested = props => {
let isUnmounted = false;
const children = ref(new Map());
const parents = ref(new Map());
const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
const selectStrategy = computed(() => {
if (typeof props.selectStrategy === 'object') return props.selectStrategy;
switch (props.selectStrategy) {
case 'single-leaf':
return leafSingleSelectStrategy(props.mandatory);
case 'leaf':
return leafSelectStrategy(props.mandatory);
case 'independent':
return independentSelectStrategy(props.mandatory);
case 'single-independent':
return independentSingleSelectStrategy(props.mandatory);
case 'classic':
default:
return classicSelectStrategy(props.mandatory);
}
});
const openStrategy = computed(() => {
if (typeof props.openStrategy === 'object') return props.openStrategy;
switch (props.openStrategy) {
case 'list':
return listOpenStrategy;
case 'single':
return singleOpenStrategy;
case 'multiple':
default:
return multipleOpenStrategy;
}
});
const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(v, children.value, parents.value), v => selectStrategy.value.out(v, children.value, parents.value));
onBeforeUnmount(() => {
isUnmounted = true;
});
function getPath(id) {
const path = [];
let parent = id;
while (parent != null) {
path.unshift(parent);
parent = parents.value.get(parent);
}
return path;
}
const vm = getCurrentInstance('nested');
const nested = {
id: shallowRef(),
root: {
opened,
selected,
selectedValues: computed(() => {
const arr = [];
for (const [key, value] of selected.value.entries()) {
if (value === 'on') arr.push(key);
}
return arr;
}),
register: (id, parentId, isGroup) => {
parentId && id !== parentId && parents.value.set(id, parentId);
isGroup && children.value.set(id, []);
if (parentId != null) {
children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
}
},
unregister: id => {
if (isUnmounted) return;
children.value.delete(id);
const parent = parents.value.get(id);
if (parent) {
const list = children.value.get(parent) ?? [];
children.value.set(parent, list.filter(child => child !== id));
}
parents.value.delete(id);
opened.value.delete(id);
},
open: (id, value, event) => {
vm.emit('click:open', {
id,
value,
path: getPath(id),
event
});
const newOpened = openStrategy.value.open({
id,
value,
opened: new Set(opened.value),
children: children.value,
parents: parents.value,
event
});
newOpened && (opened.value = newOpened);
},
openOnSelect: (id, value, event) => {
const newOpened = openStrategy.value.select({
id,
value,
selected: new Map(selected.value),
opened: new Set(opened.value),
children: children.value,
parents: parents.value,
event
});
newOpened && (opened.value = newOpened);
},
select: (id, value, event) => {
vm.emit('click:select', {
id,
value,
path: getPath(id),
event
});
const newSelected = selectStrategy.value.select({
id,
value,
selected: new Map(selected.value),
children: children.value,
parents: parents.value,
event
});
newSelected && (selected.value = newSelected);
nested.root.openOnSelect(id, value, event);
},
children,
parents
}
};
provide(VNestedSymbol, nested);
return nested.root;
};
export const useNestedItem = (id, isGroup) => {
const parent = inject(VNestedSymbol, emptyNested);
const uidSymbol = Symbol(getUid());
const computedId = computed(() => id.value !== undefined ? id.value : uidSymbol);
const item = {
...parent,
id: computedId,
open: (open, e) => parent.root.open(computedId.value, open, e),
openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
isOpen: computed(() => parent.root.opened.value.has(computedId.value)),
parent: computed(() => parent.root.parents.value.get(computedId.value)),
select: (selected, e) => parent.root.select(computedId.value, selected, e),
isSelected: computed(() => parent.root.selected.value.get(toRaw(computedId.value)) === 'on'),
isIndeterminate: computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
isLeaf: computed(() => !parent.root.children.value.get(computedId.value)),
isGroupActivator: parent.isGroupActivator
};
!parent.isGroupActivator && parent.root.register(computedId.value, parent.id.value, isGroup);
onBeforeUnmount(() => {
!parent.isGroupActivator && parent.root.unregister(computedId.value);
});
isGroup && provide(VNestedSymbol, item);
return item;
};
export const useNestedGroupActivator = () => {
const parent = inject(VNestedSymbol, emptyNested);
provide(VNestedSymbol, {
...parent,
isGroupActivator: true
});
};
//# sourceMappingURL=nested.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,67 @@
export const singleOpenStrategy = {
open: _ref => {
let {
id,
value,
opened,
parents
} = _ref;
if (value) {
const newOpened = new Set();
newOpened.add(id);
let parent = parents.get(id);
while (parent != null) {
newOpened.add(parent);
parent = parents.get(parent);
}
return newOpened;
} else {
opened.delete(id);
return opened;
}
},
select: () => null
};
export const multipleOpenStrategy = {
open: _ref2 => {
let {
id,
value,
opened,
parents
} = _ref2;
if (value) {
let parent = parents.get(id);
opened.add(id);
while (parent != null && parent !== id) {
opened.add(parent);
parent = parents.get(parent);
}
return opened;
} else {
opened.delete(id);
}
return opened;
},
select: () => null
};
export const listOpenStrategy = {
open: multipleOpenStrategy.open,
select: _ref3 => {
let {
id,
value,
opened,
parents
} = _ref3;
if (!value) return opened;
const path = [];
let parent = parents.get(id);
while (parent != null) {
path.push(parent);
parent = parents.get(parent);
}
return new Set(path);
}
};
//# sourceMappingURL=openStrategies.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"openStrategies.mjs","names":["singleOpenStrategy","open","_ref","id","value","opened","parents","newOpened","Set","add","parent","get","delete","select","multipleOpenStrategy","_ref2","listOpenStrategy","_ref3","path","push"],"sources":["../../../src/composables/nested/openStrategies.ts"],"sourcesContent":["export type OpenStrategyFn = (data: {\n id: unknown\n value: boolean\n opened: Set<unknown>\n children: Map<unknown, unknown[]>\n parents: Map<unknown, unknown>\n event?: Event\n}) => Set<unknown>\n\nexport type OpenSelectStrategyFn = (data: {\n id: unknown\n value: boolean\n opened: Set<unknown>\n selected: Map<unknown, 'on' | 'off' | 'indeterminate'>\n children: Map<unknown, unknown[]>\n parents: Map<unknown, unknown>\n event?: Event\n}) => Set<unknown> | null\n\nexport type OpenStrategy = {\n open: OpenStrategyFn\n select: OpenSelectStrategyFn\n}\n\nexport const singleOpenStrategy: OpenStrategy = {\n open: ({ id, value, opened, parents }) => {\n if (value) {\n const newOpened = new Set<unknown>()\n newOpened.add(id)\n\n let parent = parents.get(id)\n\n while (parent != null) {\n newOpened.add(parent)\n parent = parents.get(parent)\n }\n\n return newOpened\n } else {\n opened.delete(id)\n return opened\n }\n },\n select: () => null,\n}\n\nexport const multipleOpenStrategy: OpenStrategy = {\n open: ({ id, value, opened, parents }) => {\n if (value) {\n let parent = parents.get(id)\n opened.add(id)\n\n while (parent != null && parent !== id) {\n opened.add(parent)\n parent = parents.get(parent)\n }\n\n return opened\n } else {\n opened.delete(id)\n }\n return opened\n },\n select: () => null,\n}\n\nexport const listOpenStrategy: OpenStrategy = {\n open: multipleOpenStrategy.open,\n select: ({ id, value, opened, parents }) => {\n if (!value) return opened\n\n const path: unknown[] = []\n\n let parent = parents.get(id)\n\n while (parent != null) {\n path.push(parent)\n parent = parents.get(parent)\n }\n\n return new Set(path)\n },\n}\n"],"mappings":"AAwBA,OAAO,MAAMA,kBAAgC,GAAG;EAC9CC,IAAI,EAAEC,IAAA,IAAoC;IAAA,IAAnC;MAAEC,EAAE;MAAEC,KAAK;MAAEC,MAAM;MAAEC;IAAQ,CAAC,GAAAJ,IAAA;IACnC,IAAIE,KAAK,EAAE;MACT,MAAMG,SAAS,GAAG,IAAIC,GAAG,CAAU,CAAC;MACpCD,SAAS,CAACE,GAAG,CAACN,EAAE,CAAC;MAEjB,IAAIO,MAAM,GAAGJ,OAAO,CAACK,GAAG,CAACR,EAAE,CAAC;MAE5B,OAAOO,MAAM,IAAI,IAAI,EAAE;QACrBH,SAAS,CAACE,GAAG,CAACC,MAAM,CAAC;QACrBA,MAAM,GAAGJ,OAAO,CAACK,GAAG,CAACD,MAAM,CAAC;MAC9B;MAEA,OAAOH,SAAS;IAClB,CAAC,MAAM;MACLF,MAAM,CAACO,MAAM,CAACT,EAAE,CAAC;MACjB,OAAOE,MAAM;IACf;EACF,CAAC;EACDQ,MAAM,EAAEA,CAAA,KAAM;AAChB,CAAC;AAED,OAAO,MAAMC,oBAAkC,GAAG;EAChDb,IAAI,EAAEc,KAAA,IAAoC;IAAA,IAAnC;MAAEZ,EAAE;MAAEC,KAAK;MAAEC,MAAM;MAAEC;IAAQ,CAAC,GAAAS,KAAA;IACnC,IAAIX,KAAK,EAAE;MACT,IAAIM,MAAM,GAAGJ,OAAO,CAACK,GAAG,CAACR,EAAE,CAAC;MAC5BE,MAAM,CAACI,GAAG,CAACN,EAAE,CAAC;MAEd,OAAOO,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAKP,EAAE,EAAE;QACtCE,MAAM,CAACI,GAAG,CAACC,MAAM,CAAC;QAClBA,MAAM,GAAGJ,OAAO,CAACK,GAAG,CAACD,MAAM,CAAC;MAC9B;MAEA,OAAOL,MAAM;IACf,CAAC,MAAM;MACLA,MAAM,CAACO,MAAM,CAACT,EAAE,CAAC;IACnB;IACA,OAAOE,MAAM;EACf,CAAC;EACDQ,MAAM,EAAEA,CAAA,KAAM;AAChB,CAAC;AAED,OAAO,MAAMG,gBAA8B,GAAG;EAC5Cf,IAAI,EAAEa,oBAAoB,CAACb,IAAI;EAC/BY,MAAM,EAAEI,KAAA,IAAoC;IAAA,IAAnC;MAAEd,EAAE;MAAEC,KAAK;MAAEC,MAAM;MAAEC;IAAQ,CAAC,GAAAW,KAAA;IACrC,IAAI,CAACb,KAAK,EAAE,OAAOC,MAAM;IAEzB,MAAMa,IAAe,GAAG,EAAE;IAE1B,IAAIR,MAAM,GAAGJ,OAAO,CAACK,GAAG,CAACR,EAAE,CAAC;IAE5B,OAAOO,MAAM,IAAI,IAAI,EAAE;MACrBQ,IAAI,CAACC,IAAI,CAACT,MAAM,CAAC;MACjBA,MAAM,GAAGJ,OAAO,CAACK,GAAG,CAACD,MAAM,CAAC;IAC9B;IAEA,OAAO,IAAIF,GAAG,CAACU,IAAI,CAAC;EACtB;AACF,CAAC"}

View File

@ -0,0 +1,190 @@
/* eslint-disable sonarjs/no-identical-functions */
// Utilities
import { toRaw } from 'vue';
export const independentSelectStrategy = mandatory => {
const strategy = {
select: _ref => {
let {
id,
value,
selected
} = _ref;
id = toRaw(id);
// When mandatory and we're trying to deselect when id
// is the only currently selected item then do nothing
if (mandatory && !value) {
const on = Array.from(selected.entries()).reduce((arr, _ref2) => {
let [key, value] = _ref2;
return value === 'on' ? [...arr, key] : arr;
}, []);
if (on.length === 1 && on[0] === id) return selected;
}
selected.set(id, value ? 'on' : 'off');
return selected;
},
in: (v, children, parents) => {
let map = new Map();
for (const id of v || []) {
map = strategy.select({
id,
value: true,
selected: new Map(map),
children,
parents
});
}
return map;
},
out: v => {
const arr = [];
for (const [key, value] of v.entries()) {
if (value === 'on') arr.push(key);
}
return arr;
}
};
return strategy;
};
export const independentSingleSelectStrategy = mandatory => {
const parentStrategy = independentSelectStrategy(mandatory);
const strategy = {
select: _ref3 => {
let {
selected,
id,
...rest
} = _ref3;
id = toRaw(id);
const singleSelected = selected.has(id) ? new Map([[id, selected.get(id)]]) : new Map();
return parentStrategy.select({
...rest,
id,
selected: singleSelected
});
},
in: (v, children, parents) => {
let map = new Map();
if (v?.length) {
map = parentStrategy.in(v.slice(0, 1), children, parents);
}
return map;
},
out: (v, children, parents) => {
return parentStrategy.out(v, children, parents);
}
};
return strategy;
};
export const leafSelectStrategy = mandatory => {
const parentStrategy = independentSelectStrategy(mandatory);
const strategy = {
select: _ref4 => {
let {
id,
selected,
children,
...rest
} = _ref4;
id = toRaw(id);
if (children.has(id)) return selected;
return parentStrategy.select({
id,
selected,
children,
...rest
});
},
in: parentStrategy.in,
out: parentStrategy.out
};
return strategy;
};
export const leafSingleSelectStrategy = mandatory => {
const parentStrategy = independentSingleSelectStrategy(mandatory);
const strategy = {
select: _ref5 => {
let {
id,
selected,
children,
...rest
} = _ref5;
id = toRaw(id);
if (children.has(id)) return selected;
return parentStrategy.select({
id,
selected,
children,
...rest
});
},
in: parentStrategy.in,
out: parentStrategy.out
};
return strategy;
};
export const classicSelectStrategy = mandatory => {
const strategy = {
select: _ref6 => {
let {
id,
value,
selected,
children,
parents
} = _ref6;
id = toRaw(id);
const original = new Map(selected);
const items = [id];
while (items.length) {
const item = items.shift();
selected.set(item, value ? 'on' : 'off');
if (children.has(item)) {
items.push(...children.get(item));
}
}
let parent = parents.get(id);
while (parent) {
const childrenIds = children.get(parent);
const everySelected = childrenIds.every(cid => selected.get(cid) === 'on');
const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off');
selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
parent = parents.get(parent);
}
// If mandatory and planned deselect results in no selected
// items then we can't do it, so return original state
if (mandatory && !value) {
const on = Array.from(selected.entries()).reduce((arr, _ref7) => {
let [key, value] = _ref7;
return value === 'on' ? [...arr, key] : arr;
}, []);
if (on.length === 0) return original;
}
return selected;
},
in: (v, children, parents) => {
let map = new Map();
for (const id of v || []) {
map = strategy.select({
id,
value: true,
selected: new Map(map),
children,
parents
});
}
return map;
},
out: (v, children) => {
const arr = [];
for (const [key, value] of v.entries()) {
if (value === 'on' && !children.has(key)) arr.push(key);
}
return arr;
}
};
return strategy;
};
//# sourceMappingURL=selectStrategies.mjs.map

File diff suppressed because one or more lines are too long

21
VApp/node_modules/vuetify/lib/composables/position.mjs generated vendored Normal file
View File

@ -0,0 +1,21 @@
// Utilities
import { computed } from 'vue';
import { getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
const positionValues = ['static', 'relative', 'fixed', 'absolute', 'sticky'];
// Composables
export const makePositionProps = propsFactory({
position: {
type: String,
validator: /* istanbul ignore next */v => positionValues.includes(v)
}
}, 'position');
export function usePosition(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const positionClasses = computed(() => {
return props.position ? `${name}--${props.position}` : undefined;
});
return {
positionClasses
};
}
//# sourceMappingURL=position.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"position.mjs","names":["computed","getCurrentInstanceName","propsFactory","positionValues","makePositionProps","position","type","String","validator","v","includes","usePosition","props","name","arguments","length","undefined","positionClasses"],"sources":["../../src/composables/position.ts"],"sourcesContent":["// Utilities\nimport { computed } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { PropType } from 'vue'\n\nconst positionValues = ['static', 'relative', 'fixed', 'absolute', 'sticky'] as const\n\ntype Position = typeof positionValues[number]\n\nexport interface PositionProps {\n position: Position | undefined\n}\n\n// Composables\nexport const makePositionProps = propsFactory({\n position: {\n type: String as PropType<Position>,\n validator: /* istanbul ignore next */ (v: any) => positionValues.includes(v),\n },\n}, 'position')\n\nexport function usePosition (\n props: PositionProps,\n name = getCurrentInstanceName(),\n) {\n const positionClasses = computed(() => {\n return props.position ? `${name}--${props.position}` : undefined\n })\n\n return { positionClasses }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,QAAQ,KAAK;AAAA,SACrBC,sBAAsB,EAAEC,YAAY,6BAE7C;AAGA,MAAMC,cAAc,GAAG,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAU;AAQrF;AACA,OAAO,MAAMC,iBAAiB,GAAGF,YAAY,CAAC;EAC5CG,QAAQ,EAAE;IACRC,IAAI,EAAEC,MAA4B;IAClCC,SAAS,EAAE,0BAA4BC,CAAM,IAAKN,cAAc,CAACO,QAAQ,CAACD,CAAC;EAC7E;AACF,CAAC,EAAE,UAAU,CAAC;AAEd,OAAO,SAASE,WAAWA,CACzBC,KAAoB,EAEpB;EAAA,IADAC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGb,sBAAsB,CAAC,CAAC;EAE/B,MAAMgB,eAAe,GAAGjB,QAAQ,CAAC,MAAM;IACrC,OAAOY,KAAK,CAACP,QAAQ,GAAI,GAAEQ,IAAK,KAAID,KAAK,CAACP,QAAS,EAAC,GAAGW,SAAS;EAClE,CAAC,CAAC;EAEF,OAAO;IAAEC;EAAgB,CAAC;AAC5B"}

View File

@ -0,0 +1,45 @@
// Composables
import { useToggleScope } from "./toggleScope.mjs"; // Utilities
import { computed, ref, toRaw, watch } from 'vue';
import { getCurrentInstance, toKebabCase } from "../util/index.mjs"; // Types
// Composables
export function useProxiedModel(props, prop, defaultValue) {
let transformIn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : v => v;
let transformOut = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : v => v;
const vm = getCurrentInstance('useProxiedModel');
const internal = ref(props[prop] !== undefined ? props[prop] : defaultValue);
const kebabProp = toKebabCase(prop);
const checkKebab = kebabProp !== prop;
const isControlled = checkKebab ? computed(() => {
void props[prop];
return !!((vm.vnode.props?.hasOwnProperty(prop) || vm.vnode.props?.hasOwnProperty(kebabProp)) && (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) || vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`)));
}) : computed(() => {
void props[prop];
return !!(vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`));
});
useToggleScope(() => !isControlled.value, () => {
watch(() => props[prop], val => {
internal.value = val;
});
});
const model = computed({
get() {
const externalValue = props[prop];
return transformIn(isControlled.value ? externalValue : internal.value);
},
set(internalValue) {
const newValue = transformOut(internalValue);
const value = toRaw(isControlled.value ? props[prop] : internal.value);
if (value === newValue || transformIn(value) === internalValue) {
return;
}
internal.value = newValue;
vm?.emit(`update:${prop}`, newValue);
}
});
Object.defineProperty(model, 'externalValue', {
get: () => isControlled.value ? props[prop] : internal.value
});
return model;
}
//# sourceMappingURL=proxiedModel.mjs.map

File diff suppressed because one or more lines are too long

17
VApp/node_modules/vuetify/lib/composables/refs.mjs generated vendored Normal file
View File

@ -0,0 +1,17 @@
// Utilities
import { onBeforeUpdate, ref } from 'vue';
// Types
export function useRefs() {
const refs = ref([]);
onBeforeUpdate(() => refs.value = []);
function updateRef(e, i) {
refs.value[i] = e;
}
return {
refs,
updateRef
};
}
//# sourceMappingURL=refs.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"refs.mjs","names":["onBeforeUpdate","ref","useRefs","refs","value","updateRef","e","i"],"sources":["../../src/composables/refs.ts"],"sourcesContent":["// Utilities\nimport { onBeforeUpdate, ref } from 'vue'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useRefs <T extends {}> () {\n const refs = ref<(T | undefined)[]>([]) as Ref<(T | undefined)[]>\n\n onBeforeUpdate(() => (refs.value = []))\n\n function updateRef (e: any, i: number) {\n refs.value[i] = e\n }\n\n return { refs, updateRef }\n}\n"],"mappings":"AAAA;AACA,SAASA,cAAc,EAAEC,GAAG,QAAQ,KAAK;;AAEzC;;AAGA,OAAO,SAASC,OAAOA,CAAA,EAAmB;EACxC,MAAMC,IAAI,GAAGF,GAAG,CAAoB,EAAE,CAA2B;EAEjED,cAAc,CAAC,MAAOG,IAAI,CAACC,KAAK,GAAG,EAAG,CAAC;EAEvC,SAASC,SAASA,CAAEC,CAAM,EAAEC,CAAS,EAAE;IACrCJ,IAAI,CAACC,KAAK,CAACG,CAAC,CAAC,GAAGD,CAAC;EACnB;EAEA,OAAO;IAAEH,IAAI;IAAEE;EAAU,CAAC;AAC5B"}

View File

@ -0,0 +1,37 @@
// Utilities
import { onBeforeUnmount, readonly, ref, watch } from 'vue';
import { refElement } from "../util/index.mjs";
import { IN_BROWSER } from "../util/globals.mjs"; // Types
export function useResizeObserver(callback) {
let box = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'content';
const resizeRef = ref();
const contentRect = ref();
if (IN_BROWSER) {
const observer = new ResizeObserver(entries => {
callback?.(entries, observer);
if (!entries.length) return;
if (box === 'content') {
contentRect.value = entries[0].contentRect;
} else {
contentRect.value = entries[0].target.getBoundingClientRect();
}
});
onBeforeUnmount(() => {
observer.disconnect();
});
watch(resizeRef, (newValue, oldValue) => {
if (oldValue) {
observer.unobserve(refElement(oldValue));
contentRect.value = undefined;
}
if (newValue) observer.observe(refElement(newValue));
}, {
flush: 'post'
});
}
return {
resizeRef,
contentRect: readonly(contentRect)
};
}
//# sourceMappingURL=resizeObserver.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"resizeObserver.mjs","names":["onBeforeUnmount","readonly","ref","watch","refElement","IN_BROWSER","useResizeObserver","callback","box","arguments","length","undefined","resizeRef","contentRect","observer","ResizeObserver","entries","value","target","getBoundingClientRect","disconnect","newValue","oldValue","unobserve","observe","flush"],"sources":["../../src/composables/resizeObserver.ts"],"sourcesContent":["// Utilities\nimport { onBeforeUnmount, readonly, ref, watch } from 'vue'\nimport { refElement } from '@/util'\nimport { IN_BROWSER } from '@/util/globals'\n\n// Types\nimport type { DeepReadonly, Ref } from 'vue'\n\ninterface ResizeState {\n resizeRef: Ref<HTMLElement | undefined>\n contentRect: DeepReadonly<Ref<DOMRectReadOnly | undefined>>\n}\n\nexport function useResizeObserver (callback?: ResizeObserverCallback, box: 'content' | 'border' = 'content'): ResizeState {\n const resizeRef = ref<HTMLElement>()\n const contentRect = ref<DOMRectReadOnly>()\n\n if (IN_BROWSER) {\n const observer = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n callback?.(entries, observer)\n\n if (!entries.length) return\n\n if (box === 'content') {\n contentRect.value = entries[0].contentRect\n } else {\n contentRect.value = entries[0].target.getBoundingClientRect()\n }\n })\n\n onBeforeUnmount(() => {\n observer.disconnect()\n })\n\n watch(resizeRef, (newValue, oldValue) => {\n if (oldValue) {\n observer.unobserve(refElement(oldValue) as Element)\n contentRect.value = undefined\n }\n\n if (newValue) observer.observe(refElement(newValue) as Element)\n }, {\n flush: 'post',\n })\n }\n\n return {\n resizeRef,\n contentRect: readonly(contentRect),\n }\n}\n"],"mappings":"AAAA;AACA,SAASA,eAAe,EAAEC,QAAQ,EAAEC,GAAG,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAClDC,UAAU;AAAA,SACVC,UAAU,+BAEnB;AAQA,OAAO,SAASC,iBAAiBA,CAAEC,QAAiC,EAAsD;EAAA,IAApDC,GAAyB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,SAAS;EACzG,MAAMG,SAAS,GAAGV,GAAG,CAAc,CAAC;EACpC,MAAMW,WAAW,GAAGX,GAAG,CAAkB,CAAC;EAE1C,IAAIG,UAAU,EAAE;IACd,MAAMS,QAAQ,GAAG,IAAIC,cAAc,CAAEC,OAA8B,IAAK;MACtET,QAAQ,GAAGS,OAAO,EAAEF,QAAQ,CAAC;MAE7B,IAAI,CAACE,OAAO,CAACN,MAAM,EAAE;MAErB,IAAIF,GAAG,KAAK,SAAS,EAAE;QACrBK,WAAW,CAACI,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC,CAACH,WAAW;MAC5C,CAAC,MAAM;QACLA,WAAW,CAACI,KAAK,GAAGD,OAAO,CAAC,CAAC,CAAC,CAACE,MAAM,CAACC,qBAAqB,CAAC,CAAC;MAC/D;IACF,CAAC,CAAC;IAEFnB,eAAe,CAAC,MAAM;MACpBc,QAAQ,CAACM,UAAU,CAAC,CAAC;IACvB,CAAC,CAAC;IAEFjB,KAAK,CAACS,SAAS,EAAE,CAACS,QAAQ,EAAEC,QAAQ,KAAK;MACvC,IAAIA,QAAQ,EAAE;QACZR,QAAQ,CAACS,SAAS,CAACnB,UAAU,CAACkB,QAAQ,CAAY,CAAC;QACnDT,WAAW,CAACI,KAAK,GAAGN,SAAS;MAC/B;MAEA,IAAIU,QAAQ,EAAEP,QAAQ,CAACU,OAAO,CAACpB,UAAU,CAACiB,QAAQ,CAAY,CAAC;IACjE,CAAC,EAAE;MACDI,KAAK,EAAE;IACT,CAAC,CAAC;EACJ;EAEA,OAAO;IACLb,SAAS;IACTC,WAAW,EAAEZ,QAAQ,CAACY,WAAW;EACnC,CAAC;AACH"}

29
VApp/node_modules/vuetify/lib/composables/rounded.mjs generated vendored Normal file
View File

@ -0,0 +1,29 @@
// Utilities
import { computed, isRef } from 'vue';
import { getCurrentInstanceName, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeRoundedProps = propsFactory({
rounded: {
type: [Boolean, Number, String],
default: undefined
}
}, 'rounded');
export function useRounded(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
const roundedClasses = computed(() => {
const rounded = isRef(props) ? props.value : props.rounded;
const classes = [];
if (rounded === true || rounded === '') {
classes.push(`${name}--rounded`);
} else if (typeof rounded === 'string' || rounded === 0) {
for (const value of String(rounded).split(' ')) {
classes.push(`rounded-${value}`);
}
}
return classes;
});
return {
roundedClasses
};
}
//# sourceMappingURL=rounded.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"rounded.mjs","names":["computed","isRef","getCurrentInstanceName","propsFactory","makeRoundedProps","rounded","type","Boolean","Number","String","default","undefined","useRounded","props","name","arguments","length","roundedClasses","value","classes","push","split"],"sources":["../../src/composables/rounded.ts"],"sourcesContent":["// Utilities\nimport { computed, isRef } from 'vue'\nimport { getCurrentInstanceName, propsFactory } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\ntype RoundedValue = boolean | string | number | null | undefined\n\nexport interface RoundedProps {\n rounded?: RoundedValue\n tile?: boolean\n}\n\ntype RoundedData = {\n roundedClasses: Ref<string[]>\n}\n\n// Composables\nexport const makeRoundedProps = propsFactory({\n rounded: {\n type: [Boolean, Number, String],\n default: undefined,\n },\n}, 'rounded')\n\nexport function useRounded (\n props: RoundedProps | Ref<RoundedValue>,\n name = getCurrentInstanceName(),\n): RoundedData {\n const roundedClasses = computed(() => {\n const rounded = isRef(props) ? props.value : props.rounded\n const classes: string[] = []\n\n if (rounded === true || rounded === '') {\n classes.push(`${name}--rounded`)\n } else if (\n typeof rounded === 'string' ||\n rounded === 0\n ) {\n for (const value of String(rounded).split(' ')) {\n classes.push(`rounded-${value}`)\n }\n }\n\n return classes\n })\n\n return { roundedClasses }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAA,SAC5BC,sBAAsB,EAAEC,YAAY,6BAE7C;AAcA;AACA,OAAO,MAAMC,gBAAgB,GAAGD,YAAY,CAAC;EAC3CE,OAAO,EAAE;IACPC,IAAI,EAAE,CAACC,OAAO,EAAEC,MAAM,EAAEC,MAAM,CAAC;IAC/BC,OAAO,EAAEC;EACX;AACF,CAAC,EAAE,SAAS,CAAC;AAEb,OAAO,SAASC,UAAUA,CACxBC,KAAuC,EAE1B;EAAA,IADbC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAJ,SAAA,GAAAI,SAAA,MAAGb,sBAAsB,CAAC,CAAC;EAE/B,MAAMe,cAAc,GAAGjB,QAAQ,CAAC,MAAM;IACpC,MAAMK,OAAO,GAAGJ,KAAK,CAACY,KAAK,CAAC,GAAGA,KAAK,CAACK,KAAK,GAAGL,KAAK,CAACR,OAAO;IAC1D,MAAMc,OAAiB,GAAG,EAAE;IAE5B,IAAId,OAAO,KAAK,IAAI,IAAIA,OAAO,KAAK,EAAE,EAAE;MACtCc,OAAO,CAACC,IAAI,CAAE,GAAEN,IAAK,WAAU,CAAC;IAClC,CAAC,MAAM,IACL,OAAOT,OAAO,KAAK,QAAQ,IAC3BA,OAAO,KAAK,CAAC,EACb;MACA,KAAK,MAAMa,KAAK,IAAIT,MAAM,CAACJ,OAAO,CAAC,CAACgB,KAAK,CAAC,GAAG,CAAC,EAAE;QAC9CF,OAAO,CAACC,IAAI,CAAE,WAAUF,KAAM,EAAC,CAAC;MAClC;IACF;IAEA,OAAOC,OAAO;EAChB,CAAC,CAAC;EAEF,OAAO;IAAEF;EAAe,CAAC;AAC3B"}

77
VApp/node_modules/vuetify/lib/composables/router.mjs generated vendored Normal file
View File

@ -0,0 +1,77 @@
// Utilities
import { computed, nextTick, onScopeDispose, resolveDynamicComponent, toRef } from 'vue';
import { deepEqual, getCurrentInstance, hasEvent, IN_BROWSER, propsFactory } from "../util/index.mjs"; // Types
export function useRoute() {
const vm = getCurrentInstance('useRoute');
return computed(() => vm?.proxy?.$route);
}
export function useRouter() {
return getCurrentInstance('useRouter')?.proxy?.$router;
}
export function useLink(props, attrs) {
const RouterLink = resolveDynamicComponent('RouterLink');
const isLink = computed(() => !!(props.href || props.to));
const isClickable = computed(() => {
return isLink?.value || hasEvent(attrs, 'click') || hasEvent(props, 'click');
});
if (typeof RouterLink === 'string') {
return {
isLink,
isClickable,
href: toRef(props, 'href')
};
}
const link = props.to ? RouterLink.useLink(props) : undefined;
const route = useRoute();
return {
isLink,
isClickable,
route: link?.route,
navigate: link?.navigate,
isActive: link && computed(() => {
if (!props.exact) return link.isActive?.value;
if (!route.value) return link.isExactActive?.value;
return link.isExactActive?.value && deepEqual(link.route.value.query, route.value.query);
}),
href: computed(() => props.to ? link?.route.value.href : props.href)
};
}
export const makeRouterProps = propsFactory({
href: String,
replace: Boolean,
to: [String, Object],
exact: Boolean
}, 'router');
let inTransition = false;
export function useBackButton(router, cb) {
let popped = false;
let removeBefore;
let removeAfter;
if (IN_BROWSER) {
nextTick(() => {
window.addEventListener('popstate', onPopstate);
removeBefore = router?.beforeEach((to, from, next) => {
if (!inTransition) {
setTimeout(() => popped ? cb(next) : next());
} else {
popped ? cb(next) : next();
}
inTransition = true;
});
removeAfter = router?.afterEach(() => {
inTransition = false;
});
});
onScopeDispose(() => {
window.removeEventListener('popstate', onPopstate);
removeBefore?.();
removeAfter?.();
});
}
function onPopstate(e) {
if (e.state?.replaced) return;
popped = true;
setTimeout(() => popped = false);
}
}
//# sourceMappingURL=router.mjs.map

File diff suppressed because one or more lines are too long

12
VApp/node_modules/vuetify/lib/composables/scopeId.mjs generated vendored Normal file
View File

@ -0,0 +1,12 @@
// Utilities
import { getCurrentInstance } from "../util/index.mjs";
export function useScopeId() {
const vm = getCurrentInstance('useScopeId');
const scopeId = vm.vnode.scopeId;
return {
scopeId: scopeId ? {
[scopeId]: ''
} : undefined
};
}
//# sourceMappingURL=scopeId.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"scopeId.mjs","names":["getCurrentInstance","useScopeId","vm","scopeId","vnode","undefined"],"sources":["../../src/composables/scopeId.ts"],"sourcesContent":["// Utilities\nimport { getCurrentInstance } from '@/util'\n\nexport function useScopeId () {\n const vm = getCurrentInstance('useScopeId')\n\n const scopeId = vm!.vnode.scopeId\n\n return { scopeId: scopeId ? { [scopeId]: '' } : undefined }\n}\n"],"mappings":"AAAA;AAAA,SACSA,kBAAkB;AAE3B,OAAO,SAASC,UAAUA,CAAA,EAAI;EAC5B,MAAMC,EAAE,GAAGF,kBAAkB,CAAC,YAAY,CAAC;EAE3C,MAAMG,OAAO,GAAGD,EAAE,CAAEE,KAAK,CAACD,OAAO;EAEjC,OAAO;IAAEA,OAAO,EAAEA,OAAO,GAAG;MAAE,CAACA,OAAO,GAAG;IAAG,CAAC,GAAGE;EAAU,CAAC;AAC7D"}

90
VApp/node_modules/vuetify/lib/composables/scroll.mjs generated vendored Normal file
View File

@ -0,0 +1,90 @@
// Utilities
import { computed, onBeforeUnmount, onMounted, ref, shallowRef, watch } from 'vue';
import { clamp, consoleWarn, propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeScrollProps = propsFactory({
scrollTarget: {
type: String
},
scrollThreshold: {
type: [String, Number],
default: 300
}
}, 'scroll');
export function useScroll(props) {
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
const {
canScroll
} = args;
let previousScroll = 0;
const target = ref(null);
const currentScroll = shallowRef(0);
const savedScroll = shallowRef(0);
const currentThreshold = shallowRef(0);
const isScrollActive = shallowRef(false);
const isScrollingUp = shallowRef(false);
const scrollThreshold = computed(() => {
return Number(props.scrollThreshold);
});
/**
* 1: at top
* 0: at threshold
*/
const scrollRatio = computed(() => {
return clamp((scrollThreshold.value - currentScroll.value) / scrollThreshold.value || 0);
});
const onScroll = () => {
const targetEl = target.value;
if (!targetEl || canScroll && !canScroll.value) return;
previousScroll = currentScroll.value;
currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
isScrollingUp.value = currentScroll.value < previousScroll;
currentThreshold.value = Math.abs(currentScroll.value - scrollThreshold.value);
};
watch(isScrollingUp, () => {
savedScroll.value = savedScroll.value || currentScroll.value;
});
watch(isScrollActive, () => {
savedScroll.value = 0;
});
onMounted(() => {
watch(() => props.scrollTarget, scrollTarget => {
const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
if (!newTarget) {
consoleWarn(`Unable to locate element with identifier ${scrollTarget}`);
return;
}
if (newTarget === target.value) return;
target.value?.removeEventListener('scroll', onScroll);
target.value = newTarget;
target.value.addEventListener('scroll', onScroll, {
passive: true
});
}, {
immediate: true
});
});
onBeforeUnmount(() => {
target.value?.removeEventListener('scroll', onScroll);
});
// Do we need this? If yes - seems that
// there's no need to expose onScroll
canScroll && watch(canScroll, onScroll, {
immediate: true
});
return {
scrollThreshold,
currentScroll,
currentThreshold,
isScrollActive,
scrollRatio,
// required only for testing
// probably can be removed
// later (2 chars chlng)
isScrollingUp,
savedScroll
};
}
//# sourceMappingURL=scroll.mjs.map

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,17 @@
// Utilities
import { nextTick, watch } from 'vue';
// Types
export function useSelectLink(link, select) {
watch(() => link.isActive?.value, isActive => {
if (link.isLink.value && isActive && select) {
nextTick(() => {
select(true);
});
}
}, {
immediate: true
});
}
//# sourceMappingURL=selectLink.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"selectLink.mjs","names":["nextTick","watch","useSelectLink","link","select","isActive","value","isLink","immediate"],"sources":["../../src/composables/selectLink.ts"],"sourcesContent":["// Utilities\nimport { nextTick, watch } from 'vue'\n\n// Types\nimport type { UseLink } from './router'\n\nexport function useSelectLink (link: UseLink, select?: (value: boolean, e?: Event) => void) {\n watch(() => link.isActive?.value, isActive => {\n if (link.isLink.value && isActive && select) {\n nextTick(() => {\n select(true)\n })\n }\n }, {\n immediate: true,\n })\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;;AAErC;;AAGA,OAAO,SAASC,aAAaA,CAAEC,IAAa,EAAEC,MAA4C,EAAE;EAC1FH,KAAK,CAAC,MAAME,IAAI,CAACE,QAAQ,EAAEC,KAAK,EAAED,QAAQ,IAAI;IAC5C,IAAIF,IAAI,CAACI,MAAM,CAACD,KAAK,IAAID,QAAQ,IAAID,MAAM,EAAE;MAC3CJ,QAAQ,CAAC,MAAM;QACbI,MAAM,CAAC,IAAI,CAAC;MACd,CAAC,CAAC;IACJ;EACF,CAAC,EAAE;IACDI,SAAS,EAAE;EACb,CAAC,CAAC;AACJ"}

30
VApp/node_modules/vuetify/lib/composables/size.mjs generated vendored Normal file
View File

@ -0,0 +1,30 @@
// Utilities
import { convertToUnit, destructComputed, getCurrentInstanceName, includes, propsFactory } from "../util/index.mjs"; // Types
const predefinedSizes = ['x-small', 'small', 'default', 'large', 'x-large'];
// Composables
export const makeSizeProps = propsFactory({
size: {
type: [String, Number],
default: 'default'
}
}, 'size');
export function useSize(props) {
let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
return destructComputed(() => {
let sizeClasses;
let sizeStyles;
if (includes(predefinedSizes, props.size)) {
sizeClasses = `${name}--size-${props.size}`;
} else if (props.size) {
sizeStyles = {
width: convertToUnit(props.size),
height: convertToUnit(props.size)
};
}
return {
sizeClasses,
sizeStyles
};
});
}
//# sourceMappingURL=size.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"size.mjs","names":["convertToUnit","destructComputed","getCurrentInstanceName","includes","propsFactory","predefinedSizes","makeSizeProps","size","type","String","Number","default","useSize","props","name","arguments","length","undefined","sizeClasses","sizeStyles","width","height"],"sources":["../../src/composables/size.ts"],"sourcesContent":["// Utilities\nimport { convertToUnit, destructComputed, getCurrentInstanceName, includes, propsFactory } from '@/util'\n\n// Types\nconst predefinedSizes = ['x-small', 'small', 'default', 'large', 'x-large']\n\nexport interface SizeProps {\n size?: string | number\n}\n\n// Composables\nexport const makeSizeProps = propsFactory({\n size: {\n type: [String, Number],\n default: 'default',\n },\n}, 'size')\n\nexport function useSize (\n props: SizeProps,\n name = getCurrentInstanceName(),\n) {\n return destructComputed(() => {\n let sizeClasses\n let sizeStyles\n if (includes(predefinedSizes, props.size)) {\n sizeClasses = `${name}--size-${props.size}`\n } else if (props.size) {\n sizeStyles = {\n width: convertToUnit(props.size),\n height: convertToUnit(props.size),\n }\n }\n return { sizeClasses, sizeStyles }\n })\n}\n"],"mappings":"AAAA;AAAA,SACSA,aAAa,EAAEC,gBAAgB,EAAEC,sBAAsB,EAAEC,QAAQ,EAAEC,YAAY,6BAExF;AACA,MAAMC,eAAe,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC;AAM3E;AACA,OAAO,MAAMC,aAAa,GAAGF,YAAY,CAAC;EACxCG,IAAI,EAAE;IACJC,IAAI,EAAE,CAACC,MAAM,EAAEC,MAAM,CAAC;IACtBC,OAAO,EAAE;EACX;AACF,CAAC,EAAE,MAAM,CAAC;AAEV,OAAO,SAASC,OAAOA,CACrBC,KAAgB,EAEhB;EAAA,IADAC,IAAI,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAGb,sBAAsB,CAAC,CAAC;EAE/B,OAAOD,gBAAgB,CAAC,MAAM;IAC5B,IAAIiB,WAAW;IACf,IAAIC,UAAU;IACd,IAAIhB,QAAQ,CAACE,eAAe,EAAEQ,KAAK,CAACN,IAAI,CAAC,EAAE;MACzCW,WAAW,GAAI,GAAEJ,IAAK,UAASD,KAAK,CAACN,IAAK,EAAC;IAC7C,CAAC,MAAM,IAAIM,KAAK,CAACN,IAAI,EAAE;MACrBY,UAAU,GAAG;QACXC,KAAK,EAAEpB,aAAa,CAACa,KAAK,CAACN,IAAI,CAAC;QAChCc,MAAM,EAAErB,aAAa,CAACa,KAAK,CAACN,IAAI;MAClC,CAAC;IACH;IACA,OAAO;MAAEW,WAAW;MAAEC;IAAW,CAAC;EACpC,CAAC,CAAC;AACJ"}

20
VApp/node_modules/vuetify/lib/composables/ssrBoot.mjs generated vendored Normal file
View File

@ -0,0 +1,20 @@
// Utilities
import { computed, onMounted, readonly, shallowRef } from 'vue';
// Composables
export function useSsrBoot() {
const isBooted = shallowRef(false);
onMounted(() => {
window.requestAnimationFrame(() => {
isBooted.value = true;
});
});
const ssrBootStyles = computed(() => !isBooted.value ? {
transition: 'none !important'
} : undefined);
return {
ssrBootStyles,
isBooted: readonly(isBooted)
};
}
//# sourceMappingURL=ssrBoot.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"ssrBoot.mjs","names":["computed","onMounted","readonly","shallowRef","useSsrBoot","isBooted","window","requestAnimationFrame","value","ssrBootStyles","transition","undefined"],"sources":["../../src/composables/ssrBoot.ts"],"sourcesContent":["// Utilities\nimport { computed, onMounted, readonly, shallowRef } from 'vue'\n\n// Composables\nexport function useSsrBoot () {\n const isBooted = shallowRef(false)\n\n onMounted(() => {\n window.requestAnimationFrame(() => {\n isBooted.value = true\n })\n })\n\n const ssrBootStyles = computed(() => !isBooted.value ? ({\n transition: 'none !important',\n }) : undefined)\n\n return { ssrBootStyles, isBooted: readonly(isBooted) }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,UAAU,QAAQ,KAAK;;AAE/D;AACA,OAAO,SAASC,UAAUA,CAAA,EAAI;EAC5B,MAAMC,QAAQ,GAAGF,UAAU,CAAC,KAAK,CAAC;EAElCF,SAAS,CAAC,MAAM;IACdK,MAAM,CAACC,qBAAqB,CAAC,MAAM;MACjCF,QAAQ,CAACG,KAAK,GAAG,IAAI;IACvB,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMC,aAAa,GAAGT,QAAQ,CAAC,MAAM,CAACK,QAAQ,CAACG,KAAK,GAAI;IACtDE,UAAU,EAAE;EACd,CAAC,GAAIC,SAAS,CAAC;EAEf,OAAO;IAAEF,aAAa;IAAEJ,QAAQ,EAAEH,QAAQ,CAACG,QAAQ;EAAE,CAAC;AACxD"}

47
VApp/node_modules/vuetify/lib/composables/stack.mjs generated vendored Normal file
View File

@ -0,0 +1,47 @@
// Composables
import { useToggleScope } from "./toggleScope.mjs"; // Utilities
import { computed, inject, onScopeDispose, provide, reactive, readonly, shallowRef, toRaw, watchEffect } from 'vue';
import { getCurrentInstance } from "../util/index.mjs"; // Types
const StackSymbol = Symbol.for('vuetify:stack');
const globalStack = reactive([]);
export function useStack(isActive, zIndex, disableGlobalStack) {
const vm = getCurrentInstance('useStack');
const createStackEntry = !disableGlobalStack;
const parent = inject(StackSymbol, undefined);
const stack = reactive({
activeChildren: new Set()
});
provide(StackSymbol, stack);
const _zIndex = shallowRef(+zIndex.value);
useToggleScope(isActive, () => {
const lastZIndex = globalStack.at(-1)?.[1];
_zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
if (createStackEntry) {
globalStack.push([vm.uid, _zIndex.value]);
}
parent?.activeChildren.add(vm.uid);
onScopeDispose(() => {
if (createStackEntry) {
const idx = toRaw(globalStack).findIndex(v => v[0] === vm.uid);
globalStack.splice(idx, 1);
}
parent?.activeChildren.delete(vm.uid);
});
});
const globalTop = shallowRef(true);
if (createStackEntry) {
watchEffect(() => {
const _isTop = globalStack.at(-1)?.[0] === vm.uid;
setTimeout(() => globalTop.value = _isTop);
});
}
const localTop = computed(() => !stack.activeChildren.size);
return {
globalTop: readonly(globalTop),
localTop,
stackStyles: computed(() => ({
zIndex: _zIndex.value
}))
};
}
//# sourceMappingURL=stack.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"stack.mjs","names":["useToggleScope","computed","inject","onScopeDispose","provide","reactive","readonly","shallowRef","toRaw","watchEffect","getCurrentInstance","StackSymbol","Symbol","for","globalStack","useStack","isActive","zIndex","disableGlobalStack","vm","createStackEntry","parent","undefined","stack","activeChildren","Set","_zIndex","value","lastZIndex","at","push","uid","add","idx","findIndex","v","splice","delete","globalTop","_isTop","setTimeout","localTop","size","stackStyles"],"sources":["../../src/composables/stack.ts"],"sourcesContent":["// Composables\nimport { useToggleScope } from '@/composables/toggleScope'\n\n// Utilities\nimport { computed, inject, onScopeDispose, provide, reactive, readonly, shallowRef, toRaw, watchEffect } from 'vue'\nimport { getCurrentInstance } from '@/util'\n\n// Types\nimport type { InjectionKey, Ref } from 'vue'\n\nconst StackSymbol: InjectionKey<StackProvide> = Symbol.for('vuetify:stack')\n\ninterface StackProvide {\n activeChildren: Set<number>\n}\n\nconst globalStack = reactive<[uid: number, zIndex: number][]>([])\n\nexport function useStack (\n isActive: Readonly<Ref<boolean>>,\n zIndex: Readonly<Ref<string | number>>,\n disableGlobalStack: boolean\n) {\n const vm = getCurrentInstance('useStack')\n const createStackEntry = !disableGlobalStack\n\n const parent = inject(StackSymbol, undefined)\n const stack: StackProvide = reactive({\n activeChildren: new Set<number>(),\n })\n provide(StackSymbol, stack)\n\n const _zIndex = shallowRef(+zIndex.value)\n useToggleScope(isActive, () => {\n const lastZIndex = globalStack.at(-1)?.[1]\n _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value\n\n if (createStackEntry) {\n globalStack.push([vm.uid, _zIndex.value])\n }\n\n parent?.activeChildren.add(vm.uid)\n\n onScopeDispose(() => {\n if (createStackEntry) {\n const idx = toRaw(globalStack).findIndex(v => v[0] === vm.uid)\n globalStack.splice(idx, 1)\n }\n\n parent?.activeChildren.delete(vm.uid)\n })\n })\n\n const globalTop = shallowRef(true)\n if (createStackEntry) {\n watchEffect(() => {\n const _isTop = globalStack.at(-1)?.[0] === vm.uid\n setTimeout(() => globalTop.value = _isTop)\n })\n }\n\n const localTop = computed(() => !stack.activeChildren.size)\n\n return {\n globalTop: readonly(globalTop),\n localTop,\n stackStyles: computed(() => ({ zIndex: _zIndex.value })),\n }\n}\n"],"mappings":"AAAA;AAAA,SACSA,cAAc,6BAEvB;AACA,SAASC,QAAQ,EAAEC,MAAM,EAAEC,cAAc,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,EAAEC,WAAW,QAAQ,KAAK;AAAA,SAC1GC,kBAAkB,6BAE3B;AAGA,MAAMC,WAAuC,GAAGC,MAAM,CAACC,GAAG,CAAC,eAAe,CAAC;AAM3E,MAAMC,WAAW,GAAGT,QAAQ,CAAkC,EAAE,CAAC;AAEjE,OAAO,SAASU,QAAQA,CACtBC,QAAgC,EAChCC,MAAsC,EACtCC,kBAA2B,EAC3B;EACA,MAAMC,EAAE,GAAGT,kBAAkB,CAAC,UAAU,CAAC;EACzC,MAAMU,gBAAgB,GAAG,CAACF,kBAAkB;EAE5C,MAAMG,MAAM,GAAGnB,MAAM,CAACS,WAAW,EAAEW,SAAS,CAAC;EAC7C,MAAMC,KAAmB,GAAGlB,QAAQ,CAAC;IACnCmB,cAAc,EAAE,IAAIC,GAAG,CAAS;EAClC,CAAC,CAAC;EACFrB,OAAO,CAACO,WAAW,EAAEY,KAAK,CAAC;EAE3B,MAAMG,OAAO,GAAGnB,UAAU,CAAC,CAACU,MAAM,CAACU,KAAK,CAAC;EACzC3B,cAAc,CAACgB,QAAQ,EAAE,MAAM;IAC7B,MAAMY,UAAU,GAAGd,WAAW,CAACe,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1CH,OAAO,CAACC,KAAK,GAAGC,UAAU,GAAGA,UAAU,GAAG,EAAE,GAAG,CAACX,MAAM,CAACU,KAAK;IAE5D,IAAIP,gBAAgB,EAAE;MACpBN,WAAW,CAACgB,IAAI,CAAC,CAACX,EAAE,CAACY,GAAG,EAAEL,OAAO,CAACC,KAAK,CAAC,CAAC;IAC3C;IAEAN,MAAM,EAAEG,cAAc,CAACQ,GAAG,CAACb,EAAE,CAACY,GAAG,CAAC;IAElC5B,cAAc,CAAC,MAAM;MACnB,IAAIiB,gBAAgB,EAAE;QACpB,MAAMa,GAAG,GAAGzB,KAAK,CAACM,WAAW,CAAC,CAACoB,SAAS,CAACC,CAAC,IAAIA,CAAC,CAAC,CAAC,CAAC,KAAKhB,EAAE,CAACY,GAAG,CAAC;QAC9DjB,WAAW,CAACsB,MAAM,CAACH,GAAG,EAAE,CAAC,CAAC;MAC5B;MAEAZ,MAAM,EAAEG,cAAc,CAACa,MAAM,CAAClB,EAAE,CAACY,GAAG,CAAC;IACvC,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMO,SAAS,GAAG/B,UAAU,CAAC,IAAI,CAAC;EAClC,IAAIa,gBAAgB,EAAE;IACpBX,WAAW,CAAC,MAAM;MAChB,MAAM8B,MAAM,GAAGzB,WAAW,CAACe,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAKV,EAAE,CAACY,GAAG;MACjDS,UAAU,CAAC,MAAMF,SAAS,CAACX,KAAK,GAAGY,MAAM,CAAC;IAC5C,CAAC,CAAC;EACJ;EAEA,MAAME,QAAQ,GAAGxC,QAAQ,CAAC,MAAM,CAACsB,KAAK,CAACC,cAAc,CAACkB,IAAI,CAAC;EAE3D,OAAO;IACLJ,SAAS,EAAEhC,QAAQ,CAACgC,SAAS,CAAC;IAC9BG,QAAQ;IACRE,WAAW,EAAE1C,QAAQ,CAAC,OAAO;MAAEgB,MAAM,EAAES,OAAO,CAACC;IAAM,CAAC,CAAC;EACzD,CAAC;AACH"}

10
VApp/node_modules/vuetify/lib/composables/tag.mjs generated vendored Normal file
View File

@ -0,0 +1,10 @@
// Utilities
import { propsFactory } from "../util/index.mjs"; // Types
// Composables
export const makeTagProps = propsFactory({
tag: {
type: String,
default: 'div'
}
}, 'tag');
//# sourceMappingURL=tag.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"tag.mjs","names":["propsFactory","makeTagProps","tag","type","String","default"],"sources":["../../src/composables/tag.ts"],"sourcesContent":["// Utilities\nimport { propsFactory } from '@/util'\n\n// Types\nexport interface TagProps {\n tag: string\n}\n\n// Composables\nexport const makeTagProps = propsFactory({\n tag: {\n type: String,\n default: 'div',\n },\n}, 'tag')\n"],"mappings":"AAAA;AAAA,SACSA,YAAY,6BAErB;AAKA;AACA,OAAO,MAAMC,YAAY,GAAGD,YAAY,CAAC;EACvCE,GAAG,EAAE;IACHC,IAAI,EAAEC,MAAM;IACZC,OAAO,EAAE;EACX;AACF,CAAC,EAAE,KAAK,CAAC"}

25
VApp/node_modules/vuetify/lib/composables/teleport.mjs generated vendored Normal file
View File

@ -0,0 +1,25 @@
// Utilities
import { computed, warn } from 'vue';
import { IN_BROWSER } from "../util/index.mjs"; // Types
export function useTeleport(target) {
const teleportTarget = computed(() => {
const _target = target.value;
if (_target === true || !IN_BROWSER) return undefined;
const targetElement = _target === false ? document.body : typeof _target === 'string' ? document.querySelector(_target) : _target;
if (targetElement == null) {
warn(`Unable to locate target ${_target}`);
return undefined;
}
let container = targetElement.querySelector(':scope > .v-overlay-container');
if (!container) {
container = document.createElement('div');
container.className = 'v-overlay-container';
targetElement.appendChild(container);
}
return container;
});
return {
teleportTarget
};
}
//# sourceMappingURL=teleport.mjs.map

View File

@ -0,0 +1 @@
{"version":3,"file":"teleport.mjs","names":["computed","warn","IN_BROWSER","useTeleport","target","teleportTarget","_target","value","undefined","targetElement","document","body","querySelector","container","createElement","className","appendChild"],"sources":["../../src/composables/teleport.ts"],"sourcesContent":["// Utilities\nimport { computed, warn } from 'vue'\nimport { IN_BROWSER } from '@/util'\n\n// Types\nimport type { Ref } from 'vue'\n\nexport function useTeleport (target: Ref<boolean | string | Element>) {\n const teleportTarget = computed(() => {\n const _target = target.value\n\n if (_target === true || !IN_BROWSER) return undefined\n\n const targetElement =\n _target === false ? document.body\n : typeof _target === 'string' ? document.querySelector(_target)\n : _target\n\n if (targetElement == null) {\n warn(`Unable to locate target ${_target}`)\n return undefined\n }\n\n let container = targetElement.querySelector(':scope > .v-overlay-container')\n\n if (!container) {\n container = document.createElement('div')\n container.className = 'v-overlay-container'\n targetElement.appendChild(container)\n }\n\n return container\n })\n\n return { teleportTarget }\n}\n"],"mappings":"AAAA;AACA,SAASA,QAAQ,EAAEC,IAAI,QAAQ,KAAK;AAAA,SAC3BC,UAAU,6BAEnB;AAGA,OAAO,SAASC,WAAWA,CAAEC,MAAuC,EAAE;EACpE,MAAMC,cAAc,GAAGL,QAAQ,CAAC,MAAM;IACpC,MAAMM,OAAO,GAAGF,MAAM,CAACG,KAAK;IAE5B,IAAID,OAAO,KAAK,IAAI,IAAI,CAACJ,UAAU,EAAE,OAAOM,SAAS;IAErD,MAAMC,aAAa,GACjBH,OAAO,KAAK,KAAK,GAAGI,QAAQ,CAACC,IAAI,GAC/B,OAAOL,OAAO,KAAK,QAAQ,GAAGI,QAAQ,CAACE,aAAa,CAACN,OAAO,CAAC,GAC7DA,OAAO;IAEX,IAAIG,aAAa,IAAI,IAAI,EAAE;MACzBR,IAAI,CAAE,2BAA0BK,OAAQ,EAAC,CAAC;MAC1C,OAAOE,SAAS;IAClB;IAEA,IAAIK,SAAS,GAAGJ,aAAa,CAACG,aAAa,CAAC,+BAA+B,CAAC;IAE5E,IAAI,CAACC,SAAS,EAAE;MACdA,SAAS,GAAGH,QAAQ,CAACI,aAAa,CAAC,KAAK,CAAC;MACzCD,SAAS,CAACE,SAAS,GAAG,qBAAqB;MAC3CN,aAAa,CAACO,WAAW,CAACH,SAAS,CAAC;IACtC;IAEA,OAAOA,SAAS;EAClB,CAAC,CAAC;EAEF,OAAO;IAAER;EAAe,CAAC;AAC3B"}

283
VApp/node_modules/vuetify/lib/composables/theme.mjs generated vendored Normal file
View File

@ -0,0 +1,283 @@
// Utilities
import { computed, inject, provide, ref, watch, watchEffect } from 'vue';
import { createRange, darken, getCurrentInstance, getForeground, getLuma, IN_BROWSER, lighten, mergeDeep, parseColor, propsFactory, RGBtoHex } from "../util/index.mjs"; // Types
export const ThemeSymbol = Symbol.for('vuetify:theme');
export const makeThemeProps = propsFactory({
theme: String
}, 'theme');
function genDefaults() {
return {
defaultTheme: 'light',
variations: {
colors: [],
lighten: 0,
darken: 0
},
themes: {
light: {
dark: false,
colors: {
background: '#FFFFFF',
surface: '#FFFFFF',
'surface-bright': '#FFFFFF',
'surface-light': '#EEEEEE',
'surface-variant': '#424242',
'on-surface-variant': '#EEEEEE',
primary: '#1867C0',
'primary-darken-1': '#1F5592',
secondary: '#48A9A6',
'secondary-darken-1': '#018786',
error: '#B00020',
info: '#2196F3',
success: '#4CAF50',
warning: '#FB8C00'
},
variables: {
'border-color': '#000000',
'border-opacity': 0.12,
'high-emphasis-opacity': 0.87,
'medium-emphasis-opacity': 0.60,
'disabled-opacity': 0.38,
'idle-opacity': 0.04,
'hover-opacity': 0.04,
'focus-opacity': 0.12,
'selected-opacity': 0.08,
'activated-opacity': 0.12,
'pressed-opacity': 0.12,
'dragged-opacity': 0.08,
'theme-kbd': '#212529',
'theme-on-kbd': '#FFFFFF',
'theme-code': '#F5F5F5',
'theme-on-code': '#000000'
}
},
dark: {
dark: true,
colors: {
background: '#121212',
surface: '#212121',
'surface-bright': '#ccbfd6',
'surface-light': '#424242',
'surface-variant': '#a3a3a3',
'on-surface-variant': '#424242',
primary: '#2196F3',
'primary-darken-1': '#277CC1',
secondary: '#54B6B2',
'secondary-darken-1': '#48A9A6',
error: '#CF6679',
info: '#2196F3',
success: '#4CAF50',
warning: '#FB8C00'
},
variables: {
'border-color': '#FFFFFF',
'border-opacity': 0.12,
'high-emphasis-opacity': 1,
'medium-emphasis-opacity': 0.70,
'disabled-opacity': 0.50,
'idle-opacity': 0.10,
'hover-opacity': 0.04,
'focus-opacity': 0.12,
'selected-opacity': 0.08,
'activated-opacity': 0.12,
'pressed-opacity': 0.16,
'dragged-opacity': 0.08,
'theme-kbd': '#212529',
'theme-on-kbd': '#FFFFFF',
'theme-code': '#343434',
'theme-on-code': '#CCCCCC'
}
}
}
};
}
function parseThemeOptions() {
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : genDefaults();
const defaults = genDefaults();
if (!options) return {
...defaults,
isDisabled: true
};
const themes = {};
for (const [key, theme] of Object.entries(options.themes ?? {})) {
const defaultTheme = theme.dark || key === 'dark' ? defaults.themes?.dark : defaults.themes?.light;
themes[key] = mergeDeep(defaultTheme, theme);
}
return mergeDeep(defaults, {
...options,
themes
});
}
// Composables
export function createTheme(options) {
const parsedOptions = parseThemeOptions(options);
const name = ref(parsedOptions.defaultTheme);
const themes = ref(parsedOptions.themes);
const computedThemes = computed(() => {
const acc = {};
for (const [name, original] of Object.entries(themes.value)) {
const theme = acc[name] = {
...original,
colors: {
...original.colors
}
};
if (parsedOptions.variations) {
for (const name of parsedOptions.variations.colors) {
const color = theme.colors[name];
if (!color) continue;
for (const variation of ['lighten', 'darken']) {
const fn = variation === 'lighten' ? lighten : darken;
for (const amount of createRange(parsedOptions.variations[variation], 1)) {
theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount));
}
}
}
}
for (const color of Object.keys(theme.colors)) {
if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
const onColor = `on-${color}`;
const colorVal = parseColor(theme.colors[color]);
theme.colors[onColor] = getForeground(colorVal);
}
}
return acc;
});
const current = computed(() => computedThemes.value[name.value]);
const styles = computed(() => {
const lines = [];
if (current.value.dark) {
createCssClass(lines, ':root', ['color-scheme: dark']);
}
createCssClass(lines, ':root', genCssVariables(current.value));
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)]);
}
const bgLines = [];
const fgLines = [];
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
for (const key of colors) {
if (/^on-[a-z]/.test(key)) {
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
} else {
createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`]);
createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`]);
createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`]);
}
}
lines.push(...bgLines, ...fgLines);
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
});
function getHead() {
return {
style: [{
children: styles.value,
id: 'vuetify-theme-stylesheet',
nonce: parsedOptions.cspNonce || false
}]
};
}
function install(app) {
if (parsedOptions.isDisabled) return;
const head = app._context.provides.usehead;
if (head) {
if (head.push) {
const entry = head.push(getHead);
if (IN_BROWSER) {
watch(styles, () => {
entry.patch(getHead);
});
}
} else {
if (IN_BROWSER) {
head.addHeadObjs(computed(getHead));
watchEffect(() => head.updateDOM());
} else {
head.addHeadObjs(getHead());
}
}
} else {
let styleEl = IN_BROWSER ? document.getElementById('vuetify-theme-stylesheet') : null;
if (IN_BROWSER) {
watch(styles, updateStyles, {
immediate: true
});
} else {
updateStyles();
}
function updateStyles() {
if (typeof document !== 'undefined' && !styleEl) {
const el = document.createElement('style');
el.type = 'text/css';
el.id = 'vuetify-theme-stylesheet';
if (parsedOptions.cspNonce) el.setAttribute('nonce', parsedOptions.cspNonce);
styleEl = el;
document.head.appendChild(styleEl);
}
if (styleEl) styleEl.innerHTML = styles.value;
}
}
}
const themeClasses = computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
return {
install,
isDisabled: parsedOptions.isDisabled,
name,
themes,
current,
computedThemes,
themeClasses,
styles,
global: {
name,
current
}
};
}
export function provideTheme(props) {
getCurrentInstance('provideTheme');
const theme = inject(ThemeSymbol, null);
if (!theme) throw new Error('Could not find Vuetify theme injection');
const name = computed(() => {
return props.theme ?? theme.name.value;
});
const current = computed(() => theme.themes.value[name.value]);
const themeClasses = computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
const newTheme = {
...theme,
name,
current,
themeClasses
};
provide(ThemeSymbol, newTheme);
return newTheme;
}
export function useTheme() {
getCurrentInstance('useTheme');
const theme = inject(ThemeSymbol, null);
if (!theme) throw new Error('Could not find Vuetify theme injection');
return theme;
}
function createCssClass(lines, selector, content) {
lines.push(`${selector} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
}
function genCssVariables(theme) {
const lightOverlay = theme.dark ? 2 : 1;
const darkOverlay = theme.dark ? 1 : 2;
const variables = [];
for (const [key, value] of Object.entries(theme.colors)) {
const rgb = parseColor(value);
variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
if (!key.startsWith('on-')) {
variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
}
}
for (const [key, value] of Object.entries(theme.variables)) {
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
variables.push(`--v-${key}: ${rgb ?? value}`);
}
return variables;
}
//# sourceMappingURL=theme.mjs.map

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More