@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
  */
@@ -11997,7 +11997,7 @@ const VField = genericComponent()({
11997
11997
  return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
11998
11998
  });
11999
11999
  const iconColor = computed(() => {
12000
- if (!props.iconColor) return undefined;
12000
+ if (!props.iconColor || props.glow && !isFocused.value) return undefined;
12001
12001
  return props.iconColor === true ? color.value : props.iconColor;
12002
12002
  });
12003
12003
  const {
@@ -12195,7 +12195,8 @@ const VField = genericComponent()({
12195
12195
  })])]);
12196
12196
  });
12197
12197
  return {
12198
- controlRef
12198
+ controlRef,
12199
+ fieldIconColor: iconColor
12199
12200
  };
12200
12201
  }
12201
12202
  });
@@ -12545,7 +12546,12 @@ function useVirtual(props, items) {
12545
12546
  }
12546
12547
  function calculateOffset(index) {
12547
12548
  index = clamp(index, 0, items.value.length - 1);
12548
- return offsets[index] || 0;
12549
+ const whole = Math.floor(index);
12550
+ const fraction = index % 1;
12551
+ const next = whole + 1;
12552
+ const wholeOffset = offsets[whole] || 0;
12553
+ const nextOffset = offsets[next] || wholeOffset;
12554
+ return wholeOffset + (nextOffset - wholeOffset) * fraction;
12549
12555
  }
