@vuetify/nightly 3.8.6-dev.2025-05-21 → 3.8.6-master.2025-05-22

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 +10 -21
  2. package/dist/json/attributes.json +3598 -3634
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +184 -184
  5. package/dist/json/tags.json +0 -9
  6. package/dist/json/web-types.json +6522 -6697
  7. package/dist/vuetify-labs.cjs +223 -323
  8. package/dist/vuetify-labs.css +4050 -4078
  9. package/dist/vuetify-labs.d.ts +1350 -1508
  10. package/dist/vuetify-labs.esm.js +224 -324
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +223 -323
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +212 -317
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3022 -3050
  17. package/dist/vuetify.d.ts +517 -667
  18. package/dist/vuetify.esm.js +213 -318
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +212 -317
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1195 -1200
  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 +9 -14
  28. package/lib/components/VAlert/VAlert.js.map +1 -1
  29. package/lib/components/VAlert/VAlert.sass +1 -7
  30. package/lib/components/VAutocomplete/VAutocomplete.d.ts +96 -120
  31. package/lib/components/VAutocomplete/VAutocomplete.js +1 -18
  32. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  33. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  34. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  35. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  36. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  37. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  38. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  39. package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
  40. package/lib/components/VCombobox/VCombobox.d.ts +96 -120
  41. package/lib/components/VCombobox/VCombobox.js +1 -19
  42. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  43. package/lib/components/VDatePicker/VDatePicker.d.ts +0 -10
  44. package/lib/components/VDatePicker/VDatePickerMonth.d.ts +0 -10
  45. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -1
  46. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  47. package/lib/components/VField/VField.d.ts +3 -3
  48. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  49. package/lib/components/VInput/VInput.d.ts +4 -4
  50. package/lib/components/VList/VListChildren.js.map +1 -1
  51. package/lib/components/VNavigationDrawer/touch.js +2 -4
  52. package/lib/components/VNavigationDrawer/touch.js.map +1 -1
  53. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -103
  54. package/lib/components/VNumberInput/VNumberInput.js +22 -29
  55. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  56. package/lib/components/VOverlay/VOverlay.css +1 -1
  57. package/lib/components/VOverlay/_variables.scss +1 -1
  58. package/lib/components/VOverlay/locationStrategies.js +16 -8
  59. package/lib/components/VOverlay/locationStrategies.js.map +1 -1
  60. package/lib/components/VProgressCircular/VProgressCircular.js +2 -2
  61. package/lib/components/VProgressCircular/VProgressCircular.js.map +1 -1
  62. package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
  63. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  64. package/lib/components/VSelect/VSelect.d.ts +96 -120
  65. package/lib/components/VSelect/VSelect.js +37 -25
  66. package/lib/components/VSelect/VSelect.js.map +1 -1
  67. package/lib/components/VSlider/VSlider.d.ts +3 -3
  68. package/lib/components/VSlider/slider.js +1 -1
  69. package/lib/components/VSlider/slider.js.map +1 -1
  70. package/lib/components/VSwitch/VSwitch.d.ts +3 -3
  71. package/lib/components/VTextField/VTextField.d.ts +27 -27
  72. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  73. package/lib/composables/calendar.d.ts +0 -6
  74. package/lib/composables/calendar.js +1 -2
  75. package/lib/composables/calendar.js.map +1 -1
  76. package/lib/composables/date/DateAdapter.d.ts +1 -1
  77. package/lib/composables/date/DateAdapter.js.map +1 -1
  78. package/lib/composables/date/adapters/vuetify.d.ts +1 -1
  79. package/lib/composables/date/adapters/vuetify.js +4 -4
  80. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  81. package/lib/composables/date/date.d.ts +1 -1
  82. package/lib/composables/date/index.d.ts +0 -1
  83. package/lib/composables/date/index.js +0 -1
  84. package/lib/composables/date/index.js.map +1 -1
  85. package/lib/composables/filter.js +0 -3
  86. package/lib/composables/filter.js.map +1 -1
  87. package/lib/composables/goto.js +1 -1
  88. package/lib/composables/goto.js.map +1 -1
  89. package/lib/composables/theme.d.ts +1 -6
  90. package/lib/composables/theme.js +26 -94
  91. package/lib/composables/theme.js.map +1 -1
  92. package/lib/composables/virtual.js +1 -6
  93. package/lib/composables/virtual.js.map +1 -1
  94. package/lib/entry-bundler.d.ts +1 -1
  95. package/lib/entry-bundler.js +1 -1
  96. package/lib/entry-bundler.js.map +1 -1
  97. package/lib/framework.d.ts +67 -72
  98. package/lib/framework.js +1 -1
  99. package/lib/framework.js.map +1 -1
  100. package/lib/labs/VCalendar/VCalendar.d.ts +0 -10
  101. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  102. package/lib/labs/VDateInput/VDateInput.d.ts +87 -97
  103. package/lib/labs/VFileUpload/VFileUpload.d.ts +3 -3
  104. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  105. package/lib/labs/VIconBtn/VIconBtn.js +11 -7
  106. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  107. package/lib/labs/entry-bundler.d.ts +1 -1
  108. package/lib/util/box.d.ts +1 -0
  109. package/lib/util/box.js +27 -0
  110. package/lib/util/box.js.map +1 -1
  111. package/lib/util/globals.d.ts +0 -1
  112. package/lib/util/globals.js +0 -1
  113. package/lib/util/globals.js.map +1 -1
  114. package/package.json +5 -7
  115. package/lib/composables/iconSizes.d.ts +0 -28
  116. package/lib/composables/iconSizes.js +0 -23
  117. package/lib/composables/iconSizes.js.map +0 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.6-dev.2025-05-21
