@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
package/dist/vuetify.js CHANGED
@@ -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
  */
@@ -502,6 +502,11 @@
502
502
  });
503
503
  return fn;
504
504
  }
505
+ function checkPrintable(e) {
506
+ const isPrintableChar = e.key.length === 1;
507
+ const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
508
+ return isPrintableChar && noModifier;
509
+ }
505
510
 
506
511
  // Utilities
507
512
  const block = ['top', 'bottom'];
@@ -10513,7 +10518,8 @@
10513
10518
  function useActivator(props, _ref) {
10514
10519
  let {
10515
10520
  isActive,
10516
- isTop
10521
+ isTop,
10522
+ contentEl
10517
10523
  } = _ref;
10518
10524
  const vm = getCurrentInstance('useActivator');
10519
10525
  const activatorEl = vue.ref();
@@ -10630,7 +10636,7 @@
10630
10636
  return events;
10631
10637
  });
10632
10638
  vue.watch(isTop, val => {
10633
- if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))) {
10639
+ if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(document.activeElement)) {
10634
10640
  isActive.value = false;
10635
10641
  }
10636
10642
  });
@@ -11036,6 +11042,9 @@
11036
11042
  attrs,
11037
11043
  emit
11038
11044
  } = _ref;
11045
+ const root = vue.ref();
11046
+ const scrimEl = vue.ref();
11047
+ const contentEl = vue.ref();
11039
11048
  const model = useProxiedModel(props, 'modelValue');
11040
11049
  const isActive = vue.computed({
11041
11050
  get: () => model.value,
@@ -11073,7 +11082,8 @@
11073
11082
  scrimEvents
11074
11083
  } = useActivator(props, {
11075
11084
  isActive,
11076
- isTop: localTop
11085
+ isTop: localTop,
11086
+ contentEl
11077
11087
  });
11078
11088
  const {
11079
11089
  teleportTarget
@@ -11094,9 +11104,6 @@
11094
11104
  vue.watch(() => props.disabled, v => {
11095
11105
  if (v) isActive.value = false;
11096
11106
  });
11097
- const root = vue.ref();
11098
- const scrimEl = vue.ref();
11099
- const contentEl = vue.ref();
11100
11107
  const {
11101
11108
  contentStyles,
11102
11109
  updateLocation
@@ -11347,10 +11354,12 @@
11347
11354
  // TODO
11348
11355
  // disableKeys: Boolean,
11349
11356
  id: String,
11357
+ submenu: Boolean,
11350
11358
  ...omit(makeVOverlayProps({
11351
11359
  closeDelay: 250,
11352
11360
  closeOnContentClick: true,
11353
11361
  locationStrategy: 'connected',
11362
+ location: undefined,
11354
11363
  openDelay: 300,
11355
11364
  scrim: false,
11356
11365
  scrollStrategy: 'reposition',
@@ -11373,27 +11382,32 @@
11373
11382
  const {
11374
11383
  scopeId
11375
11384
  } = useScopeId();
11385
+ const {
11386
+ isRtl
11387
+ } = useRtl();
11376
11388
  const uid = getUid();
11377
11389
  const id = vue.computed(() => props.id || `v-menu-${uid}`);
11378
11390
  const overlay = vue.ref();
11379
11391
  const parent = vue.inject(VMenuSymbol, null);
11380
- const openChildren = vue.shallowRef(0);
11392
+ const openChildren = vue.shallowRef(new Set());
11381
11393
  vue.provide(VMenuSymbol, {
11382
11394
  register() {
11383
- ++openChildren.value;
11395
+ openChildren.value.add(uid);
11384
11396
  },
11385
11397
  unregister() {
11386
- --openChildren.value;
11398
+ openChildren.value.delete(uid);
11387
11399
  },
11388
11400
  closeParents(e) {
11389
11401
  setTimeout(() => {
11390
- if (!openChildren.value && !props.persistent && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
11402
+ if (!openChildren.value.size && !props.persistent && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
11391
11403
  isActive.value = false;
11392
11404
  parent?.closeParents();
11393
11405
  }
11394
11406
  }, 40);
11395
11407
  }
11396
11408
  });
11409
+ vue.onBeforeUnmount(() => parent?.unregister());
11410
+ vue.onDeactivated(() => isActive.value = false);
11397
11411
  async function onFocusIn(e) {
11398
11412
  const before = e.relatedTarget;
11399
11413
  const after = e.target;
@@ -11436,6 +11450,9 @@
11436
11450
  } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11437
11451
  isActive.value = false;
11438
11452
  parent?.closeParents();
11453
+ } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11454
+ isActive.value = false;
11455
+ overlay.value?.activatorEl?.focus();
11439
11456
  }
11440
11457
  }
11441
11458
  function onActivatorKeydown(e) {
@@ -11444,12 +11461,21 @@
11444
11461
  if (el && isActive.value) {
11445
11462
  if (e.key === 'ArrowDown') {
11446
11463
  e.preventDefault();
11464
+ e.stopImmediatePropagation();
11447
11465
  focusChild(el, 'next');
11448
11466
  } else if (e.key === 'ArrowUp') {
11449
11467
  e.preventDefault();
11468
+ e.stopImmediatePropagation();
11450
11469
  focusChild(el, 'prev');
11470
+ } else if (props.submenu) {
11471
+ if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11472
+ isActive.value = false;
11473
+ } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {
11474
+ e.preventDefault();
11475
+ focusChild(el, 'first');
11476
+ }
11451
11477
  }
11452
- } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
11478
+ } else if (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : ['ArrowDown', 'ArrowUp'].includes(e.key)) {
11453
11479
  isActive.value = true;
11454
11480
  e.preventDefault();
11455
11481
  setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
@@ -11473,6 +11499,7 @@
11473
11499
  "onUpdate:modelValue": $event => isActive.value = $event,
11474
11500
  "absolute": true,
11475
11501
  "activatorProps": activatorProps.value,
11502
+ "location": props.location ?? (props.submenu ? 'end' : 'bottom'),
11476
11503
  "onClick:outside": onClickOutside,
11477
11504
  "onKeydown": onKeydown
11478
11505
  }, scopeId), {
@@ -12305,6 +12332,7 @@
12305
12332
  deep: true
12306
12333
  });
12307
12334
  return {
12335
+ calculateVisibleItems,
12308
12336
  containerRef,
12309
12337
  markerRef,
12310
12338
  computedItems,
@@ -12368,6 +12396,7 @@
12368
12396
  dimensionStyles
12369
12397
  } = useDimension(props);
12370
12398
  const {
12399
+ calculateVisibleItems,
12371
12400
  containerRef,
12372
12401
  markerRef,
12373
12402
  handleScroll,
@@ -12439,6 +12468,7 @@
12439
12468
  }, [children])]);
12440
12469
  });
12441
12470
  return {
12471
+ calculateVisibleItems,
12442
12472
  scrollToIndex
12443
12473
  };
12444
12474
  }
@@ -12507,9 +12537,9 @@
12507
12537
  }
12508
12538
  }
12509
12539
  return {
12510
- onListScroll,
12511
- onListKeydown
12512
- };
12540
+ onScrollPassive: onListScroll,
12541
+ onKeydown: onListKeydown
12542
+ }; // typescript doesn't know about vue's event merging
12513
12543
  }
12514
12544
 
12515
12545
  // Types
@@ -12584,7 +12614,7 @@
12584
12614
  const menu = vue.computed({
12585
12615
  get: () => _menu.value,
12586
12616
  set: v => {
12587
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12617
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12588
12618
  _menu.value = v;
12589
12619
  }
12590
12620
  });
@@ -12623,10 +12653,7 @@
12623
12653
  };
12624
12654
  });
12625
12655
  const listRef = vue.ref();
