@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,10 +1,10 @@
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, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, 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, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, createElementVNode, normalizeStyle, normalizeClass, createVNode, TransitionGroup, Transition, mergeProps, toRefs, toValue, 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
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -81,7 +81,6 @@ const IN_BROWSER = typeof window !== 'undefined';
81
81
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
82
82
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
83
83
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
84
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
85
84
 
86
85
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
87
86
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -588,23 +587,18 @@ function checkPrintable(e) {
588
587
  function isPrimitive(value) {
589
588
  return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
590
589
  }
591
- function escapeForRegex(sign) {
592
- return '\\^$*+?.()|{}[]'.includes(sign) ? `\\${sign}` : sign;
593
- }
594
- function extractNumber(text, decimalDigitsLimit, decimalSeparator) {
595
- const onlyValidCharacters = new RegExp(`[\\d\\-${escapeForRegex(decimalSeparator)}]`);
596
- const cleanText = text.split('').filter(x => onlyValidCharacters.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
590
+ function extractNumber(text, decimalDigitsLimit) {
591
+ const cleanText = text.split('').filter(x => /[\d\-.]/.test(x)).filter((x, i, all) => i === 0 && /[-]/.test(x) ||
597
592
  // sign allowed at the start
598
- x === decimalSeparator && i === all.indexOf(x) ||
593
+ x === '.' && i === all.indexOf('.') ||
599
594
  // decimal separator allowed only once
600
595
  /\d/.test(x)).join('');
601
596
  if (decimalDigitsLimit === 0) {
602
- return cleanText.split(decimalSeparator)[0];
597
+ return cleanText.split('.')[0];
603
598
  }
604
- const decimalPart = new RegExp(`${escapeForRegex(decimalSeparator)}\\d`);
605
- if (decimalDigitsLimit !== null && decimalPart.test(cleanText)) {
606
- const parts = cleanText.split(decimalSeparator);
607
- return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join(decimalSeparator);
599
+ if (decimalDigitsLimit !== null && /\.\d/.test(cleanText)) {
600
+ const parts = cleanText.split('.');
601
+ return [parts[0], parts[1].substring(0, decimalDigitsLimit)].join('.');
608
602
  }
609
603
  return cleanText;
610
604
  }
@@ -2187,10 +2181,6 @@ function createNumberFunction(current, fallback) {
2187
2181
  return numberFormat.format(value);
2188
2182
  };
2189
2183
  }
2190
- function inferDecimalSeparator(current, fallback) {
2191
- const format = createNumberFunction(current, fallback);
2192
- return format(0.1).includes(',') ? ',' : '.';
2193
- }
2194
2184
  function useProvided(props, prop, provided) {
2195
2185
  const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
2196
2186
 
@@ -2213,7 +2203,6 @@ function createProvideFunction(state) {
2213
2203
  current,
2214
2204
  fallback,
2215
2205
  messages,
2216
- decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
2217
2206
  t: createTranslateFunction(current, fallback, messages),
2218
2207
  n: createNumberFunction(current, fallback),
2219
2208
  provide: createProvideFunction({
@@ -2236,7 +2225,6 @@ function createVuetifyAdapter(options) {
2236
2225
  current,
2237
2226
  fallback,
2238
2227
  messages,
2239
- decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
2240
2228
  t: createTranslateFunction(current, fallback, messages),
2241
2229
  n: createNumberFunction(current, fallback),
2242
2230
  provide: createProvideFunction({
@@ -2363,7 +2351,6 @@ const makeThemeProps = propsFactory({
2363
2351
  function genDefaults$2() {
2364
2352
  return {
2365
2353
  defaultTheme: 'light',
2366
- prefix: 'v-',
2367
2354
  variations: {
2368
2355
  colors: [],
2369
2356
  lighten: 0,
@@ -2401,8 +2388,8 @@ function genDefaults$2() {
2401
2388
  'activated-opacity': 0.12,
2402
2389
  'pressed-opacity': 0.12,
2403
2390
  'dragged-opacity': 0.08,
2404
- 'theme-kbd': '#EEEEEE',
2405
- 'theme-on-kbd': '#000000',
2391
+ 'theme-kbd': '#212529',
2392
+ 'theme-on-kbd': '#FFFFFF',
2406
2393
  'theme-code': '#F5F5F5',
2407
2394
  'theme-on-code': '#000000'
2408
2395
  }
@@ -2438,17 +2425,14 @@ function genDefaults$2() {
2438
2425
  'activated-opacity': 0.12,
2439
2426
  'pressed-opacity': 0.16,
2440
2427
  'dragged-opacity': 0.08,
2441
- 'theme-kbd': '#424242',
2428
+ 'theme-kbd': '#212529',
2442
2429
  'theme-on-kbd': '#FFFFFF',
2443
2430
  'theme-code': '#343434',
2444
2431
  'theme-on-code': '#CCCCCC'
2445
2432
  }
2446
2433
  }
2447
2434
  },
2448
- stylesheetId: 'vuetify-theme-stylesheet',
2449
- scoped: false,
2450
- unimportant: false,
2451
- utilities: true
2435
+ stylesheetId: 'vuetify-theme-stylesheet'
2452
2436
  };
2453
2437
  }
2454
2438
  function parseThemeOptions() {
@@ -2471,21 +2455,21 @@ function parseThemeOptions() {
2471
2455
  function createCssClass(lines, selector, content, scope) {
2472
2456
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2473
2457
  }
2474
- function genCssVariables(theme, prefix) {
2458
+ function genCssVariables(theme) {
2475
2459
  const lightOverlay = theme.dark ? 2 : 1;
2476
2460
  const darkOverlay = theme.dark ? 1 : 2;
2477
2461
  const variables = [];
2478
2462
  for (const [key, value] of Object.entries(theme.colors)) {
2479
2463
  const rgb = parseColor(value);
2480
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2464
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2481
2465
  if (!key.startsWith('on-')) {
2482
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2466
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2483
2467
  }
2484
2468
  }
2485
2469
  for (const [key, value] of Object.entries(theme.variables)) {
2486
2470
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2487
2471
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2488
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2472
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2489
2473
  }
2490
2474
  return variables;
2491
2475
  }
@@ -2529,8 +2513,7 @@ function getScopedSelector(selector, scope) {
2529
2513
  const scopeSelector = `:where(${scope})`;
2530
2514
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2531
2515
  }
2532
- function upsertStyles(id, cspNonce, styles) {
2533
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2516
+ function upsertStyles(styleEl, styles) {
2534
2517
  if (!styleEl) return;
2535
2518
  styleEl.innerHTML = styles;
2536
2519
  }
@@ -2550,17 +2533,8 @@ function getOrCreateStyleElement(id, cspNonce) {
2550
2533
  // Composables
2551
2534
  function createTheme(options) {
2552
2535
  const parsedOptions = parseThemeOptions(options);
2553
- const _name = shallowRef(parsedOptions.defaultTheme);
2536
+ const name = shallowRef(parsedOptions.defaultTheme);
2554
2537
  const themes = ref(parsedOptions.themes);
2555
- const systemName = shallowRef('light');
2556
- const name = computed({
2557
- get() {
2558
- return _name.value === 'system' ? systemName.value : _name.value;
2559
- },
2560
- set(val) {
2561
- _name.value = val;
2562
- }
2563
- });
2564
2538
  const computedThemes = computed(() => {
2565
2539
  const acc = {};
2566
2540
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2581,49 +2555,28 @@ function createTheme(options) {
2581
2555
  const current = toRef(() => computedThemes.value[name.value]);
2582
2556
  const styles = computed(() => {
2583
2557
  const lines = [];
2584
- const important = parsedOptions.unimportant ? '' : ' !important';
2585
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2586
2558
  if (current.value?.dark) {
2587
2559
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2588
2560
  }
2589
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2561
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2590
2562
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2591
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2592
- }
2593
- if (parsedOptions.utilities) {
2594
- const bgLines = [];
2595
- const fgLines = [];
2596
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2597
- for (const key of colors) {
2598
- if (key.startsWith('on-')) {
2599
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2600
- } else {
2601
- 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);
2602
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2603
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
2604
- }
2563
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2564
+ }
2565
+ const bgLines = [];
2566
+ const fgLines = [];
2567
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2568
+ for (const key of colors) {
2569
+ if (key.startsWith('on-')) {
2570
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2571
+ } else {
2572
+ 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);
2573
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2574
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2605
2575
  }
2606
- lines.push(...bgLines, ...fgLines);
2607
2576
  }
2577
+ lines.push(...bgLines, ...fgLines);
2608
2578
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2609
2579
  });
2610
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
2611
- const themeNames = toRef(() => Object.keys(computedThemes.value));
2612
- if (SUPPORTS_MATCH_MEDIA) {
2613
- const media = window.matchMedia('(prefers-color-scheme: dark)');
2614
- function updateSystemName() {
2615
- systemName.value = media.matches ? 'dark' : 'light';
2616
- }
2617
- updateSystemName();
2618
- media.addEventListener('change', updateSystemName, {
2619
- passive: true
2620
- });
2621
- if (getCurrentScope()) {
2622
- onScopeDispose(() => {
2623
- media.removeEventListener('change', updateSystemName);
2624
- });
2625
- }
2626
- }
2627
2580
  function install(app) {
2628
2581
  if (parsedOptions.isDisabled) return;
2629
2582
  const head = app._context.provides.usehead;
@@ -2661,55 +2614,22 @@ function createTheme(options) {
2661
2614
  updateStyles();
2662
2615
  }
2663
2616
  function updateStyles() {
2664
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
2617
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2665
2618
  }
2666
2619
  }
2667
2620
  }
2668
- function change(themeName) {
2669
- if (!themeNames.value.includes(themeName)) {
2670
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
2671
- return;
2672
- }
2673
- name.value = themeName;
2674
- }
2675
- function cycle() {
2676
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
2677
- const currentIndex = themeArray.indexOf(name.value);
2678
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
2679
- change(themeArray[nextIndex]);
2680
- }
2681
- function toggle() {
2682
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
2683
- cycle(themeArray);
2684
- }
2685
- const globalName = new Proxy(name, {
2686
- get(target, prop) {
2687
- return target[prop];
2688
- },
2689
- set(target, prop, val) {
2690
- if (prop === 'value') {
2691
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
2692
- }
2693
- // @ts-expect-error
2694
- target[prop] = val;
2695
- return true;
2696
- }
2697
- });
2621
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
2698
2622
  return {
2699
2623
  install,
2700
- change,
2701
- cycle,
2702
- toggle,
2703
2624
  isDisabled: parsedOptions.isDisabled,
2704
2625
  name,
2705
2626
  themes,
2706
2627
  current,
2707
2628
  computedThemes,
2708
- prefix: parsedOptions.prefix,
2709
2629
  themeClasses,
2710
2630
  styles,
2711
2631
  global: {
2712
- name: globalName,
2632
+ name,
2713
2633
  current
2714
2634
  }
2715
2635
  };
@@ -2720,7 +2640,7 @@ function provideTheme(props) {
2720
2640
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2721
2641
  const name = toRef(() => props.theme ?? theme.name.value);
2722
2642
  const current = toRef(() => theme.themes.value[name.value]);
2723
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
2643
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2724
2644
  const newTheme = {
2725
2645
  ...theme,
2726
2646
  name,
@@ -3824,10 +3744,7 @@ const makeVToolbarProps = propsFactory({
3824
3744
  default: 'default',
3825
3745
  validator: v => allowedDensities$1.includes(v)
3826
3746
  },
3827
- extended: {
3828
- type: Boolean,
3829
- default: null
3830
- },
3747
+ extended: Boolean,
3831
3748
  extensionHeight: {
3832
3749
  type: [Number, String],
3833
3750
  default: 48
@@ -3875,7 +3792,7 @@ const VToolbar = genericComponent()({
3875
3792
  const {
3876
3793
  rtlClasses
3877
3794
  } = useRtl();
3878
- const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
3795
+ const isExtended = shallowRef(!!(props.extended || slots.extension?.()));
3879
3796
  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));
3880
3797
  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);
3881
3798
  provideDefaults({
@@ -3887,7 +3804,7 @@ const VToolbar = genericComponent()({
3887
3804
  const hasTitle = !!(props.title || slots.title);
3888
3805
  const hasImage = !!(slots.image || props.image);
3889
3806
  const extension = slots.extension?.();
3890
- isExtended.value = props.extended === null ? !!extension : props.extended;
3807
+ isExtended.value = !!(props.extended || extension);
3891
3808
  return createVNode(props.tag, {
3892
3809
  "class": normalizeClass(['v-toolbar', {
3893
3810
  'v-toolbar--absolute': props.absolute,
@@ -4270,15 +4187,9 @@ function useVariant(props) {
4270
4187
  };
4271
4188
  }
4272
4189
 
4273
- // Types
4274
-
4275
4190
  const makeVBtnGroupProps = propsFactory({
4276
4191
  baseColor: String,
4277
4192
  divided: Boolean,
4278
- direction: {
4279
- type: String,
4280
- default: 'horizontal'
4281
- },
4282
4193
  ...makeBorderProps(),
4283
4194
  ...makeComponentProps(),
4284
4195
  ...makeDensityProps(),
@@ -4312,7 +4223,7 @@ const VBtnGroup = genericComponent()({
4312
4223
  } = useRounded(props);
4313
4224
  provideDefaults({
4314
4225
  VBtn: {
4315
- height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4226
+ height: 'auto',
4316
4227
  baseColor: toRef(() => props.baseColor),
4317
4228
  color: toRef(() => props.color),
4318
4229
  density: toRef(() => props.density),
@@ -4322,7 +4233,7 @@ const VBtnGroup = genericComponent()({
4322
4233
  });
4323
4234
  useRender(() => {
4324
4235
  return createVNode(props.tag, {
4325
- "class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4236
+ "class": normalizeClass(['v-btn-group', {
4326
4237
  'v-btn-group--divided': props.divided
4327
4238
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4328
4239
  "style": normalizeStyle(props.style)
@@ -5655,8 +5566,8 @@ function rippleCancelShow(e) {
5655
5566
  window.clearTimeout(element._ripple.showTimer);
5656
5567
  }
5657
5568
  let keyboardRipple = false;
5658
- function keyboardRippleShow(e, keys) {
5659
- if (!keyboardRipple && keys.includes(e.keyCode)) {
5569
+ function keyboardRippleShow(e) {
5570
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
5660
5571
  keyboardRipple = true;
5661
5572
  rippleShow(e);
5662
5573
  }
@@ -5684,12 +5595,9 @@ function updateRipple(el, binding, wasEnabled) {
5684
5595
  el._ripple.enabled = enabled;
5685
5596
  el._ripple.centered = modifiers.center;
5686
5597
  el._ripple.circle = modifiers.circle;
5687
- const bindingValue = isObject(value) ? value : {};
5688
- if (bindingValue.class) {
5689
- el._ripple.class = bindingValue.class;
5598
+ if (isObject(value) && value.class) {
5599
+ el._ripple.class = value.class;
5690
5600
  }
5691
- const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
5692
- el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
5693
5601
  if (enabled && !wasEnabled) {
5694
5602
  if (modifiers.stop) {
5695
5603
  el.addEventListener('touchstart', rippleStop, {
@@ -5711,7 +5619,7 @@ function updateRipple(el, binding, wasEnabled) {
5711
5619
  el.addEventListener('mousedown', rippleShow);
5712
5620
  el.addEventListener('mouseup', rippleHide);
5713
5621
  el.addEventListener('mouseleave', rippleHide);
5714
- el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
5622
+ el.addEventListener('keydown', keyboardRippleShow);
5715
5623
  el.addEventListener('keyup', keyboardRippleHide);
5716
5624
  el.addEventListener('blur', focusRippleHide);
5717
5625
 
@@ -5731,9 +5639,7 @@ function removeListeners(el) {
5731
5639
  el.removeEventListener('touchcancel', rippleHide);
5732
5640
  el.removeEventListener('mouseup', rippleHide);
5733
5641
  el.removeEventListener('mouseleave', rippleHide);
5734
- if (el._ripple?.keyDownHandler) {
5735
- el.removeEventListener('keydown', el._ripple.keyDownHandler);
5736
- }
5642
+ el.removeEventListener('keydown', keyboardRippleShow);
5737
5643
  el.removeEventListener('keyup', keyboardRippleHide);
5738
5644
  el.removeEventListener('dragstart', rippleHide);
5739
5645
  el.removeEventListener('blur', focusRippleHide);
@@ -5742,8 +5648,8 @@ function mounted$4(el, binding) {
5742
5648
  updateRipple(el, binding, false);
5743
5649
  }
5744
5650
  function unmounted$4(el) {
5745
- removeListeners(el);
5746
5651
  delete el._ripple;
5652
+ removeListeners(el);
5747
5653
  }
5748
5654
  function updated$1(el, binding) {
5749
5655
  if (binding.value === binding.oldValue) {
@@ -6016,31 +5922,6 @@ const VAppBarTitle = genericComponent()({
6016
5922
  // Utilities
6017
5923
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6018
5924
 
6019
- // Utilities
6020
-
6021
- // Types
6022
-
6023
- // Types
6024
-
6025
- // Composables
6026
- const makeIconSizeProps = propsFactory({
6027
- iconSize: [Number, String],
6028
- iconSizes: {
6029
- type: Array,
6030
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6031
- }
6032
- }, 'iconSize');
6033
- function useIconSizes(props, fallback) {
6034
- const iconSize = computed(() => {
6035
- const iconSizeMap = new Map(props.iconSizes);
6036
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6037
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6038
- });
6039
- return {
6040
- iconSize
6041
- };
6042
- }
6043
-
6044
5925
  // Types
6045
5926
 
6046
5927
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6080,7 +5961,6 @@ const makeVAlertProps = propsFactory({
6080
5961
  ...makeDensityProps(),
6081
5962
  ...makeDimensionProps(),
6082
5963
  ...makeElevationProps(),
6083
- ...makeIconSizeProps(),
6084
5964
  ...makeLocationProps(),
6085
5965
  ...makePositionProps(),
6086
5966
  ...makeRoundedProps(),
@@ -6108,9 +5988,6 @@ const VAlert = genericComponent()({
6108
5988
  if (!props.type) return props.icon;
6109
5989
  return props.icon ?? `$${props.type}`;
6110
5990
  });
6111
- const {
6112
- iconSize
6113
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6114
5991
  const {
6115
5992
  themeClasses
6116
5993
  } = provideTheme(props);
@@ -6158,11 +6035,6 @@ const VAlert = genericComponent()({
6158
6035
  const hasPrepend = !!(slots.prepend || icon.value);
6159
6036
  const hasTitle = !!(slots.title || props.title);
6160
6037
  const hasClose = !!(slots.close || props.closable);
6161
- const iconProps = {
6162
- density: props.density,
6163
- icon: icon.value,
6164
- size: iconSize.value
6165
- };
6166
6038
  return isActive.value && createVNode(props.tag, {
6167
6039
  "class": normalizeClass(['v-alert', props.border && {
6168
6040
  'v-alert--border': !!props.border,
@@ -6180,14 +6052,19 @@ const VAlert = genericComponent()({
6180
6052
  }, null), hasPrepend && createElementVNode("div", {
6181
6053
  "key": "prepend",
6182
6054
  "class": "v-alert__prepend"
6183
- }, [!slots.prepend ? createVNode(VIcon, mergeProps({
6184
- "key": "prepend-icon"
6185
- }, iconProps), null) : createVNode(VDefaultsProvider, {
6055
+ }, [!slots.prepend ? createVNode(VIcon, {
6056
+ "key": "prepend-icon",
6057
+ "density": props.density,
6058
+ "icon": icon.value,
6059
+ "size": props.prominent ? 44 : 28
6060
+ }, null) : createVNode(VDefaultsProvider, {
6186
6061
  "key": "prepend-defaults",
6187
6062
  "disabled": !icon.value,
6188
6063
  "defaults": {
6189
6064
  VIcon: {
6190
- ...iconProps
6065
+ density: props.density,
6066
+ icon: icon.value,
6067
+ size: props.prominent ? 44 : 28
6191
6068
  }
6192
6069
  }
6193
6070
  }, slots.prepend)]), createElementVNode("div", {
@@ -7712,7 +7589,6 @@ function getOffsetPosition(isHorizontal, element) {
7712
7589
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7713
7590
  const makeVSlideGroupProps = propsFactory({
7714
7591
  centerActive: Boolean,
7715
- contentClass: null,
7716
7592
  direction: {
7717
7593
  type: String,
7718
7594
  default: 'horizontal'
@@ -8025,7 +7901,7 @@ const VSlideGroup = genericComponent()({
8025
7901
  })]), createElementVNode("div", {
8026
7902
  "key": "container",
8027
7903
  "ref": containerRef,
8028
- "class": normalizeClass(['v-slide-group__container', props.contentClass]),
7904
+ "class": "v-slide-group__container",
8029
7905
  "onScroll": onScroll
8030
7906
  }, [createElementVNode("div", {
8031
7907
  "ref": contentRef,
@@ -8388,85 +8264,16 @@ const VChip = genericComponent()({
8388
8264
  }
8389
8265
  });
8390
8266
 
8391
- const makeVDividerProps = propsFactory({
8392
- color: String,
8393
- inset: Boolean,
8394
- length: [Number, String],
8395
- opacity: [Number, String],
8396
- thickness: [Number, String],
8397
- vertical: Boolean,
8398
- ...makeComponentProps(),
8399
- ...makeThemeProps()
8400
- }, 'VDivider');
8401
- const VDivider = genericComponent()({
8402
- name: 'VDivider',
8403
- props: makeVDividerProps(),
8404
- setup(props, _ref) {
8405
- let {
8406
- attrs,
8407
- slots
8408
- } = _ref;
8409
- const {
8410
- themeClasses
8411
- } = provideTheme(props);
8412
- const {
8413
- textColorClasses,
8414
- textColorStyles
8415
- } = useTextColor(() => props.color);
8416
- const dividerStyles = computed(() => {
8417
- const styles = {};
8418
- if (props.length) {
8419
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8420
- }
8421
- if (props.thickness) {
8422
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8423
- }
8424
- return styles;
8425
- });
8426
- useRender(() => {
8427
- const divider = createElementVNode("hr", {
8428
- "class": normalizeClass([{
8429
- 'v-divider': true,
8430
- 'v-divider--inset': props.inset,
8431
- 'v-divider--vertical': props.vertical
8432
- }, themeClasses.value, textColorClasses.value, props.class]),
8433
- "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
8434
- '--v-border-opacity': props.opacity
8435
- }, props.style]),
8436
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8437
- "role": `${attrs.role || 'separator'}`
8438
- }, null);
8439
- if (!slots.default) return divider;
8440
- return createElementVNode("div", {
8441
- "class": normalizeClass(['v-divider__wrapper', {
8442
- 'v-divider__wrapper--vertical': props.vertical,
8443
- 'v-divider__wrapper--inset': props.inset
8444
- }])
8445
- }, [divider, createElementVNode("div", {
8446
- "class": "v-divider__content"
8447
- }, [slots.default()]), divider]);
8448
- });
8449
- return {};
8450
- }
8451
- });
8452
-
8453
8267
  // Utilities
8454
8268
 
8455
8269
  // List
8456
8270
  const ListKey = Symbol.for('vuetify:list');
8457
8271
  function createList() {
8458
- let {
8459
- filterable
8460
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
8461
- filterable: false
8462
- };
8463
8272
  const parent = inject$1(ListKey, {
8464
- filterable: false,
8465
8273
  hasPrepend: shallowRef(false),
8466
8274
  updateHasPrepend: () => null
8467
8275
  });
8468
8276
  const data = {
8469
- filterable: parent.filterable || filterable,
8470
8277
  hasPrepend: shallowRef(false),
8471
8278
  updateHasPrepend: value => {
8472
8279
  if (value) data.hasPrepend.value = value;
@@ -9418,9 +9225,6 @@ const VListItem = genericComponent()({
9418
9225
  roundedClasses
9419
9226
  } = useRounded(roundedProps);
9420
9227
  const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
9421
- const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
9422
- keys: [keyCodes.enter]
9423
- } : props.ripple);
9424
9228
  const slotProps = computed(() => ({
9425
9229
  isActive: isActive.value,
9426
9230
  select,
@@ -9445,9 +9249,8 @@ const VListItem = genericComponent()({
9445
9249
  function onKeyDown(e) {
9446
9250
  const target = e.target;
9447
9251
  if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9448
- if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
9252
+ if (e.key === 'Enter' || e.key === ' ') {
9449
9253
  e.preventDefault();
9450
- e.stopPropagation();
9451
9254
  e.target.dispatchEvent(new MouseEvent('click', e));
9452
9255
  }
9453
9256
  }
@@ -9557,7 +9360,7 @@ const VListItem = genericComponent()({
9557
9360
  }), createElementVNode("div", {
9558
9361
  "class": "v-list-item__spacer"
9559
9362
  }, null)])]
9560
- }), [[Ripple, isClickable.value && rippleOptions.value]]);
9363
+ }), [[Ripple, isClickable.value && props.ripple]]);
9561
9364
  });
9562
9365
  return {
9563
9366
  activate,
@@ -9612,6 +9415,68 @@ const VListSubheader = genericComponent()({
9612
9415
  }
9613
9416
  });
9614
9417
 
9418
+ const makeVDividerProps = propsFactory({
9419
+ color: String,
9420
+ inset: Boolean,
9421
+ length: [Number, String],
9422
+ opacity: [Number, String],
9423
+ thickness: [Number, String],
9424
+ vertical: Boolean,
9425
+ ...makeComponentProps(),
9426
+ ...makeThemeProps()
9427
+ }, 'VDivider');
9428
+ const VDivider = genericComponent()({
9429
+ name: 'VDivider',
9430
+ props: makeVDividerProps(),
9431
+ setup(props, _ref) {
9432
+ let {
9433
+ attrs,
9434
+ slots
9435
+ } = _ref;
9436
+ const {
9437
+ themeClasses
9438
+ } = provideTheme(props);
9439
+ const {
9440
+ textColorClasses,
9441
+ textColorStyles
9442
+ } = useTextColor(() => props.color);
9443
+ const dividerStyles = computed(() => {
9444
+ const styles = {};
9445
+ if (props.length) {
9446
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9447
+ }
9448
+ if (props.thickness) {
9449
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9450
+ }
9451
+ return styles;
9452
+ });
9453
+ useRender(() => {
9454
+ const divider = createElementVNode("hr", {
9455
+ "class": normalizeClass([{
9456
+ 'v-divider': true,
9457
+ 'v-divider--inset': props.inset,
9458
+ 'v-divider--vertical': props.vertical
9459
+ }, themeClasses.value, textColorClasses.value, props.class]),
9460
+ "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
9461
+ '--v-border-opacity': props.opacity
9462
+ }, props.style]),
9463
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9464
+ "role": `${attrs.role || 'separator'}`
9465
+ }, null);
9466
+ if (!slots.default) return divider;
9467
+ return createElementVNode("div", {
9468
+ "class": normalizeClass(['v-divider__wrapper', {
9469
+ 'v-divider__wrapper--vertical': props.vertical,
9470
+ 'v-divider__wrapper--inset': props.inset
9471
+ }])
9472
+ }, [divider, createElementVNode("div", {
9473
+ "class": "v-divider__content"
9474
+ }, [slots.default()]), divider]);
9475
+ });
9476
+ return {};
9477
+ }
9478
+ });
9479
+
9615
9480
  // Types
9616
9481
 
9617
9482
  const makeVListChildrenProps = propsFactory({
@@ -9881,7 +9746,6 @@ const makeVListProps = propsFactory({
9881
9746
  activeClass: String,
9882
9747
  bgColor: String,
9883
9748
  disabled: Boolean,
9884
- filterable: Boolean,
9885
9749
  expandIcon: IconValue,
9886
9750
  collapseIcon: IconValue,
9887
9751
  lines: {
@@ -9965,9 +9829,7 @@ const VList = genericComponent()({
9965
9829
  const activeColor = toRef(() => props.activeColor);
9966
9830
  const baseColor = toRef(() => props.baseColor);
9967
9831
  const color = toRef(() => props.color);
9968
- createList({
9969
- filterable: props.filterable
9970
- });
9832
+ createList();
9971
9833
  provideDefaults({
9972
9834
  VListGroup: {
9973
9835
  activeColor,
@@ -11650,7 +11512,6 @@ const makeVMenuProps = propsFactory({
11650
11512
  // disableKeys: Boolean,
11651
11513
  id: String,
11652
11514
  submenu: Boolean,
11653
- disableInitialFocus: Boolean,
11654
11515
  ...omit(makeVOverlayProps({
11655
11516
  closeDelay: 250,
11656
11517
  closeOnContentClick: true,
@@ -11725,7 +11586,7 @@ const VMenu = genericComponent()({
11725
11586
  watch(isActive, val => {
11726
11587
  if (val) {
11727
11588
  parent?.register();
11728
- if (IN_BROWSER && !props.disableInitialFocus) {
11589
+ if (IN_BROWSER) {
11729
11590
  document.addEventListener('focusin', onFocusIn, {
11730
11591
  once: true
11731
11592
  });
@@ -12562,12 +12423,7 @@ function useVirtual(props, items) {
12562
12423
  }
12563
12424
  function calculateOffset(index) {
12564
12425
  index = clamp(index, 0, items.value.length - 1);
12565
- const whole = Math.floor(index);
12566
- const fraction = index % 1;
12567
- const next = whole + 1;
12568
- const wholeOffset = offsets[whole] || 0;
12569
- const nextOffset = offsets[next] || wholeOffset;
12570
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12426
+ return offsets[index] || 0;
12571
12427
  }
12572
12428
  function calculateIndex(scrollTop) {
12573
12429
  return binaryClosest(offsets, scrollTop);
@@ -12921,7 +12777,6 @@ const makeSelectProps = propsFactory({
12921
12777
  },
12922
12778
  openOnClear: Boolean,
12923
12779
  itemColor: String,
12924
- noAutoScroll: Boolean,
12925
12780
  ...makeItemsProps({
12926
12781
  itemChildren: false
12927
12782
  })
@@ -13136,7 +12991,7 @@ const VSelect = genericComponent()({
13136
12991
  watch(menu, () => {
13137
12992
  if (!props.hideSelected && menu.value && model.value.length) {
13138
12993
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
13139
- IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
12994
+ IN_BROWSER && window.requestAnimationFrame(() => {
13140
12995
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
13141
12996
  });
13142
12997
  }
@@ -13229,22 +13084,6 @@ const VSelect = genericComponent()({
13229
13084
  key: item.value,
13230
13085
  onClick: () => select(item, null)
13231
13086
  });
13232
- if (item.raw.type === 'divider') {
13233
- return slots.divider?.({
13234
- props: item.raw,
13235
- index
13236
- }) ?? createVNode(VDivider, mergeProps(item.props, {
13237
- "key": `divider-${index}`
13238
- }), null);
13239
- }
13240
- if (item.raw.type === 'subheader') {
13241
- return slots.subheader?.({
13242
- props: item.raw,
13243
- index
13244
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13245
- "key": `subheader-${index}`
13246
- }), null);
13247
- }
13248
13087
  return slots.item?.({
13249
13088
  item,
13250
13089
  index,
@@ -13405,9 +13244,6 @@ function filterItems(items, query, options) {
13405
13244
  let match = -1;
13406
13245
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13407
13246
  if (typeof item === 'object') {
13408
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13409
- continue;
13410
- }
13411
13247
  const filterKeys = keys || Object.keys(transformed);
13412
13248
  for (const key of filterKeys) {
13413
13249
  const value = getPropertyFromItem(transformed, key);
@@ -13610,7 +13446,7 @@ const VAutocomplete = genericComponent()({
13610
13446
  menu.value = !menu.value;
13611
13447
  }
13612
13448
  function onListKeydown(e) {
13613
- if (checkPrintable(e) || e.key === 'Backspace') {
13449
+ if (e.key !== ' ' && checkPrintable(e)) {
13614
13450
  vTextFieldRef.value?.focus();
13615
13451
  }
13616
13452
  }
@@ -13815,7 +13651,6 @@ const VAutocomplete = genericComponent()({
13815
13651
  }, props.menuProps), {
13816
13652
  default: () => [hasList && createVNode(VList, mergeProps({
13817
13653
  "ref": listRef,
13818
- "filterable": true,
13819
13654
  "selected": selectedValues.value,
13820
13655
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
13821
13656
  "onMousedown": e => e.preventDefault(),
@@ -13847,22 +13682,6 @@ const VAutocomplete = genericComponent()({
13847
13682
  active: highlightFirst.value && index === 0 ? true : undefined,
13848
13683
  onClick: () => select(item, null)
13849
13684
  });
13850
- if (item.raw.type === 'divider') {
13851
- return slots.divider?.({
13852
- props: item.raw,
13853
- index
13854
- }) ?? createVNode(VDivider, mergeProps(item.props, {
13855
- "key": `divider-${index}`
13856
- }), null);
13857
- }
13858
- if (item.raw.type === 'subheader') {
13859
- return slots.subheader?.({
13860
- props: item.raw,
13861
- index
13862
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13863
- "key": `subheader-${index}`
13864
- }), null);
13865
- }
13866
13685
  return slots.item?.({
13867
13686
  item,
13868
13687
  index,
@@ -14007,8 +13826,7 @@ const makeVBadgeProps = propsFactory({
14007
13826
  ...makeThemeProps(),
14008
13827
  ...makeTransitionProps({
14009
13828
  transition: 'scale-rotate-transition'
14010
- }),
14011
- ...makeDimensionProps()
13829
+ })
14012
13830
  }, 'VBadge');
14013
13831
  const VBadge = genericComponent()({
14014
13832
  name: 'VBadge',
@@ -14038,9 +13856,6 @@ const VBadge = genericComponent()({
14038
13856
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
14039
13857
  return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
14040
13858
  });
14041
- const {
14042
- dimensionStyles
14043
- } = useDimension(props);
14044
13859
  useRender(() => {
14045
13860
  const value = Number(props.content);
14046
13861
  const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
@@ -14062,7 +13877,7 @@ const VBadge = genericComponent()({
14062
13877
  }, {
14063
13878
  default: () => [withDirectives(createElementVNode("span", mergeProps({
14064
13879
  "class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
14065
- "style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
13880
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
14066
13881
  "aria-atomic": "true",
14067
13882
  "aria-label": t(props.label, value),
14068
13883
  "aria-live": "polite",
@@ -17471,13 +17286,13 @@ function date(value) {
17471
17286
  return null;
17472
17287
  }
17473
17288
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17474
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17289
+ function getWeekdays(locale, firstDayOfWeek) {
17475
17290
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17476
17291
  return createRange(7).map(i => {
17477
17292
  const weekday = new Date(sundayJanuarySecond2000);
17478
17293
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17479
17294
  return new Intl.DateTimeFormat(locale, {
17480
- weekday: weekdayFormat ?? 'narrow'
17295
+ weekday: 'narrow'
17481
17296
  }).format(weekday);
17482
17297
  });
17483
17298
  }
@@ -17941,9 +17756,9 @@ class VuetifyDateAdapter {
17941
17756
  getDiff(date, comparing, unit) {
17942
17757
  return getDiff(date, comparing, unit);
17943
17758
  }
17944
- getWeekdays(firstDayOfWeek, weekdayFormat) {
17759
+ getWeekdays(firstDayOfWeek) {
17945
17760
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
17946
- return getWeekdays(this.locale, firstDay, weekdayFormat);
17761
+ return getWeekdays(this.locale, firstDay);
17947
17762
  }
17948
17763
  getYear(date) {
17949
17764
  return getYear(date);
@@ -18298,7 +18113,6 @@ const VCombobox = genericComponent()({
18298
18113
  _search.value = val ?? '';
18299
18114
  if (!props.multiple && !hasSelectionSlot.value) {
18300
18115
  model.value = [transformItem$3(props, val)];
18301
- nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18302
18116
  }
18303
18117
  if (val && props.multiple && props.delimiters?.length) {
18304
18118
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18379,7 +18193,7 @@ const VCombobox = genericComponent()({
18379
18193
  menu.value = !menu.value;
18380
18194
  }
18381
18195
  function onListKeydown(e) {
18382
- if (checkPrintable(e) || e.key === 'Backspace') {
18196
+ if (e.key !== ' ' && checkPrintable(e)) {
18383
18197
  vTextFieldRef.value?.focus();
18384
18198
  }
18385
18199
  }
@@ -18584,7 +18398,6 @@ const VCombobox = genericComponent()({
18584
18398
  }, props.menuProps), {
18585
18399
  default: () => [hasList && createVNode(VList, mergeProps({
18586
18400
  "ref": listRef,
18587
- "filterable": true,
18588
18401
  "selected": selectedValues.value,
18589
18402
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18590
18403
  "onMousedown": e => e.preventDefault(),
@@ -18616,22 +18429,6 @@ const VCombobox = genericComponent()({
18616
18429
  active: highlightFirst.value && index === 0 ? true : undefined,
18617
18430
  onClick: () => select(item, null)
18618
18431
  });
18619
- if (item.raw.type === 'divider') {
18620
- return slots.divider?.({
18621
- props: item.raw,
18622
- index
18623
- }) ?? createVNode(VDivider, mergeProps(item.props, {
18624
- "key": `divider-${index}`
18625
- }), null);
18626
- }
18627
- if (item.raw.type === 'subheader') {
18628
- return slots.subheader?.({
18629
- props: item.raw,
18630
- index
18631
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
18632
- "key": `subheader-${index}`
18633
- }), null);
18634
- }
18635
18432
  return slots.item?.({
18636
18433
  item,
18637
18434
  index,
@@ -20514,7 +20311,6 @@ const makeVDataTableHeadersProps = propsFactory({
20514
20311
  color: String,
20515
20312
  disableSort: Boolean,
20516
20313
  fixedHeader: Boolean,
20517
- lastFixed: Boolean,
20518
20314
  multiSort: Boolean,
20519
20315
  sortAscIcon: {
20520
20316
  type: IconValue,
@@ -20561,11 +20357,10 @@ const VDataTableHeaders = genericComponent()({
20561
20357
  loaderClasses
20562
20358
  } = useLoader(props);
20563
20359
  function getFixedStyles(column, y) {
20564
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20360
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20565
20361
  return {
20566
20362
  position: 'sticky',
20567
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20568
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20363
+ left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20569
20364
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20570
20365
  };
20571
20366
  }
@@ -21081,18 +20876,11 @@ const VDataTableRows = genericComponent()({
21081
20876
  }
21082
20877
  });
21083
20878
 
21084
- // Types
21085
-
21086
20879
  const makeVTableProps = propsFactory({
21087
20880
  fixedHeader: Boolean,
21088
20881
  fixedFooter: Boolean,
21089
20882
  height: [Number, String],
21090
20883
  hover: Boolean,
21091
- striped: {
21092
- type: String,
21093
- default: null,
21094
- validator: v => ['even', 'odd'].includes(v)
21095
- },
21096
20884
  ...makeComponentProps(),
21097
20885
  ...makeDensityProps(),
21098
20886
  ...makeTagProps(),
@@ -21119,9 +20907,7 @@ const VTable = genericComponent()({
21119
20907
  'v-table--fixed-footer': props.fixedFooter,
21120
20908
  'v-table--has-top': !!slots.top,
21121
20909
  'v-table--has-bottom': !!slots.bottom,
21122
- 'v-table--hover': props.hover,
21123
- 'v-table--striped-even': props.striped === 'even',
21124
- 'v-table--striped-odd': props.striped === 'odd'
20910
+ 'v-table--hover': props.hover
21125
20911
  }, themeClasses.value, densityClasses.value, props.class]),
21126
20912
  "style": normalizeStyle(props.style)
21127
20913
  }, {
@@ -22296,8 +22082,7 @@ const makeCalendarProps = propsFactory({
22296
22082
  firstDayOfWeek: {
22297
22083
  type: [Number, String],
22298
22084
  default: undefined
22299
- },
22300
- weekdayFormat: String
22085
+ }
22301
22086
  }, 'calendar');
22302
22087
  function useCalendar(props) {
22303
22088
  const adapter = useDate();
@@ -22538,7 +22323,7 @@ const VDatePickerMonth = genericComponent()({
22538
22323
  "ref": daysRef,
22539
22324
  "key": daysInMonth.value[0].date?.toString(),
22540
22325
  "class": "v-date-picker-month__days"
22541
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
22326
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
22542
22327
  "class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22543
22328
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22544
22329
  const slotProps = {
@@ -23047,9 +22832,7 @@ const VDatePicker = genericComponent()({
23047
22832
  "max": maxDate.value,
23048
22833
  "year": year.value,
23049
22834
  "allowedMonths": allowedMonths
23050
- }), {
23051
- ...pick(slots, ['month'])
23052
- }) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
22835
+ }), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
23053
22836
  "key": "date-picker-years"
23054
22837
  }, datePickerYearsProps, {
23055
22838
  "modelValue": year.value,
@@ -23057,9 +22840,7 @@ const VDatePicker = genericComponent()({
23057
22840
  "min": minDate.value,
23058
22841
  "max": maxDate.value,
23059
22842
  "allowedYears": allowedYears
23060
- }), {
23061
- ...pick(slots, ['year'])
23062
- }) : createVNode(VDatePickerMonth, mergeProps({
22843
+ }), null) : createVNode(VDatePickerMonth, mergeProps({
23063
22844
  "key": "date-picker-month"
23064
22845
  }, datePickerMonthProps, {
23065
22846
  "modelValue": model.value,
@@ -23070,9 +22851,7 @@ const VDatePicker = genericComponent()({
23070
22851
  "onUpdate:year": [$event => year.value = $event, onUpdateYear],
23071
22852
  "min": minDate.value,
23072
22853
  "max": maxDate.value
23073
- }), {
23074
- ...pick(slots, ['day'])
23075
- })]
22854
+ }), null)]
23076
22855
  })]),
23077
22856
  actions: slots.actions
23078
22857
  });
@@ -24163,9 +23942,6 @@ const VInfiniteScroll = genericComponent()({
24163
23942
  startStatus.value = status;
24164
23943
  } else if (side === 'end') {
24165
23944
  endStatus.value = status;
24166
- } else if (side === 'both') {
24167
- startStatus.value = status;
24168
- endStatus.value = status;
24169
23945
  }
24170
23946
  }
24171
23947
  function getStatus(side) {
@@ -24277,32 +24053,6 @@ const VInfiniteScroll = genericComponent()({
24277
24053
  }, [renderSide('end', endStatus.value)])]
24278
24054
  });
24279
24055
  });
24280
- function reset(side) {
24281
- const effectiveSide = side ?? props.side;
24282
- setStatus(effectiveSide, 'ok');
24283
- nextTick(() => {
24284
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
24285
- if (props.mode !== 'manual') {
24286
- nextTick(() => {
24287
- window.requestAnimationFrame(() => {
24288
- window.requestAnimationFrame(() => {
24289
- window.requestAnimationFrame(() => {
24290
- if (effectiveSide === 'both') {
24291
- intersecting('start');
24292
- intersecting('end');
24293
- } else {
24294
- intersecting(effectiveSide);
24295
- }
24296
- });
24297
- });
24298
- });
24299
- });
24300
- }
24301
- });
24302
- }
24303
- return {
24304
- reset
24305
- };
24306
24056
  }
24307
24057
  });
24308
24058
 
@@ -24382,47 +24132,8 @@ const VItem = genericComponent()({
24382
24132
  }
24383
24133
  });
24384
24134
 
24385
- const makeVKbdProps = propsFactory({
24386
- ...makeBorderProps(),
24387
- ...makeComponentProps(),
24388
- ...makeRoundedProps(),
24389
- ...makeTagProps({
24390
- tag: 'kbd'
24391
- }),
24392
- ...makeThemeProps(),
24393
- ...makeElevationProps(),
24394
- color: String
24395
- }, 'VKbd');
24396
- const VKbd = genericComponent()({
24397
- name: 'VKbd',
24398
- props: makeVKbdProps(),
24399
- setup(props, _ref) {
24400
- let {
24401
- slots
24402
- } = _ref;
24403
- const {
24404
- themeClasses
24405
- } = provideTheme(props);
24406
- const {
24407
- borderClasses
24408
- } = useBorder(props);
24409
- const {
24410
- roundedClasses
24411
- } = useRounded(props);
24412
- const {
24413
- backgroundColorClasses,
24414
- backgroundColorStyles
24415
- } = useBackgroundColor(() => props.color);
24416
- const {
24417
- elevationClasses
24418
- } = useElevation(props);
24419
- useRender(() => createVNode(props.tag, {
24420
- "class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
24421
- "style": normalizeStyle([backgroundColorStyles.value, props.style])
24422
- }, slots));
24423
- return {};
24424
- }
24425
- });
24135
+ // Styles
24136
+ const VKbd = createSimpleFunctional('v-kbd', 'kbd');
24426
24137
 
24427
24138
  const makeVLayoutProps = propsFactory({
24428
24139
  ...makeComponentProps(),
@@ -25260,14 +24971,6 @@ const makeVNumberInputProps = propsFactory({
25260
24971
  type: Number,
25261
24972
  default: 0
25262
24973
  },
25263
- minFractionDigits: {
25264
- type: Number,
25265
- default: null
25266
- },
25267
- decimalSeparator: {
25268
- type: String,
25269
- validator: v => !v || v.length === 1
25270
- },
25271
24974
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25272
24975
  }, 'VNumberInput');
25273
24976
  const VNumberInput = genericComponent()({
@@ -25293,24 +24996,11 @@ const VNumberInput = genericComponent()({
25293
24996
  const form = useForm(props);
25294
24997
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
25295
24998
  const isFocused = shallowRef(props.focused);
25296
- const {
25297
- decimalSeparator: decimalSeparatorFromLocale
25298
- } = useLocale();
25299
- const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
25300
24999
  function correctPrecision(val) {
25301
25000
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25302
- let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
25303
25001
  const fixed = precision == null ? String(val) : val.toFixed(precision);
25304
- if (isFocused.value && trim) {
25305
- return Number(fixed).toString() // trim zeros
25306
- .replace('.', decimalSeparator.value);
25307
- }
25308
- if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
25309
- return fixed.replace('.', decimalSeparator.value);
25310
- }
25311
- let [baseDigits, fractionDigits] = fixed.split('.');
25312
- fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
25313
- return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
25002
+ return isFocused.value ? Number(fixed).toString() // trim zeros
25003
+ : fixed;
25314
25004
  }
25315
25005
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25316
25006
  const _inputText = shallowRef(null);
@@ -25327,11 +25017,8 @@ const VNumberInput = genericComponent()({
25327
25017
  if (val === null || val === '') {
25328
25018
  model.value = null;
25329
25019
  _inputText.value = null;
25330
- return;
25331
- }
25332
- const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
25333
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
25334
- model.value = parsedValue;
25020
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
25021
+ model.value = Number(val);
25335
25022
  _inputText.value = val;
25336
25023
  }
25337
25024
  }
@@ -25368,7 +25055,6 @@ const VNumberInput = genericComponent()({
25368
25055
  }
25369
25056
  };
25370
25057
  watch(() => props.precision, () => formatInputValue());
25371
- watch(() => props.minFractionDigits, () => formatInputValue());
25372
25058
  onMounted(() => {
25373
25059
  clampModel();
25374
25060
  });
@@ -25402,24 +25088,24 @@ const VNumberInput = genericComponent()({
25402
25088
  selectionEnd
25403
25089
  } = inputElement ?? {};
25404
25090
  const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
25405
- const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
25091
+ const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
25406
25092
 
25407
- // Allow only numbers, "-" and {decimal separator}
25408
- // Allow "-" and {decimal separator} only once
25409
- // Allow "-" only at the start
25410
- if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
25093
+ // Only numbers, "-", "." are allowed
25094
+ // AND "-", "." are allowed only once
25095
+ // AND "-" is only allowed at the start
25096
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
25411
25097
  e.preventDefault();
25412
25098
  inputElement.value = potentialNewNumber;
25413
25099
  }
25414
25100
  if (props.precision == null) return;
25415
25101
 
25416
25102
  // Ignore decimal digits above precision limit
25417
- if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
25103
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
25418
25104
  e.preventDefault();
25419
25105
  inputElement.value = potentialNewNumber;
25420
25106
  }
25421
25107
  // Ignore decimal separator when precision = 0
25422
- if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
25108
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
25423
25109
  e.preventDefault();
25424
25110
  inputElement.value = potentialNewNumber;
25425
25111
  }
@@ -25471,16 +25157,19 @@ const VNumberInput = genericComponent()({
25471
25157
  if (controlsDisabled.value) return;
25472
25158
  if (!vTextFieldRef.value) return;
25473
25159
  const actualText = vTextFieldRef.value.value;
25474
- const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
25475
- if (actualText && !isNaN(parsedValue)) {
25476
- inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
25160
+ if (actualText && !isNaN(Number(actualText))) {
25161
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
25477
25162
  } else {
25478
25163
  inputText.value = null;
25479
25164
  }
25480
25165
  }
25481
25166
  function formatInputValue() {
25482
25167
  if (controlsDisabled.value) return;
25483
- inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
25168
+ if (model.value === null || isNaN(model.value)) {
25169
+ inputText.value = null;
25170
+ return;
25171
+ }
25172
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25484
25173
  }
25485
25174
  function trimDecimalZeros() {
25486
25175
  if (controlsDisabled.value) return;
@@ -25488,7 +25177,7 @@ const VNumberInput = genericComponent()({
25488
25177
  inputText.value = null;
25489
25178
  return;
25490
25179
  }
25491
- inputText.value = model.value.toString().replace('.', decimalSeparator.value);
25180
+ inputText.value = model.value.toString();
25492
25181
  }
25493
25182
  function onFocus() {
25494
25183
  trimDecimalZeros();
@@ -25755,10 +25444,9 @@ const VOtpInput = genericComponent()({
25755
25444
  e.preventDefault();
25756
25445
  e.stopPropagation();
25757
25446
  const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
25758
- const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
25759
25447
  if (isValidNumber(clipboardText)) return;
25760
25448
  model.value = clipboardText.split('');
25761
- inputRef.value?.[finalIndex].focus();
25449
+ inputRef.value?.[index].blur();
25762
25450
  }
25763
25451
  function reset() {
25764
25452
  model.value = [];
@@ -30458,6 +30146,11 @@ const makeVIconBtnProps = propsFactory({
30458
30146
  hideOverlay: Boolean,
30459
30147
  icon: [String, Function, Object],
30460
30148
  iconColor: String,
30149
+ iconSize: [Number, String],
30150
+ iconSizes: {
30151
+ type: Array,
30152
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
30153
+ },
30461
30154
  loading: Boolean,
30462
30155
  opacity: [Number, String],
30463
30156
  readonly: Boolean,
@@ -30477,7 +30170,6 @@ const makeVIconBtnProps = propsFactory({
30477
30170
  ...makeBorderProps(),
30478
30171
  ...makeComponentProps(),
30479
30172
  ...makeElevationProps(),
30480
- ...makeIconSizeProps(),
30481
30173
  ...makeRoundedProps(),
30482
30174
  ...makeTagProps({
30483
30175
  tag: 'button'
@@ -30532,6 +30224,7 @@ const VIconBtn = genericComponent()({
30532
30224
  })()
30533
30225
  }));
30534
30226
  const btnSizeMap = new Map(props.sizes);
30227
+ const iconSizeMap = new Map(props.iconSizes);
30535
30228
  function onClick() {
30536
30229
  if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
30537
30230
  isActive.value = !isActive.value;
@@ -30543,12 +30236,12 @@ const VIconBtn = genericComponent()({
30543
30236
  const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
30544
30237
  const btnHeight = props.height ?? btnSize;
30545
30238
  const btnWidth = props.width ?? btnSize;
30546
- const {
30547
- iconSize
30548
- } = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
30239
+ const _iconSize = props.iconSize;
30240
+ const hasNamedIconSize = iconSizeMap.has(_iconSize);
30241
+ const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
30549
30242
  const iconProps = {
30550
30243
  icon,
30551
- size: iconSize.value,
30244
+ size: iconSize,
30552
30245
  iconColor: props.iconColor,
30553
30246
  opacity: props.opacity
30554
30247
  };
@@ -30591,7 +30284,7 @@ const VIconBtn = genericComponent()({
30591
30284
  "color": typeof props.loading === 'boolean' ? undefined : props.loading,
30592
30285
  "indeterminate": "disable-shrink",
30593
30286
  "width": "2",
30594
- "size": iconSize.value
30287
+ "size": iconSize
30595
30288
  }, null)])]
30596
30289
  });
30597
30290
  });
@@ -30599,251 +30292,6 @@ const VIconBtn = genericComponent()({
30599
30292
  }
30600
30293
  });
30601
30294
 
30602
- // Utilities
30603
-
30604
- // Types
30605
-
30606
- const makeMaskProps = propsFactory({
30607
- mask: [String, Object],
30608
- returnMaskedValue: Boolean
30609
- }, 'mask');
30610
- const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\]:";'<>?,./\\ ]/;
30611
- const presets = {
30612
- 'credit-card': '#### - #### - #### - ####',
30613
- date: '##/##/####',
30614
- 'date-time': '##/##/#### ##:##',
30615
- 'iso-date': '####-##-##',
30616
- 'iso-date-time': '####-##-## ##:##',
30617
- phone: '(###) ### - ####',
30618
- social: '###-##-####',
30619
- time: '##:##',
30620
- 'time-with-seconds': '##:##:##'
30621
- };
30622
- function isMaskDelimiter(char) {
30623
- return char ? defaultDelimiters.test(char) : false;
30624
- }
30625
- const defaultTokens = {
30626
- '#': {
30627
- pattern: /[0-9]/
30628
- },
30629
- A: {
30630
- pattern: /[A-Z]/i,
30631
- convert: v => v.toUpperCase()
30632
- },
30633
- a: {
30634
- pattern: /[a-z]/i,
30635
- convert: v => v.toLowerCase()
30636
- },
30637
- N: {
30638
- pattern: /[0-9A-Z]/i,
30639
- convert: v => v.toUpperCase()
30640
- },
30641
- n: {
30642
- pattern: /[0-9a-z]/i,
30643
- convert: v => v.toLowerCase()
30644
- },
30645
- X: {
30646
- pattern: defaultDelimiters
30647
- }
30648
- };
30649
- function useMask(props, inputRef) {
30650
- const mask = computed(() => {
30651
- if (typeof props.mask === 'string') {
30652
- if (props.mask in presets) return presets[props.mask];
30653
- return props.mask;
30654
- }
30655
- return props.mask?.mask ?? '';
30656
- });
30657
- const tokens = computed(() => {
30658
- return {
30659
- ...defaultTokens,
30660
- ...(isObject(props.mask) ? props.mask.tokens : null)
30661
- };
30662
- });
30663
- const selection = shallowRef(0);
30664
- const lazySelection = shallowRef(0);
30665
- function isMask(char) {
30666
- return char in tokens.value;
30667
- }
30668
- function maskValidates(mask, char) {
30669
- if (char == null || !isMask(mask)) return false;
30670
- const item = tokens.value[mask];
30671
- if (item.pattern) return item.pattern.test(char);
30672
- return item.test(char);
30673
- }
30674
- function convert(mask, char) {
30675
- const item = tokens.value[mask];
30676
- return item.convert ? item.convert(char) : char;
30677
- }
30678
- function maskText(text) {
30679
- const trimmedText = text?.trim().replace(/\s+/g, ' ');
30680
- if (trimmedText == null) return '';
30681
- if (!mask.value.length || !trimmedText.length) return trimmedText;
30682
- let textIndex = 0;
30683
- let maskIndex = 0;
30684
- let newText = '';
30685
- while (maskIndex < mask.value.length) {
30686
- const mchar = mask.value[maskIndex];
30687
- const tchar = trimmedText[textIndex];
30688
-
30689
- // Escaped character in mask, the next mask character is inserted
30690
- if (mchar === '\\') {
30691
- newText += mask.value[maskIndex + 1];
30692
- maskIndex += 2;
30693
- continue;
30694
- }
30695
- if (!isMask(mchar)) {
30696
- newText += mchar;
30697
- if (tchar === mchar) {
30698
- textIndex++;
30699
- }
30700
- } else if (maskValidates(mchar, tchar)) {
30701
- newText += convert(mchar, tchar);
30702
- textIndex++;
30703
- } else {
30704
- break;
30705
- }
30706
- maskIndex++;
30707
- }
30708
- return newText;
30709
- }
30710
- function unmaskText(text) {
30711
- if (text == null) return null;
30712
- if (!mask.value.length || !text.length) return text;
30713
- let textIndex = 0;
30714
- let maskIndex = 0;
30715
- let newText = '';
30716
- while (true) {
30717
- const mchar = mask.value[maskIndex];
30718
- const tchar = text[textIndex];
30719
- if (tchar == null) break;
30720
- if (mchar == null) {
30721
- newText += tchar;
30722
- textIndex++;
30723
- continue;
30724
- }
30725
-
30726
- // Escaped character in mask, skip the next input character
30727
- if (mchar === '\\') {
30728
- if (tchar === mask.value[maskIndex + 1]) {
30729
- textIndex++;
30730
- }
30731
- maskIndex += 2;
30732
- continue;
30733
- }
30734
- if (maskValidates(mchar, tchar)) {
30735
- // masked char
30736
- newText += tchar;
30737
- textIndex++;
30738
- maskIndex++;
30739
- continue;
30740
- } else if (mchar !== tchar) {
30741
- // input doesn't match mask, skip forward until it does
30742
- while (true) {
30743
- const mchar = mask.value[maskIndex++];
30744
- if (mchar == null || maskValidates(mchar, tchar)) break;
30745
- }
30746
- continue;
30747
- }
30748
- textIndex++;
30749
- maskIndex++;
30750
- }
30751
- return newText;
30752
- }
30753
- function setCaretPosition(newSelection) {
30754
- selection.value = newSelection;
30755
- inputRef.value && inputRef.value.setSelectionRange(selection.value, selection.value);
30756
- }
30757
- function resetSelections() {
30758
- if (!inputRef.value?.selectionEnd) return;
30759
- selection.value = inputRef.value.selectionEnd;
30760
- lazySelection.value = 0;
30761
- for (let index = 0; index < selection.value; index++) {
30762
- isMaskDelimiter(inputRef.value.value[index]) || lazySelection.value++;
30763
- }
30764
- }
30765
- function updateRange() {
30766
- if (!inputRef.value) return;
30767
- resetSelections();
30768
- let selection = 0;
30769
- const newValue = inputRef.value.value;
30770
- if (newValue) {
30771
- for (let index = 0; index < newValue.length; index++) {
30772
- if (lazySelection.value <= 0) break;
30773
- isMaskDelimiter(newValue[index]) || lazySelection.value--;
30774
- selection++;
30775
- }
30776
- }
30777
- setCaretPosition(selection);
30778
- }
30779
- return {
30780
- updateRange,
30781
- maskText,
30782
- unmaskText
30783
- };
30784
- }
30785
-
30786
- // Types
30787
-
30788
- const makeVMaskInputProps = propsFactory({
30789
- ...makeVTextFieldProps(),
30790
- ...makeMaskProps()
30791
- }, 'VMaskInput');
30792
- const VMaskInput = genericComponent()({
30793
- name: 'VMaskInput',
30794
- props: makeVMaskInputProps(),
30795
- emits: {
30796
- 'update:modelValue': val => true
30797
- },
30798
- setup(props, _ref) {
30799
- let {
30800
- slots,
30801
- emit
30802
- } = _ref;
30803
- const vTextFieldRef = ref();
30804
- const {
30805
- maskText,
30806
- updateRange,
30807
- unmaskText
30808
- } = useMask(props, vTextFieldRef);
30809
- const returnMaskedValue = computed(() => props.mask && props.returnMaskedValue);
30810
- const model = useProxiedModel(props, 'modelValue', undefined,
30811
- // Always display masked value in input when mask is applied
30812
- val => props.mask ? maskText(unmaskText(val)) : val, val => {
30813
- if (props.mask) {
30814
- const valueBeforeChange = unmaskText(model.value);
30815
- // E.g. mask is #-# and the input value is '2-23'
30816
- // model-value should be enforced to '2-2'
30817
- const enforcedMaskedValue = maskText(unmaskText(val));
30818
- const newUnmaskedValue = unmaskText(enforcedMaskedValue);
30819
- if (newUnmaskedValue === valueBeforeChange) {
30820
- vTextFieldRef.value.value = enforcedMaskedValue;
30821
- }
30822
- val = newUnmaskedValue;
30823
- updateRange();
30824
- return returnMaskedValue.value ? maskText(val) : val;
30825
- }
30826
- return val;
30827
- });
30828
- onBeforeMount(() => {
30829
- if (props.returnMaskedValue) {
30830
- emit('update:modelValue', model.value);
30831
- }
30832
- });
30833
- useRender(() => {
30834
- const textFieldProps = VTextField.filterProps(props);
30835
- return createVNode(VTextField, mergeProps(textFieldProps, {
30836
- "modelValue": model.value,
30837
- "onUpdate:modelValue": $event => model.value = $event,
30838
- "ref": vTextFieldRef
30839
- }), {
30840
- ...slots
30841
- });
30842
- });
30843
- return forwardRefs({}, vTextFieldRef);
30844
- }
30845
- });
30846
-
30847
30295
  // Types
30848
30296
 
30849
30297
  const makeVStepperVerticalActionsProps = propsFactory({
@@ -31986,11 +31434,6 @@ const makeVTreeviewChildrenProps = propsFactory({
31986
31434
  selectable: Boolean,
31987
31435
  selectedColor: String,
31988
31436
  selectStrategy: [String, Function, Object],
31989
- index: Number,
31990
- path: {
31991
- type: Array,
31992
- default: () => []
31993
- },
31994
31437
  ...makeDensityProps()
31995
31438
  }, 'VTreeviewChildren');
31996
31439
  const VTreeviewChildren = genericComponent()({
@@ -32018,19 +31461,12 @@ const VTreeviewChildren = genericComponent()({
32018
31461
  select(!isSelected);
32019
31462
  }
32020
31463
  }
32021
- return () => slots.default?.() ?? props.items?.map((item, index) => {
31464
+ return () => slots.default?.() ?? props.items?.map(item => {
32022
31465
  const {
32023
31466
  children,
32024
31467
  props: itemProps
32025
31468
  } = item;
32026
31469
  const loading = isLoading.has(item.value);
32027
- const treeItemProps = {
32028
- index,
32029
- depth: props.path?.length ?? 0,
32030
- isFirst: index === 0,
32031
- isLast: props.items ? props.items.length - 1 === index : false,
32032
- path: [...props.path, index]
32033
- };
32034
31470
  const slotsWithItem = {
32035
31471
  prepend: slotProps => createElementVNode(Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && createElementVNode("div", null, [createVNode(VCheckboxBtn, {
32036
31472
  "key": item.value,
@@ -32051,13 +31487,11 @@ const VTreeviewChildren = genericComponent()({
32051
31487
  }
32052
31488
  }, null)]), slots.prepend?.({
32053
31489
  ...slotProps,
32054
- ...treeItemProps,
32055
31490
  item: item.raw,
32056
31491
  internalItem: item
32057
31492
  })]),
32058
31493
  append: slots.append ? slotProps => slots.append?.({
32059
31494
  ...slotProps,
32060
- ...treeItemProps,
32061
31495
  item: item.raw,
32062
31496
  internalItem: item
32063
31497
  }) : undefined,
@@ -32073,10 +31507,7 @@ const VTreeviewChildren = genericComponent()({
32073
31507
  }) : undefined
32074
31508
  };
32075
31509
  const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
32076
- const treeviewChildrenProps = VTreeviewChildren.filterProps({
32077
- ...props,
32078
- ...treeItemProps
32079
- });
31510
+ const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
32080
31511
  return children ? createVNode(VTreeviewGroup, mergeProps(treeviewGroupProps, {
32081
31512
  "value": props.returnObject ? item.raw : treeviewGroupProps?.value,
32082
31513
  "rawId": treeviewGroupProps?.value
@@ -32127,7 +31558,7 @@ const makeVTreeviewProps = propsFactory({
32127
31558
  ...makeFilterProps({
32128
31559
  filterKeys: ['title']
32129
31560
  }),
32130
- ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
31561
+ ...makeVTreeviewChildrenProps(),
32131
31562
  ...omit(makeVListProps({
32132
31563
  collapseIcon: '$treeviewCollapse',
32133
31564
  expandIcon: '$treeviewExpand',
@@ -32370,7 +31801,6 @@ var components = /*#__PURE__*/Object.freeze({
32370
31801
  VListSubheader: VListSubheader,
32371
31802
  VLocaleProvider: VLocaleProvider,
32372
31803
  VMain: VMain,
32373
- VMaskInput: VMaskInput,
32374
31804
  VMenu: VMenu,
32375
31805
  VMessages: VMessages,
32376
31806
  VNavigationDrawer: VNavigationDrawer,
@@ -32768,7 +32198,7 @@ function createVuetify$1() {
32768
32198
  };
32769
32199
  });
32770
32200
  }
32771
- const version$1 = "3.8.10-dev.2025-06-18";
32201
+ const version$1 = "3.8.10-master.2025-06-18";
32772
32202
  createVuetify$1.version = version$1;
32773
32203
 
32774
32204
  // Vue's inject() can only be used in setup
@@ -33066,7 +32496,7 @@ var index = /*#__PURE__*/Object.freeze({
33066
32496
 
33067
32497
  /* eslint-disable local-rules/sort-imports */
33068
32498
 
33069
- const version = "3.8.10-dev.2025-06-18";
32499
+ const version = "3.8.10-master.2025-06-18";
33070
32500
 
33071
32501
  /* eslint-disable local-rules/sort-imports */
33072
32502