2
+ * Vuetify v3.8.6-master.2025-05-22
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -14,7 +14,6 @@
14
14
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
15
15
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
16
16
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
17
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
18
17
 
19
18
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
20
19
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -619,6 +618,33 @@
619
618
  return target.getBoundingClientRect();
620
619
  }
621
620
  }
621
+ function getElementBox(el) {
622
+ if (el === document.documentElement) {
623
+ if (!visualViewport) {
624
+ return new Box({
625
+ x: 0,
626
+ y: 0,
627
+ width: document.documentElement.clientWidth,
628
+ height: document.documentElement.clientHeight
629
+ });
630
+ } else {
631
+ return new Box({
632
+ x: visualViewport.scale > 1 ? 0 : visualViewport.offsetLeft,
633
+ y: visualViewport.scale > 1 ? 0 : visualViewport.offsetTop,
634
+ width: visualViewport.width * visualViewport.scale,
635
+ height: visualViewport.height * visualViewport.scale
636
+ });
637
+ }
638
+ } else {
639
+ const rect = el.getBoundingClientRect();
640
+ return new Box({
641
+ x: rect.x,
642
+ y: rect.y,
643
+ width: el.clientWidth,
644
+ height: el.clientHeight
645
+ });
646
+ }
647
+ }
622
648
 
623
649
  // Utilities
624
650
 
@@ -2787,7 +2813,6 @@
2787
2813
  function genDefaults$1() {
2788
2814
  return {
2789
2815
  defaultTheme: 'light',
2790
- prefix: 'v-',
2791
2816
  variations: {
2792
2817
  colors: [],
2793
2818
  lighten: 0,
@@ -2869,10 +2894,7 @@
2869
2894
  }
2870
2895
  }
2871
2896
  },
2872
- stylesheetId: 'vuetify-theme-stylesheet',
2873
- scoped: false,
2874
- unimportant: false,
2875
- utilities: true
2897
+ stylesheetId: 'vuetify-theme-stylesheet'
2876
2898
  };
2877
2899
  }
2878
2900
  function parseThemeOptions() {
@@ -2895,21 +2917,21 @@
2895
2917
  function createCssClass(lines, selector, content, scope) {
2896
2918
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2897
2919
  }
2898
- function genCssVariables(theme, prefix) {
2920
+ function genCssVariables(theme) {
2899
2921
  const lightOverlay = theme.dark ? 2 : 1;
2900
2922
  const darkOverlay = theme.dark ? 1 : 2;
2901
2923
  const variables = [];
2902
2924
  for (const [key, value] of Object.entries(theme.colors)) {
2903
2925
  const rgb = parseColor(value);
2904
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2926
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2905
2927
  if (!key.startsWith('on-')) {
2906
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2928
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2907
2929
  }
2908
2930
  }
2909
2931
  for (const [key, value] of Object.entries(theme.variables)) {
2910
2932
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2911
2933
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2912
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2934
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2913
2935
  }
2914
2936
  return variables;
2915
2937
  }
@@ -2953,8 +2975,7 @@
2953
2975
  const scopeSelector = `:where(${scope})`;
2954
2976
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2955
2977
  }
2956
- function upsertStyles(id, cspNonce, styles) {
2957
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2978
+ function upsertStyles(styleEl, styles) {
2958
2979
  if (!styleEl) return;
2959
2980
  styleEl.innerHTML = styles;
2960
2981
  }
@@ -2974,17 +2995,8 @@
2974
2995
  // Composables
2975
2996
  function createTheme(options) {
2976
2997
  const parsedOptions = parseThemeOptions(options);
2977
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
2998
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
2978
2999
  const themes = vue.ref(parsedOptions.themes);
2979
- const systemName = vue.shallowRef('light');
2980
- const name = vue.computed({
2981
- get() {
2982
- return _name.value === 'system' ? systemName.value : _name.value;
2983
- },
2984
- set(val) {
2985
- _name.value = val;
2986
- }
2987
- });
2988
3000
  const computedThemes = vue.computed(() => {
2989
3001
  const acc = {};
2990
3002
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3005,49 +3017,28 @@
3005
3017
  const current = vue.toRef(() => computedThemes.value[name.value]);
3006
3018
  const styles = vue.computed(() => {
3007
3019
  const lines = [];
3008
- const important = parsedOptions.unimportant ? '' : ' !important';
3009
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3010
3020
  if (current.value?.dark) {
3011
3021
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3012
3022
  }
3013
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
3023
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3014
3024
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
3015
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3016
- }
3017
- if (parsedOptions.utilities) {
3018
- const bgLines = [];
3019
- const fgLines = [];
3020
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3021
- for (const key of colors) {
3022
- if (key.startsWith('on-')) {
3023
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3024
- } else {
3025
- 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);
3026
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3027
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3028
- }
3025
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
3026
+ }
3027
+ const bgLines = [];
3028
+ const fgLines = [];
3029
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3030
+ for (const key of colors) {
3031
+ if (key.startsWith('on-')) {
3032
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3033
+ } else {
3034
+ 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);
3035
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3036
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3029
3037
  }
3030
- lines.push(...bgLines, ...fgLines);
3031
3038
  }
3039
+ lines.push(...bgLines, ...fgLines);
3032
3040
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3033
3041
  });
3034
- const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3035
- const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
3036
- if (SUPPORTS_MATCH_MEDIA) {
3037
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3038
- function updateSystemName() {
3039
- systemName.value = media.matches ? 'dark' : 'light';
3040
- }
3041
- updateSystemName();
3042
- media.addEventListener('change', updateSystemName, {
3043
- passive: true
3044
- });
3045
- if (vue.getCurrentScope()) {
3046
- vue.onScopeDispose(() => {
3047
- media.removeEventListener('change', updateSystemName);
3048
- });
3049
- }
3050
- }
3051
3042
  function install(app) {
3052
3043
  if (parsedOptions.isDisabled) return;
3053
3044
  const head = app._context.provides.usehead;
@@ -3085,55 +3076,22 @@
3085
3076
  updateStyles();
3086
3077
  }
3087
3078
  function updateStyles() {
3088
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3079
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3089
3080
  }
3090
3081
  }
3091
3082
  }
3092
- function change(themeName) {
3093
- if (!themeNames.value.includes(themeName)) {
3094
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3095
- return;
3096
- }
3097
- name.value = themeName;
3098
- }
3099
- function cycle() {
3100
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3101
- const currentIndex = themeArray.indexOf(name.value);
3102
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3103
- change(themeArray[nextIndex]);
3104
- }
3105
- function toggle() {
3106
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3107
- cycle(themeArray);
3108
- }
3109
- const globalName = new Proxy(name, {
3110
- get(target, prop) {
3111
- return target[prop];
3112
- },
3113
- set(target, prop, val) {
3114
- if (prop === 'value') {
3115
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3116
- }
3117
- // @ts-expect-error
3118
- target[prop] = val;
3119
- return true;
3120
- }
3121
- });
3083
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3122
3084
  return {
3123
3085
  install,
3124
- change,
3125
- cycle,
3126
- toggle,
3127
3086
  isDisabled: parsedOptions.isDisabled,
3128
3087
  name,
3129
3088
  themes,
3130
3089
  current,
3131
3090
  computedThemes,
3132
- prefix: parsedOptions.prefix,
3133
3091
  themeClasses,
3134
3092
  styles,
3135
3093
  global: {
3136
- name: globalName,
3094
+ name,
3137
3095
  current
3138
3096
  }
3139
3097
  };
@@ -3144,7 +3102,7 @@
3144
3102
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3145
3103
  const name = vue.toRef(() => props.theme ?? theme.name.value);
3146
3104
  const current = vue.toRef(() => theme.themes.value[name.value]);
3147
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3105
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3148
3106
  const newTheme = {
3149
3107
  ...theme,
3150
3108
  name,
@@ -4691,15 +4649,9 @@
4691
4649
  };
4692
4650
  }
4693
4651
 
4694
- // Types
4695
-
4696
4652
  const makeVBtnGroupProps = propsFactory({
4697
4653
  baseColor: String,
4698
4654
  divided: Boolean,
4699
- direction: {
4700
- type: String,
4701
- default: 'horizontal'
4702
- },
4703
4655
  ...makeBorderProps(),
4704
4656
  ...makeComponentProps(),
4705
4657
  ...makeDensityProps(),
@@ -4733,7 +4685,7 @@
4733
4685
  } = useRounded(props);
4734
4686
  provideDefaults({
4735
4687
  VBtn: {
4736
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4688
+ height: 'auto',
4737
4689
  baseColor: vue.toRef(() => props.baseColor),
4738
4690
  color: vue.toRef(() => props.color),
4739
4691
  density: vue.toRef(() => props.density),
@@ -4743,7 +4695,7 @@
4743
4695
  });
4744
4696
  useRender(() => {
4745
4697
  return vue.createVNode(props.tag, {
4746
- "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4698
+ "class": ['v-btn-group', {
4747
4699
  'v-btn-group--divided': props.divided
4748
4700
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4749
4701
  "style": props.style
@@ -5212,7 +5164,7 @@
5212
5164
  resizeRef,
5213
5165
  contentRect
5214
5166
  } = useResizeObserver();
5215
- const normalizedValue = vue.toRef(() => Math.max(0, Math.min(100, parseFloat(props.modelValue))));
5167
+ const normalizedValue = vue.toRef(() => clamp(parseFloat(props.modelValue), 0, 100));
5216
5168
  const width = vue.toRef(() => Number(props.width));
5217
5169
  const size = vue.toRef(() => {
5218
5170
  // Get size from element if size prop value is small, large etc
@@ -6222,31 +6174,6 @@
6222
6174
  // Utilities
6223
6175
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6224
6176
 
6225
- // Utilities
6226
-
6227
- // Types
6228
-
6229
- // Types
6230
-
6231
- // Composables
6232
- const makeIconSizeProps = propsFactory({
6233
- iconSize: [Number, String],
6234
- iconSizes: {
6235
- type: Array,
6236
- default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
6237
- }
6238
- }, 'iconSize');
6239
- function useIconSizes(props, fallback) {
6240
- const iconSize = vue.computed(() => {
6241
- const iconSizeMap = new Map(props.iconSizes);
6242
- const _iconSize = props.iconSize ?? fallback() ?? 'default';
6243
- return iconSizeMap.has(_iconSize) ? iconSizeMap.get(_iconSize) : _iconSize;
6244
- });
6245
- return {
6246
- iconSize
6247
- };
6248
- }
6249
-
6250
6177
  // Types
6251
6178
 
6252
6179
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6286,7 +6213,6 @@
6286
6213
  ...makeDensityProps(),
6287
6214
  ...makeDimensionProps(),
6288
6215
  ...makeElevationProps(),
6289
- ...makeIconSizeProps(),
6290
6216
  ...makeLocationProps(),
6291
6217
  ...makePositionProps(),
6292
6218
  ...makeRoundedProps(),
@@ -6314,9 +6240,6 @@
6314
6240
  if (!props.type) return props.icon;
6315
6241
  return props.icon ?? `$${props.type}`;
6316
6242
  });
6317
- const {
6318
- iconSize
6319
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6320
6243
  const {
6321
6244
  themeClasses
6322
6245
  } = provideTheme(props);
@@ -6364,11 +6287,6 @@
6364
6287
  const hasPrepend = !!(slots.prepend || icon.value);
6365
6288
  const hasTitle = !!(slots.title || props.title);
6366
6289
  const hasClose = !!(slots.close || props.closable);
6367
- const iconProps = {
6368
- density: props.density,
6369
- icon: icon.value,
6370
- size: iconSize.value
6371
- };
6372
6290
  return isActive.value && vue.createVNode(props.tag, {
6373
6291
  "class": ['v-alert', props.border && {
6374
6292
  'v-alert--border': !!props.border,
@@ -6386,14 +6304,19 @@
6386
6304
  }, null), hasPrepend && vue.createVNode("div", {
6387
6305
  "key": "prepend",
6388
6306
  "class": "v-alert__prepend"
6389
- }, [!slots.prepend ? vue.createVNode(VIcon, vue.mergeProps({
6390
- "key": "prepend-icon"
6391
- }, iconProps), null) : vue.createVNode(VDefaultsProvider, {
6307
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
6308
+ "key": "prepend-icon",
6309
+ "density": props.density,
6310
+ "icon": icon.value,
6311
+ "size": props.prominent ? 44 : 28
6312
+ }, null) : vue.createVNode(VDefaultsProvider, {
6392
6313
  "key": "prepend-defaults",
6393
6314
  "disabled": !icon.value,
6394
6315
  "defaults": {
6395
6316
  VIcon: {
6396
- ...iconProps
6317
+ density: props.density,
6318
+ icon: icon.value,
6319
+ size: props.prominent ? 44 : 28
6397
6320
  }
6398
6321
  }
6399
6322
  }, slots.prepend)]), vue.createVNode("div", {
@@ -7848,7 +7771,7 @@
7848
7771
  min = 0;
7849
7772
  max = scrollHeight + -containerHeight;
7850
7773
  }
7851
- return Math.max(Math.min(value, max), min);
7774
+ return clamp(value, min, max);
7852
7775
  }
7853
7776
 
7854
7777
  function calculateUpdatedTarget(_ref) {
@@ -8591,68 +8514,6 @@
8591
8514
  }
8592
8515
  });
8593
8516
 
8594
- const makeVDividerProps = propsFactory({
8595
- color: String,
8596
- inset: Boolean,
8597
- length: [Number, String],
8598
- opacity: [Number, String],
8599
- thickness: [Number, String],
8600
- vertical: Boolean,
8601
- ...makeComponentProps(),
8602
- ...makeThemeProps()
8603
- }, 'VDivider');
8604
- const VDivider = genericComponent()({
8605
- name: 'VDivider',
8606
- props: makeVDividerProps(),
8607
- setup(props, _ref) {
8608
- let {
8609
- attrs,
8610
- slots
8611
- } = _ref;
8612
- const {
8613
- themeClasses
8614
- } = provideTheme(props);
8615
- const {
8616
- textColorClasses,
8617
- textColorStyles
8618
- } = useTextColor(() => props.color);
8619
- const dividerStyles = vue.computed(() => {
8620
- const styles = {};
8621
- if (props.length) {
8622
- styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
8623
- }
8624
- if (props.thickness) {
8625
- styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
8626
- }
8627
- return styles;
8628
- });
8629
- useRender(() => {
8630
- const divider = vue.createVNode("hr", {
8631
- "class": [{
8632
- 'v-divider': true,
8633
- 'v-divider--inset': props.inset,
8634
- 'v-divider--vertical': props.vertical
8635
- }, themeClasses.value, textColorClasses.value, props.class],
8636
- "style": [dividerStyles.value, textColorStyles.value, {
8637
- '--v-border-opacity': props.opacity
8638
- }, props.style],
8639
- "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
8640
- "role": `${attrs.role || 'separator'}`
8641
- }, null);
8642
- if (!slots.default) return divider;
8643
- return vue.createVNode("div", {
8644
- "class": ['v-divider__wrapper', {
8645
- 'v-divider__wrapper--vertical': props.vertical,
8646
- 'v-divider__wrapper--inset': props.inset
8647
- }]
8648
- }, [divider, vue.createVNode("div", {
8649
- "class": "v-divider__content"
8650
- }, [slots.default()]), divider]);
8651
- });
8652
- return {};
8653
- }
8654
- });
8655
-
8656
8517
  // Utilities
8657
8518
 
8658
8519
  // List
@@ -9804,6 +9665,68 @@
9804
9665
  }
9805
9666
  });
9806
9667
 
9668
+ const makeVDividerProps = propsFactory({
9669
+ color: String,
9670
+ inset: Boolean,
9671
+ length: [Number, String],
9672
+ opacity: [Number, String],
9673
+ thickness: [Number, String],
9674
+ vertical: Boolean,
9675
+ ...makeComponentProps(),
9676
+ ...makeThemeProps()
9677
+ }, 'VDivider');
9678
+ const VDivider = genericComponent()({
9679
+ name: 'VDivider',
9680
+ props: makeVDividerProps(),
9681
+ setup(props, _ref) {
9682
+ let {
9683
+ attrs,
9684
+ slots
9685
+ } = _ref;
9686
+ const {
9687
+ themeClasses
9688
+ } = provideTheme(props);
9689
+ const {
9690
+ textColorClasses,
9691
+ textColorStyles
9692
+ } = useTextColor(() => props.color);
9693
+ const dividerStyles = vue.computed(() => {
9694
+ const styles = {};
9695
+ if (props.length) {
9696
+ styles[props.vertical ? 'height' : 'width'] = convertToUnit(props.length);
9697
+ }
9698
+ if (props.thickness) {
9699
+ styles[props.vertical ? 'borderRightWidth' : 'borderTopWidth'] = convertToUnit(props.thickness);
9700
+ }
9701
+ return styles;
9702
+ });
9703
+ useRender(() => {
9704
+ const divider = vue.createVNode("hr", {
9705
+ "class": [{
9706
+ 'v-divider': true,
9707
+ 'v-divider--inset': props.inset,
9708
+ 'v-divider--vertical': props.vertical
9709
+ }, themeClasses.value, textColorClasses.value, props.class],
9710
+ "style": [dividerStyles.value, textColorStyles.value, {
9711
+ '--v-border-opacity': props.opacity
9712
+ }, props.style],
9713
+ "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
9714
+ "role": `${attrs.role || 'separator'}`
9715
+ }, null);
9716
+ if (!slots.default) return divider;
9717
+ return vue.createVNode("div", {
9718
+ "class": ['v-divider__wrapper', {
9719
+ 'v-divider__wrapper--vertical': props.vertical,
9720
+ 'v-divider__wrapper--inset': props.inset
9721
+ }]
9722
+ }, [divider, vue.createVNode("div", {
9723
+ "class": "v-divider__content"
9724
+ }, [slots.default()]), divider]);
9725
+ });
9726
+ return {};
9727
+ }
9728
+ });
9729
+
9807
9730
  // Types
9808
9731
 
9809
9732
  const makeVListChildrenProps = propsFactory({
@@ -10382,11 +10305,19 @@
10382
10305
  vue.watch(() => props.locationStrategy, reset);
10383
10306
  vue.onScopeDispose(() => {
10384
10307
  window.removeEventListener('resize', onResize);
10308
+ visualViewport?.removeEventListener('resize', onVisualResize);
10309
+ visualViewport?.removeEventListener('scroll', onVisualScroll);
10385
10310
  updateLocation.value = undefined;
10386
10311
  });
10387
10312
  window.addEventListener('resize', onResize, {
10388
10313
  passive: true
10389
10314
  });
10315
+ visualViewport?.addEventListener('resize', onVisualResize, {
10316
+ passive: true
10317
+ });
10318
+ visualViewport?.addEventListener('scroll', onVisualScroll, {
10319
+ passive: true
10320
+ });
10390
10321
  if (typeof props.locationStrategy === 'function') {
10391
10322
  updateLocation.value = props.locationStrategy(data, props, contentStyles)?.updateLocation;
10392
10323
  } else {
@@ -10397,6 +10328,12 @@
10397
10328
  function onResize(e) {
10398
10329
  updateLocation.value?.(e);
10399
10330
  }
10331
+ function onVisualResize(e) {
10332
+ updateLocation.value?.(e);
10333
+ }
10334
+ function onVisualScroll(e) {
10335
+ updateLocation.value?.(e);
10336
+ }
10400
10337
  return {
10401
10338
  contentStyles,
10402
10339
  updateLocation
@@ -10548,13 +10485,7 @@
10548
10485
  }
10549
10486
  }
10550
10487
  const viewport = scrollParents.reduce((box, el) => {
10551
- const rect = el.getBoundingClientRect();
10552
- const scrollBox = new Box({
10553
- x: el === document.documentElement ? 0 : rect.x,
10554
- y: el === document.documentElement ? 0 : rect.y,
10555
- width: el.clientWidth,
10556
- height: el.clientHeight
10557
- });
10488
+ const scrollBox = getElementBox(el);
10558
10489
  if (box) {
10559
10490
  return new Box({
10560
10491
  x: Math.max(box.left, scrollBox.left),
@@ -12721,12 +12652,7 @@
12721
12652
  }
12722
12653
  function calculateOffset(index) {
12723
12654
  index = clamp(index, 0, items.value.length - 1);
12724
- const whole = Math.floor(index);
12725
- const fraction = index % 1;
12726
- const next = whole + 1;
12727
- const wholeOffset = offsets[whole] || 0;
12728
- const nextOffset = offsets[next] || wholeOffset;
12729
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12655
+ return offsets[index] || 0;
12730
12656
  }
12731
12657
  function calculateIndex(scrollTop) {
12732
12658
  return binaryClosest(offsets, scrollTop);
@@ -13130,6 +13056,7 @@
13130
13056
  const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
13131
13057
  const isFocused = vue.shallowRef(false);
13132
13058
  let keyboardLookupPrefix = '';
13059
+ let keyboardLookupIndex = -1;
13133
13060
  let keyboardLookupLastTime;
13134
13061
  const displayItems = vue.computed(() => {
13135
13062
  if (props.hideSelected) {
@@ -13197,18 +13124,46 @@
13197
13124
  const now = performance.now();
13198
13125
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
13199
13126
  keyboardLookupPrefix = '';
13127
+ keyboardLookupIndex = -1;
13200
13128
  }
13201
13129
  keyboardLookupPrefix += e.key.toLowerCase();
13202
13130
  keyboardLookupLastTime = now;
13203
- const item = items.value.find(item => item.title.toLowerCase().startsWith(keyboardLookupPrefix));
13204
- if (item !== undefined) {
13205
- if (!props.multiple) {
13206
- model.value = [item];
13131
+ const items = displayItems.value;
13132
+ function findItem() {
13133
+ let result = findItemBase();
13134
+ if (result) return result;
13135
+ if (keyboardLookupPrefix.at(-1) === keyboardLookupPrefix.at(-2)) {
13136
+ // No matches but we have a repeated letter, try the next item with that prefix
13137
+ keyboardLookupPrefix = keyboardLookupPrefix.slice(0, -1);
13138
+ result = findItemBase();
13139
+ if (result) return result;
13207
13140
  }
13208
- const index = displayItems.value.indexOf(item);
13209
- if (~index && IN_BROWSER) {
13210
- listRef.value?.focus(index);
13141
+
13142
+ // Still nothing, wrap around to the top
13143
+ keyboardLookupIndex = -1;
13144
+ result = findItemBase();
13145
+ if (result) return result;
13146
+
13147
+ // Still nothing, try just the new letter
13148
+ keyboardLookupPrefix = e.key.toLowerCase();
13149
+ return findItemBase();
13150
+ }
13151
+ function findItemBase() {
13152
+ for (let i = keyboardLookupIndex + 1; i < items.length; i++) {
13153
+ const _item = items[i];
13154
+ if (_item.title.toLowerCase().startsWith(keyboardLookupPrefix)) {
13155
+ return [_item, i];
13156
+ }
13211
13157
  }
13158
+ return undefined;
13159
+ }
13160
+ const result = findItem();
13161
+ if (!result) return;
13162
+ const [item, index] = result;
13163
+ keyboardLookupIndex = index;
13164
+ listRef.value?.focus(index);
13165
+ if (!props.multiple) {
13166
+ model.value = [item];
13212
13167
  }
13213
13168
  }
13214
13169
 
@@ -13357,22 +13312,6 @@
13357
13312
  key: item.value,
13358
13313
  onClick: () => select(item, null)
13359
13314
  });
13360
- if (item.raw.type === 'divider') {
13361
- return slots.divider?.({
13362
- props: item.raw,
13363
- index
13364
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13365
- "key": `divider-${index}`
13366
- }), null);
13367
- }
13368
- if (item.raw.type === 'subheader') {
13369
- return slots.subheader?.({
13370
- props: item.raw,
13371
- index
13372
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
13373
- "key": `subheader-${index}`
13374
- }), null);
13375
- }
13376
13315
  return slots.item?.({
13377
13316
  item,
13378
13317
  index,
@@ -13533,9 +13472,6 @@
13533
13472
  let match = -1;
13534
13473
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13535
13474
  if (typeof item === 'object') {
13536
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13537
- continue;
13538
- }
13539
13475
  const filterKeys = keys || Object.keys(transformed);
13540
13476
  for (const key of filterKeys) {
13541
13477
  const value = getPropertyFromItem(transformed, key);
@@ -13974,22 +13910,6 @@
13974
13910
  active: highlightFirst.value && index === 0 ? true : undefined,
13975
13911
  onClick: () => select(item, null)
13976
13912
  });
13977
- if (item.raw.type === 'divider') {
13978
- return slots.divider?.({
13979
- props: item.raw,
13980
- index
13981
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
13982
- "key": `divider-${index}`
13983
- }), null);
13984
- }
13985
- if (item.raw.type === 'subheader') {
13986
- return slots.subheader?.({
13987
- props: item.raw,
13988
- index
13989
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
13990
- "key": `subheader-${index}`
13991
- }), null);
13992
- }
13993
13913
  return slots.item?.({
13994
13914
  item,
13995
13915
  index,
@@ -16287,7 +16207,7 @@
16287
16207
  const clickOffset = getPosition(e, position);
16288
16208
 
16289
16209
  // It is possible for left to be NaN, force to number
16290
- let clickPos = Math.min(Math.max((clickOffset - trackStart - startOffset.value) / trackLength, 0), 1) || 0;
16210
+ let clickPos = clamp((clickOffset - trackStart - startOffset.value) / trackLength) || 0;
16291
16211
  if (vertical ? indexFromEnd.value : indexFromEnd.value !== isRtl.value) clickPos = 1 - clickPos;
16292
16212
  return roundValue(min.value + clickPos * (max.value - min.value));
16293
16213
  }
@@ -17585,13 +17505,13 @@
17585
17505
  return null;
17586
17506
  }
17587
17507
  const sundayJanuarySecond2000 = new Date(2000, 0, 2);
17588
- function getWeekdays(locale, firstDayOfWeek, weekdayFormat) {
17508
+ function getWeekdays(locale, firstDayOfWeek) {
17589
17509
  const daysFromSunday = firstDayOfWeek ?? weekInfo(locale)?.firstDay ?? 0;
17590
17510
  return createRange(7).map(i => {
17591
17511
  const weekday = new Date(sundayJanuarySecond2000);
17592
17512
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
17593
17513
  return new Intl.DateTimeFormat(locale, {
17594
- weekday: weekdayFormat ?? 'narrow'
17514
+ weekday: 'narrow'
17595
17515
  }).format(weekday);
17596
17516
  });
17597
17517
  }
@@ -18055,9 +17975,9 @@
18055
17975
  getDiff(date, comparing, unit) {
18056
17976
  return getDiff(date, comparing, unit);
18057
17977
  }
18058
- getWeekdays(firstDayOfWeek, weekdayFormat) {
17978
+ getWeekdays(firstDayOfWeek) {
18059
17979
  const firstDay = firstDayOfWeek !== undefined ? Number(firstDayOfWeek) : undefined;
18060
- return getWeekdays(this.locale, firstDay, weekdayFormat);
17980
+ return getWeekdays(this.locale, firstDay);
18061
17981
  }
18062
17982
  getYear(date) {
18063
17983
  return getYear(date);
@@ -18400,7 +18320,6 @@
18400
18320
  _search.value = val ?? '';
18401
18321
  if (!props.multiple && !hasSelectionSlot.value) {
18402
18322
  model.value = [transformItem$3(props, val)];
18403
- vue.nextTick(() => vVirtualScrollRef.value?.scrollToIndex(0));
18404
18323
  }
18405
18324
  if (val && props.multiple && props.delimiters?.length) {
18406
18325
  const values = val.split(new RegExp(`(?:${props.delimiters.join('|')})+`));
@@ -18717,22 +18636,6 @@
18717
18636
  active: highlightFirst.value && index === 0 ? true : undefined,
18718
18637
  onClick: () => select(item, null)
18719
18638
  });
18720
- if (item.raw.type === 'divider') {
18721
- return slots.divider?.({
18722
- props: item.raw,
18723
- index
18724
- }) ?? vue.createVNode(VDivider, vue.mergeProps(item.props, {
18725
- "key": `divider-${index}`
18726
- }), null);
18727
- }
18728
- if (item.raw.type === 'subheader') {
18729
- return slots.subheader?.({
18730
- props: item.raw,
18731
- index
18732
- }) ?? vue.createVNode(VListSubheader, vue.mergeProps(item.props, {
18733
- "key": `subheader-${index}`
18734
- }), null);
18735
- }
18736
18639
  return slots.item?.({
18737
18640
  item,
18738
18641
  index,
@@ -22376,8 +22279,7 @@
22376
22279
  firstDayOfWeek: {
22377
22280
  type: [Number, String],
22378
22281
  default: undefined
22379
- },
22380
- weekdayFormat: String
22282
+ }
22381
22283
  }, 'calendar');
22382
22284
  function useCalendar(props) {
22383
22285
  const adapter = useDate();
@@ -22625,7 +22527,7 @@
22625
22527
  "ref": daysRef,
22626
22528
  "key": daysInMonth.value[0].date?.toString(),
22627
22529
  "class": "v-date-picker-month__days"
22628
- }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).map(weekDay => vue.createVNode("div", {
22530
+ }, [!props.hideWeekdays && adapter.getWeekdays(props.firstDayOfWeek).map(weekDay => vue.createVNode("div", {
22629
22531
  "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
22630
22532
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22631
22533
  const slotProps = {
@@ -24743,7 +24645,7 @@
24743
24645
  function getProgress(pos) {
24744
24646
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
24745
24647
  const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
24746
- return limit ? Math.max(0, Math.min(1, progress)) : progress;
24648
+ return limit ? clamp(progress) : progress;
24747
24649
  }
24748
24650
  function onTouchstart(e) {
24749
24651
  if (touchless.value) return;
@@ -25156,10 +25058,6 @@
25156
25058
  type: Number,
25157
25059
  default: 0
25158
25060
  },
25159
- minFractionDigits: {
25160
- type: Number,
25161
- default: null
25162
- },
25163
25061
  ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
25164
25062
  }, 'VNumberInput');
25165
25063
  const VNumberInput = genericComponent()({
@@ -25190,19 +25088,9 @@
25190
25088
  } = useFocus(props);
25191
25089
  function correctPrecision(val) {
25192
25090
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
25193
- if (precision == null) {
25194
- return String(val);
25195
- }
25196
- let fixed = val.toFixed(precision);
25197
- if (isFocused.value) {
25198
- return Number(fixed).toString(); // trim zeros
25199
- }
25200
- if ((props.minFractionDigits ?? precision) < precision) {
25201
- const trimLimit = precision - props.minFractionDigits;
25202
- const [baseDigits, fractionDigits] = fixed.split('.');
25203
- fixed = [baseDigits, fractionDigits.replace(new RegExp(`0{1,${trimLimit}}$`), '')].filter(Boolean).join('.');
25204
- }
25205
- return fixed;
25091
+ const fixed = precision == null ? String(val) : val.toFixed(precision);
25092
+ return isFocused.value ? Number(fixed).toString() // trim zeros
25093
+ : fixed;
25206
25094
  }
25207
25095
  const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
25208
25096
  const _inputText = vue.shallowRef(null);
@@ -25242,6 +25130,9 @@
25242
25130
  const controlNodeDefaultHeight = vue.toRef(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
25243
25131
  const incrementSlotProps = {
25244
25132
  props: {
25133
+ style: {
25134
+ touchAction: 'none'
25135
+ },
25245
25136
  onClick: onControlClick,
25246
25137
  onPointerup: onControlMouseup,
25247
25138
  onPointerdown: onUpControlMousedown
@@ -25249,13 +25140,15 @@
25249
25140
  };
25250
25141
  const decrementSlotProps = {
25251
25142
  props: {
25143
+ style: {
25144
+ touchAction: 'none'
25145
+ },
25252
25146
  onClick: onControlClick,
25253
25147
  onPointerup: onControlMouseup,
25254
25148
  onPointerdown: onDownControlMousedown
25255
25149
  }
25256
25150
  };
25257
25151
  vue.watch(() => props.precision, () => formatInputValue());
25258
- vue.watch(() => props.minFractionDigits, () => formatInputValue());
25259
25152
  vue.onMounted(() => {
25260
25153
  clampModel();
25261
25154
  });
@@ -25357,7 +25250,7 @@
25357
25250
  inputText.value = null;
25358
25251
  return;
25359
25252
  }
25360
- inputText.value = correctPrecision(model.value);
25253
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
25361
25254
  }
25362
25255
  function trimDecimalZeros() {
25363
25256
  if (controlsDisabled.value) return;
@@ -25382,17 +25275,18 @@
25382
25275
  } = VTextField.filterProps(props);
25383
25276
  function incrementControlNode() {
25384
25277
  return !slots.increment ? vue.createVNode(VBtn, {
25278
+ "aria-hidden": "true",
25279
+ "data-testid": "increment",
25385
25280
  "disabled": !canIncrease.value,
25386
25281
  "flat": true,
25387
- "key": "increment-btn",
25388
25282
  "height": controlNodeDefaultHeight.value,
25389
- "data-testid": "increment",
25390
- "aria-hidden": "true",
25391
25283
  "icon": incrementIcon.value,
25284
+ "key": "increment-btn",
25392
25285
  "onClick": onControlClick,
25393
- "onPointerup": onControlMouseup,
25394
25286
  "onPointerdown": onUpControlMousedown,
25287
+ "onPointerup": onControlMouseup,
25395
25288
  "size": controlNodeSize.value,
25289
+ "style": "touch-action: none",
25396
25290
  "tabindex": "-1"
25397
25291
  }, null) : vue.createVNode(VDefaultsProvider, {
25398
25292
  "key": "increment-defaults",
@@ -25411,18 +25305,19 @@
25411
25305
  }
25412
25306
  function decrementControlNode() {
25413
25307
  return !slots.decrement ? vue.createVNode(VBtn, {
25308
+ "aria-hidden": "true",
25309
+ "data-testid": "decrement",
25414
25310
  "disabled": !canDecrease.value,
25415
25311
  "flat": true,
25416
- "key": "decrement-btn",
25417
25312
  "height": controlNodeDefaultHeight.value,
25418
- "data-testid": "decrement",
25419
- "aria-hidden": "true",
25420
25313
  "icon": decrementIcon.value,
25421
- "size": controlNodeSize.value,
25422
- "tabindex": "-1",
25314
+ "key": "decrement-btn",
25423
25315
  "onClick": onControlClick,
25316
+ "onPointerdown": onDownControlMousedown,
25424
25317
  "onPointerup": onControlMouseup,
25425
- "onPointerdown": onDownControlMousedown
25318
+ "size": controlNodeSize.value,
25319
+ "style": "touch-action: none",
25320
+ "tabindex": "-1"
25426
25321
  }, null) : vue.createVNode(VDefaultsProvider, {
25427
25322
  "key": "decrement-defaults",
25428
25323
  "defaults": {
@@ -29399,7 +29294,7 @@
29399
29294
  };
29400
29295
  });
29401
29296
  }
29402
- const version$1 = "3.8.6-dev.2025-05-21";
29297
+ const version$1 = "3.8.6-master.2025-05-22";
29403
29298
  createVuetify$1.version = version$1;
29404
29299
 
29405
29300
  // Vue's inject() can only be used in setup
@@ -29424,7 +29319,7 @@
29424
29319
  ...options
29425
29320
  });
29426
29321
  };
29427
- const version = "3.8.6-dev.2025-05-21";
29322
+ const version = "3.8.6-master.2025-05-22";
29428
29323
  createVuetify.version = version;
29429
29324
 
29430
29325
  exports.blueprints = index;