@vuetify/nightly 3.8.5-dev.2025-05-14 → 3.8.5-master.2025-05-14

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 (75) hide show
  1. package/CHANGELOG.md +3 -23
  2. package/dist/json/attributes.json +3505 -3521
  3. package/dist/json/importMap-labs.json +12 -12
  4. package/dist/json/importMap.json +142 -142
  5. package/dist/json/tags.json +0 -4
  6. package/dist/json/web-types.json +6607 -6646
  7. package/dist/vuetify-labs.cjs +51 -155
  8. package/dist/vuetify-labs.css +3358 -3386
  9. package/dist/vuetify-labs.d.ts +934 -986
  10. package/dist/vuetify-labs.esm.js +52 -156
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +51 -155
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +40 -149
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4193 -4221
  17. package/dist/vuetify.d.ts +490 -544
  18. package/dist/vuetify.esm.js +41 -150
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +40 -149
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1173 -1181
  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 +94 -94
  31. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  32. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  33. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  34. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  35. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  36. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  37. package/lib/components/VCheckbox/VCheckbox.d.ts +3 -3
  38. package/lib/components/VCombobox/VCombobox.d.ts +94 -94
  39. package/lib/components/VField/VField.d.ts +3 -3
  40. package/lib/components/VFileInput/VFileInput.d.ts +15 -15
  41. package/lib/components/VInput/VInput.d.ts +4 -4
  42. package/lib/components/VNumberInput/VNumberInput.d.ts +89 -89
  43. package/lib/components/VOverlay/VOverlay.css +1 -1
  44. package/lib/components/VOverlay/_variables.scss +1 -1
  45. package/lib/components/VRadioGroup/VRadioGroup.d.ts +3 -3
  46. package/lib/components/VRangeSlider/VRangeSlider.d.ts +3 -3
  47. package/lib/components/VSelect/VSelect.d.ts +94 -94
  48. package/lib/components/VSlider/VSlider.d.ts +3 -3
  49. package/lib/components/VSwitch/VSwitch.d.ts +3 -3
  50. package/lib/components/VTextField/VTextField.d.ts +27 -27
  51. package/lib/components/VTextarea/VTextarea.d.ts +15 -15
  52. package/lib/composables/calendar.d.ts +0 -1
  53. package/lib/composables/calendar.js.map +1 -1
  54. package/lib/composables/theme.d.ts +1 -6
  55. package/lib/composables/theme.js +26 -94
  56. package/lib/composables/theme.js.map +1 -1
  57. package/lib/composables/virtual.js +1 -6
  58. package/lib/composables/virtual.js.map +1 -1
  59. package/lib/entry-bundler.js +1 -1
  60. package/lib/entry-bundler.js.map +1 -1
  61. package/lib/framework.d.ts +46 -51
  62. package/lib/framework.js +1 -1
  63. package/lib/framework.js.map +1 -1
  64. package/lib/labs/VColorInput/VColorInput.d.ts +3 -3
  65. package/lib/labs/VDateInput/VDateInput.d.ts +87 -87
  66. package/lib/labs/VIconBtn/VIconBtn.d.ts +29 -29
  67. package/lib/labs/VIconBtn/VIconBtn.js +11 -7
  68. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  69. package/lib/util/globals.d.ts +0 -1
  70. package/lib/util/globals.js +0 -1
  71. package/lib/util/globals.js.map +1 -1
  72. package/package.json +1 -2
  73. package/lib/composables/iconSizes.d.ts +0 -28
  74. package/lib/composables/iconSizes.js +0 -23
  75. package/lib/composables/iconSizes.js.map +0 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.5-dev.2025-05-14
2
+ * Vuetify v3.8.5-master.2025-05-14
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"); }
@@ -2787,7 +2786,6 @@
2787
2786
  function genDefaults$1() {
2788
2787
  return {
2789
2788
  defaultTheme: 'light',
2790
- prefix: 'v-',
2791
2789
  variations: {
2792
2790
  colors: [],
2793
2791
  lighten: 0,
@@ -2869,10 +2867,7 @@
2869
2867
  }
2870
2868
  }
2871
2869
  },
2872
- stylesheetId: 'vuetify-theme-stylesheet',
2873
- scoped: false,
2874
- unimportant: false,
2875
- utilities: true
2870
+ stylesheetId: 'vuetify-theme-stylesheet'
2876
2871
  };
2877
2872
  }
2878
2873
  function parseThemeOptions() {
@@ -2895,21 +2890,21 @@
2895
2890
  function createCssClass(lines, selector, content, scope) {
2896
2891
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2897
2892
  }
2898
- function genCssVariables(theme, prefix) {
2893
+ function genCssVariables(theme) {
2899
2894
  const lightOverlay = theme.dark ? 2 : 1;
2900
2895
  const darkOverlay = theme.dark ? 1 : 2;
2901
2896
  const variables = [];
2902
2897
  for (const [key, value] of Object.entries(theme.colors)) {
2903
2898
  const rgb = parseColor(value);
2904
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2899
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2905
2900
  if (!key.startsWith('on-')) {
2906
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2901
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2907
2902
  }
2908
2903
  }
2909
2904
  for (const [key, value] of Object.entries(theme.variables)) {
2910
2905
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2911
2906
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2912
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2907
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2913
2908
  }
2914
2909
  return variables;
2915
2910
  }
@@ -2953,8 +2948,7 @@
2953
2948
  const scopeSelector = `:where(${scope})`;
2954
2949
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2955
2950
  }
2956
- function upsertStyles(id, cspNonce, styles) {
2957
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2951
+ function upsertStyles(styleEl, styles) {
2958
2952
  if (!styleEl) return;
2959
2953
  styleEl.innerHTML = styles;
2960
2954
  }
@@ -2974,17 +2968,8 @@
2974
2968
  // Composables
2975
2969
  function createTheme(options) {
2976
2970
  const parsedOptions = parseThemeOptions(options);
2977
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
2971
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
2978
2972
  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
2973
  const computedThemes = vue.computed(() => {
2989
2974
  const acc = {};
2990
2975
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3005,49 +2990,28 @@
3005
2990
  const current = vue.toRef(() => computedThemes.value[name.value]);
3006
2991
  const styles = vue.computed(() => {
3007
2992
  const lines = [];
3008
- const important = parsedOptions.unimportant ? '' : ' !important';
3009
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3010
2993
  if (current.value?.dark) {
3011
2994
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3012
2995
  }
3013
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2996
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3014
2997
  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
- }
2998
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2999
+ }
3000
+ const bgLines = [];
3001
+ const fgLines = [];
3002
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3003
+ for (const key of colors) {
3004
+ if (key.startsWith('on-')) {
3005
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3006
+ } else {
3007
+ 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);
3008
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3009
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3029
3010
  }
3030
- lines.push(...bgLines, ...fgLines);
3031
3011
  }
3012
+ lines.push(...bgLines, ...fgLines);
3032
3013
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3033
3014
  });
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
3015
  function install(app) {
3052
3016
  if (parsedOptions.isDisabled) return;
3053
3017
  const head = app._context.provides.usehead;
@@ -3085,55 +3049,22 @@
3085
3049
  updateStyles();
3086
3050
  }
3087
3051
  function updateStyles() {
3088
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3052
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3089
3053
  }
3090
3054
  }
3091
3055
  }
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
- });
3056
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3122
3057
  return {
3123
3058
  install,
3124
- change,
3125
- cycle,
3126
- toggle,
3127
3059
  isDisabled: parsedOptions.isDisabled,
3128
3060
  name,
3129
3061
  themes,
3130
3062
  current,
3131
3063
  computedThemes,
3132
- prefix: parsedOptions.prefix,
3133
3064
  themeClasses,
3134
3065
  styles,
3135
3066
  global: {
3136
- name: globalName,
3067
+ name,
3137
3068
  current
3138
3069
  }
3139
3070
  };
@@ -3144,7 +3075,7 @@
3144
3075
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3145
3076
  const name = vue.toRef(() => props.theme ?? theme.name.value);
3146
3077
  const current = vue.toRef(() => theme.themes.value[name.value]);
3147
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3078
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3148
3079
  const newTheme = {
3149
3080
  ...theme,
3150
3081
  name,
@@ -4691,15 +4622,9 @@
4691
4622
  };
4692
4623
  }
4693
4624
 
4694
- // Types
4695
-
4696
4625
  const makeVBtnGroupProps = propsFactory({
4697
4626
  baseColor: String,
4698
4627
  divided: Boolean,
4699
- direction: {
4700
- type: String,
4701
- default: 'horizontal'
4702
- },
4703
4628
  ...makeBorderProps(),
4704
4629
  ...makeComponentProps(),
4705
4630
  ...makeDensityProps(),
@@ -4733,7 +4658,7 @@
4733
4658
  } = useRounded(props);
4734
4659
  provideDefaults({
4735
4660
  VBtn: {
4736
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4661
+ height: 'auto',
4737
4662
  baseColor: vue.toRef(() => props.baseColor),
4738
4663
  color: vue.toRef(() => props.color),
4739
4664
  density: vue.toRef(() => props.density),
@@ -4743,7 +4668,7 @@
4743
4668
  });
4744
4669
  useRender(() => {
4745
4670
  return vue.createVNode(props.tag, {
4746
- "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4671
+ "class": ['v-btn-group', {
4747
4672
  'v-btn-group--divided': props.divided
4748
4673
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4749
4674
  "style": props.style
@@ -6222,31 +6147,6 @@
6222
6147
  // Utilities
6223
6148
  const VAlertTitle = createSimpleFunctional('v-alert-title');
6224
6149
 
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
6150
  // Types
6251
6151
 
6252
6152
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -6286,7 +6186,6 @@
6286
6186
  ...makeDensityProps(),
6287
6187
  ...makeDimensionProps(),
6288
6188
  ...makeElevationProps(),
6289
- ...makeIconSizeProps(),
6290
6189
  ...makeLocationProps(),
6291
6190
  ...makePositionProps(),
6292
6191
  ...makeRoundedProps(),
@@ -6314,9 +6213,6 @@
6314
6213
  if (!props.type) return props.icon;
6315
6214
  return props.icon ?? `$${props.type}`;
6316
6215
  });
6317
- const {
6318
- iconSize
6319
- } = useIconSizes(props, () => props.prominent ? 44 : 28);
6320
6216
  const {
6321
6217
  themeClasses
6322
6218
  } = provideTheme(props);
@@ -6364,11 +6260,6 @@
6364
6260
  const hasPrepend = !!(slots.prepend || icon.value);
6365
6261
  const hasTitle = !!(slots.title || props.title);
6366
6262
  const hasClose = !!(slots.close || props.closable);
6367
- const iconProps = {
6368
- density: props.density,
6369
- icon: icon.value,
6370
- size: iconSize.value
6371
- };
6372
6263
  return isActive.value && vue.createVNode(props.tag, {
6373
6264
  "class": ['v-alert', props.border && {
6374
6265
  'v-alert--border': !!props.border,
@@ -6386,14 +6277,19 @@
6386
6277
  }, null), hasPrepend && vue.createVNode("div", {
6387
6278
  "key": "prepend",
6388
6279
  "class": "v-alert__prepend"
6389
- }, [!slots.prepend ? vue.createVNode(VIcon, vue.mergeProps({
6390
- "key": "prepend-icon"
6391
- }, iconProps), null) : vue.createVNode(VDefaultsProvider, {
6280
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
6281
+ "key": "prepend-icon",
6282
+ "density": props.density,
6283
+ "icon": icon.value,
6284
+ "size": props.prominent ? 44 : 28
6285
+ }, null) : vue.createVNode(VDefaultsProvider, {
6392
6286
  "key": "prepend-defaults",
6393
6287
  "disabled": !icon.value,
6394
6288
  "defaults": {
6395
6289
  VIcon: {
6396
- ...iconProps
6290
+ density: props.density,
6291
+ icon: icon.value,
6292
+ size: props.prominent ? 44 : 28
6397
6293
  }
6398
6294
  }
6399
6295
  }, slots.prepend)]), vue.createVNode("div", {
@@ -12739,12 +12635,7 @@
12739
12635
  }
12740
12636
  function calculateOffset(index) {
12741
12637
  index = clamp(index, 0, items.value.length - 1);
12742
- const whole = Math.floor(index);
12743
- const fraction = index % 1;
12744
- const next = whole + 1;
12745
- const wholeOffset = offsets[whole] || 0;
12746
- const nextOffset = offsets[next] || wholeOffset;
12747
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12638
+ return offsets[index] || 0;
12748
12639
  }
12749
12640
  function calculateIndex(scrollTop) {
12750
12641
  return binaryClosest(offsets, scrollTop);
@@ -29347,7 +29238,7 @@
29347
29238
  };
29348
29239
  });
29349
29240
  }
29350
- const version$1 = "3.8.5-dev.2025-05-14";
29241
+ const version$1 = "3.8.5-master.2025-05-14";
29351
29242
  createVuetify$1.version = version$1;
29352
29243
 
29353
29244
  // Vue's inject() can only be used in setup
@@ -29372,7 +29263,7 @@
29372
29263
  ...options
29373
29264
  });
29374
29265
  };
29375
- const version = "3.8.5-dev.2025-05-14";
29266
+ const version = "3.8.5-master.2025-05-14";
29376
29267
  createVuetify.version = version;
29377
29268
 
29378
29269
  exports.blueprints = index;