@vuetify/nightly 3.8.9-dev.2025-06-12 → 3.8.9-dev.2025-06-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 +7 -3
- package/dist/json/attributes.json +3443 -3407
- package/dist/json/importMap-labs.json +12 -12
- package/dist/json/importMap.json +172 -172
- package/dist/json/tags.json +10 -1
- package/dist/json/web-types.json +6311 -6174
- package/dist/vuetify-labs.cjs +111 -47
- package/dist/vuetify-labs.css +3296 -3285
- package/dist/vuetify-labs.d.ts +1602 -1406
- package/dist/vuetify-labs.esm.js +111 -47
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +111 -47
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +111 -47
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4165 -4154
- package/dist/vuetify.d.ts +1355 -1159
- package/dist/vuetify.esm.js +111 -47
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +111 -47
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1063 -1057
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +21 -7
- package/lib/components/VCombobox/VCombobox.d.ts +21 -7
- package/lib/components/VDatePicker/VDatePicker.d.ts +70 -5
- package/lib/components/VDatePicker/VDatePicker.js +10 -4
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VKbd/VKbd.css +13 -2
- package/lib/components/VKbd/VKbd.d.ts +221 -0
- package/lib/components/VKbd/VKbd.js +55 -0
- package/lib/components/VKbd/VKbd.js.map +1 -0
- package/lib/components/VKbd/VKbd.sass +2 -1
- package/lib/components/VKbd/_variables.scss +12 -1
- package/lib/components/VKbd/index.d.ts +1 -95
- package/lib/components/VKbd/index.js +1 -4
- package/lib/components/VKbd/index.js.map +1 -1
- package/lib/components/VMenu/VMenu.d.ts +13 -0
- package/lib/components/VMenu/VMenu.js +2 -1
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +11 -0
- package/lib/components/VNumberInput/VNumberInput.js +37 -29
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VSelect/VSelect.d.ts +33 -11
- package/lib/components/VSpeedDial/VSpeedDial.d.ts +13 -0
- package/lib/composables/locale.d.ts +5 -1
- package/lib/composables/locale.js.map +1 -1
- package/lib/composables/theme.js +3 -3
- package/lib/composables/theme.js.map +1 -1
- package/lib/entry-bundler.d.ts +1 -0
- package/lib/entry-bundler.js +1 -1
- package/lib/framework.d.ts +59 -56
- package/lib/framework.js +1 -1
- package/lib/labs/entry-bundler.d.ts +1 -0
- package/lib/locale/adapters/vue-i18n.js +6 -1
- package/lib/locale/adapters/vue-i18n.js.map +1 -1
- package/lib/locale/adapters/vuetify.js +7 -1
- package/lib/locale/adapters/vuetify.js.map +1 -1
- package/lib/util/helpers.d.ts +2 -1
- package/lib/util/helpers.js +12 -7
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify.esm.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.9-dev.2025-06-
|
2
|
+
* Vuetify v3.8.9-dev.2025-06-13
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -511,18 +511,23 @@ function checkPrintable(e) {
|
|
511
511
|
function isPrimitive(value) {
|
512
512
|
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
|
513
513
|
}
|
514
|
-
function
|
515
|
-
|
514
|
+
function escapeForRegex(sign) {
|
515
|
+
return '\\^$*+?.()|{}[]'.includes(sign) ? `\\${sign}` : sign;
|
516
|
+
}
|
517
|
+
function extractNumber(text, decimalDigitsLimit, decimalSeparator) {
|
518
|
+
const onlyValidCharacters = new RegExp(`[\\d\\-${escapeForRegex(decimalSeparator)}]`);
|
519
|
+
const cleanText = text.split('').filter(x => onlyValidCharacters.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
|
516
520
|
// sign allowed at the start
|
517
|
-
x ===
|
521
|
+
x === decimalSeparator && i === all.indexOf(x) ||
|
518
522
|
// decimal separator allowed only once
|
519
523
|
/\d/.test(x)).join('');
|
520
524
|
if (decimalDigitsLimit === 0) {
|
521
|
-
return cleanText.split(
|
525
|
+
return cleanText.split(decimalSeparator)[0];
|
522
526
|
}
|
523
|
-
|
524
|
-
|
525
|
-
|
527
|
+
const decimalPart = new RegExp(`${escapeForRegex(decimalSeparator)}\\d`);
|
528
|
+
if (decimalDigitsLimit !== null && decimalPart.test(cleanText)) {
|
529
|
+
const parts = cleanText.split(decimalSeparator);
|
530
|
+
return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join(decimalSeparator);
|
526
531
|
}
|
527
532
|
return cleanText;
|
528
533
|
}
|
@@ -2662,6 +2667,10 @@ function createNumberFunction(current, fallback) {
|
|
2662
2667
|
return numberFormat.format(value);
|
2663
2668
|
};
|
2664
2669
|
}
|
2670
|
+
function inferDecimalSeparator(current, fallback) {
|
2671
|
+
const format = createNumberFunction(current, fallback);
|
2672
|
+
return format(0.1).includes(',') ? ',' : '.';
|
2673
|
+
}
|
2665
2674
|
function useProvided(props, prop, provided) {
|
2666
2675
|
const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
|
2667
2676
|
|
@@ -2684,6 +2693,7 @@ function createProvideFunction(state) {
|
|
2684
2693
|
current,
|
2685
2694
|
fallback,
|
2686
2695
|
messages,
|
2696
|
+
decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
|
2687
2697
|
t: createTranslateFunction(current, fallback, messages),
|
2688
2698
|
n: createNumberFunction(current, fallback),
|
2689
2699
|
provide: createProvideFunction({
|
@@ -2706,6 +2716,7 @@ function createVuetifyAdapter(options) {
|
|
2706
2716
|
current,
|
2707
2717
|
fallback,
|
2708
2718
|
messages,
|
2719
|
+
decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
|
2709
2720
|
t: createTranslateFunction(current, fallback, messages),
|
2710
2721
|
n: createNumberFunction(current, fallback),
|
2711
2722
|
provide: createProvideFunction({
|
@@ -2870,8 +2881,8 @@ function genDefaults$1() {
|
|
2870
2881
|
'activated-opacity': 0.12,
|
2871
2882
|
'pressed-opacity': 0.12,
|
2872
2883
|
'dragged-opacity': 0.08,
|
2873
|
-
'theme-kbd': '#
|
2874
|
-
'theme-on-kbd': '#
|
2884
|
+
'theme-kbd': '#EEEEEE',
|
2885
|
+
'theme-on-kbd': '#000000',
|
2875
2886
|
'theme-code': '#F5F5F5',
|
2876
2887
|
'theme-on-code': '#000000'
|
2877
2888
|
}
|
@@ -2907,7 +2918,7 @@ function genDefaults$1() {
|
|
2907
2918
|
'activated-opacity': 0.12,
|
2908
2919
|
'pressed-opacity': 0.16,
|
2909
2920
|
'dragged-opacity': 0.08,
|
2910
|
-
'theme-kbd': '#
|
2921
|
+
'theme-kbd': '#424242',
|
2911
2922
|
'theme-on-kbd': '#FFFFFF',
|
2912
2923
|
'theme-code': '#343434',
|
2913
2924
|
'theme-on-code': '#CCCCCC'
|
@@ -11908,6 +11919,7 @@ const makeVMenuProps = propsFactory({
|
|
11908
11919
|
// disableKeys: Boolean,
|
11909
11920
|
id: String,
|
11910
11921
|
submenu: Boolean,
|
11922
|
+
disableInitialFocus: Boolean,
|
11911
11923
|
...omit(makeVOverlayProps({
|
11912
11924
|
closeDelay: 250,
|
11913
11925
|
closeOnContentClick: true,
|
@@ -11982,7 +11994,7 @@ const VMenu = genericComponent()({
|
|
11982
11994
|
watch(isActive, val => {
|
11983
11995
|
if (val) {
|
11984
11996
|
parent?.register();
|
11985
|
-
if (IN_BROWSER) {
|
11997
|
+
if (IN_BROWSER && !props.disableInitialFocus) {
|
11986
11998
|
document.addEventListener('focusin', onFocusIn, {
|
11987
11999
|
once: true
|
11988
12000
|
});
|
@@ -23283,7 +23295,9 @@ const VDatePicker = genericComponent()({
|
|
23283
23295
|
"max": maxDate.value,
|
23284
23296
|
"year": year.value,
|
23285
23297
|
"allowedMonths": allowedMonths
|
23286
|
-
}),
|
23298
|
+
}), {
|
23299
|
+
...pick(slots, ['month'])
|
23300
|
+
}) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
|
23287
23301
|
"key": "date-picker-years"
|
23288
23302
|
}, datePickerYearsProps, {
|
23289
23303
|
"modelValue": year.value,
|
@@ -23291,7 +23305,9 @@ const VDatePicker = genericComponent()({
|
|
23291
23305
|
"min": minDate.value,
|
23292
23306
|
"max": maxDate.value,
|
23293
23307
|
"allowedYears": allowedYears
|
23294
|
-
}),
|
23308
|
+
}), {
|
23309
|
+
...pick(slots, ['year'])
|
23310
|
+
}) : createVNode(VDatePickerMonth, mergeProps({
|
23295
23311
|
"key": "date-picker-month"
|
23296
23312
|
}, datePickerMonthProps, {
|
23297
23313
|
"modelValue": model.value,
|
@@ -23302,7 +23318,9 @@ const VDatePicker = genericComponent()({
|
|
23302
23318
|
"onUpdate:year": [$event => year.value = $event, onUpdateYear],
|
23303
23319
|
"min": minDate.value,
|
23304
23320
|
"max": maxDate.value
|
23305
|
-
}),
|
23321
|
+
}), {
|
23322
|
+
...pick(slots, ['day'])
|
23323
|
+
})]
|
23306
23324
|
})]),
|
23307
23325
|
actions: slots.actions
|
23308
23326
|
});
|
@@ -24612,8 +24630,47 @@ const VItem = genericComponent()({
|
|
24612
24630
|
}
|
24613
24631
|
});
|
24614
24632
|
|
24615
|
-
|
24616
|
-
|
24633
|
+
const makeVKbdProps = propsFactory({
|
24634
|
+
...makeBorderProps(),
|
24635
|
+
...makeComponentProps(),
|
24636
|
+
...makeRoundedProps(),
|
24637
|
+
...makeTagProps({
|
24638
|
+
tag: 'kbd'
|
24639
|
+
}),
|
24640
|
+
...makeThemeProps(),
|
24641
|
+
...makeElevationProps(),
|
24642
|
+
color: String
|
24643
|
+
}, 'VKbd');
|
24644
|
+
const VKbd = genericComponent()({
|
24645
|
+
name: 'VKbd',
|
24646
|
+
props: makeVKbdProps(),
|
24647
|
+
setup(props, _ref) {
|
24648
|
+
let {
|
24649
|
+
slots
|
24650
|
+
} = _ref;
|
24651
|
+
const {
|
24652
|
+
themeClasses
|
24653
|
+
} = provideTheme(props);
|
24654
|
+
const {
|
24655
|
+
borderClasses
|
24656
|
+
} = useBorder(props);
|
24657
|
+
const {
|
24658
|
+
roundedClasses
|
24659
|
+
} = useRounded(props);
|
24660
|
+
const {
|
24661
|
+
backgroundColorClasses,
|
24662
|
+
backgroundColorStyles
|
24663
|
+
} = useBackgroundColor(() => props.color);
|
24664
|
+
const {
|
24665
|
+
elevationClasses
|
24666
|
+
} = useElevation(props);
|
24667
|
+
useRender(() => createVNode(props.tag, {
|
24668
|
+
"class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
24669
|
+
"style": normalizeStyle([backgroundColorStyles.value, props.style])
|
24670
|
+
}, slots));
|
24671
|
+
return {};
|
24672
|
+
}
|
24673
|
+
});
|
24617
24674
|
|
24618
24675
|
const makeVLayoutProps = propsFactory({
|
24619
24676
|
...makeComponentProps(),
|
@@ -25455,6 +25512,10 @@ const makeVNumberInputProps = propsFactory({
|
|
25455
25512
|
type: Number,
|
25456
25513
|
default: null
|
25457
25514
|
},
|
25515
|
+
decimalSeparator: {
|
25516
|
+
type: String,
|
25517
|
+
validator: v => !v || v.length === 1
|
25518
|
+
},
|
25458
25519
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25459
25520
|
}, 'VNumberInput');
|
25460
25521
|
const VNumberInput = genericComponent()({
|
@@ -25480,21 +25541,24 @@ const VNumberInput = genericComponent()({
|
|
25480
25541
|
const form = useForm(props);
|
25481
25542
|
const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
|
25482
25543
|
const isFocused = shallowRef(props.focused);
|
25544
|
+
const {
|
25545
|
+
decimalSeparator: decimalSeparatorFromLocale
|
25546
|
+
} = useLocale();
|
25547
|
+
const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
|
25483
25548
|
function correctPrecision(val) {
|
25484
25549
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25485
|
-
|
25486
|
-
|
25487
|
-
|
25488
|
-
|
25489
|
-
|
25490
|
-
return Number(fixed).toString(); // trim zeros
|
25550
|
+
let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
25551
|
+
const fixed = precision == null ? String(val) : val.toFixed(precision);
|
25552
|
+
if (isFocused.value && trim) {
|
25553
|
+
return Number(fixed).toString() // trim zeros
|
25554
|
+
.replace('.', decimalSeparator.value);
|
25491
25555
|
}
|
25492
|
-
if (
|
25493
|
-
|
25494
|
-
const [baseDigits, fractionDigits] = fixed.split('.');
|
25495
|
-
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25556
|
+
if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
|
25557
|
+
return fixed.replace('.', decimalSeparator.value);
|
25496
25558
|
}
|
25497
|
-
|
25559
|
+
let [baseDigits, fractionDigits] = fixed.split('.');
|
25560
|
+
fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
|
25561
|
+
return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
|
25498
25562
|
}
|
25499
25563
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25500
25564
|
const _inputText = shallowRef(null);
|
@@ -25511,8 +25575,11 @@ const VNumberInput = genericComponent()({
|
|
25511
25575
|
if (val === null || val === '') {
|
25512
25576
|
model.value = null;
|
25513
25577
|
_inputText.value = null;
|
25514
|
-
|
25515
|
-
|
25578
|
+
return;
|
25579
|
+
}
|
25580
|
+
const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
|
25581
|
+
if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
|
25582
|
+
model.value = parsedValue;
|
25516
25583
|
_inputText.value = val;
|
25517
25584
|
}
|
25518
25585
|
}
|
@@ -25583,24 +25650,24 @@ const VNumberInput = genericComponent()({
|
|
25583
25650
|
selectionEnd
|
25584
25651
|
} = inputElement ?? {};
|
25585
25652
|
const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
|
25586
|
-
const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
|
25653
|
+
const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
|
25587
25654
|
|
25588
|
-
//
|
25589
|
-
//
|
25590
|
-
//
|
25591
|
-
if (
|
25655
|
+
// Allow only numbers, "-" and {decimal separator}
|
25656
|
+
// Allow "-" and {decimal separator} only once
|
25657
|
+
// Allow "-" only at the start
|
25658
|
+
if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
|
25592
25659
|
e.preventDefault();
|
25593
25660
|
inputElement.value = potentialNewNumber;
|
25594
25661
|
}
|
25595
25662
|
if (props.precision == null) return;
|
25596
25663
|
|
25597
25664
|
// Ignore decimal digits above precision limit
|
25598
|
-
if (potentialNewInputVal.split(
|
25665
|
+
if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
|
25599
25666
|
e.preventDefault();
|
25600
25667
|
inputElement.value = potentialNewNumber;
|
25601
25668
|
}
|
25602
25669
|
// Ignore decimal separator when precision = 0
|
25603
|
-
if (props.precision === 0 && potentialNewInputVal.includes(
|
25670
|
+
if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
|
25604
25671
|
e.preventDefault();
|
25605
25672
|
inputElement.value = potentialNewNumber;
|
25606
25673
|
}
|
@@ -25652,19 +25719,16 @@ const VNumberInput = genericComponent()({
|
|
25652
25719
|
if (controlsDisabled.value) return;
|
25653
25720
|
if (!vTextFieldRef.value) return;
|
25654
25721
|
const actualText = vTextFieldRef.value.value;
|
25655
|
-
|
25656
|
-
|
25722
|
+
const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
|
25723
|
+
if (actualText && !isNaN(parsedValue)) {
|
25724
|
+
inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
|
25657
25725
|
} else {
|
25658
25726
|
inputText.value = null;
|
25659
25727
|
}
|
25660
25728
|
}
|
25661
25729
|
function formatInputValue() {
|
25662
25730
|
if (controlsDisabled.value) return;
|
25663
|
-
|
25664
|
-
inputText.value = null;
|
25665
|
-
return;
|
25666
|
-
}
|
25667
|
-
inputText.value = correctPrecision(model.value);
|
25731
|
+
inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
|
25668
25732
|
}
|
25669
25733
|
function trimDecimalZeros() {
|
25670
25734
|
if (controlsDisabled.value) return;
|
@@ -25672,7 +25736,7 @@ const VNumberInput = genericComponent()({
|
|
25672
25736
|
inputText.value = null;
|
25673
25737
|
return;
|
25674
25738
|
}
|
25675
|
-
inputText.value = model.value.toString();
|
25739
|
+
inputText.value = model.value.toString().replace('.', decimalSeparator.value);
|
25676
25740
|
}
|
25677
25741
|
function onFocus() {
|
25678
25742
|
trimDecimalZeros();
|
@@ -29712,7 +29776,7 @@ function createVuetify$1() {
|
|
29712
29776
|
};
|
29713
29777
|
});
|
29714
29778
|
}
|
29715
|
-
const version$1 = "3.8.9-dev.2025-06-
|
29779
|
+
const version$1 = "3.8.9-dev.2025-06-13";
|
29716
29780
|
createVuetify$1.version = version$1;
|
29717
29781
|
|
29718
29782
|
// Vue's inject() can only be used in setup
|
@@ -29737,7 +29801,7 @@ const createVuetify = function () {
|
|
29737
29801
|
...options
|
29738
29802
|
});
|
29739
29803
|
};
|
29740
|
-
const version = "3.8.9-dev.2025-06-
|
29804
|
+
const version = "3.8.9-dev.2025-06-13";
|
29741
29805
|
createVuetify.version = version;
|
29742
29806
|
|
29743
29807
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|