@vuetify/nightly 3.8.3-master.2025-05-05 → 3.8.4-dev.2025-05-13
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 +17 -29
- package/dist/json/attributes.json +3080 -3064
- package/dist/json/importMap-labs.json +30 -30
- package/dist/json/importMap.json +144 -144
- package/dist/json/tags.json +4 -0
- package/dist/json/web-types.json +5925 -5886
- package/dist/vuetify-labs.cjs +206 -92
- package/dist/vuetify-labs.css +3956 -3924
- package/dist/vuetify-labs.d.ts +1030 -978
- package/dist/vuetify-labs.esm.js +207 -93
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +206 -92
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +179 -48
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3200 -3168
- package/dist/vuetify.d.ts +620 -566
- package/dist/vuetify.esm.js +180 -49
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +179 -48
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1185 -1174
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +6 -1
- package/lib/components/VAlert/VAlert.d.ts +35 -0
- package/lib/components/VAlert/VAlert.js +14 -9
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +7 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +97 -97
- 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/VCheckbox/VCheckbox.d.ts +3 -3
- package/lib/components/VCombobox/VCombobox.d.ts +97 -97
- 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 +55 -55
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +55 -55
- 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/VField/VField.d.ts +3 -3
- package/lib/components/VFileInput/VFileInput.css +4 -0
- package/lib/components/VFileInput/VFileInput.d.ts +15 -15
- 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 +4 -4
- package/lib/components/VNumberInput/VNumberInput.d.ts +92 -92
- 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/VRadioGroup/VRadioGroup.d.ts +3 -3
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +97 -97
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSwitch/VSwitch.d.ts +3 -3
- package/lib/components/VTabs/VTabs.d.ts +6 -6
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- 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/iconSizes.d.ts +28 -0
- package/lib/composables/iconSizes.js +23 -0
- package/lib/composables/iconSizes.js.map +1 -0
- 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 +57 -52
- 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 +96 -96
- package/lib/labs/VFileUpload/VFileUpload.js +19 -31
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +7 -11
- package/lib/labs/VIconBtn/VIconBtn.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 +7 -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-13
|
|
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
|
|
@@ -5864,6 +5939,31 @@ const VAppBarTitle = genericComponent()({
|
|
|
5864
5939
|
// Utilities
|
|
5865
5940
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
|
5866
5941
|
|
|
5942
|
+
// Utilities
|
|
5943
|
+
|
|
5944
|
+
// Types
|
|
5945
|
+
|
|
5946
|
+
// Types
|
|
5947
|
+
|
|
5948
|
+
// Composables
|
|
5949
|
+
const makeIconSizeProps = propsFactory({
|
|
5950
|
+
iconSize: [Number, String],
|
|
5951
|
+
iconSizes: {
|
|
5952
|
+
type: Array,
|
|
5953
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
|
5954
|
+
}
|
|
5955
|
+
}, 'iconSize');
|
|
5956
|
+
function useIconSizes(props, fallback) {
|
|
5957
|
+
const iconSize = computed(() => {
|
|
5958
|
+
const iconSizeMap = new Map(props.iconSizes);
|
|
5959
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
|
5960
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
|
5961
|
+
});
|
|
5962
|
+
return {
|
|
5963
|
+
iconSize
|
|
5964
|
+
};
|
|
5965
|
+
}
|
|
5966
|
+
|
|
5867
5967
|
// Types
|
|
5868
5968
|
|
|
5869
5969
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
|
@@ -5903,6 +6003,7 @@ const makeVAlertProps = propsFactory({
|
|
|
5903
6003
|
...makeDensityProps(),
|
|
5904
6004
|
...makeDimensionProps(),
|
|
5905
6005
|
...makeElevationProps(),
|
|
6006
|
+
...makeIconSizeProps(),
|
|
5906
6007
|
...makeLocationProps(),
|
|
5907
6008
|
...makePositionProps(),
|
|
5908
6009
|
...makeRoundedProps(),
|
|
@@ -5930,6 +6031,9 @@ const VAlert = genericComponent()({
|
|
|
5930
6031
|
if (!props.type) return props.icon;
|
|
5931
6032
|
return props.icon ?? `$${props.type}`;
|
|
5932
6033
|
});
|
|
6034
|
+
const {
|
|
6035
|
+
iconSize
|
|
6036
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
|
5933
6037
|
const {
|
|
5934
6038
|
themeClasses
|
|
5935
6039
|
} = provideTheme(props);
|
|
@@ -5977,6 +6081,11 @@ const VAlert = genericComponent()({
|
|
|
5977
6081
|
const hasPrepend = !!(slots.prepend || icon.value);
|
|
5978
6082
|
const hasTitle = !!(slots.title || props.title);
|
|
5979
6083
|
const hasClose = !!(slots.close || props.closable);
|
|
6084
|
+
const iconProps = {
|
|
6085
|
+
density: props.density,
|
|
6086
|
+
icon: icon.value,
|
|
6087
|
+
size: iconSize.value
|
|
6088
|
+
};
|
|
5980
6089
|
return isActive.value && createVNode(props.tag, {
|
|
5981
6090
|
"class": ['v-alert', props.border && {
|
|
5982
6091
|
'v-alert--border': !!props.border,
|
|
@@ -5994,19 +6103,14 @@ const VAlert = genericComponent()({
|
|
|
5994
6103
|
}, null), hasPrepend && createVNode("div", {
|
|
5995
6104
|
"key": "prepend",
|
|
5996
6105
|
"class": "v-alert__prepend"
|
|
5997
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
|
5998
|
-
"key": "prepend-icon"
|
|
5999
|
-
|
|
6000
|
-
"icon": icon.value,
|
|
6001
|
-
"size": props.prominent ? 44 : 28
|
|
6002
|
-
}, null) : createVNode(VDefaultsProvider, {
|
|
6106
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
|
6107
|
+
"key": "prepend-icon"
|
|
6108
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
|
6003
6109
|
"key": "prepend-defaults",
|
|
6004
6110
|
"disabled": !icon.value,
|
|
6005
6111
|
"defaults": {
|
|
6006
6112
|
VIcon: {
|
|
6007
|
-
|
|
6008
|
-
icon: icon.value,
|
|
6009
|
-
size: props.prominent ? 44 : 28
|
|
6113
|
+
...iconProps
|
|
6010
6114
|
}
|
|
6011
6115
|
}
|
|
6012
6116
|
}, slots.prepend)]), createVNode("div", {
|
|
@@ -10164,7 +10268,7 @@ function connectedLocationStrategy(data, props, contentStyles) {
|
|
|
10164
10268
|
observe = false;
|
|
10165
10269
|
requestAnimationFrame(() => observe = true);
|
|
10166
10270
|
if (!data.target.value || !data.contentEl.value) return;
|
|
10167
|
-
if (Array.isArray(data.target.value) || data.target.value.offsetParent) {
|
|
10271
|
+
if (Array.isArray(data.target.value) || data.target.value.offsetParent || data.target.value.getClientRects().length) {
|
|
10168
10272
|
targetBox = getTargetBox(data.target.value);
|
|
10169
10273
|
} // Otherwise target element is hidden, use last known value
|
|
10170
10274
|
|
|
@@ -12352,7 +12456,12 @@ function useVirtual(props, items) {
|
|
|
12352
12456
|
}
|
|
12353
12457
|
function calculateOffset(index) {
|
|
12354
12458
|
index = clamp(index, 0, items.value.length - 1);
|
|
12355
|
-
|
|
12459
|
+
const whole = Math.floor(index);
|
|
12460
|
+
const fraction = index % 1;
|
|
12461
|
+
const next = whole + 1;
|
|
12462
|
+
const wholeOffset = offsets[whole] || 0;
|
|
12463
|
+
const nextOffset = offsets[next] || wholeOffset;
|
|
12464
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
|
12356
12465
|
}
|
|
12357
12466
|
function calculateIndex(scrollTop) {
|
|
12358
12467
|
return binaryClosest(offsets, scrollTop);
|
|
@@ -13502,6 +13611,11 @@ const VAutocomplete = genericComponent()({
|
|
|
13502
13611
|
menu.value = true;
|
|
13503
13612
|
}
|
|
13504
13613
|
});
|
|
13614
|
+
watch(model, value => {
|
|
13615
|
+
if (!props.multiple && !hasSelectionSlot.value) {
|
|
13616
|
+
search.value = value[0]?.title ?? '';
|
|
13617
|
+
}
|
|
13618
|
+
});
|
|
13505
13619
|
useRender(() => {
|
|
13506
13620
|
const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
|
|
13507
13621
|
const isDirty = model.value.length > 0;
|
|
@@ -20329,7 +20443,6 @@ const VDataTableHeaders = genericComponent()({
|
|
|
20329
20443
|
});
|
|
20330
20444
|
};
|
|
20331
20445
|
const VDataTableMobileHeaderCell = () => {
|
|
20332
|
-
const headerProps = mergeProps(props.headerProps ?? {} ?? {});
|
|
20333
20446
|
const displayItems = computed(() => {
|
|
20334
20447
|
return columns.value.filter(column => column?.sortable && !props.disableSort);
|
|
20335
20448
|
});
|
|
@@ -20342,7 +20455,7 @@ const VDataTableHeaders = genericComponent()({
|
|
|
20342
20455
|
"tag": "th",
|
|
20343
20456
|
"class": [...headerCellClasses.value],
|
|
20344
20457
|
"colspan": headers.value.length + 1
|
|
20345
|
-
}, headerProps), {
|
|
20458
|
+
}, props.headerProps), {
|
|
20346
20459
|
default: () => [createVNode("div", {
|
|
20347
20460
|
"class": "v-data-table-header__content"
|
|
20348
20461
|
}, [createVNode(VSelect, {
|
|
@@ -23265,6 +23378,7 @@ const VFileInput = genericComponent()({
|
|
|
23265
23378
|
const inputRef = ref();
|
|
23266
23379
|
const isActive = toRef(() => isFocused.value || props.active);
|
|
23267
23380
|
const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));
|
|
23381
|
+
const isDragging = shallowRef(false);
|
|
23268
23382
|
function onFocus() {
|
|
23269
23383
|
if (inputRef.value !== document.activeElement) {
|
|
23270
23384
|
inputRef.value?.focus();
|
|
@@ -23291,11 +23405,26 @@ const VFileInput = genericComponent()({
|
|
|
23291
23405
|
}
|
|
23292
23406
|
function onDragover(e) {
|
|
23293
23407
|
e.preventDefault();
|
|
23408
|
+
e.stopImmediatePropagation();
|
|
23409
|
+
isDragging.value = true;
|
|
23410
|
+
}
|
|
23411
|
+
function onDragleave(e) {
|
|
23412
|
+
e.preventDefault();
|
|
23413
|
+
isDragging.value = false;
|
|
23294
23414
|
}
|
|
23295
23415
|
function onDrop(e) {
|
|
23296
23416
|
e.preventDefault();
|
|
23297
|
-
|
|
23298
|
-
|
|
23417
|
+
e.stopImmediatePropagation();
|
|
23418
|
+
isDragging.value = false;
|
|
23419
|
+
if (!e.dataTransfer?.files?.length || !inputRef.value) return;
|
|
23420
|
+
const dataTransfer = new DataTransfer();
|
|
23421
|
+
for (const file of e.dataTransfer.files) {
|
|
23422
|
+
dataTransfer.items.add(file);
|
|
23423
|
+
}
|
|
23424
|
+
inputRef.value.files = dataTransfer.files;
|
|
23425
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
|
23426
|
+
bubbles: true
|
|
23427
|
+
}));
|
|
23299
23428
|
}
|
|
23300
23429
|
watch(model, newValue => {
|
|
23301
23430
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
|
@@ -23317,6 +23446,7 @@ const VFileInput = genericComponent()({
|
|
|
23317
23446
|
"modelValue": props.multiple ? model.value : model.value[0],
|
|
23318
23447
|
"class": ['v-file-input', {
|
|
23319
23448
|
'v-file-input--chips': !!props.chips,
|
|
23449
|
+
'v-file-input--dragging': isDragging.value,
|
|
23320
23450
|
'v-file-input--hide': props.hideInput,
|
|
23321
23451
|
'v-input--plain-underlined': isPlainOrUnderlined.value
|
|
23322
23452
|
}, props.class],
|
|
@@ -23378,6 +23508,7 @@ const VFileInput = genericComponent()({
|
|
|
23378
23508
|
const target = e.target;
|
|
23379
23509
|
model.value = [...(target.files ?? [])];
|
|
23380
23510
|
},
|
|
23511
|
+
"onDragleave": onDragleave,
|
|
23381
23512
|
"onFocus": onFocus,
|
|
23382
23513
|
"onBlur": blur
|
|
23383
23514
|
}, slotProps, inputAttrs), null), createVNode("div", {
|
|
@@ -29430,43 +29561,31 @@ const VFileUpload = genericComponent()({
|
|
|
29430
29561
|
densityClasses
|
|
29431
29562
|
} = useDensity(props);
|
|
29432
29563
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
|
|
29433
|
-
const
|
|
29564
|
+
const isDragging = shallowRef(false);
|
|
29434
29565
|
const vSheetRef = ref(null);
|
|
29435
29566
|
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) {
|
|
29567
|
+
function onDragover(e) {
|
|
29445
29568
|
e.preventDefault();
|
|
29446
29569
|
e.stopImmediatePropagation();
|
|
29447
|
-
|
|
29570
|
+
isDragging.value = true;
|
|
29448
29571
|
}
|
|
29449
|
-
function
|
|
29572
|
+
function onDragleave(e) {
|
|
29450
29573
|
e.preventDefault();
|
|
29451
|
-
|
|
29574
|
+
isDragging.value = false;
|
|
29452
29575
|
}
|
|
29453
29576
|
function onDrop(e) {
|
|
29454
29577
|
e.preventDefault();
|
|
29455
29578
|
e.stopImmediatePropagation();
|
|
29456
|
-
|
|
29457
|
-
|
|
29458
|
-
|
|
29459
|
-
|
|
29460
|
-
|
|
29461
|
-
|
|
29462
|
-
|
|
29463
|
-
|
|
29464
|
-
|
|
29465
|
-
|
|
29466
|
-
array.push(file);
|
|
29467
|
-
}
|
|
29468
|
-
}
|
|
29469
|
-
model.value = array;
|
|
29579
|
+
isDragging.value = false;
|
|
29580
|
+
if (!e.dataTransfer?.files?.length || !inputRef.value) return;
|
|
29581
|
+
const dataTransfer = new DataTransfer();
|
|
29582
|
+
for (const file of e.dataTransfer.files) {
|
|
29583
|
+
dataTransfer.items.add(file);
|
|
29584
|
+
}
|
|
29585
|
+
inputRef.value.files = dataTransfer.files;
|
|
29586
|
+
inputRef.value.dispatchEvent(new Event('change', {
|
|
29587
|
+
bubbles: true
|
|
29588
|
+
}));
|
|
29470
29589
|
}
|
|
29471
29590
|
function onClick() {
|
|
29472
29591
|
inputRef.value?.click();
|
|
@@ -29502,11 +29621,11 @@ const VFileUpload = genericComponent()({
|
|
|
29502
29621
|
"class": ['v-file-upload', {
|
|
29503
29622
|
'v-file-upload--clickable': !hasBrowse,
|
|
29504
29623
|
'v-file-upload--disabled': props.disabled,
|
|
29505
|
-
'v-file-upload--dragging':
|
|
29624
|
+
'v-file-upload--dragging': isDragging.value
|
|
29506
29625
|
}, densityClasses.value, props.class],
|
|
29507
29626
|
"style": [props.style],
|
|
29508
|
-
"onDragleave":
|
|
29509
|
-
"onDragover":
|
|
29627
|
+
"onDragleave": onDragleave,
|
|
29628
|
+
"onDragover": onDragover,
|
|
29510
29629
|
"onDrop": onDrop,
|
|
29511
29630
|
"onClick": !hasBrowse ? onClick : undefined
|
|
29512
29631
|
}, rootAttrs), {
|
|
@@ -29557,7 +29676,7 @@ const VFileUpload = genericComponent()({
|
|
|
29557
29676
|
})]), props.subtitle && createVNode("div", {
|
|
29558
29677
|
"class": "v-file-upload-subtitle"
|
|
29559
29678
|
}, [props.subtitle])]), createVNode(VOverlay, {
|
|
29560
|
-
"model-value":
|
|
29679
|
+
"model-value": isDragging.value,
|
|
29561
29680
|
"contained": true,
|
|
29562
29681
|
"scrim": props.scrim
|
|
29563
29682
|
}, null), slots.input?.({
|
|
@@ -29613,11 +29732,6 @@ const makeVIconBtnProps = propsFactory({
|
|
|
29613
29732
|
hideOverlay: Boolean,
|
|
29614
29733
|
icon: [String, Function, Object],
|
|
29615
29734
|
iconColor: String,
|
|
29616
|
-
iconSize: [Number, String],
|
|
29617
|
-
iconSizes: {
|
|
29618
|
-
type: Array,
|
|
29619
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
|
29620
|
-
},
|
|
29621
29735
|
loading: Boolean,
|
|
29622
29736
|
opacity: [Number, String],
|
|
29623
29737
|
readonly: Boolean,
|
|
@@ -29637,6 +29751,7 @@ const makeVIconBtnProps = propsFactory({
|
|
|
29637
29751
|
...makeBorderProps(),
|
|
29638
29752
|
...makeComponentProps(),
|
|
29639
29753
|
...makeElevationProps(),
|
|
29754
|
+
...makeIconSizeProps(),
|
|
29640
29755
|
...makeRoundedProps(),
|
|
29641
29756
|
...makeTagProps({
|
|
29642
29757
|
tag: 'button'
|
|
@@ -29691,7 +29806,6 @@ const VIconBtn = genericComponent()({
|
|
|
29691
29806
|
})()
|
|
29692
29807
|
}));
|
|
29693
29808
|
const btnSizeMap = new Map(props.sizes);
|
|
29694
|
-
const iconSizeMap = new Map(props.iconSizes);
|
|
29695
29809
|
function onClick() {
|
|
29696
29810
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
|
29697
29811
|
isActive.value = !isActive.value;
|
|
@@ -29703,12 +29817,12 @@ const VIconBtn = genericComponent()({
|
|
|
29703
29817
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
|
29704
29818
|
const btnHeight = props.height ?? btnSize;
|
|
29705
29819
|
const btnWidth = props.width ?? btnSize;
|
|
29706
|
-
const
|
|
29707
|
-
|
|
29708
|
-
|
|
29820
|
+
const {
|
|
29821
|
+
iconSize
|
|
29822
|
+
} = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
|
|
29709
29823
|
const iconProps = {
|
|
29710
29824
|
icon,
|
|
29711
|
-
size: iconSize,
|
|
29825
|
+
size: iconSize.value,
|
|
29712
29826
|
iconColor: props.iconColor,
|
|
29713
29827
|
opacity: props.opacity
|
|
29714
29828
|
};
|
|
@@ -29751,7 +29865,7 @@ const VIconBtn = genericComponent()({
|
|
|
29751
29865
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
|
29752
29866
|
"indeterminate": "disable-shrink",
|
|
29753
29867
|
"width": "2",
|
|
29754
|
-
"size": iconSize
|
|
29868
|
+
"size": iconSize.value
|
|
29755
29869
|
}, null)])]
|
|
29756
29870
|
});
|
|
29757
29871
|
});
|
|
@@ -30255,8 +30369,8 @@ const VTimePickerClock = genericComponent()({
|
|
|
30255
30369
|
y
|
|
30256
30370
|
} = getPosition(i);
|
|
30257
30371
|
return {
|
|
30258
|
-
left: `${50 + x * 50}%`,
|
|
30259
|
-
top: `${50 + y * 50}%`
|
|
30372
|
+
left: `${Math.round(50 + x * 50)}%`,
|
|
30373
|
+
top: `${Math.round(50 + y * 50)}%`
|
|
30260
30374
|
};
|
|
30261
30375
|
}
|
|
30262
30376
|
function euclidean(p0, p1) {
|
|
@@ -31660,7 +31774,7 @@ function createVuetify$1() {
|
|
|
31660
31774
|
};
|
|
31661
31775
|
});
|
|
31662
31776
|
}
|
|
31663
|
-
const version$1 = "3.8.
|
|
31777
|
+
const version$1 = "3.8.4-dev.2025-05-13";
|
|
31664
31778
|
createVuetify$1.version = version$1;
|
|
31665
31779
|
|
|
31666
31780
|
// Vue's inject() can only be used in setup
|
|
@@ -31958,7 +32072,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
31958
32072
|
|
|
31959
32073
|
/* eslint-disable local-rules/sort-imports */
|
|
31960
32074
|
|
|
31961
|
-
const version = "3.8.
|
|
32075
|
+
const version = "3.8.4-dev.2025-05-13";
|
|
31962
32076
|
|
|
31963
32077
|
/* eslint-disable local-rules/sort-imports */
|
|
31964
32078
|
|