@vuetify/nightly 3.8.3-master.2025-05-04 → 3.8.4-dev.2025-05-07
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -24
- package/dist/json/attributes.json +2834 -2826
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +156 -156
- package/dist/json/tags.json +2 -0
- package/dist/json/web-types.json +5151 -5131
- package/dist/vuetify-labs.cjs +163 -73
- package/dist/vuetify-labs.css +4647 -4620
- package/dist/vuetify-labs.d.ts +154 -377
- package/dist/vuetify-labs.esm.js +164 -74
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +163 -73
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +142 -40
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5041 -5014
- package/dist/vuetify.d.ts +183 -406
- package/dist/vuetify.esm.js +143 -41
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +142 -40
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1182 -1173
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +3 -3
- package/lib/components/VAutocomplete/VAutocomplete.js +5 -0
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBottomNavigation/VBottomNavigation.d.ts +6 -6
- package/lib/components/VBtnGroup/VBtnGroup.css +30 -7
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +58 -32
- package/lib/components/VBtnGroup/VBtnGroup.js +7 -3
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +44 -17
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
- package/lib/components/VCombobox/VCombobox.d.ts +3 -3
- package/lib/components/VDataTable/VDataTable.d.ts +110 -110
- package/lib/components/VDataTable/VDataTableHeaders.js +1 -2
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.d.ts +62 -189
- package/lib/components/VDataTable/VDataTableServer.js.map +1 -1
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +62 -189
- package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
- package/lib/components/VDataTable/composables/headers.d.ts +75 -75
- package/lib/components/VDatePicker/VDatePicker.d.ts +3 -3
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +6 -6
- package/lib/components/VDialog/VDialog.js +1 -1
- package/lib/components/VDialog/VDialog.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.css +4 -0
- package/lib/components/VFileInput/VFileInput.js +21 -3
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.sass +4 -0
- package/lib/components/VInput/VInput.d.ts +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +3 -3
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/VOverlay/locationStrategies.js +1 -1
- package/lib/components/VOverlay/locationStrategies.js.map +1 -1
- package/lib/components/VSelect/VSelect.d.ts +3 -3
- package/lib/components/VTabs/VTabs.d.ts +6 -6
- package/lib/components/transitions/dialog-transition.js +3 -3
- package/lib/components/transitions/dialog-transition.js.map +1 -1
- package/lib/composables/calendar.d.ts +1 -0
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +94 -26
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +6 -1
- package/lib/composables/virtual.js.map +1 -1
- package/lib/entry-bundler.d.ts +6 -6
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +65 -60
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +3 -3
- package/lib/labs/VCalendar/VCalendarDay.d.ts +3 -3
- package/lib/labs/VCalendar/VCalendarInterval.d.ts +3 -3
- package/lib/labs/VCalendar/VCalendarMonthDay.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +9 -9
- package/lib/labs/VFileUpload/VFileUpload.js +19 -31
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/lib/labs/VTimePicker/VTimePickerClock.js +2 -2
- package/lib/labs/VTimePicker/VTimePickerClock.js.map +1 -1
- package/lib/util/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.js.map +1 -1
- package/lib/util/helpers.js.map +1 -1
- package/package.json +6 -6
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.
|
2
|
+
* Vuetify v3.8.4-dev.2025-05-07
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
6
6
|
|
7
|
-
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
7
|
+
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
8
8
|
|
9
9
|
// Types
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
@@ -81,6 +81,7 @@ const IN_BROWSER = typeof window !== 'undefined';
|
|
81
81
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
82
82
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
83
83
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
84
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
84
85
|
|
85
86
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
86
87
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -2295,6 +2296,7 @@ const makeThemeProps = propsFactory({
|
|
2295
2296
|
function genDefaults$2() {
|
2296
2297
|
return {
|
2297
2298
|
defaultTheme: 'light',
|
2299
|
+
prefix: 'v-',
|
2298
2300
|
variations: {
|
2299
2301
|
colors: [],
|
2300
2302
|
lighten: 0,
|
@@ -2376,7 +2378,10 @@ function genDefaults$2() {
|
|
2376
2378
|
}
|
2377
2379
|
}
|
2378
2380
|
},
|
2379
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2381
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2382
|
+
scoped: false,
|
2383
|
+
unimportant: false,
|
2384
|
+
utilities: true
|
2380
2385
|
};
|
2381
2386
|
}
|
2382
2387
|
function parseThemeOptions() {
|
@@ -2399,21 +2404,21 @@ function parseThemeOptions() {
|
|
2399
2404
|
function createCssClass(lines, selector, content, scope) {
|
2400
2405
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2401
2406
|
}
|
2402
|
-
function genCssVariables(theme) {
|
2407
|
+
function genCssVariables(theme, prefix) {
|
2403
2408
|
const lightOverlay = theme.dark ? 2 : 1;
|
2404
2409
|
const darkOverlay = theme.dark ? 1 : 2;
|
2405
2410
|
const variables = [];
|
2406
2411
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2407
2412
|
const rgb = parseColor(value);
|
2408
|
-
variables.push(
|
2413
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2409
2414
|
if (!key.startsWith('on-')) {
|
2410
|
-
variables.push(
|
2415
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2411
2416
|
}
|
2412
2417
|
}
|
2413
2418
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2414
2419
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2415
2420
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2416
|
-
variables.push(
|
2421
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2417
2422
|
}
|
2418
2423
|
return variables;
|
2419
2424
|
}
|
@@ -2457,7 +2462,8 @@ function getScopedSelector(selector, scope) {
|
|
2457
2462
|
const scopeSelector = `:where(${scope})`;
|
2458
2463
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2459
2464
|
}
|
2460
|
-
function upsertStyles(
|
2465
|
+
function upsertStyles(id, cspNonce, styles) {
|
2466
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2461
2467
|
if (!styleEl) return;
|
2462
2468
|
styleEl.innerHTML = styles;
|
2463
2469
|
}
|
@@ -2477,8 +2483,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2477
2483
|
// Composables
|
2478
2484
|
function createTheme(options) {
|
2479
2485
|
const parsedOptions = parseThemeOptions(options);
|
2480
|
-
const
|
2486
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
2481
2487
|
const themes = ref(parsedOptions.themes);
|
2488
|
+
const systemName = shallowRef('light');
|
2489
|
+
const name = computed({
|
2490
|
+
get() {
|
2491
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
2492
|
+
},
|
2493
|
+
set(val) {
|
2494
|
+
_name.value = val;
|
2495
|
+
}
|
2496
|
+
});
|
2482
2497
|
const computedThemes = computed(() => {
|
2483
2498
|
const acc = {};
|
2484
2499
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2499,28 +2514,49 @@ function createTheme(options) {
|
|
2499
2514
|
const current = toRef(() => computedThemes.value[name.value]);
|
2500
2515
|
const styles = computed(() => {
|
2501
2516
|
const lines = [];
|
2517
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
2518
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2502
2519
|
if (current.value?.dark) {
|
2503
2520
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2504
2521
|
}
|
2505
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2522
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2506
2523
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2507
|
-
createCssClass(lines,
|
2508
|
-
}
|
2509
|
-
|
2510
|
-
|
2511
|
-
|
2512
|
-
|
2513
|
-
|
2514
|
-
|
2515
|
-
|
2516
|
-
|
2517
|
-
|
2518
|
-
|
2524
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
2525
|
+
}
|
2526
|
+
if (parsedOptions.utilities) {
|
2527
|
+
const bgLines = [];
|
2528
|
+
const fgLines = [];
|
2529
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2530
|
+
for (const key of colors) {
|
2531
|
+
if (key.startsWith('on-')) {
|
2532
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2533
|
+
} else {
|
2534
|
+
createCssClass(bgLines, `.${scoped}bg-${key}`, [`--${parsedOptions.prefix}theme-overlay-multiplier: var(--${parsedOptions.prefix}theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`, `color: rgb(var(--${parsedOptions.prefix}theme-on-${key}))${important}`], parsedOptions.scope);
|
2535
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2536
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2537
|
+
}
|
2519
2538
|
}
|
2539
|
+
lines.push(...bgLines, ...fgLines);
|
2520
2540
|
}
|
2521
|
-
lines.push(...bgLines, ...fgLines);
|
2522
2541
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2523
2542
|
});
|
2543
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2544
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
2545
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
2546
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2547
|
+
function updateSystemName() {
|
2548
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
2549
|
+
}
|
2550
|
+
updateSystemName();
|
2551
|
+
media.addEventListener('change', updateSystemName, {
|
2552
|
+
passive: true
|
2553
|
+
});
|
2554
|
+
if (getCurrentScope()) {
|
2555
|
+
onScopeDispose(() => {
|
2556
|
+
media.removeEventListener('change', updateSystemName);
|
2557
|
+
});
|
2558
|
+
}
|
2559
|
+
}
|
2524
2560
|
function install(app) {
|
2525
2561
|
if (parsedOptions.isDisabled) return;
|
2526
2562
|
const head = app._context.provides.usehead;
|
@@ -2558,22 +2594,55 @@ function createTheme(options) {
|
|
2558
2594
|
updateStyles();
|
2559
2595
|
}
|
2560
2596
|
function updateStyles() {
|
2561
|
-
upsertStyles(
|
2597
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2562
2598
|
}
|
2563
2599
|
}
|
2564
2600
|
}
|
2565
|
-
|
2601
|
+
function change(themeName) {
|
2602
|
+
if (!themeNames.value.includes(themeName)) {
|
2603
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2604
|
+
return;
|
2605
|
+
}
|
2606
|
+
name.value = themeName;
|
2607
|
+
}
|
2608
|
+
function cycle() {
|
2609
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2610
|
+
const currentIndex = themeArray.indexOf(name.value);
|
2611
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2612
|
+
change(themeArray[nextIndex]);
|
2613
|
+
}
|
2614
|
+
function toggle() {
|
2615
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2616
|
+
cycle(themeArray);
|
2617
|
+
}
|
2618
|
+
const globalName = new Proxy(name, {
|
2619
|
+
get(target, prop) {
|
2620
|
+
return target[prop];
|
2621
|
+
},
|
2622
|
+
set(target, prop, val) {
|
2623
|
+
if (prop === 'value') {
|
2624
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2625
|
+
}
|
2626
|
+
// @ts-expect-error
|
2627
|
+
target[prop] = val;
|
2628
|
+
return true;
|
2629
|
+
}
|
2630
|
+
});
|
2566
2631
|
return {
|
2567
2632
|
install,
|
2633
|
+
change,
|
2634
|
+
cycle,
|
2635
|
+
toggle,
|
2568
2636
|
isDisabled: parsedOptions.isDisabled,
|
2569
2637
|
name,
|
2570
2638
|
themes,
|
2571
2639
|
current,
|
2572
2640
|
computedThemes,
|
2641
|
+
prefix: parsedOptions.prefix,
|
2573
2642
|
themeClasses,
|
2574
2643
|
styles,
|
2575
2644
|
global: {
|
2576
|
-
name,
|
2645
|
+
name: globalName,
|
2577
2646
|
current
|
2578
2647
|
}
|
2579
2648
|
};
|
@@ -2584,7 +2653,7 @@ function provideTheme(props) {
|
|
2584
2653
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2585
2654
|
const name = toRef(() => props.theme ?? theme.name.value);
|
2586
2655
|
const current = toRef(() => theme.themes.value[name.value]);
|
2587
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
2656
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
2588
2657
|
const newTheme = {
|
2589
2658
|
...theme,
|
2590
2659
|
name,
|
@@ -2923,10 +2992,10 @@ const VDialogTransition = genericComponent()({
|
|
2923
2992
|
async onLeave(el, done) {
|
2924
2993
|
await new Promise(resolve => requestAnimationFrame(resolve));
|
2925
2994
|
let dimensions;
|
2926
|
-
if (!Array.isArray(props.target)
|
2927
|
-
dimensions = saved.get(el);
|
2928
|
-
} else {
|
2995
|
+
if (!saved.has(el) || Array.isArray(props.target) || props.target.offsetParent || props.target.getClientRects().length) {
|
2929
2996
|
dimensions = getDimensions(props.target, el);
|
2997
|
+
} else {
|
2998
|
+
dimensions = saved.get(el);
|
2930
2999
|
}
|
2931
3000
|
const {
|
2932
3001
|
x,
|
@@ -4131,9 +4200,15 @@ function useVariant(props) {
|
|
4131
4200
|
};
|
4132
4201
|
}
|
4133
4202
|
|
4203
|
+
// Types
|
4204
|
+
|
4134
4205
|
const makeVBtnGroupProps = propsFactory({
|
4135
4206
|
baseColor: String,
|
4136
4207
|
divided: Boolean,
|
4208
|
+
direction: {
|
4209
|
+
type: String,
|
4210
|
+
default: 'horizontal'
|
4211
|
+
},
|
4137
4212
|
...makeBorderProps(),
|
4138
4213
|
...makeComponentProps(),
|
4139
4214
|
...makeDensityProps(),
|
@@ -4167,7 +4242,7 @@ const VBtnGroup = genericComponent()({
|
|
4167
4242
|
} = useRounded(props);
|
4168
4243
|
provideDefaults({
|
4169
4244
|
VBtn: {
|
4170
|
-
height: 'auto',
|
4245
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4171
4246
|
baseColor: toRef(() => props.baseColor),
|
4172
4247
|
color: toRef(() => props.color),
|
4173
4248
|
density: toRef(() => props.density),
|
@@ -4177,7 +4252,7 @@ const VBtnGroup = genericComponent()({
|
|
4177
4252
|
});
|
4178
4253
|
useRender(() => {
|
4179
4254
|
return createVNode(props.tag, {
|
4180
|
-
"class": ['v-btn-group', {
|
4255
|
+
"class": ['v-btn-group', `v-btn-group--${props.direction}`, {
|
4181
4256
|
'v-btn-group--divided': props.divided
|
4182
4257
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
|
4183
4258
|
"style": props.style
|
@@ -10164,7 +10239,7 @@ function connectedLocationStrategy(data, props, contentStyles) {
|
|
10164
10239
|
observe = false;
|
10165
10240
|
requestAnimationFrame(() => observe = true);
|
10166
10241
|
if (!data.target.value || !data.contentEl.value) return;
|
10167
|
-
if (Array.isArray(data.target.value) || data.target.value.offsetParent) {
|
10242
|
+
if (Array.isArray(data.target.value) || data.target.value.offsetParent || data.target.value.getClientRects().length) {
|
10168
10243
|
targetBox = getTargetBox(data.target.value);
|
10169
10244
|
} // Otherwise target element is hidden, use last known value
|
10170
10245
|
|
@@ -12352,7 +12427,12 @@ function useVirtual(props, items) {
|
|
12352
12427
|
}
|
12353
12428
|
function calculateOffset(index) {
|
12354
12429
|
index = clamp(index, 0, items.value.length - 1);
|
12355
|
-
|
12430
|
+
const whole = Math.floor(index);
|
12431
|
+
const fraction = index % 1;
|
12432
|
+
const next = whole + 1;
|
12433
|
+
const wholeOffset = offsets[whole] || 0;
|
12434
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12435
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12356
12436
|
}
|
12357
12437
|
function calculateIndex(scrollTop) {
|
12358
12438
|
return binaryClosest(offsets, scrollTop);
|
@@ -13502,6 +13582,11 @@ const VAutocomplete = genericComponent()({
|
|
13502
13582
|
menu.value = true;
|
13503
13583
|
}
|
13504
13584
|
});
|
13585
|
+
watch(model, value => {
|
13586
|
+
if (!props.multiple && !hasSelectionSlot.value) {
|
13587
|
+
search.value = value[0]?.title ?? '';
|
13588
|
+
}
|
13589
|
+
});
|
13505
13590
|
useRender(() => {
|
13506
13591
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
13507
13592
|
const isDirty = model.value.length > 0;
|
@@ -14121,7 +14206,7 @@ const VDialog = genericComponent()({
|
|
14121
14206
|
}
|
14122
14207
|
function onAfterEnter() {
|
14123
14208
|
emit('afterEnter');
|
14124
|
-
if (overlay.value?.contentEl && !overlay.value.contentEl.contains(document.activeElement)) {
|
14209
|
+
if ((props.scrim || props.retainFocus) && overlay.value?.contentEl && !overlay.value.contentEl.contains(document.activeElement)) {
|
14125
14210
|
overlay.value.contentEl.focus({
|
14126
14211
|
preventScroll: true
|
14127
14212
|
});
|
@@ -20329,7 +20414,6 @@ const VDataTableHeaders = genericComponent()({
|
|
20329
20414
|
});
|
20330
20415
|
};
|
20331
20416
|
const VDataTableMobileHeaderCell = () => {
|
20332
|
-
const headerProps = mergeProps(props.headerProps ?? {} ?? {});
|
20333
20417
|
const displayItems = computed(() => {
|
20334
20418
|
return columns.value.filter(column => column?.sortable && !props.disableSort);
|
20335
20419
|
});
|
@@ -20342,7 +20426,7 @@ const VDataTableHeaders = genericComponent()({
|
|
20342
20426
|
"tag": "th",
|
20343
20427
|
"class": [...headerCellClasses.value],
|
20344
20428
|
"colspan": headers.value.length + 1
|
20345
|
-
}, headerProps), {
|
20429
|
+
}, props.headerProps), {
|
20346
20430
|
default: () => [createVNode("div", {
|
20347
20431
|
"class": "v-data-table-header__content"
|
20348
20432
|
}, [createVNode(VSelect, {
|
@@ -23265,6 +23349,7 @@ const VFileInput = genericComponent()({
|
|
23265
23349
|
const inputRef = ref();
|
23266
23350
|
const isActive = toRef(() => isFocused.value || props.active);
|
23267
23351
|
const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));
|
23352
|
+
const isDragging = shallowRef(false);
|
23268
23353
|
function onFocus() {
|
23269
23354
|
if (inputRef.value !== document.activeElement) {
|
23270
23355
|
inputRef.value?.focus();
|
@@ -23291,11 +23376,26 @@ const VFileInput = genericComponent()({
|
|
23291
23376
|
}
|
23292
23377
|
function onDragover(e) {
|
23293
23378
|
e.preventDefault();
|
23379
|
+
e.stopImmediatePropagation();
|
23380
|
+
isDragging.value = true;
|
23381
|
+
}
|
23382
|
+
function onDragleave(e) {
|
23383
|
+
e.preventDefault();
|
23384
|
+
isDragging.value = false;
|
23294
23385
|
}
|
23295
23386
|
function onDrop(e) {
|
23296
23387
|
e.preventDefault();
|
23297
|
-
|
23298
|
-
|
23388
|
+
e.stopImmediatePropagation();
|
23389
|
+
isDragging.value = false;
|
23390
|
+
if (!e.dataTransfer?.files?.length || !inputRef.value) return;
|
23391
|
+
const dataTransfer = new DataTransfer();
|
23392
|
+
for (const file of e.dataTransfer.files) {
|
23393
|
+
dataTransfer.items.add(file);
|
23394
|
+
}
|
23395
|
+
inputRef.value.files = dataTransfer.files;
|
23396
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
23397
|
+
bubbles: true
|
23398
|
+
}));
|
23299
23399
|
}
|
23300
23400
|
watch(model, newValue => {
|
23301
23401
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
@@ -23317,6 +23417,7 @@ const VFileInput = genericComponent()({
|
|
23317
23417
|
"modelValue": props.multiple ? model.value : model.value[0],
|
23318
23418
|
"class": ['v-file-input', {
|
23319
23419
|
'v-file-input--chips': !!props.chips,
|
23420
|
+
'v-file-input--dragging': isDragging.value,
|
23320
23421
|
'v-file-input--hide': props.hideInput,
|
23321
23422
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
23322
23423
|
}, props.class],
|
@@ -23378,6 +23479,7 @@ const VFileInput = genericComponent()({
|
|
23378
23479
|
const target = e.target;
|
23379
23480
|
model.value = [...(target.files ?? [])];
|
23380
23481
|
},
|
23482
|
+
"onDragleave": onDragleave,
|
23381
23483
|
"onFocus": onFocus,
|
23382
23484
|
"onBlur": blur
|
23383
23485
|
}, slotProps, inputAttrs), null), createVNode("div", {
|
@@ -29430,43 +29532,31 @@ const VFileUpload = genericComponent()({
|
|
29430
29532
|
densityClasses
|
29431
29533
|
} = useDensity(props);
|
29432
29534
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
|
29433
|
-
const
|
29535
|
+
const isDragging = shallowRef(false);
|
29434
29536
|
const vSheetRef = ref(null);
|
29435
29537
|
const inputRef = ref(null);
|
29436
|
-
|
29437
|
-
vSheetRef.value?.$el.addEventListener('dragover', onDragOver);
|
29438
|
-
vSheetRef.value?.$el.addEventListener('drop', onDrop);
|
29439
|
-
});
|
29440
|
-
onUnmounted(() => {
|
29441
|
-
vSheetRef.value?.$el.removeEventListener('dragover', onDragOver);
|
29442
|
-
vSheetRef.value?.$el.removeEventListener('drop', onDrop);
|
29443
|
-
});
|
29444
|
-
function onDragOver(e) {
|
29538
|
+
function onDragover(e) {
|
29445
29539
|
e.preventDefault();
|
29446
29540
|
e.stopImmediatePropagation();
|
29447
|
-
|
29541
|
+
isDragging.value = true;
|
29448
29542
|
}
|
29449
|
-
function
|
29543
|
+
function onDragleave(e) {
|
29450
29544
|
e.preventDefault();
|
29451
|
-
|
29545
|
+
isDragging.value = false;
|
29452
29546
|
}
|
29453
29547
|
function onDrop(e) {
|
29454
29548
|
e.preventDefault();
|
29455
29549
|
e.stopImmediatePropagation();
|
29456
|
-
|
29457
|
-
|
29458
|
-
|
29459
|
-
|
29460
|
-
|
29461
|
-
|
29462
|
-
|
29463
|
-
|
29464
|
-
|
29465
|
-
|
29466
|
-
array.push(file);
|
29467
|
-
}
|
29468
|
-
}
|
29469
|
-
model.value = array;
|
29550
|
+
isDragging.value = false;
|
29551
|
+
if (!e.dataTransfer?.files?.length || !inputRef.value) return;
|
29552
|
+
const dataTransfer = new DataTransfer();
|
29553
|
+
for (const file of e.dataTransfer.files) {
|
29554
|
+
dataTransfer.items.add(file);
|
29555
|
+
}
|
29556
|
+
inputRef.value.files = dataTransfer.files;
|
29557
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
29558
|
+
bubbles: true
|
29559
|
+
}));
|
29470
29560
|
}
|
29471
29561
|
function onClick() {
|
29472
29562
|
inputRef.value?.click();
|
@@ -29502,11 +29592,11 @@ const VFileUpload = genericComponent()({
|
|
29502
29592
|
"class": ['v-file-upload', {
|
29503
29593
|
'v-file-upload--clickable': !hasBrowse,
|
29504
29594
|
'v-file-upload--disabled': props.disabled,
|
29505
|
-
'v-file-upload--dragging':
|
29595
|
+
'v-file-upload--dragging': isDragging.value
|
29506
29596
|
}, densityClasses.value, props.class],
|
29507
29597
|
"style": [props.style],
|
29508
|
-
"onDragleave":
|
29509
|
-
"onDragover":
|
29598
|
+
"onDragleave": onDragleave,
|
29599
|
+
"onDragover": onDragover,
|
29510
29600
|
"onDrop": onDrop,
|
29511
29601
|
"onClick": !hasBrowse ? onClick : undefined
|
29512
29602
|
}, rootAttrs), {
|
@@ -29557,7 +29647,7 @@ const VFileUpload = genericComponent()({
|
|
29557
29647
|
})]), props.subtitle && createVNode("div", {
|
29558
29648
|
"class": "v-file-upload-subtitle"
|
29559
29649
|
}, [props.subtitle])]), createVNode(VOverlay, {
|
29560
|
-
"model-value":
|
29650
|
+
"model-value": isDragging.value,
|
29561
29651
|
"contained": true,
|
29562
29652
|
"scrim": props.scrim
|
29563
29653
|
}, null), slots.input?.({
|
@@ -30255,8 +30345,8 @@ const VTimePickerClock = genericComponent()({
|
|
30255
30345
|
y
|
30256
30346
|
} = getPosition(i);
|
30257
30347
|
return {
|
30258
|
-
left: `${50 + x * 50}%`,
|
30259
|
-
top: `${50 + y * 50}%`
|
30348
|
+
left: `${Math.round(50 + x * 50)}%`,
|
30349
|
+
top: `${Math.round(50 + y * 50)}%`
|
30260
30350
|
};
|
30261
30351
|
}
|
30262
30352
|
function euclidean(p0, p1) {
|
@@ -31660,7 +31750,7 @@ function createVuetify$1() {
|
|
31660
31750
|
};
|
31661
31751
|
});
|
31662
31752
|
}
|
31663
|
-
const version$1 = "3.8.
|
31753
|
+
const version$1 = "3.8.4-dev.2025-05-07";
|
31664
31754
|
createVuetify$1.version = version$1;
|
31665
31755
|
|
31666
31756
|
// Vue's inject() can only be used in setup
|
@@ -31958,7 +32048,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
31958
32048
|
|
31959
32049
|
/* eslint-disable local-rules/sort-imports */
|
31960
32050
|
|
31961
|
-
const version = "3.8.
|
32051
|
+
const version = "3.8.4-dev.2025-05-07";
|
31962
32052
|
|
31963
32053
|
/* eslint-disable local-rules/sort-imports */
|
31964
32054
|
|