@vuetify/nightly 3.8.5-master.2025-05-20 → 3.8.6-dev.2025-05-21
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 +21 -14
- package/dist/json/attributes.json +1331 -1311
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +5 -0
- package/dist/json/web-types.json +2610 -2471
- package/dist/vuetify-labs.cjs +288 -117
- package/dist/vuetify-labs.css +3866 -3838
- package/dist/vuetify-labs.d.ts +1490 -1352
- package/dist/vuetify-labs.esm.js +289 -118
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +288 -117
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +282 -106
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3130 -3102
- package/dist/vuetify.d.ts +659 -519
- package/dist/vuetify.esm.js +283 -107
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +282 -106
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1188 -1178
- 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 +120 -96
- package/lib/components/VAutocomplete/VAutocomplete.js +18 -1
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- 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 +120 -96
- package/lib/components/VCombobox/VCombobox.js +19 -1
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VField/VField.d.ts +3 -3
- package/lib/components/VFileInput/VFileInput.d.ts +15 -15
- package/lib/components/VInput/VInput.d.ts +4 -4
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +103 -89
- package/lib/components/VNumberInput/VNumberInput.js +19 -4
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +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 +120 -96
- package/lib/components/VSelect/VSelect.js +18 -1
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSwitch/VSwitch.d.ts +3 -3
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/composables/calendar.d.ts +1 -0
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/index.d.ts +1 -0
- package/lib/composables/date/index.js +1 -0
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +3 -0
- package/lib/composables/filter.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.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +74 -69
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +87 -87
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- 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/util/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.js.map +1 -1
- package/package.json +3 -1
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.
|
2
|
+
* Vuetify v3.8.6-dev.2025-05-21
|
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,
|
@@ -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
|
@@ -5865,6 +5940,31 @@ const VAppBarTitle = genericComponent()({
|
|
5865
5940
|
// Utilities
|
5866
5941
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
5867
5942
|
|
5943
|
+
// Utilities
|
5944
|
+
|
5945
|
+
// Types
|
5946
|
+
|
5947
|
+
// Types
|
5948
|
+
|
5949
|
+
// Composables
|
5950
|
+
const makeIconSizeProps = propsFactory({
|
5951
|
+
iconSize: [Number, String],
|
5952
|
+
iconSizes: {
|
5953
|
+
type: Array,
|
5954
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
5955
|
+
}
|
5956
|
+
}, 'iconSize');
|
5957
|
+
function useIconSizes(props, fallback) {
|
5958
|
+
const iconSize = computed(() => {
|
5959
|
+
const iconSizeMap = new Map(props.iconSizes);
|
5960
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
5961
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
5962
|
+
});
|
5963
|
+
return {
|
5964
|
+
iconSize
|
5965
|
+
};
|
5966
|
+
}
|
5967
|
+
|
5868
5968
|
// Types
|
5869
5969
|
|
5870
5970
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -5904,6 +6004,7 @@ const makeVAlertProps = propsFactory({
|
|
5904
6004
|
...makeDensityProps(),
|
5905
6005
|
...makeDimensionProps(),
|
5906
6006
|
...makeElevationProps(),
|
6007
|
+
...makeIconSizeProps(),
|
5907
6008
|
...makeLocationProps(),
|
5908
6009
|
...makePositionProps(),
|
5909
6010
|
...makeRoundedProps(),
|
@@ -5931,6 +6032,9 @@ const VAlert = genericComponent()({
|
|
5931
6032
|
if (!props.type) return props.icon;
|
5932
6033
|
return props.icon ?? `$${props.type}`;
|
5933
6034
|
});
|
6035
|
+
const {
|
6036
|
+
iconSize
|
6037
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
5934
6038
|
const {
|
5935
6039
|
themeClasses
|
5936
6040
|
} = provideTheme(props);
|
@@ -5978,6 +6082,11 @@ const VAlert = genericComponent()({
|
|
5978
6082
|
const hasPrepend = !!(slots.prepend || icon.value);
|
5979
6083
|
const hasTitle = !!(slots.title || props.title);
|
5980
6084
|
const hasClose = !!(slots.close || props.closable);
|
6085
|
+
const iconProps = {
|
6086
|
+
density: props.density,
|
6087
|
+
icon: icon.value,
|
6088
|
+
size: iconSize.value
|
6089
|
+
};
|
5981
6090
|
return isActive.value && createVNode(props.tag, {
|
5982
6091
|
"class": ['v-alert', props.border && {
|
5983
6092
|
'v-alert--border': !!props.border,
|
@@ -5995,19 +6104,14 @@ const VAlert = genericComponent()({
|
|
5995
6104
|
}, null), hasPrepend && createVNode("div", {
|
5996
6105
|
"key": "prepend",
|
5997
6106
|
"class": "v-alert__prepend"
|
5998
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
5999
|
-
"key": "prepend-icon"
|
6000
|
-
|
6001
|
-
"icon": icon.value,
|
6002
|
-
"size": props.prominent ? 44 : 28
|
6003
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6107
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6108
|
+
"key": "prepend-icon"
|
6109
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6004
6110
|
"key": "prepend-defaults",
|
6005
6111
|
"disabled": !icon.value,
|
6006
6112
|
"defaults": {
|
6007
6113
|
VIcon: {
|
6008
|
-
|
6009
|
-
icon: icon.value,
|
6010
|
-
size: props.prominent ? 44 : 28
|
6114
|
+
...iconProps
|
6011
6115
|
}
|
6012
6116
|
}
|
6013
6117
|
}, slots.prepend)]), createVNode("div", {
|
@@ -8205,6 +8309,68 @@ const VChip = genericComponent()({
|
|
8205
8309
|
}
|
8206
8310
|
});
|
8207
8311
|
|
8312
|
+
const makeVDividerProps = propsFactory({
|
8313
|
+
color: String,
|
8314
|
+
inset: Boolean,
|
8315
|
+
length: [Number, String],
|
8316
|
+
opacity: [Number, String],
|
8317
|
+
thickness: [Number, String],
|
8318
|
+
vertical: Boolean,
|
8319
|
+
...makeComponentProps(),
|
8320
|
+
...makeThemeProps()
|
8321
|
+
}, 'VDivider');
|
8322
|
+
const VDivider = genericComponent()({
|
8323
|
+
name: 'VDivider',
|
8324
|
+
props: makeVDividerProps(),
|
8325
|
+
setup(props, _ref) {
|
8326
|
+
let {
|
8327
|
+
attrs,
|
8328
|
+
slots
|
8329
|
+
} = _ref;
|
8330
|
+
const {
|
8331
|
+
themeClasses
|
8332
|
+
} = provideTheme(props);
|
8333
|
+
const {
|
8334
|
+
textColorClasses,
|
8335
|
+
textColorStyles
|
8336
|
+
} = useTextColor(() => props.color);
|
8337
|
+
const dividerStyles = computed(() => {
|
8338
|
+
const styles = {};
|
8339
|
+
if (props.length) {
|
8340
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8341
|
+
}
|
8342
|
+
if (props.thickness) {
|
8343
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8344
|
+
}
|
8345
|
+
return styles;
|
8346
|
+
});
|
8347
|
+
useRender(() => {
|
8348
|
+
const divider = createVNode("hr", {
|
8349
|
+
"class": [{
|
8350
|
+
'v-divider': true,
|
8351
|
+
'v-divider--inset': props.inset,
|
8352
|
+
'v-divider--vertical': props.vertical
|
8353
|
+
}, themeClasses.value, textColorClasses.value, props.class],
|
8354
|
+
"style": [dividerStyles.value, textColorStyles.value, {
|
8355
|
+
'--v-border-opacity': props.opacity
|
8356
|
+
}, props.style],
|
8357
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8358
|
+
"role": `${attrs.role || 'separator'}`
|
8359
|
+
}, null);
|
8360
|
+
if (!slots.default) return divider;
|
8361
|
+
return createVNode("div", {
|
8362
|
+
"class": ['v-divider__wrapper', {
|
8363
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8364
|
+
'v-divider__wrapper--inset': props.inset
|
8365
|
+
}]
|
8366
|
+
}, [divider, createVNode("div", {
|
8367
|
+
"class": "v-divider__content"
|
8368
|
+
}, [slots.default()]), divider]);
|
8369
|
+
});
|
8370
|
+
return {};
|
8371
|
+
}
|
8372
|
+
});
|
8373
|
+
|
8208
8374
|
// Utilities
|
8209
8375
|
|
8210
8376
|
// List
|
@@ -9356,68 +9522,6 @@ const VListSubheader = genericComponent()({
|
|
9356
9522
|
}
|
9357
9523
|
});
|
9358
9524
|
|
9359
|
-
const makeVDividerProps = propsFactory({
|
9360
|
-
color: String,
|
9361
|
-
inset: Boolean,
|
9362
|
-
length: [Number, String],
|
9363
|
-
opacity: [Number, String],
|
9364
|
-
thickness: [Number, String],
|
9365
|
-
vertical: Boolean,
|
9366
|
-
...makeComponentProps(),
|
9367
|
-
...makeThemeProps()
|
9368
|
-
}, 'VDivider');
|
9369
|
-
const VDivider = genericComponent()({
|
9370
|
-
name: 'VDivider',
|
9371
|
-
props: makeVDividerProps(),
|
9372
|
-
setup(props, _ref) {
|
9373
|
-
let {
|
9374
|
-
attrs,
|
9375
|
-
slots
|
9376
|
-
} = _ref;
|
9377
|
-
const {
|
9378
|
-
themeClasses
|
9379
|
-
} = provideTheme(props);
|
9380
|
-
const {
|
9381
|
-
textColorClasses,
|
9382
|
-
textColorStyles
|
9383
|
-
} = useTextColor(() => props.color);
|
9384
|
-
const dividerStyles = computed(() => {
|
9385
|
-
const styles = {};
|
9386
|
-
if (props.length) {
|
9387
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9388
|
-
}
|
9389
|
-
if (props.thickness) {
|
9390
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9391
|
-
}
|
9392
|
-
return styles;
|
9393
|
-
});
|
9394
|
-
useRender(() => {
|
9395
|
-
const divider = createVNode("hr", {
|
9396
|
-
"class": [{
|
9397
|
-
'v-divider': true,
|
9398
|
-
'v-divider--inset': props.inset,
|
9399
|
-
'v-divider--vertical': props.vertical
|
9400
|
-
}, themeClasses.value, textColorClasses.value, props.class],
|
9401
|
-
"style": [dividerStyles.value, textColorStyles.value, {
|
9402
|
-
'--v-border-opacity': props.opacity
|
9403
|
-
}, props.style],
|
9404
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9405
|
-
"role": `${attrs.role || 'separator'}`
|
9406
|
-
}, null);
|
9407
|
-
if (!slots.default) return divider;
|
9408
|
-
return createVNode("div", {
|
9409
|
-
"class": ['v-divider__wrapper', {
|
9410
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9411
|
-
'v-divider__wrapper--inset': props.inset
|
9412
|
-
}]
|
9413
|
-
}, [divider, createVNode("div", {
|
9414
|
-
"class": "v-divider__content"
|
9415
|
-
}, [slots.default()]), divider]);
|
9416
|
-
});
|
9417
|
-
return {};
|
9418
|
-
}
|
9419
|
-
});
|
9420
|
-
|
9421
9525
|
// Types
|
9422
9526
|
|
9423
9527
|
const makeVListChildrenProps = propsFactory({
|
@@ -12335,7 +12439,12 @@ function useVirtual(props, items) {
|
|
12335
12439
|
}
|
12336
12440
|
function calculateOffset(index) {
|
12337
12441
|
index = clamp(index, 0, items.value.length - 1);
|
12338
|
-
|
12442
|
+
const whole = Math.floor(index);
|
12443
|
+
const fraction = index % 1;
|
12444
|
+
const next = whole + 1;
|
12445
|
+
const wholeOffset = offsets[whole] || 0;
|
12446
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12447
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12339
12448
|
}
|
12340
12449
|
function calculateIndex(scrollTop) {
|
12341
12450
|
return binaryClosest(offsets, scrollTop);
|
@@ -12966,6 +13075,22 @@ const VSelect = genericComponent()({
|
|
12966
13075
|
key: item.value,
|
12967
13076
|
onClick: () => select(item, null)
|
12968
13077
|
});
|
13078
|
+
if (item.raw.type === 'divider') {
|
13079
|
+
return slots.divider?.({
|
13080
|
+
props: item.raw,
|
13081
|
+
index
|
13082
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13083
|
+
"key": `divider-${index}`
|
13084
|
+
}), null);
|
13085
|
+
}
|
13086
|
+
if (item.raw.type === 'subheader') {
|
13087
|
+
return slots.subheader?.({
|
13088
|
+
props: item.raw,
|
13089
|
+
index
|
13090
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13091
|
+
"key": `subheader-${index}`
|
13092
|
+
}), null);
|
13093
|
+
}
|
12969
13094
|
return slots.item?.({
|
12970
13095
|
item,
|
12971
13096
|
index,
|
@@ -13126,6 +13251,9 @@ function filterItems(items, query, options) {
|
|
13126
13251
|
let match = -1;
|
13127
13252
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13128
13253
|
if (typeof item === 'object') {
|
13254
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13255
|
+
continue;
|
13256
|
+
}
|
13129
13257
|
const filterKeys = keys || Object.keys(transformed);
|
13130
13258
|
for (const key of filterKeys) {
|
13131
13259
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13564,6 +13692,22 @@ const VAutocomplete = genericComponent()({
|
|
13564
13692
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13565
13693
|
onClick: () => select(item, null)
|
13566
13694
|
});
|
13695
|
+
if (item.raw.type === 'divider') {
|
13696
|
+
return slots.divider?.({
|
13697
|
+
props: item.raw,
|
13698
|
+
index
|
13699
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13700
|
+
"key": `divider-${index}`
|
13701
|
+
}), null);
|
13702
|
+
}
|
13703
|
+
if (item.raw.type === 'subheader') {
|
13704
|
+
return slots.subheader?.({
|
13705
|
+
props: item.raw,
|
13706
|
+
index
|
13707
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13708
|
+
"key": `subheader-${index}`
|
13709
|
+
}), null);
|
13710
|
+
}
|
13567
13711
|
return slots.item?.({
|
13568
13712
|
item,
|
13569
13713
|
index,
|
@@ -17974,6 +18118,7 @@ const VCombobox = genericComponent()({
|
|
17974
18118
|
_search.value = val ?? '';
|
17975
18119
|
if (!props.multiple && !hasSelectionSlot.value) {
|
17976
18120
|
model.value = [transformItem$3(props, val)];
|
18121
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
17977
18122
|
}
|
17978
18123
|
if (val && props.multiple && props.delimiters?.length) {
|
17979
18124
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18290,6 +18435,22 @@ const VCombobox = genericComponent()({
|
|
18290
18435
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18291
18436
|
onClick: () => select(item, null)
|
18292
18437
|
});
|
18438
|
+
if (item.raw.type === 'divider') {
|
18439
|
+
return slots.divider?.({
|
18440
|
+
props: item.raw,
|
18441
|
+
index
|
18442
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18443
|
+
"key": `divider-${index}`
|
18444
|
+
}), null);
|
18445
|
+
}
|
18446
|
+
if (item.raw.type === 'subheader') {
|
18447
|
+
return slots.subheader?.({
|
18448
|
+
props: item.raw,
|
18449
|
+
index
|
18450
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18451
|
+
"key": `subheader-${index}`
|
18452
|
+
}), null);
|
18453
|
+
}
|
18293
18454
|
return slots.item?.({
|
18294
18455
|
item,
|
18295
18456
|
index,
|
@@ -24713,6 +24874,10 @@ const makeVNumberInputProps = propsFactory({
|
|
24713
24874
|
type: Number,
|
24714
24875
|
default: 0
|
24715
24876
|
},
|
24877
|
+
minFractionDigits: {
|
24878
|
+
type: Number,
|
24879
|
+
default: null
|
24880
|
+
},
|
24716
24881
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24717
24882
|
}, 'VNumberInput');
|
24718
24883
|
const VNumberInput = genericComponent()({
|
@@ -24743,9 +24908,19 @@ const VNumberInput = genericComponent()({
|
|
24743
24908
|
} = useFocus(props);
|
24744
24909
|
function correctPrecision(val) {
|
24745
24910
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
24746
|
-
|
24747
|
-
|
24748
|
-
|
24911
|
+
if (precision == null) {
|
24912
|
+
return String(val);
|
24913
|
+
}
|
24914
|
+
let fixed = val.toFixed(precision);
|
24915
|
+
if (isFocused.value) {
|
24916
|
+
return Number(fixed).toString(); // trim zeros
|
24917
|
+
}
|
24918
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
24919
|
+
const trimLimit = precision - props.minFractionDigits;
|
24920
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
24921
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
24922
|
+
}
|
24923
|
+
return fixed;
|
24749
24924
|
}
|
24750
24925
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
24751
24926
|
const _inputText = shallowRef(null);
|
@@ -24798,6 +24973,7 @@ const VNumberInput = genericComponent()({
|
|
24798
24973
|
}
|
24799
24974
|
};
|
24800
24975
|
watch(() => props.precision, () => formatInputValue());
|
24976
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
24801
24977
|
onMounted(() => {
|
24802
24978
|
clampModel();
|
24803
24979
|
});
|
@@ -24899,7 +25075,7 @@ const VNumberInput = genericComponent()({
|
|
24899
25075
|
inputText.value = null;
|
24900
25076
|
return;
|
24901
25077
|
}
|
24902
|
-
inputText.value =
|
25078
|
+
inputText.value = correctPrecision(model.value);
|
24903
25079
|
}
|
24904
25080
|
function trimDecimalZeros() {
|
24905
25081
|
if (controlsDisabled.value) return;
|
@@ -29866,11 +30042,6 @@ const makeVIconBtnProps = propsFactory({
|
|
29866
30042
|
hideOverlay: Boolean,
|
29867
30043
|
icon: [String, Function, Object],
|
29868
30044
|
iconColor: String,
|
29869
|
-
iconSize: [Number, String],
|
29870
|
-
iconSizes: {
|
29871
|
-
type: Array,
|
29872
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
29873
|
-
},
|
29874
30045
|
loading: Boolean,
|
29875
30046
|
opacity: [Number, String],
|
29876
30047
|
readonly: Boolean,
|
@@ -29890,6 +30061,7 @@ const makeVIconBtnProps = propsFactory({
|
|
29890
30061
|
...makeBorderProps(),
|
29891
30062
|
...makeComponentProps(),
|
29892
30063
|
...makeElevationProps(),
|
30064
|
+
...makeIconSizeProps(),
|
29893
30065
|
...makeRoundedProps(),
|
29894
30066
|
...makeTagProps({
|
29895
30067
|
tag: 'button'
|
@@ -29944,7 +30116,6 @@ const VIconBtn = genericComponent()({
|
|
29944
30116
|
})()
|
29945
30117
|
}));
|
29946
30118
|
const btnSizeMap = new Map(props.sizes);
|
29947
|
-
const iconSizeMap = new Map(props.iconSizes);
|
29948
30119
|
function onClick() {
|
29949
30120
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
29950
30121
|
isActive.value = !isActive.value;
|
@@ -29956,12 +30127,12 @@ const VIconBtn = genericComponent()({
|
|
29956
30127
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
29957
30128
|
const btnHeight = props.height ?? btnSize;
|
29958
30129
|
const btnWidth = props.width ?? btnSize;
|
29959
|
-
const
|
29960
|
-
|
29961
|
-
|
30130
|
+
const {
|
30131
|
+
iconSize
|
30132
|
+
} = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
|
29962
30133
|
const iconProps = {
|
29963
30134
|
icon,
|
29964
|
-
size: iconSize,
|
30135
|
+
size: iconSize.value,
|
29965
30136
|
iconColor: props.iconColor,
|
29966
30137
|
opacity: props.opacity
|
29967
30138
|
};
|
@@ -30004,7 +30175,7 @@ const VIconBtn = genericComponent()({
|
|
30004
30175
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
30005
30176
|
"indeterminate": "disable-shrink",
|
30006
30177
|
"width": "2",
|
30007
|
-
"size": iconSize
|
30178
|
+
"size": iconSize.value
|
30008
30179
|
}, null)])]
|
30009
30180
|
});
|
30010
30181
|
});
|
@@ -31914,7 +32085,7 @@ function createVuetify$1() {
|
|
31914
32085
|
};
|
31915
32086
|
});
|
31916
32087
|
}
|
31917
|
-
const version$1 = "3.8.
|
32088
|
+
const version$1 = "3.8.6-dev.2025-05-21";
|
31918
32089
|
createVuetify$1.version = version$1;
|
31919
32090
|
|
31920
32091
|
// Vue's inject() can only be used in setup
|
@@ -32212,7 +32383,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
32212
32383
|
|
32213
32384
|
/* eslint-disable local-rules/sort-imports */
|
32214
32385
|
|
32215
|
-
const version = "3.8.
|
32386
|
+
const version = "3.8.6-dev.2025-05-21";
|
32216
32387
|
|
32217
32388
|
/* eslint-disable local-rules/sort-imports */
|
32218
32389
|
|