@vuetify/nightly 3.8.9-master.2025-06-14 → 3.8.10-dev.2025-06-18
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 +46 -14
- package/dist/json/attributes.json +3541 -3137
- package/dist/json/importMap-labs.json +30 -26
- package/dist/json/importMap.json +174 -174
- package/dist/json/tags.json +108 -2
- package/dist/json/web-types.json +7295 -5648
- package/dist/vuetify-labs.cjs +795 -198
- package/dist/vuetify-labs.css +4855 -4806
- package/dist/vuetify-labs.d.ts +10430 -3099
- package/dist/vuetify-labs.esm.js +796 -199
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +795 -198
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +520 -183
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +2398 -2349
- package/dist/vuetify.d.ts +2798 -2091
- package/dist/vuetify.esm.js +521 -184
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +520 -183
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1257 -1234
- 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/VAppBar/VAppBar.d.ts +15 -3
- package/lib/components/VAppBar/VAppBarNavIcon.d.ts +20 -10
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +175 -110
- package/lib/components/VAutocomplete/VAutocomplete.js +21 -3
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBadge/VBadge.d.ts +60 -0
- package/lib/components/VBadge/VBadge.js +7 -2
- package/lib/components/VBadge/VBadge.js.map +1 -1
- package/lib/components/VBtn/VBtn.css +3 -0
- package/lib/components/VBtn/VBtn.d.ts +20 -10
- package/lib/components/VBtn/VBtn.sass +3 -0
- package/lib/components/VBtnGroup/VBtnGroup.css +32 -8
- 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 +46 -18
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
- package/lib/components/VCard/VCard.d.ts +20 -10
- package/lib/components/VCheckbox/VCheckbox.d.ts +23 -13
- package/lib/components/VCheckbox/VCheckboxBtn.d.ts +20 -10
- package/lib/components/VChip/VChip.d.ts +20 -10
- package/lib/components/VChipGroup/VChipGroup.d.ts +10 -0
- package/lib/components/VCombobox/VCombobox.d.ts +175 -110
- package/lib/components/VCombobox/VCombobox.js +22 -3
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.d.ts +60 -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 +42 -0
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +42 -0
- package/lib/components/VDatePicker/VDatePicker.d.ts +80 -5
- package/lib/components/VDatePicker/VDatePicker.js +10 -4
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- 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/VExpansionPanel/VExpansionPanel.d.ts +20 -10
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +20 -10
- package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +20 -10
- package/lib/components/VFab/VFab.d.ts +20 -10
- package/lib/components/VField/VField.d.ts +3 -3
- package/lib/components/VFileInput/VFileInput.d.ts +15 -15
- package/lib/components/VInfiniteScroll/VInfiniteScroll.d.ts +9 -3
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js +29 -0
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
- package/lib/components/VInput/VInput.d.ts +4 -4
- 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/VList/VList.d.ts +13 -0
- package/lib/components/VList/VList.js +4 -1
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListChildren.js +4 -3
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VList/VListGroup.d.ts +10 -0
- package/lib/components/VList/VListGroup.js +2 -2
- package/lib/components/VList/VListGroup.js.map +1 -1
- package/lib/components/VList/VListItem.d.ts +28 -10
- package/lib/components/VList/VListItem.js +7 -3
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/list.d.ts +9 -2
- package/lib/components/VList/list.js +7 -0
- package/lib/components/VList/list.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 +114 -89
- package/lib/components/VNumberInput/VNumberInput.js +43 -20
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOtpInput/VOtpInput.js +19 -2
- 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/VRadio/VRadio.d.ts +20 -10
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +23 -13
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +204 -118
- package/lib/components/VSelect/VSelect.js +21 -3
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.d.ts +20 -10
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +28 -14
- 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/VSlider/VSliderThumb.d.ts +20 -10
- package/lib/components/VSpeedDial/VSpeedDial.d.ts +13 -0
- package/lib/components/VStepper/VStepperItem.d.ts +28 -14
- package/lib/components/VSwitch/VSwitch.d.ts +23 -13
- package/lib/components/VTable/VTable.css +6 -0
- package/lib/components/VTable/VTable.d.ts +55 -24
- package/lib/components/VTable/VTable.js +9 -2
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTable/VTable.sass +14 -0
- package/lib/components/VTable/_variables.scss +1 -0
- package/lib/components/VTabs/VTab.d.ts +56 -28
- package/lib/components/VTabs/VTabs.d.ts +10 -0
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextField/VTextField.js +4 -4
- package/lib/components/VTextField/VTextField.js.map +1 -1
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/components/VTextarea/VTextarea.js +4 -4
- package/lib/components/VTextarea/VTextarea.js.map +1 -1
- package/lib/components/VToolbar/VToolbar.d.ts +15 -3
- package/lib/components/VToolbar/VToolbar.js +6 -3
- package/lib/components/VToolbar/VToolbar.js.map +1 -1
- package/lib/composables/autofocus.d.ts +7 -0
- package/lib/composables/autofocus.js +10 -0
- package/lib/composables/autofocus.js.map +1 -0
- package/lib/composables/calendar.d.ts +5 -0
- package/lib/composables/calendar.js +2 -1
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +3 -3
- package/lib/composables/date/DateAdapter.js.map +1 -1
- package/lib/composables/date/adapters/string.d.ts +54 -0
- package/lib/composables/date/adapters/string.js +153 -0
- package/lib/composables/date/adapters/string.js.map +1 -0
- 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 +3 -3
- 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/group.js +1 -0
- package/lib/composables/group.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/intersectionObserver.js +2 -2
- package/lib/composables/intersectionObserver.js.map +1 -1
- package/lib/composables/locale.d.ts +5 -1
- package/lib/composables/locale.js.map +1 -1
- package/lib/composables/mask.d.ts +38 -0
- package/lib/composables/mask.js +183 -0
- package/lib/composables/mask.js.map +1 -0
- package/lib/composables/selectLink.js +2 -2
- package/lib/composables/selectLink.js.map +1 -1
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +97 -29
- 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/directives/ripple/index.d.ts +2 -1
- package/lib/directives/ripple/index.js +12 -7
- package/lib/directives/ripple/index.js.map +1 -1
- package/lib/entry-bundler.d.ts +4 -3
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +92 -73
- 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/VFileUpload/VFileUploadItem.d.ts +20 -10
- 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/VMaskInput/VMaskInput.d.ts +6993 -0
- package/lib/labs/VMaskInput/VMaskInput.js +67 -0
- package/lib/labs/VMaskInput/VMaskInput.js.map +1 -0
- package/lib/labs/VMaskInput/index.d.ts +1 -0
- package/lib/labs/VMaskInput/index.js +2 -0
- package/lib/labs/VMaskInput/index.js.map +1 -0
- package/lib/labs/VStepperVertical/VStepperVertical.d.ts +20 -10
- package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +20 -10
- package/lib/labs/VTreeview/VTreeview.d.ts +51 -38
- package/lib/labs/VTreeview/VTreeview.js +1 -1
- package/lib/labs/VTreeview/VTreeview.js.map +1 -1
- package/lib/labs/VTreeview/VTreeviewChildren.d.ts +35 -0
- package/lib/labs/VTreeview/VTreeviewChildren.js +21 -3
- package/lib/labs/VTreeview/VTreeviewChildren.js.map +1 -1
- package/lib/labs/VTreeview/VTreeviewGroup.d.ts +10 -0
- package/lib/labs/VTreeview/VTreeviewItem.d.ts +20 -10
- package/lib/labs/VTreeview/VTreeviewItem.js +1 -0
- package/lib/labs/VTreeview/VTreeviewItem.js.map +1 -1
- package/lib/labs/components.d.ts +1 -0
- package/lib/labs/components.js +1 -0
- package/lib/labs/components.js.map +1 -1
- package/lib/labs/entry-bundler.d.ts +4 -3
- 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/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.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 +9 -7
package/dist/vuetify.esm.js
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.
|
2
|
+
* Vuetify v3.8.10-dev.2025-06-18
|
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, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, normalizeStyle, TransitionGroup, Transition, toRefs, 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, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, normalizeStyle, TransitionGroup, Transition, toRefs, 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
|
const IN_BROWSER = typeof window !== 'undefined';
|
10
10
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
11
11
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
12
12
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
13
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
13
14
|
|
14
15
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
15
16
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -510,18 +511,23 @@ function checkPrintable(e) {
|
|
510
511
|
function isPrimitive(value) {
|
511
512
|
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
|
512
513
|
}
|
513
|
-
function
|
514
|
-
|
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) ||
|
515
520
|
// sign allowed at the start
|
516
|
-
x ===
|
521
|
+
x === decimalSeparator && i === all.indexOf(x) ||
|
517
522
|
// decimal separator allowed only once
|
518
523
|
/\d/.test(x)).join('');
|
519
524
|
if (decimalDigitsLimit === 0) {
|
520
|
-
return cleanText.split(
|
525
|
+
return cleanText.split(decimalSeparator)[0];
|
521
526
|
}
|
522
|
-
|
523
|
-
|
524
|
-
|
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);
|
525
531
|
}
|
526
532
|
return cleanText;
|
527
533
|
}
|
@@ -863,7 +869,7 @@ function APCAcontrast(text, background) {
|
|
863
869
|
// WoB should always return negative value.
|
864
870
|
|
865
871
|
const SAPC = (Ybg ** revBG - Ytxt ** revTXT) * scaleWoB;
|
866
|
-
outputContrast = SAPC > -
|
872
|
+
outputContrast = SAPC > -loClip ? 0.0 : SAPC > -loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
|
867
873
|
}
|
868
874
|
return outputContrast * 100;
|
869
875
|
}
|
@@ -2668,6 +2674,10 @@ function createNumberFunction(current, fallback) {
|
|
2668
2674
|
return numberFormat.format(value);
|
2669
2675
|
};
|
2670
2676
|
}
|
2677
|
+
function inferDecimalSeparator(current, fallback) {
|
2678
|
+
const format = createNumberFunction(current, fallback);
|
2679
|
+
return format(0.1).includes(',') ? ',' : '.';
|
2680
|
+
}
|
2671
2681
|
function useProvided(props, prop, provided) {
|
2672
2682
|
const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
|
2673
2683
|
|
@@ -2690,6 +2700,7 @@ function createProvideFunction(state) {
|
|
2690
2700
|
current,
|
2691
2701
|
fallback,
|
2692
2702
|
messages,
|
2703
|
+
decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
|
2693
2704
|
t: createTranslateFunction(current, fallback, messages),
|
2694
2705
|
n: createNumberFunction(current, fallback),
|
2695
2706
|
provide: createProvideFunction({
|
@@ -2712,6 +2723,7 @@ function createVuetifyAdapter(options) {
|
|
2712
2723
|
current,
|
2713
2724
|
fallback,
|
2714
2725
|
messages,
|
2726
|
+
decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
|
2715
2727
|
t: createTranslateFunction(current, fallback, messages),
|
2716
2728
|
n: createNumberFunction(current, fallback),
|
2717
2729
|
provide: createProvideFunction({
|
@@ -2838,6 +2850,7 @@ const makeThemeProps = propsFactory({
|
|
2838
2850
|
function genDefaults$1() {
|
2839
2851
|
return {
|
2840
2852
|
defaultTheme: 'light',
|
2853
|
+
prefix: 'v-',
|
2841
2854
|
variations: {
|
2842
2855
|
colors: [],
|
2843
2856
|
lighten: 0,
|
@@ -2875,8 +2888,8 @@ function genDefaults$1() {
|
|
2875
2888
|
'activated-opacity': 0.12,
|
2876
2889
|
'pressed-opacity': 0.12,
|
2877
2890
|
'dragged-opacity': 0.08,
|
2878
|
-
'theme-kbd': '#
|
2879
|
-
'theme-on-kbd': '#
|
2891
|
+
'theme-kbd': '#EEEEEE',
|
2892
|
+
'theme-on-kbd': '#000000',
|
2880
2893
|
'theme-code': '#F5F5F5',
|
2881
2894
|
'theme-on-code': '#000000'
|
2882
2895
|
}
|
@@ -2912,14 +2925,17 @@ function genDefaults$1() {
|
|
2912
2925
|
'activated-opacity': 0.12,
|
2913
2926
|
'pressed-opacity': 0.16,
|
2914
2927
|
'dragged-opacity': 0.08,
|
2915
|
-
'theme-kbd': '#
|
2928
|
+
'theme-kbd': '#424242',
|
2916
2929
|
'theme-on-kbd': '#FFFFFF',
|
2917
2930
|
'theme-code': '#343434',
|
2918
2931
|
'theme-on-code': '#CCCCCC'
|
2919
2932
|
}
|
2920
2933
|
}
|
2921
2934
|
},
|
2922
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2935
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2936
|
+
scoped: false,
|
2937
|
+
unimportant: false,
|
2938
|
+
utilities: true
|
2923
2939
|
};
|
2924
2940
|
}
|
2925
2941
|
function parseThemeOptions() {
|
@@ -2942,21 +2958,21 @@ function parseThemeOptions() {
|
|
2942
2958
|
function createCssClass(lines, selector, content, scope) {
|
2943
2959
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2944
2960
|
}
|
2945
|
-
function genCssVariables(theme) {
|
2961
|
+
function genCssVariables(theme, prefix) {
|
2946
2962
|
const lightOverlay = theme.dark ? 2 : 1;
|
2947
2963
|
const darkOverlay = theme.dark ? 1 : 2;
|
2948
2964
|
const variables = [];
|
2949
2965
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2950
2966
|
const rgb = parseColor(value);
|
2951
|
-
variables.push(
|
2967
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2952
2968
|
if (!key.startsWith('on-')) {
|
2953
|
-
variables.push(
|
2969
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2954
2970
|
}
|
2955
2971
|
}
|
2956
2972
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2957
2973
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2958
2974
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2959
|
-
variables.push(
|
2975
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2960
2976
|
}
|
2961
2977
|
return variables;
|
2962
2978
|
}
|
@@ -3000,7 +3016,8 @@ function getScopedSelector(selector, scope) {
|
|
3000
3016
|
const scopeSelector = `:where(${scope})`;
|
3001
3017
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
3002
3018
|
}
|
3003
|
-
function upsertStyles(
|
3019
|
+
function upsertStyles(id, cspNonce, styles) {
|
3020
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
3004
3021
|
if (!styleEl) return;
|
3005
3022
|
styleEl.innerHTML = styles;
|
3006
3023
|
}
|
@@ -3020,8 +3037,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
3020
3037
|
// Composables
|
3021
3038
|
function createTheme(options) {
|
3022
3039
|
const parsedOptions = parseThemeOptions(options);
|
3023
|
-
const
|
3040
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
3024
3041
|
const themes = ref(parsedOptions.themes);
|
3042
|
+
const systemName = shallowRef('light');
|
3043
|
+
const name = computed({
|
3044
|
+
get() {
|
3045
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
3046
|
+
},
|
3047
|
+
set(val) {
|
3048
|
+
_name.value = val;
|
3049
|
+
}
|
3050
|
+
});
|
3025
3051
|
const computedThemes = computed(() => {
|
3026
3052
|
const acc = {};
|
3027
3053
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -3042,28 +3068,49 @@ function createTheme(options) {
|
|
3042
3068
|
const current = toRef(() => computedThemes.value[name.value]);
|
3043
3069
|
const styles = computed(() => {
|
3044
3070
|
const lines = [];
|
3071
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
3072
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
3045
3073
|
if (current.value?.dark) {
|
3046
3074
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
3047
3075
|
}
|
3048
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
3076
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
3049
3077
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
3050
|
-
createCssClass(lines,
|
3051
|
-
}
|
3052
|
-
|
3053
|
-
|
3054
|
-
|
3055
|
-
|
3056
|
-
|
3057
|
-
|
3058
|
-
|
3059
|
-
|
3060
|
-
|
3061
|
-
|
3078
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
3079
|
+
}
|
3080
|
+
if (parsedOptions.utilities) {
|
3081
|
+
const bgLines = [];
|
3082
|
+
const fgLines = [];
|
3083
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
3084
|
+
for (const key of colors) {
|
3085
|
+
if (key.startsWith('on-')) {
|
3086
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3087
|
+
} else {
|
3088
|
+
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);
|
3089
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
3090
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
3091
|
+
}
|
3062
3092
|
}
|
3093
|
+
lines.push(...bgLines, ...fgLines);
|
3063
3094
|
}
|
3064
|
-
lines.push(...bgLines, ...fgLines);
|
3065
3095
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
3066
3096
|
});
|
3097
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
3098
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
3099
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
3100
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
3101
|
+
function updateSystemName() {
|
3102
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
3103
|
+
}
|
3104
|
+
updateSystemName();
|
3105
|
+
media.addEventListener('change', updateSystemName, {
|
3106
|
+
passive: true
|
3107
|
+
});
|
3108
|
+
if (getCurrentScope()) {
|
3109
|
+
onScopeDispose(() => {
|
3110
|
+
media.removeEventListener('change', updateSystemName);
|
3111
|
+
});
|
3112
|
+
}
|
3113
|
+
}
|
3067
3114
|
function install(app) {
|
3068
3115
|
if (parsedOptions.isDisabled) return;
|
3069
3116
|
const head = app._context.provides.usehead;
|
@@ -3101,22 +3148,55 @@ function createTheme(options) {
|
|
3101
3148
|
updateStyles();
|
3102
3149
|
}
|
3103
3150
|
function updateStyles() {
|
3104
|
-
upsertStyles(
|
3151
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
3105
3152
|
}
|
3106
3153
|
}
|
3107
3154
|
}
|
3108
|
-
|
3155
|
+
function change(themeName) {
|
3156
|
+
if (!themeNames.value.includes(themeName)) {
|
3157
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3158
|
+
return;
|
3159
|
+
}
|
3160
|
+
name.value = themeName;
|
3161
|
+
}
|
3162
|
+
function cycle() {
|
3163
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
3164
|
+
const currentIndex = themeArray.indexOf(name.value);
|
3165
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
3166
|
+
change(themeArray[nextIndex]);
|
3167
|
+
}
|
3168
|
+
function toggle() {
|
3169
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
3170
|
+
cycle(themeArray);
|
3171
|
+
}
|
3172
|
+
const globalName = new Proxy(name, {
|
3173
|
+
get(target, prop) {
|
3174
|
+
return target[prop];
|
3175
|
+
},
|
3176
|
+
set(target, prop, val) {
|
3177
|
+
if (prop === 'value') {
|
3178
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
3179
|
+
}
|
3180
|
+
// @ts-expect-error
|
3181
|
+
target[prop] = val;
|
3182
|
+
return true;
|
3183
|
+
}
|
3184
|
+
});
|
3109
3185
|
return {
|
3110
3186
|
install,
|
3187
|
+
change,
|
3188
|
+
cycle,
|
3189
|
+
toggle,
|
3111
3190
|
isDisabled: parsedOptions.isDisabled,
|
3112
3191
|
name,
|
3113
3192
|
themes,
|
3114
3193
|
current,
|
3115
3194
|
computedThemes,
|
3195
|
+
prefix: parsedOptions.prefix,
|
3116
3196
|
themeClasses,
|
3117
3197
|
styles,
|
3118
3198
|
global: {
|
3119
|
-
name,
|
3199
|
+
name: globalName,
|
3120
3200
|
current
|
3121
3201
|
}
|
3122
3202
|
};
|
@@ -3127,7 +3207,7 @@ function provideTheme(props) {
|
|
3127
3207
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
3128
3208
|
const name = toRef(() => props.theme ?? theme.name.value);
|
3129
3209
|
const current = toRef(() => theme.themes.value[name.value]);
|
3130
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
3210
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
3131
3211
|
const newTheme = {
|
3132
3212
|
...theme,
|
3133
3213
|
name,
|
@@ -4231,7 +4311,10 @@ const makeVToolbarProps = propsFactory({
|
|
4231
4311
|
default: 'default',
|
4232
4312
|
validator: v => allowedDensities$1.includes(v)
|
4233
4313
|
},
|
4234
|
-
extended:
|
4314
|
+
extended: {
|
4315
|
+
type: Boolean,
|
4316
|
+
default: null
|
4317
|
+
},
|
4235
4318
|
extensionHeight: {
|
4236
4319
|
type: [Number, String],
|
4237
4320
|
default: 48
|
@@ -4279,7 +4362,7 @@ const VToolbar = genericComponent()({
|
|
4279
4362
|
const {
|
4280
4363
|
rtlClasses
|
4281
4364
|
} = useRtl();
|
4282
|
-
const isExtended = shallowRef(
|
4365
|
+
const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
|
4283
4366
|
const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
|
4284
4367
|
const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);
|
4285
4368
|
provideDefaults({
|
@@ -4291,7 +4374,7 @@ const VToolbar = genericComponent()({
|
|
4291
4374
|
const hasTitle = !!(props.title || slots.title);
|
4292
4375
|
const hasImage = !!(slots.image || props.image);
|
4293
4376
|
const extension = slots.extension?.();
|
4294
|
-
isExtended.value =
|
4377
|
+
isExtended.value = props.extended === null ? !!extension : props.extended;
|
4295
4378
|
return createVNode(props.tag, {
|
4296
4379
|
"class": normalizeClass(['v-toolbar', {
|
4297
4380
|
'v-toolbar--absolute': props.absolute,
|
@@ -4674,9 +4757,15 @@ function useVariant(props) {
|
|
4674
4757
|
};
|
4675
4758
|
}
|
4676
4759
|
|
4760
|
+
// Types
|
4761
|
+
|
4677
4762
|
const makeVBtnGroupProps = propsFactory({
|
4678
4763
|
baseColor: String,
|
4679
4764
|
divided: Boolean,
|
4765
|
+
direction: {
|
4766
|
+
type: String,
|
4767
|
+
default: 'horizontal'
|
4768
|
+
},
|
4680
4769
|
...makeBorderProps(),
|
4681
4770
|
...makeComponentProps(),
|
4682
4771
|
...makeDensityProps(),
|
@@ -4710,7 +4799,7 @@ const VBtnGroup = genericComponent()({
|
|
4710
4799
|
} = useRounded(props);
|
4711
4800
|
provideDefaults({
|
4712
4801
|
VBtn: {
|
4713
|
-
height: 'auto',
|
4802
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4714
4803
|
baseColor: toRef(() => props.baseColor),
|
4715
4804
|
color: toRef(() => props.color),
|
4716
4805
|
density: toRef(() => props.density),
|
@@ -4720,7 +4809,7 @@ const VBtnGroup = genericComponent()({
|
|
4720
4809
|
});
|
4721
4810
|
useRender(() => {
|
4722
4811
|
return createVNode(props.tag, {
|
4723
|
-
"class": normalizeClass(['v-btn-group', {
|
4812
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4724
4813
|
'v-btn-group--divided': props.divided
|
4725
4814
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4726
4815
|
"style": normalizeStyle(props.style)
|
@@ -4887,6 +4976,7 @@ function useGroup(props, injectKey) {
|
|
4887
4976
|
} else {
|
4888
4977
|
const isSelected = selected.value.includes(id);
|
4889
4978
|
if (props.mandatory && isSelected) return;
|
4979
|
+
if (!isSelected && !value) return;
|
4890
4980
|
selected.value = value ?? !isSelected ? [id] : [];
|
4891
4981
|
}
|
4892
4982
|
}
|
@@ -5112,7 +5202,7 @@ function useIntersectionObserver(callback, options) {
|
|
5112
5202
|
const observer = new IntersectionObserver(entries => {
|
5113
5203
|
isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
|
5114
5204
|
}, options);
|
5115
|
-
|
5205
|
+
onScopeDispose(() => {
|
5116
5206
|
observer.disconnect();
|
5117
5207
|
});
|
5118
5208
|
watch(intersectionRef, (newValue, oldValue) => {
|
@@ -5643,9 +5733,9 @@ function useBackButton(router, cb) {
|
|
5643
5733
|
|
5644
5734
|
function useSelectLink(link, select) {
|
5645
5735
|
watch(() => link.isActive?.value, isActive => {
|
5646
|
-
if (link.isLink.value && isActive && select) {
|
5736
|
+
if (link.isLink.value && isActive != null && select) {
|
5647
5737
|
nextTick(() => {
|
5648
|
-
select(
|
5738
|
+
select(isActive);
|
5649
5739
|
});
|
5650
5740
|
}
|
5651
5741
|
}, {
|
@@ -5843,8 +5933,8 @@ function rippleCancelShow(e) {
|
|
5843
5933
|
window.clearTimeout(element._ripple.showTimer);
|
5844
5934
|
}
|
5845
5935
|
let keyboardRipple = false;
|
5846
|
-
function keyboardRippleShow(e) {
|
5847
|
-
if (!keyboardRipple && (e.keyCode
|
5936
|
+
function keyboardRippleShow(e, keys) {
|
5937
|
+
if (!keyboardRipple && keys.includes(e.keyCode)) {
|
5848
5938
|
keyboardRipple = true;
|
5849
5939
|
rippleShow(e);
|
5850
5940
|
}
|
@@ -5872,9 +5962,12 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5872
5962
|
el._ripple.enabled = enabled;
|
5873
5963
|
el._ripple.centered = modifiers.center;
|
5874
5964
|
el._ripple.circle = modifiers.circle;
|
5875
|
-
|
5876
|
-
|
5965
|
+
const bindingValue = isObject(value) ? value : {};
|
5966
|
+
if (bindingValue.class) {
|
5967
|
+
el._ripple.class = bindingValue.class;
|
5877
5968
|
}
|
5969
|
+
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5970
|
+
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5878
5971
|
if (enabled && !wasEnabled) {
|
5879
5972
|
if (modifiers.stop) {
|
5880
5973
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5896,7 +5989,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5896
5989
|
el.addEventListener('mousedown', rippleShow);
|
5897
5990
|
el.addEventListener('mouseup', rippleHide);
|
5898
5991
|
el.addEventListener('mouseleave', rippleHide);
|
5899
|
-
el.addEventListener('keydown', keyboardRippleShow);
|
5992
|
+
el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
|
5900
5993
|
el.addEventListener('keyup', keyboardRippleHide);
|
5901
5994
|
el.addEventListener('blur', focusRippleHide);
|
5902
5995
|
|
@@ -5916,7 +6009,9 @@ function removeListeners(el) {
|
|
5916
6009
|
el.removeEventListener('touchcancel', rippleHide);
|
5917
6010
|
el.removeEventListener('mouseup', rippleHide);
|
5918
6011
|
el.removeEventListener('mouseleave', rippleHide);
|
5919
|
-
el.
|
6012
|
+
if (el._ripple?.keyDownHandler) {
|
6013
|
+
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
6014
|
+
}
|
5920
6015
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5921
6016
|
el.removeEventListener('dragstart', rippleHide);
|
5922
6017
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5925,8 +6020,8 @@ function mounted$4(el, binding) {
|
|
5925
6020
|
updateRipple(el, binding, false);
|
5926
6021
|
}
|
5927
6022
|
function unmounted$4(el) {
|
5928
|
-
delete el._ripple;
|
5929
6023
|
removeListeners(el);
|
6024
|
+
delete el._ripple;
|
5930
6025
|
}
|
5931
6026
|
function updated$1(el, binding) {
|
5932
6027
|
if (binding.value === binding.oldValue) {
|
@@ -6199,6 +6294,31 @@ const VAppBarTitle = genericComponent()({
|
|
6199
6294
|
// Utilities
|
6200
6295
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6201
6296
|
|
6297
|
+
// Utilities
|
6298
|
+
|
6299
|
+
// Types
|
6300
|
+
|
6301
|
+
// Types
|
6302
|
+
|
6303
|
+
// Composables
|
6304
|
+
const makeIconSizeProps = propsFactory({
|
6305
|
+
iconSize: [Number, String],
|
6306
|
+
iconSizes: {
|
6307
|
+
type: Array,
|
6308
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6309
|
+
}
|
6310
|
+
}, 'iconSize');
|
6311
|
+
function useIconSizes(props, fallback) {
|
6312
|
+
const iconSize = computed(() => {
|
6313
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6314
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6315
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6316
|
+
});
|
6317
|
+
return {
|
6318
|
+
iconSize
|
6319
|
+
};
|
6320
|
+
}
|
6321
|
+
|
6202
6322
|
// Types
|
6203
6323
|
|
6204
6324
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6238,6 +6358,7 @@ const makeVAlertProps = propsFactory({
|
|
6238
6358
|
...makeDensityProps(),
|
6239
6359
|
...makeDimensionProps(),
|
6240
6360
|
...makeElevationProps(),
|
6361
|
+
...makeIconSizeProps(),
|
6241
6362
|
...makeLocationProps(),
|
6242
6363
|
...makePositionProps(),
|
6243
6364
|
...makeRoundedProps(),
|
@@ -6265,6 +6386,9 @@ const VAlert = genericComponent()({
|
|
6265
6386
|
if (!props.type) return props.icon;
|
6266
6387
|
return props.icon ?? `$${props.type}`;
|
6267
6388
|
});
|
6389
|
+
const {
|
6390
|
+
iconSize
|
6391
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6268
6392
|
const {
|
6269
6393
|
themeClasses
|
6270
6394
|
} = provideTheme(props);
|
@@ -6312,6 +6436,11 @@ const VAlert = genericComponent()({
|
|
6312
6436
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6313
6437
|
const hasTitle = !!(slots.title || props.title);
|
6314
6438
|
const hasClose = !!(slots.close || props.closable);
|
6439
|
+
const iconProps = {
|
6440
|
+
density: props.density,
|
6441
|
+
icon: icon.value,
|
6442
|
+
size: iconSize.value
|
6443
|
+
};
|
6315
6444
|
return isActive.value && createVNode(props.tag, {
|
6316
6445
|
"class": normalizeClass(['v-alert', props.border && {
|
6317
6446
|
'v-alert--border': !!props.border,
|
@@ -6329,19 +6458,14 @@ const VAlert = genericComponent()({
|
|
6329
6458
|
}, null), hasPrepend && createElementVNode("div", {
|
6330
6459
|
"key": "prepend",
|
6331
6460
|
"class": "v-alert__prepend"
|
6332
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
6333
|
-
"key": "prepend-icon"
|
6334
|
-
|
6335
|
-
"icon": icon.value,
|
6336
|
-
"size": props.prominent ? 44 : 28
|
6337
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6461
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6462
|
+
"key": "prepend-icon"
|
6463
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6338
6464
|
"key": "prepend-defaults",
|
6339
6465
|
"disabled": !icon.value,
|
6340
6466
|
"defaults": {
|
6341
6467
|
VIcon: {
|
6342
|
-
|
6343
|
-
icon: icon.value,
|
6344
|
-
size: props.prominent ? 44 : 28
|
6468
|
+
...iconProps
|
6345
6469
|
}
|
6346
6470
|
}
|
6347
6471
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7866,6 +7990,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7866
7990
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7867
7991
|
const makeVSlideGroupProps = propsFactory({
|
7868
7992
|
centerActive: Boolean,
|
7993
|
+
contentClass: null,
|
7869
7994
|
direction: {
|
7870
7995
|
type: String,
|
7871
7996
|
default: 'horizontal'
|
@@ -8178,7 +8303,7 @@ const VSlideGroup = genericComponent()({
|
|
8178
8303
|
})]), createElementVNode("div", {
|
8179
8304
|
"key": "container",
|
8180
8305
|
"ref": containerRef,
|
8181
|
-
"class":
|
8306
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
8182
8307
|
"onScroll": onScroll
|
8183
8308
|
}, [createElementVNode("div", {
|
8184
8309
|
"ref": contentRef,
|
@@ -8541,16 +8666,85 @@ const VChip = genericComponent()({
|
|
8541
8666
|
}
|
8542
8667
|
});
|
8543
8668
|
|
8669
|
+
const makeVDividerProps = propsFactory({
|
8670
|
+
color: String,
|
8671
|
+
inset: Boolean,
|
8672
|
+
length: [Number, String],
|
8673
|
+
opacity: [Number, String],
|
8674
|
+
thickness: [Number, String],
|
8675
|
+
vertical: Boolean,
|
8676
|
+
...makeComponentProps(),
|
8677
|
+
...makeThemeProps()
|
8678
|
+
}, 'VDivider');
|
8679
|
+
const VDivider = genericComponent()({
|
8680
|
+
name: 'VDivider',
|
8681
|
+
props: makeVDividerProps(),
|
8682
|
+
setup(props, _ref) {
|
8683
|
+
let {
|
8684
|
+
attrs,
|
8685
|
+
slots
|
8686
|
+
} = _ref;
|
8687
|
+
const {
|
8688
|
+
themeClasses
|
8689
|
+
} = provideTheme(props);
|
8690
|
+
const {
|
8691
|
+
textColorClasses,
|
8692
|
+
textColorStyles
|
8693
|
+
} = useTextColor(() => props.color);
|
8694
|
+
const dividerStyles = computed(() => {
|
8695
|
+
const styles = {};
|
8696
|
+
if (props.length) {
|
8697
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8698
|
+
}
|
8699
|
+
if (props.thickness) {
|
8700
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8701
|
+
}
|
8702
|
+
return styles;
|
8703
|
+
});
|
8704
|
+
useRender(() => {
|
8705
|
+
const divider = createElementVNode("hr", {
|
8706
|
+
"class": normalizeClass([{
|
8707
|
+
'v-divider': true,
|
8708
|
+
'v-divider--inset': props.inset,
|
8709
|
+
'v-divider--vertical': props.vertical
|
8710
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8711
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8712
|
+
'--v-border-opacity': props.opacity
|
8713
|
+
}, props.style]),
|
8714
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8715
|
+
"role": `${attrs.role || 'separator'}`
|
8716
|
+
}, null);
|
8717
|
+
if (!slots.default) return divider;
|
8718
|
+
return createElementVNode("div", {
|
8719
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8720
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8721
|
+
'v-divider__wrapper--inset': props.inset
|
8722
|
+
}])
|
8723
|
+
}, [divider, createElementVNode("div", {
|
8724
|
+
"class": "v-divider__content"
|
8725
|
+
}, [slots.default()]), divider]);
|
8726
|
+
});
|
8727
|
+
return {};
|
8728
|
+
}
|
8729
|
+
});
|
8730
|
+
|
8544
8731
|
// Utilities
|
8545
8732
|
|
8546
8733
|
// List
|
8547
8734
|
const ListKey = Symbol.for('vuetify:list');
|
8548
8735
|
function createList() {
|
8736
|
+
let {
|
8737
|
+
filterable
|
8738
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8739
|
+
filterable: false
|
8740
|
+
};
|
8549
8741
|
const parent = inject$1(ListKey, {
|
8742
|
+
filterable: false,
|
8550
8743
|
hasPrepend: shallowRef(false),
|
8551
8744
|
updateHasPrepend: () => null
|
8552
8745
|
});
|
8553
8746
|
const data = {
|
8747
|
+
filterable: parent.filterable || filterable,
|
8554
8748
|
hasPrepend: shallowRef(false),
|
8555
8749
|
updateHasPrepend: value => {
|
8556
8750
|
if (value) data.hasPrepend.value = value;
|
@@ -9259,6 +9453,7 @@ const makeVListGroupProps = propsFactory({
|
|
9259
9453
|
type: IconValue,
|
9260
9454
|
default: '$expand'
|
9261
9455
|
},
|
9456
|
+
rawId: [String, Number],
|
9262
9457
|
prependIcon: IconValue,
|
9263
9458
|
appendIcon: IconValue,
|
9264
9459
|
fluid: Boolean,
|
@@ -9280,13 +9475,12 @@ const VListGroup = genericComponent()({
|
|
9280
9475
|
open,
|
9281
9476
|
id: _id
|
9282
9477
|
} = useNestedItem(() => props.value, true);
|
9283
|
-
const id = computed(() => `v-list-group--id-${String(_id.value)}`);
|
9478
|
+
const id = computed(() => `v-list-group--id-${String(props.rawId ?? _id.value)}`);
|
9284
9479
|
const list = useList();
|
9285
9480
|
const {
|
9286
9481
|
isBooted
|
9287
9482
|
} = useSsrBoot();
|
9288
9483
|
function onClick(e) {
|
9289
|
-
e.stopPropagation();
|
9290
9484
|
if (['INPUT', 'TEXTAREA'].includes(e.target?.tagName)) return;
|
9291
9485
|
open(!isOpen.value, e);
|
9292
9486
|
}
|
@@ -9502,6 +9696,9 @@ const VListItem = genericComponent()({
|
|
9502
9696
|
roundedClasses
|
9503
9697
|
} = useRounded(roundedProps);
|
9504
9698
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9699
|
+
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9700
|
+
keys: [keyCodes.enter]
|
9701
|
+
} : props.ripple);
|
9505
9702
|
const slotProps = computed(() => ({
|
9506
9703
|
isActive: isActive.value,
|
9507
9704
|
select,
|
@@ -9526,8 +9723,9 @@ const VListItem = genericComponent()({
|
|
9526
9723
|
function onKeyDown(e) {
|
9527
9724
|
const target = e.target;
|
9528
9725
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9529
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
9726
|
+
if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
|
9530
9727
|
e.preventDefault();
|
9728
|
+
e.stopPropagation();
|
9531
9729
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9532
9730
|
}
|
9533
9731
|
}
|
@@ -9637,7 +9835,7 @@ const VListItem = genericComponent()({
|
|
9637
9835
|
}), createElementVNode("div", {
|
9638
9836
|
"class": "v-list-item__spacer"
|
9639
9837
|
}, null)])]
|
9640
|
-
}), [[Ripple, isClickable.value &&
|
9838
|
+
}), [[Ripple, isClickable.value && rippleOptions.value]]);
|
9641
9839
|
});
|
9642
9840
|
return {
|
9643
9841
|
activate,
|
@@ -9692,68 +9890,6 @@ const VListSubheader = genericComponent()({
|
|
9692
9890
|
}
|
9693
9891
|
});
|
9694
9892
|
|
9695
|
-
const makeVDividerProps = propsFactory({
|
9696
|
-
color: String,
|
9697
|
-
inset: Boolean,
|
9698
|
-
length: [Number, String],
|
9699
|
-
opacity: [Number, String],
|
9700
|
-
thickness: [Number, String],
|
9701
|
-
vertical: Boolean,
|
9702
|
-
...makeComponentProps(),
|
9703
|
-
...makeThemeProps()
|
9704
|
-
}, 'VDivider');
|
9705
|
-
const VDivider = genericComponent()({
|
9706
|
-
name: 'VDivider',
|
9707
|
-
props: makeVDividerProps(),
|
9708
|
-
setup(props, _ref) {
|
9709
|
-
let {
|
9710
|
-
attrs,
|
9711
|
-
slots
|
9712
|
-
} = _ref;
|
9713
|
-
const {
|
9714
|
-
themeClasses
|
9715
|
-
} = provideTheme(props);
|
9716
|
-
const {
|
9717
|
-
textColorClasses,
|
9718
|
-
textColorStyles
|
9719
|
-
} = useTextColor(() => props.color);
|
9720
|
-
const dividerStyles = computed(() => {
|
9721
|
-
const styles = {};
|
9722
|
-
if (props.length) {
|
9723
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9724
|
-
}
|
9725
|
-
if (props.thickness) {
|
9726
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9727
|
-
}
|
9728
|
-
return styles;
|
9729
|
-
});
|
9730
|
-
useRender(() => {
|
9731
|
-
const divider = createElementVNode("hr", {
|
9732
|
-
"class": normalizeClass([{
|
9733
|
-
'v-divider': true,
|
9734
|
-
'v-divider--inset': props.inset,
|
9735
|
-
'v-divider--vertical': props.vertical
|
9736
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9737
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9738
|
-
'--v-border-opacity': props.opacity
|
9739
|
-
}, props.style]),
|
9740
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9741
|
-
"role": `${attrs.role || 'separator'}`
|
9742
|
-
}, null);
|
9743
|
-
if (!slots.default) return divider;
|
9744
|
-
return createElementVNode("div", {
|
9745
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9746
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9747
|
-
'v-divider__wrapper--inset': props.inset
|
9748
|
-
}])
|
9749
|
-
}, [divider, createElementVNode("div", {
|
9750
|
-
"class": "v-divider__content"
|
9751
|
-
}, [slots.default()]), divider]);
|
9752
|
-
});
|
9753
|
-
return {};
|
9754
|
-
}
|
9755
|
-
});
|
9756
|
-
|
9757
9893
|
// Types
|
9758
9894
|
|
9759
9895
|
const makeVListChildrenProps = propsFactory({
|
@@ -9804,9 +9940,10 @@ const VListChildren = genericComponent()({
|
|
9804
9940
|
}) : undefined
|
9805
9941
|
};
|
9806
9942
|
const listGroupProps = VListGroup.filterProps(itemProps);
|
9807
|
-
return children ? createVNode(VListGroup, mergeProps({
|
9808
|
-
"value": itemProps?.value
|
9809
|
-
|
9943
|
+
return children ? createVNode(VListGroup, mergeProps(listGroupProps, {
|
9944
|
+
"value": props.returnObject ? item : itemProps?.value,
|
9945
|
+
"rawId": itemProps?.value
|
9946
|
+
}), {
|
9810
9947
|
activator: _ref3 => {
|
9811
9948
|
let {
|
9812
9949
|
props: activatorProps
|
@@ -10022,6 +10159,7 @@ const makeVListProps = propsFactory({
|
|
10022
10159
|
activeClass: String,
|
10023
10160
|
bgColor: String,
|
10024
10161
|
disabled: Boolean,
|
10162
|
+
filterable: Boolean,
|
10025
10163
|
expandIcon: IconValue,
|
10026
10164
|
collapseIcon: IconValue,
|
10027
10165
|
lines: {
|
@@ -10105,7 +10243,9 @@ const VList = genericComponent()({
|
|
10105
10243
|
const activeColor = toRef(() => props.activeColor);
|
10106
10244
|
const baseColor = toRef(() => props.baseColor);
|
10107
10245
|
const color = toRef(() => props.color);
|
10108
|
-
createList(
|
10246
|
+
createList({
|
10247
|
+
filterable: props.filterable
|
10248
|
+
});
|
10109
10249
|
provideDefaults({
|
10110
10250
|
VListGroup: {
|
10111
10251
|
activeColor,
|
@@ -11788,6 +11928,7 @@ const makeVMenuProps = propsFactory({
|
|
11788
11928
|
// disableKeys: Boolean,
|
11789
11929
|
id: String,
|
11790
11930
|
submenu: Boolean,
|
11931
|
+
disableInitialFocus: Boolean,
|
11791
11932
|
...omit(makeVOverlayProps({
|
11792
11933
|
closeDelay: 250,
|
11793
11934
|
closeOnContentClick: true,
|
@@ -11862,7 +12003,7 @@ const VMenu = genericComponent()({
|
|
11862
12003
|
watch(isActive, val => {
|
11863
12004
|
if (val) {
|
11864
12005
|
parent?.register();
|
11865
|
-
if (IN_BROWSER) {
|
12006
|
+
if (IN_BROWSER && !props.disableInitialFocus) {
|
11866
12007
|
document.addEventListener('focusin', onFocusIn, {
|
11867
12008
|
once: true
|
11868
12009
|
});
|
@@ -12342,6 +12483,16 @@ const VField = genericComponent()({
|
|
12342
12483
|
}
|
12343
12484
|
});
|
12344
12485
|
|
12486
|
+
function useAutofocus(props) {
|
12487
|
+
function onIntersect(isIntersecting, entries) {
|
12488
|
+
if (!props.autofocus || !isIntersecting) return;
|
12489
|
+
entries[0].target?.focus?.();
|
12490
|
+
}
|
12491
|
+
return {
|
12492
|
+
onIntersect
|
12493
|
+
};
|
12494
|
+
}
|
12495
|
+
|
12345
12496
|
// Types
|
12346
12497
|
|
12347
12498
|
const activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month'];
|
@@ -12388,6 +12539,9 @@ const VTextField = genericComponent()({
|
|
12388
12539
|
focus,
|
12389
12540
|
blur
|
12390
12541
|
} = useFocus(props);
|
12542
|
+
const {
|
12543
|
+
onIntersect
|
12544
|
+
} = useAutofocus(props);
|
12391
12545
|
const counterValue = computed(() => {
|
12392
12546
|
return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : (model.value ?? '').toString().length;
|
12393
12547
|
});
|
@@ -12397,10 +12551,6 @@ const VTextField = genericComponent()({
|
|
12397
12551
|
return props.counter;
|
12398
12552
|
});
|
12399
12553
|
const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));
|
12400
|
-
function onIntersect(isIntersecting, entries) {
|
12401
|
-
if (!props.autofocus || !isIntersecting) return;
|
12402
|
-
entries[0].target?.focus?.();
|
12403
|
-
}
|
12404
12554
|
const vInputRef = ref();
|
12405
12555
|
const vFieldRef = ref();
|
12406
12556
|
const inputRef = ref();
|
@@ -12690,7 +12840,12 @@ function useVirtual(props, items) {
|
|
12690
12840
|
}
|
12691
12841
|
function calculateOffset(index) {
|
12692
12842
|
index = clamp(index, 0, items.value.length - 1);
|
12693
|
-
|
12843
|
+
const whole = Math.floor(index);
|
12844
|
+
const fraction = index % 1;
|
12845
|
+
const next = whole + 1;
|
12846
|
+
const wholeOffset = offsets[whole] || 0;
|
12847
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12848
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12694
12849
|
}
|
12695
12850
|
function calculateIndex(scrollTop) {
|
12696
12851
|
return binaryClosest(offsets, scrollTop);
|
@@ -13044,6 +13199,7 @@ const makeSelectProps = propsFactory({
|
|
13044
13199
|
},
|
13045
13200
|
openOnClear: Boolean,
|
13046
13201
|
itemColor: String,
|
13202
|
+
noAutoScroll: Boolean,
|
13047
13203
|
...makeItemsProps({
|
13048
13204
|
itemChildren: false
|
13049
13205
|
})
|
@@ -13258,7 +13414,7 @@ const VSelect = genericComponent()({
|
|
13258
13414
|
watch(menu, () => {
|
13259
13415
|
if (!props.hideSelected && menu.value && model.value.length) {
|
13260
13416
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
13261
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13417
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
13262
13418
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
13263
13419
|
});
|
13264
13420
|
}
|
@@ -13351,6 +13507,22 @@ const VSelect = genericComponent()({
|
|
13351
13507
|
key: item.value,
|
13352
13508
|
onClick: () => select(item, null)
|
13353
13509
|
});
|
13510
|
+
if (item.raw.type === 'divider') {
|
13511
|
+
return slots.divider?.({
|
13512
|
+
props: item.raw,
|
13513
|
+
index
|
13514
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13515
|
+
"key": `divider-${index}`
|
13516
|
+
}), null);
|
13517
|
+
}
|
13518
|
+
if (item.raw.type === 'subheader') {
|
13519
|
+
return slots.subheader?.({
|
13520
|
+
props: item.raw,
|
13521
|
+
index
|
13522
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13523
|
+
"key": `subheader-${index}`
|
13524
|
+
}), null);
|
13525
|
+
}
|
13354
13526
|
return slots.item?.({
|
13355
13527
|
item,
|
13356
13528
|
index,
|
@@ -13511,6 +13683,9 @@ function filterItems(items, query, options) {
|
|
13511
13683
|
let match = -1;
|
13512
13684
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13513
13685
|
if (typeof item === 'object') {
|
13686
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13687
|
+
continue;
|
13688
|
+
}
|
13514
13689
|
const filterKeys = keys || Object.keys(transformed);
|
13515
13690
|
for (const key of filterKeys) {
|
13516
13691
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13713,7 +13888,7 @@ const VAutocomplete = genericComponent()({
|
|
13713
13888
|
menu.value = !menu.value;
|
13714
13889
|
}
|
13715
13890
|
function onListKeydown(e) {
|
13716
|
-
if (e.key
|
13891
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
13717
13892
|
vTextFieldRef.value?.focus();
|
13718
13893
|
}
|
13719
13894
|
}
|
@@ -13918,6 +14093,7 @@ const VAutocomplete = genericComponent()({
|
|
13918
14093
|
}, props.menuProps), {
|
13919
14094
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13920
14095
|
"ref": listRef,
|
14096
|
+
"filterable": true,
|
13921
14097
|
"selected": selectedValues.value,
|
13922
14098
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13923
14099
|
"onMousedown": e => e.preventDefault(),
|
@@ -13949,6 +14125,22 @@ const VAutocomplete = genericComponent()({
|
|
13949
14125
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13950
14126
|
onClick: () => select(item, null)
|
13951
14127
|
});
|
14128
|
+
if (item.raw.type === 'divider') {
|
14129
|
+
return slots.divider?.({
|
14130
|
+
props: item.raw,
|
14131
|
+
index
|
14132
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
14133
|
+
"key": `divider-${index}`
|
14134
|
+
}), null);
|
14135
|
+
}
|
14136
|
+
if (item.raw.type === 'subheader') {
|
14137
|
+
return slots.subheader?.({
|
14138
|
+
props: item.raw,
|
14139
|
+
index
|
14140
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
14141
|
+
"key": `subheader-${index}`
|
14142
|
+
}), null);
|
14143
|
+
}
|
13952
14144
|
return slots.item?.({
|
13953
14145
|
item,
|
13954
14146
|
index,
|
@@ -14093,7 +14285,8 @@ const makeVBadgeProps = propsFactory({
|
|
14093
14285
|
...makeThemeProps(),
|
14094
14286
|
...makeTransitionProps({
|
14095
14287
|
transition: 'scale-rotate-transition'
|
14096
|
-
})
|
14288
|
+
}),
|
14289
|
+
...makeDimensionProps()
|
14097
14290
|
}, 'VBadge');
|
14098
14291
|
const VBadge = genericComponent()({
|
14099
14292
|
name: 'VBadge',
|
@@ -14123,6 +14316,9 @@ const VBadge = genericComponent()({
|
|
14123
14316
|
const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
|
14124
14317
|
return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
|
14125
14318
|
});
|
14319
|
+
const {
|
14320
|
+
dimensionStyles
|
14321
|
+
} = useDimension(props);
|
14126
14322
|
useRender(() => {
|
14127
14323
|
const value = Number(props.content);
|
14128
14324
|
const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
|
@@ -14144,7 +14340,7 @@ const VBadge = genericComponent()({
|
|
14144
14340
|
}, {
|
14145
14341
|
default: () => [withDirectives(createElementVNode("span", mergeProps({
|
14146
14342
|
"class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
|
14147
|
-
"style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
|
14343
|
+
"style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
|
14148
14344
|
"aria-atomic": "true",
|
14149
14345
|
"aria-label": t(props.label, value),
|
14150
14346
|
"aria-live": "polite",
|
@@ -17553,13 +17749,13 @@ function date(value) {
|
|
17553
17749
|
return null;
|
17554
17750
|
}
|
17555
17751
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17556
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17752
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17557
17753
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17558
17754
|
return createRange(7).map(i => {
|
17559
17755
|
const weekday = new Date(sundayJanuarySecond2000);
|
17560
17756
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17561
17757
|
return new Intl.DateTimeFormat(locale, {
|
17562
|
-
weekday: 'narrow'
|
17758
|
+
weekday: weekdayFormat ?? 'narrow'
|
17563
17759
|
}).format(weekday);
|
17564
17760
|
});
|
17565
17761
|
}
|
@@ -18023,9 +18219,9 @@ class VuetifyDateAdapter {
|
|
18023
18219
|
getDiff(date, comparing, unit) {
|
18024
18220
|
return getDiff(date, comparing, unit);
|
18025
18221
|
}
|
18026
|
-
getWeekdays(firstDayOfWeek) {
|
18222
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
18027
18223
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
18028
|
-
return getWeekdays(this.locale, firstDay);
|
18224
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
18029
18225
|
}
|
18030
18226
|
getYear(date) {
|
18031
18227
|
return getYear(date);
|
@@ -18380,6 +18576,7 @@ const VCombobox = genericComponent()({
|
|
18380
18576
|
_search.value = val ?? '';
|
18381
18577
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18382
18578
|
model.value = [transformItem$3(props, val)];
|
18579
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18383
18580
|
}
|
18384
18581
|
if (val && props.multiple && props.delimiters?.length) {
|
18385
18582
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18460,7 +18657,7 @@ const VCombobox = genericComponent()({
|
|
18460
18657
|
menu.value = !menu.value;
|
18461
18658
|
}
|
18462
18659
|
function onListKeydown(e) {
|
18463
|
-
if (e.key
|
18660
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18464
18661
|
vTextFieldRef.value?.focus();
|
18465
18662
|
}
|
18466
18663
|
}
|
@@ -18665,6 +18862,7 @@ const VCombobox = genericComponent()({
|
|
18665
18862
|
}, props.menuProps), {
|
18666
18863
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18667
18864
|
"ref": listRef,
|
18865
|
+
"filterable": true,
|
18668
18866
|
"selected": selectedValues.value,
|
18669
18867
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18670
18868
|
"onMousedown": e => e.preventDefault(),
|
@@ -18696,6 +18894,22 @@ const VCombobox = genericComponent()({
|
|
18696
18894
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18697
18895
|
onClick: () => select(item, null)
|
18698
18896
|
});
|
18897
|
+
if (item.raw.type === 'divider') {
|
18898
|
+
return slots.divider?.({
|
18899
|
+
props: item.raw,
|
18900
|
+
index
|
18901
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18902
|
+
"key": `divider-${index}`
|
18903
|
+
}), null);
|
18904
|
+
}
|
18905
|
+
if (item.raw.type === 'subheader') {
|
18906
|
+
return slots.subheader?.({
|
18907
|
+
props: item.raw,
|
18908
|
+
index
|
18909
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18910
|
+
"key": `subheader-${index}`
|
18911
|
+
}), null);
|
18912
|
+
}
|
18699
18913
|
return slots.item?.({
|
18700
18914
|
item,
|
18701
18915
|
index,
|
@@ -20578,6 +20792,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20578
20792
|
color: String,
|
20579
20793
|
disableSort: Boolean,
|
20580
20794
|
fixedHeader: Boolean,
|
20795
|
+
lastFixed: Boolean,
|
20581
20796
|
multiSort: Boolean,
|
20582
20797
|
sortAscIcon: {
|
20583
20798
|
type: IconValue,
|
@@ -20624,10 +20839,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20624
20839
|
loaderClasses
|
20625
20840
|
} = useLoader(props);
|
20626
20841
|
function getFixedStyles(column, y) {
|
20627
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20842
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20628
20843
|
return {
|
20629
20844
|
position: 'sticky',
|
20630
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20845
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20846
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20631
20847
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20632
20848
|
};
|
20633
20849
|
}
|
@@ -21143,11 +21359,18 @@ const VDataTableRows = genericComponent()({
|
|
21143
21359
|
}
|
21144
21360
|
});
|
21145
21361
|
|
21362
|
+
// Types
|
21363
|
+
|
21146
21364
|
const makeVTableProps = propsFactory({
|
21147
21365
|
fixedHeader: Boolean,
|
21148
21366
|
fixedFooter: Boolean,
|
21149
21367
|
height: [Number, String],
|
21150
21368
|
hover: Boolean,
|
21369
|
+
striped: {
|
21370
|
+
type: String,
|
21371
|
+
default: null,
|
21372
|
+
validator: v => ['even', 'odd'].includes(v)
|
21373
|
+
},
|
21151
21374
|
...makeComponentProps(),
|
21152
21375
|
...makeDensityProps(),
|
21153
21376
|
...makeTagProps(),
|
@@ -21174,7 +21397,9 @@ const VTable = genericComponent()({
|
|
21174
21397
|
'v-table--fixed-footer': props.fixedFooter,
|
21175
21398
|
'v-table--has-top': !!slots.top,
|
21176
21399
|
'v-table--has-bottom': !!slots.bottom,
|
21177
|
-
'v-table--hover': props.hover
|
21400
|
+
'v-table--hover': props.hover,
|
21401
|
+
'v-table--striped-even': props.striped === 'even',
|
21402
|
+
'v-table--striped-odd': props.striped === 'odd'
|
21178
21403
|
}, themeClasses.value, densityClasses.value, props.class]),
|
21179
21404
|
"style": normalizeStyle(props.style)
|
21180
21405
|
}, {
|
@@ -22349,7 +22574,8 @@ const makeCalendarProps = propsFactory({
|
|
22349
22574
|
firstDayOfWeek: {
|
22350
22575
|
type: [Number, String],
|
22351
22576
|
default: undefined
|
22352
|
-
}
|
22577
|
+
},
|
22578
|
+
weekdayFormat: String
|
22353
22579
|
}, 'calendar');
|
22354
22580
|
function useCalendar(props) {
|
22355
22581
|
const adapter = useDate();
|
@@ -22590,7 +22816,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22590
22816
|
"ref": daysRef,
|
22591
22817
|
"key": daysInMonth.value[0].date?.toString(),
|
22592
22818
|
"class": "v-date-picker-month__days"
|
22593
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22819
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22594
22820
|
"class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
|
22595
22821
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22596
22822
|
const slotProps = {
|
@@ -23099,7 +23325,9 @@ const VDatePicker = genericComponent()({
|
|
23099
23325
|
"max": maxDate.value,
|
23100
23326
|
"year": year.value,
|
23101
23327
|
"allowedMonths": allowedMonths
|
23102
|
-
}),
|
23328
|
+
}), {
|
23329
|
+
...pick(slots, ['month'])
|
23330
|
+
}) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
|
23103
23331
|
"key": "date-picker-years"
|
23104
23332
|
}, datePickerYearsProps, {
|
23105
23333
|
"modelValue": year.value,
|
@@ -23107,7 +23335,9 @@ const VDatePicker = genericComponent()({
|
|
23107
23335
|
"min": minDate.value,
|
23108
23336
|
"max": maxDate.value,
|
23109
23337
|
"allowedYears": allowedYears
|
23110
|
-
}),
|
23338
|
+
}), {
|
23339
|
+
...pick(slots, ['year'])
|
23340
|
+
}) : createVNode(VDatePickerMonth, mergeProps({
|
23111
23341
|
"key": "date-picker-month"
|
23112
23342
|
}, datePickerMonthProps, {
|
23113
23343
|
"modelValue": model.value,
|
@@ -23118,7 +23348,9 @@ const VDatePicker = genericComponent()({
|
|
23118
23348
|
"onUpdate:year": [$event => year.value = $event, onUpdateYear],
|
23119
23349
|
"min": minDate.value,
|
23120
23350
|
"max": maxDate.value
|
23121
|
-
}),
|
23351
|
+
}), {
|
23352
|
+
...pick(slots, ['day'])
|
23353
|
+
})]
|
23122
23354
|
})]),
|
23123
23355
|
actions: slots.actions
|
23124
23356
|
});
|
@@ -24209,6 +24441,9 @@ const VInfiniteScroll = genericComponent()({
|
|
24209
24441
|
startStatus.value = status;
|
24210
24442
|
} else if (side === 'end') {
|
24211
24443
|
endStatus.value = status;
|
24444
|
+
} else if (side === 'both') {
|
24445
|
+
startStatus.value = status;
|
24446
|
+
endStatus.value = status;
|
24212
24447
|
}
|
24213
24448
|
}
|
24214
24449
|
function getStatus(side) {
|
@@ -24320,6 +24555,32 @@ const VInfiniteScroll = genericComponent()({
|
|
24320
24555
|
}, [renderSide('end', endStatus.value)])]
|
24321
24556
|
});
|
24322
24557
|
});
|
24558
|
+
function reset(side) {
|
24559
|
+
const effectiveSide = side ?? props.side;
|
24560
|
+
setStatus(effectiveSide, 'ok');
|
24561
|
+
nextTick(() => {
|
24562
|
+
setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
|
24563
|
+
if (props.mode !== 'manual') {
|
24564
|
+
nextTick(() => {
|
24565
|
+
window.requestAnimationFrame(() => {
|
24566
|
+
window.requestAnimationFrame(() => {
|
24567
|
+
window.requestAnimationFrame(() => {
|
24568
|
+
if (effectiveSide === 'both') {
|
24569
|
+
intersecting('start');
|
24570
|
+
intersecting('end');
|
24571
|
+
} else {
|
24572
|
+
intersecting(effectiveSide);
|
24573
|
+
}
|
24574
|
+
});
|
24575
|
+
});
|
24576
|
+
});
|
24577
|
+
});
|
24578
|
+
}
|
24579
|
+
});
|
24580
|
+
}
|
24581
|
+
return {
|
24582
|
+
reset
|
24583
|
+
};
|
24323
24584
|
}
|
24324
24585
|
});
|
24325
24586
|
|
@@ -24399,8 +24660,47 @@ const VItem = genericComponent()({
|
|
24399
24660
|
}
|
24400
24661
|
});
|
24401
24662
|
|
24402
|
-
|
24403
|
-
|
24663
|
+
const makeVKbdProps = propsFactory({
|
24664
|
+
...makeBorderProps(),
|
24665
|
+
...makeComponentProps(),
|
24666
|
+
...makeRoundedProps(),
|
24667
|
+
...makeTagProps({
|
24668
|
+
tag: 'kbd'
|
24669
|
+
}),
|
24670
|
+
...makeThemeProps(),
|
24671
|
+
...makeElevationProps(),
|
24672
|
+
color: String
|
24673
|
+
}, 'VKbd');
|
24674
|
+
const VKbd = genericComponent()({
|
24675
|
+
name: 'VKbd',
|
24676
|
+
props: makeVKbdProps(),
|
24677
|
+
setup(props, _ref) {
|
24678
|
+
let {
|
24679
|
+
slots
|
24680
|
+
} = _ref;
|
24681
|
+
const {
|
24682
|
+
themeClasses
|
24683
|
+
} = provideTheme(props);
|
24684
|
+
const {
|
24685
|
+
borderClasses
|
24686
|
+
} = useBorder(props);
|
24687
|
+
const {
|
24688
|
+
roundedClasses
|
24689
|
+
} = useRounded(props);
|
24690
|
+
const {
|
24691
|
+
backgroundColorClasses,
|
24692
|
+
backgroundColorStyles
|
24693
|
+
} = useBackgroundColor(() => props.color);
|
24694
|
+
const {
|
24695
|
+
elevationClasses
|
24696
|
+
} = useElevation(props);
|
24697
|
+
useRender(() => createVNode(props.tag, {
|
24698
|
+
"class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
24699
|
+
"style": normalizeStyle([backgroundColorStyles.value, props.style])
|
24700
|
+
}, slots));
|
24701
|
+
return {};
|
24702
|
+
}
|
24703
|
+
});
|
24404
24704
|
|
24405
24705
|
const makeVLayoutProps = propsFactory({
|
24406
24706
|
...makeComponentProps(),
|
@@ -25238,6 +25538,14 @@ const makeVNumberInputProps = propsFactory({
|
|
25238
25538
|
type: Number,
|
25239
25539
|
default: 0
|
25240
25540
|
},
|
25541
|
+
minFractionDigits: {
|
25542
|
+
type: Number,
|
25543
|
+
default: null
|
25544
|
+
},
|
25545
|
+
decimalSeparator: {
|
25546
|
+
type: String,
|
25547
|
+
validator: v => !v || v.length === 1
|
25548
|
+
},
|
25241
25549
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25242
25550
|
}, 'VNumberInput');
|
25243
25551
|
const VNumberInput = genericComponent()({
|
@@ -25263,11 +25571,24 @@ const VNumberInput = genericComponent()({
|
|
25263
25571
|
const form = useForm(props);
|
25264
25572
|
const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
|
25265
25573
|
const isFocused = shallowRef(props.focused);
|
25574
|
+
const {
|
25575
|
+
decimalSeparator: decimalSeparatorFromLocale
|
25576
|
+
} = useLocale();
|
25577
|
+
const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
|
25266
25578
|
function correctPrecision(val) {
|
25267
25579
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25580
|
+
let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
25268
25581
|
const fixed = precision == null ? String(val) : val.toFixed(precision);
|
25269
|
-
|
25270
|
-
|
25582
|
+
if (isFocused.value && trim) {
|
25583
|
+
return Number(fixed).toString() // trim zeros
|
25584
|
+
.replace('.', decimalSeparator.value);
|
25585
|
+
}
|
25586
|
+
if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
|
25587
|
+
return fixed.replace('.', decimalSeparator.value);
|
25588
|
+
}
|
25589
|
+
let [baseDigits, fractionDigits] = fixed.split('.');
|
25590
|
+
fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
|
25591
|
+
return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
|
25271
25592
|
}
|
25272
25593
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25273
25594
|
const _inputText = shallowRef(null);
|
@@ -25284,8 +25605,11 @@ const VNumberInput = genericComponent()({
|
|
25284
25605
|
if (val === null || val === '') {
|
25285
25606
|
model.value = null;
|
25286
25607
|
_inputText.value = null;
|
25287
|
-
|
25288
|
-
|
25608
|
+
return;
|
25609
|
+
}
|
25610
|
+
const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
|
25611
|
+
if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
|
25612
|
+
model.value = parsedValue;
|
25289
25613
|
_inputText.value = val;
|
25290
25614
|
}
|
25291
25615
|
}
|
@@ -25322,6 +25646,7 @@ const VNumberInput = genericComponent()({
|
|
25322
25646
|
}
|
25323
25647
|
};
|
25324
25648
|
watch(() => props.precision, () => formatInputValue());
|
25649
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
25325
25650
|
onMounted(() => {
|
25326
25651
|
clampModel();
|
25327
25652
|
});
|
@@ -25355,24 +25680,24 @@ const VNumberInput = genericComponent()({
|
|
25355
25680
|
selectionEnd
|
25356
25681
|
} = inputElement ?? {};
|
25357
25682
|
const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
|
25358
|
-
const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
|
25683
|
+
const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
|
25359
25684
|
|
25360
|
-
//
|
25361
|
-
//
|
25362
|
-
//
|
25363
|
-
if (
|
25685
|
+
// Allow only numbers, "-" and {decimal separator}
|
25686
|
+
// Allow "-" and {decimal separator} only once
|
25687
|
+
// Allow "-" only at the start
|
25688
|
+
if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
|
25364
25689
|
e.preventDefault();
|
25365
25690
|
inputElement.value = potentialNewNumber;
|
25366
25691
|
}
|
25367
25692
|
if (props.precision == null) return;
|
25368
25693
|
|
25369
25694
|
// Ignore decimal digits above precision limit
|
25370
|
-
if (potentialNewInputVal.split(
|
25695
|
+
if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
|
25371
25696
|
e.preventDefault();
|
25372
25697
|
inputElement.value = potentialNewNumber;
|
25373
25698
|
}
|
25374
25699
|
// Ignore decimal separator when precision = 0
|
25375
|
-
if (props.precision === 0 && potentialNewInputVal.includes(
|
25700
|
+
if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
|
25376
25701
|
e.preventDefault();
|
25377
25702
|
inputElement.value = potentialNewNumber;
|
25378
25703
|
}
|
@@ -25424,19 +25749,16 @@ const VNumberInput = genericComponent()({
|
|
25424
25749
|
if (controlsDisabled.value) return;
|
25425
25750
|
if (!vTextFieldRef.value) return;
|
25426
25751
|
const actualText = vTextFieldRef.value.value;
|
25427
|
-
|
25428
|
-
|
25752
|
+
const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
|
25753
|
+
if (actualText && !isNaN(parsedValue)) {
|
25754
|
+
inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
|
25429
25755
|
} else {
|
25430
25756
|
inputText.value = null;
|
25431
25757
|
}
|
25432
25758
|
}
|
25433
25759
|
function formatInputValue() {
|
25434
25760
|
if (controlsDisabled.value) return;
|
25435
|
-
|
25436
|
-
inputText.value = null;
|
25437
|
-
return;
|
25438
|
-
}
|
25439
|
-
inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
|
25761
|
+
inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
|
25440
25762
|
}
|
25441
25763
|
function trimDecimalZeros() {
|
25442
25764
|
if (controlsDisabled.value) return;
|
@@ -25444,7 +25766,7 @@ const VNumberInput = genericComponent()({
|
|
25444
25766
|
inputText.value = null;
|
25445
25767
|
return;
|
25446
25768
|
}
|
25447
|
-
inputText.value = model.value.toString();
|
25769
|
+
inputText.value = model.value.toString().replace('.', decimalSeparator.value);
|
25448
25770
|
}
|
25449
25771
|
function onFocus() {
|
25450
25772
|
trimDecimalZeros();
|
@@ -25646,6 +25968,21 @@ const VOtpInput = genericComponent()({
|
|
25646
25968
|
const contentRef = ref();
|
25647
25969
|
const inputRef = ref([]);
|
25648
25970
|
const current = computed(() => inputRef.value[focusIndex.value]);
|
25971
|
+
const intersectScope = effectScope();
|
25972
|
+
intersectScope.run(() => {
|
25973
|
+
const {
|
25974
|
+
intersectionRef,
|
25975
|
+
isIntersecting
|
25976
|
+
} = useIntersectionObserver();
|
25977
|
+
watch(isIntersecting, v => {
|
25978
|
+
if (!v) return;
|
25979
|
+
intersectionRef.value?.focus();
|
25980
|
+
intersectScope.stop();
|
25981
|
+
});
|
25982
|
+
watchEffect(() => {
|
25983
|
+
intersectionRef.value = inputRef.value[0];
|
25984
|
+
});
|
25985
|
+
});
|
25649
25986
|
function onInput() {
|
25650
25987
|
// The maxlength attribute doesn't work for the number type input, so the text type is used.
|
25651
25988
|
// The following logic simulates the behavior of a number input.
|
@@ -25696,9 +26033,10 @@ const VOtpInput = genericComponent()({
|
|
25696
26033
|
e.preventDefault();
|
25697
26034
|
e.stopPropagation();
|
25698
26035
|
const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
|
26036
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25699
26037
|
if (isValidNumber(clipboardText)) return;
|
25700
26038
|
model.value = clipboardText.split('');
|
25701
|
-
inputRef.value?.[
|
26039
|
+
inputRef.value?.[finalIndex].focus();
|
25702
26040
|
}
|
25703
26041
|
function reset() {
|
25704
26042
|
model.value = [];
|
@@ -28392,6 +28730,9 @@ const VTextarea = genericComponent()({
|
|
28392
28730
|
focus,
|
28393
28731
|
blur
|
28394
28732
|
} = useFocus(props);
|
28733
|
+
const {
|
28734
|
+
onIntersect
|
28735
|
+
} = useAutofocus(props);
|
28395
28736
|
const counterValue = computed(() => {
|
28396
28737
|
return typeof props.counterValue === 'function' ? props.counterValue(model.value) : (model.value || '').toString().length;
|
28397
28738
|
});
|
@@ -28400,10 +28741,6 @@ const VTextarea = genericComponent()({
|
|
28400
28741
|
if (!props.counter || typeof props.counter !== 'number' && typeof props.counter !== 'string') return undefined;
|
28401
28742
|
return props.counter;
|
28402
28743
|
});
|
28403
|
-
function onIntersect(isIntersecting, entries) {
|
28404
|
-
if (!props.autofocus || !isIntersecting) return;
|
28405
|
-
entries[0].target?.focus?.();
|
28406
|
-
}
|
28407
28744
|
const vInputRef = ref();
|
28408
28745
|
const vFieldRef = ref();
|
28409
28746
|
const controlHeight = shallowRef('');
|
@@ -29483,7 +29820,7 @@ function createVuetify$1() {
|
|
29483
29820
|
};
|
29484
29821
|
});
|
29485
29822
|
}
|
29486
|
-
const version$1 = "3.8.
|
29823
|
+
const version$1 = "3.8.10-dev.2025-06-18";
|
29487
29824
|
createVuetify$1.version = version$1;
|
29488
29825
|
|
29489
29826
|
// Vue's inject() can only be used in setup
|
@@ -29508,7 +29845,7 @@ const createVuetify = function () {
|
|
29508
29845
|
...options
|
29509
29846
|
});
|
29510
29847
|
};
|
29511
|
-
const version = "3.8.
|
29848
|
+
const version = "3.8.10-dev.2025-06-18";
|
29512
29849
|
createVuetify.version = version;
|
29513
29850
|
|
29514
29851
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };
|