@vuetify/nightly 3.9.2-master.2025-07-29 → 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 +6 -62
- package/dist/json/attributes.json +4301 -4281
- package/dist/json/importMap-labs.json +26 -26
- package/dist/json/importMap.json +188 -188
- package/dist/json/tags.json +5 -0
- package/dist/json/web-types.json +7597 -7527
- package/dist/vuetify-labs.cjs +228 -33
- package/dist/vuetify-labs.css +5466 -5464
- package/dist/vuetify-labs.d.ts +134 -71
- package/dist/vuetify-labs.esm.js +228 -33
- package/dist/vuetify-labs.esm.js.map +1 -1
- package/dist/vuetify-labs.js +228 -33
- package/dist/vuetify-labs.min.css +2 -2
- package/dist/vuetify.cjs +190 -24
- package/dist/vuetify.cjs.map +1 -1
- package/dist/vuetify.css +5163 -5161
- package/dist/vuetify.d.ts +124 -71
- package/dist/vuetify.esm.js +190 -24
- package/dist/vuetify.esm.js.map +1 -1
- package/dist/vuetify.js +190 -24
- package/dist/vuetify.js.map +1 -1
- package/dist/vuetify.min.css +2 -2
- package/dist/vuetify.min.js +731 -708
- 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/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/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/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/entry-bundler.js +1 -1
- package/lib/entry-bundler.js.map +1 -1
- package/lib/framework.d.ts +72 -71
- 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/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
|
*/
|
@@ -3159,6 +3159,7 @@ function createTheme(options) {
|
|
3159
3159
|
return acc;
|
3160
3160
|
});
|
3161
3161
|
const current = toRef(() => computedThemes.value[name.value]);
|
3162
|
+
const isSystem = toRef(() => _name.value === 'system');
|
3162
3163
|
const styles = computed(() => {
|
3163
3164
|
const lines = [];
|
3164
3165
|
const important = parsedOptions.unimportant ? '' : ' !important';
|
@@ -3246,7 +3247,7 @@ function createTheme(options) {
|
|
3246
3247
|
}
|
3247
3248
|
}
|
3248
3249
|
function change(themeName) {
|
3249
|
-
if (!themeNames.value.includes(themeName)) {
|
3250
|
+
if (themeName !== 'system' && !themeNames.value.includes(themeName)) {
|
3250
3251
|
consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
|
3251
3252
|
return;
|
3252
3253
|
}
|
@@ -3279,6 +3280,7 @@ function createTheme(options) {
|
|
3279
3280
|
cycle,
|
3280
3281
|
toggle,
|
3281
3282
|
isDisabled: parsedOptions.isDisabled,
|
3283
|
+
isSystem,
|
3282
3284
|
name,
|
3283
3285
|
themes,
|
3284
3286
|
current,
|
@@ -5490,6 +5492,69 @@ function useLocation(props) {
|
|
5490
5492
|
};
|
5491
5493
|
}
|
5492
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
|
+
|
5493
5558
|
const makeVProgressLinearProps = propsFactory({
|
5494
5559
|
absolute: Boolean,
|
5495
5560
|
active: {
|
@@ -5524,6 +5589,7 @@ const makeVProgressLinearProps = propsFactory({
|
|
5524
5589
|
stream: Boolean,
|
5525
5590
|
striped: Boolean,
|
5526
5591
|
roundedBar: Boolean,
|
5592
|
+
...makeChunksProps(),
|
5527
5593
|
...makeComponentProps(),
|
5528
5594
|
...makeLocationProps({
|
5529
5595
|
location: 'top'
|
@@ -5542,6 +5608,7 @@ const VProgressLinear = genericComponent()({
|
|
5542
5608
|
let {
|
5543
5609
|
slots
|
5544
5610
|
} = _ref;
|
5611
|
+
const root = ref();
|
5545
5612
|
const progress = useProxiedModel(props, 'modelValue');
|
5546
5613
|
const {
|
5547
5614
|
isRtl,
|
@@ -5583,6 +5650,24 @@ const VProgressLinear = genericComponent()({
|
|
5583
5650
|
const isReversed = computed(() => isRtl.value !== props.reverse);
|
5584
5651
|
const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
|
5585
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
|
+
});
|
5586
5671
|
function handleClick(e) {
|
5587
5672
|
if (!intersectionRef.value) return;
|
5588
5673
|
const {
|
@@ -5593,8 +5678,11 @@ const VProgressLinear = genericComponent()({
|
|
5593
5678
|
const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
|
5594
5679
|
progress.value = Math.round(value / width * max.value);
|
5595
5680
|
}
|
5681
|
+
watchEffect(() => {
|
5682
|
+
intersectionRef.value = root.value;
|
5683
|
+
});
|
5596
5684
|
useRender(() => createVNode(props.tag, {
|
5597
|
-
"ref":
|
5685
|
+
"ref": root,
|
5598
5686
|
"class": normalizeClass(['v-progress-linear', {
|
5599
5687
|
'v-progress-linear--absolute': props.absolute,
|
5600
5688
|
'v-progress-linear--active': props.active && isIntersecting.value,
|
@@ -5610,7 +5698,7 @@ const VProgressLinear = genericComponent()({
|
|
5610
5698
|
height: props.active ? convertToUnit(height.value) : 0,
|
5611
5699
|
'--v-progress-linear-height': convertToUnit(height.value),
|
5612
5700
|
...(props.absolute ? locationStyles.value : {})
|
5613
|
-
}, props.style]),
|
5701
|
+
}, chunksMaskStyles.value, props.style]),
|
5614
5702
|
"role": "progressbar",
|
5615
5703
|
"aria-hidden": props.active ? 'false' : 'true',
|
5616
5704
|
"aria-valuemin": "0",
|
@@ -5640,7 +5728,7 @@ const VProgressLinear = genericComponent()({
|
|
5640
5728
|
"class": normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
|
5641
5729
|
"style": normalizeStyle([bufferColorStyles.value, {
|
5642
5730
|
opacity: parseFloat(props.bufferOpacity),
|
5643
|
-
width: convertToUnit(
|
5731
|
+
width: convertToUnit(bufferWidth.value, '%')
|
5644
5732
|
}])
|
5645
5733
|
}, null), createVNode(Transition, {
|
5646
5734
|
"name": transition.value
|
@@ -5648,7 +5736,7 @@ const VProgressLinear = genericComponent()({
|
|
5648
5736
|
default: () => [!props.indeterminate ? createElementVNode("div", {
|
5649
5737
|
"class": normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
|
5650
5738
|
"style": normalizeStyle([barColorStyles.value, {
|
5651
|
-
width: convertToUnit(
|
5739
|
+
width: convertToUnit(barWidth.value, '%')
|
5652
5740
|
}])
|
5653
5741
|
}, null) : createElementVNode("div", {
|
5654
5742
|
"class": "v-progress-linear__indeterminate"
|
@@ -9852,6 +9940,11 @@ const VListItem = genericComponent()({
|
|
9852
9940
|
const isLink = toRef(() => props.link !== false && link.isLink.value);
|
9853
9941
|
const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
|
9854
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
|
+
});
|
9855
9948
|
const roundedProps = toRef(() => props.rounded || props.nav);
|
9856
9949
|
const color = toRef(() => props.color ?? props.activeColor);
|
9857
9950
|
const variantProps = toRef(() => ({
|
@@ -9955,7 +10048,8 @@ const VListItem = genericComponent()({
|
|
9955
10048
|
}, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
|
9956
10049
|
"style": [colorStyles.value, dimensionStyles.value, props.style],
|
9957
10050
|
"tabindex": isClickable.value ? list ? -2 : 0 : undefined,
|
9958
|
-
"aria-selected":
|
10051
|
+
"aria-selected": ariaSelected.value,
|
10052
|
+
"role": role.value,
|
9959
10053
|
"onClick": onClick,
|
9960
10054
|
"onKeydown": isClickable.value && !isLink.value && onKeyDown
|
9961
10055
|
}, link.linkProps), {
|
@@ -10455,6 +10549,7 @@ const VList = genericComponent()({
|
|
10455
10549
|
const activeColor = toRef(() => props.activeColor);
|
10456
10550
|
const baseColor = toRef(() => props.baseColor);
|
10457
10551
|
const color = toRef(() => props.color);
|
10552
|
+
const isSelectable = toRef(() => props.selectable || props.activatable);
|
10458
10553
|
createList({
|
10459
10554
|
filterable: props.filterable
|
10460
10555
|
});
|
@@ -10526,7 +10621,7 @@ const VList = genericComponent()({
|
|
10526
10621
|
}, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
|
10527
10622
|
"style": normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
|
10528
10623
|
"tabindex": props.disabled ? -1 : 0,
|
10529
|
-
"role":
|
10624
|
+
"role": isSelectable.value ? 'listbox' : 'list',
|
10530
10625
|
"aria-activedescendant": undefined,
|
10531
10626
|
"onFocusin": onFocusin,
|
10532
10627
|
"onFocusout": onFocusout,
|
@@ -13605,6 +13700,7 @@ const VSelect = genericComponent()({
|
|
13605
13700
|
"onKeydown": onListKeydown,
|
13606
13701
|
"onFocusin": onFocusin,
|
13607
13702
|
"tabindex": "-1",
|
13703
|
+
"selectable": true,
|
13608
13704
|
"aria-live": "polite",
|
13609
13705
|
"aria-label": `${props.label}-list`,
|
13610
13706
|
"color": props.itemColor ?? props.color
|
@@ -14224,6 +14320,7 @@ const VAutocomplete = genericComponent()({
|
|
14224
14320
|
"onFocusin": onFocusin,
|
14225
14321
|
"onFocusout": onFocusout,
|
14226
14322
|
"tabindex": "-1",
|
14323
|
+
"selectable": true,
|
14227
14324
|
"aria-live": "polite",
|
14228
14325
|
"color": props.itemColor ?? props.color
|
14229
14326
|
}, listEvents, props.listProps), {
|
@@ -19037,19 +19134,23 @@ const VCombobox = genericComponent()({
|
|
19037
19134
|
get: () => {
|
19038
19135
|
return _search.value;
|
19039
19136
|
},
|
19040
|
-
set: val => {
|
19137
|
+
set: async val => {
|
19041
19138
|
_search.value = val ?? '';
|
19042
19139
|
if (!props.multiple && !hasSelectionSlot.value) {
|
19043
19140
|
model.value = [transformItem$3(props, val)];
|
19044
19141
|
nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
|
19045
19142
|
}
|
19046
19143
|
if (val && props.multiple && props.delimiters?.length) {
|
19047
|
-
const
|
19144
|
+
const signsToMatch = props.delimiters.map(escapeForRegex).join('|');
|
19145
|
+
const values = val.split(new RegExp(`(?:${signsToMatch})+`));
|
19048
19146
|
if (values.length > 1) {
|
19049
|
-
|
19147
|
+
for (let v of values) {
|
19050
19148
|
v = v.trim();
|
19051
|
-
if (v)
|
19052
|
-
|
19149
|
+
if (v) {
|
19150
|
+
select(transformItem$3(props, v));
|
19151
|
+
await nextTick();
|
19152
|
+
}
|
19153
|
+
}
|
19053
19154
|
_search.value = '';
|
19054
19155
|
}
|
19055
19156
|
}
|
@@ -19331,6 +19432,7 @@ const VCombobox = genericComponent()({
|
|
19331
19432
|
"selected": selectedValues.value,
|
19332
19433
|
"selectStrategy": props.multiple ? 'independent' : 'single-independent',
|
19333
19434
|
"onMousedown": e => e.preventDefault(),
|
19435
|
+
"selectable": true,
|
19334
19436
|
"onKeydown": onListKeydown,
|
19335
19437
|
"onFocusin": onFocusin,
|
19336
19438
|
"onFocusout": onFocusout,
|
@@ -24447,6 +24549,42 @@ function appendIfDirectory(path, item) {
|
|
24447
24549
|
return item.isDirectory ? `${path}/${item.name}` : path;
|
24448
24550
|
}
|
24449
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
|
+
|
24450
24588
|
// Types
|
24451
24589
|
|
24452
24590
|
const makeVFileInputProps = propsFactory({
|
@@ -24479,6 +24617,7 @@ const makeVFileInputProps = propsFactory({
|
|
24479
24617
|
return wrapInArray(val).every(v => v != null && typeof v === 'object');
|
24480
24618
|
}
|
24481
24619
|
},
|
24620
|
+
...makeFileFilterProps(),
|
24482
24621
|
...makeVFieldProps({
|
24483
24622
|
clearable: true
|
24484
24623
|
})
|
@@ -24491,7 +24630,8 @@ const VFileInput = genericComponent()({
|
|
24491
24630
|
'click:control': e => true,
|
24492
24631
|
'mousedown:control': e => true,
|
24493
24632
|
'update:focused': focused => true,
|
24494
|
-
'update:modelValue': files => true
|
24633
|
+
'update:modelValue': files => true,
|
24634
|
+
rejected: files => true
|
24495
24635
|
},
|
24496
24636
|
setup(props, _ref) {
|
24497
24637
|
let {
|
@@ -24502,6 +24642,9 @@ const VFileInput = genericComponent()({
|
|
24502
24642
|
const {
|
24503
24643
|
t
|
24504
24644
|
} = useLocale();
|
24645
|
+
const {
|
24646
|
+
filterAccepted
|
24647
|
+
} = useFileFilter(props);
|
24505
24648
|
const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
|
24506
24649
|
const {
|
24507
24650
|
isFocused,
|
@@ -24575,14 +24718,38 @@ const VFileInput = genericComponent()({
|
|
24575
24718
|
e.stopImmediatePropagation();
|
24576
24719
|
isDragging.value = false;
|
24577
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) {
|
24578
24735
|
const dataTransfer = new DataTransfer();
|
24579
|
-
|
24736
|
+
const {
|
24737
|
+
accepted,
|
24738
|
+
rejected
|
24739
|
+
} = filterAccepted(files);
|
24740
|
+
if (rejected.length) {
|
24741
|
+
emit('rejected', rejected);
|
24742
|
+
}
|
24743
|
+
for (const file of accepted) {
|
24580
24744
|
dataTransfer.items.add(file);
|
24581
24745
|
}
|
24582
24746
|
inputRef.value.files = dataTransfer.files;
|
24583
|
-
|
24747
|
+
model.value = [...dataTransfer.files];
|
24748
|
+
const event = new Event('change', {
|
24584
24749
|
bubbles: true
|
24585
|
-
})
|
24750
|
+
});
|
24751
|
+
event.repack = true;
|
24752
|
+
inputRef.value.dispatchEvent(event);
|
24586
24753
|
}
|
24587
24754
|
watch(model, newValue => {
|
24588
24755
|
const hasModelReset = !Array.isArray(newValue) || !newValue.length;
|
@@ -24599,6 +24766,8 @@ const VFileInput = genericComponent()({
|
|
24599
24766
|
...inputProps
|
24600
24767
|
} = VInput.filterProps(props);
|
24601
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);
|
24602
24771
|
return createVNode(VInput, mergeProps({
|
24603
24772
|
"ref": vInputRef,
|
24604
24773
|
"modelValue": props.multiple ? model.value : model.value[0],
|
@@ -24654,6 +24823,7 @@ const VFileInput = genericComponent()({
|
|
24654
24823
|
return createElementVNode(Fragment, null, [createElementVNode("input", mergeProps({
|
24655
24824
|
"ref": inputRef,
|
24656
24825
|
"type": "file",
|
24826
|
+
"accept": inputAccept,
|
24657
24827
|
"readonly": isReadonly.value,
|
24658
24828
|
"disabled": isDisabled.value,
|
24659
24829
|
"multiple": props.multiple,
|
@@ -24663,11 +24833,7 @@ const VFileInput = genericComponent()({
|
|
24663
24833
|
if (isReadonly.value) e.preventDefault();
|
24664
24834
|
onFocus();
|
24665
24835
|
},
|
24666
|
-
"onChange":
|
24667
|
-
if (!e.target) return;
|
24668
|
-
const target = e.target;
|
24669
|
-
model.value = [...(target.files ?? [])];
|
24670
|
-
},
|
24836
|
+
"onChange": onFileSelection,
|
24671
24837
|
"onDragleave": onDragleave,
|
24672
24838
|
"onFocus": onFocus,
|
24673
24839
|
"onBlur": blur
|
@@ -31465,7 +31631,7 @@ function createVuetify$1() {
|
|
31465
31631
|
};
|
31466
31632
|
});
|
31467
31633
|
}
|
31468
|
-
const version$1 = "3.9.
|
31634
|
+
const version$1 = "3.9.3-dev.2025-07-30";
|
31469
31635
|
createVuetify$1.version = version$1;
|
31470
31636
|
|
31471
31637
|
// Vue's inject() can only be used in setup
|
@@ -31490,7 +31656,7 @@ const createVuetify = function () {
|
|
31490
31656
|
...options
|
31491
31657
|
});
|
31492
31658
|
};
|
31493
|
-
const version = "3.9.
|
31659
|
+
const version = "3.9.3-dev.2025-07-30";
|
31494
31660
|
createVuetify.version = version;
|
31495
31661
|
|
31496
31662
|
export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useRtl, useTheme, version };
|