@vuetify/nightly 3.9.2-master.2025-07-28 → 3.9.3-dev.2025-07-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 +8 -53
- package/dist/json/attributes.json +3804 -3784
- package/dist/json/importMap-labs.json +28 -28
- package/dist/json/importMap.json +192 -192
- package/dist/json/tags.json +5 -0
- package/dist/json/web-types.json +6986 -6916
- package/dist/vuetify-labs.cjs +272 -44
- package/dist/vuetify-labs.css +5500 -5503
- package/dist/vuetify-labs.d.ts +132 -69
- package/dist/vuetify-labs.esm.js +272 -44
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +272 -44
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +234 -35
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +4797 -4800
- package/dist/vuetify.d.ts +122 -69
- package/dist/vuetify.esm.js +234 -35
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +234 -35
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +792 -768
- package/dist/vuetify.min.js.map +1 -1
- package/lib/components/VAutocomplete/VAutocomplete.js +1 -0
- package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
- package/lib/components/VCombobox/VCombobox.js +11 -6
- package/lib/components/VCombobox/VCombobox.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerControls.js +8 -1
- package/lib/components/VDatePicker/VDatePickerControls.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonth.js +11 -0
- package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
- package/lib/components/VDatePicker/VDatePickerMonths.js +3 -0
- package/lib/components/VDatePicker/VDatePickerMonths.js.map +1 -1
- package/lib/components/VFileInput/VFileInput.d.ts +15 -0
- package/lib/components/VFileInput/VFileInput.js +38 -9
- package/lib/components/VFileInput/VFileInput.js.map +1 -1
- package/lib/components/VList/VList.js +2 -1
- package/lib/components/VList/VList.js.map +1 -1
- package/lib/components/VList/VListChildren.js +3 -4
- package/lib/components/VList/VListChildren.js.map +1 -1
- package/lib/components/VList/VListItem.js +7 -1
- package/lib/components/VList/VListItem.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.d.ts +75 -0
- package/lib/components/VProgressLinear/VProgressLinear.js +32 -6
- package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
- package/lib/components/VProgressLinear/VProgressLinear.sass +1 -1
- package/lib/components/VProgressLinear/chunks.d.ts +55 -0
- package/lib/components/VProgressLinear/chunks.js +62 -0
- package/lib/components/VProgressLinear/chunks.js.map +1 -0
- package/lib/components/VSelect/VSelect.js +1 -0
- package/lib/components/VSelect/VSelect.js.map +1 -1
- package/lib/components/VSlider/VSliderThumb.css +9 -14
- package/lib/components/VSlider/VSliderThumb.js +13 -7
- package/lib/components/VSlider/VSliderThumb.js.map +1 -1
- package/lib/components/VSlider/VSliderThumb.sass +9 -14
- package/lib/components/VSlider/slider.d.ts +1 -0
- package/lib/components/VSlider/slider.js +2 -0
- package/lib/components/VSlider/slider.js.map +1 -1
- package/lib/composables/fileFilter.d.ts +18 -0
- package/lib/composables/fileFilter.js +38 -0
- package/lib/composables/fileFilter.js.map +1 -0
- package/lib/composables/theme.d.ts +1 -0
- package/lib/composables/theme.js +3 -1
- package/lib/composables/theme.js.map +1 -1
- package/lib/directives/ripple/index.js +2 -2
- package/lib/directives/ripple/index.js.map +1 -1
- package/lib/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +70 -69
- package/lib/framework.js +1 -1
- package/lib/framework.js.map +1 -1
- package/lib/labs/VFileUpload/VFileUpload.d.ts +15 -0
- package/lib/labs/VFileUpload/VFileUpload.js +39 -9
- package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
- package/lib/locale/af.d.ts +7 -0
- package/lib/locale/af.js +7 -0
- package/lib/locale/af.js.map +1 -1
- package/lib/locale/ar.d.ts +7 -0
- package/lib/locale/ar.js +13 -6
- package/lib/locale/ar.js.map +1 -1
- package/lib/locale/az.d.ts +7 -0
- package/lib/locale/az.js +7 -0
- package/lib/locale/az.js.map +1 -1
- package/lib/locale/bg.d.ts +7 -0
- package/lib/locale/bg.js +7 -0
- package/lib/locale/bg.js.map +1 -1
- package/lib/locale/ca.d.ts +7 -0
- package/lib/locale/ca.js +7 -0
- package/lib/locale/ca.js.map +1 -1
- package/lib/locale/ckb.d.ts +7 -0
- package/lib/locale/ckb.js +7 -0
- package/lib/locale/ckb.js.map +1 -1
- package/lib/locale/cs.d.ts +7 -0
- package/lib/locale/cs.js +7 -0
- package/lib/locale/cs.js.map +1 -1
- package/lib/locale/da.d.ts +7 -0
- package/lib/locale/da.js +7 -0
- package/lib/locale/da.js.map +1 -1
- package/lib/locale/de.d.ts +7 -0
- package/lib/locale/de.js +7 -0
- package/lib/locale/de.js.map +1 -1
- package/lib/locale/el.d.ts +7 -0
- package/lib/locale/el.js +7 -0
- package/lib/locale/el.js.map +1 -1
- package/lib/locale/en.d.ts +7 -0
- package/lib/locale/en.js +8 -0
- package/lib/locale/en.js.map +1 -1
- package/lib/locale/es.d.ts +7 -0
- package/lib/locale/es.js +7 -0
- package/lib/locale/es.js.map +1 -1
- package/lib/locale/et.d.ts +7 -0
- package/lib/locale/et.js +7 -0
- package/lib/locale/et.js.map +1 -1
- package/lib/locale/fa.d.ts +7 -0
- package/lib/locale/fa.js +7 -0
- package/lib/locale/fa.js.map +1 -1
- package/lib/locale/fi.d.ts +7 -0
- package/lib/locale/fi.js +7 -0
- package/lib/locale/fi.js.map +1 -1
- package/lib/locale/fr.d.ts +7 -0
- package/lib/locale/fr.js +7 -0
- package/lib/locale/fr.js.map +1 -1
- package/lib/locale/he.d.ts +7 -0
- package/lib/locale/he.js +7 -0
- package/lib/locale/he.js.map +1 -1
- package/lib/locale/hr.d.ts +7 -0
- package/lib/locale/hr.js +7 -0
- package/lib/locale/hr.js.map +1 -1
- package/lib/locale/hu.d.ts +7 -0
- package/lib/locale/hu.js +7 -0
- package/lib/locale/hu.js.map +1 -1
- package/lib/locale/id.d.ts +7 -0
- package/lib/locale/id.js +7 -0
- package/lib/locale/id.js.map +1 -1
- package/lib/locale/it.d.ts +7 -0
- package/lib/locale/it.js +7 -0
- package/lib/locale/it.js.map +1 -1
- package/lib/locale/ja.d.ts +7 -0
- package/lib/locale/ja.js +7 -0
- package/lib/locale/ja.js.map +1 -1
- package/lib/locale/km.d.ts +7 -0
- package/lib/locale/km.js +7 -0
- package/lib/locale/km.js.map +1 -1
- package/lib/locale/ko.d.ts +7 -0
- package/lib/locale/ko.js +7 -0
- package/lib/locale/ko.js.map +1 -1
- package/lib/locale/lt.d.ts +7 -0
- package/lib/locale/lt.js +7 -0
- package/lib/locale/lt.js.map +1 -1
- package/lib/locale/lv.d.ts +7 -0
- package/lib/locale/lv.js +7 -0
- package/lib/locale/lv.js.map +1 -1
- package/lib/locale/nl.d.ts +7 -0
- package/lib/locale/nl.js +7 -0
- package/lib/locale/nl.js.map +1 -1
- package/lib/locale/no.d.ts +7 -0
- package/lib/locale/no.js +7 -0
- package/lib/locale/no.js.map +1 -1
- package/lib/locale/pl.d.ts +7 -0
- package/lib/locale/pl.js +7 -0
- package/lib/locale/pl.js.map +1 -1
- package/lib/locale/pt.d.ts +7 -0
- package/lib/locale/pt.js +7 -0
- package/lib/locale/pt.js.map +1 -1
- package/lib/locale/ro.d.ts +7 -0
- package/lib/locale/ro.js +7 -0
- package/lib/locale/ro.js.map +1 -1
- package/lib/locale/ru.d.ts +7 -0
- package/lib/locale/ru.js +7 -0
- package/lib/locale/ru.js.map +1 -1
- package/lib/locale/sk.d.ts +7 -0
- package/lib/locale/sk.js +7 -0
- package/lib/locale/sk.js.map +1 -1
- package/lib/locale/sl.d.ts +7 -0
- package/lib/locale/sl.js +7 -0
- package/lib/locale/sl.js.map +1 -1
- package/lib/locale/sr-Cyrl.d.ts +7 -0
- package/lib/locale/sr-Cyrl.js +7 -0
- package/lib/locale/sr-Cyrl.js.map +1 -1
- package/lib/locale/sr-Latn.d.ts +7 -0
- package/lib/locale/sr-Latn.js +7 -0
- package/lib/locale/sr-Latn.js.map +1 -1
- package/lib/locale/sv.d.ts +7 -0
- package/lib/locale/sv.js +7 -0
- package/lib/locale/sv.js.map +1 -1
- package/lib/locale/th.d.ts +7 -0
- package/lib/locale/th.js +7 -0
- package/lib/locale/th.js.map +1 -1
- package/lib/locale/tr.d.ts +7 -0
- package/lib/locale/tr.js +7 -0
- package/lib/locale/tr.js.map +1 -1
- package/lib/locale/uk.d.ts +7 -0
- package/lib/locale/uk.js +7 -0
- package/lib/locale/uk.js.map +1 -1
- package/lib/locale/vi.d.ts +7 -0
- package/lib/locale/vi.js +7 -0
- package/lib/locale/vi.js.map +1 -1
- package/lib/locale/zh-Hans.d.ts +7 -0
- package/lib/locale/zh-Hans.js +7 -0
- package/lib/locale/zh-Hans.js.map +1 -1
- package/lib/locale/zh-Hant.d.ts +7 -0
- package/lib/locale/zh-Hant.js +7 -0
- package/lib/locale/zh-Hant.js.map +1 -1
- package/package.json +1 -1
package/dist/vuetify.esm.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* Vuetify v3.9.
|
2
|
+
* Vuetify v3.9.3-dev.2025-07-30
|
3
3
|
* Forged by John Leider
|
4
4
|
* Released under the MIT License.
|
5
5
|
*/
|
@@ -2613,6 +2613,14 @@ var en = {
|
|
2613
2613
|
header: 'Enter date',
|
2614
2614
|
input: {
|
2615
2615
|
placeholder: 'Enter date'
|
2616
|
+
},
|
2617
|
+
ariaLabel: {
|
2618
|
+
previousMonth: 'Previous month',
|
2619
|
+
nextMonth: 'Next month',
|
2620
|
+
selectYear: 'Select year',
|
2621
|
+
selectDate: '{0}',
|
2622
|
+
// Full date format
|
2623
|
+
currentDate: 'Today, {0}'
|
2616
2624
|
}
|
2617
2625
|
},
|
2618
2626
|
noDataText: 'No data available',
|
@@ -3151,6 +3159,7 @@ function createTheme(options) {
|
|
3151
3159
|
return acc;
|
3152
3160
|
});
|
3153
3161
|
const current = toRef(() => computedThemes.value[name.value]);
|
3162
|
+
const isSystem = toRef(() => _name.value === 'system');
|
3154
3163
|
const styles = computed(() => {
|
3155
3164
|
const lines = [];
|
3156
3165
|
const important = parsedOptions.unimportant ? '' : ' !important';
|
@@ -3238,7 +3247,7 @@ function createTheme(options) {
|
|
3238
3247
|
}
|
3239
3248
|
}
|
3240
3249
|
function change(themeName) {
|
3241
|
-
if (!themeNames.value.includes(themeName)) {
|
3250
|
+
if (themeName !== 'system' && !themeNames.value.includes(themeName)) {
|
3242
3251
|
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3243
3252
|
return;
|
3244
3253
|
}
|
@@ -3271,6 +3280,7 @@ function createTheme(options) {
|
|
3271
3280
|
cycle,
|
3272
3281
|
toggle,
|
3273
3282
|
isDisabled: parsedOptions.isDisabled,
|
3283
|
+
isSystem,
|
3274
3284
|
name,
|
3275
3285
|
themes,
|
3276
3286
|
current,
|
@@ -5482,6 +5492,69 @@ function useLocation(props) {
|
|
5482
5492
|
};
|
5483
5493
|
}
|
5484
5494
|
|
5495
|
+
// Utilities
|
5496
|
+
|
5497
|
+
// Types
|
5498
|
+
|
5499
|
+
// Composables
|
5500
|
+
const makeChunksProps = propsFactory({
|
5501
|
+
chunkCount: {
|
5502
|
+
type: [Number, String],
|
5503
|
+
default: null
|
5504
|
+
},
|
5505
|
+
chunkWidth: {
|
5506
|
+
type: [Number, String],
|
5507
|
+
default: null
|
5508
|
+
},
|
5509
|
+
chunkGap: {
|
5510
|
+
type: [Number, String],
|
5511
|
+
default: 4
|
5512
|
+
}
|
5513
|
+
}, 'chunks');
|
5514
|
+
function useChunks(props, containerWidth) {
|
5515
|
+
const hasChunks = toRef(() => !!props.chunkCount || !!props.chunkWidth);
|
5516
|
+
const chunkWidth = computed(() => {
|
5517
|
+
const containerSize = toValue(containerWidth);
|
5518
|
+
if (!containerSize) {
|
5519
|
+
return 0;
|
5520
|
+
}
|
5521
|
+
if (!props.chunkCount) {
|
5522
|
+
return Number(props.chunkWidth);
|
5523
|
+
}
|
5524
|
+
const count = Number(props.chunkCount);
|
5525
|
+
const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
|
5526
|
+
return availableWidth / count;
|
5527
|
+
});
|
5528
|
+
const chunkGap = toRef(() => Number(props.chunkGap));
|
5529
|
+
const chunksMaskStyles = computed(() => {
|
5530
|
+
if (!hasChunks.value) {
|
5531
|
+
return {};
|
5532
|
+
}
|
5533
|
+
const chunkGapPx = convertToUnit(chunkGap.value);
|
5534
|
+
const chunkWidthPx = convertToUnit(chunkWidth.value);
|
5535
|
+
return {
|
5536
|
+
maskRepeat: 'repeat-x',
|
5537
|
+
maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
|
5538
|
+
maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
|
5539
|
+
};
|
5540
|
+
});
|
5541
|
+
function snapValueToChunk(val) {
|
5542
|
+
const containerSize = toValue(containerWidth);
|
5543
|
+
if (!containerSize) {
|
5544
|
+
return val;
|
5545
|
+
}
|
5546
|
+
const gapRelativeSize = 100 * chunkGap.value / containerSize;
|
5547
|
+
const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
|
5548
|
+
const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
|
5549
|
+
return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
|
5550
|
+
}
|
5551
|
+
return {
|
5552
|
+
hasChunks,
|
5553
|
+
chunksMaskStyles,
|
5554
|
+
snapValueToChunk
|
5555
|
+
};
|
5556
|
+
}
|
5557
|
+
|
5485
5558
|
const makeVProgressLinearProps = propsFactory({
|
5486
5559
|
absolute: Boolean,
|
5487
5560
|
active: {
|
@@ -5516,6 +5589,7 @@ const makeVProgressLinearProps = propsFactory({
|
|
5516
5589
|
stream: Boolean,
|
5517
5590
|
striped: Boolean,
|
5518
5591
|
roundedBar: Boolean,
|
5592
|
+
...makeChunksProps(),
|
5519
5593
|
...makeComponentProps(),
|
5520
5594
|
...makeLocationProps({
|
5521
5595
|
location: 'top'
|
@@ -5534,6 +5608,7 @@ const VProgressLinear = genericComponent()({
|
|
5534
5608
|
let {
|
5535
5609
|
slots
|
5536
5610
|
} = _ref;
|
5611
|
+
const root = ref();
|
5537
5612
|
const progress = useProxiedModel(props, 'modelValue');
|
5538
5613
|
const {
|
5539
5614
|
isRtl,
|
@@ -5575,6 +5650,24 @@ const VProgressLinear = genericComponent()({
|
|
5575
5650
|
const isReversed = computed(() => isRtl.value !== props.reverse);
|
5576
5651
|
const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
|
5577
5652
|
const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
|
5653
|
+
const containerWidth = shallowRef(0);
|
5654
|
+
const {
|
5655
|
+
hasChunks,
|
5656
|
+
chunksMaskStyles,
|
5657
|
+
snapValueToChunk
|
5658
|
+
} = useChunks(props, containerWidth);
|
5659
|
+
useToggleScope(hasChunks, () => {
|
5660
|
+
const {
|
5661
|
+
resizeRef
|
5662
|
+
} = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
|
5663
|
+
watchEffect(() => resizeRef.value = root.value);
|
5664
|
+
});
|
5665
|
+
const bufferWidth = computed(() => {
|
5666
|
+
return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
|
5667
|
+
});
|
5668
|
+
const barWidth = computed(() => {
|
5669
|
+
return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
|
5670
|
+
});
|
5578
5671
|
function handleClick(e) {
|
5579
5672
|
if (!intersectionRef.value) return;
|
5580
5673
|
const {
|
@@ -5585,8 +5678,11 @@ const VProgressLinear = genericComponent()({
|
|
5585
5678
|
const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
|
5586
5679
|
progress.value = Math.round(value / width * max.value);
|
5587
5680
|
}
|
5681
|
+
watchEffect(() => {
|
5682
|
+
intersectionRef.value = root.value;
|
5683
|
+
});
|
5588
5684
|
useRender(() => createVNode(props.tag, {
|
5589
|
-
"ref":
|
5685
|
+
"ref": root,
|
5590
5686
|
"class": normalizeClass(['v-progress-linear', {
|
5591
5687
|
'v-progress-linear--absolute': props.absolute,
|
5592
5688
|
'v-progress-linear--active': props.active && isIntersecting.value,
|
@@ -5602,7 +5698,7 @@ const VProgressLinear = genericComponent()({
|
|
5602
5698
|
height: props.active ? convertToUnit(height.value) : 0,
|
5603
5699
|
'--v-progress-linear-height': convertToUnit(height.value),
|
5604
5700
|
...(props.absolute ? locationStyles.value : {})
|
5605
|
-
}, props.style]),
|
5701
|
+
}, chunksMaskStyles.value, props.style]),
|
5606
5702
|
"role": "progressbar",
|
5607
5703
|
"aria-hidden": props.active ? 'false' : 'true',
|
5608
5704
|
"aria-valuemin": "0",
|
@@ -5632,7 +5728,7 @@ const VProgressLinear = genericComponent()({
|
|
5632
5728
|
"class": normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
|
5633
5729
|
"style": normalizeStyle([bufferColorStyles.value, {
|
5634
5730
|
opacity: parseFloat(props.bufferOpacity),
|
5635
|
-
width: convertToUnit(
|
5731
|
+
width: convertToUnit(bufferWidth.value, '%')
|
5636
5732
|
}])
|
5637
5733
|
}, null), createVNode(Transition, {
|
5638
5734
|
"name": transition.value
|
@@ -5640,7 +5736,7 @@ const VProgressLinear = genericComponent()({
|
|
5640
5736
|
default: () => [!props.indeterminate ? createElementVNode("div", {
|
5641
5737
|
"class": normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
|
5642
5738
|
"style": normalizeStyle([barColorStyles.value, {
|
5643
|
-
width: convertToUnit(
|
5739
|
+
width: convertToUnit(barWidth.value, '%')
|
5644
5740
|
}])
|
5645
5741
|
}, null) : createElementVNode("div", {
|
5646
5742
|
"class": "v-progress-linear__indeterminate"
|
@@ -5923,8 +6019,8 @@ const ripples = {
|
|
5923
6019
|
if (!el?._ripple?.enabled) return;
|
5924
6020
|
const ripples = el.getElementsByClassName('v-ripple__animation');
|
5925
6021
|
if (ripples.length === 0) return;
|
5926
|
-
const animation = ripples
|
5927
|
-
if (animation
|
6022
|
+
const animation = Array.from(ripples).findLast(ripple => !ripple.dataset.isHiding);
|
6023
|
+
if (!animation) return;else animation.dataset.isHiding = 'true';
|
5928
6024
|
const diff = performance.now() - Number(animation.dataset.activated);
|
5929
6025
|
const delay = Math.max(250 - diff, 0);
|
5930
6026
|
setTimeout(() => {
|
@@ -9844,6 +9940,11 @@ const VListItem = genericComponent()({
|
|
9844
9940
|
const isLink = toRef(() => props.link !== false && link.isLink.value);
|
9845
9941
|
const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
|
9846
9942
|
const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
|
9943
|
+
const role = computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
|
9944
|
+
const ariaSelected = computed(() => {
|
9945
|
+
if (!isSelectable.value) return undefined;
|
9946
|
+
return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
|
9947
|
+
});
|
9847
9948
|
const roundedProps = toRef(() => props.rounded || props.nav);
|
9848
9949
|
const color = toRef(() => props.color ?? props.activeColor);
|
9849
9950
|
const variantProps = toRef(() => ({
|
@@ -9947,7 +10048,8 @@ const VListItem = genericComponent()({
|
|
9947
10048
|
}, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
|
9948
10049
|
"style": [colorStyles.value, dimensionStyles.value, props.style],
|
9949
10050
|
"tabindex": isClickable.value ? list ? -2 : 0 : undefined,
|
9950
|
-
"aria-selected":
|
10051
|
+
"aria-selected": ariaSelected.value,
|
10052
|
+
"role": role.value,
|
9951
10053
|
"onClick": onClick,
|
9952
10054
|
"onKeydown": isClickable.value && !isLink.value && onKeyDown
|
9953
10055
|
}, link.linkProps), {
|
@@ -10142,11 +10244,9 @@ const VListChildren = genericComponent()({
|
|
10142
10244
|
let {
|
10143
10245
|
props: activatorProps
|
10144
10246
|
} = _ref3;
|
10145
|
-
const listItemProps = {
|
10146
|
-
...itemProps,
|
10147
|
-
...activatorProps,
|
10247
|
+
const listItemProps = mergeProps(itemProps, activatorProps, {
|
10148
10248
|
value: props.returnObject ? item : itemProps.value
|
10149
|
-
};
|
10249
|
+
});
|
10150
10250
|
return slots.header ? slots.header({
|
10151
10251
|
props: listItemProps
|
10152
10252
|
}) : createVNode(VListItem, listItemProps, slotsWithItem);
|
@@ -10449,6 +10549,7 @@ const VList = genericComponent()({
|
|
10449
10549
|
const activeColor = toRef(() => props.activeColor);
|
10450
10550
|
const baseColor = toRef(() => props.baseColor);
|
10451
10551
|
const color = toRef(() => props.color);
|
10552
|
+
const isSelectable = toRef(() => props.selectable || props.activatable);
|
10452
10553
|
createList({
|
10453
10554
|
filterable: props.filterable
|
10454
10555
|
});
|
@@ -10520,7 +10621,7 @@ const VList = genericComponent()({
|
|
10520
10621
|
}, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
|
10521
10622
|
"style": normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
|
10522
10623
|
"tabindex": props.disabled ? -1 : 0,
|
10523
|
-
"role":
|
10624
|
+
"role": isSelectable.value ? 'listbox' : 'list',
|
10524
10625
|
"aria-activedescendant": undefined,
|
10525
10626
|
"onFocusin": onFocusin,
|
10526
10627
|
"onFocusout": onFocusout,
|
@@ -13599,6 +13700,7 @@ const VSelect = genericComponent()({
|
|
13599
13700
|
"onKeydown": onListKeydown,
|
13600
13701
|
"onFocusin": onFocusin,
|
13601
13702
|
"tabindex": "-1",
|
13703
|
+
"selectable": true,
|
13602
13704
|
"aria-live": "polite",
|
13603
13705
|
"aria-label": `${props.label}-list`,
|
13604
13706
|
"color": props.itemColor ?? props.color
|
@@ -14218,6 +14320,7 @@ const VAutocomplete = genericComponent()({
|
|
14218
14320
|
"onFocusin": onFocusin,
|
14219
14321
|
"onFocusout": onFocusout,
|
14220
14322
|
"tabindex": "-1",
|
14323
|
+
"selectable": true,
|
14221
14324
|
"aria-live": "polite",
|
14222
14325
|
"color": props.itemColor ?? props.color
|
14223
14326
|
}, listEvents, props.listProps), {
|
@@ -16550,6 +16653,7 @@ const useSlider = _ref => {
|
|
16550
16653
|
const numTicks = computed(() => (max.value - min.value) / step.value);
|
16551
16654
|
const disabled = toRef(() => props.disabled);
|
16552
16655
|
const thumbColor = computed(() => props.error || props.disabled ? undefined : props.thumbColor ?? props.color);
|
16656
|
+
const thumbLabelColor = computed(() => props.error || props.disabled ? undefined : props.thumbColor);
|
16553
16657
|
const trackColor = computed(() => props.error || props.disabled ? undefined : props.trackColor ?? props.color);
|
16554
16658
|
const trackFillColor = computed(() => props.error || props.disabled ? undefined : props.trackFillColor ?? props.color);
|
16555
16659
|
const mousePressed = shallowRef(false);
|
@@ -16707,6 +16811,7 @@ const useSlider = _ref => {
|
|
16707
16811
|
step,
|
16708
16812
|
thumbSize,
|
16709
16813
|
thumbColor,
|
16814
|
+
thumbLabelColor,
|
16710
16815
|
thumbLabel: toRef(() => props.thumbLabel),
|
16711
16816
|
ticks: toRef(() => props.ticks),
|
16712
16817
|
tickSize,
|
@@ -16772,6 +16877,7 @@ const VSliderThumb = genericComponent()({
|
|
16772
16877
|
min,
|
16773
16878
|
max,
|
16774
16879
|
thumbColor,
|
16880
|
+
thumbLabelColor,
|
16775
16881
|
step,
|
16776
16882
|
disabled,
|
16777
16883
|
thumbSize,
|
@@ -16793,6 +16899,10 @@ const VSliderThumb = genericComponent()({
|
|
16793
16899
|
textColorClasses,
|
16794
16900
|
textColorStyles
|
16795
16901
|
} = useTextColor(thumbColor);
|
16902
|
+
const {
|
16903
|
+
backgroundColorClasses,
|
16904
|
+
backgroundColorStyles
|
16905
|
+
} = useBackgroundColor(thumbLabelColor);
|
16796
16906
|
const {
|
16797
16907
|
pageup,
|
16798
16908
|
pagedown,
|
@@ -16858,9 +16968,7 @@ const VSliderThumb = genericComponent()({
|
|
16858
16968
|
"onKeydown": !readonly.value ? onKeydown : undefined
|
16859
16969
|
}, [createElementVNode("div", {
|
16860
16970
|
"class": normalizeClass(['v-slider-thumb__surface', textColorClasses.value, elevationClasses.value]),
|
16861
|
-
"style":
|
16862
|
-
...textColorStyles.value
|
16863
|
-
}
|
16971
|
+
"style": normalizeStyle(textColorStyles.value)
|
16864
16972
|
}, null), withDirectives(createElementVNode("div", {
|
16865
16973
|
"class": normalizeClass(['v-slider-thumb__ripple', textColorClasses.value]),
|
16866
16974
|
"style": normalizeStyle(textColorStyles.value)
|
@@ -16873,10 +16981,13 @@ const VSliderThumb = genericComponent()({
|
|
16873
16981
|
default: () => [withDirectives(createElementVNode("div", {
|
16874
16982
|
"class": "v-slider-thumb__label-container"
|
16875
16983
|
}, [createElementVNode("div", {
|
16876
|
-
"class": normalizeClass(['v-slider-thumb__label',
|
16984
|
+
"class": normalizeClass(['v-slider-thumb__label', backgroundColorClasses.value]),
|
16985
|
+
"style": normalizeStyle(backgroundColorStyles.value)
|
16877
16986
|
}, [createElementVNode("div", null, [slots['thumb-label']?.({
|
16878
16987
|
modelValue: props.modelValue
|
16879
|
-
}) ?? props.modelValue.toFixed(step.value ? decimals.value : 1)])
|
16988
|
+
}) ?? props.modelValue.toFixed(step.value ? decimals.value : 1)]), createElementVNode("div", {
|
16989
|
+
"class": "v-slider-thumb__label-wedge"
|
16990
|
+
}, null)])]), [[vShow, thumbLabel.value && props.focused || thumbLabel.value === 'always']])]
|
16880
16991
|
})]);
|
16881
16992
|
});
|
16882
16993
|
return {};
|
@@ -19023,19 +19134,23 @@ const VCombobox = genericComponent()({
|
|
19023
19134
|
get: () => {
|
19024
19135
|
return _search.value;
|
19025
19136
|
},
|
19026
|
-
set: val => {
|
19137
|
+
set: async val => {
|
19027
19138
|
_search.value = val ?? '';
|
19028
19139
|
if (!props.multiple && !hasSelectionSlot.value) {
|
19029
19140
|
model.value = [transformItem$3(props, val)];
|
19030
19141
|
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
19031
19142
|
}
|
19032
19143
|
if (val && props.multiple && props.delimiters?.length) {
|
19033
|
-
const
|
19144
|
+
const signsToMatch = props.delimiters.map(escapeForRegex).join('|');
|
19145
|
+
const values = val.split(new RegExp(`(?:${signsToMatch})+`));
|
19034
19146
|
if (values.length > 1) {
|
19035
|
-
|
19147
|
+
for (let v of values) {
|
19036
19148
|
v = v.trim();
|
19037
|
-
if (v)
|
19038
|
-
|
19149
|
+
if (v) {
|
19150
|
+
select(transformItem$3(props, v));
|
19151
|
+
await nextTick();
|
19152
|
+
}
|
19153
|
+
}
|
19039
19154
|
_search.value = '';
|
19040
19155
|
}
|
19041
19156
|
}
|
@@ -19317,6 +19432,7 @@ const VCombobox = genericComponent()({
|
|
19317
19432
|
"selected": selectedValues.value,
|
19318
19433
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
19319
19434
|
"onMousedown": e => e.preventDefault(),
|
19435
|
+
"selectable": true,
|
19320
19436
|
"onKeydown": onListKeydown,
|
19321
19437
|
"onFocusin": onFocusin,
|
19322
19438
|
"onFocusout": onFocusout,
|
@@ -22890,6 +23006,9 @@ const VDatePickerControls = genericComponent()({
|
|
22890
23006
|
let {
|
22891
23007
|
emit
|
22892
23008
|
} = _ref;
|
23009
|
+
const {
|
23010
|
+
t
|
23011
|
+
} = useLocale();
|
22893
23012
|
const disableMonth = computed(() => {
|
22894
23013
|
return Array.isArray(props.disabled) ? props.disabled.includes('text') : !!props.disabled;
|
22895
23014
|
});
|
@@ -22936,6 +23055,7 @@ const VDatePickerControls = genericComponent()({
|
|
22936
23055
|
"density": "comfortable",
|
22937
23056
|
"icon": props.modeIcon,
|
22938
23057
|
"variant": "text",
|
23058
|
+
"aria-label": t('$vuetify.datePicker.ariaLabel.selectYear'),
|
22939
23059
|
"onClick": onClickYear
|
22940
23060
|
}, null), createVNode(VSpacer, null, null), createElementVNode("div", {
|
22941
23061
|
"class": "v-date-picker-controls__month"
|
@@ -22945,6 +23065,7 @@ const VDatePickerControls = genericComponent()({
|
|
22945
23065
|
"density": "comfortable",
|
22946
23066
|
"icon": props.prevIcon,
|
22947
23067
|
"variant": "text",
|
23068
|
+
"aria-label": t('$vuetify.datePicker.ariaLabel.previousMonth'),
|
22948
23069
|
"onClick": onClickPrev
|
22949
23070
|
}, null), createVNode(VBtn, {
|
22950
23071
|
"data-testid": "next-month",
|
@@ -22952,6 +23073,7 @@ const VDatePickerControls = genericComponent()({
|
|
22952
23073
|
"icon": props.nextIcon,
|
22953
23074
|
"density": "comfortable",
|
22954
23075
|
"variant": "text",
|
23076
|
+
"aria-label": t('$vuetify.datePicker.ariaLabel.nextMonth'),
|
22955
23077
|
"onClick": onClickNext
|
22956
23078
|
}, null)])]);
|
22957
23079
|
});
|
@@ -23216,6 +23338,9 @@ const VDatePickerMonth = genericComponent()({
|
|
23216
23338
|
slots
|
23217
23339
|
} = _ref;
|
23218
23340
|
const daysRef = ref();
|
23341
|
+
const {
|
23342
|
+
t
|
23343
|
+
} = useLocale();
|
23219
23344
|
const {
|
23220
23345
|
daysInMonth,
|
23221
23346
|
model,
|
@@ -23272,6 +23397,11 @@ const VDatePickerMonth = genericComponent()({
|
|
23272
23397
|
model.value = [rangeStart.value];
|
23273
23398
|
}
|
23274
23399
|
}
|
23400
|
+
function getDateAriaLabel(item) {
|
23401
|
+
const fullDate = adapter.format(item.date, 'fullDateWithWeekday');
|
23402
|
+
const localeKey = item.isToday ? 'currentDate' : 'selectDate';
|
23403
|
+
return t(`$vuetify.datePicker.ariaLabel.${localeKey}`, fullDate);
|
23404
|
+
}
|
23275
23405
|
function onMultipleClick(value) {
|
23276
23406
|
const index = model.value.findIndex(selection => adapter.isSameDay(selection, value));
|
23277
23407
|
if (index === -1) {
|
@@ -23323,6 +23453,8 @@ const VDatePickerMonth = genericComponent()({
|
|
23323
23453
|
ripple: false,
|
23324
23454
|
text: item.localized,
|
23325
23455
|
variant: item.isSelected ? 'flat' : item.isToday ? 'outlined' : 'text',
|
23456
|
+
'aria-label': getDateAriaLabel(item),
|
23457
|
+
'aria-current': item.isToday ? 'date' : undefined,
|
23326
23458
|
onClick: () => onClick(item.date)
|
23327
23459
|
},
|
23328
23460
|
item,
|
@@ -23377,11 +23509,13 @@ const VDatePickerMonths = genericComponent()({
|
|
23377
23509
|
}
|
23378
23510
|
return createRange(12).map(i => {
|
23379
23511
|
const text = adapter.format(date, 'monthShort');
|
23512
|
+
const label = adapter.format(date, 'month');
|
23380
23513
|
const isDisabled = !!(!isMonthAllowed(i) || props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max))));
|
23381
23514
|
date = adapter.getNextMonth(date);
|
23382
23515
|
return {
|
23383
23516
|
isDisabled,
|
23384
23517
|
text,
|
23518
|
+
label,
|
23385
23519
|
value: i
|
23386
23520
|
};
|
23387
23521
|
});
|
@@ -23408,6 +23542,7 @@ const VDatePickerMonths = genericComponent()({
|
|
23408
23542
|
}, [months.value.map((month, i) => {
|
23409
23543
|
const btnProps = {
|
23410
23544
|
active: model.value === i,
|
23545
|
+
ariaLabel: month.label,
|
23411
23546
|
color: model.value === i ? props.color : undefined,
|
23412
23547
|
disabled: month.isDisabled,
|
23413
23548
|
rounded: true,
|
@@ -24414,6 +24549,42 @@ function appendIfDirectory(path, item) {
|
|
24414
24549
|
return item.isDirectory ? `${path}/${item.name}` : path;
|
24415
24550
|
}
|
24416
24551
|
|
24552
|
+
// Utilities
|
24553
|
+
// Composables
|
24554
|
+
const makeFileFilterProps = propsFactory({
|
24555
|
+
filterByType: String
|
24556
|
+
}, 'file-accept');
|
24557
|
+
function useFileFilter(props) {
|
24558
|
+
const fileFilter = computed(() => props.filterByType ? createFilter(props.filterByType) : null);
|
24559
|
+
function filterAccepted(files) {
|
24560
|
+
if (fileFilter.value) {
|
24561
|
+
const accepted = files.filter(fileFilter.value);
|
24562
|
+
return {
|
24563
|
+
accepted,
|
24564
|
+
rejected: files.filter(f => !accepted.includes(f))
|
24565
|
+
};
|
24566
|
+
}
|
24567
|
+
return {
|
24568
|
+
accepted: files,
|
24569
|
+
rejected: []
|
24570
|
+
};
|
24571
|
+
}
|
24572
|
+
return {
|
24573
|
+
filterAccepted
|
24574
|
+
};
|
24575
|
+
}
|
24576
|
+
function createFilter(v) {
|
24577
|
+
const types = v.split(',').map(x => x.trim().toLowerCase());
|
24578
|
+
const extensionsToMatch = types.filter(x => x.startsWith('.'));
|
24579
|
+
const wildcards = types.filter(x => x.endsWith('/*'));
|
24580
|
+
const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
|
24581
|
+
return file => {
|
24582
|
+
const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
|
24583
|
+
const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
|
24584
|
+
return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
|
24585
|
+
};
|
24586
|
+
}
|
24587
|
+
|
24417
24588
|
// Types
|
24418
24589
|
|
24419
24590
|
const makeVFileInputProps = propsFactory({
|
@@ -24446,6 +24617,7 @@ const makeVFileInputProps = propsFactory({
|
|
24446
24617
|
return wrapInArray(val).every(v => v != null && typeof v === 'object');
|
24447
24618
|
}
|
24448
24619
|
},
|
24620
|
+
...makeFileFilterProps(),
|
24449
24621
|
...makeVFieldProps({
|
24450
24622
|
clearable: true
|
24451
24623
|
})
|
@@ -24458,7 +24630,8 @@ const VFileInput = genericComponent()({
|
|
24458
24630
|
'click:control': e => true,
|
24459
24631
|
'mousedown:control': e => true,
|
24460
24632
|
'update:focused': focused => true,
|
24461
|
-
'update:modelValue': files => true
|
24633
|
+
'update:modelValue': files => true,
|
24634
|
+
rejected: files => true
|
24462
24635
|
},
|
24463
24636
|
setup(props, _ref) {
|
24464
24637
|
let {
|
@@ -24469,6 +24642,9 @@ const VFileInput = genericComponent()({
|
|
24469
24642
|
const {
|
24470
24643
|
t
|
24471
24644
|
} = useLocale();
|
24645
|
+
const {
|
24646
|
+
filterAccepted
|
24647
|
+
} = useFileFilter(props);
|
24472
24648
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
|
24473
24649
|
const {
|
24474
24650
|
isFocused,
|
@@ -24542,14 +24718,38 @@ const VFileInput = genericComponent()({
|
|
24542
24718
|
e.stopImmediatePropagation();
|
24543
24719
|
isDragging.value = false;
|
24544
24720
|
if (!inputRef.value || !hasFilesOrFolders(e)) return;
|
24721
|
+
const allDroppedFiles = await handleDrop(e);
|
24722
|
+
selectAccepted(allDroppedFiles);
|
24723
|
+
}
|
24724
|
+
function onFileSelection(e) {
|
24725
|
+
if (!e.target || e.repack) return; // prevent loop
|
24726
|
+
|
24727
|
+
if (!props.filterByType) {
|
24728
|
+
const target = e.target;
|
24729
|
+
model.value = [...(target.files ?? [])];
|
24730
|
+
} else {
|
24731
|
+
selectAccepted([...e.target.files]);
|
24732
|
+
}
|
24733
|
+
}
|
24734
|
+
function selectAccepted(files) {
|
24545
24735
|
const dataTransfer = new DataTransfer();
|
24546
|
-
|
24736
|
+
const {
|
24737
|
+
accepted,
|
24738
|
+
rejected
|
24739
|
+
} = filterAccepted(files);
|
24740
|
+
if (rejected.length) {
|
24741
|
+
emit('rejected', rejected);
|
24742
|
+
}
|
24743
|
+
for (const file of accepted) {
|
24547
24744
|
dataTransfer.items.add(file);
|
24548
24745
|
}
|
24549
24746
|
inputRef.value.files = dataTransfer.files;
|
24550
|
-
|
24747
|
+
model.value = [...dataTransfer.files];
|
24748
|
+
const event = new Event('change', {
|
24551
24749
|
bubbles: true
|
24552
|
-
})
|
24750
|
+
});
|
24751
|
+
event.repack = true;
|
24752
|
+
inputRef.value.dispatchEvent(event);
|
24553
24753
|
}
|
24554
24754
|
watch(model, newValue => {
|
24555
24755
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
@@ -24566,6 +24766,8 @@ const VFileInput = genericComponent()({
|
|
24566
24766
|
...inputProps
|
24567
24767
|
} = VInput.filterProps(props);
|
24568
24768
|
const fieldProps = VField.filterProps(props);
|
24769
|
+
const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
|
24770
|
+
const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
|
24569
24771
|
return createVNode(VInput, mergeProps({
|
24570
24772
|
"ref": vInputRef,
|
24571
24773
|
"modelValue": props.multiple ? model.value : model.value[0],
|
@@ -24621,6 +24823,7 @@ const VFileInput = genericComponent()({
|
|
24621
24823
|
return createElementVNode(Fragment, null, [createElementVNode("input", mergeProps({
|
24622
24824
|
"ref": inputRef,
|
24623
24825
|
"type": "file",
|
24826
|
+
"accept": inputAccept,
|
24624
24827
|
"readonly": isReadonly.value,
|
24625
24828
|
"disabled": isDisabled.value,
|
24626
24829
|
"multiple": props.multiple,
|
@@ -24630,11 +24833,7 @@ const VFileInput = genericComponent()({
|
|
24630
24833
|
if (isReadonly.value) e.preventDefault();
|
24631
24834
|
onFocus();
|
24632
24835
|
},
|
24633
|
-
"onChange":
|
24634
|
-
if (!e.target) return;
|
24635
|
-
const target = e.target;
|
24636
|
-
model.value = [...(target.files ?? [])];
|
24637
|
-
},
|
24836
|
+
"onChange": onFileSelection,
|
24638
24837
|
"onDragleave": onDragleave,
|
24639
24838
|
"onFocus": onFocus,
|
24640
24839
|
"onBlur": blur
|
@@ -31432,7 +31631,7 @@ function createVuetify$1() {
|
|
31432
31631
|
};
|
31433
31632
|
});
|
31434
31633
|
}
|
31435
|
-
const version$1 = "3.9.
|
31634
|
+
const version$1 = "3.9.3-dev.2025-07-30";
|
31436
31635
|
createVuetify$1.version = version$1;
|
31437
31636
|
|
31438
31637
|
// Vue's inject() can only be used in setup
|
@@ -31457,7 +31656,7 @@ const createVuetify = function () {
|
|
31457
31656
|
...options
|
31458
31657
|
});
|
31459
31658
|
};
|
31460
|
-
const version = "3.9.
|
31659
|
+
const version = "3.9.3-dev.2025-07-30";
|
31461
31660
|
createVuetify.version = version;
|
31462
31661
|
|
31463
31662
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useRtl, useTheme, version };
|