@vuetify/nightly 3.8.9-dev.2025-06-13 → 3.8.9-master.2025-06-12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/CHANGELOG.md +6 -45
  2. package/dist/json/attributes.json +3714 -4110
  3. package/dist/json/importMap-labs.json +24 -28
  4. package/dist/json/importMap.json +154 -154
  5. package/dist/json/tags.json +2 -106
  6. package/dist/json/web-types.json +6783 -8232
  7. package/dist/vuetify-labs.cjs +177 -730
  8. package/dist/vuetify-labs.css +4085 -4128
  9. package/dist/vuetify-labs.d.ts +2938 -10254
  10. package/dist/vuetify-labs.esm.js +178 -731
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +177 -730
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +166 -478
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3607 -3650
  17. package/dist/vuetify.d.ts +2085 -2782
  18. package/dist/vuetify.esm.js +167 -479
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +166 -478
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1229 -1251
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAlert/VAlert.css +1 -6
  26. package/lib/components/VAlert/VAlert.d.ts +0 -35
  27. package/lib/components/VAlert/VAlert.js +10 -15
  28. package/lib/components/VAlert/VAlert.js.map +1 -1
  29. package/lib/components/VAlert/VAlert.sass +1 -7
  30. package/lib/components/VAppBar/VAppBar.d.ts +3 -15
  31. package/lib/components/VAppBar/VAppBarNavIcon.d.ts +10 -20
  32. package/lib/components/VAutocomplete/VAutocomplete.d.ts +110 -175
  33. package/lib/components/VAutocomplete/VAutocomplete.js +3 -21
  34. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  35. package/lib/components/VBadge/VBadge.d.ts +0 -60
  36. package/lib/components/VBadge/VBadge.js +2 -7
  37. package/lib/components/VBadge/VBadge.js.map +1 -1
  38. package/lib/components/VBtn/VBtn.d.ts +10 -20
  39. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  40. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  41. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  42. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  43. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  44. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  45. package/lib/components/VCard/VCard.d.ts +10 -20
  46. package/lib/components/VCheckbox/VCheckbox.d.ts +13 -23
  47. package/lib/components/VCheckbox/VCheckboxBtn.d.ts +10 -20
  48. package/lib/components/VChip/VChip.d.ts +10 -20
  49. package/lib/components/VChipGroup/VChipGroup.d.ts +0 -10
  50. package/lib/components/VCombobox/VCombobox.d.ts +110 -175
  51. package/lib/components/VCombobox/VCombobox.js +3 -22
  52. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  53. package/lib/components/VDataTable/VDataTable.d.ts +0 -60
  54. package/lib/components/VDataTable/VDataTableHeaders.d.ts +0 -13
  55. package/lib/components/VDataTable/VDataTableHeaders.js +2 -4
  56. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  57. package/lib/components/VDataTable/VDataTableServer.d.ts +0 -42
  58. package/lib/components/VDataTable/VDataTableVirtual.d.ts +0 -42
  59. package/lib/components/VDatePicker/VDatePicker.d.ts +5 -80
  60. package/lib/components/VDatePicker/VDatePicker.js +4 -10
  61. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  62. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
  63. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
  64. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  65. package/lib/components/VExpansionPanel/VExpansionPanel.d.ts +10 -20
  66. package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +10 -20
  67. package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +10 -20
  68. package/lib/components/VFab/VFab.d.ts +10 -20
  69. package/lib/components/VField/VField.d.ts +3 -3
  70. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  71. package/lib/components/VInfiniteScroll/VInfiniteScroll.d.ts +3 -9
  72. package/lib/components/VInfiniteScroll/VInfiniteScroll.js +0 -29
  73. package/lib/components/VInfiniteScroll/VInfiniteScroll.js.map +1 -1
  74. package/lib/components/VInput/VInput.d.ts +4 -4
  75. package/lib/components/VKbd/VKbd.css +2 -13
  76. package/lib/components/VKbd/VKbd.sass +1 -2
  77. package/lib/components/VKbd/_variables.scss +1 -12
  78. package/lib/components/VKbd/index.d.ts +95 -1
  79. package/lib/components/VKbd/index.js +4 -1
  80. package/lib/components/VKbd/index.js.map +1 -1
  81. package/lib/components/VList/VList.d.ts +0 -13
  82. package/lib/components/VList/VList.js +1 -4
  83. package/lib/components/VList/VList.js.map +1 -1
  84. package/lib/components/VList/VListChildren.js.map +1 -1
  85. package/lib/components/VList/VListItem.css +2 -0
  86. package/lib/components/VList/VListItem.d.ts +10 -23
  87. package/lib/components/VList/VListItem.js +3 -7
  88. package/lib/components/VList/VListItem.js.map +1 -1
  89. package/lib/components/VList/VListItem.sass +2 -0
  90. package/lib/components/VList/_variables.scss +1 -0
  91. package/lib/components/VList/list.d.ts +2 -9
  92. package/lib/components/VList/list.js +0 -7
  93. package/lib/components/VList/list.js.map +1 -1
  94. package/lib/components/VMenu/VMenu.d.ts +0 -13
  95. package/lib/components/VMenu/VMenu.js +1 -2
  96. package/lib/components/VMenu/VMenu.js.map +1 -1
  97. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -114
  98. package/lib/components/VNumberInput/VNumberInput.js +20 -43
  99. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  100. package/lib/components/VOtpInput/VOtpInput.js +1 -2
  101. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  102. package/lib/components/VOverlay/VOverlay.css +1 -1
  103. package/lib/components/VOverlay/_variables.scss +1 -1
  104. package/lib/components/VRadio/VRadio.d.ts +10 -20
  105. package/lib/components/VRadioGroup/VRadioGroup.d.ts +13 -23
  106. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  107. package/lib/components/VSelect/VSelect.d.ts +118 -204
  108. package/lib/components/VSelect/VSelect.js +3 -21
  109. package/lib/components/VSelect/VSelect.js.map +1 -1
  110. package/lib/components/VSelectionControl/VSelectionControl.d.ts +10 -20
  111. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +14 -28
  112. package/lib/components/VSlideGroup/VSlideGroup.d.ts +0 -10
  113. package/lib/components/VSlideGroup/VSlideGroup.js +1 -2
  114. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  115. package/lib/components/VSlider/VSlider.d.ts +3 -3
  116. package/lib/components/VSlider/VSliderThumb.d.ts +10 -20
  117. package/lib/components/VSpeedDial/VSpeedDial.css +1 -1
  118. package/lib/components/VSpeedDial/VSpeedDial.d.ts +0 -13
  119. package/lib/components/VSpeedDial/VSpeedDial.sass +3 -1
  120. package/lib/components/VStepper/VStepperItem.d.ts +14 -28
  121. package/lib/components/VSwitch/VSwitch.d.ts +13 -23
  122. package/lib/components/VTable/VTable.css +0 -6
  123. package/lib/components/VTable/VTable.d.ts +24 -55
  124. package/lib/components/VTable/VTable.js +2 -9
  125. package/lib/components/VTable/VTable.js.map +1 -1
  126. package/lib/components/VTable/VTable.sass +0 -14
  127. package/lib/components/VTable/_variables.scss +0 -1
  128. package/lib/components/VTabs/VTab.d.ts +28 -56
  129. package/lib/components/VTabs/VTabs.d.ts +0 -10
  130. package/lib/components/VTextField/VTextField.d.ts +27 -27
  131. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  132. package/lib/components/VToolbar/VToolbar.d.ts +3 -15
  133. package/lib/components/VToolbar/VToolbar.js +3 -6
  134. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  135. package/lib/composables/calendar.d.ts +0 -6
  136. package/lib/composables/calendar.js +1 -2
  137. package/lib/composables/calendar.js.map +1 -1
  138. package/lib/composables/date/DateAdapter.d.ts +3 -3
  139. package/lib/composables/date/DateAdapter.js.map +1 -1
  140. package/lib/composables/date/adapters/vuetify.d.ts +1 -1
  141. package/lib/composables/date/adapters/vuetify.js +4 -4
  142. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  143. package/lib/composables/date/date.d.ts +3 -3
  144. package/lib/composables/date/index.d.ts +0 -1
  145. package/lib/composables/date/index.js +0 -1
  146. package/lib/composables/date/index.js.map +1 -1
  147. package/lib/composables/filter.js +0 -3
  148. package/lib/composables/filter.js.map +1 -1
  149. package/lib/composables/locale.d.ts +1 -5
  150. package/lib/composables/locale.js.map +1 -1
  151. package/lib/composables/theme.d.ts +1 -6
  152. package/lib/composables/theme.js +29 -97
  153. package/lib/composables/theme.js.map +1 -1
  154. package/lib/composables/virtual.js +1 -6
  155. package/lib/composables/virtual.js.map +1 -1
  156. package/lib/directives/ripple/index.d.ts +1 -2
  157. package/lib/directives/ripple/index.js +7 -12
  158. package/lib/directives/ripple/index.js.map +1 -1
  159. package/lib/entry-bundler.d.ts +3 -4
  160. package/lib/entry-bundler.js +1 -1
  161. package/lib/entry-bundler.js.map +1 -1
  162. package/lib/framework.d.ts +64 -83
  163. package/lib/framework.js +1 -1
  164. package/lib/framework.js.map +1 -1
  165. package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
  166. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  167. package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
  168. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  169. package/lib/labs/VFileUpload/VFileUploadItem.d.ts +10 -20
  170. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  171. package/lib/labs/VIconBtn/VIconBtn.js +11 -7
  172. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  173. package/lib/labs/VStepperVertical/VStepperVertical.d.ts +10 -20
  174. package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +10 -20
  175. package/lib/labs/VTreeview/VTreeview.d.ts +0 -13
  176. package/lib/labs/VTreeview/VTreeviewItem.d.ts +10 -20
  177. package/lib/labs/components.d.ts +0 -1
  178. package/lib/labs/components.js +0 -1
  179. package/lib/labs/components.js.map +1 -1
  180. package/lib/labs/entry-bundler.d.ts +3 -4
  181. package/lib/locale/adapters/vue-i18n.js +1 -6
  182. package/lib/locale/adapters/vue-i18n.js.map +1 -1
  183. package/lib/locale/adapters/vuetify.js +1 -7
  184. package/lib/locale/adapters/vuetify.js.map +1 -1
  185. package/lib/util/globals.d.ts +0 -1
  186. package/lib/util/globals.js +0 -1
  187. package/lib/util/globals.js.map +1 -1
  188. package/lib/util/helpers.d.ts +1 -2
  189. package/lib/util/helpers.js +7 -12
  190. package/lib/util/helpers.js.map +1 -1
  191. package/package.json +1 -3
  192. package/lib/components/VKbd/VKbd.d.ts +0 -221
  193. package/lib/components/VKbd/VKbd.js +0 -55
  194. package/lib/components/VKbd/VKbd.js.map +0 -1
  195. package/lib/composables/date/adapters/string.d.ts +0 -54
  196. package/lib/composables/date/adapters/string.js +0 -153
  197. package/lib/composables/date/adapters/string.js.map +0 -1
  198. package/lib/composables/iconSizes.d.ts +0 -28
  199. package/lib/composables/iconSizes.js +0 -23
  200. package/lib/composables/iconSizes.js.map +0 -1
  201. package/lib/composables/mask.d.ts +0 -38
  202. package/lib/composables/mask.js +0 -183
  203. package/lib/composables/mask.js.map +0 -1
  204. package/lib/labs/VMaskInput/VMaskInput.d.ts +0 -6993
  205. package/lib/labs/VMaskInput/VMaskInput.js +0 -67
  206. package/lib/labs/VMaskInput/VMaskInput.js.map +0 -1
  207. package/lib/labs/VMaskInput/index.d.ts +0 -1
  208. package/lib/labs/VMaskInput/index.js +0 -2
  209. package/lib/labs/VMaskInput/index.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.8.9-dev.2025-06-13
2
+ * Vuetify v3.8.9-master.2025-06-12
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, camelize, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, 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
  }
@@ -2180,10 +2174,6 @@ function createNumberFunction(current, fallback) {
2180
2174
  return numberFormat.format(value);
2181
2175
  };
2182
2176
  }
2183
- function inferDecimalSeparator(current, fallback) {
2184
- const format = createNumberFunction(current, fallback);
2185
- return format(0.1).includes(',') ? ',' : '.';
2186
- }
2187
2177
  function useProvided(props, prop, provided) {
2188
2178
  const internal = useProxiedModel(props, prop, props[prop] ?? provided.value);
2189
2179
 
@@ -2206,7 +2196,6 @@ function createProvideFunction(state) {
2206
2196
  current,
2207
2197
  fallback,
2208
2198
  messages,
2209
- decimalSeparator: toRef(() => inferDecimalSeparator(current, fallback)),
2210
2199
  t: createTranslateFunction(current, fallback, messages),
2211
2200
  n: createNumberFunction(current, fallback),
2212
2201
  provide: createProvideFunction({
@@ -2229,7 +2218,6 @@ function createVuetifyAdapter(options) {
2229
2218
  current,
2230
2219
  fallback,
2231
2220
  messages,
2232
- decimalSeparator: toRef(() => options?.decimalSeparator ?? inferDecimalSeparator(current, fallback)),
2233
2221
  t: createTranslateFunction(current, fallback, messages),
2234
2222
  n: createNumberFunction(current, fallback),
2235
2223
  provide: createProvideFunction({
@@ -2356,7 +2344,6 @@ const makeThemeProps = propsFactory({
2356
2344
  function genDefaults$2() {
2357
2345
  return {
2358
2346
  defaultTheme: 'light',
2359
- prefix: 'v-',
2360
2347
  variations: {
2361
2348
  colors: [],
2362
2349
  lighten: 0,
@@ -2394,8 +2381,8 @@ function genDefaults$2() {
2394
2381
  'activated-opacity': 0.12,
2395
2382
  'pressed-opacity': 0.12,
2396
2383
  'dragged-opacity': 0.08,
2397
- 'theme-kbd': '#EEEEEE',
2398
- 'theme-on-kbd': '#000000',
2384
+ 'theme-kbd': '#212529',
2385
+ 'theme-on-kbd': '#FFFFFF',
2399
2386
  'theme-code': '#F5F5F5',
2400
2387
  'theme-on-code': '#000000'
2401
2388
  }
@@ -2431,17 +2418,14 @@ function genDefaults$2() {
2431
2418
  'activated-opacity': 0.12,
2432
2419
  'pressed-opacity': 0.16,
2433
2420
  'dragged-opacity': 0.08,
2434
- 'theme-kbd': '#424242',
2421
+ 'theme-kbd': '#212529',
2435
2422
  'theme-on-kbd': '#FFFFFF',
2436
2423
  'theme-code': '#343434',
2437
2424
  'theme-on-code': '#CCCCCC'
2438
2425
  }
2439
2426
  }
2440
2427
  },
2441
- stylesheetId: 'vuetify-theme-stylesheet',
2442
- scoped: false,
2443
- unimportant: false,
2444
- utilities: true
2428
+ stylesheetId: 'vuetify-theme-stylesheet'
2445
2429
  };
2446
2430
  }
2447
2431
  function parseThemeOptions() {
@@ -2464,21 +2448,21 @@ function parseThemeOptions() {
2464
2448
  function createCssClass(lines, selector, content, scope) {
2465
2449
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2466
2450
  }
2467
- function genCssVariables(theme, prefix) {
2451
+ function genCssVariables(theme) {
2468
2452
  const lightOverlay = theme.dark ? 2 : 1;
2469
2453
  const darkOverlay = theme.dark ? 1 : 2;
2470
2454
  const variables = [];
2471
2455
  for (const [key, value] of Object.entries(theme.colors)) {
2472
2456
  const rgb = parseColor(value);
2473
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2457
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2474
2458
  if (!key.startsWith('on-')) {
2475
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2459
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2476
2460
  }
2477
2461
  }
2478
2462
  for (const [key, value] of Object.entries(theme.variables)) {
2479
2463
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2480
2464
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2481
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2465
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2482
2466
  }
2483
2467
  return variables;
2484
2468
  }
@@ -2522,8 +2506,7 @@ function getScopedSelector(selector, scope) {
2522
2506
  const scopeSelector = `:where(${scope})`;
2523
2507
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2524
2508
  }
2525
- function upsertStyles(id, cspNonce, styles) {
2526
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2509
+ function upsertStyles(styleEl, styles) {
2527
2510
  if (!styleEl) return;
2528
2511
  styleEl.innerHTML = styles;
2529
2512
  }
@@ -2543,17 +2526,8 @@ function getOrCreateStyleElement(id, cspNonce) {
2543
2526
  // Composables
2544
2527
  function createTheme(options) {
2545
2528
  const parsedOptions = parseThemeOptions(options);
2546
- const _name = shallowRef(parsedOptions.defaultTheme);
2529
+ const name = shallowRef(parsedOptions.defaultTheme);
2547
2530
  const themes = ref(parsedOptions.themes);
2548
- const systemName = shallowRef('light');
2549
- const name = computed({
2550
- get() {
2551
- return _name.value === 'system' ? systemName.value : _name.value;
2552
- },
2553
- set(val) {
2554
- _name.value = val;
2555
- }
2556
- });
2557
2531
  const computedThemes = computed(() => {
2558
2532
  const acc = {};
2559
2533
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2574,49 +2548,28 @@ function createTheme(options) {
2574
2548
  const current = toRef(() => computedThemes.value[name.value]);
2575
2549
  const styles = computed(() => {
2576
2550
  const lines = [];
2577
- const important = parsedOptions.unimportant ? '' : ' !important';
2578
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2579
2551
  if (current.value?.dark) {
2580
2552
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2581
2553
  }
2582
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2554
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2583
2555
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2584
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2585
- }
2586
- if (parsedOptions.utilities) {
2587
- const bgLines = [];
2588
- const fgLines = [];
2589
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2590
- for (const key of colors) {
2591
- if (key.startsWith('on-')) {
2592
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2593
- } else {
2594
- 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);
2595
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2596
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
2597
- }
2556
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2557
+ }
2558
+ const bgLines = [];
2559
+ const fgLines = [];
2560
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2561
+ for (const key of colors) {
2562
+ if (key.startsWith('on-')) {
2563
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2564
+ } else {
2565
+ 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);
2566
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2567
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2598
2568
  }
2599
- lines.push(...bgLines, ...fgLines);
2600
2569
  }
2570
+ lines.push(...bgLines, ...fgLines);
2601
2571
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2602
2572
  });
2603
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
2604
- const themeNames = toRef(() => Object.keys(computedThemes.value));
2605
- if (SUPPORTS_MATCH_MEDIA) {
2606
- const media = window.matchMedia('(prefers-color-scheme: dark)');
2607
- function updateSystemName() {
2608
- systemName.value = media.matches ? 'dark' : 'light';
2609
- }
2610
- updateSystemName();
2611
- media.addEventListener('change', updateSystemName, {
2612
- passive: true
2613
- });
2614
- if (getCurrentScope()) {
2615
- onScopeDispose(() => {
2616
- media.removeEventListener('change', updateSystemName);
2617
- });
2618
- }
2619
- }
2620
2573
  function install(app) {
2621
2574
  if (parsedOptions.isDisabled) return;
2622
2575
  const head = app._context.provides.usehead;
@@ -2654,55 +2607,22 @@ function createTheme(options) {
2654
2607
  updateStyles();
2655
2608
  }
2656
2609
  function updateStyles() {
2657
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
2610
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2658
2611
  }
2659
2612
  }
2660
2613
  }
2661
- function change(themeName) {
2662
- if (!themeNames.value.includes(themeName)) {
2663
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
2664
- return;
2665
- }
2666
- name.value = themeName;
2667
- }
2668
- function cycle() {
2669
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
2670
- const currentIndex = themeArray.indexOf(name.value);
2671
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
2672
- change(themeArray[nextIndex]);
2673
- }
2674
- function toggle() {
2675
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
2676
- cycle(themeArray);
2677
- }
2678
- const globalName = new Proxy(name, {
2679
- get(target, prop) {
2680
- return target[prop];
2681
- },
2682
- set(target, prop, val) {
2683
- if (prop === 'value') {
2684
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
2685
- }
2686
- // @ts-expect-error
2687
- target[prop] = val;
2688
- return true;
2689
- }
2690
- });
2614
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
2691
2615
  return {
2692
2616
  install,
2693
- change,
2694
- cycle,
2695
- toggle,
2696
2617
  isDisabled: parsedOptions.isDisabled,
2697
2618
  name,
2698
2619
  themes,
2699
2620
  current,
2700
2621
  computedThemes,
2701
- prefix: parsedOptions.prefix,
2702
2622
  themeClasses,
2703
2623
  styles,
2704
2624
  global: {
2705
- name: globalName,
2625
+ name,
2706
2626
  current
2707
2627
  }
2708
2628
  };
@@ -2713,7 +2633,7 @@ function provideTheme(props) {
2713
2633
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2714
2634
  const name = toRef(() => props.theme ?? theme.name.value);
2715
2635
  const current = toRef(() => theme.themes.value[name.value]);
2716
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
2636
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2717
2637
  const newTheme = {
2718
2638
  ...theme,
2719
2639
  name,
@@ -3817,10 +3737,7 @@ const makeVToolbarProps = propsFactory({
3817
3737
  default: 'default',
3818
3738
  validator: v => allowedDensities$1.includes(v)
3819
3739
  },
3820
- extended: {
3821
- type: Boolean,
3822
- default: null
3823
- },
3740
+ extended: Boolean,
3824
3741
  extensionHeight: {
3825
3742
  type: [Number, String],
3826
3743
  default: 48
@@ -3868,7 +3785,7 @@ const VToolbar = genericComponent()({
3868
3785
  const {
3869
3786
  rtlClasses
3870
3787
  } = useRtl();
3871
- const isExtended = shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
3788
+ const isExtended = shallowRef(!!(props.extended || slots.extension?.()));
3872
3789
  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));
3873
3790
  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);
3874
3791
  provideDefaults({
@@ -3880,7 +3797,7 @@ const VToolbar = genericComponent()({
3880
3797
  const hasTitle = !!(props.title || slots.title);
3881
3798
  const hasImage = !!(slots.image || props.image);
3882
3799
  const extension = slots.extension?.();
3883
- isExtended.value = props.extended === null ? !!extension : props.extended;
3800
+ isExtended.value = !!(props.extended || extension);
3884
3801
  return createVNode(props.tag, {
3885
3802
  "class": normalizeClass(['v-toolbar', {
3886
3803
  'v-toolbar--absolute': props.absolute,
@@ -4263,15 +4180,9 @@ function useVariant(props) {
4263
4180
  };
4264
4181
  }
4265
4182
 
4266
- // Types
4267
-
4268
4183
  const makeVBtnGroupProps = propsFactory({
4269
4184
  baseColor: String,
4270
4185
  divided: Boolean,
4271
- direction: {
4272
- type: String,
4273
- default: 'horizontal'
4274
- },
4275
4186
  ...makeBorderProps(),
4276
4187
  ...makeComponentProps(),
4277
4188
  ...makeDensityProps(),
@@ -4305,7 +4216,7 @@ const VBtnGroup = genericComponent()({
4305
4216
  } = useRounded(props);
4306
4217
  provideDefaults({
4307
4218
  VBtn: {
4308
- height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4219
+ height: 'auto',
4309
4220
  baseColor: toRef(() => props.baseColor),
4310
4221
  color: toRef(() => props.color),
4311
4222
  density: toRef(() => props.density),
@@ -4315,7 +4226,7 @@ const VBtnGroup = genericComponent()({
4315
4226
  });
4316
4227
  useRender(() => {
4317
4228
  return createVNode(props.tag, {
4318
- "class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4229
+ "class": normalizeClass(['v-btn-group', {
4319
4230
  'v-btn-group--divided': props.divided
4320
4231
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4321
4232
  "style": normalizeStyle(props.style)
@@ -5647,8 +5558,8 @@ function rippleCancelShow(e) {
5647
5558
  window.clearTimeout(element._ripple.showTimer);
5648
5559
  }
5649
5560
  let keyboardRipple = false;
5650
- function keyboardRippleShow(e, keys) {
5651
- if (!keyboardRipple && keys.includes(e.keyCode)) {
5561
+ function keyboardRippleShow(e) {
5562
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
5652
5563
  keyboardRipple = true;
5653
5564
  rippleShow(e);
5654
5565
  }
@@ -5676,12 +5587,9 @@ function updateRipple(el, binding, wasEnabled) {
5676
5587
  el._ripple.enabled = enabled;
5677
5588
  el._ripple.centered = modifiers.center;
5678
5589
  el._ripple.circle = modifiers.circle;
5679
- const bindingValue = isObject(value) ? value : {};
5680
- if (bindingValue.class) {
5681
- el._ripple.class = bindingValue.class;
5590
+ if (isObject(value) && value.class) {
5591
+ el._ripple.class = value.class;
5682
5592
  }
5683
- const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
5684
- el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
5685
5593
  if (enabled && !wasEnabled) {
5686
5594
  if (modifiers.stop) {
5687
5595
  el.addEventListener('touchstart', rippleStop, {
@@ -5703,7 +5611,7 @@ function updateRipple(el, binding, wasEnabled) {
5703
5611
  el.addEventListener('mousedown', rippleShow);
5704
5612
  el.addEventListener('mouseup', rippleHide);
5705
5613
  el.addEventListener('mouseleave', rippleHide);
5706
- el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
5614
+ el.addEventListener('keydown', keyboardRippleShow);
5707
5615
  el.addEventListener('keyup', keyboardRippleHide);
5708
5616
  el.addEventListener('blur', focusRippleHide);
5709
5617
 
@@ -5723,9 +5631,7 @@ function removeListeners(el) {
5723
5631
  el.removeEventListener('touchcancel', rippleHide);
5724
5632
  el.removeEventListener('mouseup', rippleHide);
5725
5633
  el.removeEventListener('mouseleave', rippleHide);
5726
- if (el._ripple?.keyDownHandler) {
5727
- el.removeEventListener('keydown', el._ripple.keyDownHandler);
5728
- }
5634
+ el.removeEventListener('keydown', keyboardRippleShow);
5729
5635
  el.removeEventListener('keyup', keyboardRippleHide);
5730
5636
  el.removeEventListener('dragstart', rippleHide);
5731
5637
  el.removeEventListener('blur', focusRippleHide);
@@ -5734,8 +5640,8 @@ function mounted$4(el, binding) {
5734
5640
  updateRipple(el, binding, false);
5735
5641
  }
5736
5642
  function unmounted$4(el) {
5737
- removeListeners(el);
5738
5643
  delete el._ripple;
5644
+ removeListeners(el);
5739
5645
  }
5740
5646
  function updated$1(el, binding) {
5741
5647
  if (binding.value === binding.oldValue) {
@@ -6008,31 +5914,6 @@ const VAppBarTitle = genericComponent()({
6008
5914
  // Utilities
6009
5915
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6010
5916
 
6011
- // Utilities
6012
-
6013
- // Types
6014
-
6015
- // Types
6016
-
6017
- // Composables
6018
- const makeIconSizeProps = propsFactory({
6019
- iconSize: [Number, String],
6020
- iconSizes: {
6021
- type: Array,
6022
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6023
- }
6024
- }, 'iconSize');
6025
- function useIconSizes(props, fallback) {
6026
- const iconSize = computed(() => {
6027
- const iconSizeMap = new Map(props.iconSizes);
6028
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6029
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6030
- });
6031
- return {
6032
- iconSize
6033
- };
6034
- }
6035
-
6036
5917
  // Types
6037
5918
 
6038
5919
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6072,7 +5953,6 @@ const makeVAlertProps = propsFactory({
6072
5953
  ...makeDensityProps(),
6073
5954
  ...makeDimensionProps(),
6074
5955
  ...makeElevationProps(),
6075
- ...makeIconSizeProps(),
6076
5956
  ...makeLocationProps(),
6077
5957
  ...makePositionProps(),
6078
5958
  ...makeRoundedProps(),
@@ -6100,9 +5980,6 @@ const VAlert = genericComponent()({
6100
5980
  if (!props.type) return props.icon;
6101
5981
  return props.icon ?? `$${props.type}`;
6102
5982
  });
6103
- const {
6104
- iconSize
6105
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6106
5983
  const {
6107
5984
  themeClasses
6108
5985
  } = provideTheme(props);
@@ -6150,11 +6027,6 @@ const VAlert = genericComponent()({
6150
6027
  const hasPrepend = !!(slots.prepend || icon.value);
6151
6028
  const hasTitle = !!(slots.title || props.title);
6152
6029
  const hasClose = !!(slots.close || props.closable);
6153
- const iconProps = {
6154
- density: props.density,
6155
- icon: icon.value,
6156
- size: iconSize.value
6157
- };
6158
6030
  return isActive.value && createVNode(props.tag, {
6159
6031
  "class": normalizeClass(['v-alert', props.border && {
6160
6032
  'v-alert--border': !!props.border,
@@ -6172,14 +6044,19 @@ const VAlert = genericComponent()({
6172
6044
  }, null), hasPrepend && createElementVNode("div", {
6173
6045
  "key": "prepend",
6174
6046
  "class": "v-alert__prepend"
6175
- }, [!slots.prepend ? createVNode(VIcon, mergeProps({
6176
- "key": "prepend-icon"
6177
- }, iconProps), null) : createVNode(VDefaultsProvider, {
6047
+ }, [!slots.prepend ? createVNode(VIcon, {
6048
+ "key": "prepend-icon",
6049
+ "density": props.density,
6050
+ "icon": icon.value,
6051
+ "size": props.prominent ? 44 : 28
6052
+ }, null) : createVNode(VDefaultsProvider, {
6178
6053
  "key": "prepend-defaults",
6179
6054
  "disabled": !icon.value,
6180
6055
  "defaults": {
6181
6056
  VIcon: {
6182
- ...iconProps
6057
+ density: props.density,
6058
+ icon: icon.value,
6059
+ size: props.prominent ? 44 : 28
6183
6060
  }
6184
6061
  }
6185
6062
  }, slots.prepend)]), createElementVNode("div", {
@@ -7704,7 +7581,6 @@ function getOffsetPosition(isHorizontal, element) {
7704
7581
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7705
7582
  const makeVSlideGroupProps = propsFactory({
7706
7583
  centerActive: Boolean,
7707
- contentClass: null,
7708
7584
  direction: {
7709
7585
  type: String,
7710
7586
  default: 'horizontal'
@@ -8017,7 +7893,7 @@ const VSlideGroup = genericComponent()({
8017
7893
  })]), createElementVNode("div", {
8018
7894
  "key": "container",
8019
7895
  "ref": containerRef,
8020
- "class": normalizeClass(['v-slide-group__container', props.contentClass]),
7896
+ "class": "v-slide-group__container",
8021
7897
  "onScroll": onScroll
8022
7898
  }, [createElementVNode("div", {
8023
7899
  "ref": contentRef,
@@ -8380,85 +8256,16 @@ const VChip = genericComponent()({
8380
8256
  }
8381
8257
  });
8382
8258
 
8383
- const makeVDividerProps = propsFactory({
8384
- color: String,
8385
- inset: Boolean,
8386
- length: [Number, String],
8387
- opacity: [Number, String],
8388
- thickness: [Number, String],
8389
- vertical: Boolean,
8390
- ...makeComponentProps(),
8391
- ...makeThemeProps()
8392
- }, 'VDivider');
8393
- const VDivider = genericComponent()({
8394
- name: 'VDivider',
8395
- props: makeVDividerProps(),
8396
- setup(props, _ref) {
8397
- let {
8398
- attrs,
8399
- slots
8400
- } = _ref;
8401
- const {
8402
- themeClasses
8403
- } = provideTheme(props);
8404
- const {
8405
- textColorClasses,
8406
- textColorStyles
8407
- } = useTextColor(() => props.color);
8408
- const dividerStyles = computed(() => {
8409
- const styles = {};
8410
- if (props.length) {
8411
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8412
- }
8413
- if (props.thickness) {
8414
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8415
- }
8416
- return styles;
8417
- });
8418
- useRender(() => {
8419
- const divider = createElementVNode("hr", {
8420
- "class": normalizeClass([{
8421
- 'v-divider': true,
8422
- 'v-divider--inset': props.inset,
8423
- 'v-divider--vertical': props.vertical
8424
- }, themeClasses.value, textColorClasses.value, props.class]),
8425
- "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
8426
- '--v-border-opacity': props.opacity
8427
- }, props.style]),
8428
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8429
- "role": `${attrs.role || 'separator'}`
8430
- }, null);
8431
- if (!slots.default) return divider;
8432
- return createElementVNode("div", {
8433
- "class": normalizeClass(['v-divider__wrapper', {
8434
- 'v-divider__wrapper--vertical': props.vertical,
8435
- 'v-divider__wrapper--inset': props.inset
8436
- }])
8437
- }, [divider, createElementVNode("div", {
8438
- "class": "v-divider__content"
8439
- }, [slots.default()]), divider]);
8440
- });
8441
- return {};
8442
- }
8443
- });
8444
-
8445
8259
  // Utilities
8446
8260
 
8447
8261
  // List
8448
8262
  const ListKey = Symbol.for('vuetify:list');
8449
8263
  function createList() {
8450
- let {
8451
- filterable
8452
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
8453
- filterable: false
8454
- };
8455
8264
  const parent = inject$1(ListKey, {
8456
- filterable: false,
8457
8265
  hasPrepend: shallowRef(false),
8458
8266
  updateHasPrepend: () => null
8459
8267
  });
8460
8268
  const data = {
8461
- filterable: parent.filterable || filterable,
8462
8269
  hasPrepend: shallowRef(false),
8463
8270
  updateHasPrepend: value => {
8464
8271
  if (value) data.hasPrepend.value = value;
@@ -9410,9 +9217,6 @@ const VListItem = genericComponent()({
9410
9217
  roundedClasses
9411
9218
  } = useRounded(roundedProps);
9412
9219
  const lineClasses = toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
9413
- const rippleOptions = toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
9414
- keys: [keyCodes.enter]
9415
- } : props.ripple);
9416
9220
  const slotProps = computed(() => ({
9417
9221
  isActive: isActive.value,
9418
9222
  select,
@@ -9437,9 +9241,8 @@ const VListItem = genericComponent()({
9437
9241
  function onKeyDown(e) {
9438
9242
  const target = e.target;
9439
9243
  if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9440
- if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
9244
+ if (e.key === 'Enter' || e.key === ' ') {
9441
9245
  e.preventDefault();
9442
- e.stopPropagation();
9443
9246
  e.target.dispatchEvent(new MouseEvent('click', e));
9444
9247
  }
9445
9248
  }
@@ -9549,7 +9352,7 @@ const VListItem = genericComponent()({
9549
9352
  }), createElementVNode("div", {
9550
9353
  "class": "v-list-item__spacer"
9551
9354
  }, null)])]
9552
- }), [[Ripple, isClickable.value && rippleOptions.value]]);
9355
+ }), [[Ripple, isClickable.value && props.ripple]]);
9553
9356
  });
9554
9357
  return {
9555
9358
  activate,
@@ -9604,6 +9407,68 @@ const VListSubheader = genericComponent()({
9604
9407
  }
9605
9408
  });
9606
9409
 
9410
+ const makeVDividerProps = propsFactory({
9411
+ color: String,
9412
+ inset: Boolean,
9413
+ length: [Number, String],
9414
+ opacity: [Number, String],
9415
+ thickness: [Number, String],
9416
+ vertical: Boolean,
9417
+ ...makeComponentProps(),
9418
+ ...makeThemeProps()
9419
+ }, 'VDivider');
9420
+ const VDivider = genericComponent()({
9421
+ name: 'VDivider',
9422
+ props: makeVDividerProps(),
9423
+ setup(props, _ref) {
9424
+ let {
9425
+ attrs,
9426
+ slots
9427
+ } = _ref;
9428
+ const {
9429
+ themeClasses
9430
+ } = provideTheme(props);
9431
+ const {
9432
+ textColorClasses,
9433
+ textColorStyles
9434
+ } = useTextColor(() => props.color);
9435
+ const dividerStyles = computed(() => {
9436
+ const styles = {};
9437
+ if (props.length) {
9438
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9439
+ }
9440
+ if (props.thickness) {
9441
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9442
+ }
9443
+ return styles;
9444
+ });
9445
+ useRender(() => {
9446
+ const divider = createElementVNode("hr", {
9447
+ "class": normalizeClass([{
9448
+ 'v-divider': true,
9449
+ 'v-divider--inset': props.inset,
9450
+ 'v-divider--vertical': props.vertical
9451
+ }, themeClasses.value, textColorClasses.value, props.class]),
9452
+ "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
9453
+ '--v-border-opacity': props.opacity
9454
+ }, props.style]),
9455
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9456
+ "role": `${attrs.role || 'separator'}`
9457
+ }, null);
9458
+ if (!slots.default) return divider;
9459
+ return createElementVNode("div", {
9460
+ "class": normalizeClass(['v-divider__wrapper', {
9461
+ 'v-divider__wrapper--vertical': props.vertical,
9462
+ 'v-divider__wrapper--inset': props.inset
9463
+ }])
9464
+ }, [divider, createElementVNode("div", {
9465
+ "class": "v-divider__content"
9466
+ }, [slots.default()]), divider]);
9467
+ });
9468
+ return {};
9469
+ }
9470
+ });
9471
+
9607
9472
  // Types
9608
9473
 
9609
9474
  const makeVListChildrenProps = propsFactory({
@@ -9872,7 +9737,6 @@ const makeVListProps = propsFactory({
9872
9737
  activeClass: String,
9873
9738
  bgColor: String,
9874
9739
  disabled: Boolean,
9875
- filterable: Boolean,
9876
9740
  expandIcon: IconValue,
9877
9741
  collapseIcon: IconValue,
9878
9742
  lines: {
@@ -9956,9 +9820,7 @@ const VList = genericComponent()({
9956
9820
  const activeColor = toRef(() => props.activeColor);
9957
9821
  const baseColor = toRef(() => props.baseColor);
9958
9822
  const color = toRef(() => props.color);
9959
- createList({
9960
- filterable: props.filterable
9961
- });
9823
+ createList();
9962
9824
  provideDefaults({
9963
9825
  VListGroup: {
9964
9826
  activeColor,
@@ -11641,7 +11503,6 @@ const makeVMenuProps = propsFactory({
11641
11503
  // disableKeys: Boolean,
11642
11504
  id: String,
11643
11505
  submenu: Boolean,
11644
- disableInitialFocus: Boolean,
11645
11506
  ...omit(makeVOverlayProps({
11646
11507
  closeDelay: 250,
11647
11508
  closeOnContentClick: true,
@@ -11716,7 +11577,7 @@ const VMenu = genericComponent()({
11716
11577
  watch(isActive, val => {
11717
11578
  if (val) {
11718
11579
  parent?.register();
11719
- if (IN_BROWSER && !props.disableInitialFocus) {
11580
+ if (IN_BROWSER) {
11720
11581
  document.addEventListener('focusin', onFocusIn, {
11721
11582
  once: true
11722
11583
  });
@@ -12536,12 +12397,7 @@ function useVirtual(props, items) {
12536
12397
  }
12537
12398
  function calculateOffset(index) {
12538
12399
  index = clamp(index, 0, items.value.length - 1);
12539
- const whole = Math.floor(index);
12540
- const fraction = index % 1;
12541
- const next = whole + 1;
12542
- const wholeOffset = offsets[whole] || 0;
12543
- const nextOffset = offsets[next] || wholeOffset;
12544
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12400
+ return offsets[index] || 0;
12545
12401
  }
12546
12402
  function calculateIndex(scrollTop) {
12547
12403
  return binaryClosest(offsets, scrollTop);
@@ -12895,7 +12751,6 @@ const makeSelectProps = propsFactory({
12895
12751
  },
12896
12752
  openOnClear: Boolean,
12897
12753
  itemColor: String,
12898
- noAutoScroll: Boolean,
12899
12754
  ...makeItemsProps({
12900
12755
  itemChildren: false
12901
12756
  })
@@ -13110,7 +12965,7 @@ const VSelect = genericComponent()({
13110
12965
  watch(menu, () => {
13111
12966
  if (!props.hideSelected && menu.value && model.value.length) {
13112
12967
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
13113
- IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
12968
+ IN_BROWSER && window.requestAnimationFrame(() => {
13114
12969
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
13115
12970
  });
13116
12971
  }
@@ -13203,22 +13058,6 @@ const VSelect = genericComponent()({
13203
13058
  key: item.value,
13204
13059
  onClick: () => select(item, null)
13205
13060
  });
13206
- if (item.raw.type === 'divider') {
13207
- return slots.divider?.({
13208
- props: item.raw,
13209
- index
13210
- }) ?? createVNode(VDivider, mergeProps(item.props, {
13211
- "key": `divider-${index}`
13212
- }), null);
13213
- }
13214
- if (item.raw.type === 'subheader') {
13215
- return slots.subheader?.({
13216
- props: item.raw,
13217
- index
13218
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13219
- "key": `subheader-${index}`
13220
- }), null);
13221
- }
13222
13061
  return slots.item?.({
13223
13062
  item,
13224
13063
  index,
@@ -13379,9 +13218,6 @@ function filterItems(items, query, options) {
13379
13218
  let match = -1;
13380
13219
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13381
13220
  if (typeof item === 'object') {
13382
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13383
- continue;
13384
- }
13385
13221
  const filterKeys = keys || Object.keys(transformed);
13386
13222
  for (const key of filterKeys) {
13387
13223
  const value = getPropertyFromItem(transformed, key);
@@ -13584,7 +13420,7 @@ const VAutocomplete = genericComponent()({
13584
13420
  menu.value = !menu.value;
13585
13421
  }
13586
13422
  function onListKeydown(e) {
13587
- if (checkPrintable(e) || e.key === 'Backspace') {
13423
+ if (e.key !== ' ' && checkPrintable(e)) {
13588
13424
  vTextFieldRef.value?.focus();
13589
13425
  }
13590
13426
  }
@@ -13789,7 +13625,6 @@ const VAutocomplete = genericComponent()({
13789
13625
  }, props.menuProps), {
13790
13626
  default: () => [hasList && createVNode(VList, mergeProps({
13791
13627
  "ref": listRef,
13792
- "filterable": true,
13793
13628
  "selected": selectedValues.value,
13794
13629
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
13795
13630
  "onMousedown": e => e.preventDefault(),
@@ -13821,22 +13656,6 @@ const VAutocomplete = genericComponent()({
13821
13656
  active: highlightFirst.value && index === 0 ? true : undefined,
13822
13657
  onClick: () => select(item, null)
13823
13658
  });
13824
- if (item.raw.type === 'divider') {
13825
- return slots.divider?.({
13826
- props: item.raw,
13827
- index
13828
- }) ?? createVNode(VDivider, mergeProps(item.props, {
13829
- "key": `divider-${index}`
13830
- }), null);
13831
- }
13832
- if (item.raw.type === 'subheader') {
13833
- return slots.subheader?.({
13834
- props: item.raw,
13835
- index
13836
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13837
- "key": `subheader-${index}`
13838
- }), null);
13839
- }
13840
13659
  return slots.item?.({
13841
13660
  item,
13842
13661
  index,
@@ -13981,8 +13800,7 @@ const makeVBadgeProps = propsFactory({
13981
13800
  ...makeThemeProps(),
13982
13801
  ...makeTransitionProps({
13983
13802
  transition: 'scale-rotate-transition'
13984
- }),
13985
- ...makeDimensionProps()
13803
+ })
13986
13804
  }, 'VBadge');
13987
13805
  const VBadge = genericComponent()({
13988
13806
  name: 'VBadge',
@@ -14012,9 +13830,6 @@ const VBadge = genericComponent()({
14012
13830
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
14013
13831
  return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
14014
13832
  });
14015
- const {
14016
- dimensionStyles
14017
- } = useDimension(props);
14018
13833
  useRender(() => {
14019
13834
  const value = Number(props.content);
14020
13835
  const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
@@ -14036,7 +13851,7 @@ const VBadge = genericComponent()({
14036
13851
  }, {
14037
13852
  default: () => [withDirectives(createElementVNode("span", mergeProps({
14038
13853
  "class": ['v-badge__badge', themeClasses.value, backgroundColorClasses.value, roundedClasses.value, textColorClasses.value],
14039
- "style": [backgroundColorStyles.value, textColorStyles.value, dimensionStyles.value, props.inline ? {} : locationStyles.value],
13854
+ "style": [backgroundColorStyles.value, textColorStyles.value, props.inline ? {} : locationStyles.value],
14040
13855
  "aria-atomic": "true",
14041
13856
  "aria-label": t(props.label, value),
14042
13857
  "aria-live": "polite",
@@ -17445,13 +17260,13 @@ function date(value) {
17445
17260
  return null;
17446
17261
  }
17447
17262
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17448
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17263
+ function getWeekdays(locale, firstDayOfWeek) {
17449
17264
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17450
17265
  return createRange(7).map(i => {
17451
17266
  const weekday = new Date(sundayJanuarySecond2000);
17452
17267
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17453
17268
  return new Intl.DateTimeFormat(locale, {
17454
- weekday: weekdayFormat ?? 'narrow'
17269
+ weekday: 'narrow'
17455
17270
  }).format(weekday);
17456
17271
  });
17457
17272
  }
@@ -17915,9 +17730,9 @@ class VuetifyDateAdapter {
17915
17730
  getDiff(date, comparing, unit) {
17916
17731
  return getDiff(date, comparing, unit);
17917
17732
  }
17918
- getWeekdays(firstDayOfWeek, weekdayFormat) {
17733
+ getWeekdays(firstDayOfWeek) {
17919
17734
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
17920
- return getWeekdays(this.locale, firstDay, weekdayFormat);
17735
+ return getWeekdays(this.locale, firstDay);
17921
17736
  }
17922
17737
  getYear(date) {
17923
17738
  return getYear(date);
@@ -18272,7 +18087,6 @@ const VCombobox = genericComponent()({
18272
18087
  _search.value = val ?? '';
18273
18088
  if (!props.multiple && !hasSelectionSlot.value) {
18274
18089
  model.value = [transformItem$3(props, val)];
18275
- nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18276
18090
  }
18277
18091
  if (val && props.multiple && props.delimiters?.length) {
18278
18092
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18353,7 +18167,7 @@ const VCombobox = genericComponent()({
18353
18167
  menu.value = !menu.value;
18354
18168
  }
18355
18169
  function onListKeydown(e) {
18356
- if (checkPrintable(e) || e.key === 'Backspace') {
18170
+ if (e.key !== ' ' && checkPrintable(e)) {
18357
18171
  vTextFieldRef.value?.focus();
18358
18172
  }
18359
18173
  }
@@ -18558,7 +18372,6 @@ const VCombobox = genericComponent()({
18558
18372
  }, props.menuProps), {
18559
18373
  default: () => [hasList && createVNode(VList, mergeProps({
18560
18374
  "ref": listRef,
18561
- "filterable": true,
18562
18375
  "selected": selectedValues.value,
18563
18376
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18564
18377
  "onMousedown": e => e.preventDefault(),
@@ -18590,22 +18403,6 @@ const VCombobox = genericComponent()({
18590
18403
  active: highlightFirst.value && index === 0 ? true : undefined,
18591
18404
  onClick: () => select(item, null)
18592
18405
  });
18593
- if (item.raw.type === 'divider') {
18594
- return slots.divider?.({
18595
- props: item.raw,
18596
- index
18597
- }) ?? createVNode(VDivider, mergeProps(item.props, {
18598
- "key": `divider-${index}`
18599
- }), null);
18600
- }
18601
- if (item.raw.type === 'subheader') {
18602
- return slots.subheader?.({
18603
- props: item.raw,
18604
- index
18605
- }) ?? createVNode(VListSubheader, mergeProps(item.props, {
18606
- "key": `subheader-${index}`
18607
- }), null);
18608
- }
18609
18406
  return slots.item?.({
18610
18407
  item,
18611
18408
  index,
@@ -20488,7 +20285,6 @@ const makeVDataTableHeadersProps = propsFactory({
20488
20285
  color: String,
20489
20286
  disableSort: Boolean,
20490
20287
  fixedHeader: Boolean,
20491
- lastFixed: Boolean,
20492
20288
  multiSort: Boolean,
20493
20289
  sortAscIcon: {
20494
20290
  type: IconValue,
@@ -20535,11 +20331,10 @@ const VDataTableHeaders = genericComponent()({
20535
20331
  loaderClasses
20536
20332
  } = useLoader(props);
20537
20333
  function getFixedStyles(column, y) {
20538
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20334
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20539
20335
  return {
20540
20336
  position: 'sticky',
20541
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20542
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20337
+ left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20543
20338
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20544
20339
  };
20545
20340
  }
@@ -21055,18 +20850,11 @@ const VDataTableRows = genericComponent()({
21055
20850
  }
21056
20851
  });
21057
20852
 
21058
- // Types
21059
-
21060
20853
  const makeVTableProps = propsFactory({
21061
20854
  fixedHeader: Boolean,
21062
20855
  fixedFooter: Boolean,
21063
20856
  height: [Number, String],
21064
20857
  hover: Boolean,
21065
- striped: {
21066
- type: String,
21067
- default: null,
21068
- validator: v => ['even', 'odd'].includes(v)
21069
- },
21070
20858
  ...makeComponentProps(),
21071
20859
  ...makeDensityProps(),
21072
20860
  ...makeTagProps(),
@@ -21093,9 +20881,7 @@ const VTable = genericComponent()({
21093
20881
  'v-table--fixed-footer': props.fixedFooter,
21094
20882
  'v-table--has-top': !!slots.top,
21095
20883
  'v-table--has-bottom': !!slots.bottom,
21096
- 'v-table--hover': props.hover,
21097
- 'v-table--striped-even': props.striped === 'even',
21098
- 'v-table--striped-odd': props.striped === 'odd'
20884
+ 'v-table--hover': props.hover
21099
20885
  }, themeClasses.value, densityClasses.value, props.class]),
21100
20886
  "style": normalizeStyle(props.style)
21101
20887
  }, {
@@ -22270,8 +22056,7 @@ const makeCalendarProps = propsFactory({
22270
22056
  firstDayOfWeek: {
22271
22057
  type: [Number, String],
22272
22058
  default: undefined
22273
- },
22274
- weekdayFormat: String
22059
+ }
22275
22060
  }, 'calendar');
22276
22061
  function useCalendar(props) {
22277
22062
  const adapter = useDate();
@@ -22512,7 +22297,7 @@ const VDatePickerMonth = genericComponent()({
22512
22297
  "ref": daysRef,
22513
22298
  "key": daysInMonth.value[0].date?.toString(),
22514
22299
  "class": "v-date-picker-month__days"
22515
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
22300
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
22516
22301
  "class": normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22517
22302
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22518
22303
  const slotProps = {
@@ -23017,9 +22802,7 @@ const VDatePicker = genericComponent()({
23017
22802
  "max": maxDate.value,
23018
22803
  "year": year.value,
23019
22804
  "allowedMonths": allowedMonths
23020
- }), {
23021
- ...pick(slots, ['month'])
23022
- }) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
22805
+ }), null) : viewMode.value === 'year' ? createVNode(VDatePickerYears, mergeProps({
23023
22806
  "key": "date-picker-years"
23024
22807
  }, datePickerYearsProps, {
23025
22808
  "modelValue": year.value,
@@ -23027,9 +22810,7 @@ const VDatePicker = genericComponent()({
23027
22810
  "min": minDate.value,
23028
22811
  "max": maxDate.value,
23029
22812
  "allowedYears": allowedYears
23030
- }), {
23031
- ...pick(slots, ['year'])
23032
- }) : createVNode(VDatePickerMonth, mergeProps({
22813
+ }), null) : createVNode(VDatePickerMonth, mergeProps({
23033
22814
  "key": "date-picker-month"
23034
22815
  }, datePickerMonthProps, {
23035
22816
  "modelValue": model.value,
@@ -23040,9 +22821,7 @@ const VDatePicker = genericComponent()({
23040
22821
  "onUpdate:year": [$event => year.value = $event, onUpdateYear],
23041
22822
  "min": minDate.value,
23042
22823
  "max": maxDate.value
23043
- }), {
23044
- ...pick(slots, ['day'])
23045
- })]
22824
+ }), null)]
23046
22825
  })]),
23047
22826
  actions: slots.actions
23048
22827
  });
@@ -24133,9 +23912,6 @@ const VInfiniteScroll = genericComponent()({
24133
23912
  startStatus.value = status;
24134
23913
  } else if (side === 'end') {
24135
23914
  endStatus.value = status;
24136
- } else if (side === 'both') {
24137
- startStatus.value = status;
24138
- endStatus.value = status;
24139
23915
  }
24140
23916
  }
24141
23917
  function getStatus(side) {
@@ -24247,32 +24023,6 @@ const VInfiniteScroll = genericComponent()({
24247
24023
  }, [renderSide('end', endStatus.value)])]
24248
24024
  });
24249
24025
  });
24250
- function reset(side) {
24251
- const effectiveSide = side ?? props.side;
24252
- setStatus(effectiveSide, 'ok');
24253
- nextTick(() => {
24254
- setScrollAmount(getScrollSize() - previousScrollSize + getScrollAmount());
24255
- if (props.mode !== 'manual') {
24256
- nextTick(() => {
24257
- window.requestAnimationFrame(() => {
24258
- window.requestAnimationFrame(() => {
24259
- window.requestAnimationFrame(() => {
24260
- if (effectiveSide === 'both') {
24261
- intersecting('start');
24262
- intersecting('end');
24263
- } else {
24264
- intersecting(effectiveSide);
24265
- }
24266
- });
24267
- });
24268
- });
24269
- });
24270
- }
24271
- });
24272
- }
24273
- return {
24274
- reset
24275
- };
24276
24026
  }
24277
24027
  });
24278
24028
 
@@ -24352,47 +24102,8 @@ const VItem = genericComponent()({
24352
24102
  }
24353
24103
  });
24354
24104
 
24355
- const makeVKbdProps = propsFactory({
24356
- ...makeBorderProps(),
24357
- ...makeComponentProps(),
24358
- ...makeRoundedProps(),
24359
- ...makeTagProps({
24360
- tag: 'kbd'
24361
- }),
24362
- ...makeThemeProps(),
24363
- ...makeElevationProps(),
24364
- color: String
24365
- }, 'VKbd');
24366
- const VKbd = genericComponent()({
24367
- name: 'VKbd',
24368
- props: makeVKbdProps(),
24369
- setup(props, _ref) {
24370
- let {
24371
- slots
24372
- } = _ref;
24373
- const {
24374
- themeClasses
24375
- } = provideTheme(props);
24376
- const {
24377
- borderClasses
24378
- } = useBorder(props);
24379
- const {
24380
- roundedClasses
24381
- } = useRounded(props);
24382
- const {
24383
- backgroundColorClasses,
24384
- backgroundColorStyles
24385
- } = useBackgroundColor(() => props.color);
24386
- const {
24387
- elevationClasses
24388
- } = useElevation(props);
24389
- useRender(() => createVNode(props.tag, {
24390
- "class": normalizeClass(['v-kbd', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
24391
- "style": normalizeStyle([backgroundColorStyles.value, props.style])
24392
- }, slots));
24393
- return {};
24394
- }
24395
- });
24105
+ // Styles
24106
+ const VKbd = createSimpleFunctional('v-kbd', 'kbd');
24396
24107
 
24397
24108
  const makeVLayoutProps = propsFactory({
24398
24109
  ...makeComponentProps(),
@@ -25230,14 +24941,6 @@ const makeVNumberInputProps = propsFactory({
25230
24941
  type: Number,
25231
24942
  default: 0
25232
24943
  },
25233
- minFractionDigits: {
25234
- type: Number,
25235
- default: null
25236
- },
25237
- decimalSeparator: {
25238
- type: String,
25239
- validator: v => !v || v.length === 1
25240
- },
25241
24944
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25242
24945
  }, 'VNumberInput');
25243
24946
  const VNumberInput = genericComponent()({
@@ -25263,24 +24966,11 @@ const VNumberInput = genericComponent()({
25263
24966
  const form = useForm(props);
25264
24967
  const controlsDisabled = computed(() => form.isDisabled.value || form.isReadonly.value);
25265
24968
  const isFocused = shallowRef(props.focused);
25266
- const {
25267
- decimalSeparator: decimalSeparatorFromLocale
25268
- } = useLocale();
25269
- const decimalSeparator = computed(() => props.decimalSeparator?.[0] || decimalSeparatorFromLocale.value);
25270
24969
  function correctPrecision(val) {
25271
24970
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25272
- let trim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
25273
24971
  const fixed = precision == null ? String(val) : val.toFixed(precision);
25274
- if (isFocused.value && trim) {
25275
- return Number(fixed).toString() // trim zeros
25276
- .replace('.', decimalSeparator.value);
25277
- }
25278
- if (props.minFractionDigits === null || precision !== null && precision < props.minFractionDigits) {
25279
- return fixed.replace('.', decimalSeparator.value);
25280
- }
25281
- let [baseDigits, fractionDigits] = fixed.split('.');
25282
- fractionDigits = (fractionDigits ?? '').padEnd(props.minFractionDigits, '0').replace(new RegExp(`(?<=\\d{${props.minFractionDigits}})0`, 'g'), '');
25283
- return [baseDigits, fractionDigits].filter(Boolean).join(decimalSeparator.value);
24972
+ return isFocused.value ? Number(fixed).toString() // trim zeros
24973
+ : fixed;
25284
24974
  }
25285
24975
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25286
24976
  const _inputText = shallowRef(null);
@@ -25297,11 +24987,8 @@ const VNumberInput = genericComponent()({
25297
24987
  if (val === null || val === '') {
25298
24988
  model.value = null;
25299
24989
  _inputText.value = null;
25300
- return;
25301
- }
25302
- const parsedValue = Number(val.replace(decimalSeparator.value, '.'));
25303
- if (!isNaN(parsedValue) && parsedValue <= props.max && parsedValue >= props.min) {
25304
- model.value = parsedValue;
24990
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
24991
+ model.value = Number(val);
25305
24992
  _inputText.value = val;
25306
24993
  }
25307
24994
  }
@@ -25338,7 +25025,6 @@ const VNumberInput = genericComponent()({
25338
25025
  }
25339
25026
  };
25340
25027
  watch(() => props.precision, () => formatInputValue());
25341
- watch(() => props.minFractionDigits, () => formatInputValue());
25342
25028
  onMounted(() => {
25343
25029
  clampModel();
25344
25030
  });
@@ -25372,24 +25058,24 @@ const VNumberInput = genericComponent()({
25372
25058
  selectionEnd
25373
25059
  } = inputElement ?? {};
25374
25060
  const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
25375
- const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision, decimalSeparator.value);
25061
+ const potentialNewNumber = extractNumber(potentialNewInputVal, props.precision);
25376
25062
 
25377
- // Allow only numbers, "-" and {decimal separator}
25378
- // Allow "-" and {decimal separator} only once
25379
- // Allow "-" only at the start
25380
- if (!new RegExp(`^-?\\d*${escapeForRegex(decimalSeparator.value)}?\\d*$`).test(potentialNewInputVal)) {
25063
+ // Only numbers, "-", "." are allowed
25064
+ // AND "-", "." are allowed only once
25065
+ // AND "-" is only allowed at the start
25066
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
25381
25067
  e.preventDefault();
25382
25068
  inputElement.value = potentialNewNumber;
25383
25069
  }
25384
25070
  if (props.precision == null) return;
25385
25071
 
25386
25072
  // Ignore decimal digits above precision limit
25387
- if (potentialNewInputVal.split(decimalSeparator.value)[1]?.length > props.precision) {
25073
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
25388
25074
  e.preventDefault();
25389
25075
  inputElement.value = potentialNewNumber;
25390
25076
  }
25391
25077
  // Ignore decimal separator when precision = 0
25392
- if (props.precision === 0 && potentialNewInputVal.includes(decimalSeparator.value)) {
25078
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
25393
25079
  e.preventDefault();
25394
25080
  inputElement.value = potentialNewNumber;
25395
25081
  }
@@ -25441,16 +25127,19 @@ const VNumberInput = genericComponent()({
25441
25127
  if (controlsDisabled.value) return;
25442
25128
  if (!vTextFieldRef.value) return;
25443
25129
  const actualText = vTextFieldRef.value.value;
25444
- const parsedValue = Number(actualText.replace(decimalSeparator.value, '.'));
25445
- if (actualText && !isNaN(parsedValue)) {
25446
- inputText.value = correctPrecision(clamp(parsedValue, props.min, props.max));
25130
+ if (actualText && !isNaN(Number(actualText))) {
25131
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
25447
25132
  } else {
25448
25133
  inputText.value = null;
25449
25134
  }
25450
25135
  }
25451
25136
  function formatInputValue() {
25452
25137
  if (controlsDisabled.value) return;
25453
- inputText.value = model.value !== null && !isNaN(model.value) ? correctPrecision(model.value, props.precision, false) : null;
25138
+ if (model.value === null || isNaN(model.value)) {
25139
+ inputText.value = null;
25140
+ return;
25141
+ }
25142
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25454
25143
  }
25455
25144
  function trimDecimalZeros() {
25456
25145
  if (controlsDisabled.value) return;
@@ -25458,7 +25147,7 @@ const VNumberInput = genericComponent()({
25458
25147
  inputText.value = null;
25459
25148
  return;
25460
25149
  }
25461
- inputText.value = model.value.toString().replace('.', decimalSeparator.value);
25150
+ inputText.value = model.value.toString();
25462
25151
  }
25463
25152
  function onFocus() {
25464
25153
  trimDecimalZeros();
@@ -25710,10 +25399,9 @@ const VOtpInput = genericComponent()({
25710
25399
  e.preventDefault();
25711
25400
  e.stopPropagation();
25712
25401
  const clipboardText = e?.clipboardData?.getData('Text').trim().slice(0, length.value) ?? '';
25713
- const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
25714
25402
  if (isValidNumber(clipboardText)) return;
25715
25403
  model.value = clipboardText.split('');
25716
- inputRef.value?.[finalIndex].focus();
25404
+ inputRef.value?.[index].blur();
25717
25405
  }
25718
25406
  function reset() {
25719
25407
  model.value = [];
@@ -30413,6 +30101,11 @@ const makeVIconBtnProps = propsFactory({
30413
30101
  hideOverlay: Boolean,
30414
30102
  icon: [String, Function, Object],
30415
30103
  iconColor: String,
30104
+ iconSize: [Number, String],
30105
+ iconSizes: {
30106
+ type: Array,
30107
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
30108
+ },
30416
30109
  loading: Boolean,
30417
30110
  opacity: [Number, String],
30418
30111
  readonly: Boolean,
@@ -30432,7 +30125,6 @@ const makeVIconBtnProps = propsFactory({
30432
30125
  ...makeBorderProps(),
30433
30126
  ...makeComponentProps(),
30434
30127
  ...makeElevationProps(),
30435
- ...makeIconSizeProps(),
30436
30128
  ...makeRoundedProps(),
30437
30129
  ...makeTagProps({
30438
30130
  tag: 'button'
@@ -30487,6 +30179,7 @@ const VIconBtn = genericComponent()({
30487
30179
  })()
30488
30180
  }));
30489
30181
  const btnSizeMap = new Map(props.sizes);
30182
+ const iconSizeMap = new Map(props.iconSizes);
30490
30183
  function onClick() {
30491
30184
  if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
30492
30185
  isActive.value = !isActive.value;
@@ -30498,12 +30191,12 @@ const VIconBtn = genericComponent()({
30498
30191
  const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
30499
30192
  const btnHeight = props.height ?? btnSize;
30500
30193
  const btnWidth = props.width ?? btnSize;
30501
- const {
30502
- iconSize
30503
- } = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
30194
+ const _iconSize = props.iconSize;
30195
+ const hasNamedIconSize = iconSizeMap.has(_iconSize);
30196
+ const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
30504
30197
  const iconProps = {
30505
30198
  icon,
30506
- size: iconSize.value,
30199
+ size: iconSize,
30507
30200
  iconColor: props.iconColor,
30508
30201
  opacity: props.opacity
30509
30202
  };
@@ -30546,7 +30239,7 @@ const VIconBtn = genericComponent()({
30546
30239
  "color": typeof props.loading === 'boolean' ? undefined : props.loading,
30547
30240
  "indeterminate": "disable-shrink",
30548
30241
  "width": "2",
30549
- "size": iconSize.value
30242
+ "size": iconSize
30550
30243
  }, null)])]
30551
30244
  });
30552
30245
  });
@@ -30554,251 +30247,6 @@ const VIconBtn = genericComponent()({
30554
30247
  }
30555
30248
  });
30556
30249
 
30557
- // Utilities
30558
-
30559
- // Types
30560
-
30561
- const makeMaskProps = propsFactory({
30562
- mask: [String, Object],
30563
- returnMaskedValue: Boolean
30564
- }, 'mask');
30565
- const defaultDelimiters = /[-!$%^&*()_+|~=`{}[\]:";'<>?,./\\ ]/;
30566
- const presets = {
30567
- 'credit-card': '#### - #### - #### - ####',
30568
- date: '##/##/####',
30569
- 'date-time': '##/##/#### ##:##',
30570
- 'iso-date': '####-##-##',
30571
- 'iso-date-time': '####-##-## ##:##',
30572
- phone: '(###) ### - ####',
30573
- social: '###-##-####',
30574
- time: '##:##',
30575
- 'time-with-seconds': '##:##:##'
30576
- };
30577
- function isMaskDelimiter(char) {
30578
- return char ? defaultDelimiters.test(char) : false;
30579
- }
30580
- const defaultTokens = {
30581
- '#': {
30582
- pattern: /[0-9]/
30583
- },
30584
- A: {
30585
- pattern: /[A-Z]/i,
30586
- convert: v => v.toUpperCase()
30587
- },
30588
- a: {
30589
- pattern: /[a-z]/i,
30590
- convert: v => v.toLowerCase()
30591
- },
30592
- N: {
30593
- pattern: /[0-9A-Z]/i,
30594
- convert: v => v.toUpperCase()
30595
- },
30596
- n: {
30597
- pattern: /[0-9a-z]/i,
30598
- convert: v => v.toLowerCase()
30599
- },
30600
- X: {
30601
- pattern: defaultDelimiters
30602
- }
30603
- };
30604
- function useMask(props, inputRef) {
30605
- const mask = computed(() => {
30606
- if (typeof props.mask === 'string') {
30607
- if (props.mask in presets) return presets[props.mask];
30608
- return props.mask;
30609
- }
30610
- return props.mask?.mask ?? '';
30611
- });
30612
- const tokens = computed(() => {
30613
- return {
30614
- ...defaultTokens,
30615
- ...(isObject(props.mask) ? props.mask.tokens : null)
30616
- };
30617
- });
30618
- const selection = shallowRef(0);
30619
- const lazySelection = shallowRef(0);
30620
- function isMask(char) {
30621
- return char in tokens.value;
30622
- }
30623
- function maskValidates(mask, char) {
30624
- if (char == null || !isMask(mask)) return false;
30625
- const item = tokens.value[mask];
30626
- if (item.pattern) return item.pattern.test(char);
30627
- return item.test(char);
30628
- }
30629
- function convert(mask, char) {
30630
- const item = tokens.value[mask];
30631
- return item.convert ? item.convert(char) : char;
30632
- }
30633
- function maskText(text) {
30634
- const trimmedText = text?.trim().replace(/\s+/g, ' ');
30635
- if (trimmedText == null) return '';
30636
- if (!mask.value.length || !trimmedText.length) return trimmedText;
30637
- let textIndex = 0;
30638
- let maskIndex = 0;
30639
- let newText = '';
30640
- while (maskIndex < mask.value.length) {
30641
- const mchar = mask.value[maskIndex];
30642
- const tchar = trimmedText[textIndex];
30643
-
30644
- // Escaped character in mask, the next mask character is inserted
30645
- if (mchar === '\\') {
30646
- newText += mask.value[maskIndex + 1];
30647
- maskIndex += 2;
30648
- continue;
30649
- }
30650
- if (!isMask(mchar)) {
30651
- newText += mchar;
30652
- if (tchar === mchar) {
30653
- textIndex++;
30654
- }
30655
- } else if (maskValidates(mchar, tchar)) {
30656
- newText += convert(mchar, tchar);
30657
- textIndex++;
30658
- } else {
30659
- break;
30660
- }
30661
- maskIndex++;
30662
- }
30663
- return newText;
30664
- }
30665
- function unmaskText(text) {
30666
- if (text == null) return null;
30667
- if (!mask.value.length || !text.length) return text;
30668
- let textIndex = 0;
30669
- let maskIndex = 0;
30670
- let newText = '';
30671
- while (true) {
30672
- const mchar = mask.value[maskIndex];
30673
- const tchar = text[textIndex];
30674
- if (tchar == null) break;
30675
- if (mchar == null) {
30676
- newText += tchar;
30677
- textIndex++;
30678
- continue;
30679
- }
30680
-
30681
- // Escaped character in mask, skip the next input character
30682
- if (mchar === '\\') {
30683
- if (tchar === mask.value[maskIndex + 1]) {
30684
- textIndex++;
30685
- }
30686
- maskIndex += 2;
30687
- continue;
30688
- }
30689
- if (maskValidates(mchar, tchar)) {
30690
- // masked char
30691
- newText += tchar;
30692
- textIndex++;
30693
- maskIndex++;
30694
- continue;
30695
- } else if (mchar !== tchar) {
30696
- // input doesn't match mask, skip forward until it does
30697
- while (true) {
30698
- const mchar = mask.value[maskIndex++];
30699
- if (mchar == null || maskValidates(mchar, tchar)) break;
30700
- }
30701
- continue;
30702
- }
30703
- textIndex++;
30704
- maskIndex++;
30705
- }
30706
- return newText;
30707
- }
30708
- function setCaretPosition(newSelection) {
30709
- selection.value = newSelection;
30710
- inputRef.value && inputRef.value.setSelectionRange(selection.value, selection.value);
30711
- }
30712
- function resetSelections() {
30713
- if (!inputRef.value?.selectionEnd) return;
30714
- selection.value = inputRef.value.selectionEnd;
30715
- lazySelection.value = 0;
30716
- for (let index = 0; index < selection.value; index++) {
30717
- isMaskDelimiter(inputRef.value.value[index]) || lazySelection.value++;
30718
- }
30719
- }
30720
- function updateRange() {
30721
- if (!inputRef.value) return;
30722
- resetSelections();
30723
- let selection = 0;
30724
- const newValue = inputRef.value.value;
30725
- if (newValue) {
30726
- for (let index = 0; index < newValue.length; index++) {
30727
- if (lazySelection.value <= 0) break;
30728
- isMaskDelimiter(newValue[index]) || lazySelection.value--;
30729
- selection++;
30730
- }
30731
- }
30732
- setCaretPosition(selection);
30733
- }
30734
- return {
30735
- updateRange,
30736
- maskText,
30737
- unmaskText
30738
- };
30739
- }
30740
-
30741
- // Types
30742
-
30743
- const makeVMaskInputProps = propsFactory({
30744
- ...makeVTextFieldProps(),
30745
- ...makeMaskProps()
30746
- }, 'VMaskInput');
30747
- const VMaskInput = genericComponent()({
30748
- name: 'VMaskInput',
30749
- props: makeVMaskInputProps(),
30750
- emits: {
30751
- 'update:modelValue': val => true
30752
- },
30753
- setup(props, _ref) {
30754
- let {
30755
- slots,
30756
- emit
30757
- } = _ref;
30758
- const vTextFieldRef = ref();
30759
- const {
30760
- maskText,
30761
- updateRange,
30762
- unmaskText
30763
- } = useMask(props, vTextFieldRef);
30764
- const returnMaskedValue = computed(() => props.mask && props.returnMaskedValue);
30765
- const model = useProxiedModel(props, 'modelValue', undefined,
30766
- // Always display masked value in input when mask is applied
30767
- val => props.mask ? maskText(unmaskText(val)) : val, val => {
30768
- if (props.mask) {
30769
- const valueBeforeChange = unmaskText(model.value);
30770
- // E.g. mask is #-# and the input value is '2-23'
30771
- // model-value should be enforced to '2-2'
30772
- const enforcedMaskedValue = maskText(unmaskText(val));
30773
- const newUnmaskedValue = unmaskText(enforcedMaskedValue);
30774
- if (newUnmaskedValue === valueBeforeChange) {
30775
- vTextFieldRef.value.value = enforcedMaskedValue;
30776
- }
30777
- val = newUnmaskedValue;
30778
- updateRange();
30779
- return returnMaskedValue.value ? maskText(val) : val;
30780
- }
30781
- return val;
30782
- });
30783
- onBeforeMount(() => {
30784
- if (props.returnMaskedValue) {
30785
- emit('update:modelValue', model.value);
30786
- }
30787
- });
30788
- useRender(() => {
30789
- const textFieldProps = VTextField.filterProps(props);
30790
- return createVNode(VTextField, mergeProps(textFieldProps, {
30791
- "modelValue": model.value,
30792
- "onUpdate:modelValue": $event => model.value = $event,
30793
- "ref": vTextFieldRef
30794
- }), {
30795
- ...slots
30796
- });
30797
- });
30798
- return forwardRefs({}, vTextFieldRef);
30799
- }
30800
- });
30801
-
30802
30250
  // Types
30803
30251
 
30804
30252
  const makeVStepperVerticalActionsProps = propsFactory({
@@ -32304,7 +31752,6 @@ var components = /*#__PURE__*/Object.freeze({
32304
31752
  VListSubheader: VListSubheader,
32305
31753
  VLocaleProvider: VLocaleProvider,
32306
31754
  VMain: VMain,
32307
- VMaskInput: VMaskInput,
32308
31755
  VMenu: VMenu,
32309
31756
  VMessages: VMessages,
32310
31757
  VNavigationDrawer: VNavigationDrawer,
@@ -32702,7 +32149,7 @@ function createVuetify$1() {
32702
32149
  };
32703
32150
  });
32704
32151
  }
32705
- const version$1 = "3.8.9-dev.2025-06-13";
32152
+ const version$1 = "3.8.9-master.2025-06-12";
32706
32153
  createVuetify$1.version = version$1;
32707
32154
 
32708
32155
  // Vue's inject() can only be used in setup
@@ -33000,7 +32447,7 @@ var index = /*#__PURE__*/Object.freeze({
33000
32447
 
33001
32448
  /* eslint-disable local-rules/sort-imports */
33002
32449
 
33003
- const version = "3.8.9-dev.2025-06-13";
32450
+ const version = "3.8.9-master.2025-06-12";
33004
32451
 
33005
32452
  /* eslint-disable local-rules/sort-imports */
33006
32453