@vuetify/nightly 3.8.8-dev.2025-06-04 → 3.8.8-master.2025-06-06

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 (172) hide show
  1. package/CHANGELOG.md +5 -37
  2. package/dist/json/attributes.json +3519 -3619
  3. package/dist/json/importMap-labs.json +20 -20
  4. package/dist/json/importMap.json +148 -148
  5. package/dist/json/tags.json +0 -25
  6. package/dist/json/web-types.json +6117 -6449
  7. package/dist/vuetify-labs.cjs +144 -354
  8. package/dist/vuetify-labs.css +5834 -5868
  9. package/dist/vuetify-labs.d.ts +1899 -2397
  10. package/dist/vuetify-labs.esm.js +145 -355
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +144 -354
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +133 -348
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4252 -4286
  17. package/dist/vuetify.d.ts +1094 -1552
  18. package/dist/vuetify.esm.js +134 -349
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +133 -348
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1207 -1222
  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 +103 -154
  33. package/lib/components/VAutocomplete/VAutocomplete.js +3 -21
  34. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  35. package/lib/components/VBtn/VBtn.d.ts +10 -20
  36. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  37. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  38. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  39. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  40. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  41. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  42. package/lib/components/VCard/VCard.d.ts +10 -20
  43. package/lib/components/VCheckbox/VCheckbox.d.ts +13 -23
  44. package/lib/components/VCheckbox/VCheckboxBtn.d.ts +10 -20
  45. package/lib/components/VChip/VChip.d.ts +10 -20
  46. package/lib/components/VChipGroup/VChipGroup.d.ts +0 -10
  47. package/lib/components/VCombobox/VCombobox.d.ts +103 -154
  48. package/lib/components/VCombobox/VCombobox.js +3 -22
  49. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  50. package/lib/components/VDataTable/VDataTable.d.ts +0 -60
  51. package/lib/components/VDataTable/VDataTableHeaders.d.ts +0 -13
  52. package/lib/components/VDataTable/VDataTableHeaders.js +2 -4
  53. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  54. package/lib/components/VDataTable/VDataTableServer.d.ts +0 -42
  55. package/lib/components/VDataTable/VDataTableVirtual.d.ts +0 -42
  56. package/lib/components/VDatePicker/VDatePicker.d.ts +0 -10
  57. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
  58. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
  59. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  60. package/lib/components/VExpansionPanel/VExpansionPanel.d.ts +10 -20
  61. package/lib/components/VExpansionPanel/VExpansionPanelTitle.d.ts +10 -20
  62. package/lib/components/VExpansionPanel/VExpansionPanels.d.ts +10 -20
  63. package/lib/components/VFab/VFab.d.ts +10 -20
  64. package/lib/components/VField/VField.d.ts +3 -3
  65. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  66. package/lib/components/VInput/VInput.d.ts +4 -4
  67. package/lib/components/VList/VList.d.ts +0 -13
  68. package/lib/components/VList/VList.js +1 -4
  69. package/lib/components/VList/VList.js.map +1 -1
  70. package/lib/components/VList/VListChildren.js.map +1 -1
  71. package/lib/components/VList/VListItem.d.ts +10 -23
  72. package/lib/components/VList/VListItem.js +3 -7
  73. package/lib/components/VList/VListItem.js.map +1 -1
  74. package/lib/components/VList/list.d.ts +2 -9
  75. package/lib/components/VList/list.js +0 -7
  76. package/lib/components/VList/list.js.map +1 -1
  77. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -103
  78. package/lib/components/VNumberInput/VNumberInput.js +4 -19
  79. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  80. package/lib/components/VOtpInput/VOtpInput.js +1 -2
  81. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  82. package/lib/components/VOverlay/VOverlay.css +1 -1
  83. package/lib/components/VOverlay/_variables.scss +1 -1
  84. package/lib/components/VRadio/VRadio.d.ts +10 -20
  85. package/lib/components/VRadioGroup/VRadioGroup.d.ts +13 -23
  86. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  87. package/lib/components/VSelect/VSelect.d.ts +107 -171
  88. package/lib/components/VSelect/VSelect.js +3 -21
  89. package/lib/components/VSelect/VSelect.js.map +1 -1
  90. package/lib/components/VSelectionControl/VSelectionControl.d.ts +10 -20
  91. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.d.ts +14 -28
  92. package/lib/components/VSlideGroup/VSlideGroup.d.ts +0 -10
  93. package/lib/components/VSlideGroup/VSlideGroup.js +1 -2
  94. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  95. package/lib/components/VSlider/VSlider.d.ts +3 -3
  96. package/lib/components/VSlider/VSliderThumb.d.ts +10 -20
  97. package/lib/components/VStepper/VStepperItem.d.ts +14 -28
  98. package/lib/components/VSwitch/VSwitch.d.ts +13 -23
  99. package/lib/components/VTable/VTable.css +0 -6
  100. package/lib/components/VTable/VTable.d.ts +24 -55
  101. package/lib/components/VTable/VTable.js +2 -9
  102. package/lib/components/VTable/VTable.js.map +1 -1
  103. package/lib/components/VTable/VTable.sass +0 -14
  104. package/lib/components/VTable/_variables.scss +0 -1
  105. package/lib/components/VTabs/VTab.d.ts +28 -56
  106. package/lib/components/VTabs/VTabs.d.ts +0 -10
  107. package/lib/components/VTextField/VTextField.d.ts +27 -27
  108. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  109. package/lib/components/VToolbar/VToolbar.d.ts +3 -15
  110. package/lib/components/VToolbar/VToolbar.js +3 -6
  111. package/lib/components/VToolbar/VToolbar.js.map +1 -1
  112. package/lib/composables/calendar.d.ts +0 -6
  113. package/lib/composables/calendar.js +1 -2
  114. package/lib/composables/calendar.js.map +1 -1
  115. package/lib/composables/date/DateAdapter.d.ts +3 -3
  116. package/lib/composables/date/DateAdapter.js.map +1 -1
  117. package/lib/composables/date/adapters/vuetify.d.ts +1 -1
  118. package/lib/composables/date/adapters/vuetify.js +4 -4
  119. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  120. package/lib/composables/date/date.d.ts +3 -3
  121. package/lib/composables/date/index.d.ts +0 -1
  122. package/lib/composables/date/index.js +0 -1
  123. package/lib/composables/date/index.js.map +1 -1
  124. package/lib/composables/filter.js +0 -3
  125. package/lib/composables/filter.js.map +1 -1
  126. package/lib/composables/icons.d.ts +6 -0
  127. package/lib/composables/icons.js.map +1 -1
  128. package/lib/composables/theme.d.ts +1 -6
  129. package/lib/composables/theme.js +26 -94
  130. package/lib/composables/theme.js.map +1 -1
  131. package/lib/composables/virtual.js +1 -6
  132. package/lib/composables/virtual.js.map +1 -1
  133. package/lib/directives/ripple/index.d.ts +1 -2
  134. package/lib/directives/ripple/index.js +7 -12
  135. package/lib/directives/ripple/index.js.map +1 -1
  136. package/lib/entry-bundler.d.ts +3 -3
  137. package/lib/entry-bundler.js +1 -1
  138. package/lib/entry-bundler.js.map +1 -1
  139. package/lib/framework.d.ts +68 -77
  140. package/lib/framework.js +1 -1
  141. package/lib/framework.js.map +1 -1
  142. package/lib/iconsets/fa.js +3 -1
  143. package/lib/iconsets/fa.js.map +1 -1
  144. package/lib/iconsets/fa4.js +3 -1
  145. package/lib/iconsets/fa4.js.map +1 -1
  146. package/lib/iconsets/md.js +3 -1
  147. package/lib/iconsets/md.js.map +1 -1
  148. package/lib/iconsets/mdi-svg.js +3 -1
  149. package/lib/iconsets/mdi-svg.js.map +1 -1
  150. package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
  151. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  152. package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
  153. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  154. package/lib/labs/VFileUpload/VFileUploadItem.d.ts +10 -20
  155. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  156. package/lib/labs/VIconBtn/VIconBtn.js +11 -7
  157. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  158. package/lib/labs/VStepperVertical/VStepperVertical.d.ts +10 -20
  159. package/lib/labs/VStepperVertical/VStepperVerticalItem.d.ts +10 -20
  160. package/lib/labs/VTreeview/VTreeview.d.ts +0 -13
  161. package/lib/labs/VTreeview/VTreeviewItem.d.ts +10 -20
  162. package/lib/labs/entry-bundler.d.ts +3 -3
  163. package/lib/util/globals.d.ts +0 -1
  164. package/lib/util/globals.js +0 -1
  165. package/lib/util/globals.js.map +1 -1
  166. package/package.json +1 -3
  167. package/lib/composables/date/adapters/string.d.ts +0 -54
  168. package/lib/composables/date/adapters/string.js +0 -153
  169. package/lib/composables/date/adapters/string.js.map +0 -1
  170. package/lib/composables/iconSizes.d.ts +0 -28
  171. package/lib/composables/iconSizes.js +0 -23
  172. package/lib/composables/iconSizes.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.8-dev.2025-06-04
2
+ * Vuetify v3.8.8-master.2025-06-06
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -85,7 +85,6 @@
85
85
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
86
86
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
87
87
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
88
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
89
88
 
90
89
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
91
90
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -2350,7 +2349,6 @@
2350
2349
  function genDefaults$2() {
2351
2350
  return {
2352
2351
  defaultTheme: 'light',
2353
- prefix: 'v-',
2354
2352
  variations: {
2355
2353
  colors: [],
2356
2354
  lighten: 0,
@@ -2432,10 +2430,7 @@
2432
2430
  }
2433
2431
  }
2434
2432
  },
2435
- stylesheetId: 'vuetify-theme-stylesheet',
2436
- scoped: false,
2437
- unimportant: false,
2438
- utilities: true
2433
+ stylesheetId: 'vuetify-theme-stylesheet'
2439
2434
  };
2440
2435
  }
2441
2436
  function parseThemeOptions() {
@@ -2458,21 +2453,21 @@
2458
2453
  function createCssClass(lines, selector, content, scope) {
2459
2454
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2460
2455
  }
2461
- function genCssVariables(theme, prefix) {
2456
+ function genCssVariables(theme) {
2462
2457
  const lightOverlay = theme.dark ? 2 : 1;
2463
2458
  const darkOverlay = theme.dark ? 1 : 2;
2464
2459
  const variables = [];
2465
2460
  for (const [key, value] of Object.entries(theme.colors)) {
2466
2461
  const rgb = parseColor(value);
2467
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2462
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2468
2463
  if (!key.startsWith('on-')) {
2469
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2464
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2470
2465
  }
2471
2466
  }
2472
2467
  for (const [key, value] of Object.entries(theme.variables)) {
2473
2468
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2474
2469
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2475
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2470
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2476
2471
  }
2477
2472
  return variables;
2478
2473
  }
@@ -2516,8 +2511,7 @@
2516
2511
  const scopeSelector = `:where(${scope})`;
2517
2512
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2518
2513
  }
2519
- function upsertStyles(id, cspNonce, styles) {
2520
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2514
+ function upsertStyles(styleEl, styles) {
2521
2515
  if (!styleEl) return;
2522
2516
  styleEl.innerHTML = styles;
2523
2517
  }
@@ -2537,17 +2531,8 @@
2537
2531
  // Composables
2538
2532
  function createTheme(options) {
2539
2533
  const parsedOptions = parseThemeOptions(options);
2540
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
2534
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
2541
2535
  const themes = vue.ref(parsedOptions.themes);
2542
- const systemName = vue.shallowRef('light');
2543
- const name = vue.computed({
2544
- get() {
2545
- return _name.value === 'system' ? systemName.value : _name.value;
2546
- },
2547
- set(val) {
2548
- _name.value = val;
2549
- }
2550
- });
2551
2536
  const computedThemes = vue.computed(() => {
2552
2537
  const acc = {};
2553
2538
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2568,49 +2553,28 @@
2568
2553
  const current = vue.toRef(() => computedThemes.value[name.value]);
2569
2554
  const styles = vue.computed(() => {
2570
2555
  const lines = [];
2571
- const important = parsedOptions.unimportant ? '' : ' !important';
2572
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2573
2556
  if (current.value?.dark) {
2574
2557
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2575
2558
  }
2576
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2559
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2577
2560
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2578
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2579
- }
2580
- if (parsedOptions.utilities) {
2581
- const bgLines = [];
2582
- const fgLines = [];
2583
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2584
- for (const key of colors) {
2585
- if (key.startsWith('on-')) {
2586
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2587
- } else {
2588
- 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);
2589
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2590
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
2591
- }
2561
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2562
+ }
2563
+ const bgLines = [];
2564
+ const fgLines = [];
2565
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2566
+ for (const key of colors) {
2567
+ if (key.startsWith('on-')) {
2568
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2569
+ } else {
2570
+ 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);
2571
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2572
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2592
2573
  }
2593
- lines.push(...bgLines, ...fgLines);
2594
2574
  }
2575
+ lines.push(...bgLines, ...fgLines);
2595
2576
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2596
2577
  });
2597
- const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
2598
- const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
2599
- if (SUPPORTS_MATCH_MEDIA) {
2600
- const media = window.matchMedia('(prefers-color-scheme: dark)');
2601
- function updateSystemName() {
2602
- systemName.value = media.matches ? 'dark' : 'light';
2603
- }
2604
- updateSystemName();
2605
- media.addEventListener('change', updateSystemName, {
2606
- passive: true
2607
- });
2608
- if (vue.getCurrentScope()) {
2609
- vue.onScopeDispose(() => {
2610
- media.removeEventListener('change', updateSystemName);
2611
- });
2612
- }
2613
- }
2614
2578
  function install(app) {
2615
2579
  if (parsedOptions.isDisabled) return;
2616
2580
  const head = app._context.provides.usehead;
@@ -2648,55 +2612,22 @@
2648
2612
  updateStyles();
2649
2613
  }
2650
2614
  function updateStyles() {
2651
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
2615
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2652
2616
  }
2653
2617
  }
2654
2618
  }
2655
- function change(themeName) {
2656
- if (!themeNames.value.includes(themeName)) {
2657
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
2658
- return;
2659
- }
2660
- name.value = themeName;
2661
- }
2662
- function cycle() {
2663
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
2664
- const currentIndex = themeArray.indexOf(name.value);
2665
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
2666
- change(themeArray[nextIndex]);
2667
- }
2668
- function toggle() {
2669
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
2670
- cycle(themeArray);
2671
- }
2672
- const globalName = new Proxy(name, {
2673
- get(target, prop) {
2674
- return target[prop];
2675
- },
2676
- set(target, prop, val) {
2677
- if (prop === 'value') {
2678
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
2679
- }
2680
- // @ts-expect-error
2681
- target[prop] = val;
2682
- return true;
2683
- }
2684
- });
2619
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
2685
2620
  return {
2686
2621
  install,
2687
- change,
2688
- cycle,
2689
- toggle,
2690
2622
  isDisabled: parsedOptions.isDisabled,
2691
2623
  name,
2692
2624
  themes,
2693
2625
  current,
2694
2626
  computedThemes,
2695
- prefix: parsedOptions.prefix,
2696
2627
  themeClasses,
2697
2628
  styles,
2698
2629
  global: {
2699
- name: globalName,
2630
+ name,
2700
2631
  current
2701
2632
  }
2702
2633
  };
@@ -2707,7 +2638,7 @@
2707
2638
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2708
2639
  const name = vue.toRef(() => props.theme ?? theme.name.value);
2709
2640
  const current = vue.toRef(() => theme.themes.value[name.value]);
2710
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
2641
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2711
2642
  const newTheme = {
2712
2643
  ...theme,
2713
2644
  name,
@@ -3811,10 +3742,7 @@
3811
3742
  default: 'default',
3812
3743
  validator: v => allowedDensities$1.includes(v)
3813
3744
  },
3814
- extended: {
3815
- type: Boolean,
3816
- default: null
3817
- },
3745
+ extended: Boolean,
3818
3746
  extensionHeight: {
3819
3747
  type: [Number, String],
3820
3748
  default: 48
@@ -3862,7 +3790,7 @@
3862
3790
  const {
3863
3791
  rtlClasses
3864
3792
  } = useRtl();
3865
- const isExtended = vue.shallowRef(props.extended === null ? !!slots.extension?.() : props.extended);
3793
+ const isExtended = vue.shallowRef(!!(props.extended || slots.extension?.()));
3866
3794
  const contentHeight = vue.computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
3867
3795
  const extensionHeight = vue.computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);
3868
3796
  provideDefaults({
@@ -3874,7 +3802,7 @@
3874
3802
  const hasTitle = !!(props.title || slots.title);
3875
3803
  const hasImage = !!(slots.image || props.image);
3876
3804
  const extension = slots.extension?.();
3877
- isExtended.value = props.extended === null ? !!extension : props.extended;
3805
+ isExtended.value = !!(props.extended || extension);
3878
3806
  return vue.createVNode(props.tag, {
3879
3807
  "class": vue.normalizeClass(['v-toolbar', {
3880
3808
  'v-toolbar--absolute': props.absolute,
@@ -4257,15 +4185,9 @@
4257
4185
  };
4258
4186
  }
4259
4187
 
4260
- // Types
4261
-
4262
4188
  const makeVBtnGroupProps = propsFactory({
4263
4189
  baseColor: String,
4264
4190
  divided: Boolean,
4265
- direction: {
4266
- type: String,
4267
- default: 'horizontal'
4268
- },
4269
4191
  ...makeBorderProps(),
4270
4192
  ...makeComponentProps(),
4271
4193
  ...makeDensityProps(),
@@ -4299,7 +4221,7 @@
4299
4221
  } = useRounded(props);
4300
4222
  provideDefaults({
4301
4223
  VBtn: {
4302
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4224
+ height: 'auto',
4303
4225
  baseColor: vue.toRef(() => props.baseColor),
4304
4226
  color: vue.toRef(() => props.color),
4305
4227
  density: vue.toRef(() => props.density),
@@ -4309,7 +4231,7 @@
4309
4231
  });
4310
4232
  useRender(() => {
4311
4233
  return vue.createVNode(props.tag, {
4312
- "class": vue.normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4234
+ "class": vue.normalizeClass(['v-btn-group', {
4313
4235
  'v-btn-group--divided': props.divided
4314
4236
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4315
4237
  "style": vue.normalizeStyle(props.style)
@@ -5641,8 +5563,8 @@
5641
5563
  window.clearTimeout(element._ripple.showTimer);
5642
5564
  }
5643
5565
  let keyboardRipple = false;
5644
- function keyboardRippleShow(e, keys) {
5645
- if (!keyboardRipple && keys.includes(e.keyCode)) {
5566
+ function keyboardRippleShow(e) {
5567
+ if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {
5646
5568
  keyboardRipple = true;
5647
5569
  rippleShow(e);
5648
5570
  }
@@ -5670,12 +5592,9 @@
5670
5592
  el._ripple.enabled = enabled;
5671
5593
  el._ripple.centered = modifiers.center;
5672
5594
  el._ripple.circle = modifiers.circle;
5673
- const bindingValue = isObject(value) ? value : {};
5674
- if (bindingValue.class) {
5675
- el._ripple.class = bindingValue.class;
5595
+ if (isObject(value) && value.class) {
5596
+ el._ripple.class = value.class;
5676
5597
  }
5677
- const allowedKeys = bindingValue.keys ?? [keyCodes.enter, keyCodes.space];
5678
- el._ripple.keyDownHandler = e => keyboardRippleShow(e, allowedKeys);
5679
5598
  if (enabled && !wasEnabled) {
5680
5599
  if (modifiers.stop) {
5681
5600
  el.addEventListener('touchstart', rippleStop, {
@@ -5697,7 +5616,7 @@
5697
5616
  el.addEventListener('mousedown', rippleShow);
5698
5617
  el.addEventListener('mouseup', rippleHide);
5699
5618
  el.addEventListener('mouseleave', rippleHide);
5700
- el.addEventListener('keydown', e => keyboardRippleShow(e, allowedKeys));
5619
+ el.addEventListener('keydown', keyboardRippleShow);
5701
5620
  el.addEventListener('keyup', keyboardRippleHide);
5702
5621
  el.addEventListener('blur', focusRippleHide);
5703
5622
 
@@ -5717,9 +5636,7 @@
5717
5636
  el.removeEventListener('touchcancel', rippleHide);
5718
5637
  el.removeEventListener('mouseup', rippleHide);
5719
5638
  el.removeEventListener('mouseleave', rippleHide);
5720
- if (el._ripple?.keyDownHandler) {
5721
- el.removeEventListener('keydown', el._ripple.keyDownHandler);
5722
- }
5639
+ el.removeEventListener('keydown', keyboardRippleShow);
5723
5640
  el.removeEventListener('keyup', keyboardRippleHide);
5724
5641
  el.removeEventListener('dragstart', rippleHide);
5725
5642
  el.removeEventListener('blur', focusRippleHide);
@@ -5728,8 +5645,8 @@
5728
5645
  updateRipple(el, binding, false);
5729
5646
  }
5730
5647
  function unmounted$4(el) {
5731
- removeListeners(el);
5732
5648
  delete el._ripple;
5649
+ removeListeners(el);
5733
5650
  }
5734
5651
  function updated$1(el, binding) {
5735
5652
  if (binding.value === binding.oldValue) {
@@ -6002,31 +5919,6 @@
6002
5919
  // Utilities
6003
5920
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6004
5921
 
6005
- // Utilities
6006
-
6007
- // Types
6008
-
6009
- // Types
6010
-
6011
- // Composables
6012
- const makeIconSizeProps = propsFactory({
6013
- iconSize: [Number, String],
6014
- iconSizes: {
6015
- type: Array,
6016
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6017
- }
6018
- }, 'iconSize');
6019
- function useIconSizes(props, fallback) {
6020
- const iconSize = vue.computed(() => {
6021
- const iconSizeMap = new Map(props.iconSizes);
6022
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6023
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6024
- });
6025
- return {
6026
- iconSize
6027
- };
6028
- }
6029
-
6030
5922
  // Types
6031
5923
 
6032
5924
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6066,7 +5958,6 @@
6066
5958
  ...makeDensityProps(),
6067
5959
  ...makeDimensionProps(),
6068
5960
  ...makeElevationProps(),
6069
- ...makeIconSizeProps(),
6070
5961
  ...makeLocationProps(),
6071
5962
  ...makePositionProps(),
6072
5963
  ...makeRoundedProps(),
@@ -6094,9 +5985,6 @@
6094
5985
  if (!props.type) return props.icon;
6095
5986
  return props.icon ?? `$${props.type}`;
6096
5987
  });
6097
- const {
6098
- iconSize
6099
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6100
5988
  const {
6101
5989
  themeClasses
6102
5990
  } = provideTheme(props);
@@ -6144,11 +6032,6 @@
6144
6032
  const hasPrepend = !!(slots.prepend || icon.value);
6145
6033
  const hasTitle = !!(slots.title || props.title);
6146
6034
  const hasClose = !!(slots.close || props.closable);
6147
- const iconProps = {
6148
- density: props.density,
6149
- icon: icon.value,
6150
- size: iconSize.value
6151
- };
6152
6035
  return isActive.value && vue.createVNode(props.tag, {
6153
6036
  "class": vue.normalizeClass(['v-alert', props.border && {
6154
6037
  'v-alert--border': !!props.border,
@@ -6166,14 +6049,19 @@
6166
6049
  }, null), hasPrepend && vue.createElementVNode("div", {
6167
6050
  "key": "prepend",
6168
6051
  "class": "v-alert__prepend"
6169
- }, [!slots.prepend ? vue.createVNode(VIcon, vue.mergeProps({
6170
- "key": "prepend-icon"
6171
- }, iconProps), null) : vue.createVNode(VDefaultsProvider, {
6052
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
6053
+ "key": "prepend-icon",
6054
+ "density": props.density,
6055
+ "icon": icon.value,
6056
+ "size": props.prominent ? 44 : 28
6057
+ }, null) : vue.createVNode(VDefaultsProvider, {
6172
6058
  "key": "prepend-defaults",
6173
6059
  "disabled": !icon.value,
6174
6060
  "defaults": {
6175
6061
  VIcon: {
6176
- ...iconProps
6062
+ density: props.density,
6063
+ icon: icon.value,
6064
+ size: props.prominent ? 44 : 28
6177
6065
  }
6178
6066
  }
6179
6067
  }, slots.prepend)]), vue.createElementVNode("div", {
@@ -7698,7 +7586,6 @@
7698
7586
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7699
7587
  const makeVSlideGroupProps = propsFactory({
7700
7588
  centerActive: Boolean,
7701
- contentClass: null,
7702
7589
  direction: {
7703
7590
  type: String,
7704
7591
  default: 'horizontal'
@@ -8011,7 +7898,7 @@
8011
7898
  })]), vue.createElementVNode("div", {
8012
7899
  "key": "container",
8013
7900
  "ref": containerRef,
8014
- "class": vue.normalizeClass(['v-slide-group__container', props.contentClass]),
7901
+ "class": "v-slide-group__container",
8015
7902
  "onScroll": onScroll
8016
7903
  }, [vue.createElementVNode("div", {
8017
7904
  "ref": contentRef,
@@ -8374,85 +8261,16 @@
8374
8261
  }
8375
8262
  });
8376
8263
 
8377
- const makeVDividerProps = propsFactory({
8378
- color: String,
8379
- inset: Boolean,
8380
- length: [Number, String],
8381
- opacity: [Number, String],
8382
- thickness: [Number, String],
8383
- vertical: Boolean,
8384
- ...makeComponentProps(),
8385
- ...makeThemeProps()
8386
- }, 'VDivider');
8387
- const VDivider = genericComponent()({
8388
- name: 'VDivider',
8389
- props: makeVDividerProps(),
8390
- setup(props, _ref) {
8391
- let {
8392
- attrs,
8393
- slots
8394
- } = _ref;
8395
- const {
8396
- themeClasses
8397
- } = provideTheme(props);
8398
- const {
8399
- textColorClasses,
8400
- textColorStyles
8401
- } = useTextColor(() => props.color);
8402
- const dividerStyles = vue.computed(() => {
8403
- const styles = {};
8404
- if (props.length) {
8405
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8406
- }
8407
- if (props.thickness) {
8408
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8409
- }
8410
- return styles;
8411
- });
8412
- useRender(() => {
8413
- const divider = vue.createElementVNode("hr", {
8414
- "class": vue.normalizeClass([{
8415
- 'v-divider': true,
8416
- 'v-divider--inset': props.inset,
8417
- 'v-divider--vertical': props.vertical
8418
- }, themeClasses.value, textColorClasses.value, props.class]),
8419
- "style": vue.normalizeStyle([dividerStyles.value, textColorStyles.value, {
8420
- '--v-border-opacity': props.opacity
8421
- }, props.style]),
8422
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8423
- "role": `${attrs.role || 'separator'}`
8424
- }, null);
8425
- if (!slots.default) return divider;
8426
- return vue.createElementVNode("div", {
8427
- "class": vue.normalizeClass(['v-divider__wrapper', {
8428
- 'v-divider__wrapper--vertical': props.vertical,
8429
- 'v-divider__wrapper--inset': props.inset
8430
- }])
8431
- }, [divider, vue.createElementVNode("div", {
8432
- "class": "v-divider__content"
8433
- }, [slots.default()]), divider]);
8434
- });
8435
- return {};
8436
- }
8437
- });
8438
-
8439
8264
  // Utilities
8440
8265
 
8441
8266
  // List
8442
8267
  const ListKey = Symbol.for('vuetify:list');
8443
8268
  function createList() {
8444
- let {
8445
- filterable
8446
- } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
8447
- filterable: false
8448
- };
8449
8269
  const parent = vue.inject(ListKey, {
8450
- filterable: false,
8451
8270
  hasPrepend: vue.shallowRef(false),
8452
8271
  updateHasPrepend: () => null
8453
8272
  });
8454
8273
  const data = {
8455
- filterable: parent.filterable || filterable,
8456
8274
  hasPrepend: vue.shallowRef(false),
8457
8275
  updateHasPrepend: value => {
8458
8276
  if (value) data.hasPrepend.value = value;
@@ -9404,9 +9222,6 @@
9404
9222
  roundedClasses
9405
9223
  } = useRounded(roundedProps);
9406
9224
  const lineClasses = vue.toRef(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
9407
- const rippleOptions = vue.toRef(() => props.ripple !== undefined && !!props.ripple && list?.filterable ? {
9408
- keys: [keyCodes.enter]
9409
- } : props.ripple);
9410
9225
  const slotProps = vue.computed(() => ({
9411
9226
  isActive: isActive.value,
9412
9227
  select,
@@ -9431,9 +9246,8 @@
9431
9246
  function onKeyDown(e) {
9432
9247
  const target = e.target;
9433
9248
  if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9434
- if (e.key === 'Enter' || e.key === ' ' && !list?.filterable) {
9249
+ if (e.key === 'Enter' || e.key === ' ') {
9435
9250
  e.preventDefault();
9436
- e.stopPropagation();
9437
9251
  e.target.dispatchEvent(new MouseEvent('click', e));
9438
9252
  }
9439
9253
  }
@@ -9543,7 +9357,7 @@
9543
9357
  }), vue.createElementVNode("div", {
9544
9358
  "class": "v-list-item__spacer"
9545
9359
  }, null)])]
9546
- }), [[Ripple, isClickable.value && rippleOptions.value]]);
9360
+ }), [[Ripple, isClickable.value && props.ripple]]);
9547
9361
  });
9548
9362
  return {
9549
9363
  activate,
@@ -9598,6 +9412,68 @@
9598
9412
  }
9599
9413
  });
9600
9414
 
9415
+ const makeVDividerProps = propsFactory({
9416
+ color: String,
9417
+ inset: Boolean,
9418
+ length: [Number, String],
9419
+ opacity: [Number, String],
9420
+ thickness: [Number, String],
9421
+ vertical: Boolean,
9422
+ ...makeComponentProps(),
9423
+ ...makeThemeProps()
9424
+ }, 'VDivider');
9425
+ const VDivider = genericComponent()({
9426
+ name: 'VDivider',
9427
+ props: makeVDividerProps(),
9428
+ setup(props, _ref) {
9429
+ let {
9430
+ attrs,
9431
+ slots
9432
+ } = _ref;
9433
+ const {
9434
+ themeClasses
9435
+ } = provideTheme(props);
9436
+ const {
9437
+ textColorClasses,
9438
+ textColorStyles
9439
+ } = useTextColor(() => props.color);
9440
+ const dividerStyles = vue.computed(() => {
9441
+ const styles = {};
9442
+ if (props.length) {
9443
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9444
+ }
9445
+ if (props.thickness) {
9446
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9447
+ }
9448
+ return styles;
9449
+ });
9450
+ useRender(() => {
9451
+ const divider = vue.createElementVNode("hr", {
9452
+ "class": vue.normalizeClass([{
9453
+ 'v-divider': true,
9454
+ 'v-divider--inset': props.inset,
9455
+ 'v-divider--vertical': props.vertical
9456
+ }, themeClasses.value, textColorClasses.value, props.class]),
9457
+ "style": vue.normalizeStyle([dividerStyles.value, textColorStyles.value, {
9458
+ '--v-border-opacity': props.opacity
9459
+ }, props.style]),
9460
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9461
+ "role": `${attrs.role || 'separator'}`
9462
+ }, null);
9463
+ if (!slots.default) return divider;
9464
+ return vue.createElementVNode("div", {
9465
+ "class": vue.normalizeClass(['v-divider__wrapper', {
9466
+ 'v-divider__wrapper--vertical': props.vertical,
9467
+ 'v-divider__wrapper--inset': props.inset
9468
+ }])
9469
+ }, [divider, vue.createElementVNode("div", {
9470
+ "class": "v-divider__content"
9471
+ }, [slots.default()]), divider]);
9472
+ });
9473
+ return {};
9474
+ }
9475
+ });
9476
+
9601
9477
  // Types
9602
9478
 
9603
9479
  const makeVListChildrenProps = propsFactory({
@@ -9866,7 +9742,6 @@
9866
9742
  activeClass: String,
9867
9743
  bgColor: String,
9868
9744
  disabled: Boolean,
9869
- filterable: Boolean,
9870
9745
  expandIcon: IconValue,
9871
9746
  collapseIcon: IconValue,
9872
9747
  lines: {
@@ -9950,9 +9825,7 @@
9950
9825
  const activeColor = vue.toRef(() => props.activeColor);
9951
9826
  const baseColor = vue.toRef(() => props.baseColor);
9952
9827
  const color = vue.toRef(() => props.color);
9953
- createList({
9954
- filterable: props.filterable
9955
- });
9828
+ createList();
9956
9829
  provideDefaults({
9957
9830
  VListGroup: {
9958
9831
  activeColor,
@@ -12528,12 +12401,7 @@
12528
12401
  }
12529
12402
  function calculateOffset(index) {
12530
12403
  index = clamp(index, 0, items.value.length - 1);
12531
- const whole = Math.floor(index);
12532
- const fraction = index % 1;
12533
- const next = whole + 1;
12534
- const wholeOffset = offsets[whole] || 0;
12535
- const nextOffset = offsets[next] || wholeOffset;
12536
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12404
+ return offsets[index] || 0;
12537
12405
  }
12538
12406
  function calculateIndex(scrollTop) {
12539
12407
  return binaryClosest(offsets, scrollTop);
@@ -12887,7 +12755,6 @@
12887
12755
  },
12888
12756
  openOnClear: Boolean,
12889
12757
  itemColor: String,
12890
- noAutoScroll: Boolean,
12891
12758
  ...makeItemsProps({
12892
12759
  itemChildren: false
12893
12760
  })
@@ -13102,7 +12969,7 @@
13102
12969
  vue.watch(menu, () => {
13103
12970
  if (!props.hideSelected && menu.value && model.value.length) {
13104
12971
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
13105
- IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
12972
+ IN_BROWSER && window.requestAnimationFrame(() => {
13106
12973
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
13107
12974
  });
13108
12975
  }
@@ -13194,22 +13061,6 @@
13194
13061
  key: item.value,
13195
13062
  onClick: () => select(item, null)
13196
13063
  });
13197
- if (item.raw.type === 'divider') {
13198
- return slots.divider?.({
13199
- props: item.raw,
13200
- index
13201
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13202
- "key": `divider-${index}`
13203
- }), null);
13204
- }
13205
- if (item.raw.type === 'subheader') {
13206
- return slots.subheader?.({
13207
- props: item.raw,
13208
- index
13209
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
13210
- "key": `subheader-${index}`
13211
- }), null);
13212
- }
13213
13064
  return slots.item?.({
13214
13065
  item,
13215
13066
  index,
@@ -13370,9 +13221,6 @@
13370
13221
  let match = -1;
13371
13222
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13372
13223
  if (typeof item === 'object') {
13373
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13374
- continue;
13375
- }
13376
13224
  const filterKeys = keys || Object.keys(transformed);
13377
13225
  for (const key of filterKeys) {
13378
13226
  const value = getPropertyFromItem(transformed, key);
@@ -13575,7 +13423,7 @@
13575
13423
  menu.value = !menu.value;
13576
13424
  }
13577
13425
  function onListKeydown(e) {
13578
- if (checkPrintable(e) || e.key === 'Backspace') {
13426
+ if (e.key !== ' ' && checkPrintable(e)) {
13579
13427
  vTextFieldRef.value?.focus();
13580
13428
  }
13581
13429
  }
@@ -13780,7 +13628,6 @@
13780
13628
  }, props.menuProps), {
13781
13629
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
13782
13630
  "ref": listRef,
13783
- "filterable": true,
13784
13631
  "selected": selectedValues.value,
13785
13632
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
13786
13633
  "onMousedown": e => e.preventDefault(),
@@ -13812,22 +13659,6 @@
13812
13659
  active: highlightFirst.value && index === 0 ? true : undefined,
13813
13660
  onClick: () => select(item, null)
13814
13661
  });
13815
- if (item.raw.type === 'divider') {
13816
- return slots.divider?.({
13817
- props: item.raw,
13818
- index
13819
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13820
- "key": `divider-${index}`
13821
- }), null);
13822
- }
13823
- if (item.raw.type === 'subheader') {
13824
- return slots.subheader?.({
13825
- props: item.raw,
13826
- index
13827
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
13828
- "key": `subheader-${index}`
13829
- }), null);
13830
- }
13831
13662
  return slots.item?.({
13832
13663
  item,
13833
13664
  index,
@@ -17432,13 +17263,13 @@
17432
17263
  return null;
17433
17264
  }
17434
17265
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17435
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17266
+ function getWeekdays(locale, firstDayOfWeek) {
17436
17267
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17437
17268
  return createRange(7).map(i => {
17438
17269
  const weekday = new Date(sundayJanuarySecond2000);
17439
17270
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17440
17271
  return new Intl.DateTimeFormat(locale, {
17441
- weekday: weekdayFormat ?? 'narrow'
17272
+ weekday: 'narrow'
17442
17273
  }).format(weekday);
17443
17274
  });
17444
17275
  }
@@ -17902,9 +17733,9 @@
17902
17733
  getDiff(date, comparing, unit) {
17903
17734
  return getDiff(date, comparing, unit);
17904
17735
  }
17905
- getWeekdays(firstDayOfWeek, weekdayFormat) {
17736
+ getWeekdays(firstDayOfWeek) {
17906
17737
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
17907
- return getWeekdays(this.locale, firstDay, weekdayFormat);
17738
+ return getWeekdays(this.locale, firstDay);
17908
17739
  }
17909
17740
  getYear(date) {
17910
17741
  return getYear(date);
@@ -18260,7 +18091,6 @@
18260
18091
  _search.value = val ?? '';
18261
18092
  if (!props.multiple && !hasSelectionSlot.value) {
18262
18093
  model.value = [transformItem$3(props, val)];
18263
- vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18264
18094
  }
18265
18095
  if (val && props.multiple && props.delimiters?.length) {
18266
18096
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18341,7 +18171,7 @@
18341
18171
  menu.value = !menu.value;
18342
18172
  }
18343
18173
  function onListKeydown(e) {
18344
- if (checkPrintable(e) || e.key === 'Backspace') {
18174
+ if (e.key !== ' ' && checkPrintable(e)) {
18345
18175
  vTextFieldRef.value?.focus();
18346
18176
  }
18347
18177
  }
@@ -18546,7 +18376,6 @@
18546
18376
  }, props.menuProps), {
18547
18377
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
18548
18378
  "ref": listRef,
18549
- "filterable": true,
18550
18379
  "selected": selectedValues.value,
18551
18380
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18552
18381
  "onMousedown": e => e.preventDefault(),
@@ -18578,22 +18407,6 @@
18578
18407
  active: highlightFirst.value && index === 0 ? true : undefined,
18579
18408
  onClick: () => select(item, null)
18580
18409
  });
18581
- if (item.raw.type === 'divider') {
18582
- return slots.divider?.({
18583
- props: item.raw,
18584
- index
18585
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
18586
- "key": `divider-${index}`
18587
- }), null);
18588
- }
18589
- if (item.raw.type === 'subheader') {
18590
- return slots.subheader?.({
18591
- props: item.raw,
18592
- index
18593
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
18594
- "key": `subheader-${index}`
18595
- }), null);
18596
- }
18597
18410
  return slots.item?.({
18598
18411
  item,
18599
18412
  index,
@@ -20473,7 +20286,6 @@
20473
20286
  color: String,
20474
20287
  disableSort: Boolean,
20475
20288
  fixedHeader: Boolean,
20476
- lastFixed: Boolean,
20477
20289
  multiSort: Boolean,
20478
20290
  sortAscIcon: {
20479
20291
  type: IconValue,
@@ -20520,11 +20332,10 @@
20520
20332
  loaderClasses
20521
20333
  } = useLoader(props);
20522
20334
  function getFixedStyles(column, y) {
20523
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20335
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20524
20336
  return {
20525
20337
  position: 'sticky',
20526
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20527
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20338
+ left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20528
20339
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20529
20340
  };
20530
20341
  }
@@ -21033,18 +20844,11 @@
21033
20844
  }
21034
20845
  });
21035
20846
 
21036
- // Types
21037
-
21038
20847
  const makeVTableProps = propsFactory({
21039
20848
  fixedHeader: Boolean,
21040
20849
  fixedFooter: Boolean,
21041
20850
  height: [Number, String],
21042
20851
  hover: Boolean,
21043
- striped: {
21044
- type: String,
21045
- default: null,
21046
- validator: v => ['even', 'odd'].includes(v)
21047
- },
21048
20852
  ...makeComponentProps(),
21049
20853
  ...makeDensityProps(),
21050
20854
  ...makeTagProps(),
@@ -21071,9 +20875,7 @@
21071
20875
  'v-table--fixed-footer': props.fixedFooter,
21072
20876
  'v-table--has-top': !!slots.top,
21073
20877
  'v-table--has-bottom': !!slots.bottom,
21074
- 'v-table--hover': props.hover,
21075
- 'v-table--striped-even': props.striped === 'even',
21076
- 'v-table--striped-odd': props.striped === 'odd'
20878
+ 'v-table--hover': props.hover
21077
20879
  }, themeClasses.value, densityClasses.value, props.class]),
21078
20880
  "style": vue.normalizeStyle(props.style)
21079
20881
  }, {
@@ -22248,8 +22050,7 @@
22248
22050
  firstDayOfWeek: {
22249
22051
  type: [Number, String],
22250
22052
  default: undefined
22251
- },
22252
- weekdayFormat: String
22053
+ }
22253
22054
  }, 'calendar');
22254
22055
  function useCalendar(props) {
22255
22056
  const adapter = useDate();
@@ -22490,7 +22291,7 @@
22490
22291
  "ref": daysRef,
22491
22292
  "key": daysInMonth.value[0].date?.toString(),
22492
22293
  "class": "v-date-picker-month__days"
22493
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => vue.createElementVNode("div", {
22294
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => vue.createElementVNode("div", {
22494
22295
  "class": vue.normalizeClass(['v-date-picker-month__day', 'v-date-picker-month__weekday'])
22495
22296
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22496
22297
  const slotProps = {
@@ -25080,10 +24881,6 @@
25080
24881
  type: Number,
25081
24882
  default: 0
25082
24883
  },
25083
- minFractionDigits: {
25084
- type: Number,
25085
- default: null
25086
- },
25087
24884
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25088
24885
  }, 'VNumberInput');
25089
24886
  const VNumberInput = genericComponent()({
@@ -25114,19 +24911,9 @@
25114
24911
  } = useFocus(props);
25115
24912
  function correctPrecision(val) {
25116
24913
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25117
- if (precision == null) {
25118
- return String(val);
25119
- }
25120
- let fixed = val.toFixed(precision);
25121
- if (isFocused.value) {
25122
- return Number(fixed).toString(); // trim zeros
25123
- }
25124
- if ((props.minFractionDigits ?? precision) < precision) {
25125
- const trimLimit = precision - props.minFractionDigits;
25126
- const [baseDigits, fractionDigits] = fixed.split('.');
25127
- fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
25128
- }
25129
- return fixed;
24914
+ const fixed = precision == null ? String(val) : val.toFixed(precision);
24915
+ return isFocused.value ? Number(fixed).toString() // trim zeros
24916
+ : fixed;
25130
24917
  }
25131
24918
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25132
24919
  const _inputText = vue.shallowRef(null);
@@ -25181,7 +24968,6 @@
25181
24968
  }
25182
24969
  };
25183
24970
  vue.watch(() => props.precision, () => formatInputValue());
25184
- vue.watch(() => props.minFractionDigits, () => formatInputValue());
25185
24971
  vue.onMounted(() => {
25186
24972
  clampModel();
25187
24973
  });
@@ -25296,7 +25082,7 @@
25296
25082
  inputText.value = null;
25297
25083
  return;
25298
25084
  }
25299
- inputText.value = correctPrecision(model.value);
25085
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25300
25086
  }
25301
25087
  function trimDecimalZeros() {
25302
25088
  if (controlsDisabled.value) return;
@@ -25556,10 +25342,9 @@
25556
25342
  e.preventDefault();
25557
25343
  e.stopPropagation();
25558
25344
  const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
25559
- const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
25560
25345
  if (isValidNumber(clipboardText)) return;
25561
25346
  model.value = clipboardText.split('');
25562
- inputRef.value?.[finalIndex].focus();
25347
+ inputRef.value?.[index].blur();
25563
25348
  }
25564
25349
  function reset() {
25565
25350
  model.value = [];
@@ -30262,6 +30047,11 @@
30262
30047
  hideOverlay: Boolean,
30263
30048
  icon: [String, Function, Object],
30264
30049
  iconColor: String,
30050
+ iconSize: [Number, String],
30051
+ iconSizes: {
30052
+ type: Array,
30053
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
30054
+ },
30265
30055
  loading: Boolean,
30266
30056
  opacity: [Number, String],
30267
30057
  readonly: Boolean,
@@ -30281,7 +30071,6 @@
30281
30071
  ...makeBorderProps(),
30282
30072
  ...makeComponentProps(),
30283
30073
  ...makeElevationProps(),
30284
- ...makeIconSizeProps(),
30285
30074
  ...makeRoundedProps(),
30286
30075
  ...makeTagProps({
30287
30076
  tag: 'button'
@@ -30336,6 +30125,7 @@
30336
30125
  })()
30337
30126
  }));
30338
30127
  const btnSizeMap = new Map(props.sizes);
30128
+ const iconSizeMap = new Map(props.iconSizes);
30339
30129
  function onClick() {
30340
30130
  if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
30341
30131
  isActive.value = !isActive.value;
@@ -30347,12 +30137,12 @@
30347
30137
  const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
30348
30138
  const btnHeight = props.height ?? btnSize;
30349
30139
  const btnWidth = props.width ?? btnSize;
30350
- const {
30351
- iconSize
30352
- } = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
30140
+ const _iconSize = props.iconSize;
30141
+ const hasNamedIconSize = iconSizeMap.has(_iconSize);
30142
+ const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
30353
30143
  const iconProps = {
30354
30144
  icon,
30355
- size: iconSize.value,
30145
+ size: iconSize,
30356
30146
  iconColor: props.iconColor,
30357
30147
  opacity: props.opacity
30358
30148
  };
@@ -30395,7 +30185,7 @@
30395
30185
  "color": typeof props.loading === 'boolean' ? undefined : props.loading,
30396
30186
  "indeterminate": "disable-shrink",
30397
30187
  "width": "2",
30398
- "size": iconSize.value
30188
+ "size": iconSize
30399
30189
  }, null)])]
30400
30190
  });
30401
30191
  });
@@ -32305,7 +32095,7 @@
32305
32095
  };
32306
32096
  });
32307
32097
  }
32308
- const version$1 = "3.8.8-dev.2025-06-04";
32098
+ const version$1 = "3.8.8-master.2025-06-06";
32309
32099
  createVuetify$1.version = version$1;
32310
32100
 
32311
32101
  // Vue's inject() can only be used in setup
@@ -32603,7 +32393,7 @@
32603
32393
 
32604
32394
  /* eslint-disable local-rules/sort-imports */
32605
32395
 
32606
- const version = "3.8.8-dev.2025-06-04";
32396
+ const version = "3.8.8-master.2025-06-06";
32607
32397
 
32608
32398
  /* eslint-disable local-rules/sort-imports */
32609
32399