@vuetify/nightly 3.8.7-master.2025-06-03 → 3.8.8-dev.2025-06-04
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 +29 -15
- package/dist/json/attributes.json +3615 -3515
- package/dist/json/importMap-labs.json +18 -18
- package/dist/json/importMap.json +138 -138
- package/dist/json/tags.json +25 -0
- package/dist/json/web-types.json +6428 -6096
- package/dist/vuetify-labs.cjs +363 -145
- package/dist/vuetify-labs.css +3793 -3759
- package/dist/vuetify-labs.d.ts +2390 -1886
- package/dist/vuetify-labs.esm.js +364 -146
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +363 -145
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +357 -134
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3553 -3519
- package/dist/vuetify.d.ts +1545 -1081
- package/dist/vuetify.esm.js +358 -135
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +357 -134
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1224 -1206
- 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 +154 -103
- package/lib/components/VAutocomplete/VAutocomplete.js +21 -3
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBtn/VBtn.d.ts +20 -10
- package/lib/components/VBtnGroup/VBtnGroup.css +30 -7
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +58 -32
- package/lib/components/VBtnGroup/VBtnGroup.js +7 -3
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +44 -17
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
- package/lib/components/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 +154 -103
- 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 +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/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/VInput/VInput.d.ts +4 -4
- 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.map +1 -1
- package/lib/components/VList/VListItem.d.ts +23 -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/VNumberInput/VNumberInput.d.ts +103 -89
- package/lib/components/VNumberInput/VNumberInput.js +19 -4
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOtpInput/VOtpInput.js +2 -1
- package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/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 +171 -107
- 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/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/VTextarea/VTextarea.d.ts +15 -15
- 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/calendar.d.ts +6 -0
- package/lib/composables/calendar.js +2 -1
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +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/iconSizes.d.ts +28 -0
- package/lib/composables/iconSizes.js +23 -0
- package/lib/composables/iconSizes.js.map +1 -0
- package/lib/composables/list-items.js +2 -2
- package/lib/composables/list-items.js.map +1 -1
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +94 -26
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +6 -1
- package/lib/composables/virtual.js.map +1 -1
- package/lib/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 +3 -3
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +70 -55
- 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/VStepperVertical/VStepperVertical.d.ts +20 -10
- package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +20 -10
- package/lib/labs/VTreeview/VTreeview.d.ts +13 -0
- package/lib/labs/VTreeview/VTreeviewItem.d.ts +20 -10
- package/lib/labs/entry-bundler.d.ts +3 -3
- 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 +1 -0
- package/lib/util/helpers.js +9 -1
- package/lib/util/helpers.js.map +1 -1
- package/package.json +3 -1
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.
|
2
|
+
* Vuetify v3.8.8-dev.2025-06-04
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
6
6
|
|
7
|
-
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h,
|
7
|
+
import { shallowRef, reactive, watchEffect, toRef, capitalize, camelize, unref, Fragment, 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, getCurrentScope, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
8
8
|
|
9
9
|
// Types
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
@@ -81,6 +81,7 @@ const IN_BROWSER = typeof window !== 'undefined';
|
|
81
81
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
82
82
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
83
83
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
84
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
84
85
|
|
85
86
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
86
87
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -602,6 +603,14 @@ function extractNumber(text, decimalDigitsLimit) {
|
|
602
603
|
}
|
603
604
|
return cleanText;
|
604
605
|
}
|
606
|
+
function camelizeProps(props) {
|
607
|
+
if (!props) return;
|
608
|
+
const out = {};
|
609
|
+
for (const prop in props) {
|
610
|
+
out[camelize(prop)] = props[prop];
|
611
|
+
}
|
612
|
+
return out;
|
613
|
+
}
|
605
614
|
|
606
615
|
// Utilities
|
607
616
|
const block = ['top', 'bottom'];
|
@@ -2337,6 +2346,7 @@ const makeThemeProps = propsFactory({
|
|
2337
2346
|
function genDefaults$2() {
|
2338
2347
|
return {
|
2339
2348
|
defaultTheme: 'light',
|
2349
|
+
prefix: 'v-',
|
2340
2350
|
variations: {
|
2341
2351
|
colors: [],
|
2342
2352
|
lighten: 0,
|
@@ -2418,7 +2428,10 @@ function genDefaults$2() {
|
|
2418
2428
|
}
|
2419
2429
|
}
|
2420
2430
|
},
|
2421
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2431
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2432
|
+
scoped: false,
|
2433
|
+
unimportant: false,
|
2434
|
+
utilities: true
|
2422
2435
|
};
|
2423
2436
|
}
|
2424
2437
|
function parseThemeOptions() {
|
@@ -2441,21 +2454,21 @@ function parseThemeOptions() {
|
|
2441
2454
|
function createCssClass(lines, selector, content, scope) {
|
2442
2455
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2443
2456
|
}
|
2444
|
-
function genCssVariables(theme) {
|
2457
|
+
function genCssVariables(theme, prefix) {
|
2445
2458
|
const lightOverlay = theme.dark ? 2 : 1;
|
2446
2459
|
const darkOverlay = theme.dark ? 1 : 2;
|
2447
2460
|
const variables = [];
|
2448
2461
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2449
2462
|
const rgb = parseColor(value);
|
2450
|
-
variables.push(
|
2463
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2451
2464
|
if (!key.startsWith('on-')) {
|
2452
|
-
variables.push(
|
2465
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2453
2466
|
}
|
2454
2467
|
}
|
2455
2468
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2456
2469
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2457
2470
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2458
|
-
variables.push(
|
2471
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2459
2472
|
}
|
2460
2473
|
return variables;
|
2461
2474
|
}
|
@@ -2499,7 +2512,8 @@ function getScopedSelector(selector, scope) {
|
|
2499
2512
|
const scopeSelector = `:where(${scope})`;
|
2500
2513
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2501
2514
|
}
|
2502
|
-
function upsertStyles(
|
2515
|
+
function upsertStyles(id, cspNonce, styles) {
|
2516
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2503
2517
|
if (!styleEl) return;
|
2504
2518
|
styleEl.innerHTML = styles;
|
2505
2519
|
}
|
@@ -2519,8 +2533,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2519
2533
|
// Composables
|
2520
2534
|
function createTheme(options) {
|
2521
2535
|
const parsedOptions = parseThemeOptions(options);
|
2522
|
-
const
|
2536
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
2523
2537
|
const themes = ref(parsedOptions.themes);
|
2538
|
+
const systemName = shallowRef('light');
|
2539
|
+
const name = computed({
|
2540
|
+
get() {
|
2541
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
2542
|
+
},
|
2543
|
+
set(val) {
|
2544
|
+
_name.value = val;
|
2545
|
+
}
|
2546
|
+
});
|
2524
2547
|
const computedThemes = computed(() => {
|
2525
2548
|
const acc = {};
|
2526
2549
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2541,28 +2564,49 @@ function createTheme(options) {
|
|
2541
2564
|
const current = toRef(() => computedThemes.value[name.value]);
|
2542
2565
|
const styles = computed(() => {
|
2543
2566
|
const lines = [];
|
2567
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
2568
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2544
2569
|
if (current.value?.dark) {
|
2545
2570
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2546
2571
|
}
|
2547
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2572
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2548
2573
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2549
|
-
createCssClass(lines,
|
2550
|
-
}
|
2551
|
-
|
2552
|
-
|
2553
|
-
|
2554
|
-
|
2555
|
-
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
|
2560
|
-
|
2574
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
2575
|
+
}
|
2576
|
+
if (parsedOptions.utilities) {
|
2577
|
+
const bgLines = [];
|
2578
|
+
const fgLines = [];
|
2579
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2580
|
+
for (const key of colors) {
|
2581
|
+
if (key.startsWith('on-')) {
|
2582
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2583
|
+
} else {
|
2584
|
+
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);
|
2585
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2586
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2587
|
+
}
|
2561
2588
|
}
|
2589
|
+
lines.push(...bgLines, ...fgLines);
|
2562
2590
|
}
|
2563
|
-
lines.push(...bgLines, ...fgLines);
|
2564
2591
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2565
2592
|
});
|
2593
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2594
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
2595
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
2596
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2597
|
+
function updateSystemName() {
|
2598
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
2599
|
+
}
|
2600
|
+
updateSystemName();
|
2601
|
+
media.addEventListener('change', updateSystemName, {
|
2602
|
+
passive: true
|
2603
|
+
});
|
2604
|
+
if (getCurrentScope()) {
|
2605
|
+
onScopeDispose(() => {
|
2606
|
+
media.removeEventListener('change', updateSystemName);
|
2607
|
+
});
|
2608
|
+
}
|
2609
|
+
}
|
2566
2610
|
function install(app) {
|
2567
2611
|
if (parsedOptions.isDisabled) return;
|
2568
2612
|
const head = app._context.provides.usehead;
|
@@ -2600,22 +2644,55 @@ function createTheme(options) {
|
|
2600
2644
|
updateStyles();
|
2601
2645
|
}
|
2602
2646
|
function updateStyles() {
|
2603
|
-
upsertStyles(
|
2647
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2604
2648
|
}
|
2605
2649
|
}
|
2606
2650
|
}
|
2607
|
-
|
2651
|
+
function change(themeName) {
|
2652
|
+
if (!themeNames.value.includes(themeName)) {
|
2653
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2654
|
+
return;
|
2655
|
+
}
|
2656
|
+
name.value = themeName;
|
2657
|
+
}
|
2658
|
+
function cycle() {
|
2659
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2660
|
+
const currentIndex = themeArray.indexOf(name.value);
|
2661
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2662
|
+
change(themeArray[nextIndex]);
|
2663
|
+
}
|
2664
|
+
function toggle() {
|
2665
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2666
|
+
cycle(themeArray);
|
2667
|
+
}
|
2668
|
+
const globalName = new Proxy(name, {
|
2669
|
+
get(target, prop) {
|
2670
|
+
return target[prop];
|
2671
|
+
},
|
2672
|
+
set(target, prop, val) {
|
2673
|
+
if (prop === 'value') {
|
2674
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2675
|
+
}
|
2676
|
+
// @ts-expect-error
|
2677
|
+
target[prop] = val;
|
2678
|
+
return true;
|
2679
|
+
}
|
2680
|
+
});
|
2608
2681
|
return {
|
2609
2682
|
install,
|
2683
|
+
change,
|
2684
|
+
cycle,
|
2685
|
+
toggle,
|
2610
2686
|
isDisabled: parsedOptions.isDisabled,
|
2611
2687
|
name,
|
2612
2688
|
themes,
|
2613
2689
|
current,
|
2614
2690
|
computedThemes,
|
2691
|
+
prefix: parsedOptions.prefix,
|
2615
2692
|
themeClasses,
|
2616
2693
|
styles,
|
2617
2694
|
global: {
|
2618
|
-
name,
|
2695
|
+
name: globalName,
|
2619
2696
|
current
|
2620
2697
|
}
|
2621
2698
|
};
|
@@ -2626,7 +2703,7 @@ function provideTheme(props) {
|
|
2626
2703
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2627
2704
|
const name = toRef(() => props.theme ?? theme.name.value);
|
2628
2705
|
const current = toRef(() => theme.themes.value[name.value]);
|
2629
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
2706
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
2630
2707
|
const newTheme = {
|
2631
2708
|
...theme,
|
2632
2709
|
name,
|
@@ -3730,7 +3807,10 @@ const makeVToolbarProps = propsFactory({
|
|
3730
3807
|
default: 'default',
|
3731
3808
|
validator: v => allowedDensities$1.includes(v)
|
3732
3809
|
},
|
3733
|
-
extended:
|
3810
|
+
extended: {
|
3811
|
+
type: Boolean,
|
3812
|
+
default: null
|
3813
|
+
},
|
3734
3814
|
extensionHeight: {
|
3735
3815
|
type: [Number, String],
|
3736
3816
|
default: 48
|
@@ -3778,7 +3858,7 @@ const VToolbar = genericComponent()({
|
|
3778
3858
|
const {
|
3779
3859
|
rtlClasses
|
3780
3860
|
} = useRtl();
|
3781
|
-
const isExtended = shallowRef(
|
3861
|
+
const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
|
3782
3862
|
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));
|
3783
3863
|
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);
|
3784
3864
|
provideDefaults({
|
@@ -3790,7 +3870,7 @@ const VToolbar = genericComponent()({
|
|
3790
3870
|
const hasTitle = !!(props.title || slots.title);
|
3791
3871
|
const hasImage = !!(slots.image || props.image);
|
3792
3872
|
const extension = slots.extension?.();
|
3793
|
-
isExtended.value =
|
3873
|
+
isExtended.value = props.extended === null ? !!extension : props.extended;
|
3794
3874
|
return createVNode(props.tag, {
|
3795
3875
|
"class": normalizeClass(['v-toolbar', {
|
3796
3876
|
'v-toolbar--absolute': props.absolute,
|
@@ -4173,9 +4253,15 @@ function useVariant(props) {
|
|
4173
4253
|
};
|
4174
4254
|
}
|
4175
4255
|
|
4256
|
+
// Types
|
4257
|
+
|
4176
4258
|
const makeVBtnGroupProps = propsFactory({
|
4177
4259
|
baseColor: String,
|
4178
4260
|
divided: Boolean,
|
4261
|
+
direction: {
|
4262
|
+
type: String,
|
4263
|
+
default: 'horizontal'
|
4264
|
+
},
|
4179
4265
|
...makeBorderProps(),
|
4180
4266
|
...makeComponentProps(),
|
4181
4267
|
...makeDensityProps(),
|
@@ -4209,7 +4295,7 @@ const VBtnGroup = genericComponent()({
|
|
4209
4295
|
} = useRounded(props);
|
4210
4296
|
provideDefaults({
|
4211
4297
|
VBtn: {
|
4212
|
-
height: 'auto',
|
4298
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4213
4299
|
baseColor: toRef(() => props.baseColor),
|
4214
4300
|
color: toRef(() => props.color),
|
4215
4301
|
density: toRef(() => props.density),
|
@@ -4219,7 +4305,7 @@ const VBtnGroup = genericComponent()({
|
|
4219
4305
|
});
|
4220
4306
|
useRender(() => {
|
4221
4307
|
return createVNode(props.tag, {
|
4222
|
-
"class": normalizeClass(['v-btn-group', {
|
4308
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4223
4309
|
'v-btn-group--divided': props.divided
|
4224
4310
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4225
4311
|
"style": normalizeStyle(props.style)
|
@@ -5551,8 +5637,8 @@ function rippleCancelShow(e) {
|
|
5551
5637
|
window.clearTimeout(element._ripple.showTimer);
|
5552
5638
|
}
|
5553
5639
|
let keyboardRipple = false;
|
5554
|
-
function keyboardRippleShow(e) {
|
5555
|
-
if (!keyboardRipple && (e.keyCode
|
5640
|
+
function keyboardRippleShow(e, keys) {
|
5641
|
+
if (!keyboardRipple && keys.includes(e.keyCode)) {
|
5556
5642
|
keyboardRipple = true;
|
5557
5643
|
rippleShow(e);
|
5558
5644
|
}
|
@@ -5580,9 +5666,12 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5580
5666
|
el._ripple.enabled = enabled;
|
5581
5667
|
el._ripple.centered = modifiers.center;
|
5582
5668
|
el._ripple.circle = modifiers.circle;
|
5583
|
-
|
5584
|
-
|
5669
|
+
const bindingValue = isObject(value) ? value : {};
|
5670
|
+
if (bindingValue.class) {
|
5671
|
+
el._ripple.class = bindingValue.class;
|
5585
5672
|
}
|
5673
|
+
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5674
|
+
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5586
5675
|
if (enabled && !wasEnabled) {
|
5587
5676
|
if (modifiers.stop) {
|
5588
5677
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5604,7 +5693,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5604
5693
|
el.addEventListener('mousedown', rippleShow);
|
5605
5694
|
el.addEventListener('mouseup', rippleHide);
|
5606
5695
|
el.addEventListener('mouseleave', rippleHide);
|
5607
|
-
el.addEventListener('keydown', keyboardRippleShow);
|
5696
|
+
el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
|
5608
5697
|
el.addEventListener('keyup', keyboardRippleHide);
|
5609
5698
|
el.addEventListener('blur', focusRippleHide);
|
5610
5699
|
|
@@ -5624,7 +5713,9 @@ function removeListeners(el) {
|
|
5624
5713
|
el.removeEventListener('touchcancel', rippleHide);
|
5625
5714
|
el.removeEventListener('mouseup', rippleHide);
|
5626
5715
|
el.removeEventListener('mouseleave', rippleHide);
|
5627
|
-
el.
|
5716
|
+
if (el._ripple?.keyDownHandler) {
|
5717
|
+
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
5718
|
+
}
|
5628
5719
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5629
5720
|
el.removeEventListener('dragstart', rippleHide);
|
5630
5721
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5633,8 +5724,8 @@ function mounted$4(el, binding) {
|
|
5633
5724
|
updateRipple(el, binding, false);
|
5634
5725
|
}
|
5635
5726
|
function unmounted$4(el) {
|
5636
|
-
delete el._ripple;
|
5637
5727
|
removeListeners(el);
|
5728
|
+
delete el._ripple;
|
5638
5729
|
}
|
5639
5730
|
function updated$1(el, binding) {
|
5640
5731
|
if (binding.value === binding.oldValue) {
|
@@ -5907,6 +5998,31 @@ const VAppBarTitle = genericComponent()({
|
|
5907
5998
|
// Utilities
|
5908
5999
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
5909
6000
|
|
6001
|
+
// Utilities
|
6002
|
+
|
6003
|
+
// Types
|
6004
|
+
|
6005
|
+
// Types
|
6006
|
+
|
6007
|
+
// Composables
|
6008
|
+
const makeIconSizeProps = propsFactory({
|
6009
|
+
iconSize: [Number, String],
|
6010
|
+
iconSizes: {
|
6011
|
+
type: Array,
|
6012
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6013
|
+
}
|
6014
|
+
}, 'iconSize');
|
6015
|
+
function useIconSizes(props, fallback) {
|
6016
|
+
const iconSize = computed(() => {
|
6017
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6018
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6019
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6020
|
+
});
|
6021
|
+
return {
|
6022
|
+
iconSize
|
6023
|
+
};
|
6024
|
+
}
|
6025
|
+
|
5910
6026
|
// Types
|
5911
6027
|
|
5912
6028
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -5946,6 +6062,7 @@ const makeVAlertProps = propsFactory({
|
|
5946
6062
|
...makeDensityProps(),
|
5947
6063
|
...makeDimensionProps(),
|
5948
6064
|
...makeElevationProps(),
|
6065
|
+
...makeIconSizeProps(),
|
5949
6066
|
...makeLocationProps(),
|
5950
6067
|
...makePositionProps(),
|
5951
6068
|
...makeRoundedProps(),
|
@@ -5973,6 +6090,9 @@ const VAlert = genericComponent()({
|
|
5973
6090
|
if (!props.type) return props.icon;
|
5974
6091
|
return props.icon ?? `$${props.type}`;
|
5975
6092
|
});
|
6093
|
+
const {
|
6094
|
+
iconSize
|
6095
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
5976
6096
|
const {
|
5977
6097
|
themeClasses
|
5978
6098
|
} = provideTheme(props);
|
@@ -6020,6 +6140,11 @@ const VAlert = genericComponent()({
|
|
6020
6140
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6021
6141
|
const hasTitle = !!(slots.title || props.title);
|
6022
6142
|
const hasClose = !!(slots.close || props.closable);
|
6143
|
+
const iconProps = {
|
6144
|
+
density: props.density,
|
6145
|
+
icon: icon.value,
|
6146
|
+
size: iconSize.value
|
6147
|
+
};
|
6023
6148
|
return isActive.value && createVNode(props.tag, {
|
6024
6149
|
"class": normalizeClass(['v-alert', props.border && {
|
6025
6150
|
'v-alert--border': !!props.border,
|
@@ -6037,19 +6162,14 @@ const VAlert = genericComponent()({
|
|
6037
6162
|
}, null), hasPrepend && createElementVNode("div", {
|
6038
6163
|
"key": "prepend",
|
6039
6164
|
"class": "v-alert__prepend"
|
6040
|
-
}, [!slots.prepend ? createVNode(VIcon, {
|
6041
|
-
"key": "prepend-icon"
|
6042
|
-
|
6043
|
-
"icon": icon.value,
|
6044
|
-
"size": props.prominent ? 44 : 28
|
6045
|
-
}, null) : createVNode(VDefaultsProvider, {
|
6165
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6166
|
+
"key": "prepend-icon"
|
6167
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6046
6168
|
"key": "prepend-defaults",
|
6047
6169
|
"disabled": !icon.value,
|
6048
6170
|
"defaults": {
|
6049
6171
|
VIcon: {
|
6050
|
-
|
6051
|
-
icon: icon.value,
|
6052
|
-
size: props.prominent ? 44 : 28
|
6172
|
+
...iconProps
|
6053
6173
|
}
|
6054
6174
|
}
|
6055
6175
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7574,6 +7694,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7574
7694
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7575
7695
|
const makeVSlideGroupProps = propsFactory({
|
7576
7696
|
centerActive: Boolean,
|
7697
|
+
contentClass: null,
|
7577
7698
|
direction: {
|
7578
7699
|
type: String,
|
7579
7700
|
default: 'horizontal'
|
@@ -7886,7 +8007,7 @@ const VSlideGroup = genericComponent()({
|
|
7886
8007
|
})]), createElementVNode("div", {
|
7887
8008
|
"key": "container",
|
7888
8009
|
"ref": containerRef,
|
7889
|
-
"class":
|
8010
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
7890
8011
|
"onScroll": onScroll
|
7891
8012
|
}, [createElementVNode("div", {
|
7892
8013
|
"ref": contentRef,
|
@@ -8249,16 +8370,85 @@ const VChip = genericComponent()({
|
|
8249
8370
|
}
|
8250
8371
|
});
|
8251
8372
|
|
8373
|
+
const makeVDividerProps = propsFactory({
|
8374
|
+
color: String,
|
8375
|
+
inset: Boolean,
|
8376
|
+
length: [Number, String],
|
8377
|
+
opacity: [Number, String],
|
8378
|
+
thickness: [Number, String],
|
8379
|
+
vertical: Boolean,
|
8380
|
+
...makeComponentProps(),
|
8381
|
+
...makeThemeProps()
|
8382
|
+
}, 'VDivider');
|
8383
|
+
const VDivider = genericComponent()({
|
8384
|
+
name: 'VDivider',
|
8385
|
+
props: makeVDividerProps(),
|
8386
|
+
setup(props, _ref) {
|
8387
|
+
let {
|
8388
|
+
attrs,
|
8389
|
+
slots
|
8390
|
+
} = _ref;
|
8391
|
+
const {
|
8392
|
+
themeClasses
|
8393
|
+
} = provideTheme(props);
|
8394
|
+
const {
|
8395
|
+
textColorClasses,
|
8396
|
+
textColorStyles
|
8397
|
+
} = useTextColor(() => props.color);
|
8398
|
+
const dividerStyles = computed(() => {
|
8399
|
+
const styles = {};
|
8400
|
+
if (props.length) {
|
8401
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8402
|
+
}
|
8403
|
+
if (props.thickness) {
|
8404
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8405
|
+
}
|
8406
|
+
return styles;
|
8407
|
+
});
|
8408
|
+
useRender(() => {
|
8409
|
+
const divider = createElementVNode("hr", {
|
8410
|
+
"class": normalizeClass([{
|
8411
|
+
'v-divider': true,
|
8412
|
+
'v-divider--inset': props.inset,
|
8413
|
+
'v-divider--vertical': props.vertical
|
8414
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8415
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8416
|
+
'--v-border-opacity': props.opacity
|
8417
|
+
}, props.style]),
|
8418
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8419
|
+
"role": `${attrs.role || 'separator'}`
|
8420
|
+
}, null);
|
8421
|
+
if (!slots.default) return divider;
|
8422
|
+
return createElementVNode("div", {
|
8423
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8424
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8425
|
+
'v-divider__wrapper--inset': props.inset
|
8426
|
+
}])
|
8427
|
+
}, [divider, createElementVNode("div", {
|
8428
|
+
"class": "v-divider__content"
|
8429
|
+
}, [slots.default()]), divider]);
|
8430
|
+
});
|
8431
|
+
return {};
|
8432
|
+
}
|
8433
|
+
});
|
8434
|
+
|
8252
8435
|
// Utilities
|
8253
8436
|
|
8254
8437
|
// List
|
8255
8438
|
const ListKey = Symbol.for('vuetify:list');
|
8256
8439
|
function createList() {
|
8440
|
+
let {
|
8441
|
+
filterable
|
8442
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8443
|
+
filterable: false
|
8444
|
+
};
|
8257
8445
|
const parent = inject$1(ListKey, {
|
8446
|
+
filterable: false,
|
8258
8447
|
hasPrepend: shallowRef(false),
|
8259
8448
|
updateHasPrepend: () => null
|
8260
8449
|
});
|
8261
8450
|
const data = {
|
8451
|
+
filterable: parent.filterable || filterable,
|
8262
8452
|
hasPrepend: shallowRef(false),
|
8263
8453
|
updateHasPrepend: value => {
|
8264
8454
|
if (value) data.hasPrepend.value = value;
|
@@ -9210,6 +9400,9 @@ const VListItem = genericComponent()({
|
|
9210
9400
|
roundedClasses
|
9211
9401
|
} = useRounded(roundedProps);
|
9212
9402
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9403
|
+
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9404
|
+
keys: [keyCodes.enter]
|
9405
|
+
} : props.ripple);
|
9213
9406
|
const slotProps = computed(() => ({
|
9214
9407
|
isActive: isActive.value,
|
9215
9408
|
select,
|
@@ -9234,8 +9427,9 @@ const VListItem = genericComponent()({
|
|
9234
9427
|
function onKeyDown(e) {
|
9235
9428
|
const target = e.target;
|
9236
9429
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9237
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
9430
|
+
if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
|
9238
9431
|
e.preventDefault();
|
9432
|
+
e.stopPropagation();
|
9239
9433
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9240
9434
|
}
|
9241
9435
|
}
|
@@ -9345,7 +9539,7 @@ const VListItem = genericComponent()({
|
|
9345
9539
|
}), createElementVNode("div", {
|
9346
9540
|
"class": "v-list-item__spacer"
|
9347
9541
|
}, null)])]
|
9348
|
-
}), [[Ripple, isClickable.value &&
|
9542
|
+
}), [[Ripple, isClickable.value && rippleOptions.value]]);
|
9349
9543
|
});
|
9350
9544
|
return {
|
9351
9545
|
activate,
|
@@ -9400,68 +9594,6 @@ const VListSubheader = genericComponent()({
|
|
9400
9594
|
}
|
9401
9595
|
});
|
9402
9596
|
|
9403
|
-
const makeVDividerProps = propsFactory({
|
9404
|
-
color: String,
|
9405
|
-
inset: Boolean,
|
9406
|
-
length: [Number, String],
|
9407
|
-
opacity: [Number, String],
|
9408
|
-
thickness: [Number, String],
|
9409
|
-
vertical: Boolean,
|
9410
|
-
...makeComponentProps(),
|
9411
|
-
...makeThemeProps()
|
9412
|
-
}, 'VDivider');
|
9413
|
-
const VDivider = genericComponent()({
|
9414
|
-
name: 'VDivider',
|
9415
|
-
props: makeVDividerProps(),
|
9416
|
-
setup(props, _ref) {
|
9417
|
-
let {
|
9418
|
-
attrs,
|
9419
|
-
slots
|
9420
|
-
} = _ref;
|
9421
|
-
const {
|
9422
|
-
themeClasses
|
9423
|
-
} = provideTheme(props);
|
9424
|
-
const {
|
9425
|
-
textColorClasses,
|
9426
|
-
textColorStyles
|
9427
|
-
} = useTextColor(() => props.color);
|
9428
|
-
const dividerStyles = computed(() => {
|
9429
|
-
const styles = {};
|
9430
|
-
if (props.length) {
|
9431
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9432
|
-
}
|
9433
|
-
if (props.thickness) {
|
9434
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9435
|
-
}
|
9436
|
-
return styles;
|
9437
|
-
});
|
9438
|
-
useRender(() => {
|
9439
|
-
const divider = createElementVNode("hr", {
|
9440
|
-
"class": normalizeClass([{
|
9441
|
-
'v-divider': true,
|
9442
|
-
'v-divider--inset': props.inset,
|
9443
|
-
'v-divider--vertical': props.vertical
|
9444
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9445
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9446
|
-
'--v-border-opacity': props.opacity
|
9447
|
-
}, props.style]),
|
9448
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9449
|
-
"role": `${attrs.role || 'separator'}`
|
9450
|
-
}, null);
|
9451
|
-
if (!slots.default) return divider;
|
9452
|
-
return createElementVNode("div", {
|
9453
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9454
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9455
|
-
'v-divider__wrapper--inset': props.inset
|
9456
|
-
}])
|
9457
|
-
}, [divider, createElementVNode("div", {
|
9458
|
-
"class": "v-divider__content"
|
9459
|
-
}, [slots.default()]), divider]);
|
9460
|
-
});
|
9461
|
-
return {};
|
9462
|
-
}
|
9463
|
-
});
|
9464
|
-
|
9465
9597
|
// Types
|
9466
9598
|
|
9467
9599
|
const makeVListChildrenProps = propsFactory({
|
@@ -9578,7 +9710,7 @@ function transformItem$3(props, item) {
|
|
9578
9710
|
const _props = {
|
9579
9711
|
title,
|
9580
9712
|
value,
|
9581
|
-
...itemProps
|
9713
|
+
...camelizeProps(itemProps)
|
9582
9714
|
};
|
9583
9715
|
return {
|
9584
9716
|
title: String(_props.title ?? ''),
|
@@ -9730,6 +9862,7 @@ const makeVListProps = propsFactory({
|
|
9730
9862
|
activeClass: String,
|
9731
9863
|
bgColor: String,
|
9732
9864
|
disabled: Boolean,
|
9865
|
+
filterable: Boolean,
|
9733
9866
|
expandIcon: IconValue,
|
9734
9867
|
collapseIcon: IconValue,
|
9735
9868
|
lines: {
|
@@ -9813,7 +9946,9 @@ const VList = genericComponent()({
|
|
9813
9946
|
const activeColor = toRef(() => props.activeColor);
|
9814
9947
|
const baseColor = toRef(() => props.baseColor);
|
9815
9948
|
const color = toRef(() => props.color);
|
9816
|
-
createList(
|
9949
|
+
createList({
|
9950
|
+
filterable: props.filterable
|
9951
|
+
});
|
9817
9952
|
provideDefaults({
|
9818
9953
|
VListGroup: {
|
9819
9954
|
activeColor,
|
@@ -12389,7 +12524,12 @@ function useVirtual(props, items) {
|
|
12389
12524
|
}
|
12390
12525
|
function calculateOffset(index) {
|
12391
12526
|
index = clamp(index, 0, items.value.length - 1);
|
12392
|
-
|
12527
|
+
const whole = Math.floor(index);
|
12528
|
+
const fraction = index % 1;
|
12529
|
+
const next = whole + 1;
|
12530
|
+
const wholeOffset = offsets[whole] || 0;
|
12531
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12532
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12393
12533
|
}
|
12394
12534
|
function calculateIndex(scrollTop) {
|
12395
12535
|
return binaryClosest(offsets, scrollTop);
|
@@ -12743,6 +12883,7 @@ const makeSelectProps = propsFactory({
|
|
12743
12883
|
},
|
12744
12884
|
openOnClear: Boolean,
|
12745
12885
|
itemColor: String,
|
12886
|
+
noAutoScroll: Boolean,
|
12746
12887
|
...makeItemsProps({
|
12747
12888
|
itemChildren: false
|
12748
12889
|
})
|
@@ -12957,7 +13098,7 @@ const VSelect = genericComponent()({
|
|
12957
13098
|
watch(menu, () => {
|
12958
13099
|
if (!props.hideSelected && menu.value && model.value.length) {
|
12959
13100
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
12960
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13101
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
12961
13102
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
12962
13103
|
});
|
12963
13104
|
}
|
@@ -13049,6 +13190,22 @@ const VSelect = genericComponent()({
|
|
13049
13190
|
key: item.value,
|
13050
13191
|
onClick: () => select(item, null)
|
13051
13192
|
});
|
13193
|
+
if (item.raw.type === 'divider') {
|
13194
|
+
return slots.divider?.({
|
13195
|
+
props: item.raw,
|
13196
|
+
index
|
13197
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13198
|
+
"key": `divider-${index}`
|
13199
|
+
}), null);
|
13200
|
+
}
|
13201
|
+
if (item.raw.type === 'subheader') {
|
13202
|
+
return slots.subheader?.({
|
13203
|
+
props: item.raw,
|
13204
|
+
index
|
13205
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13206
|
+
"key": `subheader-${index}`
|
13207
|
+
}), null);
|
13208
|
+
}
|
13052
13209
|
return slots.item?.({
|
13053
13210
|
item,
|
13054
13211
|
index,
|
@@ -13209,6 +13366,9 @@ function filterItems(items, query, options) {
|
|
13209
13366
|
let match = -1;
|
13210
13367
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13211
13368
|
if (typeof item === 'object') {
|
13369
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13370
|
+
continue;
|
13371
|
+
}
|
13212
13372
|
const filterKeys = keys || Object.keys(transformed);
|
13213
13373
|
for (const key of filterKeys) {
|
13214
13374
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13411,7 +13571,7 @@ const VAutocomplete = genericComponent()({
|
|
13411
13571
|
menu.value = !menu.value;
|
13412
13572
|
}
|
13413
13573
|
function onListKeydown(e) {
|
13414
|
-
if (e.key
|
13574
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
13415
13575
|
vTextFieldRef.value?.focus();
|
13416
13576
|
}
|
13417
13577
|
}
|
@@ -13616,6 +13776,7 @@ const VAutocomplete = genericComponent()({
|
|
13616
13776
|
}, props.menuProps), {
|
13617
13777
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13618
13778
|
"ref": listRef,
|
13779
|
+
"filterable": true,
|
13619
13780
|
"selected": selectedValues.value,
|
13620
13781
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13621
13782
|
"onMousedown": e => e.preventDefault(),
|
@@ -13647,6 +13808,22 @@ const VAutocomplete = genericComponent()({
|
|
13647
13808
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13648
13809
|
onClick: () => select(item, null)
|
13649
13810
|
});
|
13811
|
+
if (item.raw.type === 'divider') {
|
13812
|
+
return slots.divider?.({
|
13813
|
+
props: item.raw,
|
13814
|
+
index
|
13815
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13816
|
+
"key": `divider-${index}`
|
13817
|
+
}), null);
|
13818
|
+
}
|
13819
|
+
if (item.raw.type === 'subheader') {
|
13820
|
+
return slots.subheader?.({
|
13821
|
+
props: item.raw,
|
13822
|
+
index
|
13823
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13824
|
+
"key": `subheader-${index}`
|
13825
|
+
}), null);
|
13826
|
+
}
|
13650
13827
|
return slots.item?.({
|
13651
13828
|
item,
|
13652
13829
|
index,
|
@@ -17251,13 +17428,13 @@ function date(value) {
|
|
17251
17428
|
return null;
|
17252
17429
|
}
|
17253
17430
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17254
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17431
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17255
17432
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17256
17433
|
return createRange(7).map(i => {
|
17257
17434
|
const weekday = new Date(sundayJanuarySecond2000);
|
17258
17435
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17259
17436
|
return new Intl.DateTimeFormat(locale, {
|
17260
|
-
weekday: 'narrow'
|
17437
|
+
weekday: weekdayFormat ?? 'narrow'
|
17261
17438
|
}).format(weekday);
|
17262
17439
|
});
|
17263
17440
|
}
|
@@ -17721,9 +17898,9 @@ class VuetifyDateAdapter {
|
|
17721
17898
|
getDiff(date, comparing, unit) {
|
17722
17899
|
return getDiff(date, comparing, unit);
|
17723
17900
|
}
|
17724
|
-
getWeekdays(firstDayOfWeek) {
|
17901
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
17725
17902
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
17726
|
-
return getWeekdays(this.locale, firstDay);
|
17903
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
17727
17904
|
}
|
17728
17905
|
getYear(date) {
|
17729
17906
|
return getYear(date);
|
@@ -18079,6 +18256,7 @@ const VCombobox = genericComponent()({
|
|
18079
18256
|
_search.value = val ?? '';
|
18080
18257
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18081
18258
|
model.value = [transformItem$3(props, val)];
|
18259
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18082
18260
|
}
|
18083
18261
|
if (val && props.multiple && props.delimiters?.length) {
|
18084
18262
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18159,7 +18337,7 @@ const VCombobox = genericComponent()({
|
|
18159
18337
|
menu.value = !menu.value;
|
18160
18338
|
}
|
18161
18339
|
function onListKeydown(e) {
|
18162
|
-
if (e.key
|
18340
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18163
18341
|
vTextFieldRef.value?.focus();
|
18164
18342
|
}
|
18165
18343
|
}
|
@@ -18364,6 +18542,7 @@ const VCombobox = genericComponent()({
|
|
18364
18542
|
}, props.menuProps), {
|
18365
18543
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18366
18544
|
"ref": listRef,
|
18545
|
+
"filterable": true,
|
18367
18546
|
"selected": selectedValues.value,
|
18368
18547
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18369
18548
|
"onMousedown": e => e.preventDefault(),
|
@@ -18395,6 +18574,22 @@ const VCombobox = genericComponent()({
|
|
18395
18574
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18396
18575
|
onClick: () => select(item, null)
|
18397
18576
|
});
|
18577
|
+
if (item.raw.type === 'divider') {
|
18578
|
+
return slots.divider?.({
|
18579
|
+
props: item.raw,
|
18580
|
+
index
|
18581
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18582
|
+
"key": `divider-${index}`
|
18583
|
+
}), null);
|
18584
|
+
}
|
18585
|
+
if (item.raw.type === 'subheader') {
|
18586
|
+
return slots.subheader?.({
|
18587
|
+
props: item.raw,
|
18588
|
+
index
|
18589
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18590
|
+
"key": `subheader-${index}`
|
18591
|
+
}), null);
|
18592
|
+
}
|
18398
18593
|
return slots.item?.({
|
18399
18594
|
item,
|
18400
18595
|
index,
|
@@ -20274,6 +20469,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20274
20469
|
color: String,
|
20275
20470
|
disableSort: Boolean,
|
20276
20471
|
fixedHeader: Boolean,
|
20472
|
+
lastFixed: Boolean,
|
20277
20473
|
multiSort: Boolean,
|
20278
20474
|
sortAscIcon: {
|
20279
20475
|
type: IconValue,
|
@@ -20320,10 +20516,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20320
20516
|
loaderClasses
|
20321
20517
|
} = useLoader(props);
|
20322
20518
|
function getFixedStyles(column, y) {
|
20323
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20519
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20324
20520
|
return {
|
20325
20521
|
position: 'sticky',
|
20326
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20522
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20523
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20327
20524
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20328
20525
|
};
|
20329
20526
|
}
|
@@ -20832,11 +21029,18 @@ const VDataTableRows = genericComponent()({
|
|
20832
21029
|
}
|
20833
21030
|
});
|
20834
21031
|
|
21032
|
+
// Types
|
21033
|
+
|
20835
21034
|
const makeVTableProps = propsFactory({
|
20836
21035
|
fixedHeader: Boolean,
|
20837
21036
|
fixedFooter: Boolean,
|
20838
21037
|
height: [Number, String],
|
20839
21038
|
hover: Boolean,
|
21039
|
+
striped: {
|
21040
|
+
type: String,
|
21041
|
+
default: null,
|
21042
|
+
validator: v => ['even', 'odd'].includes(v)
|
21043
|
+
},
|
20840
21044
|
...makeComponentProps(),
|
20841
21045
|
...makeDensityProps(),
|
20842
21046
|
...makeTagProps(),
|
@@ -20863,7 +21067,9 @@ const VTable = genericComponent()({
|
|
20863
21067
|
'v-table--fixed-footer': props.fixedFooter,
|
20864
21068
|
'v-table--has-top': !!slots.top,
|
20865
21069
|
'v-table--has-bottom': !!slots.bottom,
|
20866
|
-
'v-table--hover': props.hover
|
21070
|
+
'v-table--hover': props.hover,
|
21071
|
+
'v-table--striped-even': props.striped === 'even',
|
21072
|
+
'v-table--striped-odd': props.striped === 'odd'
|
20867
21073
|
}, themeClasses.value, densityClasses.value, props.class]),
|
20868
21074
|
"style": normalizeStyle(props.style)
|
20869
21075
|
}, {
|
@@ -22038,7 +22244,8 @@ const makeCalendarProps = propsFactory({
|
|
22038
22244
|
firstDayOfWeek: {
|
22039
22245
|
type: [Number, String],
|
22040
22246
|
default: undefined
|
22041
|
-
}
|
22247
|
+
},
|
22248
|
+
weekdayFormat: String
|
22042
22249
|
}, 'calendar');
|
22043
22250
|
function useCalendar(props) {
|
22044
22251
|
const adapter = useDate();
|
@@ -22279,7 +22486,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22279
22486
|
"ref": daysRef,
|
22280
22487
|
"key": daysInMonth.value[0].date?.toString(),
|
22281
22488
|
"class": "v-date-picker-month__days"
|
22282
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22489
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22283
22490
|
"class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
|
22284
22491
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22285
22492
|
const slotProps = {
|
@@ -24869,6 +25076,10 @@ const makeVNumberInputProps = propsFactory({
|
|
24869
25076
|
type: Number,
|
24870
25077
|
default: 0
|
24871
25078
|
},
|
25079
|
+
minFractionDigits: {
|
25080
|
+
type: Number,
|
25081
|
+
default: null
|
25082
|
+
},
|
24872
25083
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24873
25084
|
}, 'VNumberInput');
|
24874
25085
|
const VNumberInput = genericComponent()({
|
@@ -24899,9 +25110,19 @@ const VNumberInput = genericComponent()({
|
|
24899
25110
|
} = useFocus(props);
|
24900
25111
|
function correctPrecision(val) {
|
24901
25112
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
24902
|
-
|
24903
|
-
|
24904
|
-
|
25113
|
+
if (precision == null) {
|
25114
|
+
return String(val);
|
25115
|
+
}
|
25116
|
+
let fixed = val.toFixed(precision);
|
25117
|
+
if (isFocused.value) {
|
25118
|
+
return Number(fixed).toString(); // trim zeros
|
25119
|
+
}
|
25120
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25121
|
+
const trimLimit = precision - props.minFractionDigits;
|
25122
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25123
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25124
|
+
}
|
25125
|
+
return fixed;
|
24905
25126
|
}
|
24906
25127
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
24907
25128
|
const _inputText = shallowRef(null);
|
@@ -24956,6 +25177,7 @@ const VNumberInput = genericComponent()({
|
|
24956
25177
|
}
|
24957
25178
|
};
|
24958
25179
|
watch(() => props.precision, () => formatInputValue());
|
25180
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
24959
25181
|
onMounted(() => {
|
24960
25182
|
clampModel();
|
24961
25183
|
});
|
@@ -25070,7 +25292,7 @@ const VNumberInput = genericComponent()({
|
|
25070
25292
|
inputText.value = null;
|
25071
25293
|
return;
|
25072
25294
|
}
|
25073
|
-
inputText.value =
|
25295
|
+
inputText.value = correctPrecision(model.value);
|
25074
25296
|
}
|
25075
25297
|
function trimDecimalZeros() {
|
25076
25298
|
if (controlsDisabled.value) return;
|
@@ -25330,9 +25552,10 @@ const VOtpInput = genericComponent()({
|
|
25330
25552
|
e.preventDefault();
|
25331
25553
|
e.stopPropagation();
|
25332
25554
|
const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
|
25555
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25333
25556
|
if (isValidNumber(clipboardText)) return;
|
25334
25557
|
model.value = clipboardText.split('');
|
25335
|
-
inputRef.value?.[
|
25558
|
+
inputRef.value?.[finalIndex].focus();
|
25336
25559
|
}
|
25337
25560
|
function reset() {
|
25338
25561
|
model.value = [];
|
@@ -30035,11 +30258,6 @@ const makeVIconBtnProps = propsFactory({
|
|
30035
30258
|
hideOverlay: Boolean,
|
30036
30259
|
icon: [String, Function, Object],
|
30037
30260
|
iconColor: String,
|
30038
|
-
iconSize: [Number, String],
|
30039
|
-
iconSizes: {
|
30040
|
-
type: Array,
|
30041
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
30042
|
-
},
|
30043
30261
|
loading: Boolean,
|
30044
30262
|
opacity: [Number, String],
|
30045
30263
|
readonly: Boolean,
|
@@ -30059,6 +30277,7 @@ const makeVIconBtnProps = propsFactory({
|
|
30059
30277
|
...makeBorderProps(),
|
30060
30278
|
...makeComponentProps(),
|
30061
30279
|
...makeElevationProps(),
|
30280
|
+
...makeIconSizeProps(),
|
30062
30281
|
...makeRoundedProps(),
|
30063
30282
|
...makeTagProps({
|
30064
30283
|
tag: 'button'
|
@@ -30113,7 +30332,6 @@ const VIconBtn = genericComponent()({
|
|
30113
30332
|
})()
|
30114
30333
|
}));
|
30115
30334
|
const btnSizeMap = new Map(props.sizes);
|
30116
|
-
const iconSizeMap = new Map(props.iconSizes);
|
30117
30335
|
function onClick() {
|
30118
30336
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
30119
30337
|
isActive.value = !isActive.value;
|
@@ -30125,12 +30343,12 @@ const VIconBtn = genericComponent()({
|
|
30125
30343
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
30126
30344
|
const btnHeight = props.height ?? btnSize;
|
30127
30345
|
const btnWidth = props.width ?? btnSize;
|
30128
|
-
const
|
30129
|
-
|
30130
|
-
|
30346
|
+
const {
|
30347
|
+
iconSize
|
30348
|
+
} = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
|
30131
30349
|
const iconProps = {
|
30132
30350
|
icon,
|
30133
|
-
size: iconSize,
|
30351
|
+
size: iconSize.value,
|
30134
30352
|
iconColor: props.iconColor,
|
30135
30353
|
opacity: props.opacity
|
30136
30354
|
};
|
@@ -30173,7 +30391,7 @@ const VIconBtn = genericComponent()({
|
|
30173
30391
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
30174
30392
|
"indeterminate": "disable-shrink",
|
30175
30393
|
"width": "2",
|
30176
|
-
"size": iconSize
|
30394
|
+
"size": iconSize.value
|
30177
30395
|
}, null)])]
|
30178
30396
|
});
|
30179
30397
|
});
|
@@ -32083,7 +32301,7 @@ function createVuetify$1() {
|
|
32083
32301
|
};
|
32084
32302
|
});
|
32085
32303
|
}
|
32086
|
-
const version$1 = "3.8.
|
32304
|
+
const version$1 = "3.8.8-dev.2025-06-04";
|
32087
32305
|
createVuetify$1.version = version$1;
|
32088
32306
|
|
32089
32307
|
// Vue's inject() can only be used in setup
|
@@ -32381,7 +32599,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
32381
32599
|
|
32382
32600
|
/* eslint-disable local-rules/sort-imports */
|
32383
32601
|
|
32384
|
-
const version = "3.8.
|
32602
|
+
const version = "3.8.8-dev.2025-06-04";
|
32385
32603
|
|
32386
32604
|
/* eslint-disable local-rules/sort-imports */
|
32387
32605
|
|