vuetify 3.3.2 → 3.3.3

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 (86) hide show
  1. package/dist/json/attributes.json +8 -8
  2. package/dist/json/importMap.json +4 -4
  3. package/dist/json/web-types.json +26 -15
  4. package/dist/vuetify-labs.css +53 -61
  5. package/dist/vuetify-labs.d.ts +253 -119
  6. package/dist/vuetify-labs.esm.js +196 -82
  7. package/dist/vuetify-labs.esm.js.map +1 -1
  8. package/dist/vuetify-labs.js +195 -81
  9. package/dist/vuetify-labs.min.css +2 -2
  10. package/dist/vuetify.css +10 -8
  11. package/dist/vuetify.d.ts +254 -120
  12. package/dist/vuetify.esm.js +191 -78
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +190 -77
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +780 -771
  18. package/dist/vuetify.min.js.map +1 -1
  19. package/lib/blueprints/index.d.mts +2 -2
  20. package/lib/blueprints/md1.d.mts +2 -2
  21. package/lib/blueprints/md2.d.mts +2 -2
  22. package/lib/blueprints/md3.d.mts +2 -2
  23. package/lib/components/VAppBar/index.d.mts +24 -8
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +16 -11
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VBtn/VBtn.mjs +1 -1
  27. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  28. package/lib/components/VBtn/index.d.mts +24 -8
  29. package/lib/components/VCard/VCard.mjs +1 -1
  30. package/lib/components/VCard/VCard.mjs.map +1 -1
  31. package/lib/components/VCard/index.d.mts +44 -28
  32. package/lib/components/VCheckbox/VCheckbox.mjs +8 -1
  33. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  34. package/lib/components/VCheckbox/index.d.mts +7 -1
  35. package/lib/components/VChip/VChip.mjs +2 -2
  36. package/lib/components/VChip/VChip.mjs.map +1 -1
  37. package/lib/components/VChip/index.d.mts +48 -32
  38. package/lib/components/VCombobox/VCombobox.mjs +16 -8
  39. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  40. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +1 -1
  41. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  42. package/lib/components/VExpansionPanel/index.d.mts +56 -24
  43. package/lib/components/VField/VField.css +1 -0
  44. package/lib/components/VField/VField.sass +1 -0
  45. package/lib/components/VIcon/VIcon.mjs +2 -2
  46. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  47. package/lib/components/VList/VListItem.mjs +1 -1
  48. package/lib/components/VList/VListItem.mjs.map +1 -1
  49. package/lib/components/VList/index.d.mts +24 -8
  50. package/lib/components/VMenu/VMenu.mjs +29 -3
  51. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  52. package/lib/components/VOverlay/VOverlay.mjs +7 -4
  53. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  54. package/lib/components/VOverlay/useActivator.mjs +29 -35
  55. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  56. package/lib/components/VSelect/VSelect.mjs +15 -10
  57. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  58. package/lib/components/VSlider/VSliderThumb.mjs +2 -2
  59. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  60. package/lib/components/VTabs/VTabs.css +1 -0
  61. package/lib/components/VTabs/VTabs.sass +1 -0
  62. package/lib/components/VTabs/index.d.mts +24 -8
  63. package/lib/components/VTextarea/VTextarea.css +7 -7
  64. package/lib/components/VTextarea/VTextarea.sass +9 -9
  65. package/lib/components/index.d.mts +251 -117
  66. package/lib/composables/icons.mjs.map +1 -1
  67. package/lib/composables/theme.mjs +1 -1
  68. package/lib/composables/theme.mjs.map +1 -1
  69. package/lib/entry-bundler.mjs +1 -1
  70. package/lib/framework.mjs +1 -1
  71. package/lib/iconsets/mdi-svg.mjs +35 -35
  72. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  73. package/lib/index.d.mts +3 -3
  74. package/lib/labs/VDataTable/VDataTable.css +4 -14
  75. package/lib/labs/VDataTable/VDataTable.sass +6 -15
  76. package/lib/labs/VDataTable/VDataTableHeaders.mjs +2 -2
  77. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  78. package/lib/labs/VDataTable/composables/select.mjs +3 -2
  79. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  80. package/lib/util/bindProps.mjs +49 -0
  81. package/lib/util/bindProps.mjs.map +1 -0
  82. package/lib/util/helpers.mjs +3 -0
  83. package/lib/util/helpers.mjs.map +1 -1
  84. package/lib/util/index.mjs +1 -0
  85. package/lib/util/index.mjs.map +1 -1
  86. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.3.2
2
+ * Vuetify v3.3.3
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { reactive, computed, watchEffect, toRefs, capitalize, warn, watch, onScopeDispose, effectScope, ref, unref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, readonly, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, toHandlers, Teleport, cloneVNode, createTextVNode, onBeforeUpdate, vModelText, onUpdated } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, warn, watch, onScopeDispose, effectScope, ref, unref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, readonly, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onBeforeUpdate, vModelText, onUpdated } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -294,6 +294,15 @@ function mergeDeep() {
294
294
  }
295
295
  return out;
296
296
  }
297
+ function flattenFragments(nodes) {
298
+ return nodes.map(node => {
299
+ if (node.type === Fragment) {
300
+ return flattenFragments(node.children);
301
+ } else {
302
+ return node;
303
+ }
304
+ }).flat();
305
+ }
297
306
  function toKebabCase() {
298
307
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
299
308
  if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
@@ -373,6 +382,9 @@ function includes(arr, val) {
373
382
  }
374
383
  const onRE = /^on[^a-z]/;
375
384
  const isOn = key => onRE.test(key);
385
+ function eventName(propName) {
386
+ return propName[2].toLowerCase() + propName.slice(3);
387
+ }
376
388
  const EventProp = () => [Function, Array];
377
389
  function hasEvent(props, name) {
378
390
  name = 'on' + capitalize(name);
@@ -571,6 +583,54 @@ function animate(el, keyframes, options) {
571
583
  return animation;
572
584
  }
573
585
 
586
+ // Utilities
587
+ const handlers = new WeakMap();
588
+ function bindProps(el, props) {
589
+ Object.keys(props).forEach(k => {
590
+ if (isOn(k)) {
591
+ const name = eventName(k);
592
+ const handler = handlers.get(el);
593
+ if (props[k] == null) {
594
+ handler?.forEach(v => {
595
+ const [n, fn] = v;
596
+ if (n === name) {
597
+ el.removeEventListener(name, fn);
598
+ handler.delete(v);
599
+ }
600
+ });
601
+ } else if (!handler || ![...handler]?.some(v => v[0] === name && v[1] === props[k])) {
602
+ el.addEventListener(name, props[k]);
603
+ const _handler = handler || new Set();
604
+ _handler.add([name, props[k]]);
605
+ if (!handlers.has(el)) handlers.set(el, _handler);
606
+ }
607
+ } else {
608
+ if (props[k] == null) {
609
+ el.removeAttribute(k);
610
+ } else {
611
+ el.setAttribute(k, props[k]);
612
+ }
613
+ }
614
+ });
615
+ }
616
+ function unbindProps(el, props) {
617
+ Object.keys(props).forEach(k => {
618
+ if (isOn(k)) {
619
+ const name = eventName(k);
620
+ const handler = handlers.get(el);
621
+ handler?.forEach(v => {
622
+ const [n, fn] = v;
623
+ if (n === name) {
624
+ el.removeEventListener(name, fn);
625
+ handler.delete(v);
626
+ }
627
+ });
628
+ } else {
629
+ el.removeAttribute(k);
630
+ }
631
+ });
632
+ }
633
+
574
634
  /* eslint-disable no-console */
575
635
 
576
636
  function consoleWarn(message) {
@@ -2154,6 +2214,7 @@ function createTheme(options) {
2154
2214
  };
2155
2215
  }
2156
2216
  function install(app) {
2217
+ if (parsedOptions.isDisabled) return;
2157
2218
  const head = app._context.provides.usehead;
2158
2219
  if (head) {
2159
2220
  if (head.push) {
@@ -2175,7 +2236,6 @@ function createTheme(options) {
2175
2236
  immediate: true
2176
2237
  });
2177
2238
  function updateStyles() {
2178
- if (parsedOptions.isDisabled) return;
2179
2239
  if (typeof document !== 'undefined' && !styleEl) {
2180
2240
  const el = document.createElement('style');
2181
2241
  el.type = 'text/css';
@@ -4262,7 +4322,7 @@ const VIcon = genericComponent()({
4262
4322
  useRender(() => {
4263
4323
  const slotValue = slots.default?.();
4264
4324
  if (slotValue) {
4265
- slotIcon.value = slotValue.filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4325
+ slotIcon.value = flattenFragments(slotValue).filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4266
4326
  }
4267
4327
  return createVNode(iconData.value.component, {
4268
4328
  "tag": props.tag,
@@ -5099,7 +5159,7 @@ const makeVBtnProps = propsFactory({
5099
5159
  block: Boolean,
5100
5160
  stacked: Boolean,
5101
5161
  ripple: {
5102
- type: Boolean,
5162
+ type: [Boolean, Object],
5103
5163
  default: true
5104
5164
  },
5105
5165
  text: String,
@@ -6382,6 +6442,7 @@ const VCheckbox = genericComponent()({
6382
6442
  inheritAttrs: false,
6383
6443
  props: makeVCheckboxProps(),
6384
6444
  emits: {
6445
+ 'update:modelValue': value => true,
6385
6446
  'update:focused': focused => true
6386
6447
  },
6387
6448
  setup(props, _ref) {
@@ -6389,6 +6450,7 @@ const VCheckbox = genericComponent()({
6389
6450
  attrs,
6390
6451
  slots
6391
6452
  } = _ref;
6453
+ const model = useProxiedModel(props, 'modelValue');
6392
6454
  const {
6393
6455
  isFocused,
6394
6456
  focus,
@@ -6403,6 +6465,8 @@ const VCheckbox = genericComponent()({
6403
6465
  return createVNode(VInput, mergeProps({
6404
6466
  "class": ['v-checkbox', props.class]
6405
6467
  }, inputAttrs, inputProps, {
6468
+ "modelValue": model.value,
6469
+ "onUpdate:modelValue": $event => model.value = $event,
6406
6470
  "id": id.value,
6407
6471
  "focused": isFocused.value,
6408
6472
  "style": props.style
@@ -6421,6 +6485,8 @@ const VCheckbox = genericComponent()({
6421
6485
  "disabled": isDisabled.value,
6422
6486
  "readonly": isReadonly.value
6423
6487
  }, controlAttrs, {
6488
+ "modelValue": model.value,
6489
+ "onUpdate:modelValue": $event => model.value = $event,
6424
6490
  "onFocus": focus,
6425
6491
  "onBlur": blur
6426
6492
  }), slots);
@@ -6558,6 +6624,8 @@ const VChipGroup = genericComponent()({
6558
6624
  }
6559
6625
  });
6560
6626
 
6627
+ // Types
6628
+
6561
6629
  const makeVChipProps = propsFactory({
6562
6630
  activeClass: String,
6563
6631
  appendAvatar: String,
@@ -6586,7 +6654,7 @@ const makeVChipProps = propsFactory({
6586
6654
  prependAvatar: String,
6587
6655
  prependIcon: IconValue,
6588
6656
  ripple: {
6589
- type: Boolean,
6657
+ type: [Boolean, Object],
6590
6658
  default: true
6591
6659
  },
6592
6660
  text: String,
@@ -7402,7 +7470,7 @@ const makeVListItemProps = propsFactory({
7402
7470
  prependAvatar: String,
7403
7471
  prependIcon: IconValue,
7404
7472
  ripple: {
7405
- type: Boolean,
7473
+ type: [Boolean, Object],
7406
7474
  default: true
7407
7475
  },
7408
7476
  subtitle: [String, Number, Boolean],
@@ -8775,29 +8843,29 @@ function useActivator(props, _ref) {
8775
8843
  }
8776
8844
  });
8777
8845
  const availableEvents = {
8778
- click: e => {
8846
+ onClick: e => {
8779
8847
  e.stopPropagation();
8780
8848
  activatorEl.value = e.currentTarget || e.target;
8781
8849
  isActive.value = !isActive.value;
8782
8850
  },
8783
- mouseenter: e => {
8851
+ onMouseenter: e => {
8784
8852
  if (e.sourceCapabilities?.firesTouchEvents) return;
8785
8853
  isHovered = true;
8786
8854
  activatorEl.value = e.currentTarget || e.target;
8787
8855
  runOpenDelay();
8788
8856
  },
8789
- mouseleave: e => {
8857
+ onMouseleave: e => {
8790
8858
  isHovered = false;
8791
8859
  runCloseDelay();
8792
8860
  },
8793
- focus: e => {
8861
+ onFocus: e => {
8794
8862
  if (SUPPORTS_FOCUS_VISIBLE && !e.target.matches(':focus-visible')) return;
8795
8863
  isFocused = true;
8796
8864
  e.stopPropagation();
8797
8865
  activatorEl.value = e.currentTarget || e.target;
8798
8866
  runOpenDelay();
8799
8867
  },
8800
- blur: e => {
8868
+ onBlur: e => {
8801
8869
  isFocused = false;
8802
8870
  e.stopPropagation();
8803
8871
  runCloseDelay();
@@ -8806,33 +8874,43 @@ function useActivator(props, _ref) {
8806
8874
  const activatorEvents = computed(() => {
8807
8875
  const events = {};
8808
8876
  if (openOnClick.value) {
8809
- events.click = availableEvents.click;
8877
+ events.onClick = availableEvents.onClick;
8810
8878
  }
8811
8879
  if (props.openOnHover) {
8812
- events.mouseenter = availableEvents.mouseenter;
8813
- events.mouseleave = availableEvents.mouseleave;
8880
+ events.onMouseenter = availableEvents.onMouseenter;
8881
+ events.onMouseleave = availableEvents.onMouseleave;
8814
8882
  }
8815
8883
  if (openOnFocus.value) {
8816
- events.focus = availableEvents.focus;
8817
- events.blur = availableEvents.blur;
8884
+ events.onFocus = availableEvents.onFocus;
8885
+ events.onBlur = availableEvents.onBlur;
8818
8886
  }
8819
8887
  return events;
8820
8888
  });
8821
8889
  const contentEvents = computed(() => {
8822
8890
  const events = {};
8823
8891
  if (props.openOnHover) {
8824
- events.mouseenter = () => {
8892
+ events.onMouseenter = () => {
8825
8893
  isHovered = true;
8826
8894
  runOpenDelay();
8827
8895
  };
8828
- events.mouseleave = () => {
8896
+ events.onMouseleave = () => {
8829
8897
  isHovered = false;
8830
8898
  runCloseDelay();
8831
8899
  };
8832
8900
  }
8901
+ if (openOnFocus.value) {
8902
+ events.onFocusin = () => {
8903
+ isFocused = true;
8904
+ runOpenDelay();
8905
+ };
8906
+ events.onFocusout = () => {
8907
+ isFocused = false;
8908
+ runCloseDelay();
8909
+ };
8910
+ }
8833
8911
  if (props.closeOnContentClick) {
8834
8912
  const menu = inject$1(VMenuSymbol, null);
8835
- events.click = () => {
8913
+ events.onClick = () => {
8836
8914
  isActive.value = false;
8837
8915
  menu?.closeParents();
8838
8916
  };
@@ -8842,14 +8920,14 @@ function useActivator(props, _ref) {
8842
8920
  const scrimEvents = computed(() => {
8843
8921
  const events = {};
8844
8922
  if (props.openOnHover) {
8845
- events.mouseenter = () => {
8923
+ events.onMouseenter = () => {
8846
8924
  if (firstEnter) {
8847
8925
  isHovered = true;
8848
8926
  firstEnter = false;
8849
8927
  runOpenDelay();
8850
8928
  }
8851
8929
  };
8852
- events.mouseleave = () => {
8930
+ events.onMouseleave = () => {
8853
8931
  isHovered = false;
8854
8932
  runCloseDelay();
8855
8933
  };
@@ -8923,29 +9001,13 @@ function _useActivator(props, vm, _ref2) {
8923
9001
  let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
8924
9002
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
8925
9003
  if (!el) return;
8926
- Object.entries(activatorEvents.value).forEach(_ref3 => {
8927
- let [name, cb] = _ref3;
8928
- el.addEventListener(name, cb);
8929
- });
8930
- Object.keys(_props).forEach(k => {
8931
- if (_props[k] == null) {
8932
- el.removeAttribute(k);
8933
- } else {
8934
- el.setAttribute(k, _props[k]);
8935
- }
8936
- });
9004
+ bindProps(el, mergeProps(activatorEvents.value, _props));
8937
9005
  }
8938
9006
  function unbindActivatorProps() {
8939
9007
  let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
8940
9008
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
8941
9009
  if (!el) return;
8942
- Object.entries(activatorEvents.value).forEach(_ref4 => {
8943
- let [name, cb] = _ref4;
8944
- el.removeEventListener(name, cb);
8945
- });
8946
- Object.keys(_props).forEach(k => {
8947
- el.removeAttribute(k);
8948
- });
9010
+ unbindProps(el, mergeProps(activatorEvents.value, _props));
8949
9011
  }
8950
9012
  function getActivator() {
8951
9013
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
@@ -9472,6 +9534,9 @@ const VOverlay = genericComponent()({
9472
9534
  if (e.key === 'Escape' && globalTop.value) {
9473
9535
  if (!props.persistent) {
9474
9536
  isActive.value = false;
9537
+ if (contentEl.value?.contains(document.activeElement)) {
9538
+ activatorEl.value?.focus();
9539
+ }
9475
9540
  } else animateClick();
9476
9541
  }
9477
9542
  }
@@ -9514,7 +9579,7 @@ const VOverlay = genericComponent()({
9514
9579
  isActive: isActive.value,
9515
9580
  props: mergeProps({
9516
9581
  ref: activatorRef
9517
- }, toHandlers(activatorEvents.value), props.activatorProps)
9582
+ }, activatorEvents.value, props.activatorProps)
9518
9583
  }), isMounted.value && createVNode(Teleport, {
9519
9584
  "disabled": !teleportTarget.value,
9520
9585
  "to": teleportTarget.value
@@ -9532,7 +9597,7 @@ const VOverlay = genericComponent()({
9532
9597
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
9533
9598
  "color": scrimColor,
9534
9599
  "modelValue": isActive.value && !!props.scrim
9535
- }, toHandlers(scrimEvents.value)), null), createVNode(MaybeTransition, {
9600
+ }, scrimEvents.value), null), createVNode(MaybeTransition, {
9536
9601
  "appear": true,
9537
9602
  "persisted": true,
9538
9603
  "transition": props.transition,
@@ -9546,7 +9611,7 @@ const VOverlay = genericComponent()({
9546
9611
  "ref": contentEl,
9547
9612
  "class": ['v-overlay__content', props.contentClass],
9548
9613
  "style": [dimensionStyles.value, contentStyles.value]
9549
- }, toHandlers(contentEvents.value), props.contentProps), [slots.default?.({
9614
+ }, contentEvents.value, props.contentProps), [slots.default?.({
9550
9615
  isActive
9551
9616
  })]), [[vShow, isActive.value], [resolveDirective("click-outside"), {
9552
9617
  handler: onClickOutside,
@@ -9706,10 +9771,35 @@ const VMenu = genericComponent()({
9706
9771
  function onClickOutside() {
9707
9772
  parent?.closeParents();
9708
9773
  }
9774
+ function onKeydown(e) {
9775
+ if (props.disabled) return;
9776
+ if (e.key === 'Tab') {
9777
+ isActive.value = false;
9778
+ overlay.value?.activatorEl?.focus();
9779
+ }
9780
+ }
9781
+ function onActivatorKeydown(e) {
9782
+ if (props.disabled) return;
9783
+ const el = overlay.value?.contentEl;
9784
+ if (el && isActive.value) {
9785
+ if (e.key === 'ArrowDown') {
9786
+ e.preventDefault();
9787
+ focusChild(el, 'next');
9788
+ } else if (e.key === 'ArrowUp') {
9789
+ e.preventDefault();
9790
+ focusChild(el, 'prev');
9791
+ }
9792
+ } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
9793
+ isActive.value = true;
9794
+ e.preventDefault();
9795
+ setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
9796
+ }
9797
+ }
9709
9798
  const activatorProps = computed(() => mergeProps({
9710
9799
  'aria-haspopup': 'menu',
9711
9800
  'aria-expanded': String(isActive.value),
9712
- 'aria-owns': id.value
9801
+ 'aria-owns': id.value,
9802
+ onKeydown: onActivatorKeydown
9713
9803
  }, props.activatorProps));
9714
9804
  useRender(() => {
9715
9805
  const [overlayProps] = VOverlay.filterProps(props);
@@ -9722,7 +9812,8 @@ const VMenu = genericComponent()({
9722
9812
  "onUpdate:modelValue": $event => isActive.value = $event,
9723
9813
  "absolute": true,
9724
9814
  "activatorProps": activatorProps.value,
9725
- "onClick:outside": onClickOutside
9815
+ "onClick:outside": onClickOutside,
9816
+ "onKeydown": onKeydown
9726
9817
  }, scopeId), {
9727
9818
  activator: slots.activator,
9728
9819
  default: function () {
@@ -10366,6 +10457,7 @@ const VSelect = genericComponent()({
10366
10457
  }
10367
10458
  return items.value;
10368
10459
  });
10460
+ const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
10369
10461
  const listRef = ref();
10370
10462
  function onClear(e) {
10371
10463
  if (props.openOnClear) {
@@ -10373,7 +10465,7 @@ const VSelect = genericComponent()({
10373
10465
  }
10374
10466
  }
10375
10467
  function onMousedownControl() {
10376
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10468
+ if (menuDisabled.value) return;
10377
10469
  menu.value = !menu.value;
10378
10470
  }
10379
10471
  function onKeydown(e) {
@@ -10387,11 +10479,7 @@ const VSelect = genericComponent()({
10387
10479
  if (['Escape', 'Tab'].includes(e.key)) {
10388
10480
  menu.value = false;
10389
10481
  }
10390
- if (e.key === 'ArrowDown') {
10391
- listRef.value?.focus('next');
10392
- } else if (e.key === 'ArrowUp') {
10393
- listRef.value?.focus('prev');
10394
- } else if (e.key === 'Home') {
10482
+ if (e.key === 'Home') {
10395
10483
  listRef.value?.focus('first');
10396
10484
  } else if (e.key === 'End') {
10397
10485
  listRef.value?.focus('last');
@@ -10417,6 +10505,11 @@ const VSelect = genericComponent()({
10417
10505
  model.value = [item];
10418
10506
  }
10419
10507
  }
10508
+ function onListKeydown(e) {
10509
+ if (e.key === 'Tab') {
10510
+ vTextFieldRef.value?.focus();
10511
+ }
10512
+ }
10420
10513
  function select(item) {
10421
10514
  if (props.multiple) {
10422
10515
  const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
@@ -10447,7 +10540,7 @@ const VSelect = genericComponent()({
10447
10540
  }
10448
10541
  useRender(() => {
10449
10542
  const hasChips = !!(props.chips || slots.chip);
10450
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10543
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
10451
10544
  const isDirty = model.value.length > 0;
10452
10545
  const [textFieldProps] = VTextField.filterProps(props);
10453
10546
  const placeholder = isDirty || !isFocused.value && props.label && !props.persistentPlaceholder ? undefined : props.placeholder;
@@ -10484,6 +10577,7 @@ const VSelect = genericComponent()({
10484
10577
  "onUpdate:modelValue": $event => menu.value = $event,
10485
10578
  "activator": "parent",
10486
10579
  "contentClass": "v-select__content",
10580
+ "disabled": menuDisabled.value,
10487
10581
  "eager": props.eager,
10488
10582
  "maxHeight": 310,
10489
10583
  "openOnClick": false,
@@ -10496,11 +10590,13 @@ const VSelect = genericComponent()({
10496
10590
  "selected": selected.value,
10497
10591
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10498
10592
  "onMousedown": e => e.preventDefault(),
10499
- "onFocusin": onFocusin
10593
+ "onKeydown": onListKeydown,
10594
+ "onFocusin": onFocusin,
10595
+ "tabindex": "-1"
10500
10596
  }, {
10501
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10597
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10502
10598
  "title": t(props.noDataText)
10503
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
10599
+ }, null)), displayItems.value.map((item, index) => {
10504
10600
  const itemProps = mergeProps(item.props, {
10505
10601
  key: index,
10506
10602
  onClick: () => select(item)
@@ -10792,6 +10888,7 @@ const VAutocomplete = genericComponent()({
10792
10888
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
10793
10889
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
10794
10890
  });
10891
+ const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
10795
10892
  const listRef = ref();
10796
10893
  function onClear(e) {
10797
10894
  if (props.openOnClear) {
@@ -10800,10 +10897,11 @@ const VAutocomplete = genericComponent()({
10800
10897
  search.value = '';
10801
10898
  }
10802
10899
  function onMousedownControl() {
10803
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10900
+ if (menuDisabled.value) return;
10804
10901
  menu.value = true;
10805
10902
  }
10806
10903
  function onMousedownMenuIcon(e) {
10904
+ if (menuDisabled.value) return;
10807
10905
  if (isFocused.value) {
10808
10906
  e.preventDefault();
10809
10907
  e.stopPropagation();
@@ -10829,13 +10927,8 @@ const VAutocomplete = genericComponent()({
10829
10927
  }
10830
10928
  isPristine.value = true;
10831
10929
  }
10832
- if (e.key === 'ArrowDown') {
10930
+ if (e.key === 'ArrowDown' && highlightFirst.value) {
10833
10931
  listRef.value?.focus('next');
10834
- if (highlightFirst.value) {
10835
- listRef.value?.focus('next');
10836
- }
10837
- } else if (e.key === 'ArrowUp') {
10838
- listRef.value?.focus('prev');
10839
10932
  }
10840
10933
  if (!props.multiple) return;
10841
10934
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -10870,6 +10963,11 @@ const VAutocomplete = genericComponent()({
10870
10963
  }
10871
10964
  }
10872
10965
  }
10966
+ function onListKeydown(e) {
10967
+ if (e.key === 'Tab') {
10968
+ vTextFieldRef.value?.focus();
10969
+ }
10970
+ }
10873
10971
  function onInput(e) {
10874
10972
  search.value = e.target.value;
10875
10973
  }
@@ -10939,7 +11037,7 @@ const VAutocomplete = genericComponent()({
10939
11037
  });
10940
11038
  useRender(() => {
10941
11039
  const hasChips = !!(props.chips || slots.chip);
10942
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
11040
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
10943
11041
  const isDirty = model.value.length > 0;
10944
11042
  const [textFieldProps] = VTextField.filterProps(props);
10945
11043
  return createVNode(VTextField, mergeProps({
@@ -10972,6 +11070,7 @@ const VAutocomplete = genericComponent()({
10972
11070
  "onUpdate:modelValue": $event => menu.value = $event,
10973
11071
  "activator": "parent",
10974
11072
  "contentClass": "v-autocomplete__content",
11073
+ "disabled": menuDisabled.value,
10975
11074
  "eager": props.eager,
10976
11075
  "maxHeight": 310,
10977
11076
  "openOnClick": false,
@@ -10984,12 +11083,14 @@ const VAutocomplete = genericComponent()({
10984
11083
  "selected": selected.value,
10985
11084
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10986
11085
  "onMousedown": e => e.preventDefault(),
11086
+ "onKeydown": onListKeydown,
10987
11087
  "onFocusin": onFocusin,
10988
- "onFocusout": onFocusout
11088
+ "onFocusout": onFocusout,
11089
+ "tabindex": "-1"
10989
11090
  }, {
10990
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
11091
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10991
11092
  "title": t(props.noDataText)
10992
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
11093
+ }, null)), displayItems.value.map((item, index) => {
10993
11094
  const itemProps = mergeProps(item.props, {
10994
11095
  key: index,
10995
11096
  active: highlightFirst.value && index === 0 ? true : undefined,
@@ -11739,7 +11840,7 @@ const makeVCardProps = propsFactory({
11739
11840
  prependAvatar: String,
11740
11841
  prependIcon: IconValue,
11741
11842
  ripple: {
11742
- type: Boolean,
11843
+ type: [Boolean, Object],
11743
11844
  default: true
11744
11845
  },
11745
11846
  subtitle: String,
@@ -13144,6 +13245,8 @@ const useSlider = _ref => {
13144
13245
  return data;
13145
13246
  };
13146
13247
 
13248
+ // Types
13249
+
13147
13250
  const makeVSliderThumbProps = propsFactory({
13148
13251
  focused: Boolean,
13149
13252
  max: {
@@ -13163,7 +13266,7 @@ const makeVSliderThumbProps = propsFactory({
13163
13266
  required: true
13164
13267
  },
13165
13268
  ripple: {
13166
- type: Boolean,
13269
+ type: [Boolean, Object],
13167
13270
  default: true
13168
13271
  },
13169
13272
  ...makeComponentProps()
@@ -14322,6 +14425,7 @@ const VCombobox = genericComponent()({
14322
14425
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
14323
14426
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
14324
14427
  });
14428
+ const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
14325
14429
  const listRef = ref();
14326
14430
  function onClear(e) {
14327
14431
  cleared = true;
@@ -14330,10 +14434,11 @@ const VCombobox = genericComponent()({
14330
14434
  }
14331
14435
  }
14332
14436
  function onMousedownControl() {
14333
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
14437
+ if (menuDisabled.value) return;
14334
14438
  menu.value = true;
14335
14439
  }
14336
14440
  function onMousedownMenuIcon(e) {
14441
+ if (menuDisabled.value) return;
14337
14442
  if (isFocused.value) {
14338
14443
  e.preventDefault();
14339
14444
  e.stopPropagation();
@@ -14359,10 +14464,8 @@ const VCombobox = genericComponent()({
14359
14464
  }
14360
14465
  isPristine.value = true;
14361
14466
  }
14362
- if (e.key === 'ArrowDown') {
14467
+ if (e.key === 'ArrowDown' && highlightFirst.value) {
14363
14468
  listRef.value?.focus('next');
14364
- } else if (e.key === 'ArrowUp') {
14365
- listRef.value?.focus('prev');
14366
14469
  }
14367
14470
  if (!props.multiple) return;
14368
14471
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -14401,6 +14504,11 @@ const VCombobox = genericComponent()({
14401
14504
  search.value = '';
14402
14505
  }
14403
14506
  }
14507
+ function onListKeydown(e) {
14508
+ if (e.key === 'Tab') {
14509
+ vTextFieldRef.value?.focus();
14510
+ }
14511
+ }
14404
14512
  function onAfterLeave() {
14405
14513
  if (isFocused.value) {
14406
14514
  isPristine.value = true;
@@ -14462,7 +14570,7 @@ const VCombobox = genericComponent()({
14462
14570
  });
14463
14571
  useRender(() => {
14464
14572
  const hasChips = !!(props.chips || slots.chip);
14465
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
14573
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
14466
14574
  const isDirty = model.value.length > 0;
14467
14575
  const [textFieldProps] = VTextField.filterProps(props);
14468
14576
  return createVNode(VTextField, mergeProps({
@@ -14495,6 +14603,7 @@ const VCombobox = genericComponent()({
14495
14603
  "onUpdate:modelValue": $event => menu.value = $event,
14496
14604
  "activator": "parent",
14497
14605
  "contentClass": "v-combobox__content",
14606
+ "disabled": menuDisabled.value,
14498
14607
  "eager": props.eager,
14499
14608
  "maxHeight": 310,
14500
14609
  "openOnClick": false,
@@ -14507,12 +14616,14 @@ const VCombobox = genericComponent()({
14507
14616
  "selected": selected.value,
14508
14617
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14509
14618
  "onMousedown": e => e.preventDefault(),
14619
+ "onKeydown": onListKeydown,
14510
14620
  "onFocusin": onFocusin,
14511
- "onFocusout": onFocusout
14621
+ "onFocusout": onFocusout,
14622
+ "tabindex": "-1"
14512
14623
  }, {
14513
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
14624
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
14514
14625
  "title": t(props.noDataText)
14515
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
14626
+ }, null)), displayItems.value.map((item, index) => {
14516
14627
  const itemProps = mergeProps(item.props, {
14517
14628
  key: index,
14518
14629
  active: highlightFirst.value && index === 0 ? true : undefined,
@@ -14804,6 +14915,8 @@ const VExpansionPanelText = genericComponent()({
14804
14915
  }
14805
14916
  });
14806
14917
 
14918
+ // Types
14919
+
14807
14920
  const makeVExpansionPanelTitleProps = propsFactory({
14808
14921
  color: String,
14809
14922
  expandIcon: {
@@ -19853,7 +19966,7 @@ function createVuetify$1() {
19853
19966
  date
19854
19967
  };
19855
19968
  }
19856
- const version$1 = "3.3.2";
19969
+ const version$1 = "3.3.3";
19857
19970
  createVuetify$1.version = version$1;
19858
19971
 
19859
19972
  // Vue's inject() can only be used in setup
@@ -19878,7 +19991,7 @@ const createVuetify = function () {
19878
19991
  ...options
19879
19992
  });
19880
19993
  };
19881
- const version = "3.3.2";
19994
+ const version = "3.3.3";
19882
19995
  createVuetify.version = version;
19883
19996
 
19884
19997
  export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };