@vuetify/nightly 3.8.10-dev.2025-06-18 → 3.8.10-master.2025-06-18

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 +3 -54
  2. package/dist/json/attributes.json +1259 -1655
  3. package/dist/json/importMap-labs.json +22 -26
  4. package/dist/json/importMap.json +160 -160
  5. package/dist/json/tags.json +2 -106
  6. package/dist/json/web-types.json +2705 -4334
  7. package/dist/vuetify-labs.cjs +180 -750
  8. package/dist/vuetify-labs.css +4655 -4700
  9. package/dist/vuetify-labs.d.ts +3083 -10404
  10. package/dist/vuetify-labs.esm.js +181 -751
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +180 -750
  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 +3324 -3369
  17. package/dist/vuetify.d.ts +2088 -2790
  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 +1232 -1254
  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.d.ts +10 -28
  86. package/lib/components/VList/VListItem.js +3 -7
  87. package/lib/components/VList/VListItem.js.map +1 -1
  88. package/lib/components/VList/list.d.ts +2 -9
  89. package/lib/components/VList/list.js +0 -7
  90. package/lib/components/VList/list.js.map +1 -1
  91. package/lib/components/VMenu/VMenu.d.ts +0 -13
  92. package/lib/components/VMenu/VMenu.js +1 -2
  93. package/lib/components/VMenu/VMenu.js.map +1 -1
  94. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -114
  95. package/lib/components/VNumberInput/VNumberInput.js +20 -43
  96. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  97. package/lib/components/VOtpInput/VOtpInput.js +1 -2
  98. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  99. package/lib/components/VOverlay/VOverlay.css +1 -1
  100. package/lib/components/VOverlay/_variables.scss +1 -1
  101. package/lib/components/VRadio/VRadio.d.ts +10 -20
  102. package/lib/components/VRadioGroup/VRadioGroup.d.ts +13 -23
  103. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  104. package/lib/components/VSelect/VSelect.d.ts +118 -204
  105. package/lib/components/VSelect/VSelect.js +3 -21
  106. package/lib/components/VSelect/VSelect.js.map +1 -1
  107. package/lib/components/VSelectionControl/VSelectionControl.d.ts +10 -20
  108. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +14 -28
  109. package/lib/components/VSlideGroup/VSlideGroup.d.ts +0 -10
  110. package/lib/components/VSlideGroup/VSlideGroup.js +1 -2
  111. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  112. package/lib/components/VSlider/VSlider.d.ts +3 -3
  113. package/lib/components/VSlider/VSliderThumb.d.ts +10 -20
  114. package/lib/components/VSpeedDial/VSpeedDial.d.ts +0 -13
  115. package/lib/components/VStepper/VStepperItem.d.ts +14 -28
  116. package/lib/components/VSwitch/VSwitch.d.ts +13 -23
  117. package/lib/components/VTable/VTable.css +0 -6
  118. package/lib/components/VTable/VTable.d.ts +24 -55
  119. package/lib/components/VTable/VTable.js +2 -9
  120. package/lib/components/VTable/VTable.js.map +1 -1
  121. package/lib/components/VTable/VTable.sass +0 -14
  122. package/lib/components/VTable/_variables.scss +0 -1
  123. package/lib/components/VTabs/VTab.d.ts +28 -56
  124. package/lib/components/VTabs/VTabs.d.ts +0 -10
  125. package/lib/components/VTextField/VTextField.d.ts +27 -27
  126. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  127. package/lib/components/VToolbar/VToolbar.d.ts +3 -15
  128. package/lib/components/VToolbar/VToolbar.js +3 -6
  129. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  130. package/lib/composables/calendar.d.ts +0 -5
  131. package/lib/composables/calendar.js +1 -2
  132. package/lib/composables/calendar.js.map +1 -1
  133. package/lib/composables/date/DateAdapter.d.ts +3 -3
  134. package/lib/composables/date/DateAdapter.js.map +1 -1
  135. package/lib/composables/date/adapters/vuetify.d.ts +1 -1
  136. package/lib/composables/date/adapters/vuetify.js +4 -4
  137. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  138. package/lib/composables/date/date.d.ts +3 -3
  139. package/lib/composables/date/index.d.ts +0 -1
  140. package/lib/composables/date/index.js +0 -1
  141. package/lib/composables/date/index.js.map +1 -1
  142. package/lib/composables/filter.js +0 -3
  143. package/lib/composables/filter.js.map +1 -1
  144. package/lib/composables/locale.d.ts +1 -5
  145. package/lib/composables/locale.js.map +1 -1
  146. package/lib/composables/theme.d.ts +1 -6
  147. package/lib/composables/theme.js +29 -97
  148. package/lib/composables/theme.js.map +1 -1
  149. package/lib/composables/virtual.js +1 -6
  150. package/lib/composables/virtual.js.map +1 -1
  151. package/lib/directives/ripple/index.d.ts +1 -2
  152. package/lib/directives/ripple/index.js +7 -12
  153. package/lib/directives/ripple/index.js.map +1 -1
  154. package/lib/entry-bundler.d.ts +3 -4
  155. package/lib/entry-bundler.js +1 -1
  156. package/lib/entry-bundler.js.map +1 -1
  157. package/lib/framework.d.ts +67 -86
  158. package/lib/framework.js +1 -1
  159. package/lib/framework.js.map +1 -1
  160. package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
  161. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  162. package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
  163. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  164. package/lib/labs/VFileUpload/VFileUploadItem.d.ts +10 -20
  165. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  166. package/lib/labs/VIconBtn/VIconBtn.js +11 -7
  167. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  168. package/lib/labs/VStepperVertical/VStepperVertical.d.ts +10 -20
  169. package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +10 -20
  170. package/lib/labs/VTreeview/VTreeview.d.ts +38 -51
  171. package/lib/labs/VTreeview/VTreeview.js +1 -1
  172. package/lib/labs/VTreeview/VTreeview.js.map +1 -1
  173. package/lib/labs/VTreeview/VTreeviewChildren.d.ts +0 -35
  174. package/lib/labs/VTreeview/VTreeviewChildren.js +2 -19
  175. package/lib/labs/VTreeview/VTreeviewChildren.js.map +1 -1
  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.10-dev.2025-06-18
2
+ * Vuetify v3.8.10-master.2025-06-18
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
  }
@@ -2674,10 +2668,6 @@ function createNumberFunction(current, fallback) {
2674
2668
  return numberFormat.format(value);
2675
2669
  };
2676
2670
  }
2677
- function inferDecimalSeparator(current, fallback) {
2678
- const format = createNumberFunction(current, fallback);
2679
- return format(0.1).includes(',') ? ',' : '.';
2680
- }
2681
2671
  function useProvided(props, prop, provided) {
2682
2672
  const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
2683
2673
 
@@ -2700,7 +2690,6 @@ function createProvideFunction(state) {
2700
2690
  current,
2701
2691
  fallback,
2702
2692
  messages,
2703
- decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
2704
2693
  t: createTranslateFunction(current, fallback, messages),
2705
2694
  n: createNumberFunction(current, fallback),
2706
2695
  provide: createProvideFunction({
@@ -2723,7 +2712,6 @@ function createVuetifyAdapter(options) {
2723
2712
  current,
2724
2713
  fallback,
2725
2714
  messages,
2726
- decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
2727
2715
  t: createTranslateFunction(current, fallback, messages),
2728
2716
  n: createNumberFunction(current, fallback),
2729
2717
  provide: createProvideFunction({
@@ -2850,7 +2838,6 @@ const makeThemeProps = propsFactory({
2850
2838
  function genDefaults$1() {
2851
2839
  return {
2852
2840
  defaultTheme: 'light',
2853
- prefix: 'v-',
2854
2841
  variations: {
2855
2842
  colors: [],
2856
2843
  lighten: 0,
@@ -2888,8 +2875,8 @@ function genDefaults$1() {
2888
2875
  'activated-opacity': 0.12,
2889
2876
  'pressed-opacity': 0.12,
2890
2877
  'dragged-opacity': 0.08,
2891
- 'theme-kbd': '#EEEEEE',
2892
- 'theme-on-kbd': '#000000',
2878
+ 'theme-kbd': '#212529',
2879
+ 'theme-on-kbd': '#FFFFFF',
2893
2880
  'theme-code': '#F5F5F5',
2894
2881
  'theme-on-code': '#000000'
2895
2882
  }
@@ -2925,17 +2912,14 @@ function genDefaults$1() {
2925
2912
  'activated-opacity': 0.12,
2926
2913
  'pressed-opacity': 0.16,
2927
2914
  'dragged-opacity': 0.08,
2928
- 'theme-kbd': '#424242',
2915
+ 'theme-kbd': '#212529',
2929
2916
  'theme-on-kbd': '#FFFFFF',
2930
2917
  'theme-code': '#343434',
2931
2918
  'theme-on-code': '#CCCCCC'
2932
2919
  }
2933
2920
  }
2934
2921
  },
2935
- stylesheetId: 'vuetify-theme-stylesheet',
2936
- scoped: false,
2937
- unimportant: false,
2938
- utilities: true
2922
+ stylesheetId: 'vuetify-theme-stylesheet'
2939
2923
  };
2940
2924
  }
2941
2925
  function parseThemeOptions() {
@@ -2958,21 +2942,21 @@ function parseThemeOptions() {
2958
2942
  function createCssClass(lines, selector, content, scope) {
2959
2943
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2960
2944
  }
2961
- function genCssVariables(theme, prefix) {
2945
+ function genCssVariables(theme) {
2962
2946
  const lightOverlay = theme.dark ? 2 : 1;
2963
2947
  const darkOverlay = theme.dark ? 1 : 2;
2964
2948
  const variables = [];
2965
2949
  for (const [key, value] of Object.entries(theme.colors)) {
2966
2950
  const rgb = parseColor(value);
2967
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2951
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2968
2952
  if (!key.startsWith('on-')) {
2969
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2953
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2970
2954
  }
2971
2955
  }
2972
2956
  for (const [key, value] of Object.entries(theme.variables)) {
2973
2957
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2974
2958
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2975
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2959
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2976
2960
  }
2977
2961
  return variables;
2978
2962
  }
@@ -3016,8 +3000,7 @@ function getScopedSelector(selector, scope) {
3016
3000
  const scopeSelector = `:where(${scope})`;
3017
3001
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
3018
3002
  }
3019
- function upsertStyles(id, cspNonce, styles) {
3020
- const styleEl = getOrCreateStyleElement(id, cspNonce);
3003
+ function upsertStyles(styleEl, styles) {
3021
3004
  if (!styleEl) return;
3022
3005
  styleEl.innerHTML = styles;
3023
3006
  }
@@ -3037,17 +3020,8 @@ function getOrCreateStyleElement(id, cspNonce) {
3037
3020
  // Composables
3038
3021
  function createTheme(options) {
3039
3022
  const parsedOptions = parseThemeOptions(options);
3040
- const _name = shallowRef(parsedOptions.defaultTheme);
3023
+ const name = shallowRef(parsedOptions.defaultTheme);
3041
3024
  const themes = ref(parsedOptions.themes);
3042
- const systemName = shallowRef('light');
3043
- const name = computed({
3044
- get() {
3045
- return _name.value === 'system' ? systemName.value : _name.value;
3046
- },
3047
- set(val) {
3048
- _name.value = val;
3049
- }
3050
- });
3051
3025
  const computedThemes = computed(() => {
3052
3026
  const acc = {};
3053
3027
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3068,49 +3042,28 @@ function createTheme(options) {
3068
3042
  const current = toRef(() => computedThemes.value[name.value]);
3069
3043
  const styles = computed(() => {
3070
3044
  const lines = [];
3071
- const important = parsedOptions.unimportant ? '' : ' !important';
3072
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3073
3045
  if (current.value?.dark) {
3074
3046
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3075
3047
  }
3076
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
3048
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3077
3049
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
3078
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3079
- }
3080
- if (parsedOptions.utilities) {
3081
- const bgLines = [];
3082
- const fgLines = [];
3083
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3084
- for (const key of colors) {
3085
- if (key.startsWith('on-')) {
3086
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3087
- } else {
3088
- 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);
3089
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3090
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3091
- }
3050
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
3051
+ }
3052
+ const bgLines = [];
3053
+ const fgLines = [];
3054
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3055
+ for (const key of colors) {
3056
+ if (key.startsWith('on-')) {
3057
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3058
+ } else {
3059
+ 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);
3060
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3061
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3092
3062
  }
3093
- lines.push(...bgLines, ...fgLines);
3094
3063
  }
3064
+ lines.push(...bgLines, ...fgLines);
3095
3065
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3096
3066
  });
3097
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3098
- const themeNames = toRef(() => Object.keys(computedThemes.value));
3099
- if (SUPPORTS_MATCH_MEDIA) {
3100
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3101
- function updateSystemName() {
3102
- systemName.value = media.matches ? 'dark' : 'light';
3103
- }
3104
- updateSystemName();
3105
- media.addEventListener('change', updateSystemName, {
3106
- passive: true
3107
- });
3108
- if (getCurrentScope()) {
3109
- onScopeDispose(() => {
3110
- media.removeEventListener('change', updateSystemName);
3111
- });
3112
- }
3113
- }
3114
3067
  function install(app) {
3115
3068
  if (parsedOptions.isDisabled) return;
3116
3069
  const head = app._context.provides.usehead;
@@ -3148,55 +3101,22 @@ function createTheme(options) {
3148
3101
  updateStyles();
3149
3102
  }
3150
3103
  function updateStyles() {
3151
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3104
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3152
3105
  }
3153
3106
  }
3154
3107
  }
3155
- function change(themeName) {
3156
- if (!themeNames.value.includes(themeName)) {
3157
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3158
- return;
3159
- }
3160
- name.value = themeName;
3161
- }
3162
- function cycle() {
3163
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3164
- const currentIndex = themeArray.indexOf(name.value);
3165
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3166
- change(themeArray[nextIndex]);
3167
- }
3168
- function toggle() {
3169
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3170
- cycle(themeArray);
3171
- }
3172
- const globalName = new Proxy(name, {
3173
- get(target, prop) {
3174
- return target[prop];
3175
- },
3176
- set(target, prop, val) {
3177
- if (prop === 'value') {
3178
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3179
- }
3180
- // @ts-expect-error
3181
- target[prop] = val;
3182
- return true;
3183
- }
3184
- });
3108
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3185
3109
  return {
3186
3110
  install,
3187
- change,
3188
- cycle,
3189
- toggle,
3190
3111
  isDisabled: parsedOptions.isDisabled,
3191
3112
  name,
3192
3113
  themes,
3193
3114
  current,
3194
3115
  computedThemes,
3195
- prefix: parsedOptions.prefix,
3196
3116
  themeClasses,
3197
3117
  styles,
3198
3118
  global: {
3199
- name: globalName,
3119
+ name,
3200
3120
  current
3201
3121
  }
3202
3122
  };
@@ -3207,7 +3127,7 @@ function provideTheme(props) {
3207
3127
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3208
3128
  const name = toRef(() => props.theme ?? theme.name.value);
3209
3129
  const current = toRef(() => theme.themes.value[name.value]);
3210
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3130
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3211
3131
  const newTheme = {
3212
3132
  ...theme,
3213
3133
  name,
@@ -4311,10 +4231,7 @@ const makeVToolbarProps = propsFactory({
4311
4231
  default: 'default',
4312
4232
  validator: v => allowedDensities$1.includes(v)
4313
4233
  },
4314
- extended: {
4315
- type: Boolean,
4316
- default: null
4317
- },
4234
+ extended: Boolean,
4318
4235
  extensionHeight: {
4319
4236
  type: [Number, String],
4320
4237
  default: 48
@@ -4362,7 +4279,7 @@ const VToolbar = genericComponent()({
4362
4279
  const {
4363
4280
  rtlClasses
4364
4281
  } = useRtl();
4365
- const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
4282
+ const isExtended = shallowRef(!!(props.extended || slots.extension?.()));
4366
4283
  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));
4367
4284
  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);
4368
4285
  provideDefaults({
@@ -4374,7 +4291,7 @@ const VToolbar = genericComponent()({
4374
4291
  const hasTitle = !!(props.title || slots.title);
4375
4292
  const hasImage = !!(slots.image || props.image);
4376
4293
  const extension = slots.extension?.();
4377
- isExtended.value = props.extended === null ? !!extension : props.extended;
4294
+ isExtended.value = !!(props.extended || extension);
4378
4295
  return createVNode(props.tag, {
4379
4296
  "class": normalizeClass(['v-toolbar', {
4380
4297
  'v-toolbar--absolute': props.absolute,
@@ -4757,15 +4674,9 @@ function useVariant(props) {
4757
4674
  };
4758
4675
  }
4759
4676
 
4760
- // Types
4761
-
4762
4677
  const makeVBtnGroupProps = propsFactory({
4763
4678
  baseColor: String,
4764
4679
  divided: Boolean,
4765
- direction: {
4766
- type: String,
4767
- default: 'horizontal'
4768
- },
4769
4680
  ...makeBorderProps(),
4770
4681
  ...makeComponentProps(),
4771
4682
  ...makeDensityProps(),
@@ -4799,7 +4710,7 @@ const VBtnGroup = genericComponent()({
4799
4710
  } = useRounded(props);
4800
4711
  provideDefaults({
4801
4712
  VBtn: {
4802
- height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4713
+ height: 'auto',
4803
4714
  baseColor: toRef(() => props.baseColor),
4804
4715
  color: toRef(() => props.color),
4805
4716
  density: toRef(() => props.density),
@@ -4809,7 +4720,7 @@ const VBtnGroup = genericComponent()({
4809
4720
  });
4810
4721
  useRender(() => {
4811
4722
  return createVNode(props.tag, {
4812
- "class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4723
+ "class": normalizeClass(['v-btn-group', {
4813
4724
  'v-btn-group--divided': props.divided
4814
4725
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4815
4726
  "style": normalizeStyle(props.style)
@@ -5933,8 +5844,8 @@ function rippleCancelShow(e) {
5933
5844
  window.clearTimeout(element._ripple.showTimer);
5934
5845
  }
5935
5846
  let keyboardRipple = false;
5936
- function keyboardRippleShow(e, keys) {
5937
- if (!keyboardRipple && keys.includes(e.keyCode)) {
5847
+ function keyboardRippleShow(e) {
5848
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
5938
5849
  keyboardRipple = true;
5939
5850
  rippleShow(e);
5940
5851
  }
@@ -5962,12 +5873,9 @@ function updateRipple(el, binding, wasEnabled) {
5962
5873
  el._ripple.enabled = enabled;
5963
5874
  el._ripple.centered = modifiers.center;
5964
5875
  el._ripple.circle = modifiers.circle;
5965
- const bindingValue = isObject(value) ? value : {};
5966
- if (bindingValue.class) {
5967
- el._ripple.class = bindingValue.class;
5876
+ if (isObject(value) && value.class) {
5877
+ el._ripple.class = value.class;
5968
5878
  }
5969
- const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
5970
- el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
5971
5879
  if (enabled && !wasEnabled) {
5972
5880
  if (modifiers.stop) {
5973
5881
  el.addEventListener('touchstart', rippleStop, {
@@ -5989,7 +5897,7 @@ function updateRipple(el, binding, wasEnabled) {
5989
5897
  el.addEventListener('mousedown', rippleShow);
5990
5898
  el.addEventListener('mouseup', rippleHide);
5991
5899
  el.addEventListener('mouseleave', rippleHide);
5992
- el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
5900
+ el.addEventListener('keydown', keyboardRippleShow);
5993
5901
  el.addEventListener('keyup', keyboardRippleHide);
5994
5902
  el.addEventListener('blur', focusRippleHide);
5995
5903
 
@@ -6009,9 +5917,7 @@ function removeListeners(el) {
6009
5917
  el.removeEventListener('touchcancel', rippleHide);
6010
5918
  el.removeEventListener('mouseup', rippleHide);
6011
5919
  el.removeEventListener('mouseleave', rippleHide);
6012
- if (el._ripple?.keyDownHandler) {
6013
- el.removeEventListener('keydown', el._ripple.keyDownHandler);
6014
- }
5920
+ el.removeEventListener('keydown', keyboardRippleShow);
6015
5921
  el.removeEventListener('keyup', keyboardRippleHide);
6016
5922
  el.removeEventListener('dragstart', rippleHide);
6017
5923
  el.removeEventListener('blur', focusRippleHide);
@@ -6020,8 +5926,8 @@ function mounted$4(el, binding) {
6020
5926
  updateRipple(el, binding, false);
6021
5927
  }
6022
5928
  function unmounted$4(el) {
6023
- removeListeners(el);
6024
5929
  delete el._ripple;
5930
+ removeListeners(el);
6025
5931
  }
6026
5932
  function updated$1(el, binding) {
6027
5933
  if (binding.value === binding.oldValue) {
@@ -6294,31 +6200,6 @@ const VAppBarTitle = genericComponent()({
6294
6200
  // Utilities
6295
6201
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6296
6202
 
6297
- // Utilities
6298
-
6299
- // Types
6300
-
6301
- // Types
6302
-
6303
- // Composables
6304
- const makeIconSizeProps = propsFactory({
6305
- iconSize: [Number, String],
6306
- iconSizes: {
6307
- type: Array,
6308
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6309
- }
6310
- }, 'iconSize');
6311
- function useIconSizes(props, fallback) {
6312
- const iconSize = computed(() => {
6313
- const iconSizeMap = new Map(props.iconSizes);
6314
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6315
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6316
- });
6317
- return {
6318
- iconSize
6319
- };
6320
- }
6321
-
6322
6203
  // Types
6323
6204
 
6324
6205
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6358,7 +6239,6 @@ const makeVAlertProps = propsFactory({
6358
6239
  ...makeDensityProps(),
6359
6240
  ...makeDimensionProps(),
6360
6241
  ...makeElevationProps(),
6361
- ...makeIconSizeProps(),
6362
6242
  ...makeLocationProps(),
6363
6243
  ...makePositionProps(),
6364
6244
  ...makeRoundedProps(),
@@ -6386,9 +6266,6 @@ const VAlert = genericComponent()({
6386
6266
  if (!props.type) return props.icon;
6387
6267
  return props.icon ?? `$${props.type}`;
6388
6268
  });
6389
- const {
6390
- iconSize
6391
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6392
6269
  const {
6393
6270
  themeClasses
6394
6271
  } = provideTheme(props);
@@ -6436,11 +6313,6 @@ const VAlert = genericComponent()({
6436
6313
  const hasPrepend = !!(slots.prepend || icon.value);
6437
6314
  const hasTitle = !!(slots.title || props.title);
6438
6315
  const hasClose = !!(slots.close || props.closable);
6439
- const iconProps = {
6440
- density: props.density,
6441
- icon: icon.value,
6442
- size: iconSize.value
6443
- };
6444
6316
  return isActive.value && createVNode(props.tag, {
6445
6317
  "class": normalizeClass(['v-alert', props.border && {
6446
6318
  'v-alert--border': !!props.border,
@@ -6458,14 +6330,19 @@ const VAlert = genericComponent()({
6458
6330
  }, null), hasPrepend && createElementVNode("div", {
6459
6331
  "key": "prepend",
6460
6332
  "class": "v-alert__prepend"
6461
- }, [!slots.prepend ? createVNode(VIcon, mergeProps({
6462
- "key": "prepend-icon"
6463
- }, iconProps), null) : createVNode(VDefaultsProvider, {
6333
+ }, [!slots.prepend ? createVNode(VIcon, {
6334
+ "key": "prepend-icon",
6335
+ "density": props.density,
6336
+ "icon": icon.value,
6337
+ "size": props.prominent ? 44 : 28
6338
+ }, null) : createVNode(VDefaultsProvider, {
6464
6339
  "key": "prepend-defaults",
6465
6340
  "disabled": !icon.value,
6466
6341
  "defaults": {
6467
6342
  VIcon: {
6468
- ...iconProps
6343
+ density: props.density,
6344
+ icon: icon.value,
6345
+ size: props.prominent ? 44 : 28
6469
6346
  }
6470
6347
  }
6471
6348
  }, slots.prepend)]), createElementVNode("div", {
@@ -7990,7 +7867,6 @@ function getOffsetPosition(isHorizontal, element) {
7990
7867
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7991
7868
  const makeVSlideGroupProps = propsFactory({
7992
7869
  centerActive: Boolean,
7993
- contentClass: null,
7994
7870
  direction: {
7995
7871
  type: String,
7996
7872
  default: 'horizontal'
@@ -8303,7 +8179,7 @@ const VSlideGroup = genericComponent()({
8303
8179
  })]), createElementVNode("div", {
8304
8180
  "key": "container",
8305
8181
  "ref": containerRef,
8306
- "class": normalizeClass(['v-slide-group__container', props.contentClass]),
8182
+ "class": "v-slide-group__container",
8307
8183
  "onScroll": onScroll
8308
8184
  }, [createElementVNode("div", {
8309
8185
  "ref": contentRef,
@@ -8666,85 +8542,16 @@ const VChip = genericComponent()({
8666
8542
  }
8667
8543
  });
8668
8544
 
8669
- const makeVDividerProps = propsFactory({
8670
- color: String,
8671
- inset: Boolean,
8672
- length: [Number, String],
8673
- opacity: [Number, String],
8674
- thickness: [Number, String],
8675
- vertical: Boolean,
8676
- ...makeComponentProps(),
8677
- ...makeThemeProps()
8678
- }, 'VDivider');
8679
- const VDivider = genericComponent()({
8680
- name: 'VDivider',
8681
- props: makeVDividerProps(),
8682
- setup(props, _ref) {
8683
- let {
8684
- attrs,
8685
- slots
8686
- } = _ref;
8687
- const {
8688
- themeClasses
8689
- } = provideTheme(props);
8690
- const {
8691
- textColorClasses,
8692
- textColorStyles
8693
- } = useTextColor(() => props.color);
8694
- const dividerStyles = computed(() => {
8695
- const styles = {};
8696
- if (props.length) {
8697
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8698
- }
8699
- if (props.thickness) {
8700
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8701
- }
8702
- return styles;
8703
- });
8704
- useRender(() => {
8705
- const divider = createElementVNode("hr", {
8706
- "class": normalizeClass([{
8707
- 'v-divider': true,
8708
- 'v-divider--inset': props.inset,
8709
- 'v-divider--vertical': props.vertical
8710
- }, themeClasses.value, textColorClasses.value, props.class]),
8711
- "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
8712
- '--v-border-opacity': props.opacity
8713
- }, props.style]),
8714
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8715
- "role": `${attrs.role || 'separator'}`
8716
- }, null);
8717
- if (!slots.default) return divider;
8718
- return createElementVNode("div", {
8719
- "class": normalizeClass(['v-divider__wrapper', {
8720
- 'v-divider__wrapper--vertical': props.vertical,
8721
- 'v-divider__wrapper--inset': props.inset
8722
- }])
8723
- }, [divider, createElementVNode("div", {
8724
- "class": "v-divider__content"
8725
- }, [slots.default()]), divider]);
8726
- });
8727
- return {};
8728
- }
8729
- });
8730
-
8731
8545
  // Utilities
8732
8546
 
8733
8547
  // List
8734
8548
  const ListKey = Symbol.for('vuetify:list');
8735
8549
  function createList() {
8736
- let {
8737
- filterable
8738
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
8739
- filterable: false
8740
- };
8741
8550
  const parent = inject$1(ListKey, {
8742
- filterable: false,
8743
8551
  hasPrepend: shallowRef(false),
8744
8552
  updateHasPrepend: () => null
8745
8553
  });
8746
8554
  const data = {
8747
- filterable: parent.filterable || filterable,
8748
8555
  hasPrepend: shallowRef(false),
8749
8556
  updateHasPrepend: value => {
8750
8557
  if (value) data.hasPrepend.value = value;
@@ -9696,9 +9503,6 @@ const VListItem = genericComponent()({
9696
9503
  roundedClasses
9697
9504
  } = useRounded(roundedProps);
9698
9505
  const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
9699
- const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
9700
- keys: [keyCodes.enter]
9701
- } : props.ripple);
9702
9506
  const slotProps = computed(() => ({
9703
9507
  isActive: isActive.value,
9704
9508
  select,
@@ -9723,9 +9527,8 @@ const VListItem = genericComponent()({
9723
9527
  function onKeyDown(e) {
9724
9528
  const target = e.target;
9725
9529
  if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9726
- if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
9530
+ if (e.key === 'Enter' || e.key === ' ') {
9727
9531
  e.preventDefault();
9728
- e.stopPropagation();
9729
9532
  e.target.dispatchEvent(new MouseEvent('click', e));
9730
9533
  }
9731
9534
  }
@@ -9835,7 +9638,7 @@ const VListItem = genericComponent()({
9835
9638
  }), createElementVNode("div", {
9836
9639
  "class": "v-list-item__spacer"
9837
9640
  }, null)])]
9838
- }), [[Ripple, isClickable.value && rippleOptions.value]]);
9641
+ }), [[Ripple, isClickable.value && props.ripple]]);
9839
9642
  });
9840
9643
  return {
9841
9644
  activate,
@@ -9890,6 +9693,68 @@ const VListSubheader = genericComponent()({
9890
9693
  }
9891
9694
  });
9892
9695
 
9696
+ const makeVDividerProps = propsFactory({
9697
+ color: String,
9698
+ inset: Boolean,
9699
+ length: [Number, String],
9700
+ opacity: [Number, String],
9701
+ thickness: [Number, String],
9702
+ vertical: Boolean,
9703
+ ...makeComponentProps(),
9704
+ ...makeThemeProps()
9705
+ }, 'VDivider');
9706
+ const VDivider = genericComponent()({
9707
+ name: 'VDivider',
9708
+ props: makeVDividerProps(),
9709
+ setup(props, _ref) {
9710
+ let {
9711
+ attrs,
9712
+ slots
9713
+ } = _ref;
9714
+ const {
9715
+ themeClasses
9716
+ } = provideTheme(props);
9717
+ const {
9718
+ textColorClasses,
9719
+ textColorStyles
9720
+ } = useTextColor(() => props.color);
9721
+ const dividerStyles = computed(() => {
9722
+ const styles = {};
9723
+ if (props.length) {
9724
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9725
+ }
9726
+ if (props.thickness) {
9727
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9728
+ }
9729
+ return styles;
9730
+ });
9731
+ useRender(() => {
9732
+ const divider = createElementVNode("hr", {
9733
+ "class": normalizeClass([{
9734
+ 'v-divider': true,
9735
+ 'v-divider--inset': props.inset,
9736
+ 'v-divider--vertical': props.vertical
9737
+ }, themeClasses.value, textColorClasses.value, props.class]),
9738
+ "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
9739
+ '--v-border-opacity': props.opacity
9740
+ }, props.style]),
9741
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9742
+ "role": `${attrs.role || 'separator'}`
9743
+ }, null);
9744
+ if (!slots.default) return divider;
9745
+ return createElementVNode("div", {
9746
+ "class": normalizeClass(['v-divider__wrapper', {
9747
+ 'v-divider__wrapper--vertical': props.vertical,
9748
+ 'v-divider__wrapper--inset': props.inset
9749
+ }])
9750
+ }, [divider, createElementVNode("div", {
9751
+ "class": "v-divider__content"
9752
+ }, [slots.default()]), divider]);
9753
+ });
9754
+ return {};
9755
+ }
9756
+ });
9757
+
9893
9758
  // Types
9894
9759
 
9895
9760
  const makeVListChildrenProps = propsFactory({
@@ -10159,7 +10024,6 @@ const makeVListProps = propsFactory({
10159
10024
  activeClass: String,
10160
10025
  bgColor: String,
10161
10026
  disabled: Boolean,
10162
- filterable: Boolean,
10163
10027
  expandIcon: IconValue,
10164
10028
  collapseIcon: IconValue,
10165
10029
  lines: {
@@ -10243,9 +10107,7 @@ const VList = genericComponent()({
10243
10107
  const activeColor = toRef(() => props.activeColor);
10244
10108
  const baseColor = toRef(() => props.baseColor);
10245
10109
  const color = toRef(() => props.color);
10246
- createList({
10247
- filterable: props.filterable
10248
- });
10110
+ createList();
10249
10111
  provideDefaults({
10250
10112
  VListGroup: {
10251
10113
  activeColor,
@@ -11928,7 +11790,6 @@ const makeVMenuProps = propsFactory({
11928
11790
  // disableKeys: Boolean,
11929
11791
  id: String,
11930
11792
  submenu: Boolean,
11931
- disableInitialFocus: Boolean,
11932
11793
  ...omit(makeVOverlayProps({
11933
11794
  closeDelay: 250,
11934
11795
  closeOnContentClick: true,
@@ -12003,7 +11864,7 @@ const VMenu = genericComponent()({
12003
11864
  watch(isActive, val => {
12004
11865
  if (val) {
12005
11866
  parent?.register();
12006
- if (IN_BROWSER && !props.disableInitialFocus) {
11867
+ if (IN_BROWSER) {
12007
11868
  document.addEventListener('focusin', onFocusIn, {
12008
11869
  once: true
12009
11870
  });
@@ -12840,12 +12701,7 @@ function useVirtual(props, items) {
12840
12701
  }
12841
12702
  function calculateOffset(index) {
12842
12703
  index = clamp(index, 0, items.value.length - 1);
12843
- const whole = Math.floor(index);
12844
- const fraction = index % 1;
12845
- const next = whole + 1;
12846
- const wholeOffset = offsets[whole] || 0;
12847
- const nextOffset = offsets[next] || wholeOffset;
12848
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12704
+ return offsets[index] || 0;
12849
12705
  }
12850
12706
  function calculateIndex(scrollTop) {
12851
12707
  return binaryClosest(offsets, scrollTop);
@@ -13199,7 +13055,6 @@ const makeSelectProps = propsFactory({
13199
13055
  },
13200
13056
  openOnClear: Boolean,
13201
13057
  itemColor: String,
13202
- noAutoScroll: Boolean,
13203
13058
  ...makeItemsProps({
13204
13059
  itemChildren: false
13205
13060
  })
@@ -13414,7 +13269,7 @@ const VSelect = genericComponent()({
13414
13269
  watch(menu, () => {
13415
13270
  if (!props.hideSelected && menu.value && model.value.length) {
13416
13271
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
13417
- IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
13272
+ IN_BROWSER && window.requestAnimationFrame(() => {
13418
13273
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
13419
13274
  });
13420
13275
  }
@@ -13507,22 +13362,6 @@ const VSelect = genericComponent()({
13507
13362
  key: item.value,
13508
13363
  onClick: () => select(item, null)
13509
13364
  });
13510
- if (item.raw.type === 'divider') {
13511
- return slots.divider?.({
13512
- props: item.raw,
13513
- index
13514
- }) ?? createVNode(VDivider, mergeProps(item.props, {
13515
- "key": `divider-${index}`
13516
- }), null);
13517
- }
13518
- if (item.raw.type === 'subheader') {
13519
- return slots.subheader?.({
13520
- props: item.raw,
13521
- index
13522
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13523
- "key": `subheader-${index}`
13524
- }), null);
13525
- }
13526
13365
  return slots.item?.({
13527
13366
  item,
13528
13367
  index,
@@ -13683,9 +13522,6 @@ function filterItems(items, query, options) {
13683
13522
  let match = -1;
13684
13523
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13685
13524
  if (typeof item === 'object') {
13686
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13687
- continue;
13688
- }
13689
13525
  const filterKeys = keys || Object.keys(transformed);
13690
13526
  for (const key of filterKeys) {
13691
13527
  const value = getPropertyFromItem(transformed, key);
@@ -13888,7 +13724,7 @@ const VAutocomplete = genericComponent()({
13888
13724
  menu.value = !menu.value;
13889
13725
  }
13890
13726
  function onListKeydown(e) {
13891
- if (checkPrintable(e) || e.key === 'Backspace') {
13727
+ if (e.key !== ' ' && checkPrintable(e)) {
13892
13728
  vTextFieldRef.value?.focus();
13893
13729
  }
13894
13730
  }
@@ -14093,7 +13929,6 @@ const VAutocomplete = genericComponent()({
14093
13929
  }, props.menuProps), {
14094
13930
  default: () => [hasList && createVNode(VList, mergeProps({
14095
13931
  "ref": listRef,
14096
- "filterable": true,
14097
13932
  "selected": selectedValues.value,
14098
13933
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14099
13934
  "onMousedown": e => e.preventDefault(),
@@ -14125,22 +13960,6 @@ const VAutocomplete = genericComponent()({
14125
13960
  active: highlightFirst.value && index === 0 ? true : undefined,
14126
13961
  onClick: () => select(item, null)
14127
13962
  });
14128
- if (item.raw.type === 'divider') {
14129
- return slots.divider?.({
14130
- props: item.raw,
14131
- index
14132
- }) ?? createVNode(VDivider, mergeProps(item.props, {
14133
- "key": `divider-${index}`
14134
- }), null);
14135
- }
14136
- if (item.raw.type === 'subheader') {
14137
- return slots.subheader?.({
14138
- props: item.raw,
14139
- index
14140
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
14141
- "key": `subheader-${index}`
14142
- }), null);
14143
- }
14144
13963
  return slots.item?.({
14145
13964
  item,
14146
13965
  index,
@@ -14285,8 +14104,7 @@ const makeVBadgeProps = propsFactory({
14285
14104
  ...makeThemeProps(),
14286
14105
  ...makeTransitionProps({
14287
14106
  transition: 'scale-rotate-transition'
14288
- }),
14289
- ...makeDimensionProps()
14107
+ })
14290
14108
  }, 'VBadge');
14291
14109
  const VBadge = genericComponent()({
14292
14110
  name: 'VBadge',
@@ -14316,9 +14134,6 @@ const VBadge = genericComponent()({
14316
14134
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
14317
14135
  return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
14318
14136
  });
14319
- const {
14320
- dimensionStyles
14321
- } = useDimension(props);
14322
14137
  useRender(() => {
14323
14138
  const value = Number(props.content);
14324
14139
  const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
@@ -14340,7 +14155,7 @@ const VBadge = genericComponent()({
14340
14155
  }, {
14341
14156
  default: () => [withDirectives(createElementVNode("span", mergeProps({
14342
14157
  "class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
14343
- "style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
14158
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
14344
14159
  "aria-atomic": "true",
14345
14160
  "aria-label": t(props.label, value),
14346
14161
  "aria-live": "polite",
@@ -17749,13 +17564,13 @@ function date(value) {
17749
17564
  return null;
17750
17565
  }
17751
17566
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17752
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17567
+ function getWeekdays(locale, firstDayOfWeek) {
17753
17568
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17754
17569
  return createRange(7).map(i => {
17755
17570
  const weekday = new Date(sundayJanuarySecond2000);
17756
17571
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17757
17572
  return new Intl.DateTimeFormat(locale, {
17758
- weekday: weekdayFormat ?? 'narrow'
17573
+ weekday: 'narrow'
17759
17574
  }).format(weekday);
17760
17575
  });
17761
17576
  }
@@ -18219,9 +18034,9 @@ class VuetifyDateAdapter {
18219
18034
  getDiff(date, comparing, unit) {
18220
18035
  return getDiff(date, comparing, unit);
18221
18036
  }
18222
- getWeekdays(firstDayOfWeek, weekdayFormat) {
18037
+ getWeekdays(firstDayOfWeek) {
18223
18038
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
18224
- return getWeekdays(this.locale, firstDay, weekdayFormat);
18039
+ return getWeekdays(this.locale, firstDay);
18225
18040
  }
18226
18041
  getYear(date) {
18227
18042
  return getYear(date);
@@ -18576,7 +18391,6 @@ const VCombobox = genericComponent()({
18576
18391
  _search.value = val ?? '';
18577
18392
  if (!props.multiple && !hasSelectionSlot.value) {
18578
18393
  model.value = [transformItem$3(props, val)];
18579
- nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18580
18394
  }
18581
18395
  if (val && props.multiple && props.delimiters?.length) {
18582
18396
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18657,7 +18471,7 @@ const VCombobox = genericComponent()({
18657
18471
  menu.value = !menu.value;
18658
18472
  }
18659
18473
  function onListKeydown(e) {
18660
- if (checkPrintable(e) || e.key === 'Backspace') {
18474
+ if (e.key !== ' ' && checkPrintable(e)) {
18661
18475
  vTextFieldRef.value?.focus();
18662
18476
  }
18663
18477
  }
@@ -18862,7 +18676,6 @@ const VCombobox = genericComponent()({
18862
18676
  }, props.menuProps), {
18863
18677
  default: () => [hasList && createVNode(VList, mergeProps({
18864
18678
  "ref": listRef,
18865
- "filterable": true,
18866
18679
  "selected": selectedValues.value,
18867
18680
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18868
18681
  "onMousedown": e => e.preventDefault(),
@@ -18894,22 +18707,6 @@ const VCombobox = genericComponent()({
18894
18707
  active: highlightFirst.value && index === 0 ? true : undefined,
18895
18708
  onClick: () => select(item, null)
18896
18709
  });
18897
- if (item.raw.type === 'divider') {
18898
- return slots.divider?.({
18899
- props: item.raw,
18900
- index
18901
- }) ?? createVNode(VDivider, mergeProps(item.props, {
18902
- "key": `divider-${index}`
18903
- }), null);
18904
- }
18905
- if (item.raw.type === 'subheader') {
18906
- return slots.subheader?.({
18907
- props: item.raw,
18908
- index
18909
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
18910
- "key": `subheader-${index}`
18911
- }), null);
18912
- }
18913
18710
  return slots.item?.({
18914
18711
  item,
18915
18712
  index,
@@ -20792,7 +20589,6 @@ const makeVDataTableHeadersProps = propsFactory({
20792
20589
  color: String,
20793
20590
  disableSort: Boolean,
20794
20591
  fixedHeader: Boolean,
20795
- lastFixed: Boolean,
20796
20592
  multiSort: Boolean,
20797
20593
  sortAscIcon: {
20798
20594
  type: IconValue,
@@ -20839,11 +20635,10 @@ const VDataTableHeaders = genericComponent()({
20839
20635
  loaderClasses
20840
20636
  } = useLoader(props);
20841
20637
  function getFixedStyles(column, y) {
20842
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20638
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20843
20639
  return {
20844
20640
  position: 'sticky',
20845
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20846
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20641
+ left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20847
20642
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20848
20643
  };
20849
20644
  }
@@ -21359,18 +21154,11 @@ const VDataTableRows = genericComponent()({
21359
21154
  }
21360
21155
  });
21361
21156
 
21362
- // Types
21363
-
21364
21157
  const makeVTableProps = propsFactory({
21365
21158
  fixedHeader: Boolean,
21366
21159
  fixedFooter: Boolean,
21367
21160
  height: [Number, String],
21368
21161
  hover: Boolean,
21369
- striped: {
21370
- type: String,
21371
- default: null,
21372
- validator: v => ['even', 'odd'].includes(v)
21373
- },
21374
21162
  ...makeComponentProps(),
21375
21163
  ...makeDensityProps(),
21376
21164
  ...makeTagProps(),
@@ -21397,9 +21185,7 @@ const VTable = genericComponent()({
21397
21185
  'v-table--fixed-footer': props.fixedFooter,
21398
21186
  'v-table--has-top': !!slots.top,
21399
21187
  'v-table--has-bottom': !!slots.bottom,
21400
- 'v-table--hover': props.hover,
21401
- 'v-table--striped-even': props.striped === 'even',
21402
- 'v-table--striped-odd': props.striped === 'odd'
21188
+ 'v-table--hover': props.hover
21403
21189
  }, themeClasses.value, densityClasses.value, props.class]),
21404
21190
  "style": normalizeStyle(props.style)
21405
21191
  }, {
@@ -22574,8 +22360,7 @@ const makeCalendarProps = propsFactory({
22574
22360
  firstDayOfWeek: {
22575
22361
  type: [Number, String],
22576
22362
  default: undefined
22577
- },
22578
- weekdayFormat: String
22363
+ }
22579
22364
  }, 'calendar');
22580
22365
  function useCalendar(props) {
22581
22366
  const adapter = useDate();
@@ -22816,7 +22601,7 @@ const VDatePickerMonth = genericComponent()({
22816
22601
  "ref": daysRef,
22817
22602
  "key": daysInMonth.value[0].date?.toString(),
22818
22603
  "class": "v-date-picker-month__days"
22819
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
22604
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
22820
22605
  "class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22821
22606
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22822
22607
  const slotProps = {
@@ -23325,9 +23110,7 @@ const VDatePicker = genericComponent()({
23325
23110
  "max": maxDate.value,
23326
23111
  "year": year.value,
23327
23112
  "allowedMonths": allowedMonths
23328
- }), {
23329
- ...pick(slots, ['month'])
23330
- }) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
23113
+ }), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
23331
23114
  "key": "date-picker-years"
23332
23115
  }, datePickerYearsProps, {
23333
23116
  "modelValue": year.value,
@@ -23335,9 +23118,7 @@ const VDatePicker = genericComponent()({
23335
23118
  "min": minDate.value,
23336
23119
  "max": maxDate.value,
23337
23120
  "allowedYears": allowedYears
23338
- }), {
23339
- ...pick(slots, ['year'])
23340
- }) : createVNode(VDatePickerMonth, mergeProps({
23121
+ }), null) : createVNode(VDatePickerMonth, mergeProps({
23341
23122
  "key": "date-picker-month"
23342
23123
  }, datePickerMonthProps, {
23343
23124
  "modelValue": model.value,
@@ -23348,9 +23129,7 @@ const VDatePicker = genericComponent()({
23348
23129
  "onUpdate:year": [$event => year.value = $event, onUpdateYear],
23349
23130
  "min": minDate.value,
23350
23131
  "max": maxDate.value
23351
- }), {
23352
- ...pick(slots, ['day'])
23353
- })]
23132
+ }), null)]
23354
23133
  })]),
23355
23134
  actions: slots.actions
23356
23135
  });
@@ -24441,9 +24220,6 @@ const VInfiniteScroll = genericComponent()({
24441
24220
  startStatus.value = status;
24442
24221
  } else if (side === 'end') {
24443
24222
  endStatus.value = status;
24444
- } else if (side === 'both') {
24445
- startStatus.value = status;
24446
- endStatus.value = status;
24447
24223
  }
24448
24224
  }
24449
24225
  function getStatus(side) {
@@ -24555,32 +24331,6 @@ const VInfiniteScroll = genericComponent()({
24555
24331
  }, [renderSide('end', endStatus.value)])]
24556
24332
  });
24557
24333
  });
24558
- function reset(side) {
24559
- const effectiveSide = side ?? props.side;
24560
- setStatus(effectiveSide, 'ok');
24561
- nextTick(() => {
24562
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
24563
- if (props.mode !== 'manual') {
24564
- nextTick(() => {
24565
- window.requestAnimationFrame(() => {
24566
- window.requestAnimationFrame(() => {
24567
- window.requestAnimationFrame(() => {
24568
- if (effectiveSide === 'both') {
24569
- intersecting('start');
24570
- intersecting('end');
24571
- } else {
24572
- intersecting(effectiveSide);
24573
- }
24574
- });
24575
- });
24576
- });
24577
- });
24578
- }
24579
- });
24580
- }
24581
- return {
24582
- reset
24583
- };
24584
24334
  }
24585
24335
  });
24586
24336
 
@@ -24660,47 +24410,8 @@ const VItem = genericComponent()({
24660
24410
  }
24661
24411
  });
24662
24412
 
24663
- const makeVKbdProps = propsFactory({
24664
- ...makeBorderProps(),
24665
- ...makeComponentProps(),
24666
- ...makeRoundedProps(),
24667
- ...makeTagProps({
24668
- tag: 'kbd'
24669
- }),
24670
- ...makeThemeProps(),
24671
- ...makeElevationProps(),
24672
- color: String
24673
- }, 'VKbd');
24674
- const VKbd = genericComponent()({
24675
- name: 'VKbd',
24676
- props: makeVKbdProps(),
24677
- setup(props, _ref) {
24678
- let {
24679
- slots
24680
- } = _ref;
24681
- const {
24682
- themeClasses
24683
- } = provideTheme(props);
24684
- const {
24685
- borderClasses
24686
- } = useBorder(props);
24687
- const {
24688
- roundedClasses
24689
- } = useRounded(props);
24690
- const {
24691
- backgroundColorClasses,
24692
- backgroundColorStyles
24693
- } = useBackgroundColor(() => props.color);
24694
- const {
24695
- elevationClasses
24696
- } = useElevation(props);
24697
- useRender(() => createVNode(props.tag, {
24698
- "class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
24699
- "style": normalizeStyle([backgroundColorStyles.value, props.style])
24700
- }, slots));
24701
- return {};
24702
- }
24703
- });
24413
+ // Styles
24414
+ const VKbd = createSimpleFunctional('v-kbd', 'kbd');
24704
24415
 
24705
24416
  const makeVLayoutProps = propsFactory({
24706
24417
  ...makeComponentProps(),
@@ -25538,14 +25249,6 @@ const makeVNumberInputProps = propsFactory({
25538
25249
  type: Number,
25539
25250
  default: 0
25540
25251
  },
25541
- minFractionDigits: {
25542
- type: Number,
25543
- default: null
25544
- },
25545
- decimalSeparator: {
25546
- type: String,
25547
- validator: v => !v || v.length === 1
25548
- },
25549
25252
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25550
25253
  }, 'VNumberInput');
25551
25254
  const VNumberInput = genericComponent()({
@@ -25571,24 +25274,11 @@ const VNumberInput = genericComponent()({
25571
25274
  const form = useForm(props);
25572
25275
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
25573
25276
  const isFocused = shallowRef(props.focused);
25574
- const {
25575
- decimalSeparator: decimalSeparatorFromLocale
25576
- } = useLocale();
25577
- const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
25578
25277
  function correctPrecision(val) {
25579
25278
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25580
- let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
25581
25279
  const fixed = precision == null ? String(val) : val.toFixed(precision);
25582
- if (isFocused.value && trim) {
25583
- return Number(fixed).toString() // trim zeros
25584
- .replace('.', decimalSeparator.value);
25585
- }
25586
- if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
25587
- return fixed.replace('.', decimalSeparator.value);
25588
- }
25589
- let [baseDigits, fractionDigits] = fixed.split('.');
25590
- fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
25591
- return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
25280
+ return isFocused.value ? Number(fixed).toString() // trim zeros
25281
+ : fixed;
25592
25282
  }
25593
25283
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25594
25284
  const _inputText = shallowRef(null);
@@ -25605,11 +25295,8 @@ const VNumberInput = genericComponent()({
25605
25295
  if (val === null || val === '') {
25606
25296
  model.value = null;
25607
25297
  _inputText.value = null;
25608
- return;
25609
- }
25610
- const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
25611
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
25612
- model.value = parsedValue;
25298
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
25299
+ model.value = Number(val);
25613
25300
  _inputText.value = val;
25614
25301
  }
25615
25302
  }
@@ -25646,7 +25333,6 @@ const VNumberInput = genericComponent()({
25646
25333
  }
25647
25334
  };
25648
25335
  watch(() => props.precision, () => formatInputValue());
25649
- watch(() => props.minFractionDigits, () => formatInputValue());
25650
25336
  onMounted(() => {
25651
25337
  clampModel();
25652
25338
  });
@@ -25680,24 +25366,24 @@ const VNumberInput = genericComponent()({
25680
25366
  selectionEnd
25681
25367
  } = inputElement ?? {};
25682
25368
  const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
25683
- const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
25369
+ const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
25684
25370
 
25685
- // Allow only numbers, "-" and {decimal separator}
25686
- // Allow "-" and {decimal separator} only once
25687
- // Allow "-" only at the start
25688
- if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
25371
+ // Only numbers, "-", "." are allowed
25372
+ // AND "-", "." are allowed only once
25373
+ // AND "-" is only allowed at the start
25374
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
25689
25375
  e.preventDefault();
25690
25376
  inputElement.value = potentialNewNumber;
25691
25377
  }
25692
25378
  if (props.precision == null) return;
25693
25379
 
25694
25380
  // Ignore decimal digits above precision limit
25695
- if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
25381
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
25696
25382
  e.preventDefault();
25697
25383
  inputElement.value = potentialNewNumber;
25698
25384
  }
25699
25385
  // Ignore decimal separator when precision = 0
25700
- if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
25386
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
25701
25387
  e.preventDefault();
25702
25388
  inputElement.value = potentialNewNumber;
25703
25389
  }
@@ -25749,16 +25435,19 @@ const VNumberInput = genericComponent()({
25749
25435
  if (controlsDisabled.value) return;
25750
25436
  if (!vTextFieldRef.value) return;
25751
25437
  const actualText = vTextFieldRef.value.value;
25752
- const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
25753
- if (actualText && !isNaN(parsedValue)) {
25754
- inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
25438
+ if (actualText && !isNaN(Number(actualText))) {
25439
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
25755
25440
  } else {
25756
25441
  inputText.value = null;
25757
25442
  }
25758
25443
  }
25759
25444
  function formatInputValue() {
25760
25445
  if (controlsDisabled.value) return;
25761
- inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
25446
+ if (model.value === null || isNaN(model.value)) {
25447
+ inputText.value = null;
25448
+ return;
25449
+ }
25450
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25762
25451
  }
25763
25452
  function trimDecimalZeros() {
25764
25453
  if (controlsDisabled.value) return;
@@ -25766,7 +25455,7 @@ const VNumberInput = genericComponent()({
25766
25455
  inputText.value = null;
25767
25456
  return;
25768
25457
  }
25769
- inputText.value = model.value.toString().replace('.', decimalSeparator.value);
25458
+ inputText.value = model.value.toString();
25770
25459
  }
25771
25460
  function onFocus() {
25772
25461
  trimDecimalZeros();
@@ -26033,10 +25722,9 @@ const VOtpInput = genericComponent()({
26033
25722
  e.preventDefault();
26034
25723
  e.stopPropagation();
26035
25724
  const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
26036
- const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
26037
25725
  if (isValidNumber(clipboardText)) return;
26038
25726
  model.value = clipboardText.split('');
26039
- inputRef.value?.[finalIndex].focus();
25727
+ inputRef.value?.[index].blur();
26040
25728
  }
26041
25729
  function reset() {
26042
25730
  model.value = [];
@@ -29820,7 +29508,7 @@ function createVuetify$1() {
29820
29508
  };
29821
29509
  });
29822
29510
  }
29823
- const version$1 = "3.8.10-dev.2025-06-18";
29511
+ const version$1 = "3.8.10-master.2025-06-18";
29824
29512
  createVuetify$1.version = version$1;
29825
29513
 
29826
29514
  // Vue's inject() can only be used in setup
@@ -29845,7 +29533,7 @@ const createVuetify = function () {
29845
29533
  ...options
29846
29534
  });
29847
29535
  };
29848
- const version = "3.8.10-dev.2025-06-18";
29536
+ const version = "3.8.10-master.2025-06-18";
29849
29537
  createVuetify.version = version;
29850
29538
 
29851
29539
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };