@vuetify/nightly 3.9.2-dev.2025-07-18 → 3.9.2-master.2025-07-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.
Files changed (57) hide show
  1. package/CHANGELOG.md +16 -14
  2. package/dist/json/attributes.json +2954 -2974
  3. package/dist/json/importMap-labs.json +22 -22
  4. package/dist/json/importMap.json +184 -184
  5. package/dist/json/tags.json +0 -5
  6. package/dist/json/web-types.json +5821 -5891
  7. package/dist/vuetify-labs.cjs +27 -216
  8. package/dist/vuetify-labs.css +5981 -5983
  9. package/dist/vuetify-labs.d.ts +67 -129
  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 +3778 -3780
  17. package/dist/vuetify.d.ts +67 -119
  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 +67 -67
  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.2-dev.2025-07-18
2
+ * Vuetify v3.9.2-master.2025-07-22
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
@@ -31988,7 +31828,6 @@ const makeVFileUploadProps = propsFactory({
31988
31828
  },
31989
31829
  showSize: Boolean,
31990
31830
  name: String,
31991
- ...makeFileFilterProps(),
31992
31831
  ...makeDelayProps(),
31993
31832
  ...makeDensityProps(),
31994
31833
  ...pick(makeVDividerProps({
@@ -32001,13 +31840,11 @@ const VFileUpload = genericComponent()({
32001
31840
  inheritAttrs: false,
32002
31841
  props: makeVFileUploadProps(),
32003
31842
  emits: {
32004
- 'update:modelValue': files => true,
32005
- rejected: files => true
31843
+ 'update:modelValue': files => true
32006
31844
  },
32007
31845
  setup(props, _ref) {
32008
31846
  let {
32009
31847
  attrs,
32010
- emit,
32011
31848
  slots
32012
31849
  } = _ref;
32013
31850
  const {
@@ -32016,9 +31853,6 @@ const VFileUpload = genericComponent()({
32016
31853
  const {
32017
31854
  densityClasses
32018
31855
  } = useDensity(props);
32019
- const {
32020
- filterAccepted
32021
- } = useFileFilter(props);
32022
31856
  const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
32023
31857
  const isDragging = shallowRef(false);
32024
31858
  const vSheetRef = ref(null);
@@ -32040,38 +31874,14 @@ const VFileUpload = genericComponent()({
32040
31874
  e.stopImmediatePropagation();
32041
31875
  isDragging.value = false;
32042
31876
  if (!inputRef.value) return;
32043
- const allDroppedFiles = await handleDrop(e);
32044
- selectAccepted(allDroppedFiles);
32045
- }
32046
- function onFileSelection(e) {
32047
- if (!e.target || e.repack) return; // prevent loop
32048
-
32049
- if (!props.filterByType) {
32050
- const target = e.target;
32051
- model.value = [...(target.files ?? [])];
32052
- } else {
32053
- selectAccepted([...e.target.files]);
32054
- }
32055
- }
32056
- function selectAccepted(files) {
32057
31877
  const dataTransfer = new DataTransfer();
32058
- const {
32059
- accepted,
32060
- rejected
32061
- } = filterAccepted(files);
32062
- if (rejected.length) {
32063
- emit('rejected', rejected);
32064
- }
32065
- for (const file of accepted) {
31878
+ for (const file of await handleDrop(e)) {
32066
31879
  dataTransfer.items.add(file);
32067
31880
  }
32068
31881
  inputRef.value.files = dataTransfer.files;
32069
- model.value = [...dataTransfer.files];
32070
- const event = new Event('change', {
31882
+ inputRef.value.dispatchEvent(new Event('change', {
32071
31883
  bubbles: true
32072
- });
32073
- event.repack = true;
32074
- inputRef.value.dispatchEvent(event);
31884
+ }));
32075
31885
  }
32076
31886
  function onClick() {
32077
31887
  inputRef.value?.click();
@@ -32089,16 +31899,17 @@ const VFileUpload = genericComponent()({
32089
31899
  const cardProps = VSheet.filterProps(props);
32090
31900
  const dividerProps = VDivider.filterProps(props);
32091
31901
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
32092
- const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
32093
- const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
32094
31902
  const inputNode = createElementVNode("input", mergeProps({
32095
31903
  "ref": inputRef,
32096
31904
  "type": "file",
32097
- "accept": inputAccept,
32098
31905
  "disabled": props.disabled,
32099
31906
  "multiple": props.multiple,
32100
31907
  "name": props.name,
32101
- "onChange": onFileSelection
31908
+ "onChange": e => {
31909
+ if (!e.target) return;
31910
+ const target = e.target;
31911
+ model.value = [...(target.files ?? [])];
31912
+ }
32102
31913
  }, inputAttrs), null);
32103
31914
  return createElementVNode(Fragment, null, [createVNode(VSheet, mergeProps({
32104
31915
  "ref": vSheetRef
@@ -33877,7 +33688,7 @@ function createVuetify$1() {
33877
33688
  };
33878
33689
  });
33879
33690
  }
33880
- const version$1 = "3.9.2-dev.2025-07-18";
33691
+ const version$1 = "3.9.2-master.2025-07-22";
33881
33692
  createVuetify$1.version = version$1;
33882
33693
 
33883
33694
  // Vue's inject() can only be used in setup
@@ -34175,7 +33986,7 @@ var index = /*#__PURE__*/Object.freeze({
34175
33986
 
34176
33987
  /* eslint-disable local-rules/sort-imports */
34177
33988
 
34178
- const version = "3.9.2-dev.2025-07-18";
33989
+ const version = "3.9.2-master.2025-07-22";
34179
33990
 
34180
33991
  /* eslint-disable local-rules/sort-imports */
34181
33992