@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
package/dist/vuetify.cjs CHANGED
@@ -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
  */
@@ -5447,69 +5447,6 @@
5447
5447
  };
5448
5448
  }
5449
5449
 
5450
- // Utilities
5451
-
5452
- // Types
5453
-
5454
- // Composables
5455
- const makeChunksProps = propsFactory({
5456
- chunkCount: {
5457
- type: [Number, String],
5458
- default: null
5459
- },
5460
- chunkWidth: {
5461
- type: [Number, String],
5462
- default: null
5463
- },
5464
- chunkGap: {
5465
- type: [Number, String],
5466
- default: 4
5467
- }
5468
- }, 'chunks');
5469
- function useChunks(props, containerWidth) {
5470
- const hasChunks = vue.toRef(() => !!props.chunkCount || !!props.chunkWidth);
5471
- const chunkWidth = vue.computed(() => {
5472
- const containerSize = vue.toValue(containerWidth);
5473
- if (!containerSize) {
5474
- return 0;
5475
- }
5476
- if (!props.chunkCount) {
5477
- return Number(props.chunkWidth);
5478
- }
5479
- const count = Number(props.chunkCount);
5480
- const availableWidth = containerSize - Number(props.chunkGap) * (count - 1);
5481
- return availableWidth / count;
5482
- });
5483
- const chunkGap = vue.toRef(() => Number(props.chunkGap));
5484
- const chunksMaskStyles = vue.computed(() => {
5485
- if (!hasChunks.value) {
5486
- return {};
5487
- }
5488
- const chunkGapPx = convertToUnit(chunkGap.value);
5489
- const chunkWidthPx = convertToUnit(chunkWidth.value);
5490
- return {
5491
- maskRepeat: 'repeat-x',
5492
- maskImage: `linear-gradient(90deg, #000, #000 ${chunkWidthPx}, transparent ${chunkWidthPx}, transparent)`,
5493
- maskSize: `calc(${chunkWidthPx} + ${chunkGapPx}) 100%`
5494
- };
5495
- });
5496
- function snapValueToChunk(val) {
5497
- const containerSize = vue.toValue(containerWidth);
5498
- if (!containerSize) {
5499
- return val;
5500
- }
5501
- const gapRelativeSize = 100 * chunkGap.value / containerSize;
5502
- const chunkRelativeSize = 100 * (chunkWidth.value + chunkGap.value) / containerSize;
5503
- const filledChunks = Math.floor((val + gapRelativeSize) / chunkRelativeSize);
5504
- return clamp(0, filledChunks * chunkRelativeSize - gapRelativeSize / 2, 100);
5505
- }
5506
- return {
5507
- hasChunks,
5508
- chunksMaskStyles,
5509
- snapValueToChunk
5510
- };
5511
- }
5512
-
5513
5450
  const makeVProgressLinearProps = propsFactory({
5514
5451
  absolute: Boolean,
5515
5452
  active: {
@@ -5544,7 +5481,6 @@
5544
5481
  stream: Boolean,
5545
5482
  striped: Boolean,
5546
5483
  roundedBar: Boolean,
5547
- ...makeChunksProps(),
5548
5484
  ...makeComponentProps(),
5549
5485
  ...makeLocationProps({
5550
5486
  location: 'top'
@@ -5563,7 +5499,6 @@
5563
5499
  let {
5564
5500
  slots
5565
5501
  } = _ref;
5566
- const root = vue.ref();
5567
5502
  const progress = useProxiedModel(props, 'modelValue');
5568
5503
  const {
5569
5504
  isRtl,
@@ -5605,24 +5540,6 @@
5605
5540
  const isReversed = vue.computed(() => isRtl.value !== props.reverse);
5606
5541
  const transition = vue.computed(() => props.indeterminate ? 'fade-transition' : 'slide-x-transition');
5607
5542
  const isForcedColorsModeActive = IN_BROWSER && window.matchMedia?.('(forced-colors: active)').matches;
5608
- const containerWidth = vue.shallowRef(0);
5609
- const {
5610
- hasChunks,
5611
- chunksMaskStyles,
5612
- snapValueToChunk
5613
- } = useChunks(props, containerWidth);
5614
- useToggleScope(hasChunks, () => {
5615
- const {
5616
- resizeRef
5617
- } = useResizeObserver(entries => containerWidth.value = entries[0].contentRect.width);
5618
- vue.watchEffect(() => resizeRef.value = root.value);
5619
- });
5620
- const bufferWidth = vue.computed(() => {
5621
- return hasChunks.value ? snapValueToChunk(normalizedBuffer.value) : normalizedBuffer.value;
5622
- });
5623
- const barWidth = vue.computed(() => {
5624
- return hasChunks.value ? snapValueToChunk(normalizedValue.value) : normalizedValue.value;
5625
- });
5626
5543
  function handleClick(e) {
5627
5544
  if (!intersectionRef.value) return;
5628
5545
  const {
@@ -5633,11 +5550,8 @@
5633
5550
  const value = isReversed.value ? width - e.clientX + (right - width) : e.clientX - left;
5634
5551
  progress.value = Math.round(value / width * max.value);
5635
5552
  }
5636
- vue.watchEffect(() => {
5637
- intersectionRef.value = root.value;
5638
- });
5639
5553
  useRender(() => vue.createVNode(props.tag, {
5640
- "ref": root,
5554
+ "ref": intersectionRef,
5641
5555
  "class": vue.normalizeClass(['v-progress-linear', {
5642
5556
  'v-progress-linear--absolute': props.absolute,
5643
5557
  'v-progress-linear--active': props.active && isIntersecting.value,
@@ -5652,7 +5566,7 @@
5652
5566
  height: props.active ? convertToUnit(height.value) : 0,
5653
5567
  '--v-progress-linear-height': convertToUnit(height.value),
5654
5568
  ...(props.absolute ? locationStyles.value : {})
5655
- }, chunksMaskStyles.value, props.style]),
5569
+ }, props.style]),
5656
5570
  "role": "progressbar",
5657
5571
  "aria-hidden": props.active ? 'false' : 'true',
5658
5572
  "aria-valuemin": "0",
@@ -5682,7 +5596,7 @@
5682
5596
  "class": vue.normalizeClass(['v-progress-linear__buffer', !isForcedColorsModeActive ? bufferColorClasses.value : undefined]),
5683
5597
  "style": vue.normalizeStyle([bufferColorStyles.value, {
5684
5598
  opacity: parseFloat(props.bufferOpacity),
5685
- width: convertToUnit(bufferWidth.value, '%')
5599
+ width: convertToUnit(normalizedBuffer.value, '%')
5686
5600
  }])
5687
5601
  }, null), vue.createVNode(vue.Transition, {
5688
5602
  "name": transition.value
@@ -5690,7 +5604,7 @@
5690
5604
  default: () => [!props.indeterminate ? vue.createElementVNode("div", {
5691
5605
  "class": vue.normalizeClass(['v-progress-linear__determinate', !isForcedColorsModeActive ? barColorClasses.value : undefined]),
5692
5606
  "style": vue.normalizeStyle([barColorStyles.value, {
5693
- width: convertToUnit(barWidth.value, '%')
5607
+ width: convertToUnit(normalizedValue.value, '%')
5694
5608
  }])
5695
5609
  }, null) : vue.createElementVNode("div", {
5696
5610
  "class": "v-progress-linear__indeterminate"
@@ -9908,11 +9822,6 @@
9908
9822
  const isLink = vue.toRef(() => props.link !== false && link.isLink.value);
9909
9823
  const isSelectable = vue.computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9910
9824
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9911
- const role = vue.computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9912
- const ariaSelected = vue.computed(() => {
9913
- if (!isSelectable.value) return undefined;
9914
- return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
9915
- });
9916
9825
  const roundedProps = vue.toRef(() => props.rounded || props.nav);
9917
9826
  const color = vue.toRef(() => props.color ?? props.activeColor);
9918
9827
  const variantProps = vue.toRef(() => ({
@@ -10016,8 +9925,7 @@
10016
9925
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
10017
9926
  "style": [colorStyles.value, dimensionStyles.value, props.style],
10018
9927
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
10019
- "aria-selected": ariaSelected.value,
10020
- "role": role.value,
9928
+ "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
10021
9929
  "onClick": onClick,
10022
9930
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
10023
9931
  }, link.linkProps), {
@@ -10519,7 +10427,6 @@
10519
10427
  const activeColor = vue.toRef(() => props.activeColor);
10520
10428
  const baseColor = vue.toRef(() => props.baseColor);
10521
10429
  const color = vue.toRef(() => props.color);
10522
- const isSelectable = vue.toRef(() => props.selectable || props.activatable);
10523
10430
  createList({
10524
10431
  filterable: props.filterable
10525
10432
  });
@@ -10591,7 +10498,7 @@
10591
10498
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
10592
10499
  "style": vue.normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
10593
10500
  "tabindex": props.disabled ? -1 : 0,
10594
- "role": isSelectable.value ? 'listbox' : 'list',
10501
+ "role": "listbox",
10595
10502
  "aria-activedescendant": undefined,
10596
10503
  "onFocusin": onFocusin,
10597
10504
  "onFocusout": onFocusout,
@@ -13661,7 +13568,6 @@
13661
13568
  "onKeydown": onListKeydown,
13662
13569
  "onFocusin": onFocusin,
13663
13570
  "tabindex": "-1",
13664
- "selectable": true,
13665
13571
  "aria-live": "polite",
13666
13572
  "aria-label": `${props.label}-list`,
13667
13573
  "color": props.itemColor ?? props.color
@@ -14281,7 +14187,6 @@
14281
14187
  "onFocusin": onFocusin,
14282
14188
  "onFocusout": onFocusout,
14283
14189
  "tabindex": "-1",
14284
- "selectable": true,
14285
14190
  "aria-live": "polite",
14286
14191
  "color": props.itemColor ?? props.color
14287
14192
  }, listEvents, props.listProps), {
@@ -19369,7 +19274,6 @@
19369
19274
  "selected": selectedValues.value,
19370
19275
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
19371
19276
  "onMousedown": e => e.preventDefault(),
19372
- "selectable": true,
19373
19277
  "onKeydown": onListKeydown,
19374
19278
  "onFocusin": onFocusin,
19375
19279
  "onFocusout": onFocusout,
@@ -24468,42 +24372,6 @@
24468
24372
  return item.isDirectory ? `${path}/${item.name}` : path;
24469
24373
  }
24470
24374
 
24471
- // Utilities
24472
- // Composables
24473
- const makeFileFilterProps = propsFactory({
24474
- filterByType: String
24475
- }, 'file-accept');
24476
- function useFileFilter(props) {
24477
- const fileFilter = vue.computed(() => props.filterByType ? createFilter(props.filterByType) : null);
24478
- function filterAccepted(files) {
24479
- if (fileFilter.value) {
24480
- const accepted = files.filter(fileFilter.value);
24481
- return {
24482
- accepted,
24483
- rejected: files.filter(f => !accepted.includes(f))
24484
- };
24485
- }
24486
- return {
24487
- accepted: files,
24488
- rejected: []
24489
- };
24490
- }
24491
- return {
24492
- filterAccepted
24493
- };
24494
- }
24495
- function createFilter(v) {
24496
- const types = v.split(',').map(x => x.trim().toLowerCase());
24497
- const extensionsToMatch = types.filter(x => x.startsWith('.'));
24498
- const wildcards = types.filter(x => x.endsWith('/*'));
24499
- const typesToMatch = types.filter(x => !extensionsToMatch.includes(x) && !wildcards.includes(x));
24500
- return file => {
24501
- const extension = file.name.split('.').at(-1)?.toLowerCase() ?? '';
24502
- const typeGroup = file.type.split('/').at(0)?.toLowerCase() ?? '';
24503
- return typesToMatch.includes(file.type) || extensionsToMatch.includes(`.${extension}`) || wildcards.includes(`${typeGroup}/*`);
24504
- };
24505
- }
24506
-
24507
24375
  // Types
24508
24376
 
24509
24377
  const makeVFileInputProps = propsFactory({
@@ -24536,7 +24404,6 @@
24536
24404
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
24537
24405
  }
24538
24406
  },
24539
- ...makeFileFilterProps(),
24540
24407
  ...makeVFieldProps({
24541
24408
  clearable: true
24542
24409
  })
@@ -24549,8 +24416,7 @@
24549
24416
  'click:control': e => true,
24550
24417
  'mousedown:control': e => true,
24551
24418
  'update:focused': focused => true,
24552
- 'update:modelValue': files => true,
24553
- rejected: files => true
24419
+ 'update:modelValue': files => true
24554
24420
  },
24555
24421
  setup(props, _ref) {
24556
24422
  let {
@@ -24561,9 +24427,6 @@
24561
24427
  const {
24562
24428
  t
24563
24429
  } = useLocale();
24564
- const {
24565
- filterAccepted
24566
- } = useFileFilter(props);
24567
24430
  const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => !props.multiple && Array.isArray(val) ? val[0] : val);
24568
24431
  const {
24569
24432
  isFocused,
@@ -24637,38 +24500,14 @@
24637
24500
  e.stopImmediatePropagation();
24638
24501
  isDragging.value = false;
24639
24502
  if (!inputRef.value || !hasFilesOrFolders(e)) return;
24640
- const allDroppedFiles = await handleDrop(e);
24641
- selectAccepted(allDroppedFiles);
24642
- }
24643
- function onFileSelection(e) {
24644
- if (!e.target || e.repack) return; // prevent loop
24645
-
24646
- if (!props.filterByType) {
24647
- const target = e.target;
24648
- model.value = [...(target.files ?? [])];
24649
- } else {
24650
- selectAccepted([...e.target.files]);
24651
- }
24652
- }
24653
- function selectAccepted(files) {
24654
24503
  const dataTransfer = new DataTransfer();
24655
- const {
24656
- accepted,
24657
- rejected
24658
- } = filterAccepted(files);
24659
- if (rejected.length) {
24660
- emit('rejected', rejected);
24661
- }
24662
- for (const file of accepted) {
24504
+ for (const file of await handleDrop(e)) {
24663
24505
  dataTransfer.items.add(file);
24664
24506
  }
24665
24507
  inputRef.value.files = dataTransfer.files;
24666
- model.value = [...dataTransfer.files];
24667
- const event = new Event('change', {
24508
+ inputRef.value.dispatchEvent(new Event('change', {
24668
24509
  bubbles: true
24669
- });
24670
- event.repack = true;
24671
- inputRef.value.dispatchEvent(event);
24510
+ }));
24672
24511
  }
24673
24512
  vue.watch(model, newValue => {
24674
24513
  const hasModelReset = !Array.isArray(newValue) || !newValue.length;
@@ -24685,8 +24524,6 @@
24685
24524
  ...inputProps
24686
24525
  } = VInput.filterProps(props);
24687
24526
  const fieldProps = VField.filterProps(props);
24688
- const expectsDirectory = attrs.webkitdirectory !== undefined && attrs.webkitdirectory !== false;
24689
- const inputAccept = expectsDirectory ? undefined : props.filterByType ?? String(attrs.accept);
24690
24527
  return vue.createVNode(VInput, vue.mergeProps({
24691
24528
  "ref": vInputRef,
24692
24529
  "modelValue": props.multiple ? model.value : model.value[0],
@@ -24742,7 +24579,6 @@
24742
24579
  return vue.createElementVNode(vue.Fragment, null, [vue.createElementVNode("input", vue.mergeProps({
24743
24580
  "ref": inputRef,
24744
24581
  "type": "file",
24745
- "accept": inputAccept,
24746
24582
  "readonly": isReadonly.value,
24747
24583
  "disabled": isDisabled.value,
24748
24584
  "multiple": props.multiple,
@@ -24752,7 +24588,11 @@
24752
24588
  if (isReadonly.value) e.preventDefault();
24753
24589
  onFocus();
24754
24590
  },
24755
- "onChange": onFileSelection,
24591
+ "onChange": e => {
24592
+ if (!e.target) return;
24593
+ const target = e.target;
24594
+ model.value = [...(target.files ?? [])];
24595
+ },
24756
24596
  "onDragleave": onDragleave,
24757
24597
  "onFocus": onFocus,
24758
24598
  "onBlur": blur
@@ -31548,7 +31388,7 @@
31548
31388
  };
31549
31389
  });
31550
31390
  }
31551
- const version$1 = "3.9.2-dev.2025-07-18";
31391
+ const version$1 = "3.9.2-master.2025-07-22";
31552
31392
  createVuetify$1.version = version$1;
31553
31393
 
31554
31394
  // Vue's inject() can only be used in setup
@@ -31573,7 +31413,7 @@
31573
31413
  ...options
31574
31414
  });
31575
31415
  };
31576
- const version = "3.9.2-dev.2025-07-18";
31416
+ const version = "3.9.2-master.2025-07-22";
31577
31417
  createVuetify.version = version;
31578
31418
 
31579
31419
  exports.blueprints = index;