12626
- const {
12627
- onListScroll,
12628
- onListKeydown
12629
- } = useScrolling(listRef, vTextFieldRef);
12656
+ const listEvents = useScrolling(listRef, vTextFieldRef);
12630
12657
  function onClear(e) {
12631
12658
  if (props.openOnClear) {
12632
12659
  menu.value = true;
@@ -12636,6 +12663,11 @@
12636
12663
  if (menuDisabled.value) return;
12637
12664
  menu.value = !menu.value;
12638
12665
  }
12666
+ function onListKeydown(e) {
12667
+ if (checkPrintable(e)) {
12668
+ onKeydown(e);
12669
+ }
12670
+ }
12639
12671
  function onKeydown(e) {
12640
12672
  if (!e.key || props.readonly || form?.isReadonly.value) return;
12641
12673
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
@@ -12656,11 +12688,6 @@
12656
12688
  // html select hotkeys
12657
12689
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12658
12690
 
12659
- function checkPrintable(e) {
12660
- const isPrintableChar = e.key.length === 1;
12661
- const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
12662
- return isPrintableChar && noModifier;
12663
- }
12664
12691
  if (props.multiple || !checkPrintable(e)) return;
12665
12692
  const now = performance.now();
12666
12693
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
@@ -12705,6 +12732,11 @@
12705
12732
  menu.value = false;
12706
12733
  }
12707
12734
  }
12735
+ function onAfterEnter() {
12736
+ if (props.eager) {
12737
+ vVirtualScrollRef.value?.calculateVisibleItems();
12738
+ }
12739
+ }
12708
12740
  function onAfterLeave() {
12709
12741
  if (isFocused.value) {
12710
12742
  vTextFieldRef.value?.focus();
@@ -12783,6 +12815,7 @@
12783
12815
  "openOnClick": false,
12784
12816
  "closeOnContentClick": false,
12785
12817
  "transition": props.transition,
12818
+ "onAfterEnter": onAfterEnter,
12786
12819
  "onAfterLeave": onAfterLeave
12787
12820
  }, computedMenuProps.value), {
12788
12821
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -12792,11 +12825,10 @@
12792
12825
  "onMousedown": e => e.preventDefault(),
12793
12826
  "onKeydown": onListKeydown,
12794
12827
  "onFocusin": onFocusin,
12795
- "onScrollPassive": onListScroll,
12796
12828
  "tabindex": "-1",
12797
12829
  "aria-live": "polite",
12798
12830
  "color": props.itemColor ?? props.color
12799
- }, props.listProps), {
12831
+ }, listEvents, props.listProps), {
12800
12832
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
12801
12833
  "title": t(props.noDataText)
12802
12834
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -13091,7 +13123,7 @@
13091
13123
  const menu = vue.computed({
13092
13124
  get: () => _menu.value,
13093
13125
  set: v => {
13094
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
13126
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
13095
13127
  _menu.value = v;
13096
13128
  }
13097
13129
  });
@@ -13135,10 +13167,7 @@
13135
13167
  });
13136
13168
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
13137
13169
  const listRef = vue.ref();
13138
- const {
13139
- onListScroll,
13140
- onListKeydown
13141
- } = useScrolling(listRef, vTextFieldRef);
13170
+ const listEvents = useScrolling(listRef, vTextFieldRef);
13142
13171
  function onClear(e) {
13143
13172
  if (props.openOnClear) {
13144
13173
  menu.value = true;
@@ -13157,6 +13186,11 @@
13157
13186
  }
13158
13187
  menu.value = !menu.value;
13159
13188
  }
13189
+ function onListKeydown(e) {
13190
+ if (checkPrintable(e)) {
13191
+ vTextFieldRef.value?.focus();
13192
+ }
13193
+ }
13160
13194
  function onKeydown(e) {
13161
13195
  if (props.readonly || form?.isReadonly.value) return;
13162
13196
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -13221,6 +13255,11 @@
13221
13255
  }
13222
13256
  }
13223
13257
  }
13258
+ function onAfterEnter() {
13259
+ if (props.eager) {
13260
+ vVirtualScrollRef.value?.calculateVisibleItems();
13261
+ }
13262
+ }
13224
13263
  function onAfterLeave() {
13225
13264
  if (isFocused.value) {
13226
13265
  isPristine.value = true;
@@ -13349,6 +13388,7 @@
13349
13388
  "openOnClick": false,
13350
13389
  "closeOnContentClick": false,
13351
13390
  "transition": props.transition,
13391
+ "onAfterEnter": onAfterEnter,
13352
13392
  "onAfterLeave": onAfterLeave
13353
13393
  }, props.menuProps), {
13354
13394
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -13359,11 +13399,10 @@
13359
13399
  "onKeydown": onListKeydown,
13360
13400
  "onFocusin": onFocusin,
13361
13401
  "onFocusout": onFocusout,
13362
- "onScrollPassive": onListScroll,
13363
13402
  "tabindex": "-1",
13364
13403
  "aria-live": "polite",
13365
13404
  "color": props.itemColor ?? props.color
13366
- }, props.listProps), {
13405
+ }, listEvents, props.listProps), {
13367
13406
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
13368
13407
  "title": t(props.noDataText)
13369
13408
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -16924,7 +16963,7 @@
16924
16963
  const menu = vue.computed({
16925
16964
  get: () => _menu.value,
16926
16965
  set: v => {
16927
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
16966
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
16928
16967
  _menu.value = v;
16929
16968
  }
16930
16969
  });
@@ -17007,10 +17046,7 @@
17007
17046
  });
17008
17047
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
17009
17048
  const listRef = vue.ref();
17010
- const {
17011
- onListScroll,
17012
- onListKeydown
17013
- } = useScrolling(listRef, vTextFieldRef);
17049
+ const listEvents = useScrolling(listRef, vTextFieldRef);
17014
17050
  function onClear(e) {
17015
17051
  cleared = true;
17016
17052
  if (props.openOnClear) {
@@ -17029,6 +17065,11 @@
17029
17065
  }
17030
17066
  menu.value = !menu.value;
17031
17067
  }
17068
+ function onListKeydown(e) {
17069
+ if (checkPrintable(e)) {
17070
+ vTextFieldRef.value?.focus();
17071
+ }
17072
+ }
17032
17073
  // eslint-disable-next-line complexity
17033
17074
  function onKeydown(e) {
17034
17075
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
@@ -17093,6 +17134,11 @@
17093
17134
  }
17094
17135
  }
17095
17136
  }
17137
+ function onAfterEnter() {
17138
+ if (props.eager) {
17139
+ vVirtualScrollRef.value?.calculateVisibleItems();
17140
+ }
17141
+ }
17096
17142
  function onAfterLeave() {
17097
17143
  if (isFocused.value) {
17098
17144
  isPristine.value = true;
@@ -17217,6 +17263,7 @@
17217
17263
  "openOnClick": false,
17218
17264
  "closeOnContentClick": false,
17219
17265
  "transition": props.transition,
17266
+ "onAfterEnter": onAfterEnter,
17220
17267
  "onAfterLeave": onAfterLeave
17221
17268
  }, props.menuProps), {
17222
17269
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -17227,11 +17274,10 @@
17227
17274
  "onKeydown": onListKeydown,
17228
17275
  "onFocusin": onFocusin,
17229
17276
  "onFocusout": onFocusout,
17230
- "onScrollPassive": onListScroll,
17231
17277
  "tabindex": "-1",
17232
17278
  "aria-live": "polite",
17233
17279
  "color": props.itemColor ?? props.color
17234
- }, props.listProps), {
17280
+ }, listEvents, props.listProps), {
17235
17281
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
17236
17282
  "title": t(props.noDataText)
17237
17283
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -28159,7 +28205,7 @@
28159
28205
  goTo
28160
28206
  };
28161
28207
  }
28162
- const version$1 = "3.6.13-3.7.0-beta.0.0-dev.2024-07-24";
28208
+ const version$1 = "3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce";
28163
28209
  createVuetify$1.version = version$1;
28164
28210
 
28165
28211
  // Vue's inject() can only be used in setup
@@ -28184,7 +28230,7 @@
28184
28230
  ...options
28185
28231
  });
28186
28232
  };
28187
- const version = "3.6.13-3.7.0-beta.0.0-dev.2024-07-24";
28233
+ const version = "3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce";
28188
28234
  createVuetify.version = version;
28189
28235
 
28190
28236
  exports.blueprints = index;