@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.
Files changed (60) hide show
  1. package/CHANGELOG.md +6 -62
  2. package/dist/json/attributes.json +4301 -4281
  3. package/dist/json/importMap-labs.json +26 -26
  4. package/dist/json/importMap.json +188 -188
  5. package/dist/json/tags.json +5 -0
  6. package/dist/json/web-types.json +7597 -7527
  7. package/dist/vuetify-labs.cjs +228 -33
  8. package/dist/vuetify-labs.css +5466 -5464
  9. package/dist/vuetify-labs.d.ts +134 -71
  10. package/dist/vuetify-labs.esm.js +228 -33
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +228 -33
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +190 -24
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +5163 -5161
  17. package/dist/vuetify.d.ts +124 -71
  18. package/dist/vuetify.esm.js +190 -24
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +190 -24
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +731 -708
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.js +1 -0
  26. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  27. package/lib/components/VCombobox/VCombobox.js +11 -6
  28. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  29. package/lib/components/VFileInput/VFileInput.d.ts +15 -0
  30. package/lib/components/VFileInput/VFileInput.js +38 -9
  31. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  32. package/lib/components/VList/VList.js +2 -1
  33. package/lib/components/VList/VList.js.map +1 -1
  34. package/lib/components/VList/VListItem.js +7 -1
  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 +75 -0
  38. package/lib/components/VProgressLinear/VProgressLinear.js +32 -6
  39. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  40. package/lib/components/VProgressLinear/VProgressLinear.sass +1 -1
  41. package/lib/components/VProgressLinear/chunks.d.ts +55 -0
  42. package/lib/components/VProgressLinear/chunks.js +62 -0
  43. package/lib/components/VProgressLinear/chunks.js.map +1 -0
  44. package/lib/components/VSelect/VSelect.js +1 -0
  45. package/lib/components/VSelect/VSelect.js.map +1 -1
  46. package/lib/composables/fileFilter.d.ts +18 -0
  47. package/lib/composables/fileFilter.js +38 -0
  48. package/lib/composables/fileFilter.js.map +1 -0
  49. package/lib/composables/theme.d.ts +1 -0
  50. package/lib/composables/theme.js +3 -1
  51. package/lib/composables/theme.js.map +1 -1
  52. package/lib/entry-bundler.js +1 -1
  53. package/lib/entry-bundler.js.map +1 -1
  54. package/lib/framework.d.ts +72 -71
  55. package/lib/framework.js +1 -1
  56. package/lib/framework.js.map +1 -1
  57. package/lib/labs/VFileUpload/VFileUpload.d.ts +15 -0
  58. package/lib/labs/VFileUpload/VFileUpload.js +39 -9
  59. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  60. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.2-master.2025-07-29
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": intersectionRef,
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(normalizedBuffer.value, '%')
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(normalizedValue.value, '%')
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": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
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": "listbox",
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 values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
19144
+ const signsToMatch = props.delimiters.map(escapeForRegex).join('|');
19145
+ const values = val.split(new RegExp(`(?:${signsToMatch})+`));
19048
19146
  if (values.length > 1) {
19049
- values.forEach(v => {
19147
+ for (let v of values) {
19050
19148
  v = v.trim();
19051
- if (v) select(transformItem$3(props, 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
- for (const file of await handleDrop(e)) {
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
- inputRef.value.dispatchEvent(new Event('change', {
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": e => {
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.2-master.2025-07-29";
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.2-master.2025-07-29";
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 };