@vuetify/nightly 3.8.6-master.2025-05-26 → 3.8.7-dev.2025-05-30
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 +25 -20
- package/dist/json/attributes.json +3672 -3588
- package/dist/json/importMap-labs.json +28 -28
- package/dist/json/importMap.json +164 -164
- package/dist/json/tags.json +21 -0
- package/dist/json/web-types.json +6618 -6326
- package/dist/vuetify-labs.cjs +338 -140
- package/dist/vuetify-labs.css +4581 -4553
- package/dist/vuetify-labs.d.ts +1533 -1116
- package/dist/vuetify-labs.esm.js +339 -141
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +338 -140
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +332 -129
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3805 -3777
- package/dist/vuetify.d.ts +1022 -645
- package/dist/vuetify.esm.js +333 -130
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +332 -129
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1200 -1185
- 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/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 +18 -0
- package/lib/components/VDataTable/VDataTableHeaders.d.ts +13 -0
- package/lib/components/VDataTable/VDataTableHeaders.js +4 -2
- package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
- package/lib/components/VDataTable/VDataTableServer.d.ts +13 -0
- package/lib/components/VDataTable/VDataTableVirtual.d.ts +13 -0
- package/lib/components/VDatePicker/VDatePicker.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +10 -0
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/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/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/composables/calendar.d.ts +6 -0
- package/lib/composables/calendar.js +2 -1
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +1 -1
- package/lib/composables/date/DateAdapter.js.map +1 -1
- package/lib/composables/date/adapters/vuetify.d.ts +1 -1
- package/lib/composables/date/adapters/vuetify.js +4 -4
- package/lib/composables/date/adapters/vuetify.js.map +1 -1
- package/lib/composables/date/date.d.ts +1 -1
- package/lib/composables/date/index.d.ts +1 -0
- package/lib/composables/date/index.js +1 -0
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +3 -0
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/iconSizes.d.ts +28 -0
- package/lib/composables/iconSizes.js +23 -0
- package/lib/composables/iconSizes.js.map +1 -0
- package/lib/composables/theme.d.ts +6 -1
- package/lib/composables/theme.js +94 -26
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +6 -1
- package/lib/composables/virtual.js.map +1 -1
- package/lib/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 +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +64 -59
- 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 +1 -1
- package/lib/util/globals.d.ts +1 -0
- package/lib/util/globals.js +1 -0
- package/lib/util/globals.js.map +1 -1
- package/package.json +3 -1
package/dist/vuetify-labs.esm.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.
|
2
|
+
* Vuetify v3.8.7-dev.2025-05-30
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
6
6
|
|
7
|
-
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
7
|
+
import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
|
8
8
|
|
9
9
|
// Types
|
10
10
|
// eslint-disable-line vue/prefer-import-from-vue
|
@@ -81,6 +81,7 @@ const IN_BROWSER = typeof window !== 'undefined';
|
|
81
81
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
82
82
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
83
83
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
84
|
+
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
84
85
|
|
85
86
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
86
87
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -2337,6 +2338,7 @@ const makeThemeProps = propsFactory({
|
|
2337
2338
|
function genDefaults$2() {
|
2338
2339
|
return {
|
2339
2340
|
defaultTheme: 'light',
|
2341
|
+
prefix: 'v-',
|
2340
2342
|
variations: {
|
2341
2343
|
colors: [],
|
2342
2344
|
lighten: 0,
|
@@ -2418,7 +2420,10 @@ function genDefaults$2() {
|
|
2418
2420
|
}
|
2419
2421
|
}
|
2420
2422
|
},
|
2421
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2423
|
+
stylesheetId: 'vuetify-theme-stylesheet',
|
2424
|
+
scoped: false,
|
2425
|
+
unimportant: false,
|
2426
|
+
utilities: true
|
2422
2427
|
};
|
2423
2428
|
}
|
2424
2429
|
function parseThemeOptions() {
|
@@ -2441,21 +2446,21 @@ function parseThemeOptions() {
|
|
2441
2446
|
function createCssClass(lines, selector, content, scope) {
|
2442
2447
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2443
2448
|
}
|
2444
|
-
function genCssVariables(theme) {
|
2449
|
+
function genCssVariables(theme, prefix) {
|
2445
2450
|
const lightOverlay = theme.dark ? 2 : 1;
|
2446
2451
|
const darkOverlay = theme.dark ? 1 : 2;
|
2447
2452
|
const variables = [];
|
2448
2453
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2449
2454
|
const rgb = parseColor(value);
|
2450
|
-
variables.push(
|
2455
|
+
variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2451
2456
|
if (!key.startsWith('on-')) {
|
2452
|
-
variables.push(
|
2457
|
+
variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2453
2458
|
}
|
2454
2459
|
}
|
2455
2460
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2456
2461
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2457
2462
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2458
|
-
variables.push(
|
2463
|
+
variables.push(`--${prefix}${key}: ${rgb ?? value}`);
|
2459
2464
|
}
|
2460
2465
|
return variables;
|
2461
2466
|
}
|
@@ -2499,7 +2504,8 @@ function getScopedSelector(selector, scope) {
|
|
2499
2504
|
const scopeSelector = `:where(${scope})`;
|
2500
2505
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2501
2506
|
}
|
2502
|
-
function upsertStyles(
|
2507
|
+
function upsertStyles(id, cspNonce, styles) {
|
2508
|
+
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2503
2509
|
if (!styleEl) return;
|
2504
2510
|
styleEl.innerHTML = styles;
|
2505
2511
|
}
|
@@ -2519,8 +2525,17 @@ function getOrCreateStyleElement(id, cspNonce) {
|
|
2519
2525
|
// Composables
|
2520
2526
|
function createTheme(options) {
|
2521
2527
|
const parsedOptions = parseThemeOptions(options);
|
2522
|
-
const
|
2528
|
+
const _name = shallowRef(parsedOptions.defaultTheme);
|
2523
2529
|
const themes = ref(parsedOptions.themes);
|
2530
|
+
const systemName = shallowRef('light');
|
2531
|
+
const name = computed({
|
2532
|
+
get() {
|
2533
|
+
return _name.value === 'system' ? systemName.value : _name.value;
|
2534
|
+
},
|
2535
|
+
set(val) {
|
2536
|
+
_name.value = val;
|
2537
|
+
}
|
2538
|
+
});
|
2524
2539
|
const computedThemes = computed(() => {
|
2525
2540
|
const acc = {};
|
2526
2541
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2541,28 +2556,49 @@ function createTheme(options) {
|
|
2541
2556
|
const current = toRef(() => computedThemes.value[name.value]);
|
2542
2557
|
const styles = computed(() => {
|
2543
2558
|
const lines = [];
|
2559
|
+
const important = parsedOptions.unimportant ? '' : ' !important';
|
2560
|
+
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2544
2561
|
if (current.value?.dark) {
|
2545
2562
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2546
2563
|
}
|
2547
|
-
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2564
|
+
createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
|
2548
2565
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2549
|
-
createCssClass(lines,
|
2550
|
-
}
|
2551
|
-
|
2552
|
-
|
2553
|
-
|
2554
|
-
|
2555
|
-
|
2556
|
-
|
2557
|
-
|
2558
|
-
|
2559
|
-
|
2560
|
-
|
2566
|
+
createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
|
2567
|
+
}
|
2568
|
+
if (parsedOptions.utilities) {
|
2569
|
+
const bgLines = [];
|
2570
|
+
const fgLines = [];
|
2571
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2572
|
+
for (const key of colors) {
|
2573
|
+
if (key.startsWith('on-')) {
|
2574
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2575
|
+
} else {
|
2576
|
+
createCssClass(bgLines, `.${scoped}bg-${key}`, [`--${parsedOptions.prefix}theme-overlay-multiplier: var(--${parsedOptions.prefix}theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`, `color: rgb(var(--${parsedOptions.prefix}theme-on-${key}))${important}`], parsedOptions.scope);
|
2577
|
+
createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
|
2578
|
+
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2579
|
+
}
|
2561
2580
|
}
|
2581
|
+
lines.push(...bgLines, ...fgLines);
|
2562
2582
|
}
|
2563
|
-
lines.push(...bgLines, ...fgLines);
|
2564
2583
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2565
2584
|
});
|
2585
|
+
const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2586
|
+
const themeNames = toRef(() => Object.keys(computedThemes.value));
|
2587
|
+
if (SUPPORTS_MATCH_MEDIA) {
|
2588
|
+
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2589
|
+
function updateSystemName() {
|
2590
|
+
systemName.value = media.matches ? 'dark' : 'light';
|
2591
|
+
}
|
2592
|
+
updateSystemName();
|
2593
|
+
media.addEventListener('change', updateSystemName, {
|
2594
|
+
passive: true
|
2595
|
+
});
|
2596
|
+
if (getCurrentScope()) {
|
2597
|
+
onScopeDispose(() => {
|
2598
|
+
media.removeEventListener('change', updateSystemName);
|
2599
|
+
});
|
2600
|
+
}
|
2601
|
+
}
|
2566
2602
|
function install(app) {
|
2567
2603
|
if (parsedOptions.isDisabled) return;
|
2568
2604
|
const head = app._context.provides.usehead;
|
@@ -2600,22 +2636,55 @@ function createTheme(options) {
|
|
2600
2636
|
updateStyles();
|
2601
2637
|
}
|
2602
2638
|
function updateStyles() {
|
2603
|
-
upsertStyles(
|
2639
|
+
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2604
2640
|
}
|
2605
2641
|
}
|
2606
2642
|
}
|
2607
|
-
|
2643
|
+
function change(themeName) {
|
2644
|
+
if (!themeNames.value.includes(themeName)) {
|
2645
|
+
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2646
|
+
return;
|
2647
|
+
}
|
2648
|
+
name.value = themeName;
|
2649
|
+
}
|
2650
|
+
function cycle() {
|
2651
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2652
|
+
const currentIndex = themeArray.indexOf(name.value);
|
2653
|
+
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2654
|
+
change(themeArray[nextIndex]);
|
2655
|
+
}
|
2656
|
+
function toggle() {
|
2657
|
+
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2658
|
+
cycle(themeArray);
|
2659
|
+
}
|
2660
|
+
const globalName = new Proxy(name, {
|
2661
|
+
get(target, prop) {
|
2662
|
+
return target[prop];
|
2663
|
+
},
|
2664
|
+
set(target, prop, val) {
|
2665
|
+
if (prop === 'value') {
|
2666
|
+
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2667
|
+
}
|
2668
|
+
// @ts-expect-error
|
2669
|
+
target[prop] = val;
|
2670
|
+
return true;
|
2671
|
+
}
|
2672
|
+
});
|
2608
2673
|
return {
|
2609
2674
|
install,
|
2675
|
+
change,
|
2676
|
+
cycle,
|
2677
|
+
toggle,
|
2610
2678
|
isDisabled: parsedOptions.isDisabled,
|
2611
2679
|
name,
|
2612
2680
|
themes,
|
2613
2681
|
current,
|
2614
2682
|
computedThemes,
|
2683
|
+
prefix: parsedOptions.prefix,
|
2615
2684
|
themeClasses,
|
2616
2685
|
styles,
|
2617
2686
|
global: {
|
2618
|
-
name,
|
2687
|
+
name: globalName,
|
2619
2688
|
current
|
2620
2689
|
}
|
2621
2690
|
};
|
@@ -2626,7 +2695,7 @@ function provideTheme(props) {
|
|
2626
2695
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2627
2696
|
const name = toRef(() => props.theme ?? theme.name.value);
|
2628
2697
|
const current = toRef(() => theme.themes.value[name.value]);
|
2629
|
-
const themeClasses = toRef(() => theme.isDisabled ? undefined :
|
2698
|
+
const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
|
2630
2699
|
const newTheme = {
|
2631
2700
|
...theme,
|
2632
2701
|
name,
|
@@ -4173,9 +4242,15 @@ function useVariant(props) {
|
|
4173
4242
|
};
|
4174
4243
|
}
|
4175
4244
|
|
4245
|
+
// Types
|
4246
|
+
|
4176
4247
|
const makeVBtnGroupProps = propsFactory({
|
4177
4248
|
baseColor: String,
|
4178
4249
|
divided: Boolean,
|
4250
|
+
direction: {
|
4251
|
+
type: String,
|
4252
|
+
default: 'horizontal'
|
4253
|
+
},
|
4179
4254
|
...makeBorderProps(),
|
4180
4255
|
...makeComponentProps(),
|
4181
4256
|
...makeDensityProps(),
|
@@ -4209,7 +4284,7 @@ const VBtnGroup = genericComponent()({
|
|
4209
4284
|
} = useRounded(props);
|
4210
4285
|
provideDefaults({
|
4211
4286
|
VBtn: {
|
4212
|
-
height: 'auto',
|
4287
|
+
height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
|
4213
4288
|
baseColor: toRef(() => props.baseColor),
|
4214
4289
|
color: toRef(() => props.color),
|
4215
4290
|
density: toRef(() => props.density),
|
@@ -4219,7 +4294,7 @@ const VBtnGroup = genericComponent()({
|
|
4219
4294
|
});
|
4220
4295
|
useRender(() => {
|
4221
4296
|
return createVNode(props.tag, {
|
4222
|
-
"class": normalizeClass(['v-btn-group', {
|
4297
|
+
"class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
|
4223
4298
|
'v-btn-group--divided': props.divided
|
4224
4299
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
|
4225
4300
|
"style": normalizeStyle(props.style)
|
@@ -5551,8 +5626,8 @@ function rippleCancelShow(e) {
|
|
5551
5626
|
window.clearTimeout(element._ripple.showTimer);
|
5552
5627
|
}
|
5553
5628
|
let keyboardRipple = false;
|
5554
|
-
function keyboardRippleShow(e) {
|
5555
|
-
if (!keyboardRipple && (e.keyCode
|
5629
|
+
function keyboardRippleShow(e, keys) {
|
5630
|
+
if (!keyboardRipple && keys.includes(e.keyCode)) {
|
5556
5631
|
keyboardRipple = true;
|
5557
5632
|
rippleShow(e);
|
5558
5633
|
}
|
@@ -5580,9 +5655,12 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5580
5655
|
el._ripple.enabled = enabled;
|
5581
5656
|
el._ripple.centered = modifiers.center;
|
5582
5657
|
el._ripple.circle = modifiers.circle;
|
5583
|
-
|
5584
|
-
|
5658
|
+
const bindingValue = isObject(value) ? value : {};
|
5659
|
+
if (bindingValue.class) {
|
5660
|
+
el._ripple.class = bindingValue.class;
|
5585
5661
|
}
|
5662
|
+
const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
|
5663
|
+
el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
|
5586
5664
|
if (enabled && !wasEnabled) {
|
5587
5665
|
if (modifiers.stop) {
|
5588
5666
|
el.addEventListener('touchstart', rippleStop, {
|
@@ -5604,7 +5682,7 @@ function updateRipple(el, binding, wasEnabled) {
|
|
5604
5682
|
el.addEventListener('mousedown', rippleShow);
|
5605
5683
|
el.addEventListener('mouseup', rippleHide);
|
5606
5684
|
el.addEventListener('mouseleave', rippleHide);
|
5607
|
-
el.addEventListener('keydown', keyboardRippleShow);
|
5685
|
+
el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
|
5608
5686
|
el.addEventListener('keyup', keyboardRippleHide);
|
5609
5687
|
el.addEventListener('blur', focusRippleHide);
|
5610
5688
|
|
@@ -5624,7 +5702,9 @@ function removeListeners(el) {
|
|
5624
5702
|
el.removeEventListener('touchcancel', rippleHide);
|
5625
5703
|
el.removeEventListener('mouseup', rippleHide);
|
5626
5704
|
el.removeEventListener('mouseleave', rippleHide);
|
5627
|
-
el.
|
5705
|
+
if (el._ripple?.keyDownHandler) {
|
5706
|
+
el.removeEventListener('keydown', el._ripple.keyDownHandler);
|
5707
|
+
}
|
5628
5708
|
el.removeEventListener('keyup', keyboardRippleHide);
|
5629
5709
|
el.removeEventListener('dragstart', rippleHide);
|
5630
5710
|
el.removeEventListener('blur', focusRippleHide);
|
@@ -5633,8 +5713,8 @@ function mounted$4(el, binding) {
|
|
5633
5713
|
updateRipple(el, binding, false);
|
5634
5714
|
}
|
5635
5715
|
function unmounted$4(el) {
|
5636
|
-
delete el._ripple;
|
5637
5716
|
removeListeners(el);
|
5717
|
+
delete el._ripple;
|
5638
5718
|
}
|
5639
5719
|
function updated$1(el, binding) {
|
5640
5720
|
if (binding.value === binding.oldValue) {
|
@@ -5907,6 +5987,31 @@ const VAppBarTitle = genericComponent()({
|
|
5907
5987
|
// Utilities
|
5908
5988
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
5909
5989
|
|
5990
|
+
// Utilities
|
5991
|
+
|
5992
|
+
// Types
|
5993
|
+
|
5994
|
+
// Types
|
5995
|
+
|
5996
|
+
// Composables
|
5997
|
+
const makeIconSizeProps = propsFactory({
|
5998
|
+
iconSize: [Number, String],
|
5999
|
+
iconSizes: {
|
6000
|
+
type: Array,
|
6001
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
6002
|
+
}
|
6003
|
+
}, 'iconSize');
|
6004
|
+
function useIconSizes(props, fallback) {
|
6005
|
+
const iconSize = computed(() => {
|
6006
|
+
const iconSizeMap = new Map(props.iconSizes);
|
6007
|
+
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
6008
|
+
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
6009
|
+
});
|
6010
|
+
return {
|
6011
|
+
iconSize
|
6012
|
+
};
|
6013
|
+
}
|
6014
|
+
|
5910
6015
|
// Types
|
5911
6016
|
|
5912
6017
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -5946,6 +6051,7 @@ const makeVAlertProps = propsFactory({
|
|
5946
6051
|
...makeDensityProps(),
|
5947
6052
|
...makeDimensionProps(),
|
5948
6053
|
...makeElevationProps(),
|
6054
|
+
...makeIconSizeProps(),
|
5949
6055
|
...makeLocationProps(),
|
5950
6056
|
...makePositionProps(),
|
5951
6057
|
...makeRoundedProps(),
|
@@ -5973,6 +6079,9 @@ const VAlert = genericComponent()({
|
|
5973
6079
|
if (!props.type) return props.icon;
|
5974
6080
|
return props.icon ?? `$${props.type}`;
|
5975
6081
|
});
|
6082
|
+
const {
|
6083
|
+
iconSize
|
6084
|
+
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
5976
6085
|
const {
|
5977
6086
|
themeClasses
|
5978
6087
|
} = provideTheme(props);
|
@@ -6020,6 +6129,11 @@ const VAlert = genericComponent()({
|
|
6020
6129
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6021
6130
|
const hasTitle = !!(slots.title || props.title);
|
6022
6131
|
const hasClose = !!(slots.close || props.closable);
|
6132
|
+
const iconProps = {
|
6133
|
+
density: props.density,
|
6134
|
+
icon: icon.value,
|
6135
|
+
size: iconSize.value
|
6136
|
+
};
|
6023
6137
|
return isActive.value && createVNode(props.tag, {
|
6024
6138
|
"class": normalizeClass(['v-alert', props.border && {
|
6025
6139
|
'v-alert--border': !!props.border,
|
@@ -6037,19 +6151,14 @@ const VAlert = genericComponent()({
|
|
6037
6151
|
}, null), hasPrepend && createElementVNode("div", {
|
6038
6152
|
"key": "prepend",
|
6039
6153
|
"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, {
|
6154
|
+
}, [!slots.prepend ? createVNode(VIcon, mergeProps({
|
6155
|
+
"key": "prepend-icon"
|
6156
|
+
}, iconProps), null) : createVNode(VDefaultsProvider, {
|
6046
6157
|
"key": "prepend-defaults",
|
6047
6158
|
"disabled": !icon.value,
|
6048
6159
|
"defaults": {
|
6049
6160
|
VIcon: {
|
6050
|
-
|
6051
|
-
icon: icon.value,
|
6052
|
-
size: props.prominent ? 44 : 28
|
6161
|
+
...iconProps
|
6053
6162
|
}
|
6054
6163
|
}
|
6055
6164
|
}, slots.prepend)]), createElementVNode("div", {
|
@@ -7574,6 +7683,7 @@ function getOffsetPosition(isHorizontal, element) {
|
|
7574
7683
|
const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
|
7575
7684
|
const makeVSlideGroupProps = propsFactory({
|
7576
7685
|
centerActive: Boolean,
|
7686
|
+
contentClass: null,
|
7577
7687
|
direction: {
|
7578
7688
|
type: String,
|
7579
7689
|
default: 'horizontal'
|
@@ -7886,7 +7996,7 @@ const VSlideGroup = genericComponent()({
|
|
7886
7996
|
})]), createElementVNode("div", {
|
7887
7997
|
"key": "container",
|
7888
7998
|
"ref": containerRef,
|
7889
|
-
"class":
|
7999
|
+
"class": normalizeClass(['v-slide-group__container', props.contentClass]),
|
7890
8000
|
"onScroll": onScroll
|
7891
8001
|
}, [createElementVNode("div", {
|
7892
8002
|
"ref": contentRef,
|
@@ -8248,16 +8358,85 @@ const VChip = genericComponent()({
|
|
8248
8358
|
}
|
8249
8359
|
});
|
8250
8360
|
|
8361
|
+
const makeVDividerProps = propsFactory({
|
8362
|
+
color: String,
|
8363
|
+
inset: Boolean,
|
8364
|
+
length: [Number, String],
|
8365
|
+
opacity: [Number, String],
|
8366
|
+
thickness: [Number, String],
|
8367
|
+
vertical: Boolean,
|
8368
|
+
...makeComponentProps(),
|
8369
|
+
...makeThemeProps()
|
8370
|
+
}, 'VDivider');
|
8371
|
+
const VDivider = genericComponent()({
|
8372
|
+
name: 'VDivider',
|
8373
|
+
props: makeVDividerProps(),
|
8374
|
+
setup(props, _ref) {
|
8375
|
+
let {
|
8376
|
+
attrs,
|
8377
|
+
slots
|
8378
|
+
} = _ref;
|
8379
|
+
const {
|
8380
|
+
themeClasses
|
8381
|
+
} = provideTheme(props);
|
8382
|
+
const {
|
8383
|
+
textColorClasses,
|
8384
|
+
textColorStyles
|
8385
|
+
} = useTextColor(() => props.color);
|
8386
|
+
const dividerStyles = computed(() => {
|
8387
|
+
const styles = {};
|
8388
|
+
if (props.length) {
|
8389
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8390
|
+
}
|
8391
|
+
if (props.thickness) {
|
8392
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8393
|
+
}
|
8394
|
+
return styles;
|
8395
|
+
});
|
8396
|
+
useRender(() => {
|
8397
|
+
const divider = createElementVNode("hr", {
|
8398
|
+
"class": normalizeClass([{
|
8399
|
+
'v-divider': true,
|
8400
|
+
'v-divider--inset': props.inset,
|
8401
|
+
'v-divider--vertical': props.vertical
|
8402
|
+
}, themeClasses.value, textColorClasses.value, props.class]),
|
8403
|
+
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
8404
|
+
'--v-border-opacity': props.opacity
|
8405
|
+
}, props.style]),
|
8406
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8407
|
+
"role": `${attrs.role || 'separator'}`
|
8408
|
+
}, null);
|
8409
|
+
if (!slots.default) return divider;
|
8410
|
+
return createElementVNode("div", {
|
8411
|
+
"class": normalizeClass(['v-divider__wrapper', {
|
8412
|
+
'v-divider__wrapper--vertical': props.vertical,
|
8413
|
+
'v-divider__wrapper--inset': props.inset
|
8414
|
+
}])
|
8415
|
+
}, [divider, createElementVNode("div", {
|
8416
|
+
"class": "v-divider__content"
|
8417
|
+
}, [slots.default()]), divider]);
|
8418
|
+
});
|
8419
|
+
return {};
|
8420
|
+
}
|
8421
|
+
});
|
8422
|
+
|
8251
8423
|
// Utilities
|
8252
8424
|
|
8253
8425
|
// List
|
8254
8426
|
const ListKey = Symbol.for('vuetify:list');
|
8255
8427
|
function createList() {
|
8428
|
+
let {
|
8429
|
+
filterable
|
8430
|
+
} = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
|
8431
|
+
filterable: false
|
8432
|
+
};
|
8256
8433
|
const parent = inject$1(ListKey, {
|
8434
|
+
filterable: false,
|
8257
8435
|
hasPrepend: shallowRef(false),
|
8258
8436
|
updateHasPrepend: () => null
|
8259
8437
|
});
|
8260
8438
|
const data = {
|
8439
|
+
filterable: parent.filterable || filterable,
|
8261
8440
|
hasPrepend: shallowRef(false),
|
8262
8441
|
updateHasPrepend: value => {
|
8263
8442
|
if (value) data.hasPrepend.value = value;
|
@@ -9209,6 +9388,9 @@ const VListItem = genericComponent()({
|
|
9209
9388
|
roundedClasses
|
9210
9389
|
} = useRounded(roundedProps);
|
9211
9390
|
const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
|
9391
|
+
const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
|
9392
|
+
keys: [keyCodes.enter]
|
9393
|
+
} : props.ripple);
|
9212
9394
|
const slotProps = computed(() => ({
|
9213
9395
|
isActive: isActive.value,
|
9214
9396
|
select,
|
@@ -9233,8 +9415,9 @@ const VListItem = genericComponent()({
|
|
9233
9415
|
function onKeyDown(e) {
|
9234
9416
|
const target = e.target;
|
9235
9417
|
if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
|
9236
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
9418
|
+
if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
|
9237
9419
|
e.preventDefault();
|
9420
|
+
e.stopPropagation();
|
9238
9421
|
e.target.dispatchEvent(new MouseEvent('click', e));
|
9239
9422
|
}
|
9240
9423
|
}
|
@@ -9344,7 +9527,7 @@ const VListItem = genericComponent()({
|
|
9344
9527
|
}), createElementVNode("div", {
|
9345
9528
|
"class": "v-list-item__spacer"
|
9346
9529
|
}, null)])]
|
9347
|
-
}), [[Ripple, isClickable.value &&
|
9530
|
+
}), [[Ripple, isClickable.value && rippleOptions.value]]);
|
9348
9531
|
});
|
9349
9532
|
return {
|
9350
9533
|
activate,
|
@@ -9399,68 +9582,6 @@ const VListSubheader = genericComponent()({
|
|
9399
9582
|
}
|
9400
9583
|
});
|
9401
9584
|
|
9402
|
-
const makeVDividerProps = propsFactory({
|
9403
|
-
color: String,
|
9404
|
-
inset: Boolean,
|
9405
|
-
length: [Number, String],
|
9406
|
-
opacity: [Number, String],
|
9407
|
-
thickness: [Number, String],
|
9408
|
-
vertical: Boolean,
|
9409
|
-
...makeComponentProps(),
|
9410
|
-
...makeThemeProps()
|
9411
|
-
}, 'VDivider');
|
9412
|
-
const VDivider = genericComponent()({
|
9413
|
-
name: 'VDivider',
|
9414
|
-
props: makeVDividerProps(),
|
9415
|
-
setup(props, _ref) {
|
9416
|
-
let {
|
9417
|
-
attrs,
|
9418
|
-
slots
|
9419
|
-
} = _ref;
|
9420
|
-
const {
|
9421
|
-
themeClasses
|
9422
|
-
} = provideTheme(props);
|
9423
|
-
const {
|
9424
|
-
textColorClasses,
|
9425
|
-
textColorStyles
|
9426
|
-
} = useTextColor(() => props.color);
|
9427
|
-
const dividerStyles = computed(() => {
|
9428
|
-
const styles = {};
|
9429
|
-
if (props.length) {
|
9430
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9431
|
-
}
|
9432
|
-
if (props.thickness) {
|
9433
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9434
|
-
}
|
9435
|
-
return styles;
|
9436
|
-
});
|
9437
|
-
useRender(() => {
|
9438
|
-
const divider = createElementVNode("hr", {
|
9439
|
-
"class": normalizeClass([{
|
9440
|
-
'v-divider': true,
|
9441
|
-
'v-divider--inset': props.inset,
|
9442
|
-
'v-divider--vertical': props.vertical
|
9443
|
-
}, themeClasses.value, textColorClasses.value, props.class]),
|
9444
|
-
"style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
|
9445
|
-
'--v-border-opacity': props.opacity
|
9446
|
-
}, props.style]),
|
9447
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9448
|
-
"role": `${attrs.role || 'separator'}`
|
9449
|
-
}, null);
|
9450
|
-
if (!slots.default) return divider;
|
9451
|
-
return createElementVNode("div", {
|
9452
|
-
"class": normalizeClass(['v-divider__wrapper', {
|
9453
|
-
'v-divider__wrapper--vertical': props.vertical,
|
9454
|
-
'v-divider__wrapper--inset': props.inset
|
9455
|
-
}])
|
9456
|
-
}, [divider, createElementVNode("div", {
|
9457
|
-
"class": "v-divider__content"
|
9458
|
-
}, [slots.default()]), divider]);
|
9459
|
-
});
|
9460
|
-
return {};
|
9461
|
-
}
|
9462
|
-
});
|
9463
|
-
|
9464
9585
|
// Types
|
9465
9586
|
|
9466
9587
|
const makeVListChildrenProps = propsFactory({
|
@@ -9729,6 +9850,7 @@ const makeVListProps = propsFactory({
|
|
9729
9850
|
activeClass: String,
|
9730
9851
|
bgColor: String,
|
9731
9852
|
disabled: Boolean,
|
9853
|
+
filterable: Boolean,
|
9732
9854
|
expandIcon: IconValue,
|
9733
9855
|
collapseIcon: IconValue,
|
9734
9856
|
lines: {
|
@@ -9812,7 +9934,9 @@ const VList = genericComponent()({
|
|
9812
9934
|
const activeColor = toRef(() => props.activeColor);
|
9813
9935
|
const baseColor = toRef(() => props.baseColor);
|
9814
9936
|
const color = toRef(() => props.color);
|
9815
|
-
createList(
|
9937
|
+
createList({
|
9938
|
+
filterable: props.filterable
|
9939
|
+
});
|
9816
9940
|
provideDefaults({
|
9817
9941
|
VListGroup: {
|
9818
9942
|
activeColor,
|
@@ -12388,7 +12512,12 @@ function useVirtual(props, items) {
|
|
12388
12512
|
}
|
12389
12513
|
function calculateOffset(index) {
|
12390
12514
|
index = clamp(index, 0, items.value.length - 1);
|
12391
|
-
|
12515
|
+
const whole = Math.floor(index);
|
12516
|
+
const fraction = index % 1;
|
12517
|
+
const next = whole + 1;
|
12518
|
+
const wholeOffset = offsets[whole] || 0;
|
12519
|
+
const nextOffset = offsets[next] || wholeOffset;
|
12520
|
+
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12392
12521
|
}
|
12393
12522
|
function calculateIndex(scrollTop) {
|
12394
12523
|
return binaryClosest(offsets, scrollTop);
|
@@ -12742,6 +12871,7 @@ const makeSelectProps = propsFactory({
|
|
12742
12871
|
},
|
12743
12872
|
openOnClear: Boolean,
|
12744
12873
|
itemColor: String,
|
12874
|
+
noAutoScroll: Boolean,
|
12745
12875
|
...makeItemsProps({
|
12746
12876
|
itemChildren: false
|
12747
12877
|
})
|
@@ -12956,7 +13086,7 @@ const VSelect = genericComponent()({
|
|
12956
13086
|
watch(menu, () => {
|
12957
13087
|
if (!props.hideSelected && menu.value && model.value.length) {
|
12958
13088
|
const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
|
12959
|
-
IN_BROWSER && window.requestAnimationFrame(() => {
|
13089
|
+
IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
|
12960
13090
|
index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
|
12961
13091
|
});
|
12962
13092
|
}
|
@@ -13048,6 +13178,22 @@ const VSelect = genericComponent()({
|
|
13048
13178
|
key: item.value,
|
13049
13179
|
onClick: () => select(item, null)
|
13050
13180
|
});
|
13181
|
+
if (item.raw.type === 'divider') {
|
13182
|
+
return slots.divider?.({
|
13183
|
+
props: item.raw,
|
13184
|
+
index
|
13185
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13186
|
+
"key": `divider-${index}`
|
13187
|
+
}), null);
|
13188
|
+
}
|
13189
|
+
if (item.raw.type === 'subheader') {
|
13190
|
+
return slots.subheader?.({
|
13191
|
+
props: item.raw,
|
13192
|
+
index
|
13193
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13194
|
+
"key": `subheader-${index}`
|
13195
|
+
}), null);
|
13196
|
+
}
|
13051
13197
|
return slots.item?.({
|
13052
13198
|
item,
|
13053
13199
|
index,
|
@@ -13208,6 +13354,9 @@ function filterItems(items, query, options) {
|
|
13208
13354
|
let match = -1;
|
13209
13355
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13210
13356
|
if (typeof item === 'object') {
|
13357
|
+
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13358
|
+
continue;
|
13359
|
+
}
|
13211
13360
|
const filterKeys = keys || Object.keys(transformed);
|
13212
13361
|
for (const key of filterKeys) {
|
13213
13362
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13410,7 +13559,7 @@ const VAutocomplete = genericComponent()({
|
|
13410
13559
|
menu.value = !menu.value;
|
13411
13560
|
}
|
13412
13561
|
function onListKeydown(e) {
|
13413
|
-
if (e.key
|
13562
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
13414
13563
|
vTextFieldRef.value?.focus();
|
13415
13564
|
}
|
13416
13565
|
}
|
@@ -13615,6 +13764,7 @@ const VAutocomplete = genericComponent()({
|
|
13615
13764
|
}, props.menuProps), {
|
13616
13765
|
default: () => [hasList && createVNode(VList, mergeProps({
|
13617
13766
|
"ref": listRef,
|
13767
|
+
"filterable": true,
|
13618
13768
|
"selected": selectedValues.value,
|
13619
13769
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
13620
13770
|
"onMousedown": e => e.preventDefault(),
|
@@ -13646,6 +13796,22 @@ const VAutocomplete = genericComponent()({
|
|
13646
13796
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13647
13797
|
onClick: () => select(item, null)
|
13648
13798
|
});
|
13799
|
+
if (item.raw.type === 'divider') {
|
13800
|
+
return slots.divider?.({
|
13801
|
+
props: item.raw,
|
13802
|
+
index
|
13803
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
13804
|
+
"key": `divider-${index}`
|
13805
|
+
}), null);
|
13806
|
+
}
|
13807
|
+
if (item.raw.type === 'subheader') {
|
13808
|
+
return slots.subheader?.({
|
13809
|
+
props: item.raw,
|
13810
|
+
index
|
13811
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
13812
|
+
"key": `subheader-${index}`
|
13813
|
+
}), null);
|
13814
|
+
}
|
13649
13815
|
return slots.item?.({
|
13650
13816
|
item,
|
13651
13817
|
index,
|
@@ -17241,13 +17407,13 @@ function date(value) {
|
|
17241
17407
|
return null;
|
17242
17408
|
}
|
17243
17409
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17244
|
-
function getWeekdays(locale, firstDayOfWeek) {
|
17410
|
+
function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
|
17245
17411
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17246
17412
|
return createRange(7).map(i => {
|
17247
17413
|
const weekday = new Date(sundayJanuarySecond2000);
|
17248
17414
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17249
17415
|
return new Intl.DateTimeFormat(locale, {
|
17250
|
-
weekday: 'narrow'
|
17416
|
+
weekday: weekdayFormat ?? 'narrow'
|
17251
17417
|
}).format(weekday);
|
17252
17418
|
});
|
17253
17419
|
}
|
@@ -17711,9 +17877,9 @@ class VuetifyDateAdapter {
|
|
17711
17877
|
getDiff(date, comparing, unit) {
|
17712
17878
|
return getDiff(date, comparing, unit);
|
17713
17879
|
}
|
17714
|
-
getWeekdays(firstDayOfWeek) {
|
17880
|
+
getWeekdays(firstDayOfWeek, weekdayFormat) {
|
17715
17881
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
17716
|
-
return getWeekdays(this.locale, firstDay);
|
17882
|
+
return getWeekdays(this.locale, firstDay, weekdayFormat);
|
17717
17883
|
}
|
17718
17884
|
getYear(date) {
|
17719
17885
|
return getYear(date);
|
@@ -18056,6 +18222,7 @@ const VCombobox = genericComponent()({
|
|
18056
18222
|
_search.value = val ?? '';
|
18057
18223
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18058
18224
|
model.value = [transformItem$3(props, val)];
|
18225
|
+
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18059
18226
|
}
|
18060
18227
|
if (val && props.multiple && props.delimiters?.length) {
|
18061
18228
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18136,7 +18303,7 @@ const VCombobox = genericComponent()({
|
|
18136
18303
|
menu.value = !menu.value;
|
18137
18304
|
}
|
18138
18305
|
function onListKeydown(e) {
|
18139
|
-
if (e.key
|
18306
|
+
if (checkPrintable(e) || e.key === 'Backspace') {
|
18140
18307
|
vTextFieldRef.value?.focus();
|
18141
18308
|
}
|
18142
18309
|
}
|
@@ -18341,6 +18508,7 @@ const VCombobox = genericComponent()({
|
|
18341
18508
|
}, props.menuProps), {
|
18342
18509
|
default: () => [hasList && createVNode(VList, mergeProps({
|
18343
18510
|
"ref": listRef,
|
18511
|
+
"filterable": true,
|
18344
18512
|
"selected": selectedValues.value,
|
18345
18513
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
18346
18514
|
"onMousedown": e => e.preventDefault(),
|
@@ -18372,6 +18540,22 @@ const VCombobox = genericComponent()({
|
|
18372
18540
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18373
18541
|
onClick: () => select(item, null)
|
18374
18542
|
});
|
18543
|
+
if (item.raw.type === 'divider') {
|
18544
|
+
return slots.divider?.({
|
18545
|
+
props: item.raw,
|
18546
|
+
index
|
18547
|
+
}) ?? createVNode(VDivider, mergeProps(item.props, {
|
18548
|
+
"key": `divider-${index}`
|
18549
|
+
}), null);
|
18550
|
+
}
|
18551
|
+
if (item.raw.type === 'subheader') {
|
18552
|
+
return slots.subheader?.({
|
18553
|
+
props: item.raw,
|
18554
|
+
index
|
18555
|
+
}) ?? createVNode(VListSubheader, mergeProps(item.props, {
|
18556
|
+
"key": `subheader-${index}`
|
18557
|
+
}), null);
|
18558
|
+
}
|
18375
18559
|
return slots.item?.({
|
18376
18560
|
item,
|
18377
18561
|
index,
|
@@ -20251,6 +20435,7 @@ const makeVDataTableHeadersProps = propsFactory({
|
|
20251
20435
|
color: String,
|
20252
20436
|
disableSort: Boolean,
|
20253
20437
|
fixedHeader: Boolean,
|
20438
|
+
lastFixed: Boolean,
|
20254
20439
|
multiSort: Boolean,
|
20255
20440
|
sortAscIcon: {
|
20256
20441
|
type: IconValue,
|
@@ -20297,10 +20482,11 @@ const VDataTableHeaders = genericComponent()({
|
|
20297
20482
|
loaderClasses
|
20298
20483
|
} = useLoader(props);
|
20299
20484
|
function getFixedStyles(column, y) {
|
20300
|
-
if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
|
20485
|
+
if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
|
20301
20486
|
return {
|
20302
20487
|
position: 'sticky',
|
20303
|
-
left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
|
20488
|
+
left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
|
20489
|
+
right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
|
20304
20490
|
top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
|
20305
20491
|
};
|
20306
20492
|
}
|
@@ -22015,7 +22201,8 @@ const makeCalendarProps = propsFactory({
|
|
22015
22201
|
firstDayOfWeek: {
|
22016
22202
|
type: [Number, String],
|
22017
22203
|
default: undefined
|
22018
|
-
}
|
22204
|
+
},
|
22205
|
+
weekdayFormat: String
|
22019
22206
|
}, 'calendar');
|
22020
22207
|
function useCalendar(props) {
|
22021
22208
|
const adapter = useDate();
|
@@ -22263,7 +22450,7 @@ const VDatePickerMonth = genericComponent()({
|
|
22263
22450
|
"ref": daysRef,
|
22264
22451
|
"key": daysInMonth.value[0].date?.toString(),
|
22265
22452
|
"class": "v-date-picker-month__days"
|
22266
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
|
22453
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
|
22267
22454
|
"class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
|
22268
22455
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22269
22456
|
const slotProps = {
|
@@ -24794,6 +24981,10 @@ const makeVNumberInputProps = propsFactory({
|
|
24794
24981
|
type: Number,
|
24795
24982
|
default: 0
|
24796
24983
|
},
|
24984
|
+
minFractionDigits: {
|
24985
|
+
type: Number,
|
24986
|
+
default: null
|
24987
|
+
},
|
24797
24988
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24798
24989
|
}, 'VNumberInput');
|
24799
24990
|
const VNumberInput = genericComponent()({
|
@@ -24824,9 +25015,19 @@ const VNumberInput = genericComponent()({
|
|
24824
25015
|
} = useFocus(props);
|
24825
25016
|
function correctPrecision(val) {
|
24826
25017
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
24827
|
-
|
24828
|
-
|
24829
|
-
|
25018
|
+
if (precision == null) {
|
25019
|
+
return String(val);
|
25020
|
+
}
|
25021
|
+
let fixed = val.toFixed(precision);
|
25022
|
+
if (isFocused.value) {
|
25023
|
+
return Number(fixed).toString(); // trim zeros
|
25024
|
+
}
|
25025
|
+
if ((props.minFractionDigits ?? precision) < precision) {
|
25026
|
+
const trimLimit = precision - props.minFractionDigits;
|
25027
|
+
const [baseDigits, fractionDigits] = fixed.split('.');
|
25028
|
+
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
25029
|
+
}
|
25030
|
+
return fixed;
|
24830
25031
|
}
|
24831
25032
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
24832
25033
|
const _inputText = shallowRef(null);
|
@@ -24885,6 +25086,7 @@ const VNumberInput = genericComponent()({
|
|
24885
25086
|
}
|
24886
25087
|
};
|
24887
25088
|
watch(() => props.precision, () => formatInputValue());
|
25089
|
+
watch(() => props.minFractionDigits, () => formatInputValue());
|
24888
25090
|
onMounted(() => {
|
24889
25091
|
clampModel();
|
24890
25092
|
});
|
@@ -24994,7 +25196,7 @@ const VNumberInput = genericComponent()({
|
|
24994
25196
|
inputText.value = null;
|
24995
25197
|
return;
|
24996
25198
|
}
|
24997
|
-
inputText.value =
|
25199
|
+
inputText.value = correctPrecision(model.value);
|
24998
25200
|
}
|
24999
25201
|
function trimDecimalZeros() {
|
25000
25202
|
if (controlsDisabled.value) return;
|
@@ -25254,9 +25456,10 @@ const VOtpInput = genericComponent()({
|
|
25254
25456
|
e.preventDefault();
|
25255
25457
|
e.stopPropagation();
|
25256
25458
|
const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
|
25459
|
+
const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
|
25257
25460
|
if (isValidNumber(clipboardText)) return;
|
25258
25461
|
model.value = clipboardText.split('');
|
25259
|
-
inputRef.value?.[
|
25462
|
+
inputRef.value?.[finalIndex].focus();
|
25260
25463
|
}
|
25261
25464
|
function reset() {
|
25262
25465
|
model.value = [];
|
@@ -29963,11 +30166,6 @@ const makeVIconBtnProps = propsFactory({
|
|
29963
30166
|
hideOverlay: Boolean,
|
29964
30167
|
icon: [String, Function, Object],
|
29965
30168
|
iconColor: String,
|
29966
|
-
iconSize: [Number, String],
|
29967
|
-
iconSizes: {
|
29968
|
-
type: Array,
|
29969
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
29970
|
-
},
|
29971
30169
|
loading: Boolean,
|
29972
30170
|
opacity: [Number, String],
|
29973
30171
|
readonly: Boolean,
|
@@ -29987,6 +30185,7 @@ const makeVIconBtnProps = propsFactory({
|
|
29987
30185
|
...makeBorderProps(),
|
29988
30186
|
...makeComponentProps(),
|
29989
30187
|
...makeElevationProps(),
|
30188
|
+
...makeIconSizeProps(),
|
29990
30189
|
...makeRoundedProps(),
|
29991
30190
|
...makeTagProps({
|
29992
30191
|
tag: 'button'
|
@@ -30041,7 +30240,6 @@ const VIconBtn = genericComponent()({
|
|
30041
30240
|
})()
|
30042
30241
|
}));
|
30043
30242
|
const btnSizeMap = new Map(props.sizes);
|
30044
|
-
const iconSizeMap = new Map(props.iconSizes);
|
30045
30243
|
function onClick() {
|
30046
30244
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
30047
30245
|
isActive.value = !isActive.value;
|
@@ -30053,12 +30251,12 @@ const VIconBtn = genericComponent()({
|
|
30053
30251
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
30054
30252
|
const btnHeight = props.height ?? btnSize;
|
30055
30253
|
const btnWidth = props.width ?? btnSize;
|
30056
|
-
const
|
30057
|
-
|
30058
|
-
|
30254
|
+
const {
|
30255
|
+
iconSize
|
30256
|
+
} = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
|
30059
30257
|
const iconProps = {
|
30060
30258
|
icon,
|
30061
|
-
size: iconSize,
|
30259
|
+
size: iconSize.value,
|
30062
30260
|
iconColor: props.iconColor,
|
30063
30261
|
opacity: props.opacity
|
30064
30262
|
};
|
@@ -30101,7 +30299,7 @@ const VIconBtn = genericComponent()({
|
|
30101
30299
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
30102
30300
|
"indeterminate": "disable-shrink",
|
30103
30301
|
"width": "2",
|
30104
|
-
"size": iconSize
|
30302
|
+
"size": iconSize.value
|
30105
30303
|
}, null)])]
|
30106
30304
|
});
|
30107
30305
|
});
|
@@ -32011,7 +32209,7 @@ function createVuetify$1() {
|
|
32011
32209
|
};
|
32012
32210
|
});
|
32013
32211
|
}
|
32014
|
-
const version$1 = "3.8.
|
32212
|
+
const version$1 = "3.8.7-dev.2025-05-30";
|
32015
32213
|
createVuetify$1.version = version$1;
|
32016
32214
|
|
32017
32215
|
// Vue's inject() can only be used in setup
|
@@ -32309,7 +32507,7 @@ var index = /*#__PURE__*/Object.freeze({
|
|
32309
32507
|
|
32310
32508
|
/* eslint-disable local-rules/sort-imports */
|
32311
32509
|
|
32312
|
-
const version = "3.8.
|
32510
|
+
const version = "3.8.7-dev.2025-05-30";
|
32313
32511
|
|
32314
32512
|
/* eslint-disable local-rules/sort-imports */
|
32315
32513
|
|