12550
12556
  function calculateIndex(scrollTop) {
12551
12557
  return binaryClosest(offsets, scrollTop);
@@ -12933,14 +12939,6 @@ const VSelect = genericComponent()({
12933
12939
  const vTextFieldRef = ref();
12934
12940
  const vMenuRef = ref();
12935
12941
  const vVirtualScrollRef = ref();
12936
- const _menu = useProxiedModel(props, 'menu');
12937
- const menu = computed({
12938
- get: () => _menu.value,
12939
- set: v => {
12940
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12941
- _menu.value = v;
12942
- }
12943
- });
12944
12942
  const {
12945
12943
  items,
12946
12944
  transformIn,
@@ -12956,7 +12954,6 @@ const VSelect = genericComponent()({
12956
12954
  const form = useForm(props);
12957
12955
  const selectedValues = computed(() => model.value.map(selection => selection.value));
12958
12956
  const isFocused = shallowRef(false);
12959
- const label = computed(() => menu.value ? props.closeText : props.openText);
12960
12957
  let keyboardLookupPrefix = '';
12961
12958
  let keyboardLookupLastTime;
12962
12959
  const displayItems = computed(() => {
@@ -12966,6 +12963,16 @@ const VSelect = genericComponent()({
12966
12963
  return items.value;
12967
12964
  });
12968
12965
  const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
12966
+ const _menu = useProxiedModel(props, 'menu');
12967
+ const menu = computed({
12968
+ get: () => _menu.value,
12969
+ set: v => {
12970
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12971
+ if (v && menuDisabled.value) return;
12972
+ _menu.value = v;
12973
+ }
12974
+ });
12975
+ const label = computed(() => menu.value ? props.closeText : props.openText);
12969
12976
  const computedMenuProps = computed(() => {
12970
12977
  return {
12971
12978
  ...props.menuProps,
@@ -13261,6 +13268,7 @@ const VSelect = genericComponent()({
13261
13268
  }
13262
13269
  return createVNode(Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? createVNode(VIcon, {
13263
13270
  "class": "v-select__menu-icon",
13271
+ "color": vTextFieldRef.value?.fieldIconColor,
13264
13272
  "icon": props.menuIcon
13265
13273
  }, null) : undefined]);
13266
13274
  }
@@ -13464,17 +13472,8 @@ const VAutocomplete = genericComponent()({
13464
13472
  const listHasFocus = shallowRef(false);
13465
13473
  const vMenuRef = ref();
13466
13474
  const vVirtualScrollRef = ref();
13467
- const _menu = useProxiedModel(props, 'menu');
13468
- const menu = computed({
13469
- get: () => _menu.value,
13470
- set: v => {
13471
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13472
- _menu.value = v;
13473
- }
13474
- });
13475
13475
  const selectionIndex = shallowRef(-1);
13476
13476
  const color = computed(() => vTextFieldRef.value?.color);
13477
- const label = computed(() => menu.value ? props.closeText : props.openText);
13478
13477
  const {
13479
13478
  items,
13480
13479
  transformIn,
@@ -13511,6 +13510,16 @@ const VAutocomplete = genericComponent()({
13511
13510
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
13512
13511
  });
13513
13512
  const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
13513
+ const _menu = useProxiedModel(props, 'menu');
13514
+ const menu = computed({
13515
+ get: () => _menu.value,
13516
+ set: v => {
13517
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13518
+ if (v && menuDisabled.value) return;
13519
+ _menu.value = v;
13520
+ }
13521
+ });
13522
+ const label = computed(() => menu.value ? props.closeText : props.openText);
13514
13523
  const listRef = ref();
13515
13524
  const listEvents = useScrolling(listRef, vTextFieldRef);
13516
13525
  function onClear(e) {
@@ -13667,12 +13676,7 @@ const VAutocomplete = genericComponent()({
13667
13676
  } else {
13668
13677
  if (!props.multiple && search.value == null) model.value = [];
13669
13678
  menu.value = false;
13670
- if (!model.value.some(_ref3 => {
13671
- let {
13672
- title
13673
- } = _ref3;
13674
- return title === search.value;
13675
- })) search.value = '';
13679
+ if (props.multiple || hasSelectionSlot.value) search.value = '';
13676
13680
  selectionIndex.value = -1;
13677
13681
  }
13678
13682
  });
@@ -13760,12 +13764,12 @@ const VAutocomplete = genericComponent()({
13760
13764
  "items": displayItems.value,
13761
13765
  "itemKey": "value"
13762
13766
  }, {
13763
- default: _ref4 => {
13767
+ default: _ref3 => {
13764
13768
  let {
13765
13769
  item,
13766
13770
  index,
13767
13771
  itemRef
13768
- } = _ref4;
13772
+ } = _ref3;
13769
13773
  const itemProps = mergeProps(item.props, {
13770
13774
  ref: itemRef,
13771
13775
  key: item.value,
@@ -13779,10 +13783,10 @@ const VAutocomplete = genericComponent()({
13779
13783
  }) ?? createVNode(VListItem, mergeProps(itemProps, {
13780
13784
  "role": "option"
13781
13785
  }), {
13782
- prepend: _ref5 => {
13786
+ prepend: _ref4 => {
13783
13787
  let {
13784
13788
  isSelected
13785
- } = _ref5;
13789
+ } = _ref4;
13786
13790
  return createVNode(Fragment, null, [props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
13787
13791
  "key": item.value,
13788
13792
  "modelValue": isSelected,
@@ -13865,6 +13869,7 @@ const VAutocomplete = genericComponent()({
13865
13869
  }
13866
13870
  return createVNode(Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? createVNode(VIcon, {
13867
13871
  "class": "v-autocomplete__menu-icon",
13872
+ "color": vTextFieldRef.value?.fieldIconColor,
13868
13873
  "icon": props.menuIcon,
13869
13874
  "onMousedown": onMousedownMenuIcon,
13870
13875
  "onClick": noop,
@@ -16651,7 +16656,7 @@ const VColorPickerPreview = defineComponent({
16651
16656
  const abortController = new AbortController();
16652
16657
  onUnmounted(() => abortController.abort());
16653
16658
  async function openEyeDropper() {
16654
- if (!SUPPORTS_EYE_DROPPER) return;
16659
+ if (!SUPPORTS_EYE_DROPPER || props.disabled) return;
16655
16660
  const eyeDropper = new window.EyeDropper();
16656
16661
  try {
16657
16662
  const result = await eyeDropper.open({
@@ -16673,10 +16678,11 @@ const VColorPickerPreview = defineComponent({
16673
16678
  "class": "v-color-picker-preview__eye-dropper",
16674
16679
  "key": "eyeDropper"
16675
16680
  }, [createVNode(VBtn, {
16676
- "onClick": openEyeDropper,
16681
+ "density": "comfortable",
16682
+ "disabled": props.disabled,
16677
16683
  "icon": "$eyeDropper",
16678
16684
  "variant": "plain",
16679
- "density": "comfortable"
16685
+ "onClick": openEyeDropper
16680
16686
  }, null)]), createVNode("div", {
16681
16687
  "class": "v-color-picker-preview__dot"
16682
16688
  }, [createVNode("div", {
@@ -18233,18 +18239,9 @@ const VCombobox = genericComponent()({
18233
18239
  const listHasFocus = shallowRef(false);
18234
18240
  const vMenuRef = ref();
18235
18241
  const vVirtualScrollRef = ref();
18236
- const _menu = useProxiedModel(props, 'menu');
18237
- const menu = computed({
18238
- get: () => _menu.value,
18239
- set: v => {
18240
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
18241
- _menu.value = v;
18242
- }
18243
- });
18244
18242
  const selectionIndex = shallowRef(-1);
18245
18243
  let cleared = false;
18246
18244
  const color = computed(() => vTextFieldRef.value?.color);
18247
- const label = computed(() => menu.value ? props.closeText : props.openText);
18248
18245
  const {
18249
18246
  items,
18250
18247
  transformIn,
@@ -18288,6 +18285,27 @@ const VCombobox = genericComponent()({
18288
18285
  const counterValue = computed(() => {
18289
18286
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : props.multiple ? model.value.length : search.value.length;
18290
18287
  });
18288
+ const {
18289
+ filteredItems,
18290
+ getMatches
18291
+ } = useFilter(props, items, () => isPristine.value ? '' : search.value);
18292
+ const displayItems = computed(() => {
18293
+ if (props.hideSelected) {
18294
+ return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
18295
+ }
18296
+ return filteredItems.value;
18297
+ });
18298
+ const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
18299
+ const _menu = useProxiedModel(props, 'menu');
18300
+ const menu = computed({
18301
+ get: () => _menu.value,
18302
+ set: v => {
18303
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
18304
+ if (v && menuDisabled.value) return;
18305
+ _menu.value = v;
18306
+ }
18307
+ });
18308
+ const label = computed(() => menu.value ? props.closeText : props.openText);
18291
18309
  watch(_search, value => {
18292
18310
  if (cleared) {
18293
18311
  // wait for clear to finish, VTextField sets _search to null
@@ -18303,22 +18321,11 @@ const VCombobox = genericComponent()({
18303
18321
  _search.value = value[0]?.title ?? '';
18304
18322
  }
18305
18323
  });
18306
- const {
18307
- filteredItems,
18308
- getMatches
18309
- } = useFilter(props, items, () => isPristine.value ? '' : search.value);
18310
- const displayItems = computed(() => {
18311
- if (props.hideSelected) {
18312
- return filteredItems.value.filter(filteredItem => !model.value.some(s => s.value === filteredItem.value));
18313
- }
18314
- return filteredItems.value;
18315
- });
18316
18324
  const selectedValues = computed(() => model.value.map(selection => selection.value));
18317
18325
  const highlightFirst = computed(() => {
18318
18326
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
18319
18327
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
18320
18328
  });
18321
- const menuDisabled = computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
18322
18329
  const listRef = ref();
18323
18330
  const listEvents = useScrolling(listRef, vTextFieldRef);
18324
18331
  function onClear(e) {
@@ -18669,6 +18676,7 @@ const VCombobox = genericComponent()({
18669
18676
  }
18670
18677
  return createVNode(Fragment, null, [slots['append-inner']?.(...args), (!props.hideNoData || props.items.length) && props.menuIcon ? createVNode(VIcon, {
18671
18678
  "class": "v-combobox__menu-icon",
18679
+ "color": vTextFieldRef.value?.fieldIconColor,
18672
18680
  "icon": props.menuIcon,
18673
18681
  "onMousedown": onMousedownMenuIcon,
18674
18682
  "onClick": noop,
@@ -23061,7 +23069,9 @@ const VEmptyState = genericComponent()({
23061
23069
  VBtn: {
23062
23070
  class: 'v-empty-state__action-btn',
23063
23071
  color: props.color ?? 'surface-variant',
23064
- text: props.actionText
23072
+ href: props.href,
23073
+ text: props.actionText,
23074
+ to: props.to
23065
23075
  }
23066
23076
  }
23067
23077
  }, {
@@ -29208,7 +29218,7 @@ function createVuetify$1() {
29208
29218
  };
29209
29219
  });
29210
29220
  }
29211
- const version$1 = "3.8.0-beta.0-dev.2025-03-31";
29221
+ const version$1 = "3.8.0-dev.2025-04-03";
29212
29222
  createVuetify$1.version = version$1;
29213
29223
 
29214
29224
  // Vue's inject() can only be used in setup
@@ -29233,7 +29243,7 @@ const createVuetify = function () {
29233
29243
  ...options
29234
29244
  });
29235
29245
  };
29236
- const version = "3.8.0-beta.0-dev.2025-03-31";
29246
+ const version = "3.8.0-dev.2025-04-03";
29237
29247
  createVuetify.version = version;
29238
29248
 
29239
29249
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };