@vuetify/nightly 3.9.1-dev.2025-07-17 → 3.9.1-master.2025-07-17

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +5 -11
  2. package/dist/json/attributes.json +1025 -1045
  3. package/dist/json/importMap-labs.json +20 -20
  4. package/dist/json/importMap.json +148 -148
  5. package/dist/json/tags.json +0 -5
  6. package/dist/json/web-types.json +1842 -1912
  7. package/dist/vuetify-labs.cjs +27 -216
  8. package/dist/vuetify-labs.css +5593 -5595
  9. package/dist/vuetify-labs.d.ts +51 -113
  10. package/dist/vuetify-labs.esm.js +27 -216
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +27 -216
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +18 -178
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +1500 -1502
  17. package/dist/vuetify.d.ts +51 -103
  18. package/dist/vuetify.esm.js +18 -178
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +18 -178
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +701 -723
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.js +0 -1
  26. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  27. package/lib/components/VCombobox/VCombobox.js +0 -1
  28. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  29. package/lib/components/VFileInput/VFileInput.d.ts +0 -15
  30. package/lib/components/VFileInput/VFileInput.js +9 -38
  31. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  32. package/lib/components/VList/VList.js +1 -2
  33. package/lib/components/VList/VList.js.map +1 -1
  34. package/lib/components/VList/VListItem.js +1 -7
  35. package/lib/components/VList/VListItem.js.map +1 -1
  36. package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
  37. package/lib/components/VProgressLinear/VProgressLinear.d.ts +0 -75
  38. package/lib/components/VProgressLinear/VProgressLinear.js +6 -32
  39. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  40. package/lib/components/VProgressLinear/VProgressLinear.sass +2 -2
  41. package/lib/components/VSelect/VSelect.js +0 -1
  42. package/lib/components/VSelect/VSelect.js.map +1 -1
  43. package/lib/entry-bundler.js +1 -1
  44. package/lib/entry-bundler.js.map +1 -1
  45. package/lib/framework.d.ts +51 -51
  46. package/lib/framework.js +1 -1
  47. package/lib/framework.js.map +1 -1
  48. package/lib/labs/VFileUpload/VFileUpload.d.ts +0 -15
  49. package/lib/labs/VFileUpload/VFileUpload.js +9 -39
  50. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  51. package/package.json +1 -1
  52. package/lib/components/VProgressLinear/chunks.d.ts +0 -55
  53. package/lib/components/VProgressLinear/chunks.js +0 -62
  54. package/lib/components/VProgressLinear/chunks.js.map +0 -1
  55. package/lib/composables/fileFilter.d.ts +0 -18
  56. package/lib/composables/fileFilter.js +0 -38
  57. package/lib/composables/fileFilter.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.1-dev.2025-07-17
2
+ * Vuetify v3.9.1-master.2025-07-17
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -5165,69 +5165,6 @@ function useLocation(props) {
5165
5165
  };
5166
5166
  }
5167
5167
 
