@vuetify/nightly 3.8.6-dev.2025-05-21 → 3.8.6-master.2025-05-22
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 +10 -21
- package/dist/json/attributes.json +3598 -3634
- package/dist/json/importMap-labs.json +24 -24
- package/dist/json/importMap.json +184 -184
- package/dist/json/tags.json +0 -9
- package/dist/json/web-types.json +6522 -6697
- package/dist/vuetify-labs.cjs +223 -323
- package/dist/vuetify-labs.css +4050 -4078
- package/dist/vuetify-labs.d.ts +1350 -1508
- package/dist/vuetify-labs.esm.js +224 -324
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +223 -323
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +212 -317
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +3022 -3050
- package/dist/vuetify.d.ts +517 -667
- package/dist/vuetify.esm.js +213 -318
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +212 -317
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +1195 -1200
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAlert/VAlert.css +1 -6
- package/lib/components/VAlert/VAlert.d.ts +0 -35
- package/lib/components/VAlert/VAlert.js +9 -14
- package/lib/components/VAlert/VAlert.js.map +1 -1
- package/lib/components/VAlert/VAlert.sass +1 -7
- package/lib/components/VAutocomplete/VAutocomplete.d.ts +96 -120
- package/lib/components/VAutocomplete/VAutocomplete.js +1 -18
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
- package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
- package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
- package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
- package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
- package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
- package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
- package/lib/components/VCombobox/VCombobox.d.ts +96 -120
- package/lib/components/VCombobox/VCombobox.js +1 -19
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDatePicker/VDatePicker.d.ts +0 -10
- package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
- package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/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/VListChildren.js.map +1 -1
- package/lib/components/VNavigationDrawer/touch.js +2 -4
- package/lib/components/VNavigationDrawer/touch.js.map +1 -1
- package/lib/components/VNumberInput/VNumberInput.d.ts +89 -103
- package/lib/components/VNumberInput/VNumberInput.js +22 -29
- package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
- package/lib/components/VOverlay/VOverlay.css +1 -1
- package/lib/components/VOverlay/_variables.scss +1 -1
- package/lib/components/VOverlay/locationStrategies.js +16 -8
- package/lib/components/VOverlay/locationStrategies.js.map +1 -1
- package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
- package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
- package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
- package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
- package/lib/components/VSelect/VSelect.d.ts +96 -120
- package/lib/components/VSelect/VSelect.js +37 -25
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlider/VSlider.d.ts +3 -3
- package/lib/components/VSlider/slider.js +1 -1
- package/lib/components/VSlider/slider.js.map +1 -1
- package/lib/components/VSwitch/VSwitch.d.ts +3 -3
- package/lib/components/VTextField/VTextField.d.ts +27 -27
- package/lib/components/VTextarea/VTextarea.d.ts +15 -15
- package/lib/composables/calendar.d.ts +0 -6
- package/lib/composables/calendar.js +1 -2
- package/lib/composables/calendar.js.map +1 -1
- package/lib/composables/date/DateAdapter.d.ts +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 +0 -1
- package/lib/composables/date/index.js +0 -1
- package/lib/composables/date/index.js.map +1 -1
- package/lib/composables/filter.js +0 -3
- package/lib/composables/filter.js.map +1 -1
- package/lib/composables/goto.js +1 -1
- package/lib/composables/goto.js.map +1 -1
- package/lib/composables/theme.d.ts +1 -6
- package/lib/composables/theme.js +26 -94
- package/lib/composables/theme.js.map +1 -1
- package/lib/composables/virtual.js +1 -6
- package/lib/composables/virtual.js.map +1 -1
- package/lib/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 +67 -72
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
- package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
- package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
- package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
- package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
- package/lib/labs/VIconBtn/VIconBtn.js +11 -7
- package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
- package/lib/labs/entry-bundler.d.ts +1 -1
- package/lib/util/box.d.ts +1 -0
- package/lib/util/box.js +27 -0
- package/lib/util/box.js.map +1 -1
- package/lib/util/globals.d.ts +0 -1
- package/lib/util/globals.js +0 -1
- package/lib/util/globals.js.map +1 -1
- package/package.json +5 -7
- package/lib/composables/iconSizes.d.ts +0 -28
- package/lib/composables/iconSizes.js +0 -23
- package/lib/composables/iconSizes.js.map +0 -1
package/dist/vuetify-labs.cjs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.8.6-
|
2
|
+
* Vuetify v3.8.6-master.2025-05-22
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -85,7 +85,6 @@
|
|
85
85
|
const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
|
86
86
|
const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
|
87
87
|
const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
|
88
|
-
const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
|
89
88
|
|
90
89
|
function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
|
91
90
|
function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
|
@@ -696,6 +695,33 @@
|
|
696
695
|
return target.getBoundingClientRect();
|
697
696
|
}
|
698
697
|
}
|
698
|
+
function getElementBox(el) {
|
699
|
+
if (el === document.documentElement) {
|
700
|
+
if (!visualViewport) {
|
701
|
+
return new Box({
|
702
|
+
x: 0,
|
703
|
+
y: 0,
|
704
|
+
width: document.documentElement.clientWidth,
|
705
|
+
height: document.documentElement.clientHeight
|
706
|
+
});
|
707
|
+
} else {
|
708
|
+
return new Box({
|
709
|
+
x: visualViewport.scale > 1 ? 0 : visualViewport.offsetLeft,
|
710
|
+
y: visualViewport.scale > 1 ? 0 : visualViewport.offsetTop,
|
711
|
+
width: visualViewport.width * visualViewport.scale,
|
712
|
+
height: visualViewport.height * visualViewport.scale
|
713
|
+
});
|
714
|
+
}
|
715
|
+
} else {
|
716
|
+
const rect = el.getBoundingClientRect();
|
717
|
+
return new Box({
|
718
|
+
x: rect.x,
|
719
|
+
y: rect.y,
|
720
|
+
width: el.clientWidth,
|
721
|
+
height: el.clientHeight
|
722
|
+
});
|
723
|
+
}
|
724
|
+
}
|
699
725
|
|
700
726
|
// Utilities
|
701
727
|
|
@@ -2300,7 +2326,6 @@
|
|
2300
2326
|
function genDefaults$2() {
|
2301
2327
|
return {
|
2302
2328
|
defaultTheme: 'light',
|
2303
|
-
prefix: 'v-',
|
2304
2329
|
variations: {
|
2305
2330
|
colors: [],
|
2306
2331
|
lighten: 0,
|
@@ -2382,10 +2407,7 @@
|
|
2382
2407
|
}
|
2383
2408
|
}
|
2384
2409
|
},
|
2385
|
-
stylesheetId: 'vuetify-theme-stylesheet'
|
2386
|
-
scoped: false,
|
2387
|
-
unimportant: false,
|
2388
|
-
utilities: true
|
2410
|
+
stylesheetId: 'vuetify-theme-stylesheet'
|
2389
2411
|
};
|
2390
2412
|
}
|
2391
2413
|
function parseThemeOptions() {
|
@@ -2408,21 +2430,21 @@
|
|
2408
2430
|
function createCssClass(lines, selector, content, scope) {
|
2409
2431
|
lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
|
2410
2432
|
}
|
2411
|
-
function genCssVariables(theme
|
2433
|
+
function genCssVariables(theme) {
|
2412
2434
|
const lightOverlay = theme.dark ? 2 : 1;
|
2413
2435
|
const darkOverlay = theme.dark ? 1 : 2;
|
2414
2436
|
const variables = [];
|
2415
2437
|
for (const [key, value] of Object.entries(theme.colors)) {
|
2416
2438
|
const rgb = parseColor(value);
|
2417
|
-
variables.push(
|
2439
|
+
variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
|
2418
2440
|
if (!key.startsWith('on-')) {
|
2419
|
-
variables.push(
|
2441
|
+
variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
|
2420
2442
|
}
|
2421
2443
|
}
|
2422
2444
|
for (const [key, value] of Object.entries(theme.variables)) {
|
2423
2445
|
const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
|
2424
2446
|
const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
|
2425
|
-
variables.push(
|
2447
|
+
variables.push(`--v-${key}: ${rgb ?? value}`);
|
2426
2448
|
}
|
2427
2449
|
return variables;
|
2428
2450
|
}
|
@@ -2466,8 +2488,7 @@
|
|
2466
2488
|
const scopeSelector = `:where(${scope})`;
|
2467
2489
|
return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
|
2468
2490
|
}
|
2469
|
-
function upsertStyles(
|
2470
|
-
const styleEl = getOrCreateStyleElement(id, cspNonce);
|
2491
|
+
function upsertStyles(styleEl, styles) {
|
2471
2492
|
if (!styleEl) return;
|
2472
2493
|
styleEl.innerHTML = styles;
|
2473
2494
|
}
|
@@ -2487,17 +2508,8 @@
|
|
2487
2508
|
// Composables
|
2488
2509
|
function createTheme(options) {
|
2489
2510
|
const parsedOptions = parseThemeOptions(options);
|
2490
|
-
const
|
2511
|
+
const name = vue.shallowRef(parsedOptions.defaultTheme);
|
2491
2512
|
const themes = vue.ref(parsedOptions.themes);
|
2492
|
-
const systemName = vue.shallowRef('light');
|
2493
|
-
const name = vue.computed({
|
2494
|
-
get() {
|
2495
|
-
return _name.value === 'system' ? systemName.value : _name.value;
|
2496
|
-
},
|
2497
|
-
set(val) {
|
2498
|
-
_name.value = val;
|
2499
|
-
}
|
2500
|
-
});
|
2501
2513
|
const computedThemes = vue.computed(() => {
|
2502
2514
|
const acc = {};
|
2503
2515
|
for (const [name, original] of Object.entries(themes.value)) {
|
@@ -2518,49 +2530,28 @@
|
|
2518
2530
|
const current = vue.toRef(() => computedThemes.value[name.value]);
|
2519
2531
|
const styles = vue.computed(() => {
|
2520
2532
|
const lines = [];
|
2521
|
-
const important = parsedOptions.unimportant ? '' : ' !important';
|
2522
|
-
const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
|
2523
2533
|
if (current.value?.dark) {
|
2524
2534
|
createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
|
2525
2535
|
}
|
2526
|
-
createCssClass(lines, ':root', genCssVariables(current.value
|
2536
|
+
createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
|
2527
2537
|
for (const [themeName, theme] of Object.entries(computedThemes.value)) {
|
2528
|
-
createCssClass(lines,
|
2529
|
-
}
|
2530
|
-
|
2531
|
-
|
2532
|
-
|
2533
|
-
|
2534
|
-
|
2535
|
-
|
2536
|
-
|
2537
|
-
}
|
2538
|
-
|
2539
|
-
|
2540
|
-
createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
|
2541
|
-
}
|
2538
|
+
createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
|
2539
|
+
}
|
2540
|
+
const bgLines = [];
|
2541
|
+
const fgLines = [];
|
2542
|
+
const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
|
2543
|
+
for (const key of colors) {
|
2544
|
+
if (key.startsWith('on-')) {
|
2545
|
+
createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
|
2546
|
+
} else {
|
2547
|
+
createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`], parsedOptions.scope);
|
2548
|
+
createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
|
2549
|
+
createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
|
2542
2550
|
}
|
2543
|
-
lines.push(...bgLines, ...fgLines);
|
2544
2551
|
}
|
2552
|
+
lines.push(...bgLines, ...fgLines);
|
2545
2553
|
return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
|
2546
2554
|
});
|
2547
|
-
const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
|
2548
|
-
const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
|
2549
|
-
if (SUPPORTS_MATCH_MEDIA) {
|
2550
|
-
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
2551
|
-
function updateSystemName() {
|
2552
|
-
systemName.value = media.matches ? 'dark' : 'light';
|
2553
|
-
}
|
2554
|
-
updateSystemName();
|
2555
|
-
media.addEventListener('change', updateSystemName, {
|
2556
|
-
passive: true
|
2557
|
-
});
|
2558
|
-
if (vue.getCurrentScope()) {
|
2559
|
-
vue.onScopeDispose(() => {
|
2560
|
-
media.removeEventListener('change', updateSystemName);
|
2561
|
-
});
|
2562
|
-
}
|
2563
|
-
}
|
2564
2555
|
function install(app) {
|
2565
2556
|
if (parsedOptions.isDisabled) return;
|
2566
2557
|
const head = app._context.provides.usehead;
|
@@ -2598,55 +2589,22 @@
|
|
2598
2589
|
updateStyles();
|
2599
2590
|
}
|
2600
2591
|
function updateStyles() {
|
2601
|
-
upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
|
2592
|
+
upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
|
2602
2593
|
}
|
2603
2594
|
}
|
2604
2595
|
}
|
2605
|
-
|
2606
|
-
if (!themeNames.value.includes(themeName)) {
|
2607
|
-
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
2608
|
-
return;
|
2609
|
-
}
|
2610
|
-
name.value = themeName;
|
2611
|
-
}
|
2612
|
-
function cycle() {
|
2613
|
-
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
|
2614
|
-
const currentIndex = themeArray.indexOf(name.value);
|
2615
|
-
const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
|
2616
|
-
change(themeArray[nextIndex]);
|
2617
|
-
}
|
2618
|
-
function toggle() {
|
2619
|
-
let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
|
2620
|
-
cycle(themeArray);
|
2621
|
-
}
|
2622
|
-
const globalName = new Proxy(name, {
|
2623
|
-
get(target, prop) {
|
2624
|
-
return target[prop];
|
2625
|
-
},
|
2626
|
-
set(target, prop, val) {
|
2627
|
-
if (prop === 'value') {
|
2628
|
-
deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
|
2629
|
-
}
|
2630
|
-
// @ts-expect-error
|
2631
|
-
target[prop] = val;
|
2632
|
-
return true;
|
2633
|
-
}
|
2634
|
-
});
|
2596
|
+
const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
|
2635
2597
|
return {
|
2636
2598
|
install,
|
2637
|
-
change,
|
2638
|
-
cycle,
|
2639
|
-
toggle,
|
2640
2599
|
isDisabled: parsedOptions.isDisabled,
|
2641
2600
|
name,
|
2642
2601
|
themes,
|
2643
2602
|
current,
|
2644
2603
|
computedThemes,
|
2645
|
-
prefix: parsedOptions.prefix,
|
2646
2604
|
themeClasses,
|
2647
2605
|
styles,
|
2648
2606
|
global: {
|
2649
|
-
name
|
2607
|
+
name,
|
2650
2608
|
current
|
2651
2609
|
}
|
2652
2610
|
};
|
@@ -2657,7 +2615,7 @@
|
|
2657
2615
|
if (!theme) throw new Error('Could not find Vuetify theme injection');
|
2658
2616
|
const name = vue.toRef(() => props.theme ?? theme.name.value);
|
2659
2617
|
const current = vue.toRef(() => theme.themes.value[name.value]);
|
2660
|
-
const themeClasses = vue.toRef(() => theme.isDisabled ? undefined :
|
2618
|
+
const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
|
2661
2619
|
const newTheme = {
|
2662
2620
|
...theme,
|
2663
2621
|
name,
|
@@ -4204,15 +4162,9 @@
|
|
4204
4162
|
};
|
4205
4163
|
}
|
4206
4164
|
|
4207
|
-
// Types
|
4208
|
-
|
4209
4165
|
const makeVBtnGroupProps = propsFactory({
|
4210
4166
|
baseColor: String,
|
4211
4167
|
divided: Boolean,
|
4212
|
-
direction: {
|
4213
|
-
type: String,
|
4214
|
-
default: 'horizontal'
|
4215
|
-
},
|
4216
4168
|
...makeBorderProps(),
|
4217
4169
|
...makeComponentProps(),
|
4218
4170
|
...makeDensityProps(),
|
@@ -4246,7 +4198,7 @@
|
|
4246
4198
|
} = useRounded(props);
|
4247
4199
|
provideDefaults({
|
4248
4200
|
VBtn: {
|
4249
|
-
height:
|
4201
|
+
height: 'auto',
|
4250
4202
|
baseColor: vue.toRef(() => props.baseColor),
|
4251
4203
|
color: vue.toRef(() => props.color),
|
4252
4204
|
density: vue.toRef(() => props.density),
|
@@ -4256,7 +4208,7 @@
|
|
4256
4208
|
});
|
4257
4209
|
useRender(() => {
|
4258
4210
|
return vue.createVNode(props.tag, {
|
4259
|
-
"class": ['v-btn-group',
|
4211
|
+
"class": ['v-btn-group', {
|
4260
4212
|
'v-btn-group--divided': props.divided
|
4261
4213
|
}, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
|
4262
4214
|
"style": props.style
|
@@ -4934,7 +4886,7 @@
|
|
4934
4886
|
resizeRef,
|
4935
4887
|
contentRect
|
4936
4888
|
} = useResizeObserver();
|
4937
|
-
const normalizedValue = vue.toRef(() =>
|
4889
|
+
const normalizedValue = vue.toRef(() => clamp(parseFloat(props.modelValue), 0, 100));
|
4938
4890
|
const width = vue.toRef(() => Number(props.width));
|
4939
4891
|
const size = vue.toRef(() => {
|
4940
4892
|
// Get size from element if size prop value is small, large etc
|
@@ -5944,31 +5896,6 @@
|
|
5944
5896
|
// Utilities
|
5945
5897
|
const VAlertTitle = createSimpleFunctional('v-alert-title');
|
5946
5898
|
|
5947
|
-
// Utilities
|
5948
|
-
|
5949
|
-
// Types
|
5950
|
-
|
5951
|
-
// Types
|
5952
|
-
|
5953
|
-
// Composables
|
5954
|
-
const makeIconSizeProps = propsFactory({
|
5955
|
-
iconSize: [Number, String],
|
5956
|
-
iconSizes: {
|
5957
|
-
type: Array,
|
5958
|
-
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
5959
|
-
}
|
5960
|
-
}, 'iconSize');
|
5961
|
-
function useIconSizes(props, fallback) {
|
5962
|
-
const iconSize = vue.computed(() => {
|
5963
|
-
const iconSizeMap = new Map(props.iconSizes);
|
5964
|
-
const _iconSize = props.iconSize ?? fallback() ?? 'default';
|
5965
|
-
return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
|
5966
|
-
});
|
5967
|
-
return {
|
5968
|
-
iconSize
|
5969
|
-
};
|
5970
|
-
}
|
5971
|
-
|
5972
5899
|
// Types
|
5973
5900
|
|
5974
5901
|
const allowedTypes = ['success', 'info', 'warning', 'error'];
|
@@ -6008,7 +5935,6 @@
|
|
6008
5935
|
...makeDensityProps(),
|
6009
5936
|
...makeDimensionProps(),
|
6010
5937
|
...makeElevationProps(),
|
6011
|
-
...makeIconSizeProps(),
|
6012
5938
|
...makeLocationProps(),
|
6013
5939
|
...makePositionProps(),
|
6014
5940
|
...makeRoundedProps(),
|
@@ -6036,9 +5962,6 @@
|
|
6036
5962
|
if (!props.type) return props.icon;
|
6037
5963
|
return props.icon ?? `$${props.type}`;
|
6038
5964
|
});
|
6039
|
-
const {
|
6040
|
-
iconSize
|
6041
|
-
} = useIconSizes(props, () => props.prominent ? 44 : 28);
|
6042
5965
|
const {
|
6043
5966
|
themeClasses
|
6044
5967
|
} = provideTheme(props);
|
@@ -6086,11 +6009,6 @@
|
|
6086
6009
|
const hasPrepend = !!(slots.prepend || icon.value);
|
6087
6010
|
const hasTitle = !!(slots.title || props.title);
|
6088
6011
|
const hasClose = !!(slots.close || props.closable);
|
6089
|
-
const iconProps = {
|
6090
|
-
density: props.density,
|
6091
|
-
icon: icon.value,
|
6092
|
-
size: iconSize.value
|
6093
|
-
};
|
6094
6012
|
return isActive.value && vue.createVNode(props.tag, {
|
6095
6013
|
"class": ['v-alert', props.border && {
|
6096
6014
|
'v-alert--border': !!props.border,
|
@@ -6108,14 +6026,19 @@
|
|
6108
6026
|
}, null), hasPrepend && vue.createVNode("div", {
|
6109
6027
|
"key": "prepend",
|
6110
6028
|
"class": "v-alert__prepend"
|
6111
|
-
}, [!slots.prepend ? vue.createVNode(VIcon,
|
6112
|
-
"key": "prepend-icon"
|
6113
|
-
|
6029
|
+
}, [!slots.prepend ? vue.createVNode(VIcon, {
|
6030
|
+
"key": "prepend-icon",
|
6031
|
+
"density": props.density,
|
6032
|
+
"icon": icon.value,
|
6033
|
+
"size": props.prominent ? 44 : 28
|
6034
|
+
}, null) : vue.createVNode(VDefaultsProvider, {
|
6114
6035
|
"key": "prepend-defaults",
|
6115
6036
|
"disabled": !icon.value,
|
6116
6037
|
"defaults": {
|
6117
6038
|
VIcon: {
|
6118
|
-
|
6039
|
+
density: props.density,
|
6040
|
+
icon: icon.value,
|
6041
|
+
size: props.prominent ? 44 : 28
|
6119
6042
|
}
|
6120
6043
|
}
|
6121
6044
|
}, slots.prepend)]), vue.createVNode("div", {
|
@@ -7570,7 +7493,7 @@
|
|
7570
7493
|
min = 0;
|
7571
7494
|
max = scrollHeight + -containerHeight;
|
7572
7495
|
}
|
7573
|
-
return
|
7496
|
+
return clamp(value, min, max);
|
7574
7497
|
}
|
7575
7498
|
|
7576
7499
|
function calculateUpdatedTarget(_ref) {
|
@@ -8313,68 +8236,6 @@
|
|
8313
8236
|
}
|
8314
8237
|
});
|
8315
8238
|
|
8316
|
-
const makeVDividerProps = propsFactory({
|
8317
|
-
color: String,
|
8318
|
-
inset: Boolean,
|
8319
|
-
length: [Number, String],
|
8320
|
-
opacity: [Number, String],
|
8321
|
-
thickness: [Number, String],
|
8322
|
-
vertical: Boolean,
|
8323
|
-
...makeComponentProps(),
|
8324
|
-
...makeThemeProps()
|
8325
|
-
}, 'VDivider');
|
8326
|
-
const VDivider = genericComponent()({
|
8327
|
-
name: 'VDivider',
|
8328
|
-
props: makeVDividerProps(),
|
8329
|
-
setup(props, _ref) {
|
8330
|
-
let {
|
8331
|
-
attrs,
|
8332
|
-
slots
|
8333
|
-
} = _ref;
|
8334
|
-
const {
|
8335
|
-
themeClasses
|
8336
|
-
} = provideTheme(props);
|
8337
|
-
const {
|
8338
|
-
textColorClasses,
|
8339
|
-
textColorStyles
|
8340
|
-
} = useTextColor(() => props.color);
|
8341
|
-
const dividerStyles = vue.computed(() => {
|
8342
|
-
const styles = {};
|
8343
|
-
if (props.length) {
|
8344
|
-
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
8345
|
-
}
|
8346
|
-
if (props.thickness) {
|
8347
|
-
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
8348
|
-
}
|
8349
|
-
return styles;
|
8350
|
-
});
|
8351
|
-
useRender(() => {
|
8352
|
-
const divider = vue.createVNode("hr", {
|
8353
|
-
"class": [{
|
8354
|
-
'v-divider': true,
|
8355
|
-
'v-divider--inset': props.inset,
|
8356
|
-
'v-divider--vertical': props.vertical
|
8357
|
-
}, themeClasses.value, textColorClasses.value, props.class],
|
8358
|
-
"style": [dividerStyles.value, textColorStyles.value, {
|
8359
|
-
'--v-border-opacity': props.opacity
|
8360
|
-
}, props.style],
|
8361
|
-
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
8362
|
-
"role": `${attrs.role || 'separator'}`
|
8363
|
-
}, null);
|
8364
|
-
if (!slots.default) return divider;
|
8365
|
-
return vue.createVNode("div", {
|
8366
|
-
"class": ['v-divider__wrapper', {
|
8367
|
-
'v-divider__wrapper--vertical': props.vertical,
|
8368
|
-
'v-divider__wrapper--inset': props.inset
|
8369
|
-
}]
|
8370
|
-
}, [divider, vue.createVNode("div", {
|
8371
|
-
"class": "v-divider__content"
|
8372
|
-
}, [slots.default()]), divider]);
|
8373
|
-
});
|
8374
|
-
return {};
|
8375
|
-
}
|
8376
|
-
});
|
8377
|
-
|
8378
8239
|
// Utilities
|
8379
8240
|
|
8380
8241
|
// List
|
@@ -9526,6 +9387,68 @@
|
|
9526
9387
|
}
|
9527
9388
|
});
|
9528
9389
|
|
9390
|
+
const makeVDividerProps = propsFactory({
|
9391
|
+
color: String,
|
9392
|
+
inset: Boolean,
|
9393
|
+
length: [Number, String],
|
9394
|
+
opacity: [Number, String],
|
9395
|
+
thickness: [Number, String],
|
9396
|
+
vertical: Boolean,
|
9397
|
+
...makeComponentProps(),
|
9398
|
+
...makeThemeProps()
|
9399
|
+
}, 'VDivider');
|
9400
|
+
const VDivider = genericComponent()({
|
9401
|
+
name: 'VDivider',
|
9402
|
+
props: makeVDividerProps(),
|
9403
|
+
setup(props, _ref) {
|
9404
|
+
let {
|
9405
|
+
attrs,
|
9406
|
+
slots
|
9407
|
+
} = _ref;
|
9408
|
+
const {
|
9409
|
+
themeClasses
|
9410
|
+
} = provideTheme(props);
|
9411
|
+
const {
|
9412
|
+
textColorClasses,
|
9413
|
+
textColorStyles
|
9414
|
+
} = useTextColor(() => props.color);
|
9415
|
+
const dividerStyles = vue.computed(() => {
|
9416
|
+
const styles = {};
|
9417
|
+
if (props.length) {
|
9418
|
+
styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
|
9419
|
+
}
|
9420
|
+
if (props.thickness) {
|
9421
|
+
styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
|
9422
|
+
}
|
9423
|
+
return styles;
|
9424
|
+
});
|
9425
|
+
useRender(() => {
|
9426
|
+
const divider = vue.createVNode("hr", {
|
9427
|
+
"class": [{
|
9428
|
+
'v-divider': true,
|
9429
|
+
'v-divider--inset': props.inset,
|
9430
|
+
'v-divider--vertical': props.vertical
|
9431
|
+
}, themeClasses.value, textColorClasses.value, props.class],
|
9432
|
+
"style": [dividerStyles.value, textColorStyles.value, {
|
9433
|
+
'--v-border-opacity': props.opacity
|
9434
|
+
}, props.style],
|
9435
|
+
"aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
|
9436
|
+
"role": `${attrs.role || 'separator'}`
|
9437
|
+
}, null);
|
9438
|
+
if (!slots.default) return divider;
|
9439
|
+
return vue.createVNode("div", {
|
9440
|
+
"class": ['v-divider__wrapper', {
|
9441
|
+
'v-divider__wrapper--vertical': props.vertical,
|
9442
|
+
'v-divider__wrapper--inset': props.inset
|
9443
|
+
}]
|
9444
|
+
}, [divider, vue.createVNode("div", {
|
9445
|
+
"class": "v-divider__content"
|
9446
|
+
}, [slots.default()]), divider]);
|
9447
|
+
});
|
9448
|
+
return {};
|
9449
|
+
}
|
9450
|
+
});
|
9451
|
+
|
9529
9452
|
// Types
|
9530
9453
|
|
9531
9454
|
const makeVListChildrenProps = propsFactory({
|
@@ -10104,11 +10027,19 @@
|
|
10104
10027
|
vue.watch(() => props.locationStrategy, reset);
|
10105
10028
|
vue.onScopeDispose(() => {
|
10106
10029
|
window.removeEventListener('resize', onResize);
|
10030
|
+
visualViewport?.removeEventListener('resize', onVisualResize);
|
10031
|
+
visualViewport?.removeEventListener('scroll', onVisualScroll);
|
10107
10032
|
updateLocation.value = undefined;
|
10108
10033
|
});
|
10109
10034
|
window.addEventListener('resize', onResize, {
|
10110
10035
|
passive: true
|
10111
10036
|
});
|
10037
|
+
visualViewport?.addEventListener('resize', onVisualResize, {
|
10038
|
+
passive: true
|
10039
|
+
});
|
10040
|
+
visualViewport?.addEventListener('scroll', onVisualScroll, {
|
10041
|
+
passive: true
|
10042
|
+
});
|
10112
10043
|
if (typeof props.locationStrategy === 'function') {
|
10113
10044
|
updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation;
|
10114
10045
|
} else {
|
@@ -10119,6 +10050,12 @@
|
|
10119
10050
|
function onResize(e) {
|
10120
10051
|
updateLocation.value?.(e);
|
10121
10052
|
}
|
10053
|
+
function onVisualResize(e) {
|
10054
|
+
updateLocation.value?.(e);
|
10055
|
+
}
|
10056
|
+
function onVisualScroll(e) {
|
10057
|
+
updateLocation.value?.(e);
|
10058
|
+
}
|
10122
10059
|
return {
|
10123
10060
|
contentStyles,
|
10124
10061
|
updateLocation
|
@@ -10270,13 +10207,7 @@
|
|
10270
10207
|
}
|
10271
10208
|
}
|
10272
10209
|
const viewport = scrollParents.reduce((box, el) => {
|
10273
|
-
const
|
10274
|
-
const scrollBox = new Box({
|
10275
|
-
x: el === document.documentElement ? 0 : rect.x,
|
10276
|
-
y: el === document.documentElement ? 0 : rect.y,
|
10277
|
-
width: el.clientWidth,
|
10278
|
-
height: el.clientHeight
|
10279
|
-
});
|
10210
|
+
const scrollBox = getElementBox(el);
|
10280
10211
|
if (box) {
|
10281
10212
|
return new Box({
|
10282
10213
|
x: Math.max(box.left, scrollBox.left),
|
@@ -12443,12 +12374,7 @@
|
|
12443
12374
|
}
|
12444
12375
|
function calculateOffset(index) {
|
12445
12376
|
index = clamp(index, 0, items.value.length - 1);
|
12446
|
-
|
12447
|
-
const fraction = index % 1;
|
12448
|
-
const next = whole + 1;
|
12449
|
-
const wholeOffset = offsets[whole] || 0;
|
12450
|
-
const nextOffset = offsets[next] || wholeOffset;
|
12451
|
-
return wholeOffset + (nextOffset - wholeOffset) * fraction;
|
12377
|
+
return offsets[index] || 0;
|
12452
12378
|
}
|
12453
12379
|
function calculateIndex(scrollTop) {
|
12454
12380
|
return binaryClosest(offsets, scrollTop);
|
@@ -12852,6 +12778,7 @@
|
|
12852
12778
|
const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
|
12853
12779
|
const isFocused = vue.shallowRef(false);
|
12854
12780
|
let keyboardLookupPrefix = '';
|
12781
|
+
let keyboardLookupIndex = -1;
|
12855
12782
|
let keyboardLookupLastTime;
|
12856
12783
|
const displayItems = vue.computed(() => {
|
12857
12784
|
if (props.hideSelected) {
|
@@ -12919,18 +12846,46 @@
|
|
12919
12846
|
const now = performance.now();
|
12920
12847
|
if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
|
12921
12848
|
keyboardLookupPrefix = '';
|
12849
|
+
keyboardLookupIndex = -1;
|
12922
12850
|
}
|
12923
12851
|
keyboardLookupPrefix += e.key.toLowerCase();
|
12924
12852
|
keyboardLookupLastTime = now;
|
12925
|
-
const
|
12926
|
-
|
12927
|
-
|
12928
|
-
|
12853
|
+
const items = displayItems.value;
|
12854
|
+
function findItem() {
|
12855
|
+
let result = findItemBase();
|
12856
|
+
if (result) return result;
|
12857
|
+
if (keyboardLookupPrefix.at(-1) === keyboardLookupPrefix.at(-2)) {
|
12858
|
+
// No matches but we have a repeated letter, try the next item with that prefix
|
12859
|
+
keyboardLookupPrefix = keyboardLookupPrefix.slice(0, -1);
|
12860
|
+
result = findItemBase();
|
12861
|
+
if (result) return result;
|
12929
12862
|
}
|
12930
|
-
|
12931
|
-
|
12932
|
-
|
12863
|
+
|
12864
|
+
// Still nothing, wrap around to the top
|
12865
|
+
keyboardLookupIndex = -1;
|
12866
|
+
result = findItemBase();
|
12867
|
+
if (result) return result;
|
12868
|
+
|
12869
|
+
// Still nothing, try just the new letter
|
12870
|
+
keyboardLookupPrefix = e.key.toLowerCase();
|
12871
|
+
return findItemBase();
|
12872
|
+
}
|
12873
|
+
function findItemBase() {
|
12874
|
+
for (let i = keyboardLookupIndex + 1; i < items.length; i++) {
|
12875
|
+
const _item = items[i];
|
12876
|
+
if (_item.title.toLowerCase().startsWith(keyboardLookupPrefix)) {
|
12877
|
+
return [_item, i];
|
12878
|
+
}
|
12933
12879
|
}
|
12880
|
+
return undefined;
|
12881
|
+
}
|
12882
|
+
const result = findItem();
|
12883
|
+
if (!result) return;
|
12884
|
+
const [item, index] = result;
|
12885
|
+
keyboardLookupIndex = index;
|
12886
|
+
listRef.value?.focus(index);
|
12887
|
+
if (!props.multiple) {
|
12888
|
+
model.value = [item];
|
12934
12889
|
}
|
12935
12890
|
}
|
12936
12891
|
|
@@ -13079,22 +13034,6 @@
|
|
13079
13034
|
key: item.value,
|
13080
13035
|
onClick: () => select(item, null)
|
13081
13036
|
});
|
13082
|
-
if (item.raw.type === 'divider') {
|
13083
|
-
return slots.divider?.({
|
13084
|
-
props: item.raw,
|
13085
|
-
index
|
13086
|
-
}) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
|
13087
|
-
"key": `divider-${index}`
|
13088
|
-
}), null);
|
13089
|
-
}
|
13090
|
-
if (item.raw.type === 'subheader') {
|
13091
|
-
return slots.subheader?.({
|
13092
|
-
props: item.raw,
|
13093
|
-
index
|
13094
|
-
}) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
|
13095
|
-
"key": `subheader-${index}`
|
13096
|
-
}), null);
|
13097
|
-
}
|
13098
13037
|
return slots.item?.({
|
13099
13038
|
item,
|
13100
13039
|
index,
|
@@ -13255,9 +13194,6 @@
|
|
13255
13194
|
let match = -1;
|
13256
13195
|
if ((query || customFiltersLength > 0) && !options?.noFilter) {
|
13257
13196
|
if (typeof item === 'object') {
|
13258
|
-
if (['divider', 'subheader'].includes(item.raw?.type)) {
|
13259
|
-
continue;
|
13260
|
-
}
|
13261
13197
|
const filterKeys = keys || Object.keys(transformed);
|
13262
13198
|
for (const key of filterKeys) {
|
13263
13199
|
const value = getPropertyFromItem(transformed, key);
|
@@ -13696,22 +13632,6 @@
|
|
13696
13632
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
13697
13633
|
onClick: () => select(item, null)
|
13698
13634
|
});
|
13699
|
-
if (item.raw.type === 'divider') {
|
13700
|
-
return slots.divider?.({
|
13701
|
-
props: item.raw,
|
13702
|
-
index
|
13703
|
-
}) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
|
13704
|
-
"key": `divider-${index}`
|
13705
|
-
}), null);
|
13706
|
-
}
|
13707
|
-
if (item.raw.type === 'subheader') {
|
13708
|
-
return slots.subheader?.({
|
13709
|
-
props: item.raw,
|
13710
|
-
index
|
13711
|
-
}) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
|
13712
|
-
"key": `subheader-${index}`
|
13713
|
-
}), null);
|
13714
|
-
}
|
13715
13635
|
return slots.item?.({
|
13716
13636
|
item,
|
13717
13637
|
index,
|
@@ -16009,7 +15929,7 @@
|
|
16009
15929
|
const clickOffset = getPosition(e, position);
|
16010
15930
|
|
16011
15931
|
// It is possible for left to be NaN, force to number
|
16012
|
-
let clickPos =
|
15932
|
+
let clickPos = clamp((clickOffset - trackStart - startOffset.value) / trackLength) || 0;
|
16013
15933
|
if (vertical ? indexFromEnd.value : indexFromEnd.value !== isRtl.value) clickPos = 1 - clickPos;
|
16014
15934
|
return roundValue(min.value + clickPos * (max.value - min.value));
|
16015
15935
|
}
|
@@ -17307,13 +17227,13 @@
|
|
17307
17227
|
return null;
|
17308
17228
|
}
|
17309
17229
|
const sundayJanuarySecond2000 = new Date(2000, 0, 2);
|
17310
|
-
function getWeekdays(locale, firstDayOfWeek
|
17230
|
+
function getWeekdays(locale, firstDayOfWeek) {
|
17311
17231
|
const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
|
17312
17232
|
return createRange(7).map(i => {
|
17313
17233
|
const weekday = new Date(sundayJanuarySecond2000);
|
17314
17234
|
weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
|
17315
17235
|
return new Intl.DateTimeFormat(locale, {
|
17316
|
-
weekday:
|
17236
|
+
weekday: 'narrow'
|
17317
17237
|
}).format(weekday);
|
17318
17238
|
});
|
17319
17239
|
}
|
@@ -17777,9 +17697,9 @@
|
|
17777
17697
|
getDiff(date, comparing, unit) {
|
17778
17698
|
return getDiff(date, comparing, unit);
|
17779
17699
|
}
|
17780
|
-
getWeekdays(firstDayOfWeek
|
17700
|
+
getWeekdays(firstDayOfWeek) {
|
17781
17701
|
const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
|
17782
|
-
return getWeekdays(this.locale, firstDay
|
17702
|
+
return getWeekdays(this.locale, firstDay);
|
17783
17703
|
}
|
17784
17704
|
getYear(date) {
|
17785
17705
|
return getYear(date);
|
@@ -18122,7 +18042,6 @@
|
|
18122
18042
|
_search.value = val ?? '';
|
18123
18043
|
if (!props.multiple && !hasSelectionSlot.value) {
|
18124
18044
|
model.value = [transformItem$3(props, val)];
|
18125
|
-
vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
18126
18045
|
}
|
18127
18046
|
if (val && props.multiple && props.delimiters?.length) {
|
18128
18047
|
const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
|
@@ -18439,22 +18358,6 @@
|
|
18439
18358
|
active: highlightFirst.value && index === 0 ? true : undefined,
|
18440
18359
|
onClick: () => select(item, null)
|
18441
18360
|
});
|
18442
|
-
if (item.raw.type === 'divider') {
|
18443
|
-
return slots.divider?.({
|
18444
|
-
props: item.raw,
|
18445
|
-
index
|
18446
|
-
}) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
|
18447
|
-
"key": `divider-${index}`
|
18448
|
-
}), null);
|
18449
|
-
}
|
18450
|
-
if (item.raw.type === 'subheader') {
|
18451
|
-
return slots.subheader?.({
|
18452
|
-
props: item.raw,
|
18453
|
-
index
|
18454
|
-
}) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
|
18455
|
-
"key": `subheader-${index}`
|
18456
|
-
}), null);
|
18457
|
-
}
|
18458
18361
|
return slots.item?.({
|
18459
18362
|
item,
|
18460
18363
|
index,
|
@@ -22098,8 +22001,7 @@
|
|
22098
22001
|
firstDayOfWeek: {
|
22099
22002
|
type: [Number, String],
|
22100
22003
|
default: undefined
|
22101
|
-
}
|
22102
|
-
weekdayFormat: String
|
22004
|
+
}
|
22103
22005
|
}, 'calendar');
|
22104
22006
|
function useCalendar(props) {
|
22105
22007
|
const adapter = useDate();
|
@@ -22347,7 +22249,7 @@
|
|
22347
22249
|
"ref": daysRef,
|
22348
22250
|
"key": daysInMonth.value[0].date?.toString(),
|
22349
22251
|
"class": "v-date-picker-month__days"
|
22350
|
-
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek
|
22252
|
+
}, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => vue.createVNode("div", {
|
22351
22253
|
"class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
|
22352
22254
|
}, [weekDay])), daysInMonth.value.map((item, i) => {
|
22353
22255
|
const slotProps = {
|
@@ -24465,7 +24367,7 @@
|
|
24465
24367
|
function getProgress(pos) {
|
24466
24368
|
let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
24467
24369
|
const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
|
24468
|
-
return limit ?
|
24370
|
+
return limit ? clamp(progress) : progress;
|
24469
24371
|
}
|
24470
24372
|
function onTouchstart(e) {
|
24471
24373
|
if (touchless.value) return;
|
@@ -24878,10 +24780,6 @@
|
|
24878
24780
|
type: Number,
|
24879
24781
|
default: 0
|
24880
24782
|
},
|
24881
|
-
minFractionDigits: {
|
24882
|
-
type: Number,
|
24883
|
-
default: null
|
24884
|
-
},
|
24885
24783
|
...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
|
24886
24784
|
}, 'VNumberInput');
|
24887
24785
|
const VNumberInput = genericComponent()({
|
@@ -24912,19 +24810,9 @@
|
|
24912
24810
|
} = useFocus(props);
|
24913
24811
|
function correctPrecision(val) {
|
24914
24812
|
let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
|
24915
|
-
|
24916
|
-
|
24917
|
-
|
24918
|
-
let fixed = val.toFixed(precision);
|
24919
|
-
if (isFocused.value) {
|
24920
|
-
return Number(fixed).toString(); // trim zeros
|
24921
|
-
}
|
24922
|
-
if ((props.minFractionDigits ?? precision) < precision) {
|
24923
|
-
const trimLimit = precision - props.minFractionDigits;
|
24924
|
-
const [baseDigits, fractionDigits] = fixed.split('.');
|
24925
|
-
fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
|
24926
|
-
}
|
24927
|
-
return fixed;
|
24813
|
+
const fixed = precision == null ? String(val) : val.toFixed(precision);
|
24814
|
+
return isFocused.value ? Number(fixed).toString() // trim zeros
|
24815
|
+
: fixed;
|
24928
24816
|
}
|
24929
24817
|
const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
|
24930
24818
|
const _inputText = vue.shallowRef(null);
|
@@ -24964,6 +24852,9 @@
|
|
24964
24852
|
const controlNodeDefaultHeight = vue.toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
|
24965
24853
|
const incrementSlotProps = {
|
24966
24854
|
props: {
|
24855
|
+
style: {
|
24856
|
+
touchAction: 'none'
|
24857
|
+
},
|
24967
24858
|
onClick: onControlClick,
|
24968
24859
|
onPointerup: onControlMouseup,
|
24969
24860
|
onPointerdown: onUpControlMousedown
|
@@ -24971,13 +24862,15 @@
|
|
24971
24862
|
};
|
24972
24863
|
const decrementSlotProps = {
|
24973
24864
|
props: {
|
24865
|
+
style: {
|
24866
|
+
touchAction: 'none'
|
24867
|
+
},
|
24974
24868
|
onClick: onControlClick,
|
24975
24869
|
onPointerup: onControlMouseup,
|
24976
24870
|
onPointerdown: onDownControlMousedown
|
24977
24871
|
}
|
24978
24872
|
};
|
24979
24873
|
vue.watch(() => props.precision, () => formatInputValue());
|
24980
|
-
vue.watch(() => props.minFractionDigits, () => formatInputValue());
|
24981
24874
|
vue.onMounted(() => {
|
24982
24875
|
clampModel();
|
24983
24876
|
});
|
@@ -25079,7 +24972,7 @@
|
|
25079
24972
|
inputText.value = null;
|
25080
24973
|
return;
|
25081
24974
|
}
|
25082
|
-
inputText.value =
|
24975
|
+
inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
|
25083
24976
|
}
|
25084
24977
|
function trimDecimalZeros() {
|
25085
24978
|
if (controlsDisabled.value) return;
|
@@ -25104,17 +24997,18 @@
|
|
25104
24997
|
} = VTextField.filterProps(props);
|
25105
24998
|
function incrementControlNode() {
|
25106
24999
|
return !slots.increment ? vue.createVNode(VBtn, {
|
25000
|
+
"aria-hidden": "true",
|
25001
|
+
"data-testid": "increment",
|
25107
25002
|
"disabled": !canIncrease.value,
|
25108
25003
|
"flat": true,
|
25109
|
-
"key": "increment-btn",
|
25110
25004
|
"height": controlNodeDefaultHeight.value,
|
25111
|
-
"data-testid": "increment",
|
25112
|
-
"aria-hidden": "true",
|
25113
25005
|
"icon": incrementIcon.value,
|
25006
|
+
"key": "increment-btn",
|
25114
25007
|
"onClick": onControlClick,
|
25115
|
-
"onPointerup": onControlMouseup,
|
25116
25008
|
"onPointerdown": onUpControlMousedown,
|
25009
|
+
"onPointerup": onControlMouseup,
|
25117
25010
|
"size": controlNodeSize.value,
|
25011
|
+
"style": "touch-action: none",
|
25118
25012
|
"tabindex": "-1"
|
25119
25013
|
}, null) : vue.createVNode(VDefaultsProvider, {
|
25120
25014
|
"key": "increment-defaults",
|
@@ -25133,18 +25027,19 @@
|
|
25133
25027
|
}
|
25134
25028
|
function decrementControlNode() {
|
25135
25029
|
return !slots.decrement ? vue.createVNode(VBtn, {
|
25030
|
+
"aria-hidden": "true",
|
25031
|
+
"data-testid": "decrement",
|
25136
25032
|
"disabled": !canDecrease.value,
|
25137
25033
|
"flat": true,
|
25138
|
-
"key": "decrement-btn",
|
25139
25034
|
"height": controlNodeDefaultHeight.value,
|
25140
|
-
"data-testid": "decrement",
|
25141
|
-
"aria-hidden": "true",
|
25142
25035
|
"icon": decrementIcon.value,
|
25143
|
-
"
|
25144
|
-
"tabindex": "-1",
|
25036
|
+
"key": "decrement-btn",
|
25145
25037
|
"onClick": onControlClick,
|
25038
|
+
"onPointerdown": onDownControlMousedown,
|
25146
25039
|
"onPointerup": onControlMouseup,
|
25147
|
-
"
|
25040
|
+
"size": controlNodeSize.value,
|
25041
|
+
"style": "touch-action: none",
|
25042
|
+
"tabindex": "-1"
|
25148
25043
|
}, null) : vue.createVNode(VDefaultsProvider, {
|
25149
25044
|
"key": "decrement-defaults",
|
25150
25045
|
"defaults": {
|
@@ -30046,6 +29941,11 @@
|
|
30046
29941
|
hideOverlay: Boolean,
|
30047
29942
|
icon: [String, Function, Object],
|
30048
29943
|
iconColor: String,
|
29944
|
+
iconSize: [Number, String],
|
29945
|
+
iconSizes: {
|
29946
|
+
type: Array,
|
29947
|
+
default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
|
29948
|
+
},
|
30049
29949
|
loading: Boolean,
|
30050
29950
|
opacity: [Number, String],
|
30051
29951
|
readonly: Boolean,
|
@@ -30065,7 +29965,6 @@
|
|
30065
29965
|
...makeBorderProps(),
|
30066
29966
|
...makeComponentProps(),
|
30067
29967
|
...makeElevationProps(),
|
30068
|
-
...makeIconSizeProps(),
|
30069
29968
|
...makeRoundedProps(),
|
30070
29969
|
...makeTagProps({
|
30071
29970
|
tag: 'button'
|
@@ -30120,6 +30019,7 @@
|
|
30120
30019
|
})()
|
30121
30020
|
}));
|
30122
30021
|
const btnSizeMap = new Map(props.sizes);
|
30022
|
+
const iconSizeMap = new Map(props.iconSizes);
|
30123
30023
|
function onClick() {
|
30124
30024
|
if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
|
30125
30025
|
isActive.value = !isActive.value;
|
@@ -30131,12 +30031,12 @@
|
|
30131
30031
|
const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
|
30132
30032
|
const btnHeight = props.height ?? btnSize;
|
30133
30033
|
const btnWidth = props.width ?? btnSize;
|
30134
|
-
const
|
30135
|
-
|
30136
|
-
|
30034
|
+
const _iconSize = props.iconSize;
|
30035
|
+
const hasNamedIconSize = iconSizeMap.has(_iconSize);
|
30036
|
+
const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
|
30137
30037
|
const iconProps = {
|
30138
30038
|
icon,
|
30139
|
-
size: iconSize
|
30039
|
+
size: iconSize,
|
30140
30040
|
iconColor: props.iconColor,
|
30141
30041
|
opacity: props.opacity
|
30142
30042
|
};
|
@@ -30179,7 +30079,7 @@
|
|
30179
30079
|
"color": typeof props.loading === 'boolean' ? undefined : props.loading,
|
30180
30080
|
"indeterminate": "disable-shrink",
|
30181
30081
|
"width": "2",
|
30182
|
-
"size": iconSize
|
30082
|
+
"size": iconSize
|
30183
30083
|
}, null)])]
|
30184
30084
|
});
|
30185
30085
|
});
|
@@ -32089,7 +31989,7 @@
|
|
32089
31989
|
};
|
32090
31990
|
});
|
32091
31991
|
}
|
32092
|
-
const version$1 = "3.8.6-
|
31992
|
+
const version$1 = "3.8.6-master.2025-05-22";
|
32093
31993
|
createVuetify$1.version = version$1;
|
32094
31994
|
|
32095
31995
|
// Vue's inject() can only be used in setup
|
@@ -32387,7 +32287,7 @@
|
|
32387
32287
|
|
32388
32288
|
/* eslint-disable local-rules/sort-imports */
|
32389
32289
|
|
32390
|
-
const version = "3.8.6-
|
32290
|
+
const version = "3.8.6-master.2025-05-22";
|
32391
32291
|
|
32392
32292
|
/* eslint-disable local-rules/sort-imports */
|
32393
32293
|
|