@vuetify/nightly 3.8.9-dev.2025-06-13 → 3.8.9-master.2025-06-12
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 +6 -45
- package/dist/json/attributes.json +3714 -4110
- package/dist/json/importMap-labs.json +24 -28
- package/dist/json/importMap.json +154 -154
- package/dist/json/tags.json +2 -106
- package/dist/json/web-types.json +6783 -8232
- package/dist/vuetify-labs.cjs +177 -730
- package/dist/vuetify-labs.css +4085 -4128
- package/dist/vuetify-labs.d.ts +2938 -10254
- package/dist/vuetify-labs.esm.js +178 -731
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +177 -730
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +166 -478
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3607 -3650
- package/dist/vuetify.d.ts +2085 -2782
- package/dist/vuetify.esm.js +167 -479
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +166 -478
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1229 -1251
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +1 -6
- package/lib/components/VAlert/VAlert.d.ts +0 -35
- package/lib/components/VAlert/VAlert.js +10 -15
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +1 -7
- package/lib/components/VAppBar/VAppBar.d.ts +3 -15
- package/lib/components/VAppBar/VAppBarNavIcon.d.ts +10 -20
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +110 -175
- package/lib/components/VAutocomplete/VAutocomplete.js +3 -21
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBadge/VBadge.d.ts +0 -60
- package/lib/components/VBadge/VBadge.js +2 -7
- package/lib/components/VBadge/VBadge.js.map +1 -1
- package/lib/components/VBtn/VBtn.d.ts +10 -20
- package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
- package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
- package/lib/components/VCard/VCard.d.ts +10 -20
- package/lib/components/VCheckbox/VCheckbox.d.ts +13 -23
- package/lib/components/VCheckbox/VCheckboxBtn.d.ts +10 -20
- package/lib/components/VChip/VChip.d.ts +10 -20
- package/lib/components/VChipGroup/VChipGroup.d.ts +0 -10
- package/lib/components/VCombobox/VCombobox.d.ts +110 -175
- package/lib/components/VCombobox/VCombobox.js +3 -22
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDataTable/VDataTable.d.ts +0 -60
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +0 -13
- package/lib/components/VDataTable/VDataTableHeaders.js +2 -4
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.d.ts +0 -42
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +0 -42
- package/lib/components/VDatePicker/VDatePicker.d.ts +5 -80
- package/lib/components/VDatePicker/VDatePicker.js +4 -10
- package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/VExpansionPanel/VExpansionPanel.d.ts +10 -20
- package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +10 -20
- package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +10 -20
- package/lib/components/VFab/VFab.d.ts +10 -20
- 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 +3 -9
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js +0 -29
- package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
- package/lib/components/VInput/VInput.d.ts +4 -4
- package/lib/components/VKbd/VKbd.css +2 -13
- package/lib/components/VKbd/VKbd.sass +1 -2
- package/lib/components/VKbd/_variables.scss +1 -12
- package/lib/components/VKbd/index.d.ts +95 -1
- package/lib/components/VKbd/index.js +4 -1
- package/lib/components/VKbd/index.js.map +1 -1
- package/lib/components/VList/VList.d.ts +0 -13
- package/lib/components/VList/VList.js +1 -4
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VList/VListItem.css +2 -0
- package/lib/components/VList/VListItem.d.ts +10 -23
- package/lib/components/VList/VListItem.js +3 -7
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VList/VListItem.sass +2 -0
- package/lib/components/VList/_variables.scss +1 -0
- package/lib/components/VList/list.d.ts +2 -9
- package/lib/components/VList/list.js +0 -7
- package/lib/components/VList/list.js.map +1 -1
- package/lib/components/VMenu/VMenu.d.ts +0 -13
- package/lib/components/VMenu/VMenu.js +1 -2
- package/lib/components/VMenu/VMenu.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +89 -114
- package/lib/components/VNumberInput/VNumberInput.js +20 -43
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOtpInput/VOtpInput.js +1 -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 +10 -20
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +13 -23
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +118 -204
- package/lib/components/VSelect/VSelect.js +3 -21
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSelectionControl/VSelectionControl.d.ts +10 -20
- package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +14 -28
- package/lib/components/VSlideGroup/VSlideGroup.d.ts +0 -10
- package/lib/components/VSlideGroup/VSlideGroup.js +1 -2
- 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 +10 -20
- package/lib/components/VSpeedDial/VSpeedDial.css +1 -1
- package/lib/components/VSpeedDial/VSpeedDial.d.ts +0 -13
- package/lib/components/VSpeedDial/VSpeedDial.sass +3 -1
- package/lib/components/VStepper/VStepperItem.d.ts +14 -28
- package/lib/components/VSwitch/VSwitch.d.ts +13 -23
- package/lib/components/VTable/VTable.css +0 -6
- package/lib/components/VTable/VTable.d.ts +24 -55
- package/lib/components/VTable/VTable.js +2 -9
- package/lib/components/VTable/VTable.js.map +1 -1
- package/lib/components/VTable/VTable.sass +0 -14
- package/lib/components/VTable/_variables.scss +0 -1
- package/lib/components/VTabs/VTab.d.ts +28 -56
- package/lib/components/VTabs/VTabs.d.ts +0 -10
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/components/VToolbar/VToolbar.d.ts +3 -15
- package/lib/components/VToolbar/VToolbar.js +3 -6
- package/lib/components/VToolbar/VToolbar.js.map +1 -1
- package/lib/composables/calendar.d.ts +0 -6
- package/lib/composables/calendar.js +1 -2
- 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/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 +0 -1
- package/lib/composables/date/index.js +0 -1
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +0 -3
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/locale.d.ts +1 -5
- package/lib/composables/locale.js.map +1 -1
- package/lib/composables/theme.d.ts +1 -6
- package/lib/composables/theme.js +29 -97
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +1 -6
- package/lib/composables/virtual.js.map +1 -1
- package/lib/directives/ripple/index.d.ts +1 -2
- package/lib/directives/ripple/index.js +7 -12
- package/lib/directives/ripple/index.js.map +1 -1
- package/lib/entry-bundler.d.ts +3 -4
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +64 -83
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- package/lib/labs/VFileUpload/VFileUploadItem.d.ts +10 -20
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +11 -7
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
- package/lib/labs/VStepperVertical/VStepperVertical.d.ts +10 -20
- package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +10 -20
- package/lib/labs/VTreeview/VTreeview.d.ts +0 -13
- package/lib/labs/VTreeview/VTreeviewItem.d.ts +10 -20
- package/lib/labs/components.d.ts +0 -1
- package/lib/labs/components.js +0 -1
- package/lib/labs/components.js.map +1 -1
- package/lib/labs/entry-bundler.d.ts +3 -4
- package/lib/locale/adapters/vue-i18n.js +1 -6
- package/lib/locale/adapters/vue-i18n.js.map +1 -1
- package/lib/locale/adapters/vuetify.js +1 -7
- package/lib/locale/adapters/vuetify.js.map +1 -1
- package/lib/util/globals.d.ts +0 -1
- package/lib/util/globals.js +0 -1
- package/lib/util/globals.js.map +1 -1
- package/lib/util/helpers.d.ts +1 -2
- package/lib/util/helpers.js +7 -12
- package/lib/util/helpers.js.map +1 -1
- package/package.json +1 -3
- package/lib/components/VKbd/VKbd.d.ts +0 -221
- package/lib/components/VKbd/VKbd.js +0 -55
- package/lib/components/VKbd/VKbd.js.map +0 -1
- package/lib/composables/date/adapters/string.d.ts +0 -54
- package/lib/composables/date/adapters/string.js +0 -153
- package/lib/composables/date/adapters/string.js.map +0 -1
- package/lib/composables/iconSizes.d.ts +0 -28
- package/lib/composables/iconSizes.js +0 -23
- package/lib/composables/iconSizes.js.map +0 -1
- package/lib/composables/mask.d.ts +0 -38
- package/lib/composables/mask.js +0 -183
- package/lib/composables/mask.js.map +0 -1
- package/lib/labs/VMaskInput/VMaskInput.d.ts +0 -6993
- package/lib/labs/VMaskInput/VMaskInput.js +0 -67
- package/lib/labs/VMaskInput/VMaskInput.js.map +0 -1
- package/lib/labs/VMaskInput/index.d.ts +0 -1
- package/lib/labs/VMaskInput/index.js +0 -2
- package/lib/labs/VMaskInput/index.js.map +0 -1
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.9-
|
2
|
+
* Vuetify v3.8.9-master.2025-06-12
|
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, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw,
|
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, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
8
8
|
|
9
9
|
// Types
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
@@ -81,7 +81,6 @@ const IN_BROWSER = typeof window !== 'undefined';
|
|
81
81
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
82
82
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
83
83
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
84
|
-
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
85
84
|
|
86
85
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
87
86
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -588,23 +587,18 @@ function checkPrintable(e) {
|
|
588
587
|
function isPrimitive(value) {
|
589
588
|
return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
|
590
589
|
}
|
591
|
-
function
|
592
|
-
|
593
|
-
}
|
594
|
-
function extractNumber(text, decimalDigitsLimit, decimalSeparator) {
|
595
|
-
const onlyValidCharacters = new RegExp(`[\\d\\-${escapeForRegex(decimalSeparator)}]`);
|
596
|
-
const cleanText = text.split('').filter(x => onlyValidCharacters.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
|
590
|
+
function extractNumber(text, decimalDigitsLimit) {
|
591
|
+
const cleanText = text.split('').filter(x => /[\d\-.]/.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
|
597
592
|
// sign allowed at the start
|
598
|
-
x ===
|
593
|
+
x === '.' && i === all.indexOf('.') ||
|
599
594
|
// decimal separator allowed only once
|
600
595
|
/\d/.test(x)).join('');
|
601
596
|
if (decimalDigitsLimit === 0) {
|
602
|
-
return cleanText.split(
|
597
|
+
return cleanText.split('.')[0];
|
603
598
|
}
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join(decimalSeparator);
|
599
|
+
if (decimalDigitsLimit !== null && /\.\d/.test(cleanText)) {
|
600
|
+
const parts = cleanText.split('.');
|
601
|
+
return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join('.');
|
608
602
|
}
|
609
603
|
return cleanText;
|
610
604
|
}
|
@@ -2180,10 +2174,6 @@ function createNumberFunction(current, fallback) {
|
|
2180
2174
|
return numberFormat.format(value);
|
2181
2175
|
};
|
2182
2176
|
}
|
2183
|
-
function inferDecimalSeparator(current, fallback) {
|
2184
|
-
const format = createNumberFunction(current, fallback);
|
2185
|
-
return format(0.1).includes(',') ? ',' : '.';
|
2186
|
-
}
|
2187
2177
|
function useProvided(props, prop, provided) {
|
2188
2178
|
const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
|
2189
2179
|
|
@@ -2206,7 +2196,6 @@ function createProvideFunction(state) {
|
|
2206
2196
|
current,
|
2207
2197
|
fallback,
|
2208
2198
|
messages,
|
2209
|
-
decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
|
2210
2199
|
t: createTranslateFunction(current, fallback, messages),
|
2211
2200
|
n: createNumberFunction(current, fallback),
|
2212
2201
|
provide: createProvideFunction({
|
@@ -2229,7 +2218,6 @@ function createVuetifyAdapter(options) {
|
|
2229
2218
|
current,
|
2230
2219
|
fallback,
|
2231
2220
|
messages,
|
2232
|
-
decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
|
2233
2221
|
t: createTranslateFunction(current, fallback, messages),
|
2234
2222
|
n: createNumberFunction(current, fallback),
|
2235
2223
|
provide: createProvideFunction({
|
@@ -2356,7 +2344,6 @@ const makeThemeProps = propsFactory({
|
|
2356
2344
|
function genDefaults$2() {
|
2357
2345
|
return {
|
2358
2346
|
defaultTheme: 'light',
|
2359
|
-
prefix: 'v-',
|
2360
2347
|
variations: {
|
2361
2348
|
colors: [],
|
2362
2349
|
lighten: 0,
|
@@ -2394,8 +2381,8 @@ function genDefaults$2() {
|
|
2394
2381
|
'activated-opacity': 0.12,
|
2395
2382
|
'pressed-opacity': 0.12,
|
2396
2383
|
'dragged-opacity': 0.08,
|
2397
|
-
'theme-kbd': '#
|
2398
|
-
'theme-on-kbd': '#
|
2384
|
+
'theme-kbd': '#212529',
|
2385
|
+
'theme-on-kbd': '#FFFFFF',
|
2399
2386
|
'theme-code': '#F5F5F5',
|
2400
2387
|
'theme-on-code': '#000000'
|
2401
2388
|
}
|
@@ -2431,17 +2418,14 @@ function genDefaults$2() {
|
|
2431
2418
|
'activated-opacity': 0.12,
|
2432
2419
|
'pressed-opacity': 0.16,
|
2433
2420
|
'dragged-opacity': 0.08,
|
2434
|
-
'theme-kbd': '#
|
2421
|
+
'theme-kbd': '#212529',
|
2435
2422
|
'theme-on-kbd': '#FFFFFF',
|
2436
2423
|
'theme-code': '#343434',
|
2437
2424
|
'theme-on-code': '#CCCCCC'
|
2438
2425
|
}
|
2439
2426
|
}
|
2440
2427
|
},
|
2441
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2442
|
-
scoped: false,
|
2443
|
-
unimportant: false,
|
2444
|
-
utilities: true
|
2428
|
+
stylesheetId: 'vuetify-theme-stylesheet'
|
2445
2429
|
};
|
2446
2430
|
}
|
2447
2431
|
function parseThemeOptions() {
|
@@ -2464,21 +2448,21 @@ function parseThemeOptions() {
|
|
2464
2448
|
function createCssClass(lines, selector, content, scope) {
|
2465
2449
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2466
2450
|
}
|
2467
|
-
function genCssVariables(theme
|
2451
|
+
function genCssVariables(theme) {
|
2468
2452
|
const lightOverlay = theme.dark ? 2 : 1;
|
2469
2453
|
const darkOverlay = theme.dark ? 1 : 2;
|
2470
2454
|
const variables = [];
|
2471
2455
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2472
2456
|
const rgb = parseColor(value);
|
2473
|
-
variables.push(
|
2457
|
+
variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2474
2458
|
if (!key.startsWith('on-')) {
|
2475
|
-
variables.push(
|
2459
|
+
variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2476
2460
|
}
|
2477
2461
|
}
|
2478
2462
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2479
2463
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2480
2464
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2481
|
-
variables.push(
|
2465
|
+
variables.push(`--v-${key}: ${rgb ?? value}`);
|
2482
2466
|
}
|
2483
2467
|
return variables;
|
2484
2468
|
}
|
@@ -2522,8 +2506,7 @@ function getScopedSelector(selector, scope) {
|
|
2522
2506
|
const scopeSelector = `:where(${scope})`;
|
2523
2507
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2524
2508
|
}
|
2525
|
-
function upsertStyles(
|
2526
|
-
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2509
|
+
function upsertStyles(styleEl, styles) {
|
2527
2510
|
if (!styleEl) return;
|
2528
2511
|
styleEl.innerHTML = styles;
|
2529
2512
|
}
|
@@ -2543,17 +2526,8 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2543
2526
|
// Composables
|
2544
2527
|
function createTheme(options) {
|
2545
2528
|
const parsedOptions = parseThemeOptions(options);
|
2546
|
-
const
|
2529
|
+
const name = shallowRef(parsedOptions.defaultTheme);
|
2547
2530
|
const themes = ref(parsedOptions.themes);
|
2548
|
-
const systemName = shallowRef('light');
|
2549
|
-
const name = computed({
|
2550
|
-
get() {
|
2551
|
-
return _name.value === 'system' ? systemName.value : _name.value;
|
2552
|
-
},
|
2553
|
-
set(val) {
|
2554
|
-
_name.value = val;
|
2555
|
-
}
|
2556
|
-
});
|
2557
2531
|
const computedThemes = computed(() => {
|
2558
2532
|
const acc = {};
|
2559
2533
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2574,49 +2548,28 @@ function createTheme(options) {
|
|
2574
2548
|
const current = toRef(() => computedThemes.value[name.value]);
|
2575
2549
|
const styles = computed(() => {
|
2576
2550
|
const lines = [];
|
2577
|
-
const important = parsedOptions.unimportant ? '' : ' !important';
|
2578
|
-
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2579
2551
|
if (current.value?.dark) {
|
2580
2552
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2581
2553
|
}
|
2582
|
-
createCssClass(lines, ':root', genCssVariables(current.value
|
2554
|
+
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2583
2555
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2584
|
-
createCssClass(lines,
|
2585
|
-
}
|
2586
|
-
|
2587
|
-
|
2588
|
-
|
2589
|
-
|
2590
|
-
|
2591
|
-
|
2592
|
-
|
2593
|
-
}
|
2594
|
-
|
2595
|
-
|
2596
|
-
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2597
|
-
}
|
2556
|
+
createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
|
2557
|
+
}
|
2558
|
+
const bgLines = [];
|
2559
|
+
const fgLines = [];
|
2560
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2561
|
+
for (const key of colors) {
|
2562
|
+
if (key.startsWith('on-')) {
|
2563
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
|
2564
|
+
} else {
|
2565
|
+
createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`], parsedOptions.scope);
|
2566
|
+
createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
|
2567
|
+
createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
|
2598
2568
|
}
|
2599
|
-
lines.push(...bgLines, ...fgLines);
|
2600
2569
|
}
|
2570
|
+
lines.push(...bgLines, ...fgLines);
|
2601
2571
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2602
2572
|
});
|
2603
|
-
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2604
|
-
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
2605
|
-
if (SUPPORTS_MATCH_MEDIA) {
|
2606
|
-
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2607
|
-
function updateSystemName() {
|
2608
|
-
systemName.value = media.matches ? 'dark' : 'light';
|
2609
|
-
}
|
2610
|
-
updateSystemName();
|
2611
|
-
media.addEventListener('change', updateSystemName, {
|
2612
|
-
passive: true
|
2613
|
-
});
|
2614
|
-
if (getCurrentScope()) {
|
2615
|
-
onScopeDispose(() => {
|
2616
|
-
media.removeEventListener('change', updateSystemName);
|
2617
|
-
});
|
2618
|
-
}
|
2619
|
-
}
|
2620
2573
|
function install(app) {
|
2621
2574
|
if (parsedOptions.isDisabled) return;
|
2622
2575
|
const head = app._context.provides.usehead;
|
@@ -2654,55 +2607,22 @@ function createTheme(options) {
|
|
2654
2607
|
updateStyles();
|
2655
2608
|
}
|
2656
2609
|
function updateStyles() {
|
2657
|
-
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2610
|
+
upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
|
2658
2611
|
}
|
2659
2612
|
}
|
2660
2613
|
}
|
2661
|
-
|
2662
|
-
if (!themeNames.value.includes(themeName)) {
|
2663
|
-
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2664
|
-
return;
|
2665
|
-
}
|
2666
|
-
name.value = themeName;
|
2667
|
-
}
|
2668
|
-
function cycle() {
|
2669
|
-
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2670
|
-
const currentIndex = themeArray.indexOf(name.value);
|
2671
|
-
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2672
|
-
change(themeArray[nextIndex]);
|
2673
|
-
}
|
2674
|
-
function toggle() {
|
2675
|
-
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2676
|
-
cycle(themeArray);
|
2677
|
-
}
|
2678
|
-
const globalName = new Proxy(name, {
|
2679
|
-
get(target, prop) {
|
2680
|
-
return target[prop];
|
2681
|
-
},
|
2682
|
-
set(target, prop, val) {
|
2683
|
-
if (prop === 'value') {
|
2684
|
-
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2685
|
-
}
|
2686
|
-
// @ts-expect-error
|
2687
|
-
target[prop] = val;
|
2688
|
-
return true;
|
2689
|
-
}
|
2690
|
-
});
|
2614
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
|
2691
2615
|
return {
|
2692
2616
|
install,
|
2693
|
-
change,
|
2694
|
-
cycle,
|
2695
|
-
toggle,
|
2696
2617
|
isDisabled: parsedOptions.isDisabled,
|
2697
2618
|
name,
|
2698
2619
|
themes,
|
2699
2620
|
current,
|
2700
2621
|
computedThemes,
|
2701
|
-
prefix: parsedOptions.prefix,
|
2702
2622
|
themeClasses,
|
2703
2623
|
styles,
|
2704
2624
|
global: {
|
2705
|
-
name
|
2625
|
+
name,
|
2706
2626
|
current
|
2707
2627
|
}
|
2708
2628
|
};
|
@@ -2713,7 +2633,7 @@ function provideTheme(props) {
|
|
2713
2633
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2714
2634
|
const name = toRef(() => props.theme ?? theme.name.value);
|
2715
2635
|
const current = toRef(() => theme.themes.value[name.value]);
|
2716
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
2636
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
|
2717
2637
|
const newTheme = {
|
2718
2638
|
...theme,
|
2719
2639
|
name,
|
@@ -3817,10 +3737,7 @@ const makeVToolbarProps = propsFactory({
|
|
3817
3737
|
default: 'default',
|
3818
3738
|
validator: v => allowedDensities$1.includes(v)
|
3819
3739
|
},
|
3820
|
-
extended:
|
3821
|
-
type: Boolean,
|
3822
|
-
default: null
|
3823
|
-
},
|
3740
|
+
extended: Boolean,
|
3824
3741
|
extensionHeight: {
|
3825
3742
|
type: [Number, String],
|
3826
3743
|
default: 48
|
@@ -3868,7 +3785,7 @@ const VToolbar = genericComponent()({
|
|
3868
3785
|
const {
|
3869
3786
|
rtlClasses
|
3870
3787
|
} = useRtl();
|
3871
|
-
const isExtended = shallowRef(props.extended
|
3788
|
+
const isExtended = shallowRef(!!(props.extended || slots.extension?.()));
|
3872
3789
|
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));
|
3873
3790
|
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);
|
3874
3791
|
provideDefaults({
|
@@ -3880,7 +3797,7 @@ const VToolbar = genericComponent()({
|
|
3880
3797
|
const hasTitle = !!(props.title || slots.title);
|
3881
3798
|
const hasImage = !!(slots.image || props.image);
|
3882
3799
|
const extension = slots.extension?.();
|
3883
|
-
isExtended.value = props.extended
|
3800
|
+
isExtended.value = !!(props.extended || extension);
|
3884
3801
|
return createVNode(props.tag, {
|
3885
3802
|
"class": normalizeClass(['v-toolbar', {
|
3886
3803
|
'v-toolbar--absolute': props.absolute,
|
@@ -4263,15 +4180,9 @@ function useVariant(props) {
|
|
4263
4180
|
};
|
4264
4181
|
}
|
4265
4182
|
|
4266
|
-
// Types
|
4267
|
-
|
4268
4183
|
const makeVBtnGroupProps = propsFactory({
|
4269
4184
|
baseColor: String,
|
4270
4185
|
divided: Boolean,
|
4271
|
-
direction: {
|
4272
|
-
type: String,
|
4273
|
-
default: 'horizontal'
|
4274
|
-
},
|
4275
4186
|
...makeBorderProps(),
|
4276
4187
|
...makeComponentProps(),
|
4277
4188
|
...makeDensityProps(),
|
@@ -4305,7 +4216,7 @@ const VBtnGroup = genericComponent()({
|
|
4305
4216
|
} = useRounded(props);
|
4306
4217
|
provideDefaults({
|
4307
4218
|
VBtn: {
|
4308
|
-
height:
|
4219
|
+
height: 'auto',
|
4309
4220
|
baseColor: toRef(() => props.baseColor),
|
4310
4221
|
color: toRef(() => props.color),
|
4311
4222
|
density: toRef(() => props.density),
|
@@ -4315,7 +4226,7 @@ const VBtnGroup = genericComponent()({
|
|
4315
4226
|
});
|
4316
4227
|
useRender(() => {
|
4317
4228
|
return createVNode(props.tag, {
|
4318
|
-
"class": normalizeClass(['v-btn-group',
|
4229
|
+
"class": normalizeClass(['v-btn-group', {
|
4319
4230
|
'v-btn-group--divided': props.divided
|
4320
4231
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4321
4232
|
"style": normalizeStyle(props.style)
|
@@ -5647,8 +5558,8 @@ function rippleCancelShow(e) {
|
|
5647
5558
|
window.clearTimeout(element._ripple.showTimer);
|
5648
5559
|
}
|
5649
5560
|
let keyboardRipple = false;
|
5650
|
-
function keyboardRippleShow(e
|
5651
|
-
if (!keyboardRipple &&
|
5561
|
+
function keyboardRippleShow(e) {
|
5562
|
+
if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
|
5652
5563
|
keyboardRipple = true;
|
5653
5564
|
rippleShow(e);
|
5654
5565
|
}
|
@@ -5676,12 +5587,9 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5676
5587
|
el._ripple.enabled = enabled;
|
5677
5588
|
el._ripple.centered = modifiers.center;
|
5678
5589
|
el._ripple.circle = modifiers.circle;
|
5679
|
-
|
5680
|
-
|
5681
|
-
el._ripple.class = bindingValue.class;
|
5590
|
+
if (isObject(value) && value.class) {
|
5591
|
+
el._ripple.class = value.class;
|
5682
5592
|
}
|
5683
|
-
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5684
|
-
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5685
5593
|
if (enabled && !wasEnabled) {
|
5686
5594
|
if (modifiers.stop) {
|
5687
5595
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5703,7 +5611,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5703
5611
|
el.addEventListener('mousedown', rippleShow);
|
5704
5612
|
el.addEventListener('mouseup', rippleHide);
|
5705
5613
|
el.addEventListener('mouseleave', rippleHide);
|
5706
|
-
el.addEventListener('keydown',
|
5614
|
+
el.addEventListener('keydown', keyboardRippleShow);
|
5707
5615
|
el.addEventListener('keyup', keyboardRippleHide);
|
5708
5616
|
el.addEventListener('blur', focusRippleHide);
|
5709
5617
|
|
@@ -5723,9 +5631,7 @@ function removeListeners(el) {
|
|
5723
5631
|
el.removeEventListener('touchcancel', rippleHide);
|
5724
5632
|
el.removeEventListener('mouseup', rippleHide);
|
5725
5633
|
el.removeEventListener('mouseleave', rippleHide);
|
5726
|
-
|
5727
|
-
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
5728
|
-
}
|
5634
|
+
el.removeEventListener('keydown', keyboardRippleShow);
|
5729
5635
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5730
5636
|
el.removeEventListener('dragstart', rippleHide);
|
5731
5637
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5734,8 +5640,8 @@ function mounted$4(el, binding) {
|
|
5734
5640
|
updateRipple(el, binding, false);
|
5735
5641
|
}
|
5736
5642
|
function unmounted$4(el) {
|
5737
|
-
removeListeners(el);
|
5738
5643
|
delete el._ripple;
|
5644
|
+
removeListeners(el);
|
5739
5645
|
}
|
5740
5646
|
function updated$1(el, binding) {
|
5741
5647
|
if (binding.value === binding.oldValue) {
|
@@ -6008,31 +5914,6 @@ const VAppBarTitle = genericComponent()({
|
|
6008
5914
|
// Utilities
|
6009
5915
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
6010
5916
|
|
6011
|
-
// Utilities
|
6012
|
-
|
6013
|
-
// Types
|
6014
|
-
|
6015
|
-
// Types
|
6016
|
-
|
6017
|
-
// Composables
|
6018
|
-
const makeIconSizeProps = propsFactory({
|
6019
|
-
iconSize: [Number, String],
|
6020
|
-
iconSizes: {
|
6021
|
-
type: Array,
|
6022
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6023
|
-
}
|
6024
|
-
}, 'iconSize');
|
6025
|
-
function useIconSizes(props, fallback) {
|
6026
|
-
const iconSize = computed(() => {
|
6027
|
-
const iconSizeMap = new Map(props.iconSizes);
|
6028
|
-
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6029
|
-
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6030
|
-
});
|
6031
|
-
return {
|
6032
|
-
iconSize
|
6033
|
-
};
|
6034
|
-
}
|
6035
|
-
|
6036
5917
|
// Types
|
6037
5918
|
|
6038
5919
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6072,7 +5953,6 @@ const makeVAlertProps = propsFactory({
|
|
6072
5953
|
...makeDensityProps(),
|
6073
5954
|
...makeDimensionProps(),
|
6074
5955
|
...makeElevationProps(),
|
6075
|
-
...makeIconSizeProps(),
|
6076
5956
|
...makeLocationProps(),
|
6077
5957
|
...makePositionProps(),
|
6078
5958
|
...makeRoundedProps(),
|
@@ -6100,9 +5980,6 @@ const VAlert = genericComponent()({
|
|
6100
5980
|
if (!props.type) return props.icon;
|
6101
5981
|
return props.icon ?? `$${props.type}`;
|
6102
5982
|
});
|
6103
|
-
const {
|
6104
|
-
iconSize
|
6105
|
-
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6106
5983
|
const {
|
6107
5984
|
themeClasses
|
6108
5985
|
} = provideTheme(props);
|
@@ -6150,11 +6027,6 @@ const VAlert = genericComponent()({
|
|
6150
6027
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6151
6028
|
const hasTitle = !!(slots.title || props.title);
|
6152
6029
|
const hasClose = !!(slots.close || props.closable);
|
6153
|
-
const iconProps = {
|
6154
|
-
density: props.density,
|
6155
|
-
icon: icon.value,
|
6156
|
-
size: iconSize.value
|
6157
|
-
};
|
6158
6030
|
return isActive.value && createVNode(props.tag, {
|
6159
6031
|
"class": normalizeClass(['v-alert', props.border && {
|
6160
6032
|
'v-alert--border': !!props.border,
|
@@ -6172,14 +6044,19 @@ const VAlert = genericComponent()({
|
|
6172
6044
|
}, null), hasPrepend && createElementVNode("div", {
|
6173
6045
|
"key": "prepend",
|
6174
6046
|
"class": "v-alert__prepend"
|
6175
|
-
}, [!slots.prepend ? createVNode(VIcon,
|
6176
|
-
"key": "prepend-icon"
|
6177
|
-
|
6047
|
+
}, [!slots.prepend ? createVNode(VIcon, {
|
6048
|
+
"key": "prepend-icon",
|
6049
|
+
"density": props.density,
|
6050
|
+
"icon": icon.value,
|
6051
|
+
"size": props.prominent ? 44 : 28
|
6052
|
+
}, null) : createVNode(VDefaultsProvider, {
|
6178
6053
|
"key": "prepend-defaults",
|
6179
6054
|
"disabled": !icon.value,
|
6180
6055
|
"defaults": {
|
6181
6056
|
VIcon: {
|
6182
|
-
|
6057
|
+
density: props.density,
|
6058
|
+
icon: icon.value,
|
6059
|
+
size: props.prominent ? 44 : 28
|
6183
6060
|
}
|
6184
6061
|
}
|
6185
6062
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7704,7 +7581,6 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7704
7581
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7705
7582
|
const makeVSlideGroupProps = propsFactory({
|
7706
7583
|
centerActive: Boolean,
|
7707
|
-
contentClass: null,
|
7708
7584
|
direction: {
|
7709
7585
|
type: String,
|
7710
7586
|
default: 'horizontal'
|
@@ -8017,7 +7893,7 @@ const VSlideGroup = genericComponent()({
|
|
8017
7893
|
})]), createElementVNode("div", {
|
8018
7894
|
"key": "container",
|
8019
7895
|
"ref": containerRef,
|
8020
|
-
"class":
|
7896
|
+
"class": "v-slide-group__container",
|
8021
7897
|
"onScroll": onScroll
|
8022
7898
|
}, [createElementVNode("div", {
|
8023
7899
|
"ref": contentRef,
|
@@ -8380,85 +8256,16 @@ const VChip = genericComponent()({
|
|
8380
8256
|
}
|
8381
8257
|
});
|
8382
8258
|
|
8383
|
-
const makeVDividerProps = propsFactory({
|
8384
|
-
color: String,
|
8385
|
-
inset: Boolean,
|
8386
|
-
length: [Number, String],
|
8387
|
-
opacity: [Number, String],
|
8388
|
-
thickness: [Number, String],
|
8389
|
-
vertical: Boolean,
|
8390
|
-
...makeComponentProps(),
|
8391
|
-
...makeThemeProps()
|
8392
|
-
}, 'VDivider');
|
8393
|
-
const VDivider = genericComponent()({
|
8394
|
-
name: 'VDivider',
|
8395
|
-
props: makeVDividerProps(),
|
8396
|
-
setup(props, _ref) {
|
8397
|
-
let {
|
8398
|
-
attrs,
|
8399
|
-
slots
|
8400
|
-
} = _ref;
|
8401
|
-
const {
|
8402
|
-
themeClasses
|
8403
|
-
} = provideTheme(props);
|
8404
|
-
const {
|
8405
|
-
textColorClasses,
|
8406
|
-
textColorStyles
|
8407
|
-
} = useTextColor(() => props.color);
|
8408
|
-
const dividerStyles = computed(() => {
|
8409
|
-
const styles = {};
|
8410
|
-
if (props.length) {
|
8411
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8412
|
-
}
|
8413
|
-
if (props.thickness) {
|
8414
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8415
|
-
}
|
8416
|
-
return styles;
|
8417
|
-
});
|
8418
|
-
useRender(() => {
|
8419
|
-
const divider = createElementVNode("hr", {
|
8420
|
-
"class": normalizeClass([{
|
8421
|
-
'v-divider': true,
|
8422
|
-
'v-divider--inset': props.inset,
|
8423
|
-
'v-divider--vertical': props.vertical
|
8424
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
8425
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8426
|
-
'--v-border-opacity': props.opacity
|
8427
|
-
}, props.style]),
|
8428
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8429
|
-
"role": `${attrs.role || 'separator'}`
|
8430
|
-
}, null);
|
8431
|
-
if (!slots.default) return divider;
|
8432
|
-
return createElementVNode("div", {
|
8433
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
8434
|
-
'v-divider__wrapper--vertical': props.vertical,
|
8435
|
-
'v-divider__wrapper--inset': props.inset
|
8436
|
-
}])
|
8437
|
-
}, [divider, createElementVNode("div", {
|
8438
|
-
"class": "v-divider__content"
|
8439
|
-
}, [slots.default()]), divider]);
|
8440
|
-
});
|
8441
|
-
return {};
|
8442
|
-
}
|
8443
|
-
});
|
8444
|
-
|
8445
8259
|
// Utilities
|
8446
8260
|
|
8447
8261
|
// List
|
8448
8262
|
const ListKey = Symbol.for('vuetify:list');
|
8449
8263
|
function createList() {
|
8450
|
-
let {
|
8451
|
-
filterable
|
8452
|
-
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8453
|
-
filterable: false
|
8454
|
-
};
|
8455
8264
|
const parent = inject$1(ListKey, {
|
8456
|
-
filterable: false,
|
8457
8265
|
hasPrepend: shallowRef(false),
|
8458
8266
|
updateHasPrepend: () => null
|
8459
8267
|
});
|
8460
8268
|
const data = {
|
8461
|
-
filterable: parent.filterable || filterable,
|
8462
8269
|
hasPrepend: shallowRef(false),
|
8463
8270
|
updateHasPrepend: value => {
|
8464
8271
|
if (value) data.hasPrepend.value = value;
|
@@ -9410,9 +9217,6 @@ const VListItem = genericComponent()({
|
|
9410
9217
|
roundedClasses
|
9411
9218
|
} = useRounded(roundedProps);
|
9412
9219
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9413
|
-
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9414
|
-
keys: [keyCodes.enter]
|
9415
|
-
} : props.ripple);
|
9416
9220
|
const slotProps = computed(() => ({
|
9417
9221
|
isActive: isActive.value,
|
9418
9222
|
select,
|
@@ -9437,9 +9241,8 @@ const VListItem = genericComponent()({
|
|
9437
9241
|
function onKeyDown(e) {
|
9438
9242
|
const target = e.target;
|
9439
9243
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9440
|
-
if (e.key === 'Enter' || e.key === ' '
|
9244
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
9441
9245
|
e.preventDefault();
|
9442
|
-
e.stopPropagation();
|
9443
9246
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9444
9247
|
}
|
9445
9248
|
}
|
@@ -9549,7 +9352,7 @@ const VListItem = genericComponent()({
|
|
9549
9352
|
}), createElementVNode("div", {
|
9550
9353
|
"class": "v-list-item__spacer"
|
9551
9354
|
}, null)])]
|
9552
|
-
}), [[Ripple, isClickable.value &&
|
9355
|
+
}), [[Ripple, isClickable.value && props.ripple]]);
|
9553
9356
|
});
|
9554
9357
|
return {
|
9555
9358
|
activate,
|
@@ -9604,6 +9407,68 @@ const VListSubheader = genericComponent()({
|
|
9604
9407
|
}
|
9605
9408
|
});
|
9606
9409
|
|
9410
|
+
const makeVDividerProps = propsFactory({
|
9411
|
+
color: String,
|
9412
|
+
inset: Boolean,
|
9413
|
+
length: [Number, String],
|
9414
|
+
opacity: [Number, String],
|
9415
|
+
thickness: [Number, String],
|
9416
|
+
vertical: Boolean,
|
9417
|
+
...makeComponentProps(),
|
9418
|
+
...makeThemeProps()
|
9419
|
+
}, 'VDivider');
|
9420
|
+
const VDivider = genericComponent()({
|
9421
|
+
name: 'VDivider',
|
9422
|
+
props: makeVDividerProps(),
|
9423
|
+
setup(props, _ref) {
|
9424
|
+
let {
|
9425
|
+
attrs,
|
9426
|
+
slots
|
9427
|
+
} = _ref;
|
9428
|
+
const {
|
9429
|
+
themeClasses
|
9430
|
+
} = provideTheme(props);
|
9431
|
+
const {
|
9432
|
+
textColorClasses,
|
9433
|
+
textColorStyles
|
9434
|
+
} = useTextColor(() => props.color);
|
9435
|
+
const dividerStyles = computed(() => {
|
9436
|
+
const styles = {};
|
9437
|
+
if (props.length) {
|
9438
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9439
|
+
}
|
9440
|
+
if (props.thickness) {
|
9441
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9442
|
+
}
|
9443
|
+
return styles;
|
9444
|
+
});
|
9445
|
+
useRender(() => {
|
9446
|
+
const divider = createElementVNode("hr", {
|
9447
|
+
"class": normalizeClass([{
|
9448
|
+
'v-divider': true,
|
9449
|
+
'v-divider--inset': props.inset,
|
9450
|
+
'v-divider--vertical': props.vertical
|
9451
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
9452
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9453
|
+
'--v-border-opacity': props.opacity
|
9454
|
+
}, props.style]),
|
9455
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9456
|
+
"role": `${attrs.role || 'separator'}`
|
9457
|
+
}, null);
|
9458
|
+
if (!slots.default) return divider;
|
9459
|
+
return createElementVNode("div", {
|
9460
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
9461
|
+
'v-divider__wrapper--vertical': props.vertical,
|
9462
|
+
'v-divider__wrapper--inset': props.inset
|
9463
|
+
}])
|
9464
|
+
}, [divider, createElementVNode("div", {
|
9465
|
+
"class": "v-divider__content"
|
9466
|
+
}, [slots.default()]), divider]);
|
9467
|
+
});
|
9468
|
+
return {};
|
9469
|
+
}
|
9470
|
+
});
|
9471
|
+
|
9607
9472
|
// Types
|
9608
9473
|
|
9609
9474
|
const makeVListChildrenProps = propsFactory({
|
@@ -9872,7 +9737,6 @@ const makeVListProps = propsFactory({
|
|
9872
9737
|
activeClass: String,
|
9873
9738
|
bgColor: String,
|
9874
9739
|
disabled: Boolean,
|
9875
|
-
filterable: Boolean,
|
9876
9740
|
expandIcon: IconValue,
|
9877
9741
|
collapseIcon: IconValue,
|
9878
9742
|
lines: {
|
@@ -9956,9 +9820,7 @@ const VList = genericComponent()({
|
|
9956
9820
|
const activeColor = toRef(() => props.activeColor);
|
9957
9821
|
const baseColor = toRef(() => props.baseColor);
|
9958
9822
|
const color = toRef(() => props.color);
|
9959
|
-
createList(
|
9960
|
-
filterable: props.filterable
|
9961
|
-
});
|
9823
|
+
createList();
|
9962
9824
|
provideDefaults({
|
9963
9825
|
VListGroup: {
|
9964
9826
|
activeColor,
|
@@ -11641,7 +11503,6 @@ const makeVMenuProps = propsFactory({
|
|
11641
11503
|
// disableKeys: Boolean,
|
11642
11504
|
id: String,
|
11643
11505
|
submenu: Boolean,
|
11644
|
-
disableInitialFocus: Boolean,
|
11645
11506
|
...omit(makeVOverlayProps({
|
11646
11507
|
closeDelay: 250,
|
11647
11508
|
closeOnContentClick: true,
|
@@ -11716,7 +11577,7 @@ const VMenu = genericComponent()({
|
|
11716
11577
|
watch(isActive, val => {
|
11717
11578
|
if (val) {
|
11718
11579
|
parent?.register();
|
11719
|
-
if (IN_BROWSER
|
11580
|
+
if (IN_BROWSER) {
|
11720
11581
|
document.addEventListener('focusin', onFocusIn, {
|
11721
11582
|
once: true
|
11722
11583
|
});
|
@@ -12536,12 +12397,7 @@ function useVirtual(props, items) {
|
|
12536
12397
|
}
|
12537
12398
|
function calculateOffset(index) {
|
12538
12399
|
index = clamp(index, 0, items.value.length - 1);
|
12539
|
-
|
12540
|
-
const fraction = index % 1;
|
12541
|
-
const next = whole + 1;
|
12542
|
-
const wholeOffset = offsets[whole] || 0;
|
12543
|
-
const nextOffset = offsets[next] || wholeOffset;
|
12544
|
-
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12400
|
+
return offsets[index] || 0;
|
12545
12401
|
}
|
12546
12402
|
function calculateIndex(scrollTop) {
|
12547
12403
|
return binaryClosest(offsets, scrollTop);
|
@@ -12895,7 +12751,6 @@ const makeSelectProps = propsFactory({
|
|
12895
12751
|
},
|
12896
12752
|
openOnClear: Boolean,
|
12897
12753
|
itemColor: String,
|
12898
|
-
noAutoScroll: Boolean,
|
12899
12754
|
...makeItemsProps({
|
12900
12755
|
itemChildren: false
|
12901
12756
|
})
|
@@ -13110,7 +12965,7 @@ const VSelect = genericComponent()({
|
|
13110
12965
|
watch(menu, () => {
|
13111
12966
|
if (!props.hideSelected && menu.value && model.value.length) {
|
13112
12967
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
13113
|
-
IN_BROWSER &&
|
12968
|
+
IN_BROWSER && window.requestAnimationFrame(() => {
|
13114
12969
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
13115
12970
|
});
|
13116
12971
|
}
|
@@ -13203,22 +13058,6 @@ const VSelect = genericComponent()({
|
|
13203
13058
|
key: item.value,
|
13204
13059
|
onClick: () => select(item, null)
|
13205
13060
|
});
|
13206
|
-
if (item.raw.type === 'divider') {
|
13207
|
-
return slots.divider?.({
|
13208
|
-
props: item.raw,
|
13209
|
-
index
|
13210
|
-
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13211
|
-
"key": `divider-${index}`
|
13212
|
-
}), null);
|
13213
|
-
}
|
13214
|
-
if (item.raw.type === 'subheader') {
|
13215
|
-
return slots.subheader?.({
|
13216
|
-
props: item.raw,
|
13217
|
-
index
|
13218
|
-
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13219
|
-
"key": `subheader-${index}`
|
13220
|
-
}), null);
|
13221
|
-
}
|
13222
13061
|
return slots.item?.({
|
13223
13062
|
item,
|
13224
13063
|
index,
|
@@ -13379,9 +13218,6 @@ function filterItems(items, query, options) {
|
|
13379
13218
|
let match = -1;
|
13380
13219
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13381
13220
|
if (typeof item === 'object') {
|
13382
|
-
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13383
|
-
continue;
|
13384
|
-
}
|
13385
13221
|
const filterKeys = keys || Object.keys(transformed);
|
13386
13222
|
for (const key of filterKeys) {
|
13387
13223
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13584,7 +13420,7 @@ const VAutocomplete = genericComponent()({
|
|
13584
13420
|
menu.value = !menu.value;
|
13585
13421
|
}
|
13586
13422
|
function onListKeydown(e) {
|
13587
|
-
if (
|
13423
|
+
if (e.key !== ' ' && checkPrintable(e)) {
|
13588
13424
|
vTextFieldRef.value?.focus();
|
13589
13425
|
}
|
13590
13426
|
}
|
@@ -13789,7 +13625,6 @@ const VAutocomplete = genericComponent()({
|
|
13789
13625
|
}, props.menuProps), {
|
13790
13626
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13791
13627
|
"ref": listRef,
|
13792
|
-
"filterable": true,
|
13793
13628
|
"selected": selectedValues.value,
|
13794
13629
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13795
13630
|
"onMousedown": e => e.preventDefault(),
|
@@ -13821,22 +13656,6 @@ const VAutocomplete = genericComponent()({
|
|
13821
13656
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13822
13657
|
onClick: () => select(item, null)
|
13823
13658
|
});
|
13824
|
-
if (item.raw.type === 'divider') {
|
13825
|
-
return slots.divider?.({
|
13826
|
-
props: item.raw,
|
13827
|
-
index
|
13828
|
-
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13829
|
-
"key": `divider-${index}`
|
13830
|
-
}), null);
|
13831
|
-
}
|
13832
|
-
if (item.raw.type === 'subheader') {
|
13833
|
-
return slots.subheader?.({
|
13834
|
-
props: item.raw,
|
13835
|
-
index
|
13836
|
-
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13837
|
-
"key": `subheader-${index}`
|
13838
|
-
}), null);
|
13839
|
-
}
|
13840
13659
|
return slots.item?.({
|
13841
13660
|
item,
|
13842
13661
|
index,
|
@@ -13981,8 +13800,7 @@ const makeVBadgeProps = propsFactory({
|
|
13981
13800
|
...makeThemeProps(),
|
13982
13801
|
...makeTransitionProps({
|
13983
13802
|
transition: 'scale-rotate-transition'
|
13984
|
-
})
|
13985
|
-
...makeDimensionProps()
|
13803
|
+
})
|
13986
13804
|
}, 'VBadge');
|
13987
13805
|
const VBadge = genericComponent()({
|
13988
13806
|
name: 'VBadge',
|
@@ -14012,9 +13830,6 @@ const VBadge = genericComponent()({
|
|
14012
13830
|
const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
|
14013
13831
|
return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
|
14014
13832
|
});
|
14015
|
-
const {
|
14016
|
-
dimensionStyles
|
14017
|
-
} = useDimension(props);
|
14018
13833
|
useRender(() => {
|
14019
13834
|
const value = Number(props.content);
|
14020
13835
|
const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
|
@@ -14036,7 +13851,7 @@ const VBadge = genericComponent()({
|
|
14036
13851
|
}, {
|
14037
13852
|
default: () => [withDirectives(createElementVNode("span", mergeProps({
|
14038
13853
|
"class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
|
14039
|
-
"style": [backgroundColorStyles.value, textColorStyles.value,
|
13854
|
+
"style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
|
14040
13855
|
"aria-atomic": "true",
|
14041
13856
|
"aria-label": t(props.label, value),
|
14042
13857
|
"aria-live": "polite",
|
@@ -17445,13 +17260,13 @@ function date(value) {
|
|
17445
17260
|
return null;
|
17446
17261
|
}
|
17447
17262
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17448
|
-
function getWeekdays(locale, firstDayOfWeek
|
17263
|
+
function getWeekdays(locale, firstDayOfWeek) {
|
17449
17264
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17450
17265
|
return createRange(7).map(i => {
|
17451
17266
|
const weekday = new Date(sundayJanuarySecond2000);
|
17452
17267
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17453
17268
|
return new Intl.DateTimeFormat(locale, {
|
17454
|
-
weekday:
|
17269
|
+
weekday: 'narrow'
|
17455
17270
|
}).format(weekday);
|
17456
17271
|
});
|
17457
17272
|
}
|
@@ -17915,9 +17730,9 @@ class VuetifyDateAdapter {
|
|
17915
17730
|
getDiff(date, comparing, unit) {
|
17916
17731
|
return getDiff(date, comparing, unit);
|
17917
17732
|
}
|
17918
|
-
getWeekdays(firstDayOfWeek
|
17733
|
+
getWeekdays(firstDayOfWeek) {
|
17919
17734
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
17920
|
-
return getWeekdays(this.locale, firstDay
|
17735
|
+
return getWeekdays(this.locale, firstDay);
|
17921
17736
|
}
|
17922
17737
|
getYear(date) {
|
17923
17738
|
return getYear(date);
|
@@ -18272,7 +18087,6 @@ const VCombobox = genericComponent()({
|
|
18272
18087
|
_search.value = val ?? '';
|
18273
18088
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18274
18089
|
model.value = [transformItem$3(props, val)];
|
18275
|
-
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18276
18090
|
}
|
18277
18091
|
if (val && props.multiple && props.delimiters?.length) {
|
18278
18092
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18353,7 +18167,7 @@ const VCombobox = genericComponent()({
|
|
18353
18167
|
menu.value = !menu.value;
|
18354
18168
|
}
|
18355
18169
|
function onListKeydown(e) {
|
18356
|
-
if (
|
18170
|
+
if (e.key !== ' ' && checkPrintable(e)) {
|
18357
18171
|
vTextFieldRef.value?.focus();
|
18358
18172
|
}
|
18359
18173
|
}
|
@@ -18558,7 +18372,6 @@ const VCombobox = genericComponent()({
|
|
18558
18372
|
}, props.menuProps), {
|
18559
18373
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18560
18374
|
"ref": listRef,
|
18561
|
-
"filterable": true,
|
18562
18375
|
"selected": selectedValues.value,
|
18563
18376
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18564
18377
|
"onMousedown": e => e.preventDefault(),
|
@@ -18590,22 +18403,6 @@ const VCombobox = genericComponent()({
|
|
18590
18403
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18591
18404
|
onClick: () => select(item, null)
|
18592
18405
|
});
|
18593
|
-
if (item.raw.type === 'divider') {
|
18594
|
-
return slots.divider?.({
|
18595
|
-
props: item.raw,
|
18596
|
-
index
|
18597
|
-
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18598
|
-
"key": `divider-${index}`
|
18599
|
-
}), null);
|
18600
|
-
}
|
18601
|
-
if (item.raw.type === 'subheader') {
|
18602
|
-
return slots.subheader?.({
|
18603
|
-
props: item.raw,
|
18604
|
-
index
|
18605
|
-
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18606
|
-
"key": `subheader-${index}`
|
18607
|
-
}), null);
|
18608
|
-
}
|
18609
18406
|
return slots.item?.({
|
18610
18407
|
item,
|
18611
18408
|
index,
|
@@ -20488,7 +20285,6 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20488
20285
|
color: String,
|
20489
20286
|
disableSort: Boolean,
|
20490
20287
|
fixedHeader: Boolean,
|
20491
|
-
lastFixed: Boolean,
|
20492
20288
|
multiSort: Boolean,
|
20493
20289
|
sortAscIcon: {
|
20494
20290
|
type: IconValue,
|
@@ -20535,11 +20331,10 @@ const VDataTableHeaders = genericComponent()({
|
|
20535
20331
|
loaderClasses
|
20536
20332
|
} = useLoader(props);
|
20537
20333
|
function getFixedStyles(column, y) {
|
20538
|
-
if (!(props.sticky || props.fixedHeader) && !
|
20334
|
+
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20539
20335
|
return {
|
20540
20336
|
position: 'sticky',
|
20541
|
-
left: column.fixed
|
20542
|
-
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20337
|
+
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20543
20338
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20544
20339
|
};
|
20545
20340
|
}
|
@@ -21055,18 +20850,11 @@ const VDataTableRows = genericComponent()({
|
|
21055
20850
|
}
|
21056
20851
|
});
|
21057
20852
|
|
21058
|
-
// Types
|
21059
|
-
|
21060
20853
|
const makeVTableProps = propsFactory({
|
21061
20854
|
fixedHeader: Boolean,
|
21062
20855
|
fixedFooter: Boolean,
|
21063
20856
|
height: [Number, String],
|
21064
20857
|
hover: Boolean,
|
21065
|
-
striped: {
|
21066
|
-
type: String,
|
21067
|
-
default: null,
|
21068
|
-
validator: v => ['even', 'odd'].includes(v)
|
21069
|
-
},
|
21070
20858
|
...makeComponentProps(),
|
21071
20859
|
...makeDensityProps(),
|
21072
20860
|
...makeTagProps(),
|
@@ -21093,9 +20881,7 @@ const VTable = genericComponent()({
|
|
21093
20881
|
'v-table--fixed-footer': props.fixedFooter,
|
21094
20882
|
'v-table--has-top': !!slots.top,
|
21095
20883
|
'v-table--has-bottom': !!slots.bottom,
|
21096
|
-
'v-table--hover': props.hover
|
21097
|
-
'v-table--striped-even': props.striped === 'even',
|
21098
|
-
'v-table--striped-odd': props.striped === 'odd'
|
20884
|
+
'v-table--hover': props.hover
|
21099
20885
|
}, themeClasses.value, densityClasses.value, props.class]),
|
21100
20886
|
"style": normalizeStyle(props.style)
|
21101
20887
|
}, {
|
@@ -22270,8 +22056,7 @@ const makeCalendarProps = propsFactory({
|
|
22270
22056
|
firstDayOfWeek: {
|
22271
22057
|
type: [Number, String],
|
22272
22058
|
default: undefined
|
22273
|
-
}
|
22274
|
-
weekdayFormat: String
|
22059
|
+
}
|
22275
22060
|
}, 'calendar');
|
22276
22061
|
function useCalendar(props) {
|
22277
22062
|
const adapter = useDate();
|
@@ -22512,7 +22297,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22512
22297
|
"ref": daysRef,
|
22513
22298
|
"key": daysInMonth.value[0].date?.toString(),
|
22514
22299
|
"class": "v-date-picker-month__days"
|
22515
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek
|
22300
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22516
22301
|
"class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
|
22517
22302
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22518
22303
|
const slotProps = {
|
@@ -23017,9 +22802,7 @@ const VDatePicker = genericComponent()({
|
|
23017
22802
|
"max": maxDate.value,
|
23018
22803
|
"year": year.value,
|
23019
22804
|
"allowedMonths": allowedMonths
|
23020
|
-
}), {
|
23021
|
-
...pick(slots, ['month'])
|
23022
|
-
}) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
|
22805
|
+
}), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
|
23023
22806
|
"key": "date-picker-years"
|
23024
22807
|
}, datePickerYearsProps, {
|
23025
22808
|
"modelValue": year.value,
|
@@ -23027,9 +22810,7 @@ const VDatePicker = genericComponent()({
|
|
23027
22810
|
"min": minDate.value,
|
23028
22811
|
"max": maxDate.value,
|
23029
22812
|
"allowedYears": allowedYears
|
23030
|
-
}), {
|
23031
|
-
...pick(slots, ['year'])
|
23032
|
-
}) : createVNode(VDatePickerMonth, mergeProps({
|
22813
|
+
}), null) : createVNode(VDatePickerMonth, mergeProps({
|
23033
22814
|
"key": "date-picker-month"
|
23034
22815
|
}, datePickerMonthProps, {
|
23035
22816
|
"modelValue": model.value,
|
@@ -23040,9 +22821,7 @@ const VDatePicker = genericComponent()({
|
|
23040
22821
|
"onUpdate:year": [$event => year.value = $event, onUpdateYear],
|
23041
22822
|
"min": minDate.value,
|
23042
22823
|
"max": maxDate.value
|
23043
|
-
}),
|
23044
|
-
...pick(slots, ['day'])
|
23045
|
-
})]
|
22824
|
+
}), null)]
|
23046
22825
|
})]),
|
23047
22826
|
actions: slots.actions
|
23048
22827
|
});
|
@@ -24133,9 +23912,6 @@ const VInfiniteScroll = genericComponent()({
|
|
24133
23912
|
startStatus.value = status;
|
24134
23913
|
} else if (side === 'end') {
|
24135
23914
|
endStatus.value = status;
|
24136
|
-
} else if (side === 'both') {
|
24137
|
-
startStatus.value = status;
|
24138
|
-
endStatus.value = status;
|
24139
23915
|
}
|
24140
23916
|
}
|
24141
23917
|
function getStatus(side) {
|
@@ -24247,32 +24023,6 @@ const VInfiniteScroll = genericComponent()({
|
|
24247
24023
|
}, [renderSide('end', endStatus.value)])]
|
24248
24024
|
});
|
24249
24025
|
});
|
24250
|
-
function reset(side) {
|
24251
|
-
const effectiveSide = side ?? props.side;
|
24252
|
-
setStatus(effectiveSide, 'ok');
|
24253
|
-
nextTick(() => {
|
24254
|
-
setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
|
24255
|
-
if (props.mode !== 'manual') {
|
24256
|
-
nextTick(() => {
|
24257
|
-
window.requestAnimationFrame(() => {
|
24258
|
-
window.requestAnimationFrame(() => {
|
24259
|
-
window.requestAnimationFrame(() => {
|
24260
|
-
if (effectiveSide === 'both') {
|
24261
|
-
intersecting('start');
|
24262
|
-
intersecting('end');
|
24263
|
-
} else {
|
24264
|
-
intersecting(effectiveSide);
|
24265
|
-
}
|
24266
|
-
});
|
24267
|
-
});
|
24268
|
-
});
|
24269
|
-
});
|
24270
|
-
}
|
24271
|
-
});
|
24272
|
-
}
|
24273
|
-
return {
|
24274
|
-
reset
|
24275
|
-
};
|
24276
24026
|
}
|
24277
24027
|
});
|
24278
24028
|
|
@@ -24352,47 +24102,8 @@ const VItem = genericComponent()({
|
|
24352
24102
|
}
|
24353
24103
|
});
|
24354
24104
|
|
24355
|
-
|
24356
|
-
|
24357
|
-
...makeComponentProps(),
|
24358
|
-
...makeRoundedProps(),
|
24359
|
-
...makeTagProps({
|
24360
|
-
tag: 'kbd'
|
24361
|
-
}),
|
24362
|
-
...makeThemeProps(),
|
24363
|
-
...makeElevationProps(),
|
24364
|
-
color: String
|
24365
|
-
}, 'VKbd');
|
24366
|
-
const VKbd = genericComponent()({
|
24367
|
-
name: 'VKbd',
|
24368
|
-
props: makeVKbdProps(),
|
24369
|
-
setup(props, _ref) {
|
24370
|
-
let {
|
24371
|
-
slots
|
24372
|
-
} = _ref;
|
24373
|
-
const {
|
24374
|
-
themeClasses
|
24375
|
-
} = provideTheme(props);
|
24376
|
-
const {
|
24377
|
-
borderClasses
|
24378
|
-
} = useBorder(props);
|
24379
|
-
const {
|
24380
|
-
roundedClasses
|
24381
|
-
} = useRounded(props);
|
24382
|
-
const {
|
24383
|
-
backgroundColorClasses,
|
24384
|
-
backgroundColorStyles
|
24385
|
-
} = useBackgroundColor(() => props.color);
|
24386
|
-
const {
|
24387
|
-
elevationClasses
|
24388
|
-
} = useElevation(props);
|
24389
|
-
useRender(() => createVNode(props.tag, {
|
24390
|
-
"class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
24391
|
-
"style": normalizeStyle([backgroundColorStyles.value, props.style])
|
24392
|
-
}, slots));
|
24393
|
-
return {};
|
24394
|
-
}
|
24395
|
-
});
|
24105
|
+
// Styles
|
24106
|
+
const VKbd = createSimpleFunctional('v-kbd', 'kbd');
|
24396
24107
|
|
24397
24108
|
const makeVLayoutProps = propsFactory({
|
24398
24109
|
...makeComponentProps(),
|
@@ -25230,14 +24941,6 @@ const makeVNumberInputProps = propsFactory({
|
|
25230
24941
|
type: Number,
|
25231
24942
|
default: 0
|
25232
24943
|
},
|
25233
|
-
minFractionDigits: {
|
25234
|
-
type: Number,
|
25235
|
-
default: null
|
25236
|
-
},
|
25237
|
-
decimalSeparator: {
|
25238
|
-
type: String,
|
25239
|
-
validator: v => !v || v.length === 1
|
25240
|
-
},
|
25241
24944
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
25242
24945
|
}, 'VNumberInput');
|
25243
24946
|
const VNumberInput = genericComponent()({
|
@@ -25263,24 +24966,11 @@ const VNumberInput = genericComponent()({
|
|
25263
24966
|
const form = useForm(props);
|
25264
24967
|
const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
|
25265
24968
|
const isFocused = shallowRef(props.focused);
|
25266
|
-
const {
|
25267
|
-
decimalSeparator: decimalSeparatorFromLocale
|
25268
|
-
} = useLocale();
|
25269
|
-
const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
|
25270
24969
|
function correctPrecision(val) {
|
25271
24970
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
25272
|
-
let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
25273
24971
|
const fixed = precision == null ? String(val) : val.toFixed(precision);
|
25274
|
-
|
25275
|
-
|
25276
|
-
.replace('.', decimalSeparator.value);
|
25277
|
-
}
|
25278
|
-
if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
|
25279
|
-
return fixed.replace('.', decimalSeparator.value);
|
25280
|
-
}
|
25281
|
-
let [baseDigits, fractionDigits] = fixed.split('.');
|
25282
|
-
fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
|
25283
|
-
return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
|
24972
|
+
return isFocused.value ? Number(fixed).toString() // trim zeros
|
24973
|
+
: fixed;
|
25284
24974
|
}
|
25285
24975
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
25286
24976
|
const _inputText = shallowRef(null);
|
@@ -25297,11 +24987,8 @@ const VNumberInput = genericComponent()({
|
|
25297
24987
|
if (val === null || val === '') {
|
25298
24988
|
model.value = null;
|
25299
24989
|
_inputText.value = null;
|
25300
|
-
|
25301
|
-
|
25302
|
-
const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
|
25303
|
-
if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
|
25304
|
-
model.value = parsedValue;
|
24990
|
+
} else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
|
24991
|
+
model.value = Number(val);
|
25305
24992
|
_inputText.value = val;
|
25306
24993
|
}
|
25307
24994
|
}
|
@@ -25338,7 +25025,6 @@ const VNumberInput = genericComponent()({
|
|
25338
25025
|
}
|
25339
25026
|
};
|
25340
25027
|
watch(() => props.precision, () => formatInputValue());
|
25341
|
-
watch(() => props.minFractionDigits, () => formatInputValue());
|
25342
25028
|
onMounted(() => {
|
25343
25029
|
clampModel();
|
25344
25030
|
});
|
@@ -25372,24 +25058,24 @@ const VNumberInput = genericComponent()({
|
|
25372
25058
|
selectionEnd
|
25373
25059
|
} = inputElement ?? {};
|
25374
25060
|
const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
|
25375
|
-
const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision
|
25061
|
+
const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
|
25376
25062
|
|
25377
|
-
//
|
25378
|
-
//
|
25379
|
-
//
|
25380
|
-
if (
|
25063
|
+
// Only numbers, "-", "." are allowed
|
25064
|
+
// AND "-", "." are allowed only once
|
25065
|
+
// AND "-" is only allowed at the start
|
25066
|
+
if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
|
25381
25067
|
e.preventDefault();
|
25382
25068
|
inputElement.value = potentialNewNumber;
|
25383
25069
|
}
|
25384
25070
|
if (props.precision == null) return;
|
25385
25071
|
|
25386
25072
|
// Ignore decimal digits above precision limit
|
25387
|
-
if (potentialNewInputVal.split(
|
25073
|
+
if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
|
25388
25074
|
e.preventDefault();
|
25389
25075
|
inputElement.value = potentialNewNumber;
|
25390
25076
|
}
|
25391
25077
|
// Ignore decimal separator when precision = 0
|
25392
|
-
if (props.precision === 0 && potentialNewInputVal.includes(
|
25078
|
+
if (props.precision === 0 && potentialNewInputVal.includes('.')) {
|
25393
25079
|
e.preventDefault();
|
25394
25080
|
inputElement.value = potentialNewNumber;
|
25395
25081
|
}
|
@@ -25441,16 +25127,19 @@ const VNumberInput = genericComponent()({
|
|
25441
25127
|
if (controlsDisabled.value) return;
|
25442
25128
|
if (!vTextFieldRef.value) return;
|
25443
25129
|
const actualText = vTextFieldRef.value.value;
|
25444
|
-
|
25445
|
-
|
25446
|
-
inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
|
25130
|
+
if (actualText && !isNaN(Number(actualText))) {
|
25131
|
+
inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
|
25447
25132
|
} else {
|
25448
25133
|
inputText.value = null;
|
25449
25134
|
}
|
25450
25135
|
}
|
25451
25136
|
function formatInputValue() {
|
25452
25137
|
if (controlsDisabled.value) return;
|
25453
|
-
|
25138
|
+
if (model.value === null || isNaN(model.value)) {
|
25139
|
+
inputText.value = null;
|
25140
|
+
return;
|
25141
|
+
}
|
25142
|
+
inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
|
25454
25143
|
}
|
25455
25144
|
function trimDecimalZeros() {
|
25456
25145
|
if (controlsDisabled.value) return;
|
@@ -25458,7 +25147,7 @@ const VNumberInput = genericComponent()({
|
|
25458
25147
|
inputText.value = null;
|
25459
25148
|
return;
|
25460
25149
|
}
|
25461
|
-
inputText.value = model.value.toString()
|
25150
|
+
inputText.value = model.value.toString();
|
25462
25151
|
}
|
25463
25152
|
function onFocus() {
|
25464
25153
|
trimDecimalZeros();
|
@@ -25710,10 +25399,9 @@ const VOtpInput = genericComponent()({
|
|
25710
25399
|
e.preventDefault();
|
25711
25400
|
e.stopPropagation();
|
25712
25401
|
const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
|
25713
|
-
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25714
25402
|
if (isValidNumber(clipboardText)) return;
|
25715
25403
|
model.value = clipboardText.split('');
|
25716
|
-
inputRef.value?.[
|
25404
|
+
inputRef.value?.[index].blur();
|
25717
25405
|
}
|
25718
25406
|
function reset() {
|
25719
25407
|
model.value = [];
|
@@ -30413,6 +30101,11 @@ const makeVIconBtnProps = propsFactory({
|
|
30413
30101
|
hideOverlay: Boolean,
|
30414
30102
|
icon: [String, Function, Object],
|
30415
30103
|
iconColor: String,
|
30104
|
+
iconSize: [Number, String],
|
30105
|
+
iconSizes: {
|
30106
|
+
type: Array,
|
30107
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
30108
|
+
},
|
30416
30109
|
loading: Boolean,
|
30417
30110
|
opacity: [Number, String],
|
30418
30111
|
readonly: Boolean,
|
@@ -30432,7 +30125,6 @@ const makeVIconBtnProps = propsFactory({
|
|
30432
30125
|
...makeBorderProps(),
|
30433
30126
|
...makeComponentProps(),
|
30434
30127
|
...makeElevationProps(),
|
30435
|
-
...makeIconSizeProps(),
|
30436
30128
|
...makeRoundedProps(),
|
30437
30129
|
...makeTagProps({
|
30438
30130
|
tag: 'button'
|
@@ -30487,6 +30179,7 @@ const VIconBtn = genericComponent()({
|
|
30487
30179
|
})()
|
30488
30180
|
}));
|
30489
30181
|
const btnSizeMap = new Map(props.sizes);
|
30182
|
+
const iconSizeMap = new Map(props.iconSizes);
|
30490
30183
|
function onClick() {
|
30491
30184
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
30492
30185
|
isActive.value = !isActive.value;
|
@@ -30498,12 +30191,12 @@ const VIconBtn = genericComponent()({
|
|
30498
30191
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
30499
30192
|
const btnHeight = props.height ?? btnSize;
|
30500
30193
|
const btnWidth = props.width ?? btnSize;
|
30501
|
-
const
|
30502
|
-
|
30503
|
-
|
30194
|
+
const _iconSize = props.iconSize;
|
30195
|
+
const hasNamedIconSize = iconSizeMap.has(_iconSize);
|
30196
|
+
const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
|
30504
30197
|
const iconProps = {
|
30505
30198
|
icon,
|
30506
|
-
size: iconSize
|
30199
|
+
size: iconSize,
|
30507
30200
|
iconColor: props.iconColor,
|
30508
30201
|
opacity: props.opacity
|
30509
30202
|
};
|
@@ -30546,7 +30239,7 @@ const VIconBtn = genericComponent()({
|
|
30546
30239
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
30547
30240
|
"indeterminate": "disable-shrink",
|
30548
30241
|
"width": "2",
|
30549
|
-
"size": iconSize
|
30242
|
+
"size": iconSize
|
30550
30243
|
}, null)])]
|
30551
30244
|
});
|
30552
30245
|
});
|
@@ -30554,251 +30247,6 @@ const VIconBtn = genericComponent()({
|
|
30554
30247
|
}
|
30555
30248
|
});
|
30556
30249
|
|
30557
|
-
// Utilities
|
30558
|
-
|
30559
|
-
// Types
|
30560
|
-
|
30561
|
-
const makeMaskProps = propsFactory({
|
30562
|
-
mask: [String, Object],
|
30563
|
-
returnMaskedValue: Boolean
|
30564
|
-
}, 'mask');
|
30565
|
-
const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\]:";'<>?,./\\ ]/;
|
30566
|
-
const presets = {
|
30567
|
-
'credit-card': '#### - #### - #### - ####',
|
30568
|
-
date: '##/##/####',
|
30569
|
-
'date-time': '##/##/#### ##:##',
|
30570
|
-
'iso-date': '####-##-##',
|
30571
|
-
'iso-date-time': '####-##-## ##:##',
|
30572
|
-
phone: '(###) ### - ####',
|
30573
|
-
social: '###-##-####',
|
30574
|
-
time: '##:##',
|
30575
|
-
'time-with-seconds': '##:##:##'
|
30576
|
-
};
|
30577
|
-
function isMaskDelimiter(char) {
|
30578
|
-
return char ? defaultDelimiters.test(char) : false;
|
30579
|
-
}
|
30580
|
-
const defaultTokens = {
|
30581
|
-
'#': {
|
30582
|
-
pattern: /[0-9]/
|
30583
|
-
},
|
30584
|
-
A: {
|
30585
|
-
pattern: /[A-Z]/i,
|
30586
|
-
convert: v => v.toUpperCase()
|
30587
|
-
},
|
30588
|
-
a: {
|
30589
|
-
pattern: /[a-z]/i,
|
30590
|
-
convert: v => v.toLowerCase()
|
30591
|
-
},
|
30592
|
-
N: {
|
30593
|
-
pattern: /[0-9A-Z]/i,
|
30594
|
-
convert: v => v.toUpperCase()
|
30595
|
-
},
|
30596
|
-
n: {
|
30597
|
-
pattern: /[0-9a-z]/i,
|
30598
|
-
convert: v => v.toLowerCase()
|
30599
|
-
},
|
30600
|
-
X: {
|
30601
|
-
pattern: defaultDelimiters
|
30602
|
-
}
|
30603
|
-
};
|
30604
|
-
function useMask(props, inputRef) {
|
30605
|
-
const mask = computed(() => {
|
30606
|
-
if (typeof props.mask === 'string') {
|
30607
|
-
if (props.mask in presets) return presets[props.mask];
|
30608
|
-
return props.mask;
|
30609
|
-
}
|
30610
|
-
return props.mask?.mask ?? '';
|
30611
|
-
});
|
30612
|
-
const tokens = computed(() => {
|
30613
|
-
return {
|
30614
|
-
...defaultTokens,
|
30615
|
-
...(isObject(props.mask) ? props.mask.tokens : null)
|
30616
|
-
};
|
30617
|
-
});
|
30618
|
-
const selection = shallowRef(0);
|
30619
|
-
const lazySelection = shallowRef(0);
|
30620
|
-
function isMask(char) {
|
30621
|
-
return char in tokens.value;
|
30622
|
-
}
|
30623
|
-
function maskValidates(mask, char) {
|
30624
|
-
if (char == null || !isMask(mask)) return false;
|
30625
|
-
const item = tokens.value[mask];
|
30626
|
-
if (item.pattern) return item.pattern.test(char);
|
30627
|
-
return item.test(char);
|
30628
|
-
}
|
30629
|
-
function convert(mask, char) {
|
30630
|
-
const item = tokens.value[mask];
|
30631
|
-
return item.convert ? item.convert(char) : char;
|
30632
|
-
}
|
30633
|
-
function maskText(text) {
|
30634
|
-
const trimmedText = text?.trim().replace(/\s+/g, ' ');
|
30635
|
-
if (trimmedText == null) return '';
|
30636
|
-
if (!mask.value.length || !trimmedText.length) return trimmedText;
|
30637
|
-
let textIndex = 0;
|
30638
|
-
let maskIndex = 0;
|
30639
|
-
let newText = '';
|
30640
|
-
while (maskIndex < mask.value.length) {
|
30641
|
-
const mchar = mask.value[maskIndex];
|
30642
|
-
const tchar = trimmedText[textIndex];
|
30643
|
-
|
30644
|
-
// Escaped character in mask, the next mask character is inserted
|
30645
|
-
if (mchar === '\\') {
|
30646
|
-
newText += mask.value[maskIndex + 1];
|
30647
|
-
maskIndex += 2;
|
30648
|
-
continue;
|
30649
|
-
}
|
30650
|
-
if (!isMask(mchar)) {
|
30651
|
-
newText += mchar;
|
30652
|
-
if (tchar === mchar) {
|
30653
|
-
textIndex++;
|
30654
|
-
}
|
30655
|
-
} else if (maskValidates(mchar, tchar)) {
|
30656
|
-
newText += convert(mchar, tchar);
|
30657
|
-
textIndex++;
|
30658
|
-
} else {
|
30659
|
-
break;
|
30660
|
-
}
|
30661
|
-
maskIndex++;
|
30662
|
-
}
|
30663
|
-
return newText;
|
30664
|
-
}
|
30665
|
-
function unmaskText(text) {
|
30666
|
-
if (text == null) return null;
|
30667
|
-
if (!mask.value.length || !text.length) return text;
|
30668
|
-
let textIndex = 0;
|
30669
|
-
let maskIndex = 0;
|
30670
|
-
let newText = '';
|
30671
|
-
while (true) {
|
30672
|
-
const mchar = mask.value[maskIndex];
|
30673
|
-
const tchar = text[textIndex];
|
30674
|
-
if (tchar == null) break;
|
30675
|
-
if (mchar == null) {
|
30676
|
-
newText += tchar;
|
30677
|
-
textIndex++;
|
30678
|
-
continue;
|
30679
|
-
}
|
30680
|
-
|
30681
|
-
// Escaped character in mask, skip the next input character
|
30682
|
-
if (mchar === '\\') {
|
30683
|
-
if (tchar === mask.value[maskIndex + 1]) {
|
30684
|
-
textIndex++;
|
30685
|
-
}
|
30686
|
-
maskIndex += 2;
|
30687
|
-
continue;
|
30688
|
-
}
|
30689
|
-
if (maskValidates(mchar, tchar)) {
|
30690
|
-
// masked char
|
30691
|
-
newText += tchar;
|
30692
|
-
textIndex++;
|
30693
|
-
maskIndex++;
|
30694
|
-
continue;
|
30695
|
-
} else if (mchar !== tchar) {
|
30696
|
-
// input doesn't match mask, skip forward until it does
|
30697
|
-
while (true) {
|
30698
|
-
const mchar = mask.value[maskIndex++];
|
30699
|
-
if (mchar == null || maskValidates(mchar, tchar)) break;
|
30700
|
-
}
|
30701
|
-
continue;
|
30702
|
-
}
|
30703
|
-
textIndex++;
|
30704
|
-
maskIndex++;
|
30705
|
-
}
|
30706
|
-
return newText;
|
30707
|
-
}
|
30708
|
-
function setCaretPosition(newSelection) {
|
30709
|
-
selection.value = newSelection;
|
30710
|
-
inputRef.value && inputRef.value.setSelectionRange(selection.value, selection.value);
|
30711
|
-
}
|
30712
|
-
function resetSelections() {
|
30713
|
-
if (!inputRef.value?.selectionEnd) return;
|
30714
|
-
selection.value = inputRef.value.selectionEnd;
|
30715
|
-
lazySelection.value = 0;
|
30716
|
-
for (let index = 0; index < selection.value; index++) {
|
30717
|
-
isMaskDelimiter(inputRef.value.value[index]) || lazySelection.value++;
|
30718
|
-
}
|
30719
|
-
}
|
30720
|
-
function updateRange() {
|
30721
|
-
if (!inputRef.value) return;
|
30722
|
-
resetSelections();
|
30723
|
-
let selection = 0;
|
30724
|
-
const newValue = inputRef.value.value;
|
30725
|
-
if (newValue) {
|
30726
|
-
for (let index = 0; index < newValue.length; index++) {
|
30727
|
-
if (lazySelection.value <= 0) break;
|
30728
|
-
isMaskDelimiter(newValue[index]) || lazySelection.value--;
|
30729
|
-
selection++;
|
30730
|
-
}
|
30731
|
-
}
|
30732
|
-
setCaretPosition(selection);
|
30733
|
-
}
|
30734
|
-
return {
|
30735
|
-
updateRange,
|
30736
|
-
maskText,
|
30737
|
-
unmaskText
|
30738
|
-
};
|
30739
|
-
}
|
30740
|
-
|
30741
|
-
// Types
|
30742
|
-
|
30743
|
-
const makeVMaskInputProps = propsFactory({
|
30744
|
-
...makeVTextFieldProps(),
|
30745
|
-
...makeMaskProps()
|
30746
|
-
}, 'VMaskInput');
|
30747
|
-
const VMaskInput = genericComponent()({
|
30748
|
-
name: 'VMaskInput',
|
30749
|
-
props: makeVMaskInputProps(),
|
30750
|
-
emits: {
|
30751
|
-
'update:modelValue': val => true
|
30752
|
-
},
|
30753
|
-
setup(props, _ref) {
|
30754
|
-
let {
|
30755
|
-
slots,
|
30756
|
-
emit
|
30757
|
-
} = _ref;
|
30758
|
-
const vTextFieldRef = ref();
|
30759
|
-
const {
|
30760
|
-
maskText,
|
30761
|
-
updateRange,
|
30762
|
-
unmaskText
|
30763
|
-
} = useMask(props, vTextFieldRef);
|
30764
|
-
const returnMaskedValue = computed(() => props.mask && props.returnMaskedValue);
|
30765
|
-
const model = useProxiedModel(props, 'modelValue', undefined,
|
30766
|
-
// Always display masked value in input when mask is applied
|
30767
|
-
val => props.mask ? maskText(unmaskText(val)) : val, val => {
|
30768
|
-
if (props.mask) {
|
30769
|
-
const valueBeforeChange = unmaskText(model.value);
|
30770
|
-
// E.g. mask is #-# and the input value is '2-23'
|
30771
|
-
// model-value should be enforced to '2-2'
|
30772
|
-
const enforcedMaskedValue = maskText(unmaskText(val));
|
30773
|
-
const newUnmaskedValue = unmaskText(enforcedMaskedValue);
|
30774
|
-
if (newUnmaskedValue === valueBeforeChange) {
|
30775
|
-
vTextFieldRef.value.value = enforcedMaskedValue;
|
30776
|
-
}
|
30777
|
-
val = newUnmaskedValue;
|
30778
|
-
updateRange();
|
30779
|
-
return returnMaskedValue.value ? maskText(val) : val;
|
30780
|
-
}
|
30781
|
-
return val;
|
30782
|
-
});
|
30783
|
-
onBeforeMount(() => {
|
30784
|
-
if (props.returnMaskedValue) {
|
30785
|
-
emit('update:modelValue', model.value);
|
30786
|
-
}
|
30787
|
-
});
|
30788
|
-
useRender(() => {
|
30789
|
-
const textFieldProps = VTextField.filterProps(props);
|
30790
|
-
return createVNode(VTextField, mergeProps(textFieldProps, {
|
30791
|
-
"modelValue": model.value,
|
30792
|
-
"onUpdate:modelValue": $event => model.value = $event,
|
30793
|
-
"ref": vTextFieldRef
|
30794
|
-
}), {
|
30795
|
-
...slots
|
30796
|
-
});
|
30797
|
-
});
|
30798
|
-
return forwardRefs({}, vTextFieldRef);
|
30799
|
-
}
|
30800
|
-
});
|
30801
|
-
|
30802
30250
|
// Types
|
30803
30251
|
|
30804
30252
|
const makeVStepperVerticalActionsProps = propsFactory({
|
@@ -32304,7 +31752,6 @@ var components = /*#__PURE__*/Object.freeze({
|
|
32304
31752
|
VListSubheader: VListSubheader,
|
32305
31753
|
VLocaleProvider: VLocaleProvider,
|
32306
31754
|
VMain: VMain,
|
32307
|
-
VMaskInput: VMaskInput,
|
32308
31755
|
VMenu: VMenu,
|
32309
31756
|
VMessages: VMessages,
|
32310
31757
|
VNavigationDrawer: VNavigationDrawer,
|
@@ -32702,7 +32149,7 @@ function createVuetify$1() {
|
|
32702
32149
|
};
|
32703
32150
|
});
|
32704
32151
|
}
|
32705
|
-
const version$1 = "3.8.9-
|
32152
|
+
const version$1 = "3.8.9-master.2025-06-12";
|
32706
32153
|
createVuetify$1.version = version$1;
|
32707
32154
|
|
32708
32155
|
// Vue's inject() can only be used in setup
|
@@ -33000,7 +32447,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
33000
32447
|
|
33001
32448
|
/* eslint-disable local-rules/sort-imports */
|
33002
32449
|
|
33003
|
-
const version = "3.8.9-
|
32450
|
+
const version = "3.8.9-master.2025-06-12";
|
33004
32451
|
|
33005
32452
|
/* eslint-disable local-rules/sort-imports */
|
33006
32453
|
|