@vuetify/nightly 3.6.13-3.7.0-beta.0.0-dev.2024-07-24 → 3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce

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 (58) hide show
  1. package/dist/json/attributes.json +107 -99
  2. package/dist/json/importMap-labs.json +12 -12
  3. package/dist/json/importMap.json +116 -116
  4. package/dist/json/tags.json +2 -0
  5. package/dist/json/web-types.json +212 -193
  6. package/dist/vuetify-labs.css +1815 -1815
  7. package/dist/vuetify-labs.d.ts +196 -109
  8. package/dist/vuetify-labs.esm.js +89 -43
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +89 -43
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +1373 -1373
  13. package/dist/vuetify.d.ts +237 -150
  14. package/dist/vuetify.esm.js +89 -43
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +89 -43
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +1004 -1004
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +15 -8
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VAutocomplete/index.d.mts +42 -24
  24. package/lib/components/VCombobox/VCombobox.mjs +15 -8
  25. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  26. package/lib/components/VCombobox/index.d.mts +42 -24
  27. package/lib/components/VDialog/index.d.mts +3 -3
  28. package/lib/components/VMenu/VMenu.mjs +27 -6
  29. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  30. package/lib/components/VMenu/index.d.mts +30 -15
  31. package/lib/components/VOverlay/VOverlay.mjs +5 -4
  32. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  33. package/lib/components/VOverlay/useActivator.mjs +3 -2
  34. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  35. package/lib/components/VSelect/VSelect.mjs +15 -13
  36. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  37. package/lib/components/VSelect/index.d.mts +42 -24
  38. package/lib/components/VSelect/useScrolling.mjs +3 -3
  39. package/lib/components/VSelect/useScrolling.mjs.map +1 -1
  40. package/lib/components/VSnackbar/index.d.mts +3 -3
  41. package/lib/components/VSpeedDial/index.d.mts +28 -13
  42. package/lib/components/VTooltip/index.d.mts +3 -3
  43. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +2 -0
  44. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  45. package/lib/components/VVirtualScroll/index.d.mts +3 -0
  46. package/lib/components/index.d.mts +196 -109
  47. package/lib/composables/virtual.mjs +1 -0
  48. package/lib/composables/virtual.mjs.map +1 -1
  49. package/lib/entry-bundler.mjs +1 -1
  50. package/lib/entry-bundler.mjs.map +1 -1
  51. package/lib/framework.mjs +1 -1
  52. package/lib/framework.mjs.map +1 -1
  53. package/lib/index.d.mts +41 -41
  54. package/lib/labs/VSnackbarQueue/index.d.mts +3 -3
  55. package/lib/labs/components.d.mts +3 -3
  56. package/lib/util/helpers.mjs +5 -0
  57. package/lib/util/helpers.mjs.map +1 -1
  58. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.6.13-3.7.0-beta.0.0-dev.2024-07-24
2
+ * Vuetify v3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -579,6 +579,11 @@
579
579
  });
580
580
  return fn;
581
581
  }
582
+ function checkPrintable(e) {
583
+ const isPrintableChar = e.key.length === 1;
584
+ const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
585
+ return isPrintableChar && noModifier;
586
+ }
582
587
 
583
588
  // Utilities
584
589
  const block = ['top', 'bottom'];
@@ -10280,7 +10285,8 @@
10280
10285
  function useActivator(props, _ref) {
10281
10286
  let {
10282
10287
  isActive,
10283
- isTop
10288
+ isTop,
10289
+ contentEl
10284
10290
  } = _ref;
10285
10291
  const vm = getCurrentInstance('useActivator');
10286
10292
  const activatorEl = vue.ref();
@@ -10397,7 +10403,7 @@
10397
10403
  return events;
10398
10404
  });
10399
10405
  vue.watch(isTop, val => {
10400
- if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))) {
10406
+ if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(document.activeElement)) {
10401
10407
  isActive.value = false;
10402
10408
  }
10403
10409
  });
@@ -10803,6 +10809,9 @@
10803
10809
  attrs,
10804
10810
  emit
10805
10811
  } = _ref;
10812
+ const root = vue.ref();
10813
+ const scrimEl = vue.ref();
10814
+ const contentEl = vue.ref();
10806
10815
  const model = useProxiedModel(props, 'modelValue');
10807
10816
  const isActive = vue.computed({
10808
10817
  get: () => model.value,
@@ -10840,7 +10849,8 @@
10840
10849
  scrimEvents
10841
10850
  } = useActivator(props, {
10842
10851
  isActive,
10843
- isTop: localTop
10852
+ isTop: localTop,
10853
+ contentEl
10844
10854
  });
10845
10855
  const {
10846
10856
  teleportTarget
@@ -10861,9 +10871,6 @@
10861
10871
  vue.watch(() => props.disabled, v => {
10862
10872
  if (v) isActive.value = false;
10863
10873
  });
10864
- const root = vue.ref();
10865
- const scrimEl = vue.ref();
10866
- const contentEl = vue.ref();
10867
10874
  const {
10868
10875
  contentStyles,
10869
10876
  updateLocation
@@ -11114,10 +11121,12 @@
11114
11121
  // TODO
11115
11122
  // disableKeys: Boolean,
11116
11123
  id: String,
11124
+ submenu: Boolean,
11117
11125
  ...omit(makeVOverlayProps({
11118
11126
  closeDelay: 250,
11119
11127
  closeOnContentClick: true,
11120
11128
  locationStrategy: 'connected',
11129
+ location: undefined,
11121
11130
  openDelay: 300,
11122
11131
  scrim: false,
11123
11132
  scrollStrategy: 'reposition',
@@ -11140,27 +11149,32 @@
11140
11149
  const {
11141
11150
  scopeId
11142
11151
  } = useScopeId();
11152
+ const {
11153
+ isRtl
11154
+ } = useRtl();
11143
11155
  const uid = getUid();
11144
11156
  const id = vue.computed(() => props.id || `v-menu-${uid}`);
11145
11157
  const overlay = vue.ref();
11146
11158
  const parent = vue.inject(VMenuSymbol, null);
11147
- const openChildren = vue.shallowRef(0);
11159
+ const openChildren = vue.shallowRef(new Set());
11148
11160
  vue.provide(VMenuSymbol, {
11149
11161
  register() {
11150
- ++openChildren.value;
11162
+ openChildren.value.add(uid);
11151
11163
  },
11152
11164
  unregister() {
11153
- --openChildren.value;
11165
+ openChildren.value.delete(uid);
11154
11166
  },
11155
11167
  closeParents(e) {
11156
11168
  setTimeout(() => {
11157
- if (!openChildren.value && !props.persistent && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
11169
+ if (!openChildren.value.size && !props.persistent && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
11158
11170
  isActive.value = false;
11159
11171
  parent?.closeParents();
11160
11172
  }
11161
11173
  }, 40);
11162
11174
  }
11163
11175
  });
11176
+ vue.onBeforeUnmount(() => parent?.unregister());
11177
+ vue.onDeactivated(() => isActive.value = false);
11164
11178
  async function onFocusIn(e) {
11165
11179
  const before = e.relatedTarget;
11166
11180
  const after = e.target;
@@ -11203,6 +11217,9 @@
11203
11217
  } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11204
11218
  isActive.value = false;
11205
11219
  parent?.closeParents();
11220
+ } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11221
+ isActive.value = false;
11222
+ overlay.value?.activatorEl?.focus();
11206
11223
  }
11207
11224
  }
11208
11225
  function onActivatorKeydown(e) {
@@ -11211,12 +11228,21 @@
11211
11228
  if (el && isActive.value) {
11212
11229
  if (e.key === 'ArrowDown') {
11213
11230
  e.preventDefault();
11231
+ e.stopImmediatePropagation();
11214
11232
  focusChild(el, 'next');
11215
11233
  } else if (e.key === 'ArrowUp') {
11216
11234
  e.preventDefault();
11235
+ e.stopImmediatePropagation();
11217
11236
  focusChild(el, 'prev');
11237
+ } else if (props.submenu) {
11238
+ if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11239
+ isActive.value = false;
11240
+ } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {
11241
+ e.preventDefault();
11242
+ focusChild(el, 'first');
11243
+ }
11218
11244
  }
11219
- } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
11245
+ } else if (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : ['ArrowDown', 'ArrowUp'].includes(e.key)) {
11220
11246
  isActive.value = true;
11221
11247
  e.preventDefault();
11222
11248
  setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
@@ -11240,6 +11266,7 @@
11240
11266
  "onUpdate:modelValue": $event => isActive.value = $event,
11241
11267
  "absolute": true,
11242
11268
  "activatorProps": activatorProps.value,
11269
+ "location": props.location ?? (props.submenu ? 'end' : 'bottom'),
11243
11270
  "onClick:outside": onClickOutside,
11244
11271
  "onKeydown": onKeydown
11245
11272
  }, scopeId), {
@@ -12072,6 +12099,7 @@
12072
12099
  deep: true
12073
12100
  });
12074
12101
  return {
12102
+ calculateVisibleItems,
12075
12103
  containerRef,
12076
12104
  markerRef,
12077
12105
  computedItems,
@@ -12135,6 +12163,7 @@
12135
12163
  dimensionStyles
12136
12164
  } = useDimension(props);
12137
12165
  const {
12166
+ calculateVisibleItems,
12138
12167
  containerRef,
12139
12168
  markerRef,
12140
12169
  handleScroll,
@@ -12206,6 +12235,7 @@
12206
12235
  }, [children])]);
12207
12236
  });
12208
12237
  return {
12238
+ calculateVisibleItems,
12209
12239
  scrollToIndex
12210
12240
  };
12211
12241
  }
@@ -12274,9 +12304,9 @@
12274
12304
  }
12275
12305
  }
12276
12306
  return {
12277
- onListScroll,
12278
- onListKeydown
12279
- };
12307
+ onScrollPassive: onListScroll,
12308
+ onKeydown: onListKeydown
12309
+ }; // typescript doesn't know about vue's event merging
12280
12310
  }
12281
12311
 
12282
12312
  // Types
@@ -12351,7 +12381,7 @@
12351
12381
  const menu = vue.computed({
12352
12382
  get: () => _menu.value,
12353
12383
  set: v => {
12354
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12384
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12355
12385
  _menu.value = v;
12356
12386
  }
12357
12387
  });
@@ -12390,10 +12420,7 @@
12390
12420
  };
12391
12421
  });
12392
12422
  const listRef = vue.ref();
12393
- const {
12394
- onListScroll,
12395
- onListKeydown
12396
- } = useScrolling(listRef, vTextFieldRef);
12423
+ const listEvents = useScrolling(listRef, vTextFieldRef);
12397
12424
  function onClear(e) {
12398
12425
  if (props.openOnClear) {
12399
12426
  menu.value = true;
@@ -12403,6 +12430,11 @@
12403
12430
  if (menuDisabled.value) return;
12404
12431
  menu.value = !menu.value;
12405
12432
  }
12433
+ function onListKeydown(e) {
12434
+ if (checkPrintable(e)) {
12435
+ onKeydown(e);
12436
+ }
12437
+ }
12406
12438
  function onKeydown(e) {
12407
12439
  if (!e.key || props.readonly || form?.isReadonly.value) return;
12408
12440
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
@@ -12423,11 +12455,6 @@
12423
12455
  // html select hotkeys
12424
12456
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12425
12457
 
12426
- function checkPrintable(e) {
12427
- const isPrintableChar = e.key.length === 1;
12428
- const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
12429
- return isPrintableChar && noModifier;
12430
- }
12431
12458
  if (props.multiple || !checkPrintable(e)) return;
12432
12459
  const now = performance.now();
12433
12460
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
@@ -12472,6 +12499,11 @@
12472
12499
  menu.value = false;
12473
12500
  }
12474
12501
  }
12502
+ function onAfterEnter() {
12503
+ if (props.eager) {
12504
+ vVirtualScrollRef.value?.calculateVisibleItems();
12505
+ }
12506
+ }
12475
12507
  function onAfterLeave() {
12476
12508
  if (isFocused.value) {
12477
12509
  vTextFieldRef.value?.focus();
@@ -12550,6 +12582,7 @@
12550
12582
  "openOnClick": false,
12551
12583
  "closeOnContentClick": false,
12552
12584
  "transition": props.transition,
12585
+ "onAfterEnter": onAfterEnter,
12553
12586
  "onAfterLeave": onAfterLeave
12554
12587
  }, computedMenuProps.value), {
12555
12588
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -12559,11 +12592,10 @@
12559
12592
  "onMousedown": e => e.preventDefault(),
12560
12593
  "onKeydown": onListKeydown,
12561
12594
  "onFocusin": onFocusin,
12562
- "onScrollPassive": onListScroll,
12563
12595
  "tabindex": "-1",
12564
12596
  "aria-live": "polite",
12565
12597
  "color": props.itemColor ?? props.color
12566
- }, props.listProps), {
12598
+ }, listEvents, props.listProps), {
12567
12599
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
12568
12600
  "title": t(props.noDataText)
12569
12601
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -12858,7 +12890,7 @@
12858
12890
  const menu = vue.computed({
12859
12891
  get: () => _menu.value,
12860
12892
  set: v => {
12861
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12893
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12862
12894
  _menu.value = v;
12863
12895
  }
12864
12896
  });
@@ -12902,10 +12934,7 @@
12902
12934
  });
12903
12935
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
12904
12936
  const listRef = vue.ref();
12905
- const {
12906
- onListScroll,
12907
- onListKeydown
12908
- } = useScrolling(listRef, vTextFieldRef);
12937
+ const listEvents = useScrolling(listRef, vTextFieldRef);
12909
12938
  function onClear(e) {
12910
12939
  if (props.openOnClear) {
12911
12940
  menu.value = true;
@@ -12924,6 +12953,11 @@
12924
12953
  }
12925
12954
  menu.value = !menu.value;
12926
12955
  }
12956
+ function onListKeydown(e) {
12957
+ if (checkPrintable(e)) {
12958
+ vTextFieldRef.value?.focus();
12959
+ }
12960
+ }
12927
12961
  function onKeydown(e) {
12928
12962
  if (props.readonly || form?.isReadonly.value) return;
12929
12963
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -12988,6 +13022,11 @@
12988
13022
  }
12989
13023
  }
12990
13024
  }
13025
+ function onAfterEnter() {
13026
+ if (props.eager) {
13027
+ vVirtualScrollRef.value?.calculateVisibleItems();
13028
+ }
13029
+ }
12991
13030
  function onAfterLeave() {
12992
13031
  if (isFocused.value) {
12993
13032
  isPristine.value = true;
@@ -13116,6 +13155,7 @@
13116
13155
  "openOnClick": false,
13117
13156
  "closeOnContentClick": false,
13118
13157
  "transition": props.transition,
13158
+ "onAfterEnter": onAfterEnter,
13119
13159
  "onAfterLeave": onAfterLeave
13120
13160
  }, props.menuProps), {
13121
13161
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -13126,11 +13166,10 @@
13126
13166
  "onKeydown": onListKeydown,
13127
13167
  "onFocusin": onFocusin,
13128
13168
  "onFocusout": onFocusout,
13129
- "onScrollPassive": onListScroll,
13130
13169
  "tabindex": "-1",
13131
13170
  "aria-live": "polite",
13132
13171
  "color": props.itemColor ?? props.color
13133
- }, props.listProps), {
13172
+ }, listEvents, props.listProps), {
13134
13173
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
13135
13174
  "title": t(props.noDataText)
13136
13175
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -16691,7 +16730,7 @@
16691
16730
  const menu = vue.computed({
16692
16731
  get: () => _menu.value,
16693
16732
  set: v => {
16694
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
16733
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
16695
16734
  _menu.value = v;
16696
16735
  }
16697
16736
  });
@@ -16774,10 +16813,7 @@
16774
16813
  });
16775
16814
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
16776
16815
  const listRef = vue.ref();
16777
- const {
16778
- onListScroll,
16779
- onListKeydown
16780
- } = useScrolling(listRef, vTextFieldRef);
16816
+ const listEvents = useScrolling(listRef, vTextFieldRef);
16781
16817
  function onClear(e) {
16782
16818
  cleared = true;
16783
16819
  if (props.openOnClear) {
@@ -16796,6 +16832,11 @@
16796
16832
  }
16797
16833
  menu.value = !menu.value;
16798
16834
  }
16835
+ function onListKeydown(e) {
16836
+ if (checkPrintable(e)) {
16837
+ vTextFieldRef.value?.focus();
16838
+ }
16839
+ }
16799
16840
  // eslint-disable-next-line complexity
16800
16841
  function onKeydown(e) {
16801
16842
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
@@ -16860,6 +16901,11 @@
16860
16901
  }
16861
16902
  }
16862
16903
  }
16904
+ function onAfterEnter() {
16905
+ if (props.eager) {
16906
+ vVirtualScrollRef.value?.calculateVisibleItems();
16907
+ }
16908
+ }
16863
16909
  function onAfterLeave() {
16864
16910
  if (isFocused.value) {
16865
16911
  isPristine.value = true;
@@ -16984,6 +17030,7 @@
16984
17030
  "openOnClick": false,
16985
17031
  "closeOnContentClick": false,
16986
17032
  "transition": props.transition,
17033
+ "onAfterEnter": onAfterEnter,
16987
17034
  "onAfterLeave": onAfterLeave
16988
17035
  }, props.menuProps), {
16989
17036
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -16994,11 +17041,10 @@
16994
17041
  "onKeydown": onListKeydown,
16995
17042
  "onFocusin": onFocusin,
16996
17043
  "onFocusout": onFocusout,
16997
- "onScrollPassive": onListScroll,
16998
17044
  "tabindex": "-1",
16999
17045
  "aria-live": "polite",
17000
17046
  "color": props.itemColor ?? props.color
17001
- }, props.listProps), {
17047
+ }, listEvents, props.listProps), {
17002
17048
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
17003
17049
  "title": t(props.noDataText)
17004
17050
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -30292,7 +30338,7 @@
30292
30338
  goTo
30293
30339
  };
30294
30340
  }
30295
- const version$1 = "3.6.13-3.7.0-beta.0.0-dev.2024-07-24";
30341
+ const version$1 = "3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce";
30296
30342
  createVuetify$1.version = version$1;
30297
30343
 
30298
30344
  // Vue's inject() can only be used in setup
@@ -30545,7 +30591,7 @@
30545
30591
 
30546
30592
  /* eslint-disable local-rules/sort-imports */
30547
30593
 
30548
- const version = "3.6.13-3.7.0-beta.0.0-dev.2024-07-24";
30594
+ const version = "3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce";
30549
30595
 
30550
30596
  /* eslint-disable local-rules/sort-imports */
30551
30597