vuetify 3.7.6 → 3.7.8

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 (127) hide show
  1. package/dist/json/attributes.json +3563 -3559
  2. package/dist/json/importMap-labs.json +18 -18
  3. package/dist/json/importMap.json +186 -186
  4. package/dist/json/tags.json +1 -0
  5. package/dist/json/web-types.json +6758 -6837
  6. package/dist/vuetify-labs.css +4379 -4357
  7. package/dist/vuetify-labs.d.ts +996 -1193
  8. package/dist/vuetify-labs.esm.js +138 -84
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +138 -84
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +4134 -4118
  13. package/dist/vuetify.d.ts +171 -182
  14. package/dist/vuetify.esm.js +109 -71
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +109 -71
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +951 -948
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +7 -4
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +1 -0
  24. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  25. package/lib/components/VColorPicker/VColorPickerPreview.mjs +2 -2
  26. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  27. package/lib/components/VCombobox/VCombobox.mjs +7 -4
  28. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  29. package/lib/components/VDataIterator/index.d.mts +0 -1
  30. package/lib/components/VDataTable/VDataTable.css +2 -2
  31. package/lib/components/VDataTable/VDataTable.mjs +3 -1
  32. package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
  33. package/lib/components/VDataTable/VDataTable.sass +2 -2
  34. package/lib/components/VDataTable/VDataTableHeaders.mjs +6 -4
  35. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  36. package/lib/components/VDataTable/VDataTableServer.mjs +5 -5
  37. package/lib/components/VDataTable/VDataTableServer.mjs.map +1 -1
  38. package/lib/components/VDataTable/VDataTableVirtual.mjs +5 -5
  39. package/lib/components/VDataTable/VDataTableVirtual.mjs.map +1 -1
  40. package/lib/components/VDataTable/composables/group.mjs +1 -1
  41. package/lib/components/VDataTable/composables/group.mjs.map +1 -1
  42. package/lib/components/VDataTable/composables/paginate.mjs +2 -0
  43. package/lib/components/VDataTable/composables/paginate.mjs.map +1 -1
  44. package/lib/components/VDataTable/index.d.mts +38 -46
  45. package/lib/components/VDataTable/types.mjs.map +1 -1
  46. package/lib/components/VDialog/VDialog.css +5 -2
  47. package/lib/components/VDialog/VDialog.sass +6 -2
  48. package/lib/components/VFab/VFab.css +5 -1
  49. package/lib/components/VFab/VFab.mjs +1 -2
  50. package/lib/components/VFab/VFab.mjs.map +1 -1
  51. package/lib/components/VFab/VFab.sass +5 -1
  52. package/lib/components/VField/VField.css +9 -1
  53. package/lib/components/VField/VField.mjs +7 -14
  54. package/lib/components/VField/VField.mjs.map +1 -1
  55. package/lib/components/VField/VField.sass +10 -2
  56. package/lib/components/VImg/VImg.mjs +2 -2
  57. package/lib/components/VImg/VImg.mjs.map +1 -1
  58. package/lib/components/VInput/InputIcon.mjs +10 -2
  59. package/lib/components/VInput/InputIcon.mjs.map +1 -1
  60. package/lib/components/VInput/VInput.css +1 -1
  61. package/lib/components/VInput/VInput.mjs +4 -2
  62. package/lib/components/VInput/VInput.mjs.map +1 -1
  63. package/lib/components/VInput/VInput.sass +1 -1
  64. package/lib/components/VMenu/VMenu.mjs +1 -1
  65. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  66. package/lib/components/VMessages/VMessages.mjs +1 -3
  67. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  68. package/lib/components/VPagination/VPagination.mjs +1 -1
  69. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  70. package/lib/components/VProgressLinear/VProgressLinear.mjs +1 -1
  71. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  72. package/lib/components/VSelect/VSelect.mjs +1 -1
  73. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  74. package/lib/components/VSlideGroup/VSlideGroup.mjs +12 -2
  75. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  76. package/lib/components/VSlider/slider.mjs +2 -2
  77. package/lib/components/VSlider/slider.mjs.map +1 -1
  78. package/lib/components/VSparkline/VBarline.mjs +3 -2
  79. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  80. package/lib/components/VSparkline/VTrendline.mjs +2 -1
  81. package/lib/components/VSparkline/VTrendline.mjs.map +1 -1
  82. package/lib/components/VSparkline/index.d.mts +7 -10
  83. package/lib/components/VSparkline/util/line.mjs +1 -1
  84. package/lib/components/VSparkline/util/line.mjs.map +1 -1
  85. package/lib/components/VStepper/VStepperItem.mjs +1 -0
  86. package/lib/components/VStepper/VStepperItem.mjs.map +1 -1
  87. package/lib/components/VStepper/index.d.mts +66 -66
  88. package/lib/components/VTextarea/VTextarea.css +1 -0
  89. package/lib/components/VTextarea/VTextarea.sass +1 -0
  90. package/lib/components/index.d.mts +111 -122
  91. package/lib/composables/calendar.mjs +4 -1
  92. package/lib/composables/calendar.mjs.map +1 -1
  93. package/lib/composables/display.mjs +11 -4
  94. package/lib/composables/display.mjs.map +1 -1
  95. package/lib/composables/filter.mjs +3 -3
  96. package/lib/composables/filter.mjs.map +1 -1
  97. package/lib/composables/nested/nested.mjs +1 -1
  98. package/lib/composables/nested/nested.mjs.map +1 -1
  99. package/lib/composables/router.mjs +2 -2
  100. package/lib/composables/router.mjs.map +1 -1
  101. package/lib/entry-bundler.mjs +1 -1
  102. package/lib/framework.mjs +1 -1
  103. package/lib/index.d.mts +60 -60
  104. package/lib/labs/VDateInput/VDateInput.mjs +19 -5
  105. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  106. package/lib/labs/VDateInput/index.d.mts +176 -97
  107. package/lib/labs/VStepperVertical/VStepperVertical.mjs.map +1 -1
  108. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +1 -2
  109. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs.map +1 -1
  110. package/lib/labs/VStepperVertical/index.d.mts +585 -774
  111. package/lib/labs/VTimePicker/VTimePicker.mjs +1 -1
  112. package/lib/labs/VTimePicker/VTimePicker.mjs.map +1 -1
  113. package/lib/labs/VTreeview/VTreeviewChildren.mjs +4 -2
  114. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  115. package/lib/labs/VTreeview/VTreeviewItem.css +6 -0
  116. package/lib/labs/VTreeview/VTreeviewItem.mjs +4 -4
  117. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  118. package/lib/labs/VTreeview/VTreeviewItem.sass +6 -0
  119. package/lib/labs/VTreeview/_variables.scss +1 -0
  120. package/lib/labs/components.d.mts +794 -980
  121. package/lib/locale/az.mjs +28 -28
  122. package/lib/locale/az.mjs.map +1 -1
  123. package/lib/locale/nl.mjs +5 -5
  124. package/lib/locale/nl.mjs.map +1 -1
  125. package/lib/util/helpers.mjs +3 -0
  126. package/lib/util/helpers.mjs.map +1 -1
  127. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.6
