@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
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
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
  */
@@ -14,7 +14,6 @@
14
14
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
15
15
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
16
16
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
17
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
18
17
 
19
18
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
20
19
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -515,23 +514,18 @@
515
514
  function isPrimitive(value) {
516
515
  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
517
516
  }
518
- function escapeForRegex(sign) {
519
- return '\\^$*+?.()|{}[]'.includes(sign) ? `\\${sign}` : sign;
520
- }
521
- function extractNumber(text, decimalDigitsLimit, decimalSeparator) {
522
- const onlyValidCharacters = new RegExp(`[\\d\\-${escapeForRegex(decimalSeparator)}]`);
523
- const cleanText = text.split('').filter(x => onlyValidCharacters.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
517
+ function extractNumber(text, decimalDigitsLimit) {
518
+ const cleanText = text.split('').filter(x => /[\d\-.]/.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
524
519
  // sign allowed at the start
525
- x === decimalSeparator && i === all.indexOf(x) ||
520
+ x === '.' && i === all.indexOf('.') ||
526
521
  // decimal separator allowed only once
527
522
  /\d/.test(x)).join('');
528
523
  if (decimalDigitsLimit === 0) {
529
- return cleanText.split(decimalSeparator)[0];
524
+ return cleanText.split('.')[0];
530
525
  }
531
- const decimalPart = new RegExp(`${escapeForRegex(decimalSeparator)}\\d`);
532
- if (decimalDigitsLimit !== null && decimalPart.test(cleanText)) {
533
- const parts = cleanText.split(decimalSeparator);
534
- return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join(decimalSeparator);
526
+ if (decimalDigitsLimit !== null && /\.\d/.test(cleanText)) {
527
+ const parts = cleanText.split('.');
528
+ return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join('.');
535
529
  }
536
530
  return cleanText;
537
531
  }
@@ -2678,10 +2672,6 @@
2678
2672
  return numberFormat.format(value);
2679
2673
  };
2680
2674
  }
2681
- function inferDecimalSeparator(current, fallback) {
2682
- const format = createNumberFunction(current, fallback);
2683
- return format(0.1).includes(',') ? ',' : '.';
2684
- }
2685
2675
  function useProvided(props, prop, provided) {
2686
2676
  const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
2687
2677
 
@@ -2704,7 +2694,6 @@
2704
2694
  current,
2705
2695
  fallback,
2706
2696
  messages,
2707
- decimalSeparator: vue.toRef(() => inferDecimalSeparator(current, fallback)),
2708
2697
  t: createTranslateFunction(current, fallback, messages),
2709
2698
  n: createNumberFunction(current, fallback),
2710
2699
  provide: createProvideFunction({
@@ -2727,7 +2716,6 @@
2727
2716
  current,
2728
2717
  fallback,
2729
2718
  messages,
2730
- decimalSeparator: vue.toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
2731
2719
  t: createTranslateFunction(current, fallback, messages),
2732
2720
  n: createNumberFunction(current, fallback),
2733
2721
  provide: createProvideFunction({
@@ -2854,7 +2842,6 @@
2854
2842
  function genDefaults$1() {
2855
2843
  return {
2856
2844
  defaultTheme: 'light',
2857
- prefix: 'v-',
2858
2845
  variations: {
2859
2846
  colors: [],
2860
2847
  lighten: 0,
@@ -2892,8 +2879,8 @@
2892
2879
  'activated-opacity': 0.12,
2893
2880
  'pressed-opacity': 0.12,
2894
2881
  'dragged-opacity': 0.08,
2895
- 'theme-kbd': '#EEEEEE',
2896
- 'theme-on-kbd': '#000000',
2882
+ 'theme-kbd': '#212529',
2883
+ 'theme-on-kbd': '#FFFFFF',
2897
2884
  'theme-code': '#F5F5F5',
2898
2885
  'theme-on-code': '#000000'
2899
2886
  }
@@ -2929,17 +2916,14 @@
2929
2916
  'activated-opacity': 0.12,
2930
2917
  'pressed-opacity': 0.16,
2931
2918
  'dragged-opacity': 0.08,
2932
- 'theme-kbd': '#424242',
2919
+ 'theme-kbd': '#212529',
2933
2920
  'theme-on-kbd': '#FFFFFF',
2934
2921
  'theme-code': '#343434',
2935
2922
  'theme-on-code': '#CCCCCC'
2936
2923
  }
2937
2924
  }
2938
2925
  },
2939
- stylesheetId: 'vuetify-theme-stylesheet',
2940
- scoped: false,
2941
- unimportant: false,
2942
- utilities: true
2926
+ stylesheetId: 'vuetify-theme-stylesheet'
2943
2927
  };
2944
2928
  }
2945
2929
  function parseThemeOptions() {
@@ -2962,21 +2946,21 @@
2962
2946
  function createCssClass(lines, selector, content, scope) {
2963
2947
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2964
2948
  }
2965
- function genCssVariables(theme, prefix) {
2949
+ function genCssVariables(theme) {
2966
2950
  const lightOverlay = theme.dark ? 2 : 1;
2967
2951
  const darkOverlay = theme.dark ? 1 : 2;
2968
2952
  const variables = [];
2969
2953
  for (const [key, value] of Object.entries(theme.colors)) {
2970
2954
  const rgb = parseColor(value);
2971
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2955
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2972
2956
  if (!key.startsWith('on-')) {
2973
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2957
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2974
2958
  }
2975
2959
  }
2976
2960
  for (const [key, value] of Object.entries(theme.variables)) {
2977
2961
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2978
2962
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2979
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2963
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2980
2964
  }
2981
2965
  return variables;
2982
2966
  }
@@ -3020,8 +3004,7 @@
3020
3004
  const scopeSelector = `:where(${scope})`;
3021
3005
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
3022
3006
  }
3023
- function upsertStyles(id, cspNonce, styles) {
3024
- const styleEl = getOrCreateStyleElement(id, cspNonce);
3007
+ function upsertStyles(styleEl, styles) {
3025
3008
  if (!styleEl) return;
3026
3009
  styleEl.innerHTML = styles;
3027
3010
  }
@@ -3041,17 +3024,8 @@
3041
3024
  // Composables
3042
3025
  function createTheme(options) {
3043
3026
  const parsedOptions = parseThemeOptions(options);
3044
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
3027
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
3045
3028
  const themes = vue.ref(parsedOptions.themes);
3046
- const systemName = vue.shallowRef('light');
3047
- const name = vue.computed({
3048
- get() {
3049
- return _name.value === 'system' ? systemName.value : _name.value;
3050
- },
3051
- set(val) {
3052
- _name.value = val;
3053
- }
3054
- });
3055
3029
  const computedThemes = vue.computed(() => {
3056
3030
  const acc = {};
3057
3031
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3072,49 +3046,28 @@
3072
3046
  const current = vue.toRef(() => computedThemes.value[name.value]);
3073
3047
  const styles = vue.computed(() => {
3074
3048
  const lines = [];
3075
- const important = parsedOptions.unimportant ? '' : ' !important';
3076
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3077
3049
  if (current.value?.dark) {
3078
3050
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3079
3051
  }
3080
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
3052
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3081
3053
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
3082
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3083
- }
3084
- if (parsedOptions.utilities) {
3085
- const bgLines = [];
3086
- const fgLines = [];
3087
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3088
- for (const key of colors) {
3089
- if (key.startsWith('on-')) {
3090
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3091
- } else {
3092
- 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);
3093
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3094
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3095
- }
3054
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
3055
+ }
3056
+ const bgLines = [];
3057
+ const fgLines = [];
3058
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3059
+ for (const key of colors) {
3060
+ if (key.startsWith('on-')) {
3061
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3062
+ } else {
3063
+ 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);
3064
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3065
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3096
3066
  }
3097
- lines.push(...bgLines, ...fgLines);
3098
3067
  }
3068
+ lines.push(...bgLines, ...fgLines);
3099
3069
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3100
3070
  });
3101
- const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3102
- const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
3103
- if (SUPPORTS_MATCH_MEDIA) {
3104
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3105
- function updateSystemName() {
3106
- systemName.value = media.matches ? 'dark' : 'light';
3107
- }
3108
- updateSystemName();
3109
- media.addEventListener('change', updateSystemName, {
3110
- passive: true
3111
- });
3112
- if (vue.getCurrentScope()) {
3113
- vue.onScopeDispose(() => {
3114
- media.removeEventListener('change', updateSystemName);
3115
- });
3116
- }
3117
- }
3118
3071
  function install(app) {
3119
3072
  if (parsedOptions.isDisabled) return;
3120
3073
  const head = app._context.provides.usehead;
@@ -3152,55 +3105,22 @@
3152
3105
  updateStyles();
3153
3106
  }
3154
3107
  function updateStyles() {
3155
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3108
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3156
3109
  }
3157
3110
  }
3158
3111
  }
3159
- function change(themeName) {
3160
- if (!themeNames.value.includes(themeName)) {
3161
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3162
- return;
3163
- }
3164
- name.value = themeName;
3165
- }
3166
- function cycle() {
3167
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3168
- const currentIndex = themeArray.indexOf(name.value);
3169
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3170
- change(themeArray[nextIndex]);
3171
- }
3172
- function toggle() {
3173
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3174
- cycle(themeArray);
3175
- }
3176
- const globalName = new Proxy(name, {
3177
- get(target, prop) {
3178
- return target[prop];
3179
- },
3180
- set(target, prop, val) {
3181
- if (prop === 'value') {
3182
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3183
- }
3184
- // @ts-expect-error
3185
- target[prop] = val;
3186
- return true;
3187
- }
3188
- });
3112
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3189
3113
  return {
3190
3114
  install,
3191
- change,
3192
- cycle,
3193
- toggle,
3194
3115
  isDisabled: parsedOptions.isDisabled,
3195
3116
  name,
3196
3117
  themes,
3197
3118
  current,
3198
3119
  computedThemes,
3199
- prefix: parsedOptions.prefix,
3200
3120
  themeClasses,
3201
3121
  styles,
3202
3122
  global: {
3203
- name: globalName,
3123
+ name,
3204
3124
  current
3205
3125
  }
3206
3126
  };
@@ -3211,7 +3131,7 @@
3211
3131
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3212
3132
  const name = vue.toRef(() => props.theme ?? theme.name.value);
3213
3133
  const current = vue.toRef(() => theme.themes.value[name.value]);
3214
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3134
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3215
3135
  const newTheme = {
3216
3136
  ...theme,
3217
3137
  name,
@@ -4315,10 +4235,7 @@
4315
4235
  default: 'default',
4316
4236
  validator: v => allowedDensities$1.includes(v)
4317
4237
  },
4318
- extended: {
4319
- type: Boolean,
4320
- default: null
4321
- },
4238
+ extended: Boolean,
4322
4239
  extensionHeight: {
4323
4240
  type: [Number, String],
4324
4241
  default: 48
@@ -4366,7 +4283,7 @@
4366
4283
  const {
4367
4284
  rtlClasses
4368
4285
  } = useRtl();
4369
- const isExtended = vue.shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
4286
+ const isExtended = vue.shallowRef(!!(props.extended || slots.extension?.()));
4370
4287
  const contentHeight = vue.computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
4371
4288
  const extensionHeight = vue.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);
4372
4289
  provideDefaults({
@@ -4378,7 +4295,7 @@
4378
4295
  const hasTitle = !!(props.title || slots.title);
4379
4296
  const hasImage = !!(slots.image || props.image);
4380
4297
  const extension = slots.extension?.();
4381
- isExtended.value = props.extended === null ? !!extension : props.extended;
4298
+ isExtended.value = !!(props.extended || extension);
4382
4299
  return vue.createVNode(props.tag, {
4383
4300
  "class": vue.normalizeClass(['v-toolbar', {
4384
4301
  'v-toolbar--absolute': props.absolute,
@@ -4761,15 +4678,9 @@
4761
4678
  };
4762
4679
  }
4763
4680
 
4764
- // Types
4765
-
4766
4681
  const makeVBtnGroupProps = propsFactory({
4767
4682
  baseColor: String,
4768
4683
  divided: Boolean,
4769
- direction: {
4770
- type: String,
4771
- default: 'horizontal'
4772
- },
4773
4684
  ...makeBorderProps(),
4774
4685
  ...makeComponentProps(),
4775
4686
  ...makeDensityProps(),
@@ -4803,7 +4714,7 @@
4803
4714
  } = useRounded(props);
4804
4715
  provideDefaults({
4805
4716
  VBtn: {
4806
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4717
+ height: 'auto',
4807
4718
  baseColor: vue.toRef(() => props.baseColor),
4808
4719
  color: vue.toRef(() => props.color),
4809
4720
  density: vue.toRef(() => props.density),
@@ -4813,7 +4724,7 @@
4813
4724
  });
4814
4725
  useRender(() => {
4815
4726
  return vue.createVNode(props.tag, {
4816
- "class": vue.normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4727
+ "class": vue.normalizeClass(['v-btn-group', {
4817
4728
  'v-btn-group--divided': props.divided
4818
4729
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4819
4730
  "style": vue.normalizeStyle(props.style)
@@ -5937,8 +5848,8 @@
5937
5848
  window.clearTimeout(element._ripple.showTimer);
5938
5849
  }
5939
5850
  let keyboardRipple = false;
5940
- function keyboardRippleShow(e, keys) {
5941
- if (!keyboardRipple && keys.includes(e.keyCode)) {
5851
+ function keyboardRippleShow(e) {
5852
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
5942
5853
  keyboardRipple = true;
5943
5854
  rippleShow(e);
5944
5855
  }
@@ -5966,12 +5877,9 @@
5966
5877
  el._ripple.enabled = enabled;
5967
5878
  el._ripple.centered = modifiers.center;
5968
5879
  el._ripple.circle = modifiers.circle;
5969
- const bindingValue = isObject(value) ? value : {};
5970
- if (bindingValue.class) {
5971
- el._ripple.class = bindingValue.class;
5880
+ if (isObject(value) && value.class) {
5881
+ el._ripple.class = value.class;
5972
5882
  }
5973
- const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
5974
- el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
5975
5883
  if (enabled && !wasEnabled) {
5976
5884
  if (modifiers.stop) {
5977
5885
  el.addEventListener('touchstart', rippleStop, {
@@ -5993,7 +5901,7 @@
5993
5901
  el.addEventListener('mousedown', rippleShow);
5994
5902
  el.addEventListener('mouseup', rippleHide);
5995
5903
  el.addEventListener('mouseleave', rippleHide);
5996
- el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
5904
+ el.addEventListener('keydown', keyboardRippleShow);
5997
5905
  el.addEventListener('keyup', keyboardRippleHide);
5998
5906
  el.addEventListener('blur', focusRippleHide);
5999
5907
 
@@ -6013,9 +5921,7 @@
6013
5921
  el.removeEventListener('touchcancel', rippleHide);
6014
5922
  el.removeEventListener('mouseup', rippleHide);
6015
5923
  el.removeEventListener('mouseleave', rippleHide);
6016
- if (el._ripple?.keyDownHandler) {
6017
- el.removeEventListener('keydown', el._ripple.keyDownHandler);
6018
- }
5924
+ el.removeEventListener('keydown', keyboardRippleShow);
6019
5925
  el.removeEventListener('keyup', keyboardRippleHide);
6020
5926
  el.removeEventListener('dragstart', rippleHide);
6021
5927
  el.removeEventListener('blur', focusRippleHide);
@@ -6024,8 +5930,8 @@
6024
5930
  updateRipple(el, binding, false);
6025
5931
  }
6026
5932
  function unmounted$4(el) {
6027
- removeListeners(el);
6028
5933
  delete el._ripple;
5934
+ removeListeners(el);
6029
5935
  }
6030
5936
  function updated$1(el, binding) {
6031
5937
  if (binding.value === binding.oldValue) {
@@ -6298,31 +6204,6 @@
6298
6204
  // Utilities
6299
6205
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6300
6206
 
6301
- // Utilities
6302
-
6303
- // Types
6304
-
6305
- // Types
6306
-
6307
- // Composables
6308
- const makeIconSizeProps = propsFactory({
6309
- iconSize: [Number, String],
6310
- iconSizes: {
6311
- type: Array,
6312
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6313
- }
6314
- }, 'iconSize');
6315
- function useIconSizes(props, fallback) {
6316
- const iconSize = vue.computed(() => {
6317
- const iconSizeMap = new Map(props.iconSizes);
6318
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6319
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6320
- });
6321
- return {
6322
- iconSize
6323
- };
6324
- }
6325
-
6326
6207
  // Types
6327
6208
 
6328
6209
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6362,7 +6243,6 @@
6362
6243
  ...makeDensityProps(),
6363
6244
  ...makeDimensionProps(),
6364
6245
  ...makeElevationProps(),
6365
- ...makeIconSizeProps(),
6366
6246
  ...makeLocationProps(),
6367
6247
  ...makePositionProps(),
6368
6248
  ...makeRoundedProps(),
@@ -6390,9 +6270,6 @@
6390
6270
  if (!props.type) return props.icon;
6391
6271
  return props.icon ?? `$${props.type}`;
6392
6272
  });
6393
- const {
6394
- iconSize
6395
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6396
6273
  const {
6397
6274
  themeClasses
6398
6275
  } = provideTheme(props);
@@ -6440,11 +6317,6 @@
6440
6317
  const hasPrepend = !!(slots.prepend || icon.value);
6441
6318
  const hasTitle = !!(slots.title || props.title);
6442
6319
  const hasClose = !!(slots.close || props.closable);
6443
- const iconProps = {
6444
- density: props.density,
6445
- icon: icon.value,
6446
- size: iconSize.value
6447
- };
6448
6320
  return isActive.value && vue.createVNode(props.tag, {
6449
6321
  "class": vue.normalizeClass(['v-alert', props.border && {
6450
6322
  'v-alert--border': !!props.border,
@@ -6462,14 +6334,19 @@
6462
6334
  }, null), hasPrepend && vue.createElementVNode("div", {
6463
6335
  "key": "prepend",
6464
6336
  "class": "v-alert__prepend"
6465
- }, [!slots.prepend ? vue.createVNode(VIcon, vue.mergeProps({
6466
- "key": "prepend-icon"
6467
- }, iconProps), null) : vue.createVNode(VDefaultsProvider, {
6337
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
6338
+ "key": "prepend-icon",
6339
+ "density": props.density,
6340
+ "icon": icon.value,
6341
+ "size": props.prominent ? 44 : 28
6342
+ }, null) : vue.createVNode(VDefaultsProvider, {
6468
6343
  "key": "prepend-defaults",
6469
6344
  "disabled": !icon.value,
6470
6345
  "defaults": {
6471
6346
  VIcon: {
6472
- ...iconProps
6347
+ density: props.density,
6348
+ icon: icon.value,
6349
+ size: props.prominent ? 44 : 28
6473
6350
  }
6474
6351
  }
6475
6352
  }, slots.prepend)]), vue.createElementVNode("div", {
@@ -7994,7 +7871,6 @@
7994
7871
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7995
7872
  const makeVSlideGroupProps = propsFactory({
7996
7873
  centerActive: Boolean,
7997
- contentClass: null,
7998
7874
  direction: {
7999
7875
  type: String,
8000
7876
  default: 'horizontal'
@@ -8307,7 +8183,7 @@
8307
8183
  })]), vue.createElementVNode("div", {
8308
8184
  "key": "container",
8309
8185
  "ref": containerRef,
8310
- "class": vue.normalizeClass(['v-slide-group__container', props.contentClass]),
8186
+ "class": "v-slide-group__container",
8311
8187
  "onScroll": onScroll
8312
8188
  }, [vue.createElementVNode("div", {
8313
8189
  "ref": contentRef,
@@ -8670,85 +8546,16 @@
8670
8546
  }
8671
8547
  });
8672
8548
 
8673
- const makeVDividerProps = propsFactory({
8674
- color: String,
8675
- inset: Boolean,
8676
- length: [Number, String],
8677
- opacity: [Number, String],
8678
- thickness: [Number, String],
8679
- vertical: Boolean,
8680
- ...makeComponentProps(),
8681
- ...makeThemeProps()
8682
- }, 'VDivider');
8683
- const VDivider = genericComponent()({
8684
- name: 'VDivider',
8685
- props: makeVDividerProps(),
8686
- setup(props, _ref) {
8687
- let {
8688
- attrs,
8689
- slots
8690
- } = _ref;
8691
- const {
8692
- themeClasses
8693
- } = provideTheme(props);
8694
- const {
8695
- textColorClasses,
8696
- textColorStyles
8697
- } = useTextColor(() => props.color);
8698
- const dividerStyles = vue.computed(() => {
8699
- const styles = {};
8700
- if (props.length) {
8701
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8702
- }
8703
- if (props.thickness) {
8704
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8705
- }
8706
- return styles;
8707
- });
8708
- useRender(() => {
8709
- const divider = vue.createElementVNode("hr", {
8710
- "class": vue.normalizeClass([{
8711
- 'v-divider': true,
8712
- 'v-divider--inset': props.inset,
8713
- 'v-divider--vertical': props.vertical
8714
- }, themeClasses.value, textColorClasses.value, props.class]),
8715
- "style": vue.normalizeStyle([dividerStyles.value, textColorStyles.value, {
8716
- '--v-border-opacity': props.opacity
8717
- }, props.style]),
8718
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8719
- "role": `${attrs.role || 'separator'}`
8720
- }, null);
8721
- if (!slots.default) return divider;
8722
- return vue.createElementVNode("div", {
8723
- "class": vue.normalizeClass(['v-divider__wrapper', {
8724
- 'v-divider__wrapper--vertical': props.vertical,
8725
- 'v-divider__wrapper--inset': props.inset
8726
- }])
8727
- }, [divider, vue.createElementVNode("div", {
8728
- "class": "v-divider__content"
8729
- }, [slots.default()]), divider]);
8730
- });
8731
- return {};
8732
- }
8733
- });
8734
-
8735
8549
  // Utilities
8736
8550
 
8737
8551
  // List
8738
8552
  const ListKey = Symbol.for('vuetify:list');
8739
8553
  function createList() {
8740
- let {
8741
- filterable
8742
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
8743
- filterable: false
8744
- };
8745
8554
  const parent = vue.inject(ListKey, {
8746
- filterable: false,
8747
8555
  hasPrepend: vue.shallowRef(false),
8748
8556
  updateHasPrepend: () => null
8749
8557
  });
8750
8558
  const data = {
8751
- filterable: parent.filterable || filterable,
8752
8559
  hasPrepend: vue.shallowRef(false),
8753
8560
  updateHasPrepend: value => {
8754
8561
  if (value) data.hasPrepend.value = value;
@@ -9700,9 +9507,6 @@
9700
9507
  roundedClasses
9701
9508
  } = useRounded(roundedProps);
9702
9509
  const lineClasses = vue.toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
9703
- const rippleOptions = vue.toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
9704
- keys: [keyCodes.enter]
9705
- } : props.ripple);
9706
9510
  const slotProps = vue.computed(() => ({
9707
9511
  isActive: isActive.value,
9708
9512
  select,
@@ -9727,9 +9531,8 @@
9727
9531
  function onKeyDown(e) {
9728
9532
  const target = e.target;
9729
9533
  if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9730
- if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
9534
+ if (e.key === 'Enter' || e.key === ' ') {
9731
9535
  e.preventDefault();
9732
- e.stopPropagation();
9733
9536
  e.target.dispatchEvent(new MouseEvent('click', e));
9734
9537
  }
9735
9538
  }
@@ -9839,7 +9642,7 @@
9839
9642
  }), vue.createElementVNode("div", {
9840
9643
  "class": "v-list-item__spacer"
9841
9644
  }, null)])]
9842
- }), [[Ripple, isClickable.value && rippleOptions.value]]);
9645
+ }), [[Ripple, isClickable.value && props.ripple]]);
9843
9646
  });
9844
9647
  return {
9845
9648
  activate,
@@ -9894,6 +9697,68 @@
9894
9697
  }
9895
9698
  });
9896
9699
 
9700
+ const makeVDividerProps = propsFactory({
9701
+ color: String,
9702
+ inset: Boolean,
9703
+ length: [Number, String],
9704
+ opacity: [Number, String],
9705
+ thickness: [Number, String],
9706
+ vertical: Boolean,
9707
+ ...makeComponentProps(),
9708
+ ...makeThemeProps()
9709
+ }, 'VDivider');
9710
+ const VDivider = genericComponent()({
9711
+ name: 'VDivider',
9712
+ props: makeVDividerProps(),
9713
+ setup(props, _ref) {
9714
+ let {
9715
+ attrs,
9716
+ slots
9717
+ } = _ref;
9718
+ const {
9719
+ themeClasses
9720
+ } = provideTheme(props);
9721
+ const {
9722
+ textColorClasses,
9723
+ textColorStyles
9724
+ } = useTextColor(() => props.color);
9725
+ const dividerStyles = vue.computed(() => {
9726
+ const styles = {};
9727
+ if (props.length) {
9728
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9729
+ }
9730
+ if (props.thickness) {
9731
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9732
+ }
9733
+ return styles;
9734
+ });
9735
+ useRender(() => {
9736
+ const divider = vue.createElementVNode("hr", {
9737
+ "class": vue.normalizeClass([{
9738
+ 'v-divider': true,
9739
+ 'v-divider--inset': props.inset,
9740
+ 'v-divider--vertical': props.vertical
9741
+ }, themeClasses.value, textColorClasses.value, props.class]),
9742
+ "style": vue.normalizeStyle([dividerStyles.value, textColorStyles.value, {
9743
+ '--v-border-opacity': props.opacity
9744
+ }, props.style]),
9745
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9746
+ "role": `${attrs.role || 'separator'}`
9747
+ }, null);
9748
+ if (!slots.default) return divider;
9749
+ return vue.createElementVNode("div", {
9750
+ "class": vue.normalizeClass(['v-divider__wrapper', {
9751
+ 'v-divider__wrapper--vertical': props.vertical,
9752
+ 'v-divider__wrapper--inset': props.inset
9753
+ }])
9754
+ }, [divider, vue.createElementVNode("div", {
9755
+ "class": "v-divider__content"
9756
+ }, [slots.default()]), divider]);
9757
+ });
9758
+ return {};
9759
+ }
9760
+ });
9761
+
9897
9762
  // Types
9898
9763
 
9899
9764
  const makeVListChildrenProps = propsFactory({
@@ -10163,7 +10028,6 @@
10163
10028
  activeClass: String,
10164
10029
  bgColor: String,
10165
10030
  disabled: Boolean,
10166
- filterable: Boolean,
10167
10031
  expandIcon: IconValue,
10168
10032
  collapseIcon: IconValue,
10169
10033
  lines: {
@@ -10247,9 +10111,7 @@
10247
10111
  const activeColor = vue.toRef(() => props.activeColor);
10248
10112
  const baseColor = vue.toRef(() => props.baseColor);
10249
10113
  const color = vue.toRef(() => props.color);
10250
- createList({
10251
- filterable: props.filterable
10252
- });
10114
+ createList();
10253
10115
  provideDefaults({
10254
10116
  VListGroup: {
10255
10117
  activeColor,
@@ -11932,7 +11794,6 @@
11932
11794
  // disableKeys: Boolean,
11933
11795
  id: String,
11934
11796
  submenu: Boolean,
11935
- disableInitialFocus: Boolean,
11936
11797
  ...omit(makeVOverlayProps({
11937
11798
  closeDelay: 250,
11938
11799
  closeOnContentClick: true,
@@ -12007,7 +11868,7 @@
12007
11868
  vue.watch(isActive, val => {
12008
11869
  if (val) {
12009
11870
  parent?.register();
12010
- if (IN_BROWSER && !props.disableInitialFocus) {
11871
+ if (IN_BROWSER) {
12011
11872
  document.addEventListener('focusin', onFocusIn, {
12012
11873
  once: true
12013
11874
  });
@@ -12844,12 +12705,7 @@
12844
12705
  }
12845
12706
  function calculateOffset(index) {
12846
12707
  index = clamp(index, 0, items.value.length - 1);
12847
- const whole = Math.floor(index);
12848
- const fraction = index % 1;
12849
- const next = whole + 1;
12850
- const wholeOffset = offsets[whole] || 0;
12851
- const nextOffset = offsets[next] || wholeOffset;
12852
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12708
+ return offsets[index] || 0;
12853
12709
  }
12854
12710
  function calculateIndex(scrollTop) {
12855
12711
  return binaryClosest(offsets, scrollTop);
@@ -13203,7 +13059,6 @@
13203
13059
  },
13204
13060
  openOnClear: Boolean,
13205
13061
  itemColor: String,
13206
- noAutoScroll: Boolean,
13207
13062
  ...makeItemsProps({
13208
13063
  itemChildren: false
13209
13064
  })
@@ -13418,7 +13273,7 @@
13418
13273
  vue.watch(menu, () => {
13419
13274
  if (!props.hideSelected && menu.value && model.value.length) {
13420
13275
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
13421
- IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
13276
+ IN_BROWSER && window.requestAnimationFrame(() => {
13422
13277
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
13423
13278
  });
13424
13279
  }
@@ -13511,22 +13366,6 @@
13511
13366
  key: item.value,
13512
13367
  onClick: () => select(item, null)
13513
13368
  });
13514
- if (item.raw.type === 'divider') {
13515
- return slots.divider?.({
13516
- props: item.raw,
13517
- index
13518
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13519
- "key": `divider-${index}`
13520
- }), null);
13521
- }
13522
- if (item.raw.type === 'subheader') {
13523
- return slots.subheader?.({
13524
- props: item.raw,
13525
- index
13526
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
13527
- "key": `subheader-${index}`
13528
- }), null);
13529
- }
13530
13369
  return slots.item?.({
13531
13370
  item,
13532
13371
  index,
@@ -13687,9 +13526,6 @@
13687
13526
  let match = -1;
13688
13527
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13689
13528
  if (typeof item === 'object') {
13690
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13691
- continue;
13692
- }
13693
13529
  const filterKeys = keys || Object.keys(transformed);
13694
13530
  for (const key of filterKeys) {
13695
13531
  const value = getPropertyFromItem(transformed, key);
@@ -13892,7 +13728,7 @@
13892
13728
  menu.value = !menu.value;
13893
13729
  }
13894
13730
  function onListKeydown(e) {
13895
- if (checkPrintable(e) || e.key === 'Backspace') {
13731
+ if (e.key !== ' ' && checkPrintable(e)) {
13896
13732
  vTextFieldRef.value?.focus();
13897
13733
  }
13898
13734
  }
@@ -14097,7 +13933,6 @@
14097
13933
  }, props.menuProps), {
14098
13934
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
14099
13935
  "ref": listRef,
14100
- "filterable": true,
14101
13936
  "selected": selectedValues.value,
14102
13937
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14103
13938
  "onMousedown": e => e.preventDefault(),
@@ -14129,22 +13964,6 @@
14129
13964
  active: highlightFirst.value && index === 0 ? true : undefined,
14130
13965
  onClick: () => select(item, null)
14131
13966
  });
14132
- if (item.raw.type === 'divider') {
14133
- return slots.divider?.({
14134
- props: item.raw,
14135
- index
14136
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
14137
- "key": `divider-${index}`
14138
- }), null);
14139
- }
14140
- if (item.raw.type === 'subheader') {
14141
- return slots.subheader?.({
14142
- props: item.raw,
14143
- index
14144
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
14145
- "key": `subheader-${index}`
14146
- }), null);
14147
- }
14148
13967
  return slots.item?.({
14149
13968
  item,
14150
13969
  index,
@@ -14289,8 +14108,7 @@
14289
14108
  ...makeThemeProps(),
14290
14109
  ...makeTransitionProps({
14291
14110
  transition: 'scale-rotate-transition'
14292
- }),
14293
- ...makeDimensionProps()
14111
+ })
14294
14112
  }, 'VBadge');
14295
14113
  const VBadge = genericComponent()({
14296
14114
  name: 'VBadge',
@@ -14320,9 +14138,6 @@
14320
14138
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
14321
14139
  return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
14322
14140
  });
14323
- const {
14324
- dimensionStyles
14325
- } = useDimension(props);
14326
14141
  useRender(() => {
14327
14142
  const value = Number(props.content);
14328
14143
  const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
@@ -14344,7 +14159,7 @@
14344
14159
  }, {
14345
14160
  default: () => [vue.withDirectives(vue.createElementVNode("span", vue.mergeProps({
14346
14161
  "class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
14347
- "style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
14162
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
14348
14163
  "aria-atomic": "true",
14349
14164
  "aria-label": t(props.label, value),
14350
14165
  "aria-live": "polite",
@@ -17753,13 +17568,13 @@
17753
17568
  return null;
17754
17569
  }
17755
17570
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17756
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17571
+ function getWeekdays(locale, firstDayOfWeek) {
17757
17572
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17758
17573
  return createRange(7).map(i => {
17759
17574
  const weekday = new Date(sundayJanuarySecond2000);
17760
17575
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17761
17576
  return new Intl.DateTimeFormat(locale, {
17762
- weekday: weekdayFormat ?? 'narrow'
17577
+ weekday: 'narrow'
17763
17578
  }).format(weekday);
17764
17579
  });
17765
17580
  }
@@ -18223,9 +18038,9 @@
18223
18038
  getDiff(date, comparing, unit) {
18224
18039
  return getDiff(date, comparing, unit);
18225
18040
  }
18226
- getWeekdays(firstDayOfWeek, weekdayFormat) {
18041
+ getWeekdays(firstDayOfWeek) {
18227
18042
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
18228
- return getWeekdays(this.locale, firstDay, weekdayFormat);
18043
+ return getWeekdays(this.locale, firstDay);
18229
18044
  }
18230
18045
  getYear(date) {
18231
18046
  return getYear(date);
@@ -18580,7 +18395,6 @@
18580
18395
  _search.value = val ?? '';
18581
18396
  if (!props.multiple && !hasSelectionSlot.value) {
18582
18397
  model.value = [transformItem$3(props, val)];
18583
- vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18584
18398
  }
18585
18399
  if (val && props.multiple && props.delimiters?.length) {
18586
18400
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18661,7 +18475,7 @@
18661
18475
  menu.value = !menu.value;
18662
18476
  }
18663
18477
  function onListKeydown(e) {
18664
- if (checkPrintable(e) || e.key === 'Backspace') {
18478
+ if (e.key !== ' ' && checkPrintable(e)) {
18665
18479
  vTextFieldRef.value?.focus();
18666
18480
  }
18667
18481
  }
@@ -18866,7 +18680,6 @@
18866
18680
  }, props.menuProps), {
18867
18681
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
18868
18682
  "ref": listRef,
18869
- "filterable": true,
18870
18683
  "selected": selectedValues.value,
18871
18684
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18872
18685
  "onMousedown": e => e.preventDefault(),
@@ -18898,22 +18711,6 @@
18898
18711
  active: highlightFirst.value && index === 0 ? true : undefined,
18899
18712
  onClick: () => select(item, null)
18900
18713
  });
18901
- if (item.raw.type === 'divider') {
18902
- return slots.divider?.({
18903
- props: item.raw,
18904
- index
18905
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
18906
- "key": `divider-${index}`
18907
- }), null);
18908
- }
18909
- if (item.raw.type === 'subheader') {
18910
- return slots.subheader?.({
18911
- props: item.raw,
18912
- index
18913
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
18914
- "key": `subheader-${index}`
18915
- }), null);
18916
- }
18917
18714
  return slots.item?.({
18918
18715
  item,
18919
18716
  index,
@@ -20796,7 +20593,6 @@
20796
20593
  color: String,
20797
20594
  disableSort: Boolean,
20798
20595
  fixedHeader: Boolean,
20799
- lastFixed: Boolean,
20800
20596
  multiSort: Boolean,
20801
20597
  sortAscIcon: {
20802
20598
  type: IconValue,
@@ -20843,11 +20639,10 @@
20843
20639
  loaderClasses
20844
20640
  } = useLoader(props);
20845
20641
  function getFixedStyles(column, y) {
20846
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20642
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20847
20643
  return {
20848
20644
  position: 'sticky',
20849
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20850
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20645
+ left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20851
20646
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20852
20647
  };
20853
20648
  }
@@ -21363,18 +21158,11 @@
21363
21158
  }
21364
21159
  });
21365
21160
 
21366
- // Types
21367
-
21368
21161
  const makeVTableProps = propsFactory({
21369
21162
  fixedHeader: Boolean,
21370
21163
  fixedFooter: Boolean,
21371
21164
  height: [Number, String],
21372
21165
  hover: Boolean,
21373
- striped: {
21374
- type: String,
21375
- default: null,
21376
- validator: v => ['even', 'odd'].includes(v)
21377
- },
21378
21166
  ...makeComponentProps(),
21379
21167
  ...makeDensityProps(),
21380
21168
  ...makeTagProps(),
@@ -21401,9 +21189,7 @@
21401
21189
  'v-table--fixed-footer': props.fixedFooter,
21402
21190
  'v-table--has-top': !!slots.top,
21403
21191
  'v-table--has-bottom': !!slots.bottom,
21404
- 'v-table--hover': props.hover,
21405
- 'v-table--striped-even': props.striped === 'even',
21406
- 'v-table--striped-odd': props.striped === 'odd'
21192
+ 'v-table--hover': props.hover
21407
21193
  }, themeClasses.value, densityClasses.value, props.class]),
21408
21194
  "style": vue.normalizeStyle(props.style)
21409
21195
  }, {
@@ -22578,8 +22364,7 @@
22578
22364
  firstDayOfWeek: {
22579
22365
  type: [Number, String],
22580
22366
  default: undefined
22581
- },
22582
- weekdayFormat: String
22367
+ }
22583
22368
  }, 'calendar');
22584
22369
  function useCalendar(props) {
22585
22370
  const adapter = useDate();
@@ -22820,7 +22605,7 @@
22820
22605
  "ref": daysRef,
22821
22606
  "key": daysInMonth.value[0].date?.toString(),
22822
22607
  "class": "v-date-picker-month__days"
22823
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => vue.createElementVNode("div", {
22608
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => vue.createElementVNode("div", {
22824
22609
  "class": vue.normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22825
22610
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22826
22611
  const slotProps = {
@@ -23329,9 +23114,7 @@
23329
23114
  "max": maxDate.value,
23330
23115
  "year": year.value,
23331
23116
  "allowedMonths": allowedMonths
23332
- }), {
23333
- ...pick(slots, ['month'])
23334
- }) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
23117
+ }), null) : viewMode.value === 'year' ? vue.createVNode(VDatePickerYears, vue.mergeProps({
23335
23118
  "key": "date-picker-years"
23336
23119
  }, datePickerYearsProps, {
23337
23120
  "modelValue": year.value,
@@ -23339,9 +23122,7 @@
23339
23122
  "min": minDate.value,
23340
23123
  "max": maxDate.value,
23341
23124
  "allowedYears": allowedYears
23342
- }), {
23343
- ...pick(slots, ['year'])
23344
- }) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
23125
+ }), null) : vue.createVNode(VDatePickerMonth, vue.mergeProps({
23345
23126
  "key": "date-picker-month"
23346
23127
  }, datePickerMonthProps, {
23347
23128
  "modelValue": model.value,
@@ -23352,9 +23133,7 @@
23352
23133
  "onUpdate:year": [$event => year.value = $event, onUpdateYear],
23353
23134
  "min": minDate.value,
23354
23135
  "max": maxDate.value
23355
- }), {
23356
- ...pick(slots, ['day'])
23357
- })]
23136
+ }), null)]
23358
23137
  })]),
23359
23138
  actions: slots.actions
23360
23139
  });
@@ -24445,9 +24224,6 @@
24445
24224
  startStatus.value = status;
24446
24225
  } else if (side === 'end') {
24447
24226
  endStatus.value = status;
24448
- } else if (side === 'both') {
24449
- startStatus.value = status;
24450
- endStatus.value = status;
24451
24227
  }
24452
24228
  }
24453
24229
  function getStatus(side) {
@@ -24559,32 +24335,6 @@
24559
24335
  }, [renderSide('end', endStatus.value)])]
24560
24336
  });
24561
24337
  });
24562
- function reset(side) {
24563
- const effectiveSide = side ?? props.side;
24564
- setStatus(effectiveSide, 'ok');
24565
- vue.nextTick(() => {
24566
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
24567
- if (props.mode !== 'manual') {
24568
- vue.nextTick(() => {
24569
- window.requestAnimationFrame(() => {
24570
- window.requestAnimationFrame(() => {
24571
- window.requestAnimationFrame(() => {
24572
- if (effectiveSide === 'both') {
24573
- intersecting('start');
24574
- intersecting('end');
24575
- } else {
24576
- intersecting(effectiveSide);
24577
- }
24578
- });
24579
- });
24580
- });
24581
- });
24582
- }
24583
- });
24584
- }
24585
- return {
24586
- reset
24587
- };
24588
24338
  }
24589
24339
  });
24590
24340
 
@@ -24664,47 +24414,8 @@
24664
24414
  }
24665
24415
  });
24666
24416
 
24667
- const makeVKbdProps = propsFactory({
24668
- ...makeBorderProps(),
24669
- ...makeComponentProps(),
24670
- ...makeRoundedProps(),
24671
- ...makeTagProps({
24672
- tag: 'kbd'
24673
- }),
24674
- ...makeThemeProps(),
24675
- ...makeElevationProps(),
24676
- color: String
24677
- }, 'VKbd');
24678
- const VKbd = genericComponent()({
24679
- name: 'VKbd',
24680
- props: makeVKbdProps(),
24681
- setup(props, _ref) {
24682
- let {
24683
- slots
24684
- } = _ref;
24685
- const {
24686
- themeClasses
24687
- } = provideTheme(props);
24688
- const {
24689
- borderClasses
24690
- } = useBorder(props);
24691
- const {
24692
- roundedClasses
24693
- } = useRounded(props);
24694
- const {
24695
- backgroundColorClasses,
24696
- backgroundColorStyles
24697
- } = useBackgroundColor(() => props.color);
24698
- const {
24699
- elevationClasses
24700
- } = useElevation(props);
24701
- useRender(() => vue.createVNode(props.tag, {
24702
- "class": vue.normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
24703
- "style": vue.normalizeStyle([backgroundColorStyles.value, props.style])
24704
- }, slots));
24705
- return {};
24706
- }
24707
- });
24417
+ // Styles
24418
+ const VKbd = createSimpleFunctional('v-kbd', 'kbd');
24708
24419
 
24709
24420
  const makeVLayoutProps = propsFactory({
24710
24421
  ...makeComponentProps(),
@@ -25542,14 +25253,6 @@
25542
25253
  type: Number,
25543
25254
  default: 0
25544
25255
  },
25545
- minFractionDigits: {
25546
- type: Number,
25547
- default: null
25548
- },
25549
- decimalSeparator: {
25550
- type: String,
25551
- validator: v => !v || v.length === 1
25552
- },
25553
25256
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25554
25257
  }, 'VNumberInput');
25555
25258
  const VNumberInput = genericComponent()({
@@ -25575,24 +25278,11 @@
25575
25278
  const form = useForm(props);
25576
25279
  const controlsDisabled = vue.computed(() => form.isDisabled.value || form.isReadonly.value);
25577
25280
  const isFocused = vue.shallowRef(props.focused);
25578
- const {
25579
- decimalSeparator: decimalSeparatorFromLocale
25580
- } = useLocale();
25581
- const decimalSeparator = vue.computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
25582
25281
  function correctPrecision(val) {
25583
25282
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25584
- let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
25585
25283
  const fixed = precision == null ? String(val) : val.toFixed(precision);
25586
- if (isFocused.value && trim) {
25587
- return Number(fixed).toString() // trim zeros
25588
- .replace('.', decimalSeparator.value);
25589
- }
25590
- if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
25591
- return fixed.replace('.', decimalSeparator.value);
25592
- }
25593
- let [baseDigits, fractionDigits] = fixed.split('.');
25594
- fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
25595
- return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
25284
+ return isFocused.value ? Number(fixed).toString() // trim zeros
25285
+ : fixed;
25596
25286
  }
25597
25287
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25598
25288
  const _inputText = vue.shallowRef(null);
@@ -25609,11 +25299,8 @@
25609
25299
  if (val === null || val === '') {
25610
25300
  model.value = null;
25611
25301
  _inputText.value = null;
25612
- return;
25613
- }
25614
- const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
25615
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
25616
- model.value = parsedValue;
25302
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
25303
+ model.value = Number(val);
25617
25304
  _inputText.value = val;
25618
25305
  }
25619
25306
  }
@@ -25650,7 +25337,6 @@
25650
25337
  }
25651
25338
  };
25652
25339
  vue.watch(() => props.precision, () => formatInputValue());
25653
- vue.watch(() => props.minFractionDigits, () => formatInputValue());
25654
25340
  vue.onMounted(() => {
25655
25341
  clampModel();
25656
25342
  });
@@ -25684,24 +25370,24 @@
25684
25370
  selectionEnd
25685
25371
  } = inputElement ?? {};
25686
25372
  const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
25687
- const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
25373
+ const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
25688
25374
 
25689
- // Allow only numbers, "-" and {decimal separator}
25690
- // Allow "-" and {decimal separator} only once
25691
- // Allow "-" only at the start
25692
- if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
25375
+ // Only numbers, "-", "." are allowed
25376
+ // AND "-", "." are allowed only once
25377
+ // AND "-" is only allowed at the start
25378
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
25693
25379
  e.preventDefault();
25694
25380
  inputElement.value = potentialNewNumber;
25695
25381
  }
25696
25382
  if (props.precision == null) return;
25697
25383
 
25698
25384
  // Ignore decimal digits above precision limit
25699
- if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
25385
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
25700
25386
  e.preventDefault();
25701
25387
  inputElement.value = potentialNewNumber;
25702
25388
  }
25703
25389
  // Ignore decimal separator when precision = 0
25704
- if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
25390
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
25705
25391
  e.preventDefault();
25706
25392
  inputElement.value = potentialNewNumber;
25707
25393
  }
@@ -25753,16 +25439,19 @@
25753
25439
  if (controlsDisabled.value) return;
25754
25440
  if (!vTextFieldRef.value) return;
25755
25441
  const actualText = vTextFieldRef.value.value;
25756
- const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
25757
- if (actualText && !isNaN(parsedValue)) {
25758
- inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
25442
+ if (actualText && !isNaN(Number(actualText))) {
25443
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
25759
25444
  } else {
25760
25445
  inputText.value = null;
25761
25446
  }
25762
25447
  }
25763
25448
  function formatInputValue() {
25764
25449
  if (controlsDisabled.value) return;
25765
- inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
25450
+ if (model.value === null || isNaN(model.value)) {
25451
+ inputText.value = null;
25452
+ return;
25453
+ }
25454
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25766
25455
  }
25767
25456
  function trimDecimalZeros() {
25768
25457
  if (controlsDisabled.value) return;
@@ -25770,7 +25459,7 @@
25770
25459
  inputText.value = null;
25771
25460
  return;
25772
25461
  }
25773
- inputText.value = model.value.toString().replace('.', decimalSeparator.value);
25462
+ inputText.value = model.value.toString();
25774
25463
  }
25775
25464
  function onFocus() {
25776
25465
  trimDecimalZeros();
@@ -26037,10 +25726,9 @@
26037
25726
  e.preventDefault();
26038
25727
  e.stopPropagation();
26039
25728
  const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
26040
- const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
26041
25729
  if (isValidNumber(clipboardText)) return;
26042
25730
  model.value = clipboardText.split('');
26043
- inputRef.value?.[finalIndex].focus();
25731
+ inputRef.value?.[index].blur();
26044
25732
  }
26045
25733
  function reset() {
26046
25734
  model.value = [];
@@ -29824,7 +29512,7 @@
29824
29512
  };
29825
29513
  });
29826
29514
  }
29827
- const version$1 = "3.8.10-dev.2025-06-18";
29515
+ const version$1 = "3.8.10-master.2025-06-18";
29828
29516
  createVuetify$1.version = version$1;
29829
29517
 
29830
29518
  // Vue's inject() can only be used in setup
@@ -29849,7 +29537,7 @@
29849
29537
  ...options
29850
29538
  });
29851
29539
  };
29852
- const version = "3.8.10-dev.2025-06-18";
29540
+ const version = "3.8.10-master.2025-06-18";
29853
29541
  createVuetify.version = version;
29854
29542
 
29855
29543
  exports.blueprints = index;