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,5 +1,5 @@
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
  */
@@ -298,6 +298,15 @@
298
298
  }
299
299
  return out;
300
300
  }
301
+ function flattenFragments(nodes) {
302
+ return nodes.map(node => {
303
+ if (node.type === vue.Fragment) {
304
+ return flattenFragments(node.children);
305
+ } else {
306
+ return node;
307
+ }
308
+ }).flat();
309
+ }
301
310
  function toKebabCase() {
302
311
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
303
312
  if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
@@ -377,6 +386,9 @@
377
386
  }
378
387
  const onRE = /^on[^a-z]/;
379
388
  const isOn = key => onRE.test(key);
389
+ function eventName(propName) {
390
+ return propName[2].toLowerCase() + propName.slice(3);
391
+ }
380
392
  const EventProp = () => [Function, Array];
381
393
  function hasEvent(props, name) {
382
394
  name = 'on' + vue.capitalize(name);
@@ -575,6 +587,54 @@
575
587
  return animation;
576
588
  }
577
589
 
590
+ // Utilities
591
+ const handlers = new WeakMap();
592
+ function bindProps(el, props) {
593
+ Object.keys(props).forEach(k => {
594
+ if (isOn(k)) {
595
+ const name = eventName(k);
596
+ const handler = handlers.get(el);
597
+ if (props[k] == null) {
598
+ handler?.forEach(v => {
599
+ const [n, fn] = v;
600
+ if (n === name) {
601
+ el.removeEventListener(name, fn);
602
+ handler.delete(v);
603
+ }
604
+ });
605
+ } else if (!handler || ![...handler]?.some(v => v[0] === name && v[1] === props[k])) {
606
+ el.addEventListener(name, props[k]);
607
+ const _handler = handler || new Set();
608
+ _handler.add([name, props[k]]);
609
+ if (!handlers.has(el)) handlers.set(el, _handler);
610
+ }
611
+ } else {
612
+ if (props[k] == null) {
613
+ el.removeAttribute(k);
614
+ } else {
615
+ el.setAttribute(k, props[k]);
616
+ }
617
+ }
618
+ });
619
+ }
620
+ function unbindProps(el, props) {
621
+ Object.keys(props).forEach(k => {
622
+ if (isOn(k)) {
623
+ const name = eventName(k);
624
+ const handler = handlers.get(el);
625
+ handler?.forEach(v => {
626
+ const [n, fn] = v;
627
+ if (n === name) {
628
+ el.removeEventListener(name, fn);
629
+ handler.delete(v);
630
+ }
631
+ });
632
+ } else {
633
+ el.removeAttribute(k);
634
+ }
635
+ });
636
+ }
637
+
578
638
  /* eslint-disable no-console */
579
639
 
580
640
  function consoleWarn(message) {
@@ -2162,6 +2222,7 @@
2162
2222
  };
2163
2223
  }
2164
2224
  function install(app) {
2225
+ if (parsedOptions.isDisabled) return;
2165
2226
  const head = app._context.provides.usehead;
2166
2227
  if (head) {
2167
2228
  if (head.push) {
@@ -2183,7 +2244,6 @@
2183
2244
  immediate: true
2184
2245
  });
2185
2246
  function updateStyles() {
2186
- if (parsedOptions.isDisabled) return;
2187
2247
  if (typeof document !== 'undefined' && !styleEl) {
2188
2248
  const el = document.createElement('style');
2189
2249
  el.type = 'text/css';
@@ -4270,7 +4330,7 @@
4270
4330
  useRender(() => {
4271
4331
  const slotValue = slots.default?.();
4272
4332
  if (slotValue) {
4273
- slotIcon.value = slotValue.filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
4333
+ slotIcon.value = flattenFragments(slotValue).filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]?.children;
4274
4334
  }
4275
4335
  return vue.createVNode(iconData.value.component, {
4276
4336
  "tag": props.tag,
@@ -5107,7 +5167,7 @@
5107
5167
  block: Boolean,
5108
5168
  stacked: Boolean,
5109
5169
  ripple: {
5110
- type: Boolean,
5170
+ type: [Boolean, Object],
5111
5171
  default: true
5112
5172
  },
5113
5173
  text: String,
@@ -6390,6 +6450,7 @@
6390
6450
  inheritAttrs: false,
6391
6451
  props: makeVCheckboxProps(),
6392
6452
  emits: {
6453
+ 'update:modelValue': value => true,
6393
6454
  'update:focused': focused => true
6394
6455
  },
6395
6456
  setup(props, _ref) {
@@ -6397,6 +6458,7 @@
6397
6458
  attrs,
6398
6459
  slots
6399
6460
  } = _ref;
6461
+ const model = useProxiedModel(props, 'modelValue');
6400
6462
  const {
6401
6463
  isFocused,
6402
6464
  focus,
@@ -6411,6 +6473,8 @@
6411
6473
  return vue.createVNode(VInput, vue.mergeProps({
6412
6474
  "class": ['v-checkbox', props.class]
6413
6475
  }, inputAttrs, inputProps, {
6476
+ "modelValue": model.value,
6477
+ "onUpdate:modelValue": $event => model.value = $event,
6414
6478
  "id": id.value,
6415
6479
  "focused": isFocused.value,
6416
6480
  "style": props.style
@@ -6429,6 +6493,8 @@
6429
6493
  "disabled": isDisabled.value,
6430
6494
  "readonly": isReadonly.value
6431
6495
  }, controlAttrs, {
6496
+ "modelValue": model.value,
6497
+ "onUpdate:modelValue": $event => model.value = $event,
6432
6498
  "onFocus": focus,
6433
6499
  "onBlur": blur
6434
6500
  }), slots);
@@ -6566,6 +6632,8 @@
6566
6632
  }
6567
6633
  });
6568
6634
 
6635
+ // Types
6636
+
6569
6637
  const makeVChipProps = propsFactory({
6570
6638
  activeClass: String,
6571
6639
  appendAvatar: String,
@@ -6594,7 +6662,7 @@
6594
6662
  prependAvatar: String,
6595
6663
  prependIcon: IconValue,
6596
6664
  ripple: {
6597
- type: Boolean,
6665
+ type: [Boolean, Object],
6598
6666
  default: true
6599
6667
  },
6600
6668
  text: String,
@@ -7410,7 +7478,7 @@
7410
7478
  prependAvatar: String,
7411
7479
  prependIcon: IconValue,
7412
7480
  ripple: {
7413
- type: Boolean,
7481
+ type: [Boolean, Object],
7414
7482
  default: true
7415
7483
  },
7416
7484
  subtitle: [String, Number, Boolean],
@@ -8783,29 +8851,29 @@
8783
8851
  }
8784
8852
  });
8785
8853
  const availableEvents = {
8786
- click: e => {
8854
+ onClick: e => {
8787
8855
  e.stopPropagation();
8788
8856
  activatorEl.value = e.currentTarget || e.target;
8789
8857
  isActive.value = !isActive.value;
8790
8858
  },
8791
- mouseenter: e => {
8859
+ onMouseenter: e => {
8792
8860
  if (e.sourceCapabilities?.firesTouchEvents) return;
8793
8861
  isHovered = true;
8794
8862
  activatorEl.value = e.currentTarget || e.target;
8795
8863
  runOpenDelay();
8796
8864
  },
8797
- mouseleave: e => {
8865
+ onMouseleave: e => {
8798
8866
  isHovered = false;
8799
8867
  runCloseDelay();
8800
8868
  },
8801
- focus: e => {
8869
+ onFocus: e => {
8802
8870
  if (SUPPORTS_FOCUS_VISIBLE && !e.target.matches(':focus-visible')) return;
8803
8871
  isFocused = true;
8804
8872
  e.stopPropagation();
8805
8873
  activatorEl.value = e.currentTarget || e.target;
8806
8874
  runOpenDelay();
8807
8875
  },
8808
- blur: e => {
8876
+ onBlur: e => {
8809
8877
  isFocused = false;
8810
8878
  e.stopPropagation();
8811
8879
  runCloseDelay();
@@ -8814,33 +8882,43 @@
8814
8882
  const activatorEvents = vue.computed(() => {
8815
8883
  const events = {};
8816
8884
  if (openOnClick.value) {
8817
- events.click = availableEvents.click;
8885
+ events.onClick = availableEvents.onClick;
8818
8886
  }
8819
8887
  if (props.openOnHover) {
8820
- events.mouseenter = availableEvents.mouseenter;
8821
- events.mouseleave = availableEvents.mouseleave;
8888
+ events.onMouseenter = availableEvents.onMouseenter;
8889
+ events.onMouseleave = availableEvents.onMouseleave;
8822
8890
  }
8823
8891
  if (openOnFocus.value) {
8824
- events.focus = availableEvents.focus;
8825
- events.blur = availableEvents.blur;
8892
+ events.onFocus = availableEvents.onFocus;
8893
+ events.onBlur = availableEvents.onBlur;
8826
8894
  }
8827
8895
  return events;
8828
8896
  });
8829
8897
  const contentEvents = vue.computed(() => {
8830
8898
  const events = {};
8831
8899
  if (props.openOnHover) {
8832
- events.mouseenter = () => {
8900
+ events.onMouseenter = () => {
8833
8901
  isHovered = true;
8834
8902
  runOpenDelay();
8835
8903
  };
8836
- events.mouseleave = () => {
8904
+ events.onMouseleave = () => {
8837
8905
  isHovered = false;
8838
8906
  runCloseDelay();
8839
8907
  };
8840
8908
  }
8909
+ if (openOnFocus.value) {
8910
+ events.onFocusin = () => {
8911
+ isFocused = true;
8912
+ runOpenDelay();
8913
+ };
8914
+ events.onFocusout = () => {
8915
+ isFocused = false;
8916
+ runCloseDelay();
8917
+ };
8918
+ }
8841
8919
  if (props.closeOnContentClick) {
8842
8920
  const menu = vue.inject(VMenuSymbol, null);
8843
- events.click = () => {
8921
+ events.onClick = () => {
8844
8922
  isActive.value = false;
8845
8923
  menu?.closeParents();
8846
8924
  };
@@ -8850,14 +8928,14 @@
8850
8928
  const scrimEvents = vue.computed(() => {
8851
8929
  const events = {};
8852
8930
  if (props.openOnHover) {
8853
- events.mouseenter = () => {
8931
+ events.onMouseenter = () => {
8854
8932
  if (firstEnter) {
8855
8933
  isHovered = true;
8856
8934
  firstEnter = false;
8857
8935
  runOpenDelay();
8858
8936
  }
8859
8937
  };
8860
- events.mouseleave = () => {
8938
+ events.onMouseleave = () => {
8861
8939
  isHovered = false;
8862
8940
  runCloseDelay();
8863
8941
  };
@@ -8931,29 +9009,13 @@
8931
9009
  let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
8932
9010
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
8933
9011
  if (!el) return;
8934
- Object.entries(activatorEvents.value).forEach(_ref3 => {
8935
- let [name, cb] = _ref3;
8936
- el.addEventListener(name, cb);
8937
- });
8938
- Object.keys(_props).forEach(k => {
8939
- if (_props[k] == null) {
8940
- el.removeAttribute(k);
8941
- } else {
8942
- el.setAttribute(k, _props[k]);
8943
- }
8944
- });
9012
+ bindProps(el, vue.mergeProps(activatorEvents.value, _props));
8945
9013
  }
8946
9014
  function unbindActivatorProps() {
8947
9015
  let el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getActivator();
8948
9016
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
8949
9017
  if (!el) return;
8950
- Object.entries(activatorEvents.value).forEach(_ref4 => {
8951
- let [name, cb] = _ref4;
8952
- el.removeEventListener(name, cb);
8953
- });
8954
- Object.keys(_props).forEach(k => {
8955
- el.removeAttribute(k);
8956
- });
9018
+ unbindProps(el, vue.mergeProps(activatorEvents.value, _props));
8957
9019
  }
8958
9020
  function getActivator() {
8959
9021
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
@@ -9480,6 +9542,9 @@
9480
9542
  if (e.key === 'Escape' && globalTop.value) {
9481
9543
  if (!props.persistent) {
9482
9544
  isActive.value = false;
9545
+ if (contentEl.value?.contains(document.activeElement)) {
9546
+ activatorEl.value?.focus();
9547
+ }
9483
9548
  } else animateClick();
9484
9549
  }
9485
9550
  }
@@ -9522,7 +9587,7 @@
9522
9587
  isActive: isActive.value,
9523
9588
  props: vue.mergeProps({
9524
9589
  ref: activatorRef
9525
- }, vue.toHandlers(activatorEvents.value), props.activatorProps)
9590
+ }, activatorEvents.value, props.activatorProps)
9526
9591
  }), isMounted.value && vue.createVNode(vue.Teleport, {
9527
9592
  "disabled": !teleportTarget.value,
9528
9593
  "to": teleportTarget.value
@@ -9540,7 +9605,7 @@
9540
9605
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9541
9606
  "color": scrimColor,
9542
9607
  "modelValue": isActive.value && !!props.scrim
9543
- }, vue.toHandlers(scrimEvents.value)), null), vue.createVNode(MaybeTransition, {
9608
+ }, scrimEvents.value), null), vue.createVNode(MaybeTransition, {
9544
9609
  "appear": true,
9545
9610
  "persisted": true,
9546
9611
  "transition": props.transition,
@@ -9554,7 +9619,7 @@
9554
9619
  "ref": contentEl,
9555
9620
  "class": ['v-overlay__content', props.contentClass],
9556
9621
  "style": [dimensionStyles.value, contentStyles.value]
9557
- }, vue.toHandlers(contentEvents.value), props.contentProps), [slots.default?.({
9622
+ }, contentEvents.value, props.contentProps), [slots.default?.({
9558
9623
  isActive
9559
9624
  })]), [[vue.vShow, isActive.value], [vue.resolveDirective("click-outside"), {
9560
9625
  handler: onClickOutside,
@@ -9714,10 +9779,35 @@
9714
9779
  function onClickOutside() {
9715
9780
  parent?.closeParents();
9716
9781
  }
9782
+ function onKeydown(e) {
9783
+ if (props.disabled) return;
9784
+ if (e.key === 'Tab') {
9785
+ isActive.value = false;
9786
+ overlay.value?.activatorEl?.focus();
9787
+ }
9788
+ }
9789
+ function onActivatorKeydown(e) {
9790
+ if (props.disabled) return;
9791
+ const el = overlay.value?.contentEl;
9792
+ if (el && isActive.value) {
9793
+ if (e.key === 'ArrowDown') {
9794
+ e.preventDefault();
9795
+ focusChild(el, 'next');
9796
+ } else if (e.key === 'ArrowUp') {
9797
+ e.preventDefault();
9798
+ focusChild(el, 'prev');
9799
+ }
9800
+ } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
9801
+ isActive.value = true;
9802
+ e.preventDefault();
9803
+ setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
9804
+ }
9805
+ }
9717
9806
  const activatorProps = vue.computed(() => vue.mergeProps({
9718
9807
  'aria-haspopup': 'menu',
9719
9808
  'aria-expanded': String(isActive.value),
9720
- 'aria-owns': id.value
9809
+ 'aria-owns': id.value,
9810
+ onKeydown: onActivatorKeydown
9721
9811
  }, props.activatorProps));
9722
9812
  useRender(() => {
9723
9813
  const [overlayProps] = VOverlay.filterProps(props);
@@ -9730,7 +9820,8 @@
9730
9820
  "onUpdate:modelValue": $event => isActive.value = $event,
9731
9821
  "absolute": true,
9732
9822
  "activatorProps": activatorProps.value,
9733
- "onClick:outside": onClickOutside
9823
+ "onClick:outside": onClickOutside,
9824
+ "onKeydown": onKeydown
9734
9825
  }, scopeId), {
9735
9826
  activator: slots.activator,
9736
9827
  default: function () {
@@ -10374,6 +10465,7 @@
10374
10465
  }
10375
10466
  return items.value;
10376
10467
  });
10468
+ const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
10377
10469
  const listRef = vue.ref();
10378
10470
  function onClear(e) {
10379
10471
  if (props.openOnClear) {
@@ -10381,7 +10473,7 @@
10381
10473
  }
10382
10474
  }
10383
10475
  function onMousedownControl() {
10384
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10476
+ if (menuDisabled.value) return;
10385
10477
  menu.value = !menu.value;
10386
10478
  }
10387
10479
  function onKeydown(e) {
@@ -10395,11 +10487,7 @@
10395
10487
  if (['Escape', 'Tab'].includes(e.key)) {
10396
10488
  menu.value = false;
10397
10489
  }
10398
- if (e.key === 'ArrowDown') {
10399
- listRef.value?.focus('next');
10400
- } else if (e.key === 'ArrowUp') {
10401
- listRef.value?.focus('prev');
10402
- } else if (e.key === 'Home') {
10490
+ if (e.key === 'Home') {
10403
10491
  listRef.value?.focus('first');
10404
10492
  } else if (e.key === 'End') {
10405
10493
  listRef.value?.focus('last');
@@ -10425,6 +10513,11 @@
10425
10513
  model.value = [item];
10426
10514
  }
10427
10515
  }
10516
+ function onListKeydown(e) {
10517
+ if (e.key === 'Tab') {
10518
+ vTextFieldRef.value?.focus();
10519
+ }
10520
+ }
10428
10521
  function select(item) {
10429
10522
  if (props.multiple) {
10430
10523
  const index = selected.value.findIndex(selection => props.valueComparator(selection, item.value));
@@ -10455,7 +10548,7 @@
10455
10548
  }
10456
10549
  useRender(() => {
10457
10550
  const hasChips = !!(props.chips || slots.chip);
10458
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
10551
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
10459
10552
  const isDirty = model.value.length > 0;
10460
10553
  const [textFieldProps] = VTextField.filterProps(props);
10461
10554
  const placeholder = isDirty || !isFocused.value && props.label && !props.persistentPlaceholder ? undefined : props.placeholder;
@@ -10492,6 +10585,7 @@
10492
10585
  "onUpdate:modelValue": $event => menu.value = $event,
10493
10586
  "activator": "parent",
10494
10587
  "contentClass": "v-select__content",
10588
+ "disabled": menuDisabled.value,
10495
10589
  "eager": props.eager,
10496
10590
  "maxHeight": 310,
10497
10591
  "openOnClick": false,
@@ -10504,11 +10598,13 @@
10504
10598
  "selected": selected.value,
10505
10599
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10506
10600
  "onMousedown": e => e.preventDefault(),
10507
- "onFocusin": onFocusin
10601
+ "onKeydown": onListKeydown,
10602
+ "onFocusin": onFocusin,
10603
+ "tabindex": "-1"
10508
10604
  }, {
10509
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
10605
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
10510
10606
  "title": t(props.noDataText)
10511
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
10607
+ }, null)), displayItems.value.map((item, index) => {
10512
10608
  const itemProps = vue.mergeProps(item.props, {
10513
10609
  key: index,
10514
10610
  onClick: () => select(item)
@@ -10800,6 +10896,7 @@
10800
10896
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
10801
10897
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
10802
10898
  });
10899
+ const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
10803
10900
  const listRef = vue.ref();
10804
10901
  function onClear(e) {
10805
10902
  if (props.openOnClear) {
@@ -10808,10 +10905,11 @@
10808
10905
  search.value = '';
10809
10906
  }
10810
10907
  function onMousedownControl() {
10811
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10908
+ if (menuDisabled.value) return;
10812
10909
  menu.value = true;
10813
10910
  }
10814
10911
  function onMousedownMenuIcon(e) {
10912
+ if (menuDisabled.value) return;
10815
10913
  if (isFocused.value) {
10816
10914
  e.preventDefault();
10817
10915
  e.stopPropagation();
@@ -10837,13 +10935,8 @@
10837
10935
  }
10838
10936
  isPristine.value = true;
10839
10937
  }
10840
- if (e.key === 'ArrowDown') {
10938
+ if (e.key === 'ArrowDown' && highlightFirst.value) {
10841
10939
  listRef.value?.focus('next');
10842
- if (highlightFirst.value) {
10843
- listRef.value?.focus('next');
10844
- }
10845
- } else if (e.key === 'ArrowUp') {
10846
- listRef.value?.focus('prev');
10847
10940
  }
10848
10941
  if (!props.multiple) return;
10849
10942
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -10878,6 +10971,11 @@
10878
10971
  }
10879
10972
  }
10880
10973
  }
10974
+ function onListKeydown(e) {
10975
+ if (e.key === 'Tab') {
10976
+ vTextFieldRef.value?.focus();
10977
+ }
10978
+ }
10881
10979
  function onInput(e) {
10882
10980
  search.value = e.target.value;
10883
10981
  }
@@ -10947,7 +11045,7 @@
10947
11045
  });
10948
11046
  useRender(() => {
10949
11047
  const hasChips = !!(props.chips || slots.chip);
10950
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
11048
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
10951
11049
  const isDirty = model.value.length > 0;
10952
11050
  const [textFieldProps] = VTextField.filterProps(props);
10953
11051
  return vue.createVNode(VTextField, vue.mergeProps({
@@ -10980,6 +11078,7 @@
10980
11078
  "onUpdate:modelValue": $event => menu.value = $event,
10981
11079
  "activator": "parent",
10982
11080
  "contentClass": "v-autocomplete__content",
11081
+ "disabled": menuDisabled.value,
10983
11082
  "eager": props.eager,
10984
11083
  "maxHeight": 310,
10985
11084
  "openOnClick": false,
@@ -10992,12 +11091,14 @@
10992
11091
  "selected": selected.value,
10993
11092
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10994
11093
  "onMousedown": e => e.preventDefault(),
11094
+ "onKeydown": onListKeydown,
10995
11095
  "onFocusin": onFocusin,
10996
- "onFocusout": onFocusout
11096
+ "onFocusout": onFocusout,
11097
+ "tabindex": "-1"
10997
11098
  }, {
10998
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
11099
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
10999
11100
  "title": t(props.noDataText)
11000
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
11101
+ }, null)), displayItems.value.map((item, index) => {
11001
11102
  const itemProps = vue.mergeProps(item.props, {
11002
11103
  key: index,
11003
11104
  active: highlightFirst.value && index === 0 ? true : undefined,
@@ -11747,7 +11848,7 @@
11747
11848
  prependAvatar: String,
11748
11849
  prependIcon: IconValue,
11749
11850
  ripple: {
11750
- type: Boolean,
11851
+ type: [Boolean, Object],
11751
11852
  default: true
11752
11853
  },
11753
11854
  subtitle: String,
@@ -13152,6 +13253,8 @@
13152
13253
  return data;
13153
13254
  };
13154
13255
 
13256
+ // Types
13257
+
13155
13258
  const makeVSliderThumbProps = propsFactory({
13156
13259
  focused: Boolean,
13157
13260
  max: {
@@ -13171,7 +13274,7 @@
13171
13274
  required: true
13172
13275
  },
13173
13276
  ripple: {
13174
- type: Boolean,
13277
+ type: [Boolean, Object],
13175
13278
  default: true
13176
13279
  },
13177
13280
  ...makeComponentProps()
@@ -14330,6 +14433,7 @@
14330
14433
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
14331
14434
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
14332
14435
  });
14436
+ const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
14333
14437
  const listRef = vue.ref();
14334
14438
  function onClear(e) {
14335
14439
  cleared = true;
@@ -14338,10 +14442,11 @@
14338
14442
  }
14339
14443
  }
14340
14444
  function onMousedownControl() {
14341
- if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
14445
+ if (menuDisabled.value) return;
14342
14446
  menu.value = true;
14343
14447
  }
14344
14448
  function onMousedownMenuIcon(e) {
14449
+ if (menuDisabled.value) return;
14345
14450
  if (isFocused.value) {
14346
14451
  e.preventDefault();
14347
14452
  e.stopPropagation();
@@ -14367,10 +14472,8 @@
14367
14472
  }
14368
14473
  isPristine.value = true;
14369
14474
  }
14370
- if (e.key === 'ArrowDown') {
14475
+ if (e.key === 'ArrowDown' && highlightFirst.value) {
14371
14476
  listRef.value?.focus('next');
14372
- } else if (e.key === 'ArrowUp') {
14373
- listRef.value?.focus('prev');
14374
14477
  }
14375
14478
  if (!props.multiple) return;
14376
14479
  if (['Backspace', 'Delete'].includes(e.key)) {
@@ -14409,6 +14512,11 @@
14409
14512
  search.value = '';
14410
14513
  }
14411
14514
  }
14515
+ function onListKeydown(e) {
14516
+ if (e.key === 'Tab') {
14517
+ vTextFieldRef.value?.focus();
14518
+ }
14519
+ }
14412
14520
  function onAfterLeave() {
14413
14521
  if (isFocused.value) {
14414
14522
  isPristine.value = true;
@@ -14470,7 +14578,7 @@
14470
14578
  });
14471
14579
  useRender(() => {
14472
14580
  const hasChips = !!(props.chips || slots.chip);
14473
- const hasList = !!(!props.hideNoData || displayItems.value.length || slots.prepend || slots.append || slots['no-data']);
14581
+ const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
14474
14582
  const isDirty = model.value.length > 0;
14475
14583
  const [textFieldProps] = VTextField.filterProps(props);
14476
14584
  return vue.createVNode(VTextField, vue.mergeProps({
@@ -14503,6 +14611,7 @@
14503
14611
  "onUpdate:modelValue": $event => menu.value = $event,
14504
14612
  "activator": "parent",
14505
14613
  "contentClass": "v-combobox__content",
14614
+ "disabled": menuDisabled.value,
14506
14615
  "eager": props.eager,
14507
14616
  "maxHeight": 310,
14508
14617
  "openOnClick": false,
@@ -14515,12 +14624,14 @@
14515
14624
  "selected": selected.value,
14516
14625
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14517
14626
  "onMousedown": e => e.preventDefault(),
14627
+ "onKeydown": onListKeydown,
14518
14628
  "onFocusin": onFocusin,
14519
- "onFocusout": onFocusout
14629
+ "onFocusout": onFocusout,
14630
+ "tabindex": "-1"
14520
14631
  }, {
14521
- default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
14632
+ default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
14522
14633
  "title": t(props.noDataText)
14523
- }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
14634
+ }, null)), displayItems.value.map((item, index) => {
14524
14635
  const itemProps = vue.mergeProps(item.props, {
14525
14636
  key: index,
14526
14637
  active: highlightFirst.value && index === 0 ? true : undefined,
@@ -14812,6 +14923,8 @@
14812
14923
  }
14813
14924
  });
14814
14925
 
14926
+ // Types
14927
+
14815
14928
  const makeVExpansionPanelTitleProps = propsFactory({
14816
14929
  color: String,
14817
14930
  expandIcon: {
@@ -19507,9 +19620,10 @@
19507
19620
  allSelected: () => [],
19508
19621
  select: _ref => {
19509
19622
  let {
19510
- items
19623
+ items,
19624
+ value
19511
19625
  } = _ref;
19512
- return new Set([items[0]?.value]);
19626
+ return new Set(value ? [items[0]?.value] : []);
19513
19627
  },
19514
19628
  selectAll: _ref2 => {
19515
19629
  let {
@@ -20397,11 +20511,11 @@
20397
20511
  "x": x,
20398
20512
  "y": y
20399
20513
  }, null))])), props.loading && vue.createVNode("tr", {
20400
- "class": "v-data-table__progress"
20514
+ "class": "v-data-table-progress"
20401
20515
  }, [vue.createVNode("th", {
20402
20516
  "colspan": columns.value.length
20403
20517
  }, [vue.createVNode(LoaderSlot, {
20404
- "name": "v-data-table-headers",
20518
+ "name": "v-data-table-progress",
20405
20519
  "active": true,
20406
20520
  "color": typeof props.loading === 'boolean' ? undefined : props.loading,
20407
20521
  "indeterminate": true
@@ -22393,7 +22507,7 @@
22393
22507
  date
22394
22508
  };
22395
22509
  }
22396
- const version$1 = "3.3.2";
22510
+ const version$1 = "3.3.3";
22397
22511
  createVuetify$1.version = version$1;
22398
22512
 
22399
22513
  // Vue's inject() can only be used in setup
@@ -22407,7 +22521,7 @@
22407
22521
 
22408
22522
  /* eslint-disable local-rules/sort-imports */
22409
22523
 
22410
- const version = "3.3.2";
22524
+ const version = "3.3.3";
22411
22525
 
22412
22526
  /* eslint-disable local-rules/sort-imports */
22413
22527