@vuetify/nightly 3.8.6-master.2025-05-26 → 3.8.7-dev.2025-05-27

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 (117) hide show
  1. package/CHANGELOG.md +24 -24
  2. package/dist/json/attributes.json +3294 -3218
  3. package/dist/json/importMap-labs.json +26 -26
  4. package/dist/json/importMap.json +192 -192
  5. package/dist/json/tags.json +19 -0
  6. package/dist/json/web-types.json +5776 -5504
  7. package/dist/vuetify-labs.cjs +305 -128
  8. package/dist/vuetify-labs.css +5202 -5174
  9. package/dist/vuetify-labs.d.ts +1580 -1351
  10. package/dist/vuetify-labs.esm.js +306 -129
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +305 -128
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +299 -117
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4512 -4484
  17. package/dist/vuetify.d.ts +739 -518
  18. package/dist/vuetify.esm.js +300 -118
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +299 -117
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1194 -1184
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAlert/VAlert.css +6 -1
  26. package/lib/components/VAlert/VAlert.d.ts +35 -0
  27. package/lib/components/VAlert/VAlert.js +15 -10
  28. package/lib/components/VAlert/VAlert.js.map +1 -1
  29. package/lib/components/VAlert/VAlert.sass +7 -1
  30. package/lib/components/VAutocomplete/VAutocomplete.d.ts +133 -96
  31. package/lib/components/VAutocomplete/VAutocomplete.js +19 -2
  32. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  33. package/lib/components/VBtnGroup/VBtnGroup.css +30 -7
  34. package/lib/components/VBtnGroup/VBtnGroup.d.ts +58 -32
  35. package/lib/components/VBtnGroup/VBtnGroup.js +7 -3
  36. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  37. package/lib/components/VBtnGroup/VBtnGroup.sass +44 -17
  38. package/lib/components/VBtnToggle/VBtnToggle.d.ts +25 -0
  39. package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
  40. package/lib/components/VChipGroup/VChipGroup.d.ts +10 -0
  41. package/lib/components/VCombobox/VCombobox.d.ts +133 -96
  42. package/lib/components/VCombobox/VCombobox.js +20 -2
  43. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  44. package/lib/components/VDataTable/VDataTable.d.ts +18 -0
  45. package/lib/components/VDataTable/VDataTableHeaders.d.ts +13 -0
  46. package/lib/components/VDataTable/VDataTableHeaders.js +4 -2
  47. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  48. package/lib/components/VDataTable/VDataTableServer.d.ts +13 -0
  49. package/lib/components/VDataTable/VDataTableVirtual.d.ts +13 -0
  50. package/lib/components/VDatePicker/VDatePicker.d.ts +10 -0
  51. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +10 -0
  52. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
  53. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  54. package/lib/components/VField/VField.d.ts +3 -3
  55. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  56. package/lib/components/VInput/VInput.d.ts +4 -4
  57. package/lib/components/VList/VListChildren.js.map +1 -1
  58. package/lib/components/VNumberInput/VNumberInput.d.ts +103 -89
  59. package/lib/components/VNumberInput/VNumberInput.js +19 -4
  60. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  61. package/lib/components/VOtpInput/VOtpInput.js +2 -1
  62. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  63. package/lib/components/VOverlay/VOverlay.css +1 -1
  64. package/lib/components/VOverlay/_variables.scss +1 -1
  65. package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
  66. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  67. package/lib/components/VSelect/VSelect.d.ts +138 -96
  68. package/lib/components/VSelect/VSelect.js +21 -3
  69. package/lib/components/VSelect/VSelect.js.map +1 -1
  70. package/lib/components/VSlideGroup/VSlideGroup.d.ts +10 -0
  71. package/lib/components/VSlideGroup/VSlideGroup.js +2 -1
  72. package/lib/components/VSlideGroup/VSlideGroup.js.map +1 -1
  73. package/lib/components/VSlider/VSlider.d.ts +3 -3
  74. package/lib/components/VSwitch/VSwitch.d.ts +3 -3
  75. package/lib/components/VTabs/VTabs.d.ts +10 -0
  76. package/lib/components/VTextField/VTextField.d.ts +27 -27
  77. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  78. package/lib/composables/calendar.d.ts +6 -0
  79. package/lib/composables/calendar.js +2 -1
  80. package/lib/composables/calendar.js.map +1 -1
  81. package/lib/composables/date/DateAdapter.d.ts +1 -1
  82. package/lib/composables/date/DateAdapter.js.map +1 -1
  83. package/lib/composables/date/adapters/vuetify.d.ts +1 -1
  84. package/lib/composables/date/adapters/vuetify.js +4 -4
  85. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  86. package/lib/composables/date/date.d.ts +1 -1
  87. package/lib/composables/date/index.d.ts +1 -0
  88. package/lib/composables/date/index.js +1 -0
  89. package/lib/composables/date/index.js.map +1 -1
  90. package/lib/composables/filter.js +3 -0
  91. package/lib/composables/filter.js.map +1 -1
  92. package/lib/composables/iconSizes.d.ts +28 -0
  93. package/lib/composables/iconSizes.js +23 -0
  94. package/lib/composables/iconSizes.js.map +1 -0
  95. package/lib/composables/theme.d.ts +6 -1
  96. package/lib/composables/theme.js +94 -26
  97. package/lib/composables/theme.js.map +1 -1
  98. package/lib/composables/virtual.js +6 -1
  99. package/lib/composables/virtual.js.map +1 -1
  100. package/lib/entry-bundler.d.ts +1 -1
  101. package/lib/entry-bundler.js +1 -1
  102. package/lib/entry-bundler.js.map +1 -1
  103. package/lib/framework.d.ts +73 -68
  104. package/lib/framework.js +1 -1
  105. package/lib/framework.js.map +1 -1
  106. package/lib/labs/VCalendar/VCalendar.d.ts +10 -0
  107. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  108. package/lib/labs/VDateInput/VDateInput.d.ts +97 -87
  109. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  110. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  111. package/lib/labs/VIconBtn/VIconBtn.js +7 -11
  112. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  113. package/lib/labs/entry-bundler.d.ts +1 -1
  114. package/lib/util/globals.d.ts +1 -0
  115. package/lib/util/globals.js +1 -0
  116. package/lib/util/globals.js.map +1 -1
  117. package/package.json +3 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.8.6-master.2025-05-26
2
+ * Vuetify v3.8.7-dev.2025-05-27
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, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, 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';
7
+ import { shallowRef, reactive, watchEffect, toRef, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, computed, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, 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';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -81,6 +81,7 @@ 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';
84
85
 
85
86
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
86
87
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -2337,6 +2338,7 @@ const makeThemeProps = propsFactory({
2337
2338
  function genDefaults$2() {
2338
2339
  return {
2339
2340
  defaultTheme: 'light',
2341
+ prefix: 'v-',
2340
2342
  variations: {
2341
2343
  colors: [],
2342
2344
  lighten: 0,
@@ -2418,7 +2420,10 @@ function genDefaults$2() {
2418
2420
  }
2419
2421
  }
2420
2422
  },
2421
- stylesheetId: 'vuetify-theme-stylesheet'
2423
+ stylesheetId: 'vuetify-theme-stylesheet',
2424
+ scoped: false,
2425
+ unimportant: false,
2426
+ utilities: true
2422
2427
  };
2423
2428
  }
2424
2429
  function parseThemeOptions() {
@@ -2441,21 +2446,21 @@ function parseThemeOptions() {
2441
2446
  function createCssClass(lines, selector, content, scope) {
2442
2447
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2443
2448
  }
2444
- function genCssVariables(theme) {
2449
+ function genCssVariables(theme, prefix) {
2445
2450
  const lightOverlay = theme.dark ? 2 : 1;
2446
2451
  const darkOverlay = theme.dark ? 1 : 2;
2447
2452
  const variables = [];
2448
2453
  for (const [key, value] of Object.entries(theme.colors)) {
2449
2454
  const rgb = parseColor(value);
2450
- variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2455
+ variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2451
2456
  if (!key.startsWith('on-')) {
2452
- variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2457
+ variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2453
2458
  }
2454
2459
  }
2455
2460
  for (const [key, value] of Object.entries(theme.variables)) {
2456
2461
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2457
2462
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2458
- variables.push(`--v-${key}: ${rgb ?? value}`);
2463
+ variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2459
2464
  }
2460
2465
  return variables;
2461
2466
  }
@@ -2499,7 +2504,8 @@ function getScopedSelector(selector, scope) {
2499
2504
  const scopeSelector = `:where(${scope})`;
2500
2505
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2501
2506
  }
2502
- function upsertStyles(styleEl, styles) {
2507
+ function upsertStyles(id, cspNonce, styles) {
2508
+ const styleEl = getOrCreateStyleElement(id, cspNonce);
2503
2509
  if (!styleEl) return;
2504
2510
  styleEl.innerHTML = styles;
2505
2511
  }
@@ -2519,8 +2525,17 @@ function getOrCreateStyleElement(id, cspNonce) {
2519
2525
  // Composables
2520
2526
  function createTheme(options) {
2521
2527
  const parsedOptions = parseThemeOptions(options);
2522
- const name = shallowRef(parsedOptions.defaultTheme);
2528
+ const _name = shallowRef(parsedOptions.defaultTheme);
2523
2529
  const themes = ref(parsedOptions.themes);
2530
+ const systemName = shallowRef('light');
2531
+ const name = computed({
2532
+ get() {
2533
+ return _name.value === 'system' ? systemName.value : _name.value;
2534
+ },
2535
+ set(val) {
2536
+ _name.value = val;
2537
+ }
2538
+ });
2524
2539
  const computedThemes = computed(() => {
2525
2540
  const acc = {};
2526
2541
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2541,28 +2556,49 @@ function createTheme(options) {
2541
2556
  const current = toRef(() => computedThemes.value[name.value]);
2542
2557
  const styles = computed(() => {
2543
2558
  const lines = [];
2559
+ const important = parsedOptions.unimportant ? '' : ' !important';
2560
+ const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2544
2561
  if (current.value?.dark) {
2545
2562
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2546
2563
  }
2547
- createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2564
+ createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2548
2565
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2549
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2550
- }
2551
- const bgLines = [];
2552
- const fgLines = [];
2553
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2554
- for (const key of colors) {
2555
- if (key.startsWith('on-')) {
2556
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2557
- } else {
2558
- 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);
2559
- createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2560
- createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2566
+ createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2567
+ }
2568
+ if (parsedOptions.utilities) {
2569
+ const bgLines = [];
2570
+ const fgLines = [];
2571
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2572
+ for (const key of colors) {
2573
+ if (key.startsWith('on-')) {
2574
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2575
+ } else {
2576
+ 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);
2577
+ createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2578
+ createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
2579
+ }
2561
2580
  }
2581
+ lines.push(...bgLines, ...fgLines);
2562
2582
  }
2563
- lines.push(...bgLines, ...fgLines);
2564
2583
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2565
2584
  });
2585
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
2586
+ const themeNames = toRef(() => Object.keys(computedThemes.value));
2587
+ if (SUPPORTS_MATCH_MEDIA) {
2588
+ const media = window.matchMedia('(prefers-color-scheme: dark)');
2589
+ function updateSystemName() {
2590
+ systemName.value = media.matches ? 'dark' : 'light';
2591
+ }
2592
+ updateSystemName();
2593
+ media.addEventListener('change', updateSystemName, {
2594
+ passive: true
2595
+ });
2596
+ if (getCurrentScope()) {
2597
+ onScopeDispose(() => {
2598
+ media.removeEventListener('change', updateSystemName);
2599
+ });
2600
+ }
2601
+ }
2566
2602
  function install(app) {
2567
2603
  if (parsedOptions.isDisabled) return;
2568
2604
  const head = app._context.provides.usehead;
@@ -2600,22 +2636,55 @@ function createTheme(options) {
2600
2636
  updateStyles();
2601
2637
  }
2602
2638
  function updateStyles() {
2603
- upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2639
+ upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
2604
2640
  }
2605
2641
  }
2606
2642
  }
2607
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
2643
+ function change(themeName) {
2644
+ if (!themeNames.value.includes(themeName)) {
2645
+ consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
2646
+ return;
2647
+ }
2648
+ name.value = themeName;
2649
+ }
2650
+ function cycle() {
2651
+ let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
2652
+ const currentIndex = themeArray.indexOf(name.value);
2653
+ const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
2654
+ change(themeArray[nextIndex]);
2655
+ }
2656
+ function toggle() {
2657
+ let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
2658
+ cycle(themeArray);
2659
+ }
2660
+ const globalName = new Proxy(name, {
2661
+ get(target, prop) {
2662
+ return target[prop];
2663
+ },
2664
+ set(target, prop, val) {
2665
+ if (prop === 'value') {
2666
+ deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
2667
+ }
2668
+ // @ts-expect-error
2669
+ target[prop] = val;
2670
+ return true;
2671
+ }
2672
+ });
2608
2673
  return {
2609
2674
  install,
2675
+ change,
2676
+ cycle,
2677
+ toggle,
2610
2678
  isDisabled: parsedOptions.isDisabled,
2611
2679
  name,
2612
2680
  themes,
2613
2681
  current,
2614
2682
  computedThemes,
2683
+ prefix: parsedOptions.prefix,
2615
2684
  themeClasses,
2616
2685
  styles,
2617
2686
  global: {
2618
- name,
2687
+ name: globalName,
2619
2688
  current
2620
2689
  }
2621
2690
  };
@@ -2626,7 +2695,7 @@ function provideTheme(props) {
2626
2695
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2627
2696
  const name = toRef(() => props.theme ?? theme.name.value);
2628
2697
  const current = toRef(() => theme.themes.value[name.value]);
2629
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2698
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
2630
2699
  const newTheme = {
2631
2700
  ...theme,
2632
2701
  name,
@@ -4173,9 +4242,15 @@ function useVariant(props) {
4173
4242
  };
4174
4243
  }
4175
4244
 
4245
+ // Types
4246
+
4176
4247
  const makeVBtnGroupProps = propsFactory({
4177
4248
  baseColor: String,
4178
4249
  divided: Boolean,
4250
+ direction: {
4251
+ type: String,
4252
+ default: 'horizontal'
4253
+ },
4179
4254
  ...makeBorderProps(),
4180
4255
  ...makeComponentProps(),
4181
4256
  ...makeDensityProps(),
@@ -4209,7 +4284,7 @@ const VBtnGroup = genericComponent()({
4209
4284
  } = useRounded(props);
4210
4285
  provideDefaults({
4211
4286
  VBtn: {
4212
- height: 'auto',
4287
+ height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4213
4288
  baseColor: toRef(() => props.baseColor),
4214
4289
  color: toRef(() => props.color),
4215
4290
  density: toRef(() => props.density),
@@ -4219,7 +4294,7 @@ const VBtnGroup = genericComponent()({
4219
4294
  });
4220
4295
  useRender(() => {
4221
4296
  return createVNode(props.tag, {
4222
- "class": normalizeClass(['v-btn-group', {
4297
+ "class": normalizeClass(['v-btn-group', `v-btn-group--${props.direction}`, {
4223
4298
  'v-btn-group--divided': props.divided
4224
4299
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class]),
4225
4300
  "style": normalizeStyle(props.style)
@@ -5907,6 +5982,31 @@ const VAppBarTitle = genericComponent()({
5907
5982
  // Utilities
5908
5983
  const VAlertTitle = createSimpleFunctional('v-alert-title');
5909
5984
 
5985
+ // Utilities
5986
+
5987
+ // Types
5988
+
5989
+ // Types
5990
+
5991
+ // Composables
5992
+ const makeIconSizeProps = propsFactory({
5993
+ iconSize: [Number, String],
5994
+ iconSizes: {
5995
+ type: Array,
5996
+ default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
5997
+ }
5998
+ }, 'iconSize');
5999
+ function useIconSizes(props, fallback) {
6000
+ const iconSize = computed(() => {
6001
+ const iconSizeMap = new Map(props.iconSizes);
6002
+ const _iconSize = props.iconSize ?? fallback() ?? 'default';
6003
+ return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6004
+ });
6005
+ return {
6006
+ iconSize
6007
+ };
6008
+ }
6009
+
5910
6010
  // Types
5911
6011
 
5912
6012
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -5946,6 +6046,7 @@ const makeVAlertProps = propsFactory({
5946
6046
  ...makeDensityProps(),
5947
6047
  ...makeDimensionProps(),
5948
6048
  ...makeElevationProps(),
6049
+ ...makeIconSizeProps(),
5949
6050
  ...makeLocationProps(),
5950
6051
  ...makePositionProps(),
5951
6052
  ...makeRoundedProps(),
@@ -5973,6 +6074,9 @@ const VAlert = genericComponent()({
5973
6074
  if (!props.type) return props.icon;
5974
6075
  return props.icon ?? `$${props.type}`;
5975
6076
  });
6077
+ const {
6078
+ iconSize
6079
+ } = useIconSizes(props, () => props.prominent ? 44 : 28);
5976
6080
  const {
5977
6081
  themeClasses
5978
6082
  } = provideTheme(props);
@@ -6020,6 +6124,11 @@ const VAlert = genericComponent()({
6020
6124
  const hasPrepend = !!(slots.prepend || icon.value);
6021
6125
  const hasTitle = !!(slots.title || props.title);
6022
6126
  const hasClose = !!(slots.close || props.closable);
6127
+ const iconProps = {
6128
+ density: props.density,
6129
+ icon: icon.value,
6130
+ size: iconSize.value
6131
+ };
6023
6132
  return isActive.value && createVNode(props.tag, {
6024
6133
  "class": normalizeClass(['v-alert', props.border && {
6025
6134
  'v-alert--border': !!props.border,
@@ -6037,19 +6146,14 @@ const VAlert = genericComponent()({
6037
6146
  }, null), hasPrepend && createElementVNode("div", {
6038
6147
  "key": "prepend",
6039
6148
  "class": "v-alert__prepend"
6040
- }, [!slots.prepend ? createVNode(VIcon, {
6041
- "key": "prepend-icon",
6042
- "density": props.density,
6043
- "icon": icon.value,
6044
- "size": props.prominent ? 44 : 28
6045
- }, null) : createVNode(VDefaultsProvider, {
6149
+ }, [!slots.prepend ? createVNode(VIcon, mergeProps({
6150
+ "key": "prepend-icon"
6151
+ }, iconProps), null) : createVNode(VDefaultsProvider, {
6046
6152
  "key": "prepend-defaults",
6047
6153
  "disabled": !icon.value,
6048
6154
  "defaults": {
6049
6155
  VIcon: {
6050
- density: props.density,
6051
- icon: icon.value,
6052
- size: props.prominent ? 44 : 28
6156
+ ...iconProps
6053
6157
  }
6054
6158
  }
6055
6159
  }, slots.prepend)]), createElementVNode("div", {
@@ -7574,6 +7678,7 @@ function getOffsetPosition(isHorizontal, element) {
7574
7678
  const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
7575
7679
  const makeVSlideGroupProps = propsFactory({
7576
7680
  centerActive: Boolean,
7681
+ contentClass: null,
7577
7682
  direction: {
7578
7683
  type: String,
7579
7684
  default: 'horizontal'
@@ -7886,7 +7991,7 @@ const VSlideGroup = genericComponent()({
7886
7991
  })]), createElementVNode("div", {
7887
7992
  "key": "container",
7888
7993
  "ref": containerRef,
7889
- "class": "v-slide-group__container",
7994
+ "class": normalizeClass(['v-slide-group__container', props.contentClass]),
7890
7995
  "onScroll": onScroll
7891
7996
  }, [createElementVNode("div", {
7892
7997
  "ref": contentRef,
@@ -8248,6 +8353,68 @@ const VChip = genericComponent()({
8248
8353
  }
8249
8354
  });
8250
8355
 
8356
+ const makeVDividerProps = propsFactory({
8357
+ color: String,
8358
+ inset: Boolean,
8359
+ length: [Number, String],
8360
+ opacity: [Number, String],
8361
+ thickness: [Number, String],
8362
+ vertical: Boolean,
8363
+ ...makeComponentProps(),
8364
+ ...makeThemeProps()
8365
+ }, 'VDivider');
8366
+ const VDivider = genericComponent()({
8367
+ name: 'VDivider',
8368
+ props: makeVDividerProps(),
8369
+ setup(props, _ref) {
8370
+ let {
8371
+ attrs,
8372
+ slots
8373
+ } = _ref;
8374
+ const {
8375
+ themeClasses
8376
+ } = provideTheme(props);
8377
+ const {
8378
+ textColorClasses,
8379
+ textColorStyles
8380
+ } = useTextColor(() => props.color);
8381
+ const dividerStyles = computed(() => {
8382
+ const styles = {};
8383
+ if (props.length) {
8384
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8385
+ }
8386
+ if (props.thickness) {
8387
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8388
+ }
8389
+ return styles;
8390
+ });
8391
+ useRender(() => {
8392
+ const divider = createElementVNode("hr", {
8393
+ "class": normalizeClass([{
8394
+ 'v-divider': true,
8395
+ 'v-divider--inset': props.inset,
8396
+ 'v-divider--vertical': props.vertical
8397
+ }, themeClasses.value, textColorClasses.value, props.class]),
8398
+ "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
8399
+ '--v-border-opacity': props.opacity
8400
+ }, props.style]),
8401
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8402
+ "role": `${attrs.role || 'separator'}`
8403
+ }, null);
8404
+ if (!slots.default) return divider;
8405
+ return createElementVNode("div", {
8406
+ "class": normalizeClass(['v-divider__wrapper', {
8407
+ 'v-divider__wrapper--vertical': props.vertical,
8408
+ 'v-divider__wrapper--inset': props.inset
8409
+ }])
8410
+ }, [divider, createElementVNode("div", {
8411
+ "class": "v-divider__content"
8412
+ }, [slots.default()]), divider]);
8413
+ });
8414
+ return {};
8415
+ }
8416
+ });
8417
+
8251
8418
  // Utilities
8252
8419
 
8253
8420
  // List
@@ -9399,68 +9566,6 @@ const VListSubheader = genericComponent()({
9399
9566
  }
9400
9567
  });
9401
9568
 
9402
- const makeVDividerProps = propsFactory({
9403
- color: String,
9404
- inset: Boolean,
9405
- length: [Number, String],
9406
- opacity: [Number, String],
9407
- thickness: [Number, String],
9408
- vertical: Boolean,
9409
- ...makeComponentProps(),
9410
- ...makeThemeProps()
9411
- }, 'VDivider');
9412
- const VDivider = genericComponent()({
9413
- name: 'VDivider',
9414
- props: makeVDividerProps(),
9415
- setup(props, _ref) {
9416
- let {
9417
- attrs,
9418
- slots
9419
- } = _ref;
9420
- const {
9421
- themeClasses
9422
- } = provideTheme(props);
9423
- const {
9424
- textColorClasses,
9425
- textColorStyles
9426
- } = useTextColor(() => props.color);
9427
- const dividerStyles = computed(() => {
9428
- const styles = {};
9429
- if (props.length) {
9430
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9431
- }
9432
- if (props.thickness) {
9433
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9434
- }
9435
- return styles;
9436
- });
9437
- useRender(() => {
9438
- const divider = createElementVNode("hr", {
9439
- "class": normalizeClass([{
9440
- 'v-divider': true,
9441
- 'v-divider--inset': props.inset,
9442
- 'v-divider--vertical': props.vertical
9443
- }, themeClasses.value, textColorClasses.value, props.class]),
9444
- "style": normalizeStyle([dividerStyles.value, textColorStyles.value, {
9445
- '--v-border-opacity': props.opacity
9446
- }, props.style]),
9447
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9448
- "role": `${attrs.role || 'separator'}`
9449
- }, null);
9450
- if (!slots.default) return divider;
9451
- return createElementVNode("div", {
9452
- "class": normalizeClass(['v-divider__wrapper', {
9453
- 'v-divider__wrapper--vertical': props.vertical,
9454
- 'v-divider__wrapper--inset': props.inset
9455
- }])
9456
- }, [divider, createElementVNode("div", {
9457
- "class": "v-divider__content"
9458
- }, [slots.default()]), divider]);
9459
- });
9460
- return {};
9461
- }
9462
- });
9463
-
9464
9569
  // Types
9465
9570
 
9466
9571
  const makeVListChildrenProps = propsFactory({
@@ -12388,7 +12493,12 @@ function useVirtual(props, items) {
12388
12493
  }
12389
12494
  function calculateOffset(index) {
12390
12495
  index = clamp(index, 0, items.value.length - 1);
12391
- return offsets[index] || 0;
12496
+ const whole = Math.floor(index);
12497
+ const fraction = index % 1;
12498
+ const next = whole + 1;
12499
+ const wholeOffset = offsets[whole] || 0;
12500
+ const nextOffset = offsets[next] || wholeOffset;
12501
+ return wholeOffset + (nextOffset - wholeOffset) * fraction;
12392
12502
  }
12393
12503
  function calculateIndex(scrollTop) {
12394
12504
  return binaryClosest(offsets, scrollTop);
@@ -12742,6 +12852,7 @@ const makeSelectProps = propsFactory({
12742
12852
  },
12743
12853
  openOnClear: Boolean,
12744
12854
  itemColor: String,
12855
+ noAutoScroll: Boolean,
12745
12856
  ...makeItemsProps({
12746
12857
  itemChildren: false
12747
12858
  })
@@ -12956,7 +13067,7 @@ const VSelect = genericComponent()({
12956
13067
  watch(menu, () => {
12957
13068
  if (!props.hideSelected && menu.value && model.value.length) {
12958
13069
  const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
12959
- IN_BROWSER && window.requestAnimationFrame(() => {
13070
+ IN_BROWSER && !props.noAutoScroll && window.requestAnimationFrame(() => {
12960
13071
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12961
13072
  });
12962
13073
  }
@@ -13048,6 +13159,22 @@ const VSelect = genericComponent()({
13048
13159
  key: item.value,
13049
13160
  onClick: () => select(item, null)
13050
13161
  });
13162
+ if (item.raw.type === 'divider') {
13163
+ return slots.divider?.({
13164
+ props: item.raw,
13165
+ index
13166
+ }) ?? createVNode(VDivider, mergeProps(item.props, {
13167
+ "key": `divider-${index}`
13168
+ }), null);
13169
+ }
13170
+ if (item.raw.type === 'subheader') {
13171
+ return slots.subheader?.({
13172
+ props: item.raw,
13173
+ index
13174
+ }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13175
+ "key": `subheader-${index}`
13176
+ }), null);
13177
+ }
13051
13178
  return slots.item?.({
13052
13179
  item,
13053
13180
  index,
@@ -13208,6 +13335,9 @@ function filterItems(items, query, options) {
13208
13335
  let match = -1;
13209
13336
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13210
13337
  if (typeof item === 'object') {
13338
+ if (['divider', 'subheader'].includes(item.raw?.type)) {
13339
+ continue;
13340
+ }
13211
13341
  const filterKeys = keys || Object.keys(transformed);
13212
13342
  for (const key of filterKeys) {
13213
13343
  const value = getPropertyFromItem(transformed, key);
@@ -13646,6 +13776,22 @@ const VAutocomplete = genericComponent()({
13646
13776
  active: highlightFirst.value && index === 0 ? true : undefined,
13647
13777
  onClick: () => select(item, null)
13648
13778
  });
13779
+ if (item.raw.type === 'divider') {
13780
+ return slots.divider?.({
13781
+ props: item.raw,
13782
+ index
13783
+ }) ?? createVNode(VDivider, mergeProps(item.props, {
13784
+ "key": `divider-${index}`
13785
+ }), null);
13786
+ }
13787
+ if (item.raw.type === 'subheader') {
13788
+ return slots.subheader?.({
13789
+ props: item.raw,
13790
+ index
13791
+ }) ?? createVNode(VListSubheader, mergeProps(item.props, {
13792
+ "key": `subheader-${index}`
13793
+ }), null);
13794
+ }
13649
13795
  return slots.item?.({
13650
13796
  item,
13651
13797
  index,
@@ -17241,13 +17387,13 @@ function date(value) {
17241
17387
  return null;
17242
17388
  }
17243
17389
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17244
- function getWeekdays(locale, firstDayOfWeek) {
17390
+ function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17245
17391
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17246
17392
  return createRange(7).map(i => {
17247
17393
  const weekday = new Date(sundayJanuarySecond2000);
17248
17394
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17249
17395
  return new Intl.DateTimeFormat(locale, {
17250
- weekday: 'narrow'
17396
+ weekday: weekdayFormat ?? 'narrow'
17251
17397
  }).format(weekday);
17252
17398
  });
17253
17399
  }
@@ -17711,9 +17857,9 @@ class VuetifyDateAdapter {
17711
17857
  getDiff(date, comparing, unit) {
17712
17858
  return getDiff(date, comparing, unit);
17713
17859
  }
17714
- getWeekdays(firstDayOfWeek) {
17860
+ getWeekdays(firstDayOfWeek, weekdayFormat) {
17715
17861
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
17716
- return getWeekdays(this.locale, firstDay);
17862
+ return getWeekdays(this.locale, firstDay, weekdayFormat);
17717
17863
  }
17718
17864
  getYear(date) {
17719
17865
  return getYear(date);
@@ -18056,6 +18202,7 @@ const VCombobox = genericComponent()({
18056
18202
  _search.value = val ?? '';
18057
18203
  if (!props.multiple && !hasSelectionSlot.value) {
18058
18204
  model.value = [transformItem$3(props, val)];
18205
+ nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18059
18206
  }
18060
18207
  if (val && props.multiple && props.delimiters?.length) {
18061
18208
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18372,6 +18519,22 @@ const VCombobox = genericComponent()({
18372
18519
  active: highlightFirst.value && index === 0 ? true : undefined,
18373
18520
  onClick: () => select(item, null)
18374
18521
  });
18522
+ if (item.raw.type === 'divider') {
18523
+ return slots.divider?.({
18524
+ props: item.raw,
18525
+ index
18526
+ }) ?? createVNode(VDivider, mergeProps(item.props, {
18527
+ "key": `divider-${index}`
18528
+ }), null);
18529
+ }
18530
+ if (item.raw.type === 'subheader') {
18531
+ return slots.subheader?.({
18532
+ props: item.raw,
18533
+ index
18534
+ }) ?? createVNode(VListSubheader, mergeProps(item.props, {
18535
+ "key": `subheader-${index}`
18536
+ }), null);
18537
+ }
18375
18538
  return slots.item?.({
18376
18539
  item,
18377
18540
  index,
@@ -20251,6 +20414,7 @@ const makeVDataTableHeadersProps = propsFactory({
20251
20414
  color: String,
20252
20415
  disableSort: Boolean,
20253
20416
  fixedHeader: Boolean,
20417
+ lastFixed: Boolean,
20254
20418
  multiSort: Boolean,
20255
20419
  sortAscIcon: {
20256
20420
  type: IconValue,
@@ -20297,10 +20461,11 @@ const VDataTableHeaders = genericComponent()({
20297
20461
  loaderClasses
20298
20462
  } = useLoader(props);
20299
20463
  function getFixedStyles(column, y) {
20300
- if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20464
+ if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20301
20465
  return {
20302
20466
  position: 'sticky',
20303
- left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
20467
+ left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20468
+ right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20304
20469
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20305
20470
  };
20306
20471
  }
@@ -22015,7 +22180,8 @@ const makeCalendarProps = propsFactory({
22015
22180
  firstDayOfWeek: {
22016
22181
  type: [Number, String],
22017
22182
  default: undefined
22018
- }
22183
+ },
22184
+ weekdayFormat: String
22019
22185
  }, 'calendar');
22020
22186
  function useCalendar(props) {
22021
22187
  const adapter = useDate();
@@ -22263,7 +22429,7 @@ const VDatePickerMonth = genericComponent()({
22263
22429
  "ref": daysRef,
22264
22430
  "key": daysInMonth.value[0].date?.toString(),
22265
22431
  "class": "v-date-picker-month__days"
22266
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => createElementVNode("div", {
22432
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => createElementVNode("div", {
22267
22433
  "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
22268
22434
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22269
22435
  const slotProps = {
@@ -24794,6 +24960,10 @@ const makeVNumberInputProps = propsFactory({
24794
24960
  type: Number,
24795
24961
  default: 0
24796
24962
  },
24963
+ minFractionDigits: {
24964
+ type: Number,
24965
+ default: null
24966
+ },
24797
24967
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
24798
24968
  }, 'VNumberInput');
24799
24969
  const VNumberInput = genericComponent()({
@@ -24824,9 +24994,19 @@ const VNumberInput = genericComponent()({
24824
24994
  } = useFocus(props);
24825
24995
  function correctPrecision(val) {
24826
24996
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
24827
- const fixed = precision == null ? String(val) : val.toFixed(precision);
24828
- return isFocused.value ? Number(fixed).toString() // trim zeros
24829
- : fixed;
24997
+ if (precision == null) {
24998
+ return String(val);
24999
+ }
25000
+ let fixed = val.toFixed(precision);
25001
+ if (isFocused.value) {
25002
+ return Number(fixed).toString(); // trim zeros
25003
+ }
25004
+ if ((props.minFractionDigits ?? precision) < precision) {
25005
+ const trimLimit = precision - props.minFractionDigits;
25006
+ const [baseDigits, fractionDigits] = fixed.split('.');
25007
+ fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
25008
+ }
25009
+ return fixed;
24830
25010
  }
24831
25011
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
24832
25012
  const _inputText = shallowRef(null);
@@ -24885,6 +25065,7 @@ const VNumberInput = genericComponent()({
24885
25065
  }
24886
25066
  };
24887
25067
  watch(() => props.precision, () => formatInputValue());
25068
+ watch(() => props.minFractionDigits, () => formatInputValue());
24888
25069
  onMounted(() => {
24889
25070
  clampModel();
24890
25071
  });
@@ -24994,7 +25175,7 @@ const VNumberInput = genericComponent()({
24994
25175
  inputText.value = null;
24995
25176
  return;
24996
25177
  }
24997
- inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25178
+ inputText.value = correctPrecision(model.value);
24998
25179
  }
24999
25180
  function trimDecimalZeros() {
25000
25181
  if (controlsDisabled.value) return;
@@ -25254,9 +25435,10 @@ const VOtpInput = genericComponent()({
25254
25435
  e.preventDefault();
25255
25436
  e.stopPropagation();
25256
25437
  const clipboardText = e?.clipboardData?.getData('Text').slice(0, length.value) ?? '';
25438
+ const finalIndex = clipboardText.length - 1 === -1 ? index : clipboardText.length - 1;
25257
25439
  if (isValidNumber(clipboardText)) return;
25258
25440
  model.value = clipboardText.split('');
25259
- inputRef.value?.[index].blur();
25441
+ inputRef.value?.[finalIndex].focus();
25260
25442
  }
25261
25443
  function reset() {
25262
25444
  model.value = [];
@@ -29963,11 +30145,6 @@ const makeVIconBtnProps = propsFactory({
29963
30145
  hideOverlay: Boolean,
29964
30146
  icon: [String, Function, Object],
29965
30147
  iconColor: String,
29966
- iconSize: [Number, String],
29967
- iconSizes: {
29968
- type: Array,
29969
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
29970
- },
29971
30148
  loading: Boolean,
29972
30149
  opacity: [Number, String],
29973
30150
  readonly: Boolean,
@@ -29987,6 +30164,7 @@ const makeVIconBtnProps = propsFactory({
29987
30164
  ...makeBorderProps(),
29988
30165
  ...makeComponentProps(),
29989
30166
  ...makeElevationProps(),
30167
+ ...makeIconSizeProps(),
29990
30168
  ...makeRoundedProps(),
29991
30169
  ...makeTagProps({
29992
30170
  tag: 'button'
@@ -30041,7 +30219,6 @@ const VIconBtn = genericComponent()({
30041
30219
  })()
30042
30220
  }));
30043
30221
  const btnSizeMap = new Map(props.sizes);
30044
- const iconSizeMap = new Map(props.iconSizes);
30045
30222
  function onClick() {
30046
30223
  if (props.disabled || props.readonly || isActive.value === undefined || props.tag === 'a' && attrs.href) return;
30047
30224
  isActive.value = !isActive.value;
@@ -30053,12 +30230,12 @@ const VIconBtn = genericComponent()({
30053
30230
  const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
30054
30231
  const btnHeight = props.height ?? btnSize;
30055
30232
  const btnWidth = props.width ?? btnSize;
30056
- const _iconSize = props.iconSize;
30057
- const hasNamedIconSize = iconSizeMap.has(_iconSize);
30058
- const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
30233
+ const {
30234
+ iconSize
30235
+ } = useIconSizes(props, () => new Map(props.iconSizes).get(_btnSize));
30059
30236
  const iconProps = {
30060
30237
  icon,
30061
- size: iconSize,
30238
+ size: iconSize.value,
30062
30239
  iconColor: props.iconColor,
30063
30240
  opacity: props.opacity
30064
30241
  };
@@ -30101,7 +30278,7 @@ const VIconBtn = genericComponent()({
30101
30278
  "color": typeof props.loading === 'boolean' ? undefined : props.loading,
30102
30279
  "indeterminate": "disable-shrink",
30103
30280
  "width": "2",
30104
- "size": iconSize
30281
+ "size": iconSize.value
30105
30282
  }, null)])]
30106
30283
  });
30107
30284
  });
@@ -32011,7 +32188,7 @@ function createVuetify$1() {
32011
32188
  };
32012
32189
  });
32013
32190
  }
32014
- const version$1 = "3.8.6-master.2025-05-26";
32191
+ const version$1 = "3.8.7-dev.2025-05-27";
32015
32192
  createVuetify$1.version = version$1;
32016
32193
 
32017
32194
  // Vue's inject() can only be used in setup
@@ -32309,7 +32486,7 @@ var index = /*#__PURE__*/Object.freeze({
32309
32486
 
32310
32487
  /* eslint-disable local-rules/sort-imports */
32311
32488
 
32312
- const version = "3.8.6-master.2025-05-26";
32489
+ const version = "3.8.7-dev.2025-05-27";
32313
32490
 
32314
32491
  /* eslint-disable local-rules/sort-imports */
32315
32492