@vuetify/nightly 3.8.9-dev.2025-06-13 → 3.8.9-master.2025-06-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 (209) hide show
  1. package/CHANGELOG.md +6 -45
  2. package/dist/json/attributes.json +3714 -4110
  3. package/dist/json/importMap-labs.json +24 -28
  4. package/dist/json/importMap.json +154 -154
  5. package/dist/json/tags.json +2 -106
  6. package/dist/json/web-types.json +6783 -8232
  7. package/dist/vuetify-labs.cjs +177 -730
  8. package/dist/vuetify-labs.css +4085 -4128
  9. package/dist/vuetify-labs.d.ts +2938 -10254
  10. package/dist/vuetify-labs.esm.js +178 -731
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +177 -730
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +166 -478
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3607 -3650
  17. package/dist/vuetify.d.ts +2085 -2782
  18. package/dist/vuetify.esm.js +167 -479
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +166 -478
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1229 -1251
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAlert/VAlert.css +1 -6
  26. package/lib/components/VAlert/VAlert.d.ts +0 -35
  27. package/lib/components/VAlert/VAlert.js +10 -15
  28. package/lib/components/VAlert/VAlert.js.map +1 -1
  29. package/lib/components/VAlert/VAlert.sass +1 -7
  30. package/lib/components/VAppBar/VAppBar.d.ts +3 -15
  31. package/lib/components/VAppBar/VAppBarNavIcon.d.ts +10 -20
  32. package/lib/components/VAutocomplete/VAutocomplete.d.ts +110 -175
  33. package/lib/components/VAutocomplete/VAutocomplete.js +3 -21
  34. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  35. package/lib/components/VBadge/VBadge.d.ts +0 -60
  36. package/lib/components/VBadge/VBadge.js +2 -7
  37. package/lib/components/VBadge/VBadge.js.map +1 -1
  38. package/lib/components/VBtn/VBtn.d.ts +10 -20
  39. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  40. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  41. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  42. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  43. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  44. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  45. package/lib/components/VCard/VCard.d.ts +10 -20
  46. package/lib/components/VCheckbox/VCheckbox.d.ts +13 -23
  47. package/lib/components/VCheckbox/VCheckboxBtn.d.ts +10 -20
  48. package/lib/components/VChip/VChip.d.ts +10 -20
  49. package/lib/components/VChipGroup/VChipGroup.d.ts +0 -10
  50. package/lib/components/VCombobox/VCombobox.d.ts +110 -175
  51. package/lib/components/VCombobox/VCombobox.js +3 -22
  52. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  53. package/lib/components/VDataTable/VDataTable.d.ts +0 -60
  54. package/lib/components/VDataTable/VDataTableHeaders.d.ts +0 -13
  55. package/lib/components/VDataTable/VDataTableHeaders.js +2 -4
  56. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  57. package/lib/components/VDataTable/VDataTableServer.d.ts +0 -42
  58. package/lib/components/VDataTable/VDataTableVirtual.d.ts +0 -42
  59. package/lib/components/VDatePicker/VDatePicker.d.ts +5 -80
  60. package/lib/components/VDatePicker/VDatePicker.js +4 -10
  61. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  62. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
  63. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
  64. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  65. package/lib/components/VExpansionPanel/VExpansionPanel.d.ts +10 -20
  66. package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +10 -20
  67. package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +10 -20
  68. package/lib/components/VFab/VFab.d.ts +10 -20
  69. package/lib/components/VField/VField.d.ts +3 -3
  70. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  71. package/lib/components/VInfiniteScroll/VInfiniteScroll.d.ts +3 -9
  72. package/lib/components/VInfiniteScroll/VInfiniteScroll.js +0 -29
  73. package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
  74. package/lib/components/VInput/VInput.d.ts +4 -4
  75. package/lib/components/VKbd/VKbd.css +2 -13
  76. package/lib/components/VKbd/VKbd.sass +1 -2
  77. package/lib/components/VKbd/_variables.scss +1 -12
  78. package/lib/components/VKbd/index.d.ts +95 -1
  79. package/lib/components/VKbd/index.js +4 -1
  80. package/lib/components/VKbd/index.js.map +1 -1
  81. package/lib/components/VList/VList.d.ts +0 -13
  82. package/lib/components/VList/VList.js +1 -4
  83. package/lib/components/VList/VList.js.map +1 -1
  84. package/lib/components/VList/VListChildren.js.map +1 -1
  85. package/lib/components/VList/VListItem.css +2 -0
  86. package/lib/components/VList/VListItem.d.ts +10 -23
  87. package/lib/components/VList/VListItem.js +3 -7
  88. package/lib/components/VList/VListItem.js.map +1 -1
  89. package/lib/components/VList/VListItem.sass +2 -0
  90. package/lib/components/VList/_variables.scss +1 -0
  91. package/lib/components/VList/list.d.ts +2 -9
  92. package/lib/components/VList/list.js +0 -7
  93. package/lib/components/VList/list.js.map +1 -1
  94. package/lib/components/VMenu/VMenu.d.ts +0 -13
  95. package/lib/components/VMenu/VMenu.js +1 -2
  96. package/lib/components/VMenu/VMenu.js.map +1 -1
  97. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -114
  98. package/lib/components/VNumberInput/VNumberInput.js +20 -43
  99. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  100. package/lib/components/VOtpInput/VOtpInput.js +1 -2
  101. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  102. package/lib/components/VOverlay/VOverlay.css +1 -1
  103. package/lib/components/VOverlay/_variables.scss +1 -1
  104. package/lib/components/VRadio/VRadio.d.ts +10 -20
  105. package/lib/components/VRadioGroup/VRadioGroup.d.ts +13 -23
  106. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  107. package/lib/components/VSelect/VSelect.d.ts +118 -204
  108. package/lib/components/VSelect/VSelect.js +3 -21
  109. package/lib/components/VSelect/VSelect.js.map +1 -1
  110. package/lib/components/VSelectionControl/VSelectionControl.d.ts +10 -20
  111. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +14 -28
  112. package/lib/components/VSlideGroup/VSlideGroup.d.ts +0 -10
  113. package/lib/components/VSlideGroup/VSlideGroup.js +1 -2
  114. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  115. package/lib/components/VSlider/VSlider.d.ts +3 -3
  116. package/lib/components/VSlider/VSliderThumb.d.ts +10 -20
  117. package/lib/components/VSpeedDial/VSpeedDial.css +1 -1
  118. package/lib/components/VSpeedDial/VSpeedDial.d.ts +0 -13
  119. package/lib/components/VSpeedDial/VSpeedDial.sass +3 -1
  120. package/lib/components/VStepper/VStepperItem.d.ts +14 -28
  121. package/lib/components/VSwitch/VSwitch.d.ts +13 -23
  122. package/lib/components/VTable/VTable.css +0 -6
  123. package/lib/components/VTable/VTable.d.ts +24 -55
  124. package/lib/components/VTable/VTable.js +2 -9
  125. package/lib/components/VTable/VTable.js.map +1 -1
  126. package/lib/components/VTable/VTable.sass +0 -14
  127. package/lib/components/VTable/_variables.scss +0 -1
  128. package/lib/components/VTabs/VTab.d.ts +28 -56
  129. package/lib/components/VTabs/VTabs.d.ts +0 -10
  130. package/lib/components/VTextField/VTextField.d.ts +27 -27
  131. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  132. package/lib/components/VToolbar/VToolbar.d.ts +3 -15
  133. package/lib/components/VToolbar/VToolbar.js +3 -6
  134. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  135. package/lib/composables/calendar.d.ts +0 -6
  136. package/lib/composables/calendar.js +1 -2
  137. package/lib/composables/calendar.js.map +1 -1
  138. package/lib/composables/date/DateAdapter.d.ts +3 -3
  139. package/lib/composables/date/DateAdapter.js.map +1 -1
  140. package/lib/composables/date/adapters/vuetify.d.ts +1 -1
  141. package/lib/composables/date/adapters/vuetify.js +4 -4
  142. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  143. package/lib/composables/date/date.d.ts +3 -3
  144. package/lib/composables/date/index.d.ts +0 -1
  145. package/lib/composables/date/index.js +0 -1
  146. package/lib/composables/date/index.js.map +1 -1
  147. package/lib/composables/filter.js +0 -3
  148. package/lib/composables/filter.js.map +1 -1
  149. package/lib/composables/locale.d.ts +1 -5
  150. package/lib/composables/locale.js.map +1 -1
  151. package/lib/composables/theme.d.ts +1 -6
  152. package/lib/composables/theme.js +29 -97
  153. package/lib/composables/theme.js.map +1 -1
  154. package/lib/composables/virtual.js +1 -6
  155. package/lib/composables/virtual.js.map +1 -1
  156. package/lib/directives/ripple/index.d.ts +1 -2
  157. package/lib/directives/ripple/index.js +7 -12
  158. package/lib/directives/ripple/index.js.map +1 -1
  159. package/lib/entry-bundler.d.ts +3 -4
  160. package/lib/entry-bundler.js +1 -1
  161. package/lib/entry-bundler.js.map +1 -1
  162. package/lib/framework.d.ts +64 -83
  163. package/lib/framework.js +1 -1
  164. package/lib/framework.js.map +1 -1
  165. package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
  166. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  167. package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
  168. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  169. package/lib/labs/VFileUpload/VFileUploadItem.d.ts +10 -20
  170. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  171. package/lib/labs/VIconBtn/VIconBtn.js +11 -7
  172. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  173. package/lib/labs/VStepperVertical/VStepperVertical.d.ts +10 -20
  174. package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +10 -20
  175. package/lib/labs/VTreeview/VTreeview.d.ts +0 -13
  176. package/lib/labs/VTreeview/VTreeviewItem.d.ts +10 -20
  177. package/lib/labs/components.d.ts +0 -1
  178. package/lib/labs/components.js +0 -1
  179. package/lib/labs/components.js.map +1 -1
  180. package/lib/labs/entry-bundler.d.ts +3 -4
  181. package/lib/locale/adapters/vue-i18n.js +1 -6
  182. package/lib/locale/adapters/vue-i18n.js.map +1 -1
  183. package/lib/locale/adapters/vuetify.js +1 -7
  184. package/lib/locale/adapters/vuetify.js.map +1 -1
  185. package/lib/util/globals.d.ts +0 -1
  186. package/lib/util/globals.js +0 -1
  187. package/lib/util/globals.js.map +1 -1
  188. package/lib/util/helpers.d.ts +1 -2
  189. package/lib/util/helpers.js +7 -12
  190. package/lib/util/helpers.js.map +1 -1
  191. package/package.json +1 -3
  192. package/lib/components/VKbd/VKbd.d.ts +0 -221
  193. package/lib/components/VKbd/VKbd.js +0 -55
  194. package/lib/components/VKbd/VKbd.js.map +0 -1
  195. package/lib/composables/date/adapters/string.d.ts +0 -54
  196. package/lib/composables/date/adapters/string.js +0 -153
  197. package/lib/composables/date/adapters/string.js.map +0 -1
  198. package/lib/composables/iconSizes.d.ts +0 -28
  199. package/lib/composables/iconSizes.js +0 -23
  200. package/lib/composables/iconSizes.js.map +0 -1
  201. package/lib/composables/mask.d.ts +0 -38
  202. package/lib/composables/mask.js +0 -183
  203. package/lib/composables/mask.js.map +0 -1
  204. package/lib/labs/VMaskInput/VMaskInput.d.ts +0 -6993
  205. package/lib/labs/VMaskInput/VMaskInput.js +0 -67
  206. package/lib/labs/VMaskInput/VMaskInput.js.map +0 -1
  207. package/lib/labs/VMaskInput/index.d.ts +0 -1
  208. package/lib/labs/VMaskInput/index.js +0 -2
  209. package/lib/labs/VMaskInput/index.js.map +0 -1
@@ -1,16 +1,15 @@
1
1
  /*!
2
- * Vuetify v3.8.9-dev.2025-06-13
2
+ * Vuetify v3.8.9-master.2025-06-12
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, normalizeStyle, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, createVNode, mergeProps, createElementVNode, normalizeClass, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, normalizeStyle, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, normalizeProps, guardReactiveProps, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
11
11
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
12
12
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
13
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
14
13
 
15
14
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
16
15
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -511,23 +510,18 @@ function checkPrintable(e) {
511
510
  function isPrimitive(value) {
512
511
  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
513
512
  }
514
- function escapeForRegex(sign) {
515
- return '\\^$*+?.()|{}[]'.includes(sign) ? `\\${sign}` : sign;
516
- }
517
- function extractNumber(text, decimalDigitsLimit, decimalSeparator) {
518
- const onlyValidCharacters = new RegExp(`[\\d\\-${escapeForRegex(decimalSeparator)}]`);
519
- const cleanText = text.split('').filter(x => onlyValidCharacters.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
513
+ function extractNumber(text, decimalDigitsLimit) {
514
+ const cleanText = text.split('').filter(x => /[\d\-.]/.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
520
515
  // sign allowed at the start
521
- x === decimalSeparator && i === all.indexOf(x) ||
516
+ x === '.' && i === all.indexOf('.') ||
522
517
  // decimal separator allowed only once
523
518
  /\d/.test(x)).join('');
524
519
  if (decimalDigitsLimit === 0) {
525
- return cleanText.split(decimalSeparator)[0];
520
+ return cleanText.split('.')[0];
526
521
  }
527
- const decimalPart = new RegExp(`${escapeForRegex(decimalSeparator)}\\d`);
528
- if (decimalDigitsLimit !== null && decimalPart.test(cleanText)) {
529
- const parts = cleanText.split(decimalSeparator);
530
- return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join(decimalSeparator);
522
+ if (decimalDigitsLimit !== null && /\.\d/.test(cleanText)) {
523
+ const parts = cleanText.split('.');
524
+ return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join('.');
531
525
  }
532
526
  return cleanText;
533
527
  }
@@ -2667,10 +2661,6 @@ function createNumberFunction(current, fallback) {
2667
2661
  return numberFormat.format(value);
2668
2662
  };
2669
2663
  }
2670
- function inferDecimalSeparator(current, fallback) {
2671
- const format = createNumberFunction(current, fallback);
2672
- return format(0.1).includes(',') ? ',' : '.';
2673
- }
2674
2664
  function useProvided(props, prop, provided) {
2675
2665
  const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
2676
2666
 
@@ -2693,7 +2683,6 @@ function createProvideFunction(state) {
2693
2683
  current,
2694
2684
  fallback,
2695
2685
  messages,
2696
- decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
2697
2686
  t: createTranslateFunction(current, fallback, messages),
2698
2687
  n: createNumberFunction(current, fallback),
2699
2688
  provide: createProvideFunction({
@@ -2716,7 +2705,6 @@ function createVuetifyAdapter(options) {
2716
2705
  current,
2717
2706
  fallback,
2718
2707
  messages,
2719
- decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
2720
2708
  t: createTranslateFunction(current, fallback, messages),
2721
2709
  n: createNumberFunction(current, fallback),
2722
2710
  provide: createProvideFunction({
@@ -2843,7 +2831,6 @@ const makeThemeProps = propsFactory({
2843
2831
  function genDefaults$1() {
2844
2832
  return {
2845
2833
  defaultTheme: 'light',
2846
- prefix: 'v-',
2847
2834
  variations: {
2848
2835
  colors: [],
2849
2836
  lighten: 0,
@@ -2881,8 +2868,8 @@ function genDefaults$1() {
2881
2868
  'activated-opacity': 0.12,
2882
2869
  'pressed-opacity': 0.12,
2883
2870
  'dragged-opacity': 0.08,
2884
- 'theme-kbd': '#EEEEEE',
2885
- 'theme-on-kbd': '#000000',
2871
+ 'theme-kbd': '#212529',
2872
+ 'theme-on-kbd': '#FFFFFF',
2886
2873
  'theme-code': '#F5F5F5',
2887
2874
  'theme-on-code': '#000000'
2888
2875
  }
@@ -2918,17 +2905,14 @@ function genDefaults$1() {
2918
2905
  'activated-opacity': 0.12,
2919
2906
  'pressed-opacity': 0.16,
2920
2907
  'dragged-opacity': 0.08,
2921
- 'theme-kbd': '#424242',
2908
+ 'theme-kbd': '#212529',
2922
2909
  'theme-on-kbd': '#FFFFFF',
2923
2910
  'theme-code': '#343434',
2924
2911
  'theme-on-code': '#CCCCCC'
2925
2912
  }
2926
2913
  }
2927
2914
  },
2928
- stylesheetId: 'vuetify-theme-stylesheet',
2929
- scoped: false,
2930
- unimportant: false,
2931
- utilities: true
2915
+ stylesheetId: 'vuetify-theme-stylesheet'
2932
2916
  };
2933
2917
  }
2934
2918
  function parseThemeOptions() {
@@ -2951,21 +2935,21 @@ function parseThemeOptions() {
2951
2935
  function createCssClass(lines, selector, content, scope) {
2952
2936
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2953
2937
  }
2954
- function genCssVariables(theme, prefix) {
2938
+ function genCssVariables(theme) {
2955
2939
  const lightOverlay = theme.dark ? 2 : 1;
2956
2940
  const darkOverlay = theme.dark ? 1 : 2;
2957
2941
  const variables = [];
2958
2942
  for (const [key, value] of Object.entries(theme.colors)) {
2959
2943
  const rgb = parseColor(value);
2960
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2944
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2961
2945
  if (!key.startsWith('on-')) {
2962
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2946
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2963
2947
  }
2964
2948
  }
2965
2949
  for (const [key, value] of Object.entries(theme.variables)) {
2966
2950
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2967
2951
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2968
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2952
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2969
2953
  }
2970
2954
  return variables;
2971
2955
  }
@@ -3009,8 +2993,7 @@ function getScopedSelector(selector, scope) {
3009
2993
  const scopeSelector = `:where(${scope})`;
3010
2994
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
3011
2995
  }
3012
- function upsertStyles(id, cspNonce, styles) {
3013
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2996
+ function upsertStyles(styleEl, styles) {
3014
2997
  if (!styleEl) return;
3015
2998
  styleEl.innerHTML = styles;
3016
2999
  }
@@ -3030,17 +3013,8 @@ function getOrCreateStyleElement(id, cspNonce) {
3030
3013
  // Composables
3031
3014
  function createTheme(options) {
3032
3015
  const parsedOptions = parseThemeOptions(options);
3033
- const _name = shallowRef(parsedOptions.defaultTheme);
3016
+ const name = shallowRef(parsedOptions.defaultTheme);
3034
3017
  const themes = ref(parsedOptions.themes);
3035
- const systemName = shallowRef('light');
3036
- const name = computed({
3037
- get() {
3038
- return _name.value === 'system' ? systemName.value : _name.value;
3039
- },
3040
- set(val) {
3041
- _name.value = val;
3042
- }
3043
- });
3044
3018
  const computedThemes = computed(() => {
3045
3019
  const acc = {};
3046
3020
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3061,49 +3035,28 @@ function createTheme(options) {
3061
3035
  const current = toRef(() => computedThemes.value[name.value]);
3062
3036
  const styles = computed(() => {
3063
3037
  const lines = [];
3064
- const important = parsedOptions.unimportant ? '' : ' !important';
3065
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3066
3038
  if (current.value?.dark) {
3067
3039
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3068
3040
  }
3069
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
3041
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3070
3042
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
3071
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3072
- }
3073
- if (parsedOptions.utilities) {
3074
- const bgLines = [];
3075
- const fgLines = [];
3076
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3077
- for (const key of colors) {
3078
- if (key.startsWith('on-')) {
3079
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3080
- } else {
3081
- createCssClass(bgLines, `.${scoped}bg-${key}`, [`--${parsedOptions.prefix}theme-overlay-multiplier: var(--${parsedOptions.prefix}theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`, `color: rgb(var(--${parsedOptions.prefix}theme-on-${key}))${important}`], parsedOptions.scope);
3082
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3083
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3084
- }
3043
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
3044
+ }
3045
+ const bgLines = [];
3046
+ const fgLines = [];
3047
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3048
+ for (const key of colors) {
3049
+ if (key.startsWith('on-')) {
3050
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3051
+ } else {
3052
+ createCssClass(bgLines, `.bg-${key}`, [`--v-theme-overlay-multiplier: var(--v-theme-${key}-overlay-multiplier)`, `background-color: rgb(var(--v-theme-${key})) !important`, `color: rgb(var(--v-theme-on-${key})) !important`], parsedOptions.scope);
3053
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3054
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3085
3055
  }
3086
- lines.push(...bgLines, ...fgLines);
3087
3056
  }
3057
+ lines.push(...bgLines, ...fgLines);
3088
3058
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3089
3059
  });
3090
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3091
- const themeNames = toRef(() => Object.keys(computedThemes.value));
3092
- if (SUPPORTS_MATCH_MEDIA) {
3093
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3094
- function updateSystemName() {
3095
- systemName.value = media.matches ? 'dark' : 'light';
3096
- }
3097
- updateSystemName();
3098
- media.addEventListener('change', updateSystemName, {
3099
- passive: true
3100
- });
3101
- if (getCurrentScope()) {
3102
- onScopeDispose(() => {
3103
- media.removeEventListener('change', updateSystemName);
3104
- });
3105
- }
3106
- }
3107
3060
  function install(app) {
3108
3061
  if (parsedOptions.isDisabled) return;
3109
3062
  const head = app._context.provides.usehead;
@@ -3141,55 +3094,22 @@ function createTheme(options) {
3141
3094
  updateStyles();
3142
3095
  }
3143
3096
  function updateStyles() {
3144
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3097
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3145
3098
  }
3146
3099
  }
3147
3100
  }
3148
- function change(themeName) {
3149
- if (!themeNames.value.includes(themeName)) {
3150
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3151
- return;
3152
- }
3153
- name.value = themeName;
3154
- }
3155
- function cycle() {
3156
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3157
- const currentIndex = themeArray.indexOf(name.value);
3158
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3159
- change(themeArray[nextIndex]);
3160
- }
3161
- function toggle() {
3162
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3163
- cycle(themeArray);
3164
- }
3165
- const globalName = new Proxy(name, {
3166
- get(target, prop) {
3167
- return target[prop];
3168
- },
3169
- set(target, prop, val) {
3170
- if (prop === 'value') {
3171
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3172
- }
3173
- // @ts-expect-error
3174
- target[prop] = val;
3175
- return true;
3176
- }
3177
- });
3101
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3178
3102
  return {
3179
3103
  install,
3180
- change,
3181
- cycle,
3182
- toggle,
3183
3104
  isDisabled: parsedOptions.isDisabled,
3184
3105
  name,
3185
3106
  themes,
3186
3107
  current,
3187
3108
  computedThemes,
3188
- prefix: parsedOptions.prefix,
3189
3109
  themeClasses,
3190
3110
  styles,
3191
3111
  global: {
3192
- name: globalName,
3112
+ name,
3193
3113
  current
3194
3114
  }
3195
3115
  };
@@ -3200,7 +3120,7 @@ function provideTheme(props) {
3200
3120
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3201
3121
  const name = toRef(() => props.theme ?? theme.name.value);
3202
3122
  const current = toRef(() => theme.themes.value[name.value]);
3203
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3123
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3204
3124
  const newTheme = {
3205
3125
  ...theme,
3206
3126
  name,
@@ -4304,10 +4224,7 @@ const makeVToolbarProps = propsFactory({
4304
4224
  default: 'default',
4305
4225
  validator: v => allowedDensities$1.includes(v)
4306
4226
  },
4307
- extended: {
4308
- type: Boolean,
4309
- default: null
4310
- },
4227
+ extended: Boolean,
4311
4228
  extensionHeight: {
4312
4229
  type: [Number, String],
4313
4230
  default: 48
@@ -4355,7 +4272,7 @@ const VToolbar = genericComponent()({
4355
4272
  const {
4356
4273
  rtlClasses
4357
4274
  } = useRtl();
4358
- const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
4275
+ const isExtended = shallowRef(!!(props.extended || slots.extension?.()));
4359
4276
  const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
4360
4277
  const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);
4361
4278
  provideDefaults({
@@ -4367,7 +4284,7 @@ const VToolbar = genericComponent()({
4367
4284
  const hasTitle = !!(props.title || slots.title);
4368
4285
  const hasImage = !!(slots.image || props.image);
4369
4286
  const extension = slots.extension?.();
4370
- isExtended.value = props.extended === null ? !!extension : props.extended;
4287
+ isExtended.value = !!(props.extended || extension);
4371
4288
  return createVNode(props.tag, {
4372
4289
  "class": normalizeClass(['v-toolbar', {
4373
4290
  'v-toolbar--absolute': props.absolute,
@@ -4750,15 +4667,9 @@ function useVariant(props) {
4750
4667
  };
4751
4668
  }
4752
4669
 
4753
- // Types
4754
-
4755
4670
  const makeVBtnGroupProps = propsFactory({
4756
4671
  baseColor: String,
4757
4672
  divided: Boolean,
4758
- direction: {
4759
- type: String,
4760
- default: 'horizontal'
4761
- },
4762
4673
  ...makeBorderProps(),
4763
4674
  ...makeComponentProps(),
4764
4675
  ...makeDensityProps(),
@@ -4792,7 +4703,7 @@ const VBtnGroup = genericComponent()({
4792
4703
  } = useRounded(props);
4793
4704
  provideDefaults({
4794
4705
  VBtn: {
4795
- height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4706
+ height: 'auto',
4796
4707
  baseColor: toRef(() => props.baseColor),
4797
4708
  color: toRef(() => props.color),
4798
4709
  density: toRef(() => props.density),
@@ -4802,7 +4713,7 @@ const VBtnGroup = genericComponent()({
4802
4713
  });
4803
4714
  useRender(() => {
4804
4715
  return createVNode(props.tag, {
4805
- "class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4716
+ "class": normalizeClass(['v-btn-group', {
4806
4717
  'v-btn-group--divided': props.divided
4807
4718
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4808
4719
  "style": normalizeStyle(props.style)
@@ -5925,8 +5836,8 @@ function rippleCancelShow(e) {
5925
5836
  window.clearTimeout(element._ripple.showTimer);
5926
5837
  }
5927
5838
  let keyboardRipple = false;
5928
- function keyboardRippleShow(e, keys) {
5929
- if (!keyboardRipple && keys.includes(e.keyCode)) {
5839
+ function keyboardRippleShow(e) {
5840
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
5930
5841
  keyboardRipple = true;
5931
5842
  rippleShow(e);
5932
5843
  }
@@ -5954,12 +5865,9 @@ function updateRipple(el, binding, wasEnabled) {
5954
5865
  el._ripple.enabled = enabled;
5955
5866
  el._ripple.centered = modifiers.center;
5956
5867
  el._ripple.circle = modifiers.circle;
5957
- const bindingValue = isObject(value) ? value : {};
5958
- if (bindingValue.class) {
5959
- el._ripple.class = bindingValue.class;
5868
+ if (isObject(value) && value.class) {
5869
+ el._ripple.class = value.class;
5960
5870
  }
5961
- const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
5962
- el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
5963
5871
  if (enabled && !wasEnabled) {
5964
5872
  if (modifiers.stop) {
5965
5873
  el.addEventListener('touchstart', rippleStop, {
@@ -5981,7 +5889,7 @@ function updateRipple(el, binding, wasEnabled) {
5981
5889
  el.addEventListener('mousedown', rippleShow);
5982
5890
  el.addEventListener('mouseup', rippleHide);
5983
5891
  el.addEventListener('mouseleave', rippleHide);
5984
- el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
5892
+ el.addEventListener('keydown', keyboardRippleShow);
5985
5893
  el.addEventListener('keyup', keyboardRippleHide);
5986
5894
  el.addEventListener('blur', focusRippleHide);
5987
5895
 
@@ -6001,9 +5909,7 @@ function removeListeners(el) {
6001
5909
  el.removeEventListener('touchcancel', rippleHide);
6002
5910
  el.removeEventListener('mouseup', rippleHide);
6003
5911
  el.removeEventListener('mouseleave', rippleHide);
6004
- if (el._ripple?.keyDownHandler) {
6005
- el.removeEventListener('keydown', el._ripple.keyDownHandler);
6006
- }
5912
+ el.removeEventListener('keydown', keyboardRippleShow);
6007
5913
  el.removeEventListener('keyup', keyboardRippleHide);
6008
5914
  el.removeEventListener('dragstart', rippleHide);
6009
5915
  el.removeEventListener('blur', focusRippleHide);
@@ -6012,8 +5918,8 @@ function mounted$4(el, binding) {
6012
5918
  updateRipple(el, binding, false);
6013
5919
  }
6014
5920
  function unmounted$4(el) {
6015
- removeListeners(el);
6016
5921
  delete el._ripple;
5922
+ removeListeners(el);
6017
5923
  }
6018
5924
  function updated$1(el, binding) {
6019
5925
  if (binding.value === binding.oldValue) {
@@ -6286,31 +6192,6 @@ const VAppBarTitle = genericComponent()({
6286
6192
  // Utilities
6287
6193
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6288
6194
 
6289
- // Utilities
6290
-
6291
- // Types
6292
-
6293
- // Types
6294
-
6295
- // Composables
6296
- const makeIconSizeProps = propsFactory({
6297
- iconSize: [Number, String],
6298
- iconSizes: {
6299
- type: Array,
6300
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6301
- }
6302
- }, 'iconSize');
6303
- function useIconSizes(props, fallback) {
6304
- const iconSize = computed(() => {
6305
- const iconSizeMap = new Map(props.iconSizes);
6306
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6307
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6308
- });
6309
- return {
6310
- iconSize
6311
- };
6312
- }
6313
-
6314
6195
  // Types
6315
6196
 
6316
6197
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6350,7 +6231,6 @@ const makeVAlertProps = propsFactory({
6350
6231
  ...makeDensityProps(),
6351
6232
  ...makeDimensionProps(),
6352
6233
  ...makeElevationProps(),
6353
- ...makeIconSizeProps(),
6354
6234
  ...makeLocationProps(),
6355
6235
  ...makePositionProps(),
6356
6236
  ...makeRoundedProps(),
@@ -6378,9 +6258,6 @@ const VAlert = genericComponent()({
6378
6258
  if (!props.type) return props.icon;
6379
6259
  return props.icon ?? `$${props.type}`;
6380
6260
  });
6381
- const {
6382
- iconSize
6383
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6384
6261
  const {
6385
6262
  themeClasses
6386
6263
  } = provideTheme(props);
@@ -6428,11 +6305,6 @@ const VAlert = genericComponent()({
6428
6305
  const hasPrepend = !!(slots.prepend || icon.value);
6429
6306
  const hasTitle = !!(slots.title || props.title);
6430
6307
  const hasClose = !!(slots.close || props.closable);
6431
- const iconProps = {
6432
- density: props.density,
6433
- icon: icon.value,
6434
- size: iconSize.value
6435
- };
6436
6308
  return isActive.value && createVNode(props.tag, {
6437
6309
  "class": normalizeClass(['v-alert', props.border && {
6438
6310
  'v-alert--border': !!props.border,
@@ -6450,14 +6322,19 @@ const VAlert = genericComponent()({
6450
6322
  }, null), hasPrepend && createElementVNode("div", {
6451
6323
  "key": "prepend",
6452
6324
  "class": "v-alert__prepend"
6453
- }, [!slots.prepend ? createVNode(VIcon, mergeProps({
6454
- "key": "prepend-icon"
6455
- }, iconProps), null) : createVNode(VDefaultsProvider, {
6325
+ }, [!slots.prepend ? createVNode(VIcon, {
6326
+ "key": "prepend-icon",
6327
+ "density": props.density,
6328
+ "icon": icon.value,
6329
+ "size": props.prominent ? 44 : 28
6330
+ }, null) : createVNode(VDefaultsProvider, {
6456
6331
  "key": "prepend-defaults",
6457
6332
  "disabled": !icon.value,
6458
6333
  "defaults": {
6459
6334
  VIcon: {
6460
- ...iconProps
6335
+ density: props.density,
6336
+ icon: icon.value,
6337
+ size: props.prominent ? 44 : 28
6461
6338
  }
6462
6339
  }
6463
6340
  }, slots.prepend)]), createElementVNode("div", {
@@ -7982,7 +7859,6 @@ function getOffsetPosition(isHorizontal, element) {
7982
7859
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7983
7860
  const makeVSlideGroupProps = propsFactory({
7984
7861
  centerActive: Boolean,
7985
- contentClass: null,
7986
7862
  direction: {
7987
7863
  type: String,
7988
7864
  default: 'horizontal'
@@ -8295,7 +8171,7 @@ const VSlideGroup = genericComponent()({
8295
8171
  })]), createElementVNode("div", {
8296
8172
  "key": "container",
8297
8173
  "ref": containerRef,
8298
- "class": normalizeClass(['v-slide-group__container', props.contentClass]),
8174
+ "class": "v-slide-group__container",
8299
8175
  "onScroll": onScroll
8300
8176
  }, [createElementVNode("div", {
8301
8177
  "ref": contentRef,
@@ -8658,85 +8534,16 @@ const VChip = genericComponent()({
8658
8534
  }
8659
8535
  });
8660
8536
 
8661
- const makeVDividerProps = propsFactory({
8662
- color: String,
8663
- inset: Boolean,
8664
- length: [Number, String],
8665
- opacity: [Number, String],
8666
- thickness: [Number, String],
8667
- vertical: Boolean,
8668
- ...makeComponentProps(),
8669
- ...makeThemeProps()
8670
- }, 'VDivider');
8671
- const VDivider = genericComponent()({
8672
- name: 'VDivider',
8673
- props: makeVDividerProps(),
8674
- setup(props, _ref) {
8675
- let {
8676
- attrs,
8677
- slots
8678
- } = _ref;
8679
- const {
8680
- themeClasses
8681
- } = provideTheme(props);
8682
- const {
8683
- textColorClasses,
8684
- textColorStyles
8685
- } = useTextColor(() => props.color);
8686
- const dividerStyles = computed(() => {
8687
- const styles = {};
8688
- if (props.length) {
8689
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8690
- }
8691
- if (props.thickness) {
8692
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8693
- }
8694
- return styles;
8695
- });
8696
- useRender(() => {
8697
- const divider = createElementVNode("hr", {
8698
- "class": normalizeClass([{
8699
- 'v-divider': true,
8700
- 'v-divider--inset': props.inset,
8701
- 'v-divider--vertical': props.vertical
8702
- }, themeClasses.value, textColorClasses.value, props.class]),
8703
- "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
8704
- '--v-border-opacity': props.opacity
8705
- }, props.style]),
8706
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8707
- "role": `${attrs.role || 'separator'}`
8708
- }, null);
8709
- if (!slots.default) return divider;
8710
- return createElementVNode("div", {
8711
- "class": normalizeClass(['v-divider__wrapper', {
8712
- 'v-divider__wrapper--vertical': props.vertical,
8713
- 'v-divider__wrapper--inset': props.inset
8714
- }])
8715
- }, [divider, createElementVNode("div", {
8716
- "class": "v-divider__content"
8717
- }, [slots.default()]), divider]);
8718
- });
8719
- return {};
8720
- }
8721
- });
8722
-
8723
8537
  // Utilities
8724
8538
 
8725
8539
  // List
8726
8540
  const ListKey = Symbol.for('vuetify:list');
8727
8541
  function createList() {
8728
- let {
8729
- filterable
8730
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
8731
- filterable: false
8732
- };
8733
8542
  const parent = inject$1(ListKey, {
8734
- filterable: false,
8735
8543
  hasPrepend: shallowRef(false),
8736
8544
  updateHasPrepend: () => null
8737
8545
  });
8738
8546
  const data = {
8739
- filterable: parent.filterable || filterable,
8740
8547
  hasPrepend: shallowRef(false),
8741
8548
  updateHasPrepend: value => {
8742
8549
  if (value) data.hasPrepend.value = value;
@@ -9688,9 +9495,6 @@ const VListItem = genericComponent()({
9688
9495
  roundedClasses
9689
9496
  } = useRounded(roundedProps);
9690
9497
  const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
9691
- const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
9692
- keys: [keyCodes.enter]
9693
- } : props.ripple);
9694
9498
  const slotProps = computed(() => ({
9695
9499
  isActive: isActive.value,
9696
9500
  select,
@@ -9715,9 +9519,8 @@ const VListItem = genericComponent()({
9715
9519
  function onKeyDown(e) {
9716
9520
  const target = e.target;
9717
9521
  if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9718
- if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
9522
+ if (e.key === 'Enter' || e.key === ' ') {
9719
9523
  e.preventDefault();
9720
- e.stopPropagation();
9721
9524
  e.target.dispatchEvent(new MouseEvent('click', e));
9722
9525
  }
9723
9526
  }
@@ -9827,7 +9630,7 @@ const VListItem = genericComponent()({
9827
9630
  }), createElementVNode("div", {
9828
9631
  "class": "v-list-item__spacer"
9829
9632
  }, null)])]
9830
- }), [[Ripple, isClickable.value && rippleOptions.value]]);
9633
+ }), [[Ripple, isClickable.value && props.ripple]]);
9831
9634
  });
9832
9635
  return {
9833
9636
  activate,
@@ -9882,6 +9685,68 @@ const VListSubheader = genericComponent()({
9882
9685
  }
9883
9686
  });
9884
9687
 
9688
+ const makeVDividerProps = propsFactory({
9689
+ color: String,
9690
+ inset: Boolean,
9691
+ length: [Number, String],
9692
+ opacity: [Number, String],
9693
+ thickness: [Number, String],
9694
+ vertical: Boolean,
9695
+ ...makeComponentProps(),
9696
+ ...makeThemeProps()
9697
+ }, 'VDivider');
9698
+ const VDivider = genericComponent()({
9699
+ name: 'VDivider',
9700
+ props: makeVDividerProps(),
9701
+ setup(props, _ref) {
9702
+ let {
9703
+ attrs,
9704
+ slots
9705
+ } = _ref;
9706
+ const {
9707
+ themeClasses
9708
+ } = provideTheme(props);
9709
+ const {
9710
+ textColorClasses,
9711
+ textColorStyles
9712
+ } = useTextColor(() => props.color);
9713
+ const dividerStyles = computed(() => {
9714
+ const styles = {};
9715
+ if (props.length) {
9716
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9717
+ }
9718
+ if (props.thickness) {
9719
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9720
+ }
9721
+ return styles;
9722
+ });
9723
+ useRender(() => {
9724
+ const divider = createElementVNode("hr", {
9725
+ "class": normalizeClass([{
9726
+ 'v-divider': true,
9727
+ 'v-divider--inset': props.inset,
9728
+ 'v-divider--vertical': props.vertical
9729
+ }, themeClasses.value, textColorClasses.value, props.class]),
9730
+ "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
9731
+ '--v-border-opacity': props.opacity
9732
+ }, props.style]),
9733
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9734
+ "role": `${attrs.role || 'separator'}`
9735
+ }, null);
9736
+ if (!slots.default) return divider;
9737
+ return createElementVNode("div", {
9738
+ "class": normalizeClass(['v-divider__wrapper', {
9739
+ 'v-divider__wrapper--vertical': props.vertical,
9740
+ 'v-divider__wrapper--inset': props.inset
9741
+ }])
9742
+ }, [divider, createElementVNode("div", {
9743
+ "class": "v-divider__content"
9744
+ }, [slots.default()]), divider]);
9745
+ });
9746
+ return {};
9747
+ }
9748
+ });
9749
+
9885
9750
  // Types
9886
9751
 
9887
9752
  const makeVListChildrenProps = propsFactory({
@@ -10150,7 +10015,6 @@ const makeVListProps = propsFactory({
10150
10015
  activeClass: String,
10151
10016
  bgColor: String,
10152
10017
  disabled: Boolean,
10153
- filterable: Boolean,
10154
10018
  expandIcon: IconValue,
10155
10019
  collapseIcon: IconValue,
10156
10020
  lines: {
@@ -10234,9 +10098,7 @@ const VList = genericComponent()({
10234
10098
  const activeColor = toRef(() => props.activeColor);
10235
10099
  const baseColor = toRef(() => props.baseColor);
10236
10100
  const color = toRef(() => props.color);
10237
- createList({
10238
- filterable: props.filterable
10239
- });
10101
+ createList();
10240
10102
  provideDefaults({
10241
10103
  VListGroup: {
10242
10104
  activeColor,
@@ -11919,7 +11781,6 @@ const makeVMenuProps = propsFactory({
11919
11781
  // disableKeys: Boolean,
11920
11782
  id: String,
11921
11783
  submenu: Boolean,
11922
- disableInitialFocus: Boolean,
11923
11784
  ...omit(makeVOverlayProps({
11924
11785
  closeDelay: 250,
11925
11786
  closeOnContentClick: true,
@@ -11994,7 +11855,7 @@ const VMenu = genericComponent()({
11994
11855
  watch(isActive, val => {
11995
11856
  if (val) {
11996
11857
  parent?.register();
11997
- if (IN_BROWSER && !props.disableInitialFocus) {
11858
+ if (IN_BROWSER) {
11998
11859
  document.addEventListener('focusin', onFocusIn, {
11999
11860
  once: true
12000
11861
  });
@@ -12814,12 +12675,7 @@ function useVirtual(props, items) {
12814
12675
  }
12815
12676
  function calculateOffset(index) {
12816
12677
  index = clamp(index, 0, items.value.length - 1);
12817
- const whole = Math.floor(index);
12818
- const fraction = index % 1;
12819
- const next = whole + 1;
12820
- const wholeOffset = offsets[whole] || 0;
12821
- const nextOffset = offsets[next] || wholeOffset;
12822
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12678
+ return offsets[index] || 0;
12823
12679
  }
12824
12680
  function calculateIndex(scrollTop) {
12825
12681
  return binaryClosest(offsets, scrollTop);
@@ -13173,7 +13029,6 @@ const makeSelectProps = propsFactory({
13173
13029
  },
13174
13030
  openOnClear: Boolean,
13175
13031
  itemColor: String,
13176
- noAutoScroll: Boolean,
13177
13032
  ...makeItemsProps({
13178
13033
  itemChildren: false
13179
13034
  })
@@ -13388,7 +13243,7 @@ const VSelect = genericComponent()({
13388
13243
  watch(menu, () => {
13389
13244
  if (!props.hideSelected && menu.value && model.value.length) {
13390
13245
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
13391
- IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
13246
+ IN_BROWSER && window.requestAnimationFrame(() => {
13392
13247
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
13393
13248
  });
13394
13249
  }
@@ -13481,22 +13336,6 @@ const VSelect = genericComponent()({
13481
13336
  key: item.value,
13482
13337
  onClick: () => select(item, null)
13483
13338
  });
13484
- if (item.raw.type === 'divider') {
13485
- return slots.divider?.({
13486
- props: item.raw,
13487
- index
13488
- }) ?? createVNode(VDivider, mergeProps(item.props, {
13489
- "key": `divider-${index}`
13490
- }), null);
13491
- }
13492
- if (item.raw.type === 'subheader') {
13493
- return slots.subheader?.({
13494
- props: item.raw,
13495
- index
13496
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13497
- "key": `subheader-${index}`
13498
- }), null);
13499
- }
13500
13339
  return slots.item?.({
13501
13340
  item,
13502
13341
  index,
@@ -13657,9 +13496,6 @@ function filterItems(items, query, options) {
13657
13496
  let match = -1;
13658
13497
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13659
13498
  if (typeof item === 'object') {
13660
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13661
- continue;
13662
- }
13663
13499
  const filterKeys = keys || Object.keys(transformed);
13664
13500
  for (const key of filterKeys) {
13665
13501
  const value = getPropertyFromItem(transformed, key);
@@ -13862,7 +13698,7 @@ const VAutocomplete = genericComponent()({
13862
13698
  menu.value = !menu.value;
13863
13699
  }
13864
13700
  function onListKeydown(e) {
13865
- if (checkPrintable(e) || e.key === 'Backspace') {
13701
+ if (e.key !== ' ' && checkPrintable(e)) {
13866
13702
  vTextFieldRef.value?.focus();
13867
13703
  }
13868
13704
  }
@@ -14067,7 +13903,6 @@ const VAutocomplete = genericComponent()({
14067
13903
  }, props.menuProps), {
14068
13904
  default: () => [hasList && createVNode(VList, mergeProps({
14069
13905
  "ref": listRef,
14070
- "filterable": true,
14071
13906
  "selected": selectedValues.value,
14072
13907
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14073
13908
  "onMousedown": e => e.preventDefault(),
@@ -14099,22 +13934,6 @@ const VAutocomplete = genericComponent()({
14099
13934
  active: highlightFirst.value && index === 0 ? true : undefined,
14100
13935
  onClick: () => select(item, null)
14101
13936
  });
14102
- if (item.raw.type === 'divider') {
14103
- return slots.divider?.({
14104
- props: item.raw,
14105
- index
14106
- }) ?? createVNode(VDivider, mergeProps(item.props, {
14107
- "key": `divider-${index}`
14108
- }), null);
14109
- }
14110
- if (item.raw.type === 'subheader') {
14111
- return slots.subheader?.({
14112
- props: item.raw,
14113
- index
14114
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
14115
- "key": `subheader-${index}`
14116
- }), null);
14117
- }
14118
13937
  return slots.item?.({
14119
13938
  item,
14120
13939
  index,
@@ -14259,8 +14078,7 @@ const makeVBadgeProps = propsFactory({
14259
14078
  ...makeThemeProps(),
14260
14079
  ...makeTransitionProps({
14261
14080
  transition: 'scale-rotate-transition'
14262
- }),
14263
- ...makeDimensionProps()
14081
+ })
14264
14082
  }, 'VBadge');
14265
14083
  const VBadge = genericComponent()({
14266
14084
  name: 'VBadge',
@@ -14290,9 +14108,6 @@ const VBadge = genericComponent()({
14290
14108
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
14291
14109
  return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
14292
14110
  });
14293
- const {
14294
- dimensionStyles
14295
- } = useDimension(props);
14296
14111
  useRender(() => {
14297
14112
  const value = Number(props.content);
14298
14113
  const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
@@ -14314,7 +14129,7 @@ const VBadge = genericComponent()({
14314
14129
  }, {
14315
14130
  default: () => [withDirectives(createElementVNode("span", mergeProps({
14316
14131
  "class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
14317
- "style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
14132
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
14318
14133
  "aria-atomic": "true",
14319
14134
  "aria-label": t(props.label, value),
14320
14135
  "aria-live": "polite",
@@ -17723,13 +17538,13 @@ function date(value) {
17723
17538
  return null;
17724
17539
  }
17725
17540
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17726
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17541
+ function getWeekdays(locale, firstDayOfWeek) {
17727
17542
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17728
17543
  return createRange(7).map(i => {
17729
17544
  const weekday = new Date(sundayJanuarySecond2000);
17730
17545
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17731
17546
  return new Intl.DateTimeFormat(locale, {
17732
- weekday: weekdayFormat ?? 'narrow'
17547
+ weekday: 'narrow'
17733
17548
  }).format(weekday);
17734
17549
  });
17735
17550
  }
@@ -18193,9 +18008,9 @@ class VuetifyDateAdapter {
18193
18008
  getDiff(date, comparing, unit) {
18194
18009
  return getDiff(date, comparing, unit);
18195
18010
  }
18196
- getWeekdays(firstDayOfWeek, weekdayFormat) {
18011
+ getWeekdays(firstDayOfWeek) {
18197
18012
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
18198
- return getWeekdays(this.locale, firstDay, weekdayFormat);
18013
+ return getWeekdays(this.locale, firstDay);
18199
18014
  }
18200
18015
  getYear(date) {
18201
18016
  return getYear(date);
@@ -18550,7 +18365,6 @@ const VCombobox = genericComponent()({
18550
18365
  _search.value = val ?? '';
18551
18366
  if (!props.multiple && !hasSelectionSlot.value) {
18552
18367
  model.value = [transformItem$3(props, val)];
18553
- nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18554
18368
  }
18555
18369
  if (val && props.multiple && props.delimiters?.length) {
18556
18370
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18631,7 +18445,7 @@ const VCombobox = genericComponent()({
18631
18445
  menu.value = !menu.value;
18632
18446
  }
18633
18447
  function onListKeydown(e) {
18634
- if (checkPrintable(e) || e.key === 'Backspace') {
18448
+ if (e.key !== ' ' && checkPrintable(e)) {
18635
18449
  vTextFieldRef.value?.focus();
18636
18450
  }
18637
18451
  }
@@ -18836,7 +18650,6 @@ const VCombobox = genericComponent()({
18836
18650
  }, props.menuProps), {
18837
18651
  default: () => [hasList && createVNode(VList, mergeProps({
18838
18652
  "ref": listRef,
18839
- "filterable": true,
18840
18653
  "selected": selectedValues.value,
18841
18654
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18842
18655
  "onMousedown": e => e.preventDefault(),
@@ -18868,22 +18681,6 @@ const VCombobox = genericComponent()({
18868
18681
  active: highlightFirst.value && index === 0 ? true : undefined,
18869
18682
  onClick: () => select(item, null)
18870
18683
  });
18871
- if (item.raw.type === 'divider') {
18872
- return slots.divider?.({
18873
- props: item.raw,
18874
- index
18875
- }) ?? createVNode(VDivider, mergeProps(item.props, {
18876
- "key": `divider-${index}`
18877
- }), null);
18878
- }
18879
- if (item.raw.type === 'subheader') {
18880
- return slots.subheader?.({
18881
- props: item.raw,
18882
- index
18883
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
18884
- "key": `subheader-${index}`
18885
- }), null);
18886
- }
18887
18684
  return slots.item?.({
18888
18685
  item,
18889
18686
  index,
@@ -20766,7 +20563,6 @@ const makeVDataTableHeadersProps = propsFactory({
20766
20563
  color: String,
20767
20564
  disableSort: Boolean,
20768
20565
  fixedHeader: Boolean,
20769
- lastFixed: Boolean,
20770
20566
  multiSort: Boolean,
20771
20567
  sortAscIcon: {
20772
20568
  type: IconValue,
@@ -20813,11 +20609,10 @@ const VDataTableHeaders = genericComponent()({
20813
20609
  loaderClasses
20814
20610
  } = useLoader(props);
20815
20611
  function getFixedStyles(column, y) {
20816
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20612
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20817
20613
  return {
20818
20614
  position: 'sticky',
20819
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20820
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20615
+ left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20821
20616
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20822
20617
  };
20823
20618
  }
@@ -21333,18 +21128,11 @@ const VDataTableRows = genericComponent()({
21333
21128
  }
21334
21129
  });
21335
21130
 
21336
- // Types
21337
-
21338
21131
  const makeVTableProps = propsFactory({
21339
21132
  fixedHeader: Boolean,
21340
21133
  fixedFooter: Boolean,
21341
21134
  height: [Number, String],
21342
21135
  hover: Boolean,
21343
- striped: {
21344
- type: String,
21345
- default: null,
21346
- validator: v => ['even', 'odd'].includes(v)
21347
- },
21348
21136
  ...makeComponentProps(),
21349
21137
  ...makeDensityProps(),
21350
21138
  ...makeTagProps(),
@@ -21371,9 +21159,7 @@ const VTable = genericComponent()({
21371
21159
  'v-table--fixed-footer': props.fixedFooter,
21372
21160
  'v-table--has-top': !!slots.top,
21373
21161
  'v-table--has-bottom': !!slots.bottom,
21374
- 'v-table--hover': props.hover,
21375
- 'v-table--striped-even': props.striped === 'even',
21376
- 'v-table--striped-odd': props.striped === 'odd'
21162
+ 'v-table--hover': props.hover
21377
21163
  }, themeClasses.value, densityClasses.value, props.class]),
21378
21164
  "style": normalizeStyle(props.style)
21379
21165
  }, {
@@ -22548,8 +22334,7 @@ const makeCalendarProps = propsFactory({
22548
22334
  firstDayOfWeek: {
22549
22335
  type: [Number, String],
22550
22336
  default: undefined
22551
- },
22552
- weekdayFormat: String
22337
+ }
22553
22338
  }, 'calendar');
22554
22339
  function useCalendar(props) {
22555
22340
  const adapter = useDate();
@@ -22790,7 +22575,7 @@ const VDatePickerMonth = genericComponent()({
22790
22575
  "ref": daysRef,
22791
22576
  "key": daysInMonth.value[0].date?.toString(),
22792
22577
  "class": "v-date-picker-month__days"
22793
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
22578
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
22794
22579
  "class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22795
22580
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22796
22581
  const slotProps = {
@@ -23295,9 +23080,7 @@ const VDatePicker = genericComponent()({
23295
23080
  "max": maxDate.value,
23296
23081
  "year": year.value,
23297
23082
  "allowedMonths": allowedMonths
23298
- }), {
23299
- ...pick(slots, ['month'])
23300
- }) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
23083
+ }), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
23301
23084
  "key": "date-picker-years"
23302
23085
  }, datePickerYearsProps, {
23303
23086
  "modelValue": year.value,
@@ -23305,9 +23088,7 @@ const VDatePicker = genericComponent()({
23305
23088
  "min": minDate.value,
23306
23089
  "max": maxDate.value,
23307
23090
  "allowedYears": allowedYears
23308
- }), {
23309
- ...pick(slots, ['year'])
23310
- }) : createVNode(VDatePickerMonth, mergeProps({
23091
+ }), null) : createVNode(VDatePickerMonth, mergeProps({
23311
23092
  "key": "date-picker-month"
23312
23093
  }, datePickerMonthProps, {
23313
23094
  "modelValue": model.value,
@@ -23318,9 +23099,7 @@ const VDatePicker = genericComponent()({
23318
23099
  "onUpdate:year": [$event => year.value = $event, onUpdateYear],
23319
23100
  "min": minDate.value,
23320
23101
  "max": maxDate.value
23321
- }), {
23322
- ...pick(slots, ['day'])
23323
- })]
23102
+ }), null)]
23324
23103
  })]),
23325
23104
  actions: slots.actions
23326
23105
  });
@@ -24411,9 +24190,6 @@ const VInfiniteScroll = genericComponent()({
24411
24190
  startStatus.value = status;
24412
24191
  } else if (side === 'end') {
24413
24192
  endStatus.value = status;
24414
- } else if (side === 'both') {
24415
- startStatus.value = status;
24416
- endStatus.value = status;
24417
24193
  }
24418
24194
  }
24419
24195
  function getStatus(side) {
@@ -24525,32 +24301,6 @@ const VInfiniteScroll = genericComponent()({
24525
24301
  }, [renderSide('end', endStatus.value)])]
24526
24302
  });
24527
24303
  });
24528
- function reset(side) {
24529
- const effectiveSide = side ?? props.side;
24530
- setStatus(effectiveSide, 'ok');
24531
- nextTick(() => {
24532
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
24533
- if (props.mode !== 'manual') {
24534
- nextTick(() => {
24535
- window.requestAnimationFrame(() => {
24536
- window.requestAnimationFrame(() => {
24537
- window.requestAnimationFrame(() => {
24538
- if (effectiveSide === 'both') {
24539
- intersecting('start');
24540
- intersecting('end');
24541
- } else {
24542
- intersecting(effectiveSide);
24543
- }
24544
- });
24545
- });
24546
- });
24547
- });
24548
- }
24549
- });
24550
- }
24551
- return {
24552
- reset
24553
- };
24554
24304
  }
24555
24305
  });
24556
24306
 
@@ -24630,47 +24380,8 @@ const VItem = genericComponent()({
24630
24380
  }
24631
24381
  });
24632
24382
 
24633
- const makeVKbdProps = propsFactory({
24634
- ...makeBorderProps(),
24635
- ...makeComponentProps(),
24636
- ...makeRoundedProps(),
24637
- ...makeTagProps({
24638
- tag: 'kbd'
24639
- }),
24640
- ...makeThemeProps(),
24641
- ...makeElevationProps(),
24642
- color: String
24643
- }, 'VKbd');
24644
- const VKbd = genericComponent()({
24645
- name: 'VKbd',
24646
- props: makeVKbdProps(),
24647
- setup(props, _ref) {
24648
- let {
24649
- slots
24650
- } = _ref;
24651
- const {
24652
- themeClasses
24653
- } = provideTheme(props);
24654
- const {
24655
- borderClasses
24656
- } = useBorder(props);
24657
- const {
24658
- roundedClasses
24659
- } = useRounded(props);
24660
- const {
24661
- backgroundColorClasses,
24662
- backgroundColorStyles
24663
- } = useBackgroundColor(() => props.color);
24664
- const {
24665
- elevationClasses
24666
- } = useElevation(props);
24667
- useRender(() => createVNode(props.tag, {
24668
- "class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
24669
- "style": normalizeStyle([backgroundColorStyles.value, props.style])
24670
- }, slots));
24671
- return {};
24672
- }
24673
- });
24383
+ // Styles
24384
+ const VKbd = createSimpleFunctional('v-kbd', 'kbd');
24674
24385
 
24675
24386
  const makeVLayoutProps = propsFactory({
24676
24387
  ...makeComponentProps(),
@@ -25508,14 +25219,6 @@ const makeVNumberInputProps = propsFactory({
25508
25219
  type: Number,
25509
25220
  default: 0
25510
25221
  },
25511
- minFractionDigits: {
25512
- type: Number,
25513
- default: null
25514
- },
25515
- decimalSeparator: {
25516
- type: String,
25517
- validator: v => !v || v.length === 1
25518
- },
25519
25222
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25520
25223
  }, 'VNumberInput');
25521
25224
  const VNumberInput = genericComponent()({
@@ -25541,24 +25244,11 @@ const VNumberInput = genericComponent()({
25541
25244
  const form = useForm(props);
25542
25245
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
25543
25246
  const isFocused = shallowRef(props.focused);
25544
- const {
25545
- decimalSeparator: decimalSeparatorFromLocale
25546
- } = useLocale();
25547
- const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
25548
25247
  function correctPrecision(val) {
25549
25248
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25550
- let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
25551
25249
  const fixed = precision == null ? String(val) : val.toFixed(precision);
25552
- if (isFocused.value && trim) {
25553
- return Number(fixed).toString() // trim zeros
25554
- .replace('.', decimalSeparator.value);
25555
- }
25556
- if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
25557
- return fixed.replace('.', decimalSeparator.value);
25558
- }
25559
- let [baseDigits, fractionDigits] = fixed.split('.');
25560
- fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
25561
- return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
25250
+ return isFocused.value ? Number(fixed).toString() // trim zeros
25251
+ : fixed;
25562
25252
  }
25563
25253
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25564
25254
  const _inputText = shallowRef(null);
@@ -25575,11 +25265,8 @@ const VNumberInput = genericComponent()({
25575
25265
  if (val === null || val === '') {
25576
25266
  model.value = null;
25577
25267
  _inputText.value = null;
25578
- return;
25579
- }
25580
- const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
25581
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
25582
- model.value = parsedValue;
25268
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
25269
+ model.value = Number(val);
25583
25270
  _inputText.value = val;
25584
25271
  }
25585
25272
  }
@@ -25616,7 +25303,6 @@ const VNumberInput = genericComponent()({
25616
25303
  }
25617
25304
  };
25618
25305
  watch(() => props.precision, () => formatInputValue());
25619
- watch(() => props.minFractionDigits, () => formatInputValue());
25620
25306
  onMounted(() => {
25621
25307
  clampModel();
25622
25308
  });
@@ -25650,24 +25336,24 @@ const VNumberInput = genericComponent()({
25650
25336
  selectionEnd
25651
25337
  } = inputElement ?? {};
25652
25338
  const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
25653
- const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
25339
+ const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
25654
25340
 
25655
- // Allow only numbers, "-" and {decimal separator}
25656
- // Allow "-" and {decimal separator} only once
25657
- // Allow "-" only at the start
25658
- if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
25341
+ // Only numbers, "-", "." are allowed
25342
+ // AND "-", "." are allowed only once
25343
+ // AND "-" is only allowed at the start
25344
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
25659
25345
  e.preventDefault();
25660
25346
  inputElement.value = potentialNewNumber;
25661
25347
  }
25662
25348
  if (props.precision == null) return;
25663
25349
 
25664
25350
  // Ignore decimal digits above precision limit
25665
- if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
25351
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
25666
25352
  e.preventDefault();
25667
25353
  inputElement.value = potentialNewNumber;
25668
25354
  }
25669
25355
  // Ignore decimal separator when precision = 0
25670
- if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
25356
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
25671
25357
  e.preventDefault();
25672
25358
  inputElement.value = potentialNewNumber;
25673
25359
  }
@@ -25719,16 +25405,19 @@ const VNumberInput = genericComponent()({
25719
25405
  if (controlsDisabled.value) return;
25720
25406
  if (!vTextFieldRef.value) return;
25721
25407
  const actualText = vTextFieldRef.value.value;
25722
- const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
25723
- if (actualText && !isNaN(parsedValue)) {
25724
- inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
25408
+ if (actualText && !isNaN(Number(actualText))) {
25409
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
25725
25410
  } else {
25726
25411
  inputText.value = null;
25727
25412
  }
25728
25413
  }
25729
25414
  function formatInputValue() {
25730
25415
  if (controlsDisabled.value) return;
25731
- inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
25416
+ if (model.value === null || isNaN(model.value)) {
25417
+ inputText.value = null;
25418
+ return;
25419
+ }
25420
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25732
25421
  }
25733
25422
  function trimDecimalZeros() {
25734
25423
  if (controlsDisabled.value) return;
@@ -25736,7 +25425,7 @@ const VNumberInput = genericComponent()({
25736
25425
  inputText.value = null;
25737
25426
  return;
25738
25427
  }
25739
- inputText.value = model.value.toString().replace('.', decimalSeparator.value);
25428
+ inputText.value = model.value.toString();
25740
25429
  }
25741
25430
  function onFocus() {
25742
25431
  trimDecimalZeros();
@@ -25988,10 +25677,9 @@ const VOtpInput = genericComponent()({
25988
25677
  e.preventDefault();
25989
25678
  e.stopPropagation();
25990
25679
  const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
25991
- const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
25992
25680
  if (isValidNumber(clipboardText)) return;
25993
25681
  model.value = clipboardText.split('');
25994
- inputRef.value?.[finalIndex].focus();
25682
+ inputRef.value?.[index].blur();
25995
25683
  }
25996
25684
  function reset() {
25997
25685
  model.value = [];
@@ -29776,7 +29464,7 @@ function createVuetify$1() {
29776
29464
  };
29777
29465
  });
29778
29466
  }
29779
- const version$1 = "3.8.9-dev.2025-06-13";
29467
+ const version$1 = "3.8.9-master.2025-06-12";
29780
29468
  createVuetify$1.version = version$1;
29781
29469
 
29782
29470
  // Vue's inject() can only be used in setup
@@ -29801,7 +29489,7 @@ const createVuetify = function () {
29801
29489
  ...options
29802
29490
  });
29803
29491
  };
29804
- const version = "3.8.9-dev.2025-06-13";
29492
+ const version = "3.8.9-master.2025-06-12";
29805
29493
  createVuetify.version = version;
29806
29494
 
29807
29495
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };