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, withModifiers } 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, withModifiers } 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) {
@@ -2158,6 +2218,7 @@ function createTheme(options) {
2158
2218
  };
2159
2219
  }
2160
2220
  function install(app) {
2221
+ if (parsedOptions.isDisabled) return;
2161
2222
  const head = app._context.provides.usehead;
2162
2223
  if (head) {
2163
2224
  if (head.push) {
@@ -2179,7 +2240,6 @@ function createTheme(options) {
2179
2240
  immediate: true
2180
2241
  });
2181
2242
  function updateStyles() {
2182
- if (parsedOptions.isDisabled) return;
2183
2243
  if (typeof document !== 'undefined' && !styleEl) {
2184
2244
  const el = document.createElement('style');
2185
2245
  el.type = 'text/css';
@@ -4266,7 +4326,7 @@ const VIcon = genericComponent()({
4266
4326
  useRender(() => {
4267
4327
  const slotValue = slots.default?.();
4268
4328
  if (slotValue) {
4269
- slotIcon.value = slotValue.filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4329
+ slotIcon.value = flattenFragments(slotValue).filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4270
4330
  }
4271
4331
  return createVNode(iconData.value.component, {
4272
4332
  "tag": props.tag,
@@ -5103,7 +5163,7 @@ const makeVBtnProps = propsFactory({
5103
5163
  block: Boolean,
5104
5164
  stacked: Boolean,
5105
5165
  ripple: {
5106
- type: Boolean,
5166
+ type: [Boolean, Object],
5107
5167
  default: true
5108
5168
  },
5109
5169
  text: String,
@@ -6386,6 +6446,7 @@ const VCheckbox = genericComponent()({
6386
6446
  inheritAttrs: false,
6387
6447
  props: makeVCheckboxProps(),
6388
6448
  emits: {
6449
+ 'update:modelValue': value => true,
6389
6450
  'update:focused': focused => true
6390
6451
  },
6391
6452
  setup(props, _ref) {
@@ -6393,6 +6454,7 @@ const VCheckbox = genericComponent()({
6393
6454
  attrs,
6394
6455
  slots
6395
6456
  } = _ref;
6457
+ const model = useProxiedModel(props, 'modelValue');
6396
6458
  const {
6397
6459
  isFocused,
6398
6460
  focus,
@@ -6407,6 +6469,8 @@ const VCheckbox = genericComponent()({
6407
6469
  return createVNode(VInput, mergeProps({
6408
6470
  "class": ['v-checkbox', props.class]
6409
6471
  }, inputAttrs, inputProps, {
6472
+ "modelValue": model.value,
6473
+ "onUpdate:modelValue": $event => model.value = $event,
6410
6474
  "id": id.value,
6411
6475
  "focused": isFocused.value,
6412
6476
  "style": props.style
@@ -6425,6 +6489,8 @@ const VCheckbox = genericComponent()({
6425
6489
  "disabled": isDisabled.value,
6426
6490
  "readonly": isReadonly.value
6427
6491
  }, controlAttrs, {
6492
+ "modelValue": model.value,
6493
+ "onUpdate:modelValue": $event => model.value = $event,
6428
6494
  "onFocus": focus,
6429
6495
  "onBlur": blur
6430
6496
  }), slots);
@@ -6562,6 +6628,8 @@ const VChipGroup = genericComponent()({
6562
6628
  }
6563
6629
  });
6564
6630
 
6631
+ // Types
6632
+
6565
6633
  const makeVChipProps = propsFactory({
6566
6634
  activeClass: String,
6567
6635
  appendAvatar: String,
@@ -6590,7 +6658,7 @@ const makeVChipProps = propsFactory({
6590
6658
  prependAvatar: String,
6591
6659
  prependIcon: IconValue,
6592
6660
  ripple: {
6593
- type: Boolean,
6661
+ type: [Boolean, Object],
6594
6662
  default: true
6595
6663
  },
6596
6664
  text: String,
@@ -7406,7 +7474,7 @@ const makeVListItemProps = propsFactory({
7406
7474
  prependAvatar: String,
7407
7475
  prependIcon: IconValue,
7408
7476
  ripple: {
7409
- type: Boolean,
7477
+ type: [Boolean, Object],
7410
7478
  default: true
7411
7479
  },
7412
7480
  subtitle: [String, Number, Boolean],
@@ -8779,29 +8847,29 @@ function useActivator(props, _ref) {
8779
8847
  }
8780
8848
  });
8781
8849
  const availableEvents = {
8782
- click: e => {
8850
+ onClick: e => {
8783
8851
  e.stopPropagation();
8784
8852
  activatorEl.value = e.currentTarget || e.target;
8785
8853
  isActive.value = !isActive.value;
8786
8854
  },
8787
- mouseenter: e => {
8855
+ onMouseenter: e => {
8788
8856
  if (e.sourceCapabilities?.firesTouchEvents) return;
8789
8857
  isHovered = true;
8790
8858
  activatorEl.value = e.currentTarget || e.target;
8791
8859
  runOpenDelay();
8792
8860
  },
8793
- mouseleave: e => {
8861
+ onMouseleave: e => {
8794
8862
  isHovered = false;
8795
8863
  runCloseDelay();
8796
8864
  },
8797
- focus: e => {
8865
+ onFocus: e => {
8798
8866
  if (SUPPORTS_FOCUS_VISIBLE && !e.target.matches(':focus-visible')) return;
8799
8867
  isFocused = true;
8800
8868
  e.stopPropagation();
8801
8869
  activatorEl.value = e.currentTarget || e.target;
8802
8870
  runOpenDelay();
8803
8871
  },
8804
- blur: e => {
8872
+ onBlur: e => {
8805
8873
  isFocused = false;
8806
8874
  e.stopPropagation();
8807
8875
  runCloseDelay();
@@ -8810,33 +8878,43 @@ function useActivator(props, _ref) {
8810
8878
  const activatorEvents = computed(() => {
8811
8879
  const events = {};
8812
8880
  if (openOnClick.value) {
8813
- events.click = availableEvents.click;
8881
+ events.onClick = availableEvents.onClick;
8814
8882
  }
8815
8883
  if (props.openOnHover) {
8816
- events.mouseenter = availableEvents.mouseenter;
8817
- events.mouseleave = availableEvents.mouseleave;
8884
+ events.onMouseenter = availableEvents.onMouseenter;
8885
+ events.onMouseleave = availableEvents.onMouseleave;
8818
8886
  }
8819
8887
  if (openOnFocus.value) {
8820
- events.focus = availableEvents.focus;
8821
- events.blur = availableEvents.blur;
8888
+ events.onFocus = availableEvents.onFocus;
8889
+ events.onBlur = availableEvents.onBlur;
8822
8890
  }
8823
8891
  return events;
8824
8892
  });
8825
8893
  const contentEvents = computed(() => {
8826
8894
  const events = {};
8827
8895
  if (props.openOnHover) {
8828
- events.mouseenter = () => {
8896
+ events.onMouseenter = () => {
8829
8897
  isHovered = true;
8830
8898
  runOpenDelay();
8831
8899
  };
8832
- events.mouseleave = () => {
8900
+ events.onMouseleave = () => {
8833
8901
  isHovered = false;
8834
8902
  runCloseDelay();
8835
8903
  };
8836
8904
  }
8905
+ if (openOnFocus.value) {
8906
+ events.onFocusin = () => {
8907
+ isFocused = true;
8908
+ runOpenDelay();
8909
+ };
8910
+ events.onFocusout = () => {
8911
+ isFocused = false;
8912
+ runCloseDelay();
8913
+ };
8914
+ }
8837
8915
  if (props.closeOnContentClick) {
8838
8916
  const menu = inject$1(VMenuSymbol, null);
8839
- events.click = () => {
8917
+ events.onClick = () => {
8840
8918
  isActive.value = false;
8841
8919
  menu?.closeParents();
8842
8920
  };
@@ -8846,14 +8924,14 @@ function useActivator(props, _ref) {
8846
8924
  const scrimEvents = computed(() => {
8847
8925
  const events = {};
8848
8926
  if (props.openOnHover) {
8849
- events.mouseenter = () => {
8927
+ events.onMouseenter = () => {
8850
8928
  if (firstEnter) {
8851
8929
  isHovered = true;
8852
8930
  firstEnter = false;
8853
8931
  runOpenDelay();
8854
8932
  }
8855
8933
  };
8856
- events.mouseleave = () => {
8934
+ events.onMouseleave = () => {
8857
8935
  isHovered = false;
8858
8936
  runCloseDelay();
8859
8937
  };
@@ -8927,29 +9005,13 @@ function _useActivator(props, vm, _ref2) {
8927
9005
  let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
8928
9006
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
8929
9007
  if (!el) return;
8930
- Object.entries(activatorEvents.value).forEach(_ref3 => {
8931
- let [name, cb] = _ref3;
8932
- el.addEventListener(name, cb);
8933
- });
8934
- Object.keys(_props).forEach(k => {
8935
- if (_props[k] == null) {
8936
- el.removeAttribute(k);
8937
- } else {
8938
- el.setAttribute(k, _props[k]);
8939
- }
8940
- });
9008
+ bindProps(el, mergeProps(activatorEvents.value, _props));
8941
9009
  }
8942
9010
  function unbindActivatorProps() {
8943
9011
  let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
8944
9012
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
8945
9013
  if (!el) return;
8946
- Object.entries(activatorEvents.value).forEach(_ref4 => {
8947
- let [name, cb] = _ref4;
8948
- el.removeEventListener(name, cb);
8949
- });
8950
- Object.keys(_props).forEach(k => {
8951
- el.removeAttribute(k);
8952
- });
9014
+ unbindProps(el, mergeProps(activatorEvents.value, _props));
8953
9015
  }
8954
9016
  function getActivator() {
8955
9017
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
@@ -9476,6 +9538,9 @@ const VOverlay = genericComponent()({
9476
9538
  if (e.key === 'Escape' && globalTop.value) {
9477
9539
  if (!props.persistent) {
9478
9540
  isActive.value = false;
9541
+ if (contentEl.value?.contains(document.activeElement)) {
9542
+ activatorEl.value?.focus();
9543
+ }
9479
9544
  } else animateClick();
9480
9545
  }
9481
9546
  }
@@ -9518,7 +9583,7 @@ const VOverlay = genericComponent()({
9518
9583
  isActive: isActive.value,
9519
9584
  props: mergeProps({
9520
9585
  ref: activatorRef
9521
- }, toHandlers(activatorEvents.value), props.activatorProps)
9586
+ }, activatorEvents.value, props.activatorProps)
9522
9587
  }), isMounted.value && createVNode(Teleport, {
9523
9588
  "disabled": !teleportTarget.value,
9524
9589
  "to": teleportTarget.value
@@ -9536,7 +9601,7 @@ const VOverlay = genericComponent()({
9536
9601
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
9537
9602
  "color": scrimColor,
9538
9603
  "modelValue": isActive.value && !!props.scrim
9539
- }, toHandlers(scrimEvents.value)), null), createVNode(MaybeTransition, {
9604
+ }, scrimEvents.value), null), createVNode(MaybeTransition, {
9540
9605
  "appear": true,
9541
9606
  "persisted": true,
9542
9607
  "transition": props.transition,
@@ -9550,7 +9615,7 @@ const VOverlay = genericComponent()({
9550
9615
  "ref": contentEl,
9551
9616
  "class": ['v-overlay__content', props.contentClass],
9552
9617
  "style": [dimensionStyles.value, contentStyles.value]
9553
- }, toHandlers(contentEvents.value), props.contentProps), [slots.default?.({
9618
+ }, contentEvents.value, props.contentProps), [slots.default?.({
9554
9619
  isActive
9555
9620
  })]), [[vShow, isActive.value], [resolveDirective("click-outside"), {
9556
9621
  handler: onClickOutside,
@@ -9710,10 +9775,35 @@ const VMenu = genericComponent()({
9710
9775
  function onClickOutside() {
9711
9776
  parent?.closeParents();
9712
9777
  }
9778
+ function onKeydown(e) {
9779
+ if (props.disabled) return;
9780
+ if (e.key === 'Tab') {
9781
+ isActive.value = false;
9782
+ overlay.value?.activatorEl?.focus();
9783
+ }
9784
+ }
9785
+ function onActivatorKeydown(e) {
9786
+ if (props.disabled) return;
9787
+ const el = overlay.value?.contentEl;
9788
+ if (el && isActive.value) {
9789
+ if (e.key === 'ArrowDown') {
9790
+ e.preventDefault();
9791
+ focusChild(el, 'next');
9792
+ } else if (e.key === 'ArrowUp') {
9793
+ e.preventDefault();
9794
+ focusChild(el, 'prev');
9795
+ }
9796
+ } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
9797
+ isActive.value = true;
9798
+ e.preventDefault();
9799
+ setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
9800
+ }
9801
+ }
9713
9802
  const activatorProps = computed(() => mergeProps({
9714
9803
  'aria-haspopup': 'menu',
9715
9804
  'aria-expanded': String(isActive.value),
9716
- 'aria-owns': id.value
9805
+ 'aria-owns': id.value,
9806
+ onKeydown: onActivatorKeydown
9717
9807
  }, props.activatorProps));
9718
9808
  useRender(() => {
9719
9809
  const [overlayProps] = VOverlay.filterProps(props);
@@ -9726,7 +9816,8 @@ const VMenu = genericComponent()({
9726
9816
  "onUpdate:modelValue": $event => isActive.value = $event,
9727
9817
  "absolute": true,
9728
9818
  "activatorProps": activatorProps.value,
9729
- "onClick:outside": onClickOutside
9819
+ "onClick:outside": onClickOutside,
9820
+ "onKeydown": onKeydown
9730
9821
  }, scopeId), {
9731
9822
  activator: slots.activator,
9732
9823
  default: function () {
@@ -10370,6 +10461,7 @@ const VSelect = genericComponent()({
10370
10461
  }
10371
10462
  return items.value;
10372
10463
  });
10464
+ const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
10373
10465
  const listRef = ref();
10374
10466
  function onClear(e) {
10375
10467
  if (props.openOnClear) {
@@ -10377,7 +10469,7 @@ const VSelect = genericComponent()({
10377
10469
  }
10378
10470
  }
10379
10471
  function onMousedownControl() {
10380
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10472
+ if (menuDisabled.value) return;
10381
10473
  menu.value = !menu.value;
10382
10474
  }
10383
10475
  function onKeydown(e) {
@@ -10391,11 +10483,7 @@ const VSelect = genericComponent()({
10391
10483
  if (['Escape', 'Tab'].includes(e.key)) {
10392
10484
  menu.value = false;
10393
10485
  }
10394
- if (e.key === 'ArrowDown') {
10395
- listRef.value?.focus('next');
10396
- } else if (e.key === 'ArrowUp') {
10397
- listRef.value?.focus('prev');
10398
- } else if (e.key === 'Home') {
10486
+ if (e.key === 'Home') {
10399
10487
  listRef.value?.focus('first');
10400
10488
  } else if (e.key === 'End') {
10401
10489
  listRef.value?.focus('last');
@@ -10421,6 +10509,11 @@ const VSelect = genericComponent()({
10421
10509
  model.value = [item];
10422
10510
  }
10423
10511
  }
10512
+ function onListKeydown(e) {
10513
+ if (e.key === 'Tab') {
10514
+ vTextFieldRef.value?.focus();
10515
+ }
10516
+ }
10424
10517
  function select(item) {
10425
10518
  if (props.multiple) {
10426
10519
  const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
@@ -10451,7 +10544,7 @@ const VSelect = genericComponent()({
10451
10544
  }
10452
10545
  useRender(() => {
10453
10546
  const hasChips = !!(props.chips || slots.chip);
10454
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10547
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
10455
10548
  const isDirty = model.value.length > 0;
10456
10549
  const [textFieldProps] = VTextField.filterProps(props);
10457
10550
  const placeholder = isDirty || !isFocused.value && props.label && !props.persistentPlaceholder ? undefined : props.placeholder;
@@ -10488,6 +10581,7 @@ const VSelect = genericComponent()({
10488
10581
  "onUpdate:modelValue": $event => menu.value = $event,
10489
10582
  "activator": "parent",
10490
10583
  "contentClass": "v-select__content",
10584
+ "disabled": menuDisabled.value,
10491
10585
  "eager": props.eager,
10492
10586
  "maxHeight": 310,
10493
10587
  "openOnClick": false,
@@ -10500,11 +10594,13 @@ const VSelect = genericComponent()({
10500
10594
  "selected": selected.value,
10501
10595
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10502
10596
  "onMousedown": e => e.preventDefault(),
10503
- "onFocusin": onFocusin
10597
+ "onKeydown": onListKeydown,
10598
+ "onFocusin": onFocusin,
10599
+ "tabindex": "-1"
10504
10600
  }, {
10505
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10601
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10506
10602
  "title": t(props.noDataText)
10507
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
10603
+ }, null)), displayItems.value.map((item, index) => {
10508
10604
  const itemProps = mergeProps(item.props, {
10509
10605
  key: index,
10510
10606
  onClick: () => select(item)
@@ -10796,6 +10892,7 @@ const VAutocomplete = genericComponent()({
10796
10892
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
10797
10893
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
10798
10894
  });
10895
+ const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
10799
10896
  const listRef = ref();
10800
10897
  function onClear(e) {
10801
10898
  if (props.openOnClear) {
@@ -10804,10 +10901,11 @@ const VAutocomplete = genericComponent()({
10804
10901
  search.value = '';
10805
10902
  }
10806
10903
  function onMousedownControl() {
10807
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10904
+ if (menuDisabled.value) return;
10808
10905
  menu.value = true;
10809
10906
  }
10810
10907
  function onMousedownMenuIcon(e) {
10908
+ if (menuDisabled.value) return;
10811
10909
  if (isFocused.value) {
10812
10910
  e.preventDefault();
10813
10911
  e.stopPropagation();
@@ -10833,13 +10931,8 @@ const VAutocomplete = genericComponent()({
10833
10931
  }
10834
10932
  isPristine.value = true;
10835
10933
  }
10836
- if (e.key === 'ArrowDown') {
10934
+ if (e.key === 'ArrowDown' && highlightFirst.value) {
10837
10935
  listRef.value?.focus('next');
10838
- if (highlightFirst.value) {
10839
- listRef.value?.focus('next');
10840
- }
10841
- } else if (e.key === 'ArrowUp') {
10842
- listRef.value?.focus('prev');
10843
10936
  }
10844
10937
  if (!props.multiple) return;
10845
10938
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -10874,6 +10967,11 @@ const VAutocomplete = genericComponent()({
10874
10967
  }
10875
10968
  }
10876
10969
  }
10970
+ function onListKeydown(e) {
10971
+ if (e.key === 'Tab') {
10972
+ vTextFieldRef.value?.focus();
10973
+ }
10974
+ }
10877
10975
  function onInput(e) {
10878
10976
  search.value = e.target.value;
10879
10977
  }
@@ -10943,7 +11041,7 @@ const VAutocomplete = genericComponent()({
10943
11041
  });
10944
11042
  useRender(() => {
10945
11043
  const hasChips = !!(props.chips || slots.chip);
10946
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
11044
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
10947
11045
  const isDirty = model.value.length > 0;
10948
11046
  const [textFieldProps] = VTextField.filterProps(props);
10949
11047
  return createVNode(VTextField, mergeProps({
@@ -10976,6 +11074,7 @@ const VAutocomplete = genericComponent()({
10976
11074
  "onUpdate:modelValue": $event => menu.value = $event,
10977
11075
  "activator": "parent",
10978
11076
  "contentClass": "v-autocomplete__content",
11077
+ "disabled": menuDisabled.value,
10979
11078
  "eager": props.eager,
10980
11079
  "maxHeight": 310,
10981
11080
  "openOnClick": false,
@@ -10988,12 +11087,14 @@ const VAutocomplete = genericComponent()({
10988
11087
  "selected": selected.value,
10989
11088
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10990
11089
  "onMousedown": e => e.preventDefault(),
11090
+ "onKeydown": onListKeydown,
10991
11091
  "onFocusin": onFocusin,
10992
- "onFocusout": onFocusout
11092
+ "onFocusout": onFocusout,
11093
+ "tabindex": "-1"
10993
11094
  }, {
10994
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
11095
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10995
11096
  "title": t(props.noDataText)
10996
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
11097
+ }, null)), displayItems.value.map((item, index) => {
10997
11098
  const itemProps = mergeProps(item.props, {
10998
11099
  key: index,
10999
11100
  active: highlightFirst.value && index === 0 ? true : undefined,
@@ -11743,7 +11844,7 @@ const makeVCardProps = propsFactory({
11743
11844
  prependAvatar: String,
11744
11845
  prependIcon: IconValue,
11745
11846
  ripple: {
11746
- type: Boolean,
11847
+ type: [Boolean, Object],
11747
11848
  default: true
11748
11849
  },
11749
11850
  subtitle: String,
@@ -13148,6 +13249,8 @@ const useSlider = _ref => {
13148
13249
  return data;
13149
13250
  };
13150
13251
 
13252
+ // Types
13253
+
13151
13254
  const makeVSliderThumbProps = propsFactory({
13152
13255
  focused: Boolean,
13153
13256
  max: {
@@ -13167,7 +13270,7 @@ const makeVSliderThumbProps = propsFactory({
13167
13270
  required: true
13168
13271
  },
13169
13272
  ripple: {
13170
- type: Boolean,
13273
+ type: [Boolean, Object],
13171
13274
  default: true
13172
13275
  },
13173
13276
  ...makeComponentProps()
@@ -14326,6 +14429,7 @@ const VCombobox = genericComponent()({
14326
14429
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
14327
14430
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
14328
14431
  });
14432
+ const menuDisabled = computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
14329
14433
  const listRef = ref();
14330
14434
  function onClear(e) {
14331
14435
  cleared = true;
@@ -14334,10 +14438,11 @@ const VCombobox = genericComponent()({
14334
14438
  }
14335
14439
  }
14336
14440
  function onMousedownControl() {
14337
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
14441
+ if (menuDisabled.value) return;
14338
14442
  menu.value = true;
14339
14443
  }
14340
14444
  function onMousedownMenuIcon(e) {
14445
+ if (menuDisabled.value) return;
14341
14446
  if (isFocused.value) {
14342
14447
  e.preventDefault();
14343
14448
  e.stopPropagation();
@@ -14363,10 +14468,8 @@ const VCombobox = genericComponent()({
14363
14468
  }
14364
14469
  isPristine.value = true;
14365
14470
  }
14366
- if (e.key === 'ArrowDown') {
14471
+ if (e.key === 'ArrowDown' && highlightFirst.value) {
14367
14472
  listRef.value?.focus('next');
14368
- } else if (e.key === 'ArrowUp') {
14369
- listRef.value?.focus('prev');
14370
14473
  }
14371
14474
  if (!props.multiple) return;
14372
14475
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -14405,6 +14508,11 @@ const VCombobox = genericComponent()({
14405
14508
  search.value = '';
14406
14509
  }
14407
14510
  }
14511
+ function onListKeydown(e) {
14512
+ if (e.key === 'Tab') {
14513
+ vTextFieldRef.value?.focus();
14514
+ }
14515
+ }
14408
14516
  function onAfterLeave() {
14409
14517
  if (isFocused.value) {
14410
14518
  isPristine.value = true;
@@ -14466,7 +14574,7 @@ const VCombobox = genericComponent()({
14466
14574
  });
14467
14575
  useRender(() => {
14468
14576
  const hasChips = !!(props.chips || slots.chip);
14469
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
14577
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
14470
14578
  const isDirty = model.value.length > 0;
14471
14579
  const [textFieldProps] = VTextField.filterProps(props);
14472
14580
  return createVNode(VTextField, mergeProps({
@@ -14499,6 +14607,7 @@ const VCombobox = genericComponent()({
14499
14607
  "onUpdate:modelValue": $event => menu.value = $event,
14500
14608
  "activator": "parent",
14501
14609
  "contentClass": "v-combobox__content",
14610
+ "disabled": menuDisabled.value,
14502
14611
  "eager": props.eager,
14503
14612
  "maxHeight": 310,
14504
14613
  "openOnClick": false,
@@ -14511,12 +14620,14 @@ const VCombobox = genericComponent()({
14511
14620
  "selected": selected.value,
14512
14621
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14513
14622
  "onMousedown": e => e.preventDefault(),
14623
+ "onKeydown": onListKeydown,
14514
14624
  "onFocusin": onFocusin,
14515
- "onFocusout": onFocusout
14625
+ "onFocusout": onFocusout,
14626
+ "tabindex": "-1"
14516
14627
  }, {
14517
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
14628
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
14518
14629
  "title": t(props.noDataText)
14519
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
14630
+ }, null)), displayItems.value.map((item, index) => {
14520
14631
  const itemProps = mergeProps(item.props, {
14521
14632
  key: index,
14522
14633
  active: highlightFirst.value && index === 0 ? true : undefined,
@@ -14808,6 +14919,8 @@ const VExpansionPanelText = genericComponent()({
14808
14919
  }
14809
14920
  });
14810
14921
 
14922
+ // Types
14923
+
14811
14924
  const makeVExpansionPanelTitleProps = propsFactory({
14812
14925
  color: String,
14813
14926
  expandIcon: {
@@ -19503,9 +19616,10 @@ const singleSelectStrategy = {
19503
19616
  allSelected: () => [],
19504
19617
  select: _ref => {
19505
19618
  let {
19506
- items
19619
+ items,
19620
+ value
19507
19621
  } = _ref;
19508
- return new Set([items[0]?.value]);
19622
+ return new Set(value ? [items[0]?.value] : []);
19509
19623
  },
19510
19624
  selectAll: _ref2 => {
19511
19625
  let {
@@ -20393,11 +20507,11 @@ const VDataTableHeaders = genericComponent()({
20393
20507
  "x": x,
20394
20508
  "y": y
20395
20509
  }, null))])), props.loading && createVNode("tr", {
20396
- "class": "v-data-table__progress"
20510
+ "class": "v-data-table-progress"
20397
20511
  }, [createVNode("th", {
20398
20512
  "colspan": columns.value.length
20399
20513
  }, [createVNode(LoaderSlot, {
20400
- "name": "v-data-table-headers",
20514
+ "name": "v-data-table-progress",
20401
20515
  "active": true,
20402
20516
  "color": typeof props.loading === 'boolean' ? undefined : props.loading,
20403
20517
  "indeterminate": true
@@ -22389,7 +22503,7 @@ function createVuetify$1() {
22389
22503
  date
22390
22504
  };
22391
22505
  }
22392
- const version$1 = "3.3.2";
22506
+ const version$1 = "3.3.3";
22393
22507
  createVuetify$1.version = version$1;
22394
22508
 
22395
22509
  // Vue's inject() can only be used in setup
@@ -22403,7 +22517,7 @@ function inject(key) {
22403
22517
 
22404
22518
  /* eslint-disable local-rules/sort-imports */
22405
22519
 
22406
- const version = "3.3.2";
22520
+ const version = "3.3.3";
22407
22521
 
22408
22522
  /* eslint-disable local-rules/sort-imports */
22409
22523