@vuetify/nightly 3.8.0-beta.0-dev.2025-03-31 → 3.8.0-dev.2025-04-03

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 (61) hide show
  1. package/CHANGELOG.md +10 -96
  2. package/dist/json/attributes.json +3028 -3028
  3. package/dist/json/importMap-labs.json +32 -32
  4. package/dist/json/importMap.json +154 -154
  5. package/dist/json/web-types.json +5664 -5664
  6. package/dist/vuetify-labs.cjs +73 -67
  7. package/dist/vuetify-labs.css +3832 -3835
  8. package/dist/vuetify-labs.d.ts +110 -71
  9. package/dist/vuetify-labs.esm.js +73 -67
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +73 -67
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +68 -58
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +4692 -4695
  16. package/dist/vuetify.d.ts +110 -71
  17. package/dist/vuetify.esm.js +68 -58
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +68 -58
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +88 -87
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VAutocomplete/VAutocomplete.css +0 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.js +16 -19
  26. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.sass +0 -1
  28. package/lib/components/VColorPicker/VColorPickerPreview.js +4 -3
  29. package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
  30. package/lib/components/VCombobox/VCombobox.css +0 -1
  31. package/lib/components/VCombobox/VCombobox.js +22 -20
  32. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  33. package/lib/components/VCombobox/VCombobox.sass +0 -1
  34. package/lib/components/VEmptyState/VEmptyState.js +3 -1
  35. package/lib/components/VEmptyState/VEmptyState.js.map +1 -1
  36. package/lib/components/VField/VField.d.ts +3 -0
  37. package/lib/components/VField/VField.js +3 -2
  38. package/lib/components/VField/VField.js.map +1 -1
  39. package/lib/components/VInput/VInput.css +11 -11
  40. package/lib/components/VInput/VInput.sass +1 -1
  41. package/lib/components/VNumberInput/VNumberInput.d.ts +39 -12
  42. package/lib/components/VSelect/VSelect.css +0 -1
  43. package/lib/components/VSelect/VSelect.js +11 -9
  44. package/lib/components/VSelect/VSelect.js.map +1 -1
  45. package/lib/components/VSelect/VSelect.sass +0 -1
  46. package/lib/components/VTextField/VTextField.d.ts +12 -3
  47. package/lib/composables/virtual.js +6 -1
  48. package/lib/composables/virtual.js.map +1 -1
  49. package/lib/entry-bundler.js +1 -1
  50. package/lib/entry-bundler.js.map +1 -1
  51. package/lib/framework.d.ts +56 -56
  52. package/lib/framework.js +1 -1
  53. package/lib/framework.js.map +1 -1
  54. package/lib/labs/VDateInput/VDateInput.js +3 -8
  55. package/lib/labs/VDateInput/VDateInput.js.map +1 -1
  56. package/lib/labs/VFileUpload/VFileUpload.js +2 -1
  57. package/lib/labs/VFileUpload/VFileUpload.js.map +1 -1
  58. package/lib/util/helpers.d.ts +1 -2
  59. package/lib/util/helpers.js +1 -11
  60. package/lib/util/helpers.js.map +1 -1
  61. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.0-beta.0-dev.2025-03-31
2
+ * Vuetify v3.8.0-dev.2025-04-03
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -11732,7 +11732,7 @@ const VField = genericComponent()({
11732
11732
  return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
11733
11733
  });
11734
11734
  const iconColor = computed(() => {
11735
- if (!props.iconColor) return undefined;
11735
+ if (!props.iconColor || props.glow && !isFocused.value) return undefined;
11736
11736
  return props.iconColor === true ? color.value : props.iconColor;
11737
11737
  });
11738
11738
  const {
@@ -11930,7 +11930,8 @@ const VField = genericComponent()({
11930
11930
  })])]);
11931
11931
  });
11932
11932
  return {
11933
- controlRef
11933
+ controlRef,
11934
+ fieldIconColor: iconColor
11934
11935
  };
11935
11936
  }
11936
11937
  });
@@ -12280,7 +12281,12 @@ function useVirtual(props, items) {
12280
12281
  }
12281
12282
  function calculateOffset(index) {
12282
12283
  index = clamp(index, 0, items.value.length - 1);
12283
- return offsets[index] || 0;
12284
+ const whole = Math.floor(index);
12285
+ const fraction = index % 1;
12286
+ const next = whole + 1;
12287
+ const wholeOffset = offsets[whole] || 0;
12288
+ const nextOffset = offsets[next] || wholeOffset;
12289
+ return wholeOffset + (nextOffset - wholeOffset) * fraction;
12284
12290
  }
12285
12291
  function calculateIndex(scrollTop) {
12286
12292
  return binaryClosest(offsets, scrollTop);
@@ -12668,14 +12674,6 @@ const VSelect = genericComponent()({
12668
12674
  const vTextFieldRef = ref();
12669
12675
  const vMenuRef = ref();
12670
12676
  const vVirtualScrollRef = ref();
12671
- const _menu = useProxiedModel(props, 'menu');
12672
- const menu = computed({
12673
- get: () => _menu.value,
12674
- set: v => {
12675
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12676
- _menu.value = v;
12677
- }
12678
- });
12679
12677
  const {
12680
12678
  items,
12681
12679
  transformIn,
@@ -12691,7 +12689,6 @@ const VSelect = genericComponent()({
12691
12689
  const form = useForm(props);
12692
12690
  const selectedValues = computed(() => model.value.map(selection => selection.value));
12693
12691
  const isFocused = shallowRef(false);
12694
- const label = computed(() => menu.value ? props.closeText : props.openText);
12695
12692
  let keyboardLookupPrefix = '';
12696
12693
  let keyboardLookupLastTime;
12697
12694
  const displayItems = computed(() => {
@@ -12701,6 +12698,16 @@ const VSelect = genericComponent()({
12701
12698
  return items.value;
12702
12699
  });
12703
12700
  const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
12701
+ const _menu = useProxiedModel(props, 'menu');
12702
+ const menu = computed({
12703
+ get: () => _menu.value,
12704
+ set: v => {
12705
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12706
+ if (v && menuDisabled.value) return;
12707
+ _menu.value = v;
12708
+ }
12709
+ });
12710
+ const label = computed(() => menu.value ? props.closeText : props.openText);
12704
12711
  const computedMenuProps = computed(() => {
12705
12712
  return {
12706
12713
  ...props.menuProps,
@@ -12996,6 +13003,7 @@ const VSelect = genericComponent()({
12996
13003
  }
12997
13004
  return createVNode(Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? createVNode(VIcon, {
12998
13005
  "class": "v-select__menu-icon",
13006
+ "color": vTextFieldRef.value?.fieldIconColor,
12999
13007
  "icon": props.menuIcon
13000
13008
  }, null) : undefined]);
13001
13009
  }
@@ -13199,17 +13207,8 @@ const VAutocomplete = genericComponent()({
13199
13207
  const listHasFocus = shallowRef(false);
13200
13208
  const vMenuRef = ref();
13201
13209
  const vVirtualScrollRef = ref();
13202
- const _menu = useProxiedModel(props, 'menu');
13203
- const menu = computed({
13204
- get: () => _menu.value,
13205
- set: v => {
13206
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13207
- _menu.value = v;
13208
- }
13209
- });
13210
13210
  const selectionIndex = shallowRef(-1);
13211
13211
  const color = computed(() => vTextFieldRef.value?.color);
13212
- const label = computed(() => menu.value ? props.closeText : props.openText);
13213
13212
  const {
13214
13213
  items,
13215
13214
  transformIn,
@@ -13246,6 +13245,16 @@ const VAutocomplete = genericComponent()({
13246
13245
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
13247
13246
  });
13248
13247
  const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
13248
+ const _menu = useProxiedModel(props, 'menu');
13249
+ const menu = computed({
13250
+ get: () => _menu.value,
13251
+ set: v => {
13252
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13253
+ if (v && menuDisabled.value) return;
13254
+ _menu.value = v;
13255
+ }
13256
+ });
13257
+ const label = computed(() => menu.value ? props.closeText : props.openText);
13249
13258
  const listRef = ref();
13250
13259
  const listEvents = useScrolling(listRef, vTextFieldRef);
13251
13260
  function onClear(e) {
@@ -13402,12 +13411,7 @@ const VAutocomplete = genericComponent()({
13402
13411
  } else {
13403
13412
  if (!props.multiple && search.value == null) model.value = [];
13404
13413
  menu.value = false;
13405
- if (!model.value.some(_ref3 => {
13406
- let {
13407
- title
13408
- } = _ref3;
13409
- return title === search.value;
13410
- })) search.value = '';
13414
+ if (props.multiple || hasSelectionSlot.value) search.value = '';
13411
13415
  selectionIndex.value = -1;
13412
13416
  }
13413
13417
  });
@@ -13495,12 +13499,12 @@ const VAutocomplete = genericComponent()({
13495
13499
  "items": displayItems.value,
13496
13500
  "itemKey": "value"
13497
13501
  }, {
13498
- default: _ref4 => {
13502
+ default: _ref3 => {
13499
13503
  let {
13500
13504
  item,
13501
13505
  index,
13502
13506
  itemRef
13503
- } = _ref4;
13507
+ } = _ref3;
13504
13508
  const itemProps = mergeProps(item.props, {
13505
13509
  ref: itemRef,
13506
13510
  key: item.value,
@@ -13514,10 +13518,10 @@ const VAutocomplete = genericComponent()({
13514
13518
  }) ?? createVNode(VListItem, mergeProps(itemProps, {
13515
13519
  "role": "option"
13516
13520
  }), {
13517
- prepend: _ref5 => {
13521
+ prepend: _ref4 => {
13518
13522
  let {
13519
13523
  isSelected
13520
- } = _ref5;
13524
+ } = _ref4;
13521
13525
  return createVNode(Fragment, null, [props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
13522
13526
  "key": item.value,
13523
13527
  "modelValue": isSelected,
@@ -13600,6 +13604,7 @@ const VAutocomplete = genericComponent()({
13600
13604
  }
13601
13605
  return createVNode(Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? createVNode(VIcon, {
13602
13606
  "class": "v-autocomplete__menu-icon",
13607
+ "color": vTextFieldRef.value?.fieldIconColor,
13603
13608
  "icon": props.menuIcon,
13604
13609
  "onMousedown": onMousedownMenuIcon,
13605
13610
  "onClick": noop,
@@ -16386,7 +16391,7 @@ const VColorPickerPreview = defineComponent({
16386
16391
  const abortController = new AbortController();
16387
16392
  onUnmounted(() => abortController.abort());
16388
16393
  async function openEyeDropper() {
16389
- if (!SUPPORTS_EYE_DROPPER) return;
16394
+ if (!SUPPORTS_EYE_DROPPER || props.disabled) return;
16390
16395
  const eyeDropper = new window.EyeDropper();
16391
16396
  try {
16392
16397
  const result = await eyeDropper.open({
@@ -16408,10 +16413,11 @@ const VColorPickerPreview = defineComponent({
16408
16413
  "class": "v-color-picker-preview__eye-dropper",
16409
16414
  "key": "eyeDropper"
16410
16415
  }, [createVNode(VBtn, {
16411
- "onClick": openEyeDropper,
16416
+ "density": "comfortable",
16417
+ "disabled": props.disabled,
16412
16418
  "icon": "$eyeDropper",
16413
16419
  "variant": "plain",
16414
- "density": "comfortable"
16420
+ "onClick": openEyeDropper
16415
16421
  }, null)]), createVNode("div", {
16416
16422
  "class": "v-color-picker-preview__dot"
16417
16423
  }, [createVNode("div", {
@@ -17968,18 +17974,9 @@ const VCombobox = genericComponent()({
17968
17974
  const listHasFocus = shallowRef(false);
17969
17975
  const vMenuRef = ref();
17970
17976
  const vVirtualScrollRef = ref();
17971
- const _menu = useProxiedModel(props, 'menu');
17972
- const menu = computed({
17973
- get: () => _menu.value,
17974
- set: v => {
17975
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
17976
- _menu.value = v;
17977
- }
17978
- });
17979
17977
  const selectionIndex = shallowRef(-1);
17980
17978
  let cleared = false;
17981
17979
  const color = computed(() => vTextFieldRef.value?.color);
17982
- const label = computed(() => menu.value ? props.closeText : props.openText);
17983
17980
  const {
17984
17981
  items,
17985
17982
  transformIn,
@@ -18023,6 +18020,27 @@ const VCombobox = genericComponent()({
18023
18020
  const counterValue = computed(() => {
18024
18021
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : props.multiple ? model.value.length : search.value.length;
18025
18022
  });
18023
+ const {
18024
+ filteredItems,
18025
+ getMatches
18026
+ } = useFilter(props, items, () => isPristine.value ? '' : search.value);
18027
+ const displayItems = computed(() => {
18028
+ if (props.hideSelected) {
18029
+ return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
18030
+ }
18031
+ return filteredItems.value;
18032
+ });
18033
+ const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
18034
+ const _menu = useProxiedModel(props, 'menu');
18035
+ const menu = computed({
18036
+ get: () => _menu.value,
18037
+ set: v => {
18038
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
18039
+ if (v && menuDisabled.value) return;
18040
+ _menu.value = v;
18041
+ }
18042
+ });
18043
+ const label = computed(() => menu.value ? props.closeText : props.openText);
18026
18044
  watch(_search, value => {
18027
18045
  if (cleared) {
18028
18046
  // wait for clear to finish, VTextField sets _search to null
@@ -18038,22 +18056,11 @@ const VCombobox = genericComponent()({
18038
18056
  _search.value = value[0]?.title ?? '';
18039
18057
  }
18040
18058
  });
18041
- const {
18042
- filteredItems,
18043
- getMatches
18044
- } = useFilter(props, items, () => isPristine.value ? '' : search.value);
18045
- const displayItems = computed(() => {
18046
- if (props.hideSelected) {
18047
- return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
18048
- }
18049
- return filteredItems.value;
18050
- });
18051
18059
  const selectedValues = computed(() => model.value.map(selection => selection.value));
18052
18060
  const highlightFirst = computed(() => {
18053
18061
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
18054
18062
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
18055
18063
  });
18056
- const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
18057
18064
  const listRef = ref();
18058
18065
  const listEvents = useScrolling(listRef, vTextFieldRef);
18059
18066
  function onClear(e) {
@@ -18404,6 +18411,7 @@ const VCombobox = genericComponent()({
18404
18411
  }
18405
18412
  return createVNode(Fragment, null, [slots['append-inner']?.(...args), (!props.hideNoData || props.items.length) && props.menuIcon ? createVNode(VIcon, {
18406
18413
  "class": "v-combobox__menu-icon",
18414
+ "color": vTextFieldRef.value?.fieldIconColor,
18407
18415
  "icon": props.menuIcon,
18408
18416
  "onMousedown": onMousedownMenuIcon,
18409
18417
  "onClick": noop,
@@ -22796,7 +22804,9 @@ const VEmptyState = genericComponent()({
22796
22804
  VBtn: {
22797
22805
  class: 'v-empty-state__action-btn',
22798
22806
  color: props.color ?? 'surface-variant',
22799
- text: props.actionText
22807
+ href: props.href,
22808
+ text: props.actionText,
22809
+ to: props.to
22800
22810
  }
22801
22811
  }
22802
22812
  }, {
@@ -28987,7 +28997,7 @@ const VDateInput = genericComponent()({
28987
28997
  const adapter = useDate();
28988
28998
  const {
28989
28999
  mobile
28990
- } = useDisplay();
29000
+ } = useDisplay(props);
28991
29001
  const {
28992
29002
  isFocused,
28993
29003
  focus,
@@ -29037,7 +29047,7 @@ const VDateInput = genericComponent()({
29037
29047
  return;
29038
29048
  }
29039
29049
  const target = e.target;
29040
- model.value = target.value === '' ? null : target.value;
29050
+ model.value = adapter.isValid(target.value) ? target.value : null;
29041
29051
  }
29042
29052
  function onClick(e) {
29043
29053
  e.preventDefault();
@@ -29061,10 +29071,6 @@ const VDateInput = genericComponent()({
29061
29071
  if (value != null) return;
29062
29072
  model.value = null;
29063
29073
  }
29064
- function onUpdateMenuModel(isMenuOpen) {
29065
- if (isMenuOpen) return;
29066
- isEditingInput.value = false;
29067
- }
29068
29074
  function onBlur() {
29069
29075
  blur();
29070
29076
 
@@ -29097,7 +29103,7 @@ const VDateInput = genericComponent()({
29097
29103
  ...slots,
29098
29104
  default: () => createVNode(Fragment, null, [createVNode(VMenu, {
29099
29105
  "modelValue": menu.value,
29100
- "onUpdate:modelValue": [$event => menu.value = $event, onUpdateMenuModel],
29106
+ "onUpdate:modelValue": $event => menu.value = $event,
29101
29107
  "activator": "parent",
29102
29108
  "min-width": "0",
29103
29109
  "eager": isFocused.value,
@@ -29130,7 +29136,6 @@ const VDateInput = genericComponent()({
29130
29136
  }
29131
29137
  }
29132
29138
  emit('save', value);
29133
- vDateInputRef.value?.blur();
29134
29139
  disabledActions.value = [];
29135
29140
  }
29136
29141
  return createVNode(VDatePicker, mergeProps(datePickerProps, {
@@ -29378,7 +29383,8 @@ const VFileUpload = genericComponent()({
29378
29383
  'v-file-upload--clickable': !hasBrowse,
29379
29384
  'v-file-upload--disabled': props.disabled,
29380
29385
  'v-file-upload--dragging': dragOver.value
29381
- }, densityClasses.value],
29386
+ }, densityClasses.value, props.class],
29387
+ "style": [props.style],
29382
29388
  "onDragleave": onDragLeave,
29383
29389
  "onDragover": onDragOver,
29384
29390
  "onDrop": onDrop,
@@ -31536,7 +31542,7 @@ function createVuetify$1() {
31536
31542
  };
31537
31543
  });
31538
31544
  }
31539
- const version$1 = "3.8.0-beta.0-dev.2025-03-31";
31545
+ const version$1 = "3.8.0-dev.2025-04-03";
31540
31546
  createVuetify$1.version = version$1;
31541
31547
 
31542
31548
  // Vue's inject() can only be used in setup
@@ -31821,7 +31827,7 @@ var index = /*#__PURE__*/Object.freeze({
31821
31827
 
31822
31828
  /* eslint-disable local-rules/sort-imports */
31823
31829
 
31824
- const version = "3.8.0-beta.0-dev.2025-03-31";
31830
+ const version = "3.8.0-dev.2025-04-03";
31825
31831
 
31826
31832
  /* eslint-disable local-rules/sort-imports */
31827
31833