5168
- // Utilities
5169
-
5170
- // Types
5171
-
5172
- // Composables
5173
- const makeChunksProps = propsFactory({
5174
- chunkCount: {
5175
- type: [Number, String],
5176
- default: null
5177
- },
5178
- chunkWidth: {
5179
- type: [Number, String],
5180
- default: null
5181
- },
5182
- chunkGap: {
5183
- type: [Number, String],
5184
- default: 4
5185
- }
5186
- }, 'chunks');
5187
- function useChunks(props, containerWidth) {
5188
- const hasChunks = toRef(() => !!props.chunkCount || !!props.chunkWidth);
5189
- const chunkWidth = computed(() => {
5190
- const containerSize = toValue(containerWidth);
5191
- if (!containerSize) {
5192
- return 0;
5193
- }
5194
- if (!props.chunkCount) {
5195
- return Number(props.chunkWidth);
5196
- }
5197
- const count = Number(props.chunkCount);
5198
- const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
5199
- return availableWidth / count;
5200
- });
5201
- const chunkGap = toRef(() => Number(props.chunkGap));
5202
- const chunksMaskStyles = computed(() => {
5203
- if (!hasChunks.value) {
5204
- return {};
5205
- }
5206
- const chunkGapPx = convertToUnit(chunkGap.value);
5207
- const chunkWidthPx = convertToUnit(chunkWidth.value);
5208
- return {
5209
- maskRepeat: 'repeat-x',
5210
- maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
5211
- maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
5212
- };
5213
- });
5214
- function snapValueToChunk(val) {
5215
- const containerSize = toValue(containerWidth);
5216
- if (!containerSize) {
5217
- return val;
5218
- }
5219
- const gapRelativeSize = 100 * chunkGap.value / containerSize;
5220
- const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
5221
- const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
5222
- return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
5223
- }
5224
- return {
5225
- hasChunks,
5226
- chunksMaskStyles,
5227
- snapValueToChunk
5228
- };
5229
- }
5230
-
5231
5168
  const makeVProgressLinearProps = propsFactory({
5232
5169
  absolute: Boolean,
5233
5170
  active: {
@@ -5262,7 +5199,6 @@ const makeVProgressLinearProps = propsFactory({
5262
5199
  stream: Boolean,
5263
5200
  striped: Boolean,
5264
5201
  roundedBar: Boolean,
5265
- ...makeChunksProps(),
5266
5202
  ...makeComponentProps(),
5267
5203
  ...makeLocationProps({
5268
5204
  location: 'top'
@@ -5281,7 +5217,6 @@ const VProgressLinear = genericComponent()({
5281
5217
  let {
5282
5218
  slots
5283
5219
  } = _ref;
5284
- const root = ref();
5285
5220
  const progress = useProxiedModel(props, 'modelValue');
5286
5221
  const {
5287
5222
  isRtl,
@@ -5323,24 +5258,6 @@ const VProgressLinear = genericComponent()({
5323
5258
  const isReversed = computed(() => isRtl.value !== props.reverse);
5324
5259
  const transition = computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
5325
5260
  const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
5326
- const containerWidth = shallowRef(0);
5327
- const {
5328
- hasChunks,
5329
- chunksMaskStyles,
5330
- snapValueToChunk
5331
- } = useChunks(props, containerWidth);
5332
- useToggleScope(hasChunks, () => {
5333
- const {
5334
- resizeRef
5335
- } = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
5336
- watchEffect(() => resizeRef.value = root.value);
5337
- });
5338
- const bufferWidth = computed(() => {
5339
- return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
5340
- });
5341
- const barWidth = computed(() => {
5342
- return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
5343
- });
5344
5261
  function handleClick(e) {
5345
5262
  if (!intersectionRef.value) return;
5346
5263
  const {
@@ -5351,11 +5268,8 @@ const VProgressLinear = genericComponent()({
5351
5268
  const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
5352
5269
  progress.value = Math.round(value / width * max.value);
5353
5270
  }
5354
- watchEffect(() => {
5355
- intersectionRef.value = root.value;
5356
- });
5357
5271
  useRender(() => createVNode(props.tag, {
5358
- "ref": root,
5272
+ "ref": intersectionRef,
5359
5273
  "class": normalizeClass(['v-progress-linear', {
5360
5274
  'v-progress-linear--absolute': props.absolute,
5361
5275
  'v-progress-linear--active': props.active && isIntersecting.value,
@@ -5370,7 +5284,7 @@ const VProgressLinear = genericComponent()({
5370
5284
  height: props.active ? convertToUnit(height.value) : 0,
5371
5285
  '--v-progress-linear-height': convertToUnit(height.value),
5372
5286
  ...(props.absolute ? locationStyles.value : {})
5373
- }, chunksMaskStyles.value, props.style]),
5287
+ }, props.style]),
5374
5288
  "role": "progressbar",
5375
5289
  "aria-hidden": props.active ? 'false' : 'true',
5376
5290
  "aria-valuemin": "0",
@@ -5400,7 +5314,7 @@ const VProgressLinear = genericComponent()({
5400
5314
  "class": normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
5401
5315
  "style": normalizeStyle([bufferColorStyles.value, {
5402
5316
  opacity: parseFloat(props.bufferOpacity),
5403
- width: convertToUnit(bufferWidth.value, '%')
5317
+ width: convertToUnit(normalizedBuffer.value, '%')
5404
5318
  }])
5405
5319
  }, null), createVNode(Transition, {
5406
5320
  "name": transition.value
@@ -5408,7 +5322,7 @@ const VProgressLinear = genericComponent()({
5408
5322
  default: () => [!props.indeterminate ? createElementVNode("div", {
5409
5323
  "class": normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5410
5324
  "style": normalizeStyle([barColorStyles.value, {
5411
- width: convertToUnit(barWidth.value, '%')
5325
+ width: convertToUnit(normalizedValue.value, '%')
5412
5326
  }])
5413
5327
  }, null) : createElementVNode("div", {
5414
5328
  "class": "v-progress-linear__indeterminate"
@@ -9626,11 +9540,6 @@ const VListItem = genericComponent()({
9626
9540
  const isLink = toRef(() => props.link !== false && link.isLink.value);
9627
9541
  const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9628
9542
  const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9629
- const role = computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9630
- const ariaSelected = computed(() => {
9631
- if (!isSelectable.value) return undefined;
9632
- return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
9633
- });
9634
9543
  const roundedProps = toRef(() => props.rounded || props.nav);
9635
9544
  const color = toRef(() => props.color ?? props.activeColor);
9636
9545
  const variantProps = toRef(() => ({
@@ -9734,8 +9643,7 @@ const VListItem = genericComponent()({
9734
9643
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
9735
9644
  "style": [colorStyles.value, dimensionStyles.value, props.style],
9736
9645
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
9737
- "aria-selected": ariaSelected.value,
9738
- "role": role.value,
9646
+ "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
9739
9647
  "onClick": onClick,
9740
9648
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
9741
9649
  }, link.linkProps), {
@@ -10237,7 +10145,6 @@ const VList = genericComponent()({
10237
10145
  const activeColor = toRef(() => props.activeColor);
10238
10146
  const baseColor = toRef(() => props.baseColor);
10239
10147
  const color = toRef(() => props.color);
10240
- const isSelectable = toRef(() => props.selectable || props.activatable);
10241
10148
  createList({
10242
10149
  filterable: props.filterable
10243
10150
  });
@@ -10309,7 +10216,7 @@ const VList = genericComponent()({
10309
10216
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
10310
10217
  "style": normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
10311
10218
  "tabindex": props.disabled ? -1 : 0,
10312
- "role": isSelectable.value ? 'listbox' : 'list',
10219
+ "role": "listbox",
10313
10220
  "aria-activedescendant": undefined,
10314
10221
  "onFocusin": onFocusin,
10315
10222
  "onFocusout": onFocusout,
@@ -13379,7 +13286,6 @@ const VSelect = genericComponent()({
13379
13286
  "onKeydown": onListKeydown,
13380
13287
  "onFocusin": onFocusin,
13381
13288
  "tabindex": "-1",
13382
- "selectable": true,
13383
13289
  "aria-live": "polite",
13384
13290
  "aria-label": `${props.label}-list`,
13385
13291
  "color": props.itemColor ?? props.color
@@ -13999,7 +13905,6 @@ const VAutocomplete = genericComponent()({
13999
13905
  "onFocusin": onFocusin,
14000
13906
  "onFocusout": onFocusout,
14001
13907
  "tabindex": "-1",
14002
- "selectable": true,
14003
13908
  "aria-live": "polite",
14004
13909
  "color": props.itemColor ?? props.color
14005
13910
  }, listEvents, props.listProps), {
@@ -19087,7 +18992,6 @@ const VCombobox = genericComponent()({
19087
18992
  "selected": selectedValues.value,
19088
18993
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
19089
18994
  "onMousedown": e => e.preventDefault(),
19090
- "selectable": true,
19091
18995
  "onKeydown": onListKeydown,
19092
18996
  "onFocusin": onFocusin,
19093
18997
  "onFocusout": onFocusout,
@@ -24186,42 +24090,6 @@ function appendIfDirectory(path, item) {
24186
24090
  return item.isDirectory ? `${path}/${item.name}` : path;
24187
24091
  }
24188
24092
 
24189
- // Utilities
24190
- // Composables
24191
- const makeFileFilterProps = propsFactory({
24192
- filterByType: String
24193
- }, 'file-accept');
24194
- function useFileFilter(props) {
24195
- const fileFilter = computed(() => props.filterByType ? createFilter(props.filterByType) : null);
24196
- function filterAccepted(files) {
24197
- if (fileFilter.value) {
24198
- const accepted = files.filter(fileFilter.value);
24199
- return {
24200
- accepted,
24201
- rejected: files.filter(f => !accepted.includes(f))
24202
- };
24203
- }
24204
- return {
24205
- accepted: files,
24206
- rejected: []
24207
- };
24208
- }
24209
- return {
24210
- filterAccepted
24211
- };
24212
- }
24213
- function createFilter(v) {
24214
- const types = v.split(',').map(x => x.trim().toLowerCase());
24215
- const extensionsToMatch = types.filter(x => x.startsWith('.'));
24216
- const wildcards = types.filter(x => x.endsWith('/*'));
24217
- const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
24218
- return file => {
24219
- const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
24220
- const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
24221
- return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
24222
- };
24223
- }
24224
-
24225
24093
  // Types
24226
24094
 
24227
24095
  const makeVFileInputProps = propsFactory({
@@ -24254,7 +24122,6 @@ const makeVFileInputProps = propsFactory({
24254
24122
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
24255
24123
  }
24256
24124
  },
24257
- ...makeFileFilterProps(),
24258
24125
  ...makeVFieldProps({
24259
24126
  clearable: true
24260
24127
  })
@@ -24267,8 +24134,7 @@ const VFileInput = genericComponent()({
24267
24134
  'click:control': e => true,
24268
24135
  'mousedown:control': e => true,
24269
24136
  'update:focused': focused => true,
24270
- 'update:modelValue': files => true,
24271
- rejected: files => true
24137
+ 'update:modelValue': files => true
24272
24138
  },
24273
24139
  setup(props, _ref) {
24274
24140
  let {
@@ -24279,9 +24145,6 @@ const VFileInput = genericComponent()({
24279
24145
  const {
24280
24146
  t
24281
24147
  } = useLocale();
24282
- const {
24283
- filterAccepted
24284
- } = useFileFilter(props);
24285
24148
  const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
24286
24149
  const {
24287
24150
  isFocused,
@@ -24355,38 +24218,14 @@ const VFileInput = genericComponent()({
24355
24218
  e.stopImmediatePropagation();
24356
24219
  isDragging.value = false;
24357
24220
  if (!inputRef.value || !hasFilesOrFolders(e)) return;
24358
- const allDroppedFiles = await handleDrop(e);
24359
- selectAccepted(allDroppedFiles);
24360
- }
24361
- function onFileSelection(e) {
24362
- if (!e.target || e.repack) return; // prevent loop
24363
-
24364
- if (!props.filterByType) {
24365
- const target = e.target;
24366
- model.value = [...(target.files ?? [])];
24367
- } else {
24368
- selectAccepted([...e.target.files]);
24369
- }
24370
- }
24371
- function selectAccepted(files) {
24372
24221
  const dataTransfer = new DataTransfer();
24373
- const {
24374
- accepted,
24375
- rejected
24376
- } = filterAccepted(files);
24377
- if (rejected.length) {
24378
- emit('rejected', rejected);
24379
- }
24380
- for (const file of accepted) {
24222
+ for (const file of await handleDrop(e)) {
24381
24223
  dataTransfer.items.add(file);
24382
24224
  }
24383
24225
  inputRef.value.files = dataTransfer.files;
24384
- model.value = [...dataTransfer.files];
24385
- const event = new Event('change', {
24226
+ inputRef.value.dispatchEvent(new Event('change', {
24386
24227
  bubbles: true
24387
- });
24388
- event.repack = true;
24389
- inputRef.value.dispatchEvent(event);
24228
+ }));
24390
24229
  }
24391
24230
  watch(model, newValue => {
24392
24231
  const hasModelReset = !Array.isArray(newValue) || !newValue.length;
@@ -24403,8 +24242,6 @@ const VFileInput = genericComponent()({
24403
24242
  ...inputProps
24404
24243
  } = VInput.filterProps(props);
24405
24244
  const fieldProps = VField.filterProps(props);
24406
- const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
24407
- const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
24408
24245
  return createVNode(VInput, mergeProps({
24409
24246
  "ref": vInputRef,
24410
24247
  "modelValue": props.multiple ? model.value : model.value[0],
@@ -24460,7 +24297,6 @@ const VFileInput = genericComponent()({
24460
24297
  return createElementVNode(Fragment, null, [createElementVNode("input", mergeProps({
24461
24298
  "ref": inputRef,
24462
24299
  "type": "file",
24463
- "accept": inputAccept,
24464
24300
  "readonly": isReadonly.value,
24465
24301
  "disabled": isDisabled.value,
24466
24302
  "multiple": props.multiple,
@@ -24470,7 +24306,11 @@ const VFileInput = genericComponent()({
24470
24306
  if (isReadonly.value) e.preventDefault();
24471
24307
  onFocus();
24472
24308
  },
24473
- "onChange": onFileSelection,
24309
+ "onChange": e => {
24310
+ if (!e.target) return;
24311
+ const target = e.target;
24312
+ model.value = [...(target.files ?? [])];
24313
+ },
24474
24314
  "onDragleave": onDragleave,
24475
24315
  "onFocus": onFocus,
24476
24316
  "onBlur": blur
@@ -31989,7 +31829,6 @@ const makeVFileUploadProps = propsFactory({
31989
31829
  },
31990
31830
  showSize: Boolean,
31991
31831
  name: String,
31992
- ...makeFileFilterProps(),
31993
31832
  ...makeDelayProps(),
31994
31833
  ...makeDensityProps(),
31995
31834
  ...pick(makeVDividerProps({
@@ -32002,13 +31841,11 @@ const VFileUpload = genericComponent()({
32002
31841
  inheritAttrs: false,
32003
31842
  props: makeVFileUploadProps(),
32004
31843
  emits: {
32005
- 'update:modelValue': files => true,
32006
- rejected: files => true
31844
+ 'update:modelValue': files => true
32007
31845
  },
32008
31846
  setup(props, _ref) {
32009
31847
  let {
32010
31848
  attrs,
32011
- emit,
32012
31849
  slots
32013
31850
  } = _ref;
32014
31851
  const {
@@ -32017,9 +31854,6 @@ const VFileUpload = genericComponent()({
32017
31854
  const {
32018
31855
  densityClasses
32019
31856
  } = useDensity(props);
32020
- const {
32021
- filterAccepted
32022
- } = useFileFilter(props);
32023
31857
  const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
32024
31858
  const isDragging = shallowRef(false);
32025
31859
  const vSheetRef = ref(null);
@@ -32041,38 +31875,14 @@ const VFileUpload = genericComponent()({
32041
31875
  e.stopImmediatePropagation();
32042
31876
  isDragging.value = false;
32043
31877
  if (!inputRef.value) return;
32044
- const allDroppedFiles = await handleDrop(e);
32045
- selectAccepted(allDroppedFiles);
32046
- }
32047
- function onFileSelection(e) {
32048
- if (!e.target || e.repack) return; // prevent loop
32049
-
32050
- if (!props.filterByType) {
32051
- const target = e.target;
32052
- model.value = [...(target.files ?? [])];
32053
- } else {
32054
- selectAccepted([...e.target.files]);
32055
- }
32056
- }
32057
- function selectAccepted(files) {
32058
31878
  const dataTransfer = new DataTransfer();
32059
- const {
32060
- accepted,
32061
- rejected
32062
- } = filterAccepted(files);
32063
- if (rejected.length) {
32064
- emit('rejected', rejected);
32065
- }
32066
- for (const file of accepted) {
31879
+ for (const file of await handleDrop(e)) {
32067
31880
  dataTransfer.items.add(file);
32068
31881
  }
32069
31882
  inputRef.value.files = dataTransfer.files;
32070
- model.value = [...dataTransfer.files];
32071
- const event = new Event('change', {
31883
+ inputRef.value.dispatchEvent(new Event('change', {
32072
31884
  bubbles: true
32073
- });
32074
- event.repack = true;
32075
- inputRef.value.dispatchEvent(event);
31885
+ }));
32076
31886
  }
32077
31887
  function onClick() {
32078
31888
  inputRef.value?.click();
@@ -32090,16 +31900,17 @@ const VFileUpload = genericComponent()({
32090
31900
  const cardProps = VSheet.filterProps(props);
32091
31901
  const dividerProps = VDivider.filterProps(props);
32092
31902
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
32093
- const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
32094
- const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
32095
31903
  const inputNode = createElementVNode("input", mergeProps({
32096
31904
  "ref": inputRef,
32097
31905
  "type": "file",
32098
- "accept": inputAccept,
32099
31906
  "disabled": props.disabled,
32100
31907
  "multiple": props.multiple,
32101
31908
  "name": props.name,
32102
- "onChange": onFileSelection
31909
+ "onChange": e => {
31910
+ if (!e.target) return;
31911
+ const target = e.target;
31912
+ model.value = [...(target.files ?? [])];
31913
+ }
32103
31914
  }, inputAttrs), null);
32104
31915
  return createElementVNode(Fragment, null, [createVNode(VSheet, mergeProps({
32105
31916
  "ref": vSheetRef
@@ -33878,7 +33689,7 @@ function createVuetify$1() {
33878
33689
  };
33879
33690
  });
33880
33691
  }
33881
- const version$1 = "3.9.1-dev.2025-07-17";
33692
+ const version$1 = "3.9.1-master.2025-07-17";
33882
33693
  createVuetify$1.version = version$1;
33883
33694
 
33884
33695
  // Vue's inject() can only be used in setup
@@ -34176,7 +33987,7 @@ var index = /*#__PURE__*/Object.freeze({
34176
33987
 
34177
33988
  /* eslint-disable local-rules/sort-imports */
34178
33989
 
34179
- const version = "3.9.1-dev.2025-07-17";
33990
+ const version = "3.9.1-master.2025-07-17";
34180
33991
 
34181
33992
  /* eslint-disable local-rules/sort-imports */
34182
33993