2
+ * Vuetify v3.7.8
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -387,6 +387,9 @@ function includes(arr, val) {
387
387
  function eventName(propName) {
388
388
  return propName[2].toLowerCase() + propName.slice(3);
389
389
  }
390
+
391
+ // TODO: this should be an array but vue's types don't accept arrays: vuejs/core#8025
392
+
390
393
  const EventProp = () => [Function, Array];
391
394
  function hasEvent(props, name) {
392
395
  name = 'on' + capitalize(name);
@@ -3886,10 +3889,10 @@ const VImg = genericComponent()({
3886
3889
  "style": {
3887
3890
  objectPosition: props.position
3888
3891
  },
3892
+ "crossorigin": props.crossorigin,
3889
3893
  "src": normalisedSrc.value.src,
3890
3894
  "srcset": normalisedSrc.value.srcset,
3891
3895
  "alt": props.alt,
3892
- "crossorigin": props.crossorigin,
3893
3896
  "referrerpolicy": props.referrerpolicy,
3894
3897
  "draggable": props.draggable,
3895
3898
  "sizes": props.sizes,
@@ -3915,9 +3918,9 @@ const VImg = genericComponent()({
3915
3918
  "style": {
3916
3919
  objectPosition: props.position
3917
3920
  },
3921
+ "crossorigin": props.crossorigin,
3918
3922
  "src": normalisedSrc.value.lazySrc,
3919
3923
  "alt": props.alt,
3920
- "crossorigin": props.crossorigin,
3921
3924
  "referrerpolicy": props.referrerpolicy,
3922
3925
  "draggable": props.draggable
3923
3926
  }, null)]
@@ -5269,7 +5272,7 @@ const VProgressLinear = genericComponent()({
5269
5272
  "aria-hidden": props.active ? 'false' : 'true',
5270
5273
  "aria-valuemin": "0",
5271
5274
  "aria-valuemax": props.max,
5272
- "aria-valuenow": props.indeterminate ? undefined : normalizedValue.value,
5275
+ "aria-valuenow": props.indeterminate ? undefined : Math.min(parseFloat(progress.value), max.value),
5273
5276
  "onClick": props.clickable && handleClick
5274
5277
  }, {
5275
5278
  default: () => [props.stream && createVNode("div", {
@@ -5445,10 +5448,10 @@ function useBackButton(router, cb) {
5445
5448
  let popped = false;
5446
5449
  let removeBefore;
5447
5450
  let removeAfter;
5448
- if (IN_BROWSER) {
5451
+ if (IN_BROWSER && router?.beforeEach) {
5449
5452
  nextTick(() => {
5450
5453
  window.addEventListener('popstate', onPopstate);
5451
- removeBefore = router?.beforeEach((to, from, next) => {
5454
+ removeBefore = router.beforeEach((to, from, next) => {
5452
5455
  if (!inTransition) {
5453
5456
  setTimeout(() => popped ? cb(next) : next());
5454
5457
  } else {
@@ -6690,11 +6693,18 @@ function useInputIcon(props) {
6690
6693
  clear: 'clear'
6691
6694
  }[name];
6692
6695
  const listener = props[`onClick:${name}`];
6696
+ function onKeydown(e) {
6697
+ if (e.key !== 'Enter' && e.key !== ' ') return;
6698
+ e.preventDefault();
6699
+ e.stopPropagation();
6700
+ callEvent(listener, new PointerEvent('click', e));
6701
+ }
6693
6702
  const label = listener && localeKey ? t(`$vuetify.input.${localeKey}`, props.label ?? '') : undefined;
6694
6703
  return createVNode(VIcon, {
6695
6704
  "icon": props[`${name}Icon`],
6696
6705
  "aria-label": label,
6697
- "onClick": listener
6706
+ "onClick": listener,
6707
+ "onKeydown": onKeydown
6698
6708
  }, null);
6699
6709
  }
6700
6710
  return {
@@ -6736,9 +6746,7 @@ const VMessages = genericComponent()({
6736
6746
  "transition": props.transition,
6737
6747
  "tag": "div",
6738
6748
  "class": ['v-messages', textColorClasses.value, props.class],
6739
- "style": [textColorStyles.value, props.style],
6740
- "role": "alert",
6741
- "aria-live": "polite"
6749
+ "style": [textColorStyles.value, props.style]
6742
6750
  }, {
6743
6751
  default: () => [props.active && messages.value.map((message, i) => createVNode("div", {
6744
6752
  "class": "v-messages__message",
@@ -7207,9 +7215,11 @@ const VInput = genericComponent()({
7207
7215
  "key": "append-icon",
7208
7216
  "name": "append"
7209
7217
  }, null), slots.append?.(slotProps.value)]), hasDetails && createVNode("div", {
7210
- "class": "v-input__details"
7211
- }, [createVNode(VMessages, {
7212
7218
  "id": messagesId.value,
7219
+ "class": "v-input__details",
7220
+ "role": "alert",
7221
+ "aria-live": "polite"
7222
+ }, [createVNode(VMessages, {
7213
7223
  "active": hasMessages,
7214
7224
  "messages": messages.value
7215
7225
  }, {
@@ -7429,10 +7439,17 @@ function useDisplay() {
7429
7439
  const display = inject$1(DisplaySymbol);
7430
7440
  if (!display) throw new Error('Could not find Vuetify display injection');
7431
7441
  const mobile = computed(() => {
7432
- if (props.mobile != null) return props.mobile;
7433
- if (!props.mobileBreakpoint) return display.mobile.value;
7434
- const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
7435
- return display.width.value < breakpointValue;
7442
+ if (props.mobile) {
7443
+ return true;
7444
+ } else if (typeof props.mobileBreakpoint === 'number') {
7445
+ return display.width.value < props.mobileBreakpoint;
7446
+ } else if (props.mobileBreakpoint) {
7447
+ return display.width.value < display.thresholds.value[props.mobileBreakpoint];
7448
+ } else if (props.mobile === null) {
7449
+ return display.mobile.value;
7450
+ } else {
7451
+ return false;
7452
+ }
7436
7453
  });
7437
7454
  const displayClasses = computed(() => {
7438
7455
  if (!name) return {};
@@ -7848,6 +7865,14 @@ const VSlideGroup = genericComponent()({
7848
7865
  toFocus('last');
7849
7866
  }
7850
7867
  }
7868
+ function getSiblingElement(el, location) {
7869
+ if (!el) return undefined;
7870
+ let sibling = el;
7871
+ do {
7872
+ sibling = sibling?.[location === 'next' ? 'nextElementSibling' : 'previousElementSibling'];
7873
+ } while (sibling?.hasAttribute('disabled'));
7874
+ return sibling;
7875
+ }
7851
7876
  function focus(location) {
7852
7877
  if (!contentRef.el) return;
7853
7878
  let el;
@@ -7855,15 +7880,17 @@ const VSlideGroup = genericComponent()({
7855
7880
  const focusable = focusableChildren(contentRef.el);
7856
7881
  el = focusable[0];
7857
7882
  } else if (location === 'next') {
7858
- el = contentRef.el.querySelector(':focus')?.nextElementSibling;
7883
+ el = getSiblingElement(contentRef.el.querySelector(':focus'), location);
7859
7884
  if (!el) return focus('first');
7860
7885
  } else if (location === 'prev') {
7861
- el = contentRef.el.querySelector(':focus')?.previousElementSibling;
7886
+ el = getSiblingElement(contentRef.el.querySelector(':focus'), location);
7862
7887
  if (!el) return focus('last');
7863
7888
  } else if (location === 'first') {
7864
7889
  el = contentRef.el.firstElementChild;
7890
+ if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'next');
7865
7891
  } else if (location === 'last') {
7866
7892
  el = contentRef.el.lastElementChild;
7893
+ if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'prev');
7867
7894
  }
7868
7895
  if (el) {
7869
7896
  el.focus({
@@ -8943,7 +8970,7 @@ const useNestedItem = (id, isGroup) => {
8943
8970
  isActivated: computed(() => parent.root.activated.value.has(toRaw(computedId.value))),
8944
8971
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
8945
8972
  isSelected: computed(() => parent.root.selected.value.get(toRaw(computedId.value)) === 'on'),
8946
- isIndeterminate: computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
8973
+ isIndeterminate: computed(() => parent.root.selected.value.get(toRaw(computedId.value)) === 'indeterminate'),
8947
8974
  isLeaf: computed(() => !parent.root.children.value.get(computedId.value)),
8948
8975
  isGroupActivator: parent.isGroupActivator
8949
8976
  };
@@ -11545,7 +11572,7 @@ const VMenu = genericComponent()({
11545
11572
  const activatorProps = computed(() => mergeProps({
11546
11573
  'aria-haspopup': 'menu',
11547
11574
  'aria-expanded': String(isActive.value),
11548
- 'aria-owns': id.value,
11575
+ 'aria-controls': id.value,
11549
11576
  onKeydown: onActivatorKeydown
11550
11577
  }, props.activatorProps));
11551
11578
  useRender(() => {
@@ -11735,7 +11762,8 @@ const VField = genericComponent()({
11735
11762
  rtlClasses
11736
11763
  } = useRtl();
11737
11764
  const isActive = computed(() => props.dirty || props.active);
11738
- const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label));
11765
+ const hasLabel = computed(() => !!(props.label || slots.label));
11766
+ const hasFloatingLabel = computed(() => !props.singleLine && hasLabel.value);
11739
11767
  const uid = getUid();
11740
11768
  const id = computed(() => props.id || `input-${uid}`);
11741
11769
  const messagesId = computed(() => `${id.value}-messages`);
@@ -11754,7 +11782,7 @@ const VField = genericComponent()({
11754
11782
  return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
11755
11783
  }));
11756
11784
  watch(isActive, val => {
11757
- if (hasLabel.value) {
11785
+ if (hasFloatingLabel.value) {
11758
11786
  const el = labelRef.value.$el;
11759
11787
  const targetEl = floatingLabelRef.value.$el;
11760
11788
  requestAnimationFrame(() => {
@@ -11802,16 +11830,10 @@ const VField = genericComponent()({
11802
11830
  e.preventDefault();
11803
11831
  }
11804
11832
  }
11805
- function onKeydownClear(e) {
11806
- if (e.key !== 'Enter' && e.key !== ' ') return;
11807
- e.preventDefault();
11808
- e.stopPropagation();
11809
- props['onClick:clear']?.(new MouseEvent('click'));
11810
- }
11811
11833
  useRender(() => {
11812
11834
  const isOutlined = props.variant === 'outlined';
11813
11835
  const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
11814
- const hasClear = !!(props.clearable || slots.clear);
11836
+ const hasClear = !!(props.clearable || slots.clear) && !props.disabled;
11815
11837
  const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear);
11816
11838
  const label = () => slots.label ? slots.label({
11817
11839
  ...slotProps.value,
@@ -11856,7 +11878,7 @@ const VField = genericComponent()({
11856
11878
  }, null), slots['prepend-inner']?.(slotProps.value)]), createVNode("div", {
11857
11879
  "class": "v-field__field",
11858
11880
  "data-no-activator": ""
11859
- }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasLabel.value && createVNode(VFieldLabel, {
11881
+ }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasFloatingLabel.value && createVNode(VFieldLabel, {
11860
11882
  "key": "floating-label",
11861
11883
  "ref": floatingLabelRef,
11862
11884
  "class": [textColorClasses.value],
@@ -11899,14 +11921,12 @@ const VField = genericComponent()({
11899
11921
  default: () => [slots.clear ? slots.clear({
11900
11922
  ...slotProps.value,
11901
11923
  props: {
11902
- onKeydown: onKeydownClear,
11903
11924
  onFocus: focus,
11904
11925
  onBlur: blur,
11905
11926
  onClick: props['onClick:clear']
11906
11927
  }
11907
11928
  }) : createVNode(InputIcon, {
11908
11929
  "name": "clear",
11909
- "onKeydown": onKeydownClear,
11910
11930
  "onFocus": focus,
11911
11931
  "onBlur": blur
11912
11932
  }, null)]
@@ -11922,7 +11942,7 @@ const VField = genericComponent()({
11922
11942
  "style": textColorStyles.value
11923
11943
  }, [isOutlined && createVNode(Fragment, null, [createVNode("div", {
11924
11944
  "class": "v-field__outline__start"
11925
- }, null), hasLabel.value && createVNode("div", {
11945
+ }, null), hasFloatingLabel.value && createVNode("div", {
11926
11946
  "class": "v-field__outline__notch"
11927
11947
  }, [createVNode(VFieldLabel, {
11928
11948
  "ref": floatingLabelRef,
@@ -11932,7 +11952,7 @@ const VField = genericComponent()({
11932
11952
  default: () => [label()]
11933
11953
  })]), createVNode("div", {
11934
11954
  "class": "v-field__outline__end"
11935
- }, null)]), isPlainOrUnderlined.value && hasLabel.value && createVNode(VFieldLabel, {
11955
+ }, null)]), isPlainOrUnderlined.value && hasFloatingLabel.value && createVNode(VFieldLabel, {
11936
11956
  "ref": floatingLabelRef,
11937
11957
  "floating": true,
11938
11958
  "for": id.value
@@ -12755,7 +12775,7 @@ const VSelect = genericComponent()({
12755
12775
  // html select hotkeys
12756
12776
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12757
12777
 
12758
- if (props.multiple || !checkPrintable(e)) return;
12778
+ if (!checkPrintable(e)) return;
12759
12779
  const now = performance.now();
12760
12780
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
12761
12781
  keyboardLookupPrefix = '';
@@ -13093,8 +13113,8 @@ function filterItems(items, query, options) {
13093
13113
  return array;
13094
13114
  }
13095
13115
  function useFilter(props, items, query, options) {
13096
- const filteredItems = ref([]);
13097
- const filteredMatches = ref(new Map());
13116
+ const filteredItems = shallowRef([]);
13117
+ const filteredMatches = shallowRef(new Map());
13098
13118
  const transformedItems = computed(() => options?.transform ? unref(items).map(item => [item, options.transform(item)]) : unref(items));
13099
13119
  watchEffect(() => {
13100
13120
  const _query = typeof query === 'function' ? query() : unref(query);
@@ -13255,7 +13275,7 @@ const VAutocomplete = genericComponent()({
13255
13275
  menu.value = !menu.value;
13256
13276
  }
13257
13277
  function onListKeydown(e) {
13258
- if (checkPrintable(e)) {
13278
+ if (e.key !== ' ' && checkPrintable(e)) {
13259
13279
  vTextFieldRef.value?.focus();
13260
13280
  }
13261
13281
  }
@@ -13263,7 +13283,7 @@ const VAutocomplete = genericComponent()({
13263
13283
  if (form.isReadonly.value) return;
13264
13284
  const selectionStart = vTextFieldRef.value.selectionStart;
13265
13285
  const length = model.value.length;
13266
- if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13286
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13267
13287
  e.preventDefault();
13268
13288
  }
13269
13289
  if (['Enter', 'ArrowDown'].includes(e.key)) {
@@ -13286,12 +13306,14 @@ const VAutocomplete = genericComponent()({
13286
13306
  if (['Backspace', 'Delete'].includes(e.key)) {
13287
13307
  if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
13288
13308
  if (~selectionIndex.value) {
13309
+ e.preventDefault();
13289
13310
  const originalSelectionIndex = selectionIndex.value;
13290
13311
  select(model.value[selectionIndex.value], false);
13291
13312
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
13292
13313
  } else if (e.key === 'Backspace' && !search.value) {
13293
13314
  selectionIndex.value = length - 1;
13294
13315
  }
13316
+ return;
13295
13317
  }
13296
13318
  if (!props.multiple) return;
13297
13319
  if (e.key === 'ArrowLeft') {
@@ -13303,8 +13325,7 @@ const VAutocomplete = genericComponent()({
13303
13325
  selectionIndex.value = -1;
13304
13326
  vTextFieldRef.value.setSelectionRange(search.value?.length, search.value?.length);
13305
13327
  }
13306
- }
13307
- if (e.key === 'ArrowRight') {
13328
+ } else if (e.key === 'ArrowRight') {
13308
13329
  if (selectionIndex.value < 0) return;
13309
13330
  const next = selectionIndex.value + 1;
13310
13331
  if (model.value[next]) {
@@ -13313,6 +13334,8 @@ const VAutocomplete = genericComponent()({
13313
13334
  selectionIndex.value = -1;
13314
13335
  vTextFieldRef.value.setSelectionRange(0, 0);
13315
13336
  }
13337
+ } else if (~selectionIndex.value && checkPrintable(e)) {
13338
+ selectionIndex.value = -1;
13316
13339
  }
13317
13340
  }
13318
13341
  function onChange(e) {
@@ -14142,6 +14165,7 @@ const VBreadcrumbsDivider = genericComponent()({
14142
14165
  slots
14143
14166
  } = _ref;
14144
14167
  useRender(() => createVNode("li", {
14168
+ "aria-hidden": "true",
14145
14169
  "class": ['v-breadcrumbs-divider', props.class],
14146
14170
  "style": props.style
14147
14171
  }, [slots?.default?.() ?? props.divider]));
@@ -15766,7 +15790,6 @@ const useSlider = _ref => {
15766
15790
  const handleStart = e => {
15767
15791
  activeThumbRef.value = getActiveThumb(e);
15768
15792
  if (!activeThumbRef.value) return;
15769
- activeThumbRef.value.focus();
15770
15793
  mousePressed.value = true;
15771
15794
  if (activeThumbRef.value.contains(e.target)) {
15772
15795
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
@@ -15779,6 +15802,7 @@ const useSlider = _ref => {
15779
15802
  onSliderStart({
15780
15803
  value: parseMouseMove(e)
15781
15804
  });
15805
+ nextTick(() => activeThumbRef.value?.focus());
15782
15806
  };
15783
15807
  const moveListenerOptions = {
15784
15808
  passive: true,
@@ -16328,7 +16352,7 @@ const VColorPickerPreview = defineComponent({
16328
16352
  const result = await eyeDropper.open({
16329
16353
  signal: abortController.signal
16330
16354
  });
16331
- const colorHexValue = HexToHSV(result.sRGBHex);
16355
+ const colorHexValue = RGBtoHSV(parseColor(result.sRGBHex));
16332
16356
  emit('update:color', {
16333
16357
  ...(props.color ?? nullColor),
16334
16358
  ...colorHexValue
@@ -17139,7 +17163,7 @@ const VCombobox = genericComponent()({
17139
17163
  menu.value = !menu.value;
17140
17164
  }
17141
17165
  function onListKeydown(e) {
17142
- if (checkPrintable(e)) {
17166
+ if (e.key !== ' ' && checkPrintable(e)) {
17143
17167
  vTextFieldRef.value?.focus();
17144
17168
  }
17145
17169
  }
@@ -17148,7 +17172,7 @@ const VCombobox = genericComponent()({
17148
17172
  if (isComposingIgnoreKey(e) || form.isReadonly.value) return;
17149
17173
  const selectionStart = vTextFieldRef.value.selectionStart;
17150
17174
  const length = model.value.length;
17151
- if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
17175
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
17152
17176
  e.preventDefault();
17153
17177
  }
17154
17178
  if (['Enter', 'ArrowDown'].includes(e.key)) {
@@ -17178,12 +17202,14 @@ const VCombobox = genericComponent()({
17178
17202
  if (['Backspace', 'Delete'].includes(e.key)) {
17179
17203
  if (!props.multiple && hasSelectionSlot.value && model.value.length > 0 && !search.value) return select(model.value[0], false);
17180
17204
  if (~selectionIndex.value) {
17205
+ e.preventDefault();
17181
17206
  const originalSelectionIndex = selectionIndex.value;
17182
17207
  select(model.value[selectionIndex.value], false);
17183
17208
  selectionIndex.value = originalSelectionIndex >= length - 1 ? length - 2 : originalSelectionIndex;
17184
17209
  } else if (e.key === 'Backspace' && !search.value) {
17185
17210
  selectionIndex.value = length - 1;
17186
17211
  }
17212
+ return;
17187
17213
  }
17188
17214
  if (!props.multiple) return;
17189
17215
  if (e.key === 'ArrowLeft') {
@@ -17195,8 +17221,7 @@ const VCombobox = genericComponent()({
17195
17221
  selectionIndex.value = -1;
17196
17222
  vTextFieldRef.value.setSelectionRange(search.value.length, search.value.length);
17197
17223
  }
17198
- }
17199
- if (e.key === 'ArrowRight') {
17224
+ } else if (e.key === 'ArrowRight') {
17200
17225
  if (selectionIndex.value < 0) return;
17201
17226
  const next = selectionIndex.value + 1;
17202
17227
  if (model.value[next]) {
@@ -17205,6 +17230,8 @@ const VCombobox = genericComponent()({
17205
17230
  selectionIndex.value = -1;
17206
17231
  vTextFieldRef.value.setSelectionRange(0, 0);
17207
17232
  }
17233
+ } else if (~selectionIndex.value && checkPrintable(e)) {
17234
+ selectionIndex.value = -1;
17208
17235
  }
17209
17236
  }
17210
17237
  function onAfterEnter() {
@@ -18497,7 +18524,7 @@ function provideGroupBy(options) {
18497
18524
  arr.push(item);
18498
18525
  }
18499
18526
  }
18500
- return arr;
18527
+ return [...new Set(arr)];
18501
18528
  }
18502
18529
  return dive({
18503
18530
  type: 'group',
@@ -18723,6 +18750,8 @@ function usePaginatedItems(options) {
18723
18750
  });
18724
18751
  watch(paginatedItems, val => {
18725
18752
  vm.emit('update:currentItems', val);
18753
+ }, {
18754
+ immediate: true
18726
18755
  });
18727
18756
  return {
18728
18757
  paginatedItems
@@ -19447,7 +19476,7 @@ const VPagination = genericComponent()({
19447
19476
  const rangeStart = length.value - rangeLength + start.value;
19448
19477
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
19449
19478
  } else {
19450
- const rangeLength = Math.max(1, totalVisible.value - 3);
19479
+ const rangeLength = Math.max(1, totalVisible.value - 2);
19451
19480
  const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
19452
19481
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
19453
19482
  }
@@ -20047,8 +20076,8 @@ function useHeaders() {
20047
20076
 
20048
20077
  const makeVDataTableHeadersProps = propsFactory({
20049
20078
  color: String,
20050
- sticky: Boolean,
20051
20079
  disableSort: Boolean,
20080
+ fixedHeader: Boolean,
20052
20081
  multiSort: Boolean,
20053
20082
  sortAscIcon: {
20054
20083
  type: IconValue,
@@ -20061,6 +20090,8 @@ const makeVDataTableHeadersProps = propsFactory({
20061
20090
  headerProps: {
20062
20091
  type: Object
20063
20092
  },
20093
+ /** @deprecated */
20094
+ sticky: Boolean,
20064
20095
  ...makeDisplayProps(),
20065
20096
  ...makeLoaderProps()
20066
20097
  }, 'VDataTableHeaders');
@@ -20093,11 +20124,11 @@ const VDataTableHeaders = genericComponent()({
20093
20124
  loaderClasses
20094
20125
  } = useLoader(props);
20095
20126
  function getFixedStyles(column, y) {
20096
- if (!props.sticky && !column.fixed) return undefined;
20127
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20097
20128
  return {
20098
20129
  position: 'sticky',
20099
20130
  left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20100
- top: props.sticky ? `calc(var(--v-table-header-height) * ${y})` : undefined
20131
+ top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20101
20132
  };
20102
20133
  }
20103
20134
  function getSortIcon(column) {
@@ -20125,7 +20156,7 @@ const VDataTableHeaders = genericComponent()({
20125
20156
  getSortIcon
20126
20157
  }));
20127
20158
  const headerCellClasses = computed(() => ['v-data-table__th', {
20128
- 'v-data-table__th--sticky': props.sticky
20159
+ 'v-data-table__th--sticky': props.sticky || props.fixedHeader
20129
20160
  }, displayClasses.value, loaderClasses.value]);
20130
20161
  const VDataTableHeaderCell = _ref2 => {
20131
20162
  let {
@@ -20880,7 +20911,9 @@ const VDataTable = genericComponent()({
20880
20911
  'v-data-table--loading': props.loading
20881
20912
  }, props.class],
20882
20913
  "style": props.style
20883
- }, tableProps), {
20914
+ }, tableProps, {
20915
+ "fixedHeader": props.fixedHeader || props.sticky
20916
+ }), {
20884
20917
  top: () => slots.top?.(slotProps.value),
20885
20918
  default: () => slots.default ? slots.default(slotProps.value) : createVNode(Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createVNode("thead", {
20886
20919
  "key": "thead"
@@ -21052,7 +21085,9 @@ const VDataTableVirtual = genericComponent()({
21052
21085
  'v-data-table--loading': props.loading
21053
21086
  }, props.class],
21054
21087
  "style": props.style
21055
- }, tableProps), {
21088
+ }, tableProps, {
21089
+ "fixedHeader": props.fixedHeader || props.sticky
21090
+ }), {
21056
21091
  top: () => slots.top?.(slotProps.value),
21057
21092
  wrapper: () => createVNode("div", {
21058
21093
  "ref": containerRef,
@@ -21064,9 +21099,7 @@ const VDataTableVirtual = genericComponent()({
21064
21099
  }
21065
21100
  }, [createVNode("table", null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createVNode("thead", {
21066
21101
  "key": "thead"
21067
- }, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
21068
- "sticky": props.fixedHeader
21069
- }), slots)]), !props.hideDefaultBody && createVNode("tbody", null, [createVNode("tr", {
21102
+ }, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), !props.hideDefaultBody && createVNode("tbody", null, [createVNode("tr", {
21070
21103
  "ref": markerRef,
21071
21104
  "style": {
21072
21105
  height: convertToUnit(paddingTop.value),
@@ -21271,15 +21304,15 @@ const VDataTableServer = genericComponent()({
21271
21304
  'v-data-table--loading': props.loading
21272
21305
  }, props.class],
21273
21306
  "style": props.style
21274
- }, tableProps), {
21307
+ }, tableProps, {
21308
+ "fixedHeader": props.fixedHeader || props.sticky
21309
+ }), {
21275
21310
  top: () => slots.top?.(slotProps.value),
21276
21311
  default: () => slots.default ? slots.default(slotProps.value) : createVNode(Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createVNode("thead", {
21277
21312
  "key": "thead",
21278
21313
  "class": "v-data-table__thead",
21279
21314
  "role": "rowgroup"
21280
- }, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
21281
- "sticky": props.fixedHeader
21282
- }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createVNode("tbody", {
21315
+ }, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createVNode("tbody", {
21283
21316
  "class": "v-data-table__tbody",
21284
21317
  "role": "rowgroup"
21285
21318
  }, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
@@ -21796,12 +21829,15 @@ function useCalendar(props) {
21796
21829
  const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
21797
21830
  return adapter.setMonth(date, value);
21798
21831
  }, v => adapter.getMonth(v));
21832
+ const defaultFirstDayOfWeek = computed(() => {
21833
+ return props.firstDayOfWeek ?? props.weekdays[0];
21834
+ });
21799
21835
  const weekDays = computed(() => {
21800
21836
  const firstDayOfWeek = Number(props.firstDayOfWeek ?? 0);
21801
21837
  return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
21802
21838
  });
21803
21839
  const weeksInMonth = computed(() => {
21804
- const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek);
21840
+ const weeks = adapter.getWeekArray(month.value, defaultFirstDayOfWeek.value);
21805
21841
  const days = weeks.flat();
21806
21842
 
21807
21843
  // Make sure there's always 6 weeks in month (6 * 7 days)
@@ -23038,8 +23074,7 @@ const VFab = genericComponent()({
23038
23074
  "style": [props.app ? {
23039
23075
  ...layoutItemStyles.value
23040
23076
  } : {
23041
- height: 'inherit',
23042
- width: undefined
23077
+ height: props.absolute ? '100%' : 'inherit'
23043
23078
  }, props.style]
23044
23079
  }, [createVNode("div", {
23045
23080
  "class": "v-fab__container"
@@ -25777,7 +25812,7 @@ const makeLineProps = propsFactory({
25777
25812
  default: 8
25778
25813
  },
25779
25814
  showLabels: Boolean,
25780
- smooth: Boolean,
25815
+ smooth: [Boolean, String, Number],
25781
25816
  width: {
25782
25817
  type: [Number, String],
25783
25818
  default: 300
@@ -25858,6 +25893,7 @@ const VBarline = genericComponent()({
25858
25893
  });
25859
25894
  const bars = computed(() => genBars(items.value, boundary.value));
25860
25895
  const offsetX = computed(() => (Math.abs(bars.value[0].x - bars.value[1].x) - lineWidth.value) / 2);
25896
+ const smooth = computed(() => typeof props.smooth === 'boolean' ? props.smooth ? 2 : 0 : Number(props.smooth));
25861
25897
  useRender(() => {
25862
25898
  const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
25863
25899
  return createVNode("svg", {
@@ -25879,8 +25915,8 @@ const VBarline = genericComponent()({
25879
25915
  "y": item.y,
25880
25916
  "width": lineWidth.value,
25881
25917
  "height": item.height,
25882
- "rx": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0,
25883
- "ry": typeof props.smooth === 'number' ? props.smooth : props.smooth ? 2 : 0
25918
+ "rx": smooth.value,
25919
+ "ry": smooth.value
25884
25920
  }, [props.autoDraw && createVNode(Fragment, null, [createVNode("animate", {
25885
25921
  "attributeName": "y",
25886
25922
  "from": item.y + item.height,
@@ -26082,7 +26118,8 @@ const VTrendline = genericComponent()({
26082
26118
  immediate: true
26083
26119
  });
26084
26120
  function genPath$1(fill) {
26085
- return genPath(genPoints(items.value, boundary.value), props.smooth ? 8 : Number(props.smooth), fill, parseInt(props.height, 10));
26121
+ const smoothValue = typeof props.smooth === 'boolean' ? props.smooth ? 8 : 0 : Number(props.smooth);
26122
+ return genPath(genPoints(items.value, boundary.value), smoothValue, fill, parseInt(props.height, 10));
26086
26123
  }
26087
26124
  useRender(() => {
26088
26125
  const gradientData = !props.gradient.slice().length ? [''] : props.gradient.slice().reverse();
@@ -26406,6 +26443,7 @@ const VStepperItem = genericComponent()({
26406
26443
  'v-stepper-item--error': hasError.value
26407
26444
  }, group?.selectedClass.value],
26408
26445
  "disabled": !props.editable,
26446
+ "type": "button",
26409
26447
  "onClick": onClick
26410
26448
  }, [isClickable.value && genOverlays(true, 'v-stepper-item'), createVNode(VAvatar, {
26411
26449
  "key": "stepper-avatar",
@@ -28284,7 +28322,7 @@ function createVuetify$1() {
28284
28322
  goTo
28285
28323
  };
28286
28324
  }
28287
- const version$1 = "3.7.6";
28325
+ const version$1 = "3.7.8";
28288
28326
  createVuetify$1.version = version$1;
28289
28327
 
28290
28328
  // Vue's inject() can only be used in setup
@@ -28309,7 +28347,7 @@ const createVuetify = function () {
28309
28347
  ...options
28310
28348
  });
28311
28349
  };
28312
- const version = "3.7.6";
28350
+ const version = "3.7.8";
28313
28351
  createVuetify.version = version;
28314
28352
 
28315
28353
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };