vuetify 3.3.10 → 3.3.12

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 (232) hide show
  1. package/dist/_component-variables-labs.sass +3 -1
  2. package/dist/json/attributes.json +225 -33
  3. package/dist/json/importMap-labs.json +28 -0
  4. package/dist/json/tags.json +80 -0
  5. package/dist/json/web-types.json +703 -34
  6. package/dist/vuetify-labs.css +1092 -899
  7. package/dist/vuetify-labs.d.ts +2810 -304
  8. package/dist/vuetify-labs.esm.js +784 -87
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +784 -87
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +349 -316
  13. package/dist/vuetify.d.ts +64 -29
  14. package/dist/vuetify.esm.js +141 -63
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +141 -63
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +954 -947
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/blueprints/md1.mjs +5 -0
  22. package/lib/blueprints/md1.mjs.map +1 -1
  23. package/lib/blueprints/md2.mjs +5 -0
  24. package/lib/blueprints/md2.mjs.map +1 -1
  25. package/lib/blueprints/md3.mjs +7 -1
  26. package/lib/blueprints/md3.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs +13 -10
  28. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  29. package/lib/components/VAutocomplete/index.d.mts +6 -0
  30. package/lib/components/VBanner/VBanner.css +2 -0
  31. package/lib/components/VBanner/VBanner.sass +2 -0
  32. package/lib/components/VBtn/VBtn.css +3 -0
  33. package/lib/components/VBtn/VBtn.sass +2 -0
  34. package/lib/components/VCarousel/index.d.mts +12 -10
  35. package/lib/components/VChip/VChip.mjs +4 -3
  36. package/lib/components/VChip/VChip.mjs.map +1 -1
  37. package/lib/components/VCombobox/VCombobox.mjs +10 -4
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.mts +6 -0
  40. package/lib/components/VDialog/VDialog.css +15 -6
  41. package/lib/components/VDialog/VDialog.sass +41 -35
  42. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +8 -3
  43. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  44. package/lib/components/VField/VField.css +6 -2
  45. package/lib/components/VField/VField.sass +6 -2
  46. package/lib/components/VGrid/VGrid.css +4 -0
  47. package/lib/components/VGrid/VGrid.sass +4 -1
  48. package/lib/components/VGrid/VSpacer.mjs +1 -1
  49. package/lib/components/VGrid/VSpacer.mjs.map +1 -1
  50. package/lib/components/VList/VListItem.css +7 -1
  51. package/lib/components/VList/VListItem.mjs +1 -0
  52. package/lib/components/VList/VListItem.mjs.map +1 -1
  53. package/lib/components/VList/VListItem.sass +4 -0
  54. package/lib/components/VMenu/VMenu.mjs +29 -4
  55. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  56. package/lib/components/VOverlay/useActivator.mjs +2 -2
  57. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  58. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  59. package/lib/components/VRangeSlider/index.d.mts +8 -8
  60. package/lib/components/VRating/VRating.mjs +4 -2
  61. package/lib/components/VRating/VRating.mjs.map +1 -1
  62. package/lib/components/VSelect/VSelect.mjs +11 -4
  63. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  64. package/lib/components/VSelect/index.d.mts +6 -0
  65. package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -2
  66. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  67. package/lib/components/VSlider/VSlider.mjs +2 -3
  68. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  69. package/lib/components/VSlider/slider.mjs +1 -0
  70. package/lib/components/VSlider/slider.mjs.map +1 -1
  71. package/lib/components/VSwitch/VSwitch.css +3 -0
  72. package/lib/components/VSwitch/VSwitch.sass +3 -0
  73. package/lib/components/VSwitch/_variables.scss +1 -0
  74. package/lib/components/VTable/VTable.css +2 -0
  75. package/lib/components/VTable/VTable.sass +2 -0
  76. package/lib/components/VTimeline/VTimeline.css +2 -2
  77. package/lib/components/VTimeline/VTimeline.sass +2 -2
  78. package/lib/components/VTooltip/VTooltip.css +1 -1
  79. package/lib/components/VTooltip/_variables.scss +1 -1
  80. package/lib/components/VWindow/VWindow.mjs +1 -0
  81. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  82. package/lib/components/VWindow/VWindowItem.mjs +3 -1
  83. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  84. package/lib/components/VWindow/index.d.mts +29 -11
  85. package/lib/components/index.d.mts +57 -29
  86. package/lib/composables/group.mjs +1 -1
  87. package/lib/composables/group.mjs.map +1 -1
  88. package/lib/composables/theme.mjs +12 -6
  89. package/lib/composables/theme.mjs.map +1 -1
  90. package/lib/entry-bundler.mjs +1 -1
  91. package/lib/framework.mjs +1 -1
  92. package/lib/index.d.mts +7 -0
  93. package/lib/labs/VDateInput/composables.mjs +11 -1
  94. package/lib/labs/VDateInput/composables.mjs.map +1 -1
  95. package/lib/labs/VDatePicker/VDatePicker.css +6 -5
  96. package/lib/labs/VDatePicker/VDatePicker.mjs +36 -16
  97. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  98. package/lib/labs/VDatePicker/VDatePicker.sass +8 -9
  99. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +1 -1
  100. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  101. package/lib/labs/VDatePicker/composables.mjs +4 -2
  102. package/lib/labs/VDatePicker/composables.mjs.map +1 -1
  103. package/lib/labs/VDatePicker/index.d.mts +14 -0
  104. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs +2 -2
  105. package/lib/labs/VDateRangePicker/VDateRangePickerHeader.mjs.map +1 -1
  106. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs +4 -5
  107. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
  108. package/lib/labs/VOtpInput/VOtpInput.css +53 -0
  109. package/lib/labs/VOtpInput/VOtpInput.mjs +222 -0
  110. package/lib/labs/VOtpInput/VOtpInput.mjs.map +1 -0
  111. package/lib/labs/VOtpInput/VOtpInput.sass +55 -0
  112. package/lib/labs/VOtpInput/_variables.scss +2 -0
  113. package/lib/labs/VOtpInput/index.d.mts +459 -0
  114. package/lib/labs/VOtpInput/index.mjs +2 -0
  115. package/lib/labs/VOtpInput/index.mjs.map +1 -0
  116. package/lib/labs/VPicker/VPicker.mjs +1 -1
  117. package/lib/labs/VPicker/VPicker.mjs.map +1 -1
  118. package/lib/labs/VStepper/VStepper.css +42 -0
  119. package/lib/labs/VStepper/VStepper.mjs +150 -0
  120. package/lib/labs/VStepper/VStepper.mjs.map +1 -0
  121. package/lib/labs/VStepper/VStepper.sass +44 -0
  122. package/lib/labs/VStepper/VStepperActions.mjs +61 -0
  123. package/lib/labs/VStepper/VStepperActions.mjs.map +1 -0
  124. package/lib/labs/VStepper/VStepperHeader.mjs +4 -0
  125. package/lib/labs/VStepper/VStepperHeader.mjs.map +1 -0
  126. package/lib/labs/VStepper/VStepperItem.css +67 -0
  127. package/lib/labs/VStepper/VStepperItem.mjs +114 -0
  128. package/lib/labs/VStepper/VStepperItem.mjs.map +1 -0
  129. package/lib/labs/VStepper/VStepperItem.sass +71 -0
  130. package/lib/labs/VStepper/VStepperWindow.mjs +50 -0
  131. package/lib/labs/VStepper/VStepperWindow.mjs.map +1 -0
  132. package/lib/labs/VStepper/VStepperWindowItem.mjs +24 -0
  133. package/lib/labs/VStepper/VStepperWindowItem.mjs.map +1 -0
  134. package/lib/labs/VStepper/_variables.scss +4 -0
  135. package/lib/labs/VStepper/index.d.mts +2045 -0
  136. package/lib/labs/VStepper/index.mjs +7 -0
  137. package/lib/labs/VStepper/index.mjs.map +1 -0
  138. package/lib/labs/components.d.mts +2759 -267
  139. package/lib/labs/components.mjs +2 -0
  140. package/lib/labs/components.mjs.map +1 -1
  141. package/lib/labs/date/adapters/vuetify.mjs +7 -8
  142. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  143. package/lib/locale/af.mjs +6 -1
  144. package/lib/locale/af.mjs.map +1 -1
  145. package/lib/locale/ar.mjs +6 -1
  146. package/lib/locale/ar.mjs.map +1 -1
  147. package/lib/locale/az.mjs +6 -1
  148. package/lib/locale/az.mjs.map +1 -1
  149. package/lib/locale/bg.mjs +6 -1
  150. package/lib/locale/bg.mjs.map +1 -1
  151. package/lib/locale/ca.mjs +6 -1
  152. package/lib/locale/ca.mjs.map +1 -1
  153. package/lib/locale/ckb.mjs +6 -1
  154. package/lib/locale/ckb.mjs.map +1 -1
  155. package/lib/locale/cs.mjs +6 -1
  156. package/lib/locale/cs.mjs.map +1 -1
  157. package/lib/locale/da.mjs +6 -1
  158. package/lib/locale/da.mjs.map +1 -1
  159. package/lib/locale/de.mjs +6 -1
  160. package/lib/locale/de.mjs.map +1 -1
  161. package/lib/locale/el.mjs +6 -1
  162. package/lib/locale/el.mjs.map +1 -1
  163. package/lib/locale/en.mjs +6 -1
  164. package/lib/locale/en.mjs.map +1 -1
  165. package/lib/locale/es.mjs +6 -1
  166. package/lib/locale/es.mjs.map +1 -1
  167. package/lib/locale/et.mjs +6 -1
  168. package/lib/locale/et.mjs.map +1 -1
  169. package/lib/locale/fa.mjs +6 -1
  170. package/lib/locale/fa.mjs.map +1 -1
  171. package/lib/locale/fi.mjs +6 -1
  172. package/lib/locale/fi.mjs.map +1 -1
  173. package/lib/locale/fr.mjs +6 -1
  174. package/lib/locale/fr.mjs.map +1 -1
  175. package/lib/locale/he.mjs +6 -1
  176. package/lib/locale/he.mjs.map +1 -1
  177. package/lib/locale/hr.mjs +6 -1
  178. package/lib/locale/hr.mjs.map +1 -1
  179. package/lib/locale/hu.mjs +6 -1
  180. package/lib/locale/hu.mjs.map +1 -1
  181. package/lib/locale/id.mjs +6 -1
  182. package/lib/locale/id.mjs.map +1 -1
  183. package/lib/locale/index.d.mts +210 -0
  184. package/lib/locale/it.mjs +6 -1
  185. package/lib/locale/it.mjs.map +1 -1
  186. package/lib/locale/ja.mjs +6 -1
  187. package/lib/locale/ja.mjs.map +1 -1
  188. package/lib/locale/ko.mjs +6 -1
  189. package/lib/locale/ko.mjs.map +1 -1
  190. package/lib/locale/lt.mjs +6 -1
  191. package/lib/locale/lt.mjs.map +1 -1
  192. package/lib/locale/lv.mjs +6 -1
  193. package/lib/locale/lv.mjs.map +1 -1
  194. package/lib/locale/nl.mjs +6 -1
  195. package/lib/locale/nl.mjs.map +1 -1
  196. package/lib/locale/no.mjs +19 -14
  197. package/lib/locale/no.mjs.map +1 -1
  198. package/lib/locale/pl.mjs +6 -1
  199. package/lib/locale/pl.mjs.map +1 -1
  200. package/lib/locale/pt.mjs +6 -1
  201. package/lib/locale/pt.mjs.map +1 -1
  202. package/lib/locale/ro.mjs +23 -18
  203. package/lib/locale/ro.mjs.map +1 -1
  204. package/lib/locale/ru.mjs +6 -1
  205. package/lib/locale/ru.mjs.map +1 -1
  206. package/lib/locale/sk.mjs +6 -1
  207. package/lib/locale/sk.mjs.map +1 -1
  208. package/lib/locale/sl.mjs +6 -1
  209. package/lib/locale/sl.mjs.map +1 -1
  210. package/lib/locale/sr-Cyrl.mjs +6 -1
  211. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  212. package/lib/locale/sr-Latn.mjs +6 -1
  213. package/lib/locale/sr-Latn.mjs.map +1 -1
  214. package/lib/locale/sv.mjs +6 -1
  215. package/lib/locale/sv.mjs.map +1 -1
  216. package/lib/locale/th.mjs +6 -1
  217. package/lib/locale/th.mjs.map +1 -1
  218. package/lib/locale/tr.mjs +6 -1
  219. package/lib/locale/tr.mjs.map +1 -1
  220. package/lib/locale/uk.mjs +6 -1
  221. package/lib/locale/uk.mjs.map +1 -1
  222. package/lib/locale/vi.mjs +6 -1
  223. package/lib/locale/vi.mjs.map +1 -1
  224. package/lib/locale/zh-Hans.mjs +6 -1
  225. package/lib/locale/zh-Hans.mjs.map +1 -1
  226. package/lib/locale/zh-Hant.mjs +6 -1
  227. package/lib/locale/zh-Hant.mjs.map +1 -1
  228. package/lib/util/globals.mjs +0 -1
  229. package/lib/util/globals.mjs.map +1 -1
  230. package/lib/util/helpers.mjs +32 -12
  231. package/lib/util/helpers.mjs.map +1 -1
  232. package/package.json +3 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.3.10
2
+ * Vuetify v3.3.12
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -71,6 +71,10 @@ const makeComponentProps = propsFactory({
71
71
  }
72
72
  }, 'component');
73
73
 
74
+ const IN_BROWSER = typeof window !== 'undefined';
75
+ const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
76
+ const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
77
+
74
78
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
75
79
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
76
80
  function _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, "set"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }
@@ -403,12 +407,22 @@ function callEvent(handler) {
403
407
  }
404
408
  }
405
409
  function focusableChildren(el) {
406
- const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}:not([tabindex="-1"]):not([disabled])`).join(', ');
410
+ let filterByTabIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
411
+ const targets = ['button', '[href]', 'input:not([type="hidden"])', 'select', 'textarea', '[tabindex]'].map(s => `${s}${filterByTabIndex ? ':not([tabindex="-1"])' : ''}:not([disabled])`).join(', ');
407
412
  return [...el.querySelectorAll(targets)];
408
413
  }
414
+ function getNextElement(elements, location, condition) {
415
+ let _el;
416
+ let idx = elements.indexOf(document.activeElement);
417
+ const inc = location === 'next' ? 1 : -1;
418
+ do {
419
+ idx += inc;
420
+ _el = elements[idx];
421
+ } while ((!_el || _el.offsetParent == null || !(condition?.(_el) ?? true)) && idx < elements.length && idx >= 0);
422
+ return _el;
423
+ }
409
424
  function focusChild(el, location) {
410
425
  const focusable = focusableChildren(el);
411
- const idx = focusable.indexOf(document.activeElement);
412
426
  if (!location) {
413
427
  if (el === document.activeElement || !el.contains(document.activeElement)) {
414
428
  focusable[0]?.focus();
@@ -417,19 +431,26 @@ function focusChild(el, location) {
417
431
  focusable[0]?.focus();
418
432
  } else if (location === 'last') {
419
433
  focusable.at(-1)?.focus();
434
+ } else if (typeof location === 'number') {
435
+ focusable[location]?.focus();
420
436
  } else {
421
- let _el;
422
- let idxx = idx;
423
- const inc = location === 'next' ? 1 : -1;
424
- do {
425
- idxx += inc;
426
- _el = focusable[idxx];
427
- } while ((!_el || _el.offsetParent == null) && idxx < focusable.length && idxx >= 0);
437
+ const _el = getNextElement(focusable, location);
428
438
  if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
429
439
  }
430
440
  }
431
441
  function noop() {}
432
442
 
443
+ /** Returns null if the selector is not supported or we can't check */
444
+ function matchesSelector(el, selector) {
445
+ const supportsSelector = IN_BROWSER && typeof CSS !== 'undefined' && typeof CSS.supports !== 'undefined' && CSS.supports(`selector(${selector})`);
446
+ if (!supportsSelector) return null;
447
+ try {
448
+ return !!el && el.matches(selector);
449
+ } catch (err) {
450
+ return null;
451
+ }
452
+ }
453
+
433
454
  // Utilities
434
455
  const block = ['top', 'bottom'];
435
456
  const inline = ['start', 'end', 'left', 'right'];
@@ -1275,11 +1296,6 @@ function isPotentiallyScrollable(el) {
1275
1296
  return ['scroll', 'auto'].includes(style.overflowY);
1276
1297
  }
1277
1298
 
1278
- const IN_BROWSER = typeof window !== 'undefined';
1279
- const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
1280
- const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
1281
- const SUPPORTS_FOCUS_VISIBLE = IN_BROWSER && typeof CSS !== 'undefined' && typeof CSS.supports !== 'undefined' && CSS.supports('selector(:focus-visible)');
1282
-
1283
1299
  // Utilities
1284
1300
 
1285
1301
  // Types
@@ -1681,7 +1697,8 @@ var en = {
1681
1697
  input: {
1682
1698
  clear: 'Clear {0}',
1683
1699
  prependAction: '{0} prepended action',
1684
- appendAction: '{0} appended action'
1700
+ appendAction: '{0} appended action',
1701
+ otp: 'Please enter OTP character {0}'
1685
1702
  },
1686
1703
  fileInput: {
1687
1704
  counter: '{0} files',
@@ -1702,6 +1719,10 @@ var en = {
1702
1719
  last: 'Last page'
1703
1720
  }
1704
1721
  },
1722
+ stepper: {
1723
+ next: 'Next',
1724
+ prev: 'Previous'
1725
+ },
1705
1726
  rating: {
1706
1727
  ariaLabel: {
1707
1728
  item: 'Rating {0} of {1}'
@@ -2240,9 +2261,11 @@ function createTheme(options) {
2240
2261
  if (head) {
2241
2262
  if (head.push) {
2242
2263
  const entry = head.push(getHead);
2243
- watch(styles, () => {
2244
- entry.patch(getHead);
2245
- });
2264
+ if (IN_BROWSER) {
2265
+ watch(styles, () => {
2266
+ entry.patch(getHead);
2267
+ });
2268
+ }
2246
2269
  } else {
2247
2270
  if (IN_BROWSER) {
2248
2271
  head.addHeadObjs(computed(getHead));
@@ -2253,9 +2276,13 @@ function createTheme(options) {
2253
2276
  }
2254
2277
  } else {
2255
2278
  let styleEl = IN_BROWSER ? document.getElementById('vuetify-theme-stylesheet') : null;
2256
- watch(styles, updateStyles, {
2257
- immediate: true
2258
- });
2279
+ if (IN_BROWSER) {
2280
+ watch(styles, updateStyles, {
2281
+ immediate: true
2282
+ });
2283
+ } else {
2284
+ updateStyles();
2285
+ }
2259
2286
  function updateStyles() {
2260
2287
  if (typeof document !== 'undefined' && !styleEl) {
2261
2288
  const el = document.createElement('style');
@@ -3860,7 +3887,7 @@ function useGroupItem(props, injectKey) {
3860
3887
  throw new Error(`[Vuetify] Could not find useGroup injection with symbol ${injectKey.description}`);
3861
3888
  }
3862
3889
  const value = toRef(props, 'value');
3863
- const disabled = computed(() => group.disabled.value || props.disabled);
3890
+ const disabled = computed(() => !!(group.disabled.value || props.disabled));
3864
3891
  group.register({
3865
3892
  id,
3866
3893
  value,
@@ -5795,7 +5822,7 @@ const VSelectionControl = genericComponent()({
5795
5822
  });
5796
5823
  function onFocus(e) {
5797
5824
  isFocused.value = true;
5798
- if (!SUPPORTS_FOCUS_VISIBLE || SUPPORTS_FOCUS_VISIBLE && e.target.matches(':focus-visible')) {
5825
+ if (matchesSelector(e.target, ':focus-visible') !== false) {
5799
5826
  isFocusVisible.value = true;
5800
5827
  }
5801
5828
  }
@@ -6755,6 +6782,7 @@ const VChip = genericComponent()({
6755
6782
  const closeProps = computed(() => ({
6756
6783
  'aria-label': t(props.closeLabel),
6757
6784
  onClick(e) {
6785
+ e.stopPropagation();
6758
6786
  isActive.value = false;
6759
6787
  emit('click:close', e);
6760
6788
  }
@@ -6804,7 +6832,7 @@ const VChip = genericComponent()({
6804
6832
  }, [!slots.filter ? createVNode(VIcon, {
6805
6833
  "key": "filter-icon",
6806
6834
  "icon": props.filterIcon
6807
- }, null) : withDirectives(createVNode(VDefaultsProvider, {
6835
+ }, null) : createVNode(VDefaultsProvider, {
6808
6836
  "key": "filter-defaults",
6809
6837
  "disabled": !props.filterIcon,
6810
6838
  "defaults": {
@@ -6812,7 +6840,7 @@ const VChip = genericComponent()({
6812
6840
  icon: props.filterIcon
6813
6841
  }
6814
6842
  }
6815
- }, null), [[resolveDirective("slot"), slots.filter, "default"]])]), [[vShow, group.isSelected.value]])]
6843
+ }, slots.filter)]), [[vShow, group.isSelected.value]])]
6816
6844
  }), hasPrepend && createVNode("div", {
6817
6845
  "key": "prepend",
6818
6846
  "class": "v-chip__prepend"
@@ -7626,6 +7654,7 @@ const VListItem = genericComponent()({
7626
7654
  "style": [colorStyles.value, dimensionStyles.value, props.style],
7627
7655
  "href": link.href.value,
7628
7656
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
7657
+ "title": props.title,
7629
7658
  "onClick": onClick,
7630
7659
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7631
7660
  }, {
@@ -8893,7 +8922,7 @@ function useActivator(props, _ref) {
8893
8922
  runCloseDelay();
8894
8923
  },
8895
8924
  onFocus: e => {
8896
- if (SUPPORTS_FOCUS_VISIBLE && !e.target.matches(':focus-visible')) return;
8925
+ if (matchesSelector(e.target, ':focus-visible') === false) return;
8897
8926
  isFocused = true;
8898
8927
  e.stopPropagation();
8899
8928
  activatorEl.value = e.currentTarget || e.target;
@@ -9813,8 +9842,30 @@ const VMenu = genericComponent()({
9813
9842
  }, 40);
9814
9843
  }
9815
9844
  });
9845
+ function onFocusIn(e) {
9846
+ const before = e.relatedTarget;
9847
+ const after = e.target;
9848
+ if (before !== after && overlay.value?.contentEl &&
9849
+ // We're the topmost menu
9850
+ overlay.value?.globalTop &&
9851
+ // It isn't the document or the menu body
9852
+ ![document, overlay.value.contentEl].includes(after) &&
9853
+ // It isn't inside the menu body
9854
+ !overlay.value.contentEl.contains(after)) {
9855
+ const focusable = focusableChildren(overlay.value.contentEl);
9856
+ focusable[0]?.focus();
9857
+ }
9858
+ }
9816
9859
  watch(isActive, val => {
9817
- val ? parent?.register() : parent?.unregister();
9860
+ if (val) {
9861
+ parent?.register();
9862
+ document.addEventListener('focusin', onFocusIn, {
9863
+ once: true
9864
+ });
9865
+ } else {
9866
+ parent?.unregister();
9867
+ document.removeEventListener('focusin', onFocusIn);
9868
+ }
9818
9869
  });
9819
9870
  function onClickOutside() {
9820
9871
  parent?.closeParents();
@@ -9822,8 +9873,11 @@ const VMenu = genericComponent()({
9822
9873
  function onKeydown(e) {
9823
9874
  if (props.disabled) return;
9824
9875
  if (e.key === 'Tab') {
9825
- isActive.value = false;
9826
- overlay.value?.activatorEl?.focus();
9876
+ const nextElement = getNextElement(focusableChildren(overlay.value?.contentEl, false), e.shiftKey ? 'prev' : 'next', el => el.tabIndex >= 0);
9877
+ if (!nextElement) {
9878
+ isActive.value = false;
9879
+ overlay.value?.activatorEl?.focus();
9880
+ }
9827
9881
  }
9828
9882
  }
9829
9883
  function onActivatorKeydown(e) {
@@ -10737,6 +10791,7 @@ const makeSelectProps = propsFactory({
10737
10791
  type: Function,
10738
10792
  default: deepEqual
10739
10793
  },
10794
+ itemColor: String,
10740
10795
  ...makeItemsProps({
10741
10796
  itemChildren: false
10742
10797
  })
@@ -10789,7 +10844,12 @@ const VSelect = genericComponent()({
10789
10844
  const form = useForm();
10790
10845
  const selections = computed(() => {
10791
10846
  return model.value.map(v => {
10792
- return items.value.find(item => props.valueComparator(item.value, v.value)) || v;
10847
+ return items.value.find(item => {
10848
+ const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
10849
+ const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
10850
+ if (itemRawValue === undefined || modelRawValue === undefined) return false;
10851
+ return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
10852
+ }) || v;
10793
10853
  });
10794
10854
  });
10795
10855
  const selected = computed(() => selections.value.map(selection => selection.props.value));
@@ -10883,7 +10943,7 @@ const VSelect = genericComponent()({
10883
10943
  isFocused.value = true;
10884
10944
  }
10885
10945
  function onModelUpdate(v) {
10886
- if (v == null) model.value = [];else if (vTextFieldRef.value?.matches(':autofill') || vTextFieldRef.value?.matches(':-webkit-autofill')) {
10946
+ if (v == null) model.value = [];else if (matchesSelector(vTextFieldRef.value, ':autofill') || matchesSelector(vTextFieldRef.value, ':-webkit-autofill')) {
10887
10947
  const item = items.value.find(item => item.title === v);
10888
10948
  if (item) {
10889
10949
  select(item);
@@ -10945,7 +11005,8 @@ const VSelect = genericComponent()({
10945
11005
  "onKeydown": onListKeydown,
10946
11006
  "onFocusin": onFocusin,
10947
11007
  "onScrollPassive": onListScroll,
10948
- "tabindex": "-1"
11008
+ "tabindex": "-1",
11009
+ "color": props.itemColor ?? props.color
10949
11010
  }, {
10950
11011
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
10951
11012
  "title": t(props.noDataText)
@@ -11207,7 +11268,7 @@ const VAutocomplete = genericComponent()({
11207
11268
  const vTextFieldRef = ref();
11208
11269
  const isFocused = shallowRef(false);
11209
11270
  const isPristine = shallowRef(true);
11210
- const listHasFocus = ref(false);
11271
+ const listHasFocus = shallowRef(false);
11211
11272
  const vMenuRef = ref();
11212
11273
  const _menu = useProxiedModel(props, 'menu');
11213
11274
  const menu = computed({
@@ -11240,7 +11301,12 @@ const VAutocomplete = genericComponent()({
11240
11301
  } = useFilter(props, items, () => isPristine.value ? '' : search.value);
11241
11302
  const selections = computed(() => {
11242
11303
  return model.value.map(v => {
11243
- return items.value.find(item => props.valueComparator(item.value, v.value)) || v;
11304
+ return items.value.find(item => {
11305
+ const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
11306
+ const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
11307
+ if (itemRawValue === undefined || modelRawValue === undefined) return false;
11308
+ return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
11309
+ }) || v;
11244
11310
  });
11245
11311
  });
11246
11312
  const displayItems = computed(() => {
@@ -11292,11 +11358,8 @@ const VAutocomplete = genericComponent()({
11292
11358
  if (['Escape'].includes(e.key)) {
11293
11359
  menu.value = false;
11294
11360
  }
11295
- if (['Enter', 'Escape', 'Tab'].includes(e.key)) {
11296
- if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key)) {
11297
- select(filteredItems.value[0]);
11298
- }
11299
- isPristine.value = true;
11361
+ if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key)) {
11362
+ select(filteredItems.value[0]);
11300
11363
  }
11301
11364
  if (e.key === 'ArrowDown' && highlightFirst.value) {
11302
11365
  listRef.value?.focus('next');
@@ -11338,7 +11401,7 @@ const VAutocomplete = genericComponent()({
11338
11401
  search.value = e.target.value;
11339
11402
  }
11340
11403
  function onChange(e) {
11341
- if (vTextFieldRef.value?.matches(':autofill') || vTextFieldRef.value?.matches(':-webkit-autofill')) {
11404
+ if (matchesSelector(vTextFieldRef.value, ':autofill') || matchesSelector(vTextFieldRef.value, ':-webkit-autofill')) {
11342
11405
  const item = items.value.find(item => item.title === e.target.value);
11343
11406
  if (item) {
11344
11407
  select(item);
@@ -11462,7 +11525,8 @@ const VAutocomplete = genericComponent()({
11462
11525
  "onFocusin": onFocusin,
11463
11526
  "onFocusout": onFocusout,
11464
11527
  "onScrollPassive": onListScroll,
11465
- "tabindex": "-1"
11528
+ "tabindex": "-1",
11529
+ "color": props.itemColor ?? props.color
11466
11530
  }, {
11467
11531
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
11468
11532
  "title": t(props.noDataText)
@@ -12510,6 +12574,7 @@ const makeVWindowProps = propsFactory({
12510
12574
  },
12511
12575
  // TODO: mandatory should probably not be exposed but do this for now
12512
12576
  mandatory: {
12577
+ type: [Boolean, String],
12513
12578
  default: 'force'
12514
12579
  },
12515
12580
  ...makeComponentProps(),
@@ -12877,7 +12942,9 @@ const VWindowItem = genericComponent()({
12877
12942
  "style": props.style
12878
12943
  }, [hasContent.value && slots.default?.()]), [[vShow, groupItem.isSelected.value]])]
12879
12944
  }));
12880
- return {};
12945
+ return {
12946
+ groupItem
12947
+ };
12881
12948
  }
12882
12949
  });
12883
12950
 
@@ -13431,6 +13498,7 @@ const useSteps = props => {
13431
13498
  const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
13432
13499
  const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
13433
13500
  function roundValue(value) {
13501
+ value = parseFloat(value);
13434
13502
  if (step.value <= 0) return value;
13435
13503
  const clamped = clamp(value, min.value, max.value);
13436
13504
  const offset = min.value % step.value;
@@ -13934,9 +14002,8 @@ const VSlider = genericComponent()({
13934
14002
  rtlClasses
13935
14003
  } = useRtl();
13936
14004
  const steps = useSteps(props);
13937
- const model = useProxiedModel(props, 'modelValue', undefined, v => {
13938
- const value = typeof v === 'string' ? parseFloat(v) : v == null ? steps.min.value : v;
13939
- return steps.roundValue(value);
14005
+ const model = useProxiedModel(props, 'modelValue', undefined, value => {
14006
+ return steps.roundValue(value == null ? steps.min.value : value);
13940
14007
  });
13941
14008
  const {
13942
14009
  min,
@@ -14730,7 +14797,7 @@ const VCombobox = genericComponent()({
14730
14797
  const vTextFieldRef = ref();
14731
14798
  const isFocused = shallowRef(false);
14732
14799
  const isPristine = shallowRef(true);
14733
- const listHasFocus = ref(false);
14800
+ const listHasFocus = shallowRef(false);
14734
14801
  const vMenuRef = ref();
14735
14802
  const _menu = useProxiedModel(props, 'menu');
14736
14803
  const menu = computed({
@@ -14802,7 +14869,12 @@ const VCombobox = genericComponent()({
14802
14869
  } = useFilter(props, items, () => isPristine.value ? '' : search.value);
14803
14870
  const selections = computed(() => {
14804
14871
  return model.value.map(v => {
14805
- return items.value.find(item => props.valueComparator(item.value, v.value)) || v;
14872
+ return items.value.find(item => {
14873
+ const itemRawValue = getPropertyFromItem(item.raw, props.itemValue);
14874
+ const modelRawValue = getPropertyFromItem(v.raw, props.itemValue);
14875
+ if (itemRawValue === undefined || modelRawValue === undefined) return false;
14876
+ return props.returnObject ? props.valueComparator(itemRawValue, modelRawValue) : props.valueComparator(item.value, v.value);
14877
+ }) || v;
14806
14878
  });
14807
14879
  });
14808
14880
  const displayItems = computed(() => {
@@ -15011,7 +15083,8 @@ const VCombobox = genericComponent()({
15011
15083
  "onFocusin": onFocusin,
15012
15084
  "onFocusout": onFocusout,
15013
15085
  "onScrollPassive": onListScroll,
15014
- "tabindex": "-1"
15086
+ "tabindex": "-1",
15087
+ "color": props.itemColor ?? props.color
15015
15088
  }, {
15016
15089
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? createVNode(VListItem, {
15017
15090
  "title": t(props.noDataText)
@@ -15429,6 +15502,11 @@ const VExpansionPanel = genericComponent()({
15429
15502
  return !groupItem.isSelected.value && selectedIndices.value.some(selectedIndex => selectedIndex - index === -1);
15430
15503
  });
15431
15504
  provide(VExpansionPanelSymbol, groupItem);
15505
+ provideDefaults({
15506
+ VExpansionPanelText: {
15507
+ eager: toRef(props, 'eager')
15508
+ }
15509
+ });
15432
15510
  useRender(() => {
15433
15511
  const hasText = !!(slots.text || props.text);
15434
15512
  const hasTitle = !!(slots.title || props.title);
@@ -15453,8 +15531,7 @@ const VExpansionPanel = genericComponent()({
15453
15531
  }, {
15454
15532
  default: () => [slots.title ? slots.title() : props.title]
15455
15533
  }), hasText && createVNode(VExpansionPanelText, {
15456
- "key": "text",
15457
- "eager": props.eager
15534
+ "key": "text"
15458
15535
  }, {
15459
15536
  default: () => [slots.text ? slots.text() : props.text]
15460
15537
  }), slots.default?.()]
@@ -16072,7 +16149,7 @@ const VRow = genericComponent()({
16072
16149
  });
16073
16150
 
16074
16151
  // Utilities
16075
- const VSpacer = createSimpleFunctional('flex-grow-1', 'div', 'VSpacer');
16152
+ const VSpacer = createSimpleFunctional('v-spacer', 'div', 'VSpacer');
16076
16153
 
16077
16154
  // Composables
16078
16155
  const makeVHoverProps = propsFactory({
@@ -17796,7 +17873,9 @@ const VRating = genericComponent()({
17796
17873
  value,
17797
17874
  index,
17798
17875
  rating: normalizedValue.value
17799
- }) : createVNode(VBtn, btnProps, null)]), createVNode("input", {
17876
+ }) : createVNode(VBtn, mergeProps({
17877
+ "aria-label": t(props.itemAriaLabel, value, props.length)
17878
+ }, btnProps), null)]), createVNode("input", {
17800
17879
  "class": "v-rating__hidden",
17801
17880
  "name": name.value,
17802
17881
  "id": id,
@@ -19863,12 +19942,11 @@ function startOfMonth(date) {
19863
19942
  function endOfMonth(date) {
19864
19943
  return new Date(date.getFullYear(), date.getMonth() + 1, 0);
19865
19944
  }
19866
- function formatYyyyMmDd(value) {
19867
- const formattedValue = value.split('-').map(d => d.padStart(2, '0')).join('-');
19868
- const offsetMin = new Date().getTimezoneOffset() / -60;
19869
- const offsetSign = offsetMin < 0 ? '-' : '+';
19870
- const offsetValue = Math.abs(offsetMin).toString().padStart(2, '0');
19871
- return `${formattedValue}T00:00:00.000${offsetSign}${offsetValue}:00`;
19945
+ function parseLocalDate(value) {
19946
+ const parts = value.split('-').map(Number);
19947
+
19948
+ // new Date() uses local time zone when passing individual date component values
19949
+ return new Date(parts[0], parts[1] - 1, parts[2]);
19872
19950
  }
19873
19951
  const _YYYMMDD = /([12]\d{3}-([1-9]|0[1-9]|1[0-2])-([1-9]|0[1-9]|[12]\d|3[01]))/;
19874
19952
  function date(value) {
@@ -19877,7 +19955,7 @@ function date(value) {
19877
19955
  if (typeof value === 'string') {
19878
19956
  let parsed;
19879
19957
  if (_YYYMMDD.test(value)) {
19880
- parsed = Date.parse(formatYyyyMmDd(value));
19958
+ return parseLocalDate(value);
19881
19959
  } else {
19882
19960
  parsed = Date.parse(value);
19883
19961
  }
@@ -19892,7 +19970,7 @@ function getWeekdays(locale) {
19892
19970
  const weekday = new Date(sundayJanuarySecond2000);
19893
19971
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
19894
19972
  return new Intl.DateTimeFormat(locale, {
19895
- weekday: 'short'
19973
+ weekday: 'narrow'
19896
19974
  }).format(weekday);
19897
19975
  });
19898
19976
  }
@@ -20211,7 +20289,7 @@ function createVuetify$1() {
20211
20289
  date
20212
20290
  };
20213
20291
  }
20214
- const version$1 = "3.3.10";
20292
+ const version$1 = "3.3.12";
20215
20293
  createVuetify$1.version = version$1;
20216
20294
 
20217
20295
  // Vue's inject() can only be used in setup
@@ -20236,7 +20314,7 @@ const createVuetify = function () {
20236
20314
  ...options
20237
20315
  });
20238
20316
  };
20239
- const version = "3.3.10";
20317
+ const version = "3.3.12";
20240
20318
  createVuetify.version = version;
20241
20319
 
20242
20320
  export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };