@vuetify/nightly 3.8.6-master.2025-05-26 → 3.8.7-dev.2025-05-27
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 +24 -24
- package/dist/json/attributes.json +3294 -3218
- package/dist/json/importMap-labs.json +26 -26
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +19 -0
- package/dist/json/web-types.json +5776 -5504
- package/dist/vuetify-labs.cjs +305 -128
- package/dist/vuetify-labs.css +5202 -5174
- package/dist/vuetify-labs.d.ts +1580 -1351
- package/dist/vuetify-labs.esm.js +306 -129
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +305 -128
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +299 -117
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4512 -4484
- package/dist/vuetify.d.ts +739 -518
- package/dist/vuetify.esm.js +300 -118
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +299 -117
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1194 -1184
- 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 +15 -10
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +7 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +133 -96
- package/lib/components/VAutocomplete/VAutocomplete.js +19 -2
- 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/VChipGroup/VChipGroup.d.ts +10 -0
- package/lib/components/VCombobox/VCombobox.d.ts +133 -96
- package/lib/components/VCombobox/VCombobox.js +20 -2
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.d.ts +18 -0
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +13 -0
- package/lib/components/VDataTable/VDataTableHeaders.js +4 -2
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.d.ts +13 -0
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +13 -0
- package/lib/components/VDatePicker/VDatePicker.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.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/VOtpInput/VOtpInput.js +2 -1
- package/lib/components/VOtpInput/VOtpInput.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 +138 -96
- package/lib/components/VSelect/VSelect.js +21 -3
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +10 -0
- package/lib/components/VSlideGroup/VSlideGroup.js +2 -1
- package/lib/components/VSlideGroup/VSlideGroup.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/VTabs/VTabs.d.ts +10 -0
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/composables/calendar.d.ts +6 -0
- package/lib/composables/calendar.js +2 -1
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +1 -1
- package/lib/composables/date/DateAdapter.js.map +1 -1
- package/lib/composables/date/adapters/vuetify.d.ts +1 -1
- package/lib/composables/date/adapters/vuetify.js +4 -4
- package/lib/composables/date/adapters/vuetify.js.map +1 -1
- package/lib/composables/date/date.d.ts +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.d.ts +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +73 -68
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +10 -0
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +97 -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/labs/entry-bundler.d.ts +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.7-dev.2025-05-27
|
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, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, 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, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, 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"); }
|
@@ -2337,6 +2338,7 @@ const makeThemeProps = propsFactory({
|
|
2337
2338
|
function genDefaults$2() {
|
2338
2339
|
return {
|
2339
2340
|
defaultTheme: 'light',
|
2341
|
+
prefix: 'v-',
|
2340
2342
|
variations: {
|
2341
2343
|
colors: [],
|
2342
2344
|
lighten: 0,
|
@@ -2418,7 +2420,10 @@ function genDefaults$2() {
|
|
2418
2420
|
}
|
2419
2421
|
}
|
2420
2422
|
},
|
2421
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2423
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2424
|
+
scoped: false,
|
2425
|
+
unimportant: false,
|
2426
|
+
utilities: true
|
2422
2427
|
};
|
2423
2428
|
}
|
2424
2429
|
function parseThemeOptions() {
|
@@ -2441,21 +2446,21 @@ function parseThemeOptions() {
|
|
2441
2446
|
function createCssClass(lines, selector, content, scope) {
|
2442
2447
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2443
2448
|
}
|
2444
|
-
function genCssVariables(theme) {
|
2449
|
+
function genCssVariables(theme, prefix) {
|
2445
2450
|
const lightOverlay = theme.dark ? 2 : 1;
|
2446
2451
|
const darkOverlay = theme.dark ? 1 : 2;
|
2447
2452
|
const variables = [];
|
2448
2453
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2449
2454
|
const rgb = parseColor(value);
|
2450
|
-
variables.push(
|
2455
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2451
2456
|
if (!key.startsWith('on-')) {
|
2452
|
-
variables.push(
|
2457
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2453
2458
|
}
|
2454
2459
|
}
|
2455
2460
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2456
2461
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2457
2462
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2458
|
-
variables.push(
|
2463
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2459
2464
|
}
|
2460
2465
|
return variables;
|
2461
2466
|
}
|
@@ -2499,7 +2504,8 @@ function getScopedSelector(selector, scope) {
|
|
2499
2504
|
const scopeSelector = `:where(${scope})`;
|
2500
2505
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2501
2506
|
}
|
2502
|
-
function upsertStyles(
|
2507
|
+
function upsertStyles(id, cspNonce, styles) {
|
2508
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2503
2509
|
if (!styleEl) return;
|
2504
2510
|
styleEl.innerHTML = styles;
|
2505
2511
|
}
|
@@ -2519,8 +2525,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2519
2525
|
// Composables
|
2520
2526
|
function createTheme(options) {
|
2521
2527
|
const parsedOptions = parseThemeOptions(options);
|
2522
|
-
const
|
2528
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
2523
2529
|
const themes = ref(parsedOptions.themes);
|
2530
|
+
const systemName = shallowRef('light');
|
2531
|
+
const name = computed({
|
2532
|
+
get() {
|
2533
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
2534
|
+
},
|
2535
|
+
set(val) {
|
2536
|
+
_name.value = val;
|
2537
|
+
}
|
2538
|
+
});
|
2524
2539
|
const computedThemes = computed(() => {
|
2525
2540
|
const acc = {};
|
2526
2541
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2541,28 +2556,49 @@ function createTheme(options) {
|
|
2541
2556
|
const current = toRef(() => computedThemes.value[name.value]);
|
2542
2557
|
const styles = computed(() => {
|
2543
2558
|
const lines = [];
|
2559
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
2560
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2544
2561
|
if (current.value?.dark) {
|
2545
2562
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2546
2563
|
}
|
2547
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2564
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2548
2565
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2549
|
-
createCssClass(lines,
|
2550
|
-
}
|
2551
|
-
|
2552
|
-
|
2553
|
-
|
2554
|
-
|
2555
|
-
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
|
2560
|
-
|
2566
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
2567
|
+
}
|
2568
|
+
if (parsedOptions.utilities) {
|
2569
|
+
const bgLines = [];
|
2570
|
+
const fgLines = [];
|
2571
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2572
|
+
for (const key of colors) {
|
2573
|
+
if (key.startsWith('on-')) {
|
2574
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2575
|
+
} else {
|
2576
|
+
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);
|
2577
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2578
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2579
|
+
}
|
2561
2580
|
}
|
2581
|
+
lines.push(...bgLines, ...fgLines);
|
2562
2582
|
}
|
2563
|
-
lines.push(...bgLines, ...fgLines);
|
2564
2583
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2565
2584
|
});
|
2585
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2586
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
2587
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
2588
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2589
|
+
function updateSystemName() {
|
2590
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
2591
|
+
}
|
2592
|
+
updateSystemName();
|
2593
|
+
media.addEventListener('change', updateSystemName, {
|
2594
|
+
passive: true
|
2595
|
+
});
|
2596
|
+
if (getCurrentScope()) {
|
2597
|
+
onScopeDispose(() => {
|
2598
|
+
media.removeEventListener('change', updateSystemName);
|
2599
|
+
});
|
2600
|
+
}
|
2601
|
+
}
|
2566
2602
|
function install(app) {
|
2567
2603
|
if (parsedOptions.isDisabled) return;
|
2568
2604
|
const head = app._context.provides.usehead;
|
@@ -2600,22 +2636,55 @@ function createTheme(options) {
|
|
2600
2636
|
updateStyles();
|
2601
2637
|
}
|
2602
2638
|
function updateStyles() {
|
2603
|
-
upsertStyles(
|
2639
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2604
2640
|
}
|
2605
2641
|
}
|
2606
2642
|
}
|
2607
|
-
|
2643
|
+
function change(themeName) {
|
2644
|
+
if (!themeNames.value.includes(themeName)) {
|
2645
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2646
|
+
return;
|
2647
|
+
}
|
2648
|
+
name.value = themeName;
|
2649
|
+
}
|
2650
|
+
function cycle() {
|
2651
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2652
|
+
const currentIndex = themeArray.indexOf(name.value);
|
2653
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2654
|
+
change(themeArray[nextIndex]);
|
2655
|
+
}
|
2656
|
+
function toggle() {
|
2657
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2658
|
+
cycle(themeArray);
|
2659
|
+
}
|
2660
|
+
const globalName = new Proxy(name, {
|
2661
|
+
get(target, prop) {
|
2662
|
+
return target[prop];
|
2663
|
+
},
|
2664
|
+
set(target, prop, val) {
|
2665
|
+
if (prop === 'value') {
|
2666
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2667
|
+
}
|
2668
|
+
// @ts-expect-error
|
2669
|
+
target[prop] = val;
|
2670
|
+
return true;
|
2671
|
+
}
|
2672
|
+
});
|
2608
2673
|
return {
|
2609
2674
|
install,
|
2675
|
+
change,
|
2676
|
+
cycle,
|
2677
|
+
toggle,
|
2610
2678
|
isDisabled: parsedOptions.isDisabled,
|
2611
2679
|
name,
|
2612
2680
|
themes,
|
2613
2681
|
current,
|
2614
2682
|
computedThemes,
|
2683
|
+
prefix: parsedOptions.prefix,
|
2615
2684
|
themeClasses,
|
2616
2685
|
styles,
|
2617
2686
|
global: {
|
2618
|
-
name,
|
2687
|
+
name: globalName,
|
2619
2688
|
current
|
2620
2689
|
}
|
2621
2690
|
};
|
@@ -2626,7 +2695,7 @@ function provideTheme(props) {
|
|
2626
2695
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2627
2696
|
const name = toRef(() => props.theme ?? theme.name.value);
|
2628
2697
|
const current = toRef(() => theme.themes.value[name.value]);
|
2629
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
2698
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
2630
2699
|
const newTheme = {
|
2631
2700
|
...theme,
|
2632
2701
|
name,
|
@@ -4173,9 +4242,15 @@ function useVariant(props) {
|
|
4173
4242
|
};
|
4174
4243
|
}
|
4175
4244
|
|
4245
|
+
// Types
|
4246
|
+
|
4176
4247
|
const makeVBtnGroupProps = propsFactory({
|
4177
4248
|
baseColor: String,
|
4178
4249
|
divided: Boolean,
|
4250
|
+
direction: {
|
4251
|
+
type: String,
|
4252
|
+
default: 'horizontal'
|
4253
|
+
},
|
4179
4254
|
...makeBorderProps(),
|
4180
4255
|
...makeComponentProps(),
|
4181
4256
|
...makeDensityProps(),
|
@@ -4209,7 +4284,7 @@ const VBtnGroup = genericComponent()({
|
|
4209
4284
|
} = useRounded(props);
|
4210
4285
|
provideDefaults({
|
4211
4286
|
VBtn: {
|
4212
|
-
height: 'auto',
|
4287
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4213
4288
|
baseColor: toRef(() => props.baseColor),
|
4214
4289
|
color: toRef(() => props.color),
|
4215
4290
|
density: toRef(() => props.density),
|
@@ -4219,7 +4294,7 @@ const VBtnGroup = genericComponent()({
|
|
4219
4294
|
});
|
4220
4295
|
useRender(() => {
|
4221
4296
|
return createVNode(props.tag, {
|
4222
|
-
"class": normalizeClass(['v-btn-group', {
|
4297
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4223
4298
|
'v-btn-group--divided': props.divided
|
4224
4299
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4225
4300
|
"style": normalizeStyle(props.style)
|
@@ -5907,6 +5982,31 @@ const VAppBarTitle = genericComponent()({
|
|
5907
5982
|
// Utilities
|
5908
5983
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
5909
5984
|
|
5985
|
+
// Utilities
|
5986
|
+
|
5987
|
+
// Types
|
5988
|
+
|
5989
|
+
// Types
|
5990
|
+
|
5991
|
+
// Composables
|
5992
|
+
const makeIconSizeProps = propsFactory({
|
5993
|
+
iconSize: [Number, String],
|
5994
|
+
iconSizes: {
|
5995
|
+
type: Array,
|
5996
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
5997
|
+
}
|
5998
|
+
}, 'iconSize');
|
5999
|
+
function useIconSizes(props, fallback) {
|
6000
|
+
const iconSize = computed(() => {
|
6001
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6002
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6003
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6004
|
+
});
|
6005
|
+
return {
|
6006
|
+
iconSize
|
6007
|
+
};
|
6008
|
+
}
|
6009
|
+
|
5910
6010
|
// Types
|
5911
6011
|
|
5912
6012
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -5946,6 +6046,7 @@ const makeVAlertProps = propsFactory({
|
|
5946
6046
|
...makeDensityProps(),
|
5947
6047
|
...makeDimensionProps(),
|
5948
6048
|
...makeElevationProps(),
|
6049
|
+
...makeIconSizeProps(),
|
5949
6050
|
...makeLocationProps(),
|
5950
6051
|
...makePositionProps(),
|
5951
6052
|
...makeRoundedProps(),
|
@@ -5973,6 +6074,9 @@ const VAlert = genericComponent()({
|
|
5973
6074
|
if (!props.type) return props.icon;
|
5974
6075
|
return props.icon ?? `$${props.type}`;
|
5975
6076
|
});
|
6077
|
+
const {
|
6078
|
+
iconSize
|
6079
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
5976
6080
|
const {
|
5977
6081
|
themeClasses
|
5978
6082
|
} = provideTheme(props);
|
@@ -6020,6 +6124,11 @@ const VAlert = genericComponent()({
|
|
6020
6124
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6021
6125
|
const hasTitle = !!(slots.title || props.title);
|
6022
6126
|
const hasClose = !!(slots.close || props.closable);
|
6127
|
+
const iconProps = {
|
6128
|
+
density: props.density,
|
6129
|
+
icon: icon.value,
|
6130
|
+
size: iconSize.value
|
6131
|
+
};
|
6023
6132
|
return isActive.value && createVNode(props.tag, {
|
6024
6133
|
"class": normalizeClass(['v-alert', props.border && {
|
6025
6134
|
'v-alert--border': !!props.border,
|
@@ -6037,19 +6146,14 @@ const VAlert = genericComponent()({
|
|
6037
6146
|
}, null), hasPrepend && createElementVNode("div", {
|
6038
6147
|
"key": "prepend",
|
6039
6148
|
"class": "v-alert__prepend"
|
6040
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
6041
|
-
"key": "prepend-icon"
|
6042
|
-
|
6043
|
-
"icon": icon.value,
|
6044
|
-
"size": props.prominent ? 44 : 28
|
6045
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6149
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6150
|
+
"key": "prepend-icon"
|
6151
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6046
6152
|
"key": "prepend-defaults",
|
6047
6153
|
"disabled": !icon.value,
|
6048
6154
|
"defaults": {
|
6049
6155
|
VIcon: {
|
6050
|
-
|
6051
|
-
icon: icon.value,
|
6052
|
-
size: props.prominent ? 44 : 28
|
6156
|
+
...iconProps
|
6053
6157
|
}
|
6054
6158
|
}
|
6055
6159
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7574,6 +7678,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7574
7678
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7575
7679
|
const makeVSlideGroupProps = propsFactory({
|
7576
7680
|
centerActive: Boolean,
|
7681
|
+
contentClass: null,
|
7577
7682
|
direction: {
|
7578
7683
|
type: String,
|
7579
7684
|
default: 'horizontal'
|
@@ -7886,7 +7991,7 @@ const VSlideGroup = genericComponent()({
|
|
7886
7991
|
})]), createElementVNode("div", {
|
7887
7992
|
"key": "container",
|
7888
7993
|
"ref": containerRef,
|
7889
|
-
"class":
|
7994
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
7890
7995
|
"onScroll": onScroll
|
7891
7996
|
}, [createElementVNode("div", {
|
7892
7997
|
"ref": contentRef,
|
@@ -8248,6 +8353,68 @@ const VChip = genericComponent()({
|
|
8248
8353
|
}
|
8249
8354
|
});
|
8250
8355
|
|
8356
|
+
const makeVDividerProps = propsFactory({
|
8357
|
+
color: String,
|
8358
|
+
inset: Boolean,
|
8359
|
+
length: [Number, String],
|
8360
|
+
opacity: [Number, String],
|
8361
|
+
thickness: [Number, String],
|
8362
|
+
vertical: Boolean,
|
8363
|
+
...makeComponentProps(),
|
8364
|
+
...makeThemeProps()
|
8365
|
+
}, 'VDivider');
|
8366
|
+
const VDivider = genericComponent()({
|
8367
|
+
name: 'VDivider',
|
8368
|
+
props: makeVDividerProps(),
|
8369
|
+
setup(props, _ref) {
|
8370
|
+
let {
|
8371
|
+
attrs,
|
8372
|
+
slots
|
8373
|
+
} = _ref;
|
8374
|
+
const {
|
8375
|
+
themeClasses
|
8376
|
+
} = provideTheme(props);
|
8377
|
+
const {
|
8378
|
+
textColorClasses,
|
8379
|
+
textColorStyles
|
8380
|
+
} = useTextColor(() => props.color);
|
8381
|
+
const dividerStyles = computed(() => {
|
8382
|
+
const styles = {};
|
8383
|
+
if (props.length) {
|
8384
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8385
|
+
}
|
8386
|
+
if (props.thickness) {
|
8387
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8388
|
+
}
|
8389
|
+
return styles;
|
8390
|
+
});
|
8391
|
+
useRender(() => {
|
8392
|
+
const divider = createElementVNode("hr", {
|
8393
|
+
"class": normalizeClass([{
|
8394
|
+
'v-divider': true,
|
8395
|
+
'v-divider--inset': props.inset,
|
8396
|
+
'v-divider--vertical': props.vertical
|
8397
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8398
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8399
|
+
'--v-border-opacity': props.opacity
|
8400
|
+
}, props.style]),
|
8401
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8402
|
+
"role": `${attrs.role || 'separator'}`
|
8403
|
+
}, null);
|
8404
|
+
if (!slots.default) return divider;
|
8405
|
+
return createElementVNode("div", {
|
8406
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8407
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8408
|
+
'v-divider__wrapper--inset': props.inset
|
8409
|
+
}])
|
8410
|
+
}, [divider, createElementVNode("div", {
|
8411
|
+
"class": "v-divider__content"
|
8412
|
+
}, [slots.default()]), divider]);
|
8413
|
+
});
|
8414
|
+
return {};
|
8415
|
+
}
|
8416
|
+
});
|
8417
|
+
|
8251
8418
|
// Utilities
|
8252
8419
|
|
8253
8420
|
// List
|
@@ -9399,68 +9566,6 @@ const VListSubheader = genericComponent()({
|
|
9399
9566
|
}
|
9400
9567
|
});
|
9401
9568
|
|
9402
|
-
const makeVDividerProps = propsFactory({
|
9403
|
-
color: String,
|
9404
|
-
inset: Boolean,
|
9405
|
-
length: [Number, String],
|
9406
|
-
opacity: [Number, String],
|
9407
|
-
thickness: [Number, String],
|
9408
|
-
vertical: Boolean,
|
9409
|
-
...makeComponentProps(),
|
9410
|
-
...makeThemeProps()
|
9411
|
-
}, 'VDivider');
|
9412
|
-
const VDivider = genericComponent()({
|
9413
|
-
name: 'VDivider',
|
9414
|
-
props: makeVDividerProps(),
|
9415
|
-
setup(props, _ref) {
|
9416
|
-
let {
|
9417
|
-
attrs,
|
9418
|
-
slots
|
9419
|
-
} = _ref;
|
9420
|
-
const {
|
9421
|
-
themeClasses
|
9422
|
-
} = provideTheme(props);
|
9423
|
-
const {
|
9424
|
-
textColorClasses,
|
9425
|
-
textColorStyles
|
9426
|
-
} = useTextColor(() => props.color);
|
9427
|
-
const dividerStyles = computed(() => {
|
9428
|
-
const styles = {};
|
9429
|
-
if (props.length) {
|
9430
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9431
|
-
}
|
9432
|
-
if (props.thickness) {
|
9433
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9434
|
-
}
|
9435
|
-
return styles;
|
9436
|
-
});
|
9437
|
-
useRender(() => {
|
9438
|
-
const divider = createElementVNode("hr", {
|
9439
|
-
"class": normalizeClass([{
|
9440
|
-
'v-divider': true,
|
9441
|
-
'v-divider--inset': props.inset,
|
9442
|
-
'v-divider--vertical': props.vertical
|
9443
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9444
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9445
|
-
'--v-border-opacity': props.opacity
|
9446
|
-
}, props.style]),
|
9447
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9448
|
-
"role": `${attrs.role || 'separator'}`
|
9449
|
-
}, null);
|
9450
|
-
if (!slots.default) return divider;
|
9451
|
-
return createElementVNode("div", {
|
9452
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9453
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9454
|
-
'v-divider__wrapper--inset': props.inset
|
9455
|
-
}])
|
9456
|
-
}, [divider, createElementVNode("div", {
|
9457
|
-
"class": "v-divider__content"
|
9458
|
-
}, [slots.default()]), divider]);
|
9459
|
-
});
|
9460
|
-
return {};
|
9461
|
-
}
|
9462
|
-
});
|
9463
|
-
|
9464
9569
|
// Types
|
9465
9570
|
|
9466
9571
|
const makeVListChildrenProps = propsFactory({
|
@@ -12388,7 +12493,12 @@ function useVirtual(props, items) {
|
|
12388
12493
|
}
|
12389
12494
|
function calculateOffset(index) {
|
12390
12495
|
index = clamp(index, 0, items.value.length - 1);
|
12391
|
-
|
12496
|
+
const whole = Math.floor(index);
|
12497
|
+
const fraction = index % 1;
|
12498
|
+
const next = whole + 1;
|
12499
|
+
const wholeOffset = offsets[whole] || 0;
|
12500
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12501
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12392
12502
|
}
|
12393
12503
|
function calculateIndex(scrollTop) {
|
12394
12504
|
return binaryClosest(offsets, scrollTop);
|
@@ -12742,6 +12852,7 @@ const makeSelectProps = propsFactory({
|
|
12742
12852
|
},
|
12743
12853
|
openOnClear: Boolean,
|
12744
12854
|
itemColor: String,
|
12855
|
+
noAutoScroll: Boolean,
|
12745
12856
|
...makeItemsProps({
|
12746
12857
|
itemChildren: false
|
12747
12858
|
})
|
@@ -12956,7 +13067,7 @@ const VSelect = genericComponent()({
|
|
12956
13067
|
watch(menu, () => {
|
12957
13068
|
if (!props.hideSelected && menu.value && model.value.length) {
|
12958
13069
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
12959
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13070
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
12960
13071
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
12961
13072
|
});
|
12962
13073
|
}
|
@@ -13048,6 +13159,22 @@ const VSelect = genericComponent()({
|
|
13048
13159
|
key: item.value,
|
13049
13160
|
onClick: () => select(item, null)
|
13050
13161
|
});
|
13162
|
+
if (item.raw.type === 'divider') {
|
13163
|
+
return slots.divider?.({
|
13164
|
+
props: item.raw,
|
13165
|
+
index
|
13166
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13167
|
+
"key": `divider-${index}`
|
13168
|
+
}), null);
|
13169
|
+
}
|
13170
|
+
if (item.raw.type === 'subheader') {
|
13171
|
+
return slots.subheader?.({
|
13172
|
+
props: item.raw,
|
13173
|
+
index
|
13174
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13175
|
+
"key": `subheader-${index}`
|
13176
|
+
}), null);
|
13177
|
+
}
|
13051
13178
|
return slots.item?.({
|
13052
13179
|
item,
|
13053
13180
|
index,
|
@@ -13208,6 +13335,9 @@ function filterItems(items, query, options) {
|
|
13208
13335
|
let match = -1;
|
13209
13336
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13210
13337
|
if (typeof item === 'object') {
|
13338
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13339
|
+
continue;
|
13340
|
+
}
|
13211
13341
|
const filterKeys = keys || Object.keys(transformed);
|
13212
13342
|
for (const key of filterKeys) {
|
13213
13343
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13646,6 +13776,22 @@ const VAutocomplete = genericComponent()({
|
|
13646
13776
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13647
13777
|
onClick: () => select(item, null)
|
13648
13778
|
});
|
13779
|
+
if (item.raw.type === 'divider') {
|
13780
|
+
return slots.divider?.({
|
13781
|
+
props: item.raw,
|
13782
|
+
index
|
13783
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13784
|
+
"key": `divider-${index}`
|
13785
|
+
}), null);
|
13786
|
+
}
|
13787
|
+
if (item.raw.type === 'subheader') {
|
13788
|
+
return slots.subheader?.({
|
13789
|
+
props: item.raw,
|
13790
|
+
index
|
13791
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13792
|
+
"key": `subheader-${index}`
|
13793
|
+
}), null);
|
13794
|
+
}
|
13649
13795
|
return slots.item?.({
|
13650
13796
|
item,
|
13651
13797
|
index,
|
@@ -17241,13 +17387,13 @@ function date(value) {
|
|
17241
17387
|
return null;
|
17242
17388
|
}
|
17243
17389
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17244
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17390
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17245
17391
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17246
17392
|
return createRange(7).map(i => {
|
17247
17393
|
const weekday = new Date(sundayJanuarySecond2000);
|
17248
17394
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17249
17395
|
return new Intl.DateTimeFormat(locale, {
|
17250
|
-
weekday: 'narrow'
|
17396
|
+
weekday: weekdayFormat ?? 'narrow'
|
17251
17397
|
}).format(weekday);
|
17252
17398
|
});
|
17253
17399
|
}
|
@@ -17711,9 +17857,9 @@ class VuetifyDateAdapter {
|
|
17711
17857
|
getDiff(date, comparing, unit) {
|
17712
17858
|
return getDiff(date, comparing, unit);
|
17713
17859
|
}
|
17714
|
-
getWeekdays(firstDayOfWeek) {
|
17860
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
17715
17861
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
17716
|
-
return getWeekdays(this.locale, firstDay);
|
17862
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
17717
17863
|
}
|
17718
17864
|
getYear(date) {
|
17719
17865
|
return getYear(date);
|
@@ -18056,6 +18202,7 @@ const VCombobox = genericComponent()({
|
|
18056
18202
|
_search.value = val ?? '';
|
18057
18203
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18058
18204
|
model.value = [transformItem$3(props, val)];
|
18205
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18059
18206
|
}
|
18060
18207
|
if (val && props.multiple && props.delimiters?.length) {
|
18061
18208
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18372,6 +18519,22 @@ const VCombobox = genericComponent()({
|
|
18372
18519
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18373
18520
|
onClick: () => select(item, null)
|
18374
18521
|
});
|
18522
|
+
if (item.raw.type === 'divider') {
|
18523
|
+
return slots.divider?.({
|
18524
|
+
props: item.raw,
|
18525
|
+
index
|
18526
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18527
|
+
"key": `divider-${index}`
|
18528
|
+
}), null);
|
18529
|
+
}
|
18530
|
+
if (item.raw.type === 'subheader') {
|
18531
|
+
return slots.subheader?.({
|
18532
|
+
props: item.raw,
|
18533
|
+
index
|
18534
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18535
|
+
"key": `subheader-${index}`
|
18536
|
+
}), null);
|
18537
|
+
}
|
18375
18538
|
return slots.item?.({
|
18376
18539
|
item,
|
18377
18540
|
index,
|
@@ -20251,6 +20414,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20251
20414
|
color: String,
|
20252
20415
|
disableSort: Boolean,
|
20253
20416
|
fixedHeader: Boolean,
|
20417
|
+
lastFixed: Boolean,
|
20254
20418
|
multiSort: Boolean,
|
20255
20419
|
sortAscIcon: {
|
20256
20420
|
type: IconValue,
|
@@ -20297,10 +20461,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20297
20461
|
loaderClasses
|
20298
20462
|
} = useLoader(props);
|
20299
20463
|
function getFixedStyles(column, y) {
|
20300
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20464
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20301
20465
|
return {
|
20302
20466
|
position: 'sticky',
|
20303
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20467
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20468
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20304
20469
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20305
20470
|
};
|
20306
20471
|
}
|
@@ -22015,7 +22180,8 @@ const makeCalendarProps = propsFactory({
|
|
22015
22180
|
firstDayOfWeek: {
|
22016
22181
|
type: [Number, String],
|
22017
22182
|
default: undefined
|
22018
|
-
}
|
22183
|
+
},
|
22184
|
+
weekdayFormat: String
|
22019
22185
|
}, 'calendar');
|
22020
22186
|
function useCalendar(props) {
|
22021
22187
|
const adapter = useDate();
|
@@ -22263,7 +22429,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22263
22429
|
"ref": daysRef,
|
22264
22430
|
"key": daysInMonth.value[0].date?.toString(),
|
22265
22431
|
"class": "v-date-picker-month__days"
|
22266
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22432
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22267
22433
|
"class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
|
22268
22434
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22269
22435
|
const slotProps = {
|
@@ -24794,6 +24960,10 @@ const makeVNumberInputProps = propsFactory({
|
|
24794
24960
|
type: Number,
|
24795
24961
|
default: 0
|
24796
24962
|
},
|
24963
|
+
minFractionDigits: {
|
24964
|
+
type: Number,
|
24965
|
+
default: null
|
24966
|
+
},
|
24797
24967
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24798
24968
|
}, 'VNumberInput');
|
24799
24969
|
const VNumberInput = genericComponent()({
|
@@ -24824,9 +24994,19 @@ const VNumberInput = genericComponent()({
|
|
24824
24994
|
} = useFocus(props);
|
24825
24995
|
function correctPrecision(val) {
|
24826
24996
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
24827
|
-
|
24828
|
-
|
24829
|
-
|
24997
|
+
if (precision == null) {
|
24998
|
+
return String(val);
|
24999
|
+
}
|
25000
|
+
let fixed = val.toFixed(precision);
|
25001
|
+
if (isFocused.value) {
|
25002
|
+
return Number(fixed).toString(); // trim zeros
|
25003
|
+
}
|
25004
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25005
|
+
const trimLimit = precision - props.minFractionDigits;
|
25006
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25007
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25008
|
+
}
|
25009
|
+
return fixed;
|
24830
25010
|
}
|
24831
25011
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
24832
25012
|
const _inputText = shallowRef(null);
|
@@ -24885,6 +25065,7 @@ const VNumberInput = genericComponent()({
|
|
24885
25065
|
}
|
24886
25066
|
};
|
24887
25067
|
watch(() => props.precision, () => formatInputValue());
|
25068
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
24888
25069
|
onMounted(() => {
|
24889
25070
|
clampModel();
|
24890
25071
|
});
|
@@ -24994,7 +25175,7 @@ const VNumberInput = genericComponent()({
|
|
24994
25175
|
inputText.value = null;
|
24995
25176
|
return;
|
24996
25177
|
}
|
24997
|
-
inputText.value =
|
25178
|
+
inputText.value = correctPrecision(model.value);
|
24998
25179
|
}
|
24999
25180
|
function trimDecimalZeros() {
|
25000
25181
|
if (controlsDisabled.value) return;
|
@@ -25254,9 +25435,10 @@ const VOtpInput = genericComponent()({
|
|
25254
25435
|
e.preventDefault();
|
25255
25436
|
e.stopPropagation();
|
25256
25437
|
const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
|
25438
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25257
25439
|
if (isValidNumber(clipboardText)) return;
|
25258
25440
|
model.value = clipboardText.split('');
|
25259
|
-
inputRef.value?.[
|
25441
|
+
inputRef.value?.[finalIndex].focus();
|
25260
25442
|
}
|
25261
25443
|
function reset() {
|
25262
25444
|
model.value = [];
|
@@ -29963,11 +30145,6 @@ const makeVIconBtnProps = propsFactory({
|
|
29963
30145
|
hideOverlay: Boolean,
|
29964
30146
|
icon: [String, Function, Object],
|
29965
30147
|
iconColor: String,
|
29966
|
-
iconSize: [Number, String],
|
29967
|
-
iconSizes: {
|
29968
|
-
type: Array,
|
29969
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
29970
|
-
},
|
29971
30148
|
loading: Boolean,
|
29972
30149
|
opacity: [Number, String],
|
29973
30150
|
readonly: Boolean,
|
@@ -29987,6 +30164,7 @@ const makeVIconBtnProps = propsFactory({
|
|
29987
30164
|
...makeBorderProps(),
|
29988
30165
|
...makeComponentProps(),
|
29989
30166
|
...makeElevationProps(),
|
30167
|
+
...makeIconSizeProps(),
|
29990
30168
|
...makeRoundedProps(),
|
29991
30169
|
...makeTagProps({
|
29992
30170
|
tag: 'button'
|
@@ -30041,7 +30219,6 @@ const VIconBtn = genericComponent()({
|
|
30041
30219
|
})()
|
30042
30220
|
}));
|
30043
30221
|
const btnSizeMap = new Map(props.sizes);
|
30044
|
-
const iconSizeMap = new Map(props.iconSizes);
|
30045
30222
|
function onClick() {
|
30046
30223
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
30047
30224
|
isActive.value = !isActive.value;
|
@@ -30053,12 +30230,12 @@ const VIconBtn = genericComponent()({
|
|
30053
30230
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
30054
30231
|
const btnHeight = props.height ?? btnSize;
|
30055
30232
|
const btnWidth = props.width ?? btnSize;
|
30056
|
-
const
|
30057
|
-
|
30058
|
-
|
30233
|
+
const {
|
30234
|
+
iconSize
|
30235
|
+
} = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
|
30059
30236
|
const iconProps = {
|
30060
30237
|
icon,
|
30061
|
-
size: iconSize,
|
30238
|
+
size: iconSize.value,
|
30062
30239
|
iconColor: props.iconColor,
|
30063
30240
|
opacity: props.opacity
|
30064
30241
|
};
|
@@ -30101,7 +30278,7 @@ const VIconBtn = genericComponent()({
|
|
30101
30278
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
30102
30279
|
"indeterminate": "disable-shrink",
|
30103
30280
|
"width": "2",
|
30104
|
-
"size": iconSize
|
30281
|
+
"size": iconSize.value
|
30105
30282
|
}, null)])]
|
30106
30283
|
});
|
30107
30284
|
});
|
@@ -32011,7 +32188,7 @@ function createVuetify$1() {
|
|
32011
32188
|
};
|
32012
32189
|
});
|
32013
32190
|
}
|
32014
|
-
const version$1 = "3.8.
|
32191
|
+
const version$1 = "3.8.7-dev.2025-05-27";
|
32015
32192
|
createVuetify$1.version = version$1;
|
32016
32193
|
|
32017
32194
|
// Vue's inject() can only be used in setup
|
@@ -32309,7 +32486,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
32309
32486
|
|
32310
32487
|
/* eslint-disable local-rules/sort-imports */
|
32311
32488
|
|
32312
|
-
const version = "3.8.
|
32489
|
+
const version = "3.8.7-dev.2025-05-27";
|
32313
32490
|
|
32314
32491
|
/* eslint-disable local-rules/sort-imports */
|
32315
32492
|
|