@vuetify/nightly 3.8.4-dev.2025-05-07 → 3.8.4-master.2025-05-07

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 (49) hide show
  1. package/CHANGELOG.md +3 -20
  2. package/dist/json/attributes.json +2498 -2506
  3. package/dist/json/importMap-labs.json +28 -28
  4. package/dist/json/importMap.json +138 -138
  5. package/dist/json/tags.json +0 -2
  6. package/dist/json/web-types.json +4444 -4464
  7. package/dist/vuetify-labs.cjs +31 -111
  8. package/dist/vuetify-labs.css +5389 -5412
  9. package/dist/vuetify-labs.d.ts +60 -93
  10. package/dist/vuetify-labs.esm.js +32 -112
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +31 -111
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +31 -111
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +5755 -5778
  17. package/dist/vuetify.d.ts +60 -93
  18. package/dist/vuetify.esm.js +32 -112
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +31 -111
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1172 -1178
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  26. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  27. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  28. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  29. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  30. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  31. package/lib/components/VInput/VInput.d.ts +1 -1
  32. package/lib/components/VOverlay/VOverlay.css +1 -1
  33. package/lib/components/VOverlay/_variables.scss +1 -1
  34. package/lib/composables/calendar.d.ts +0 -1
  35. package/lib/composables/calendar.js.map +1 -1
  36. package/lib/composables/theme.d.ts +1 -6
  37. package/lib/composables/theme.js +26 -94
  38. package/lib/composables/theme.js.map +1 -1
  39. package/lib/composables/virtual.js +1 -6
  40. package/lib/composables/virtual.js.map +1 -1
  41. package/lib/entry-bundler.js +1 -1
  42. package/lib/entry-bundler.js.map +1 -1
  43. package/lib/framework.d.ts +50 -55
  44. package/lib/framework.js +1 -1
  45. package/lib/framework.js.map +1 -1
  46. package/lib/util/globals.d.ts +0 -1
  47. package/lib/util/globals.js +0 -1
  48. package/lib/util/globals.js.map +1 -1
  49. package/package.json +1 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.4-dev.2025-05-07
2
+ * Vuetify v3.8.4-master.2025-05-07
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"); }
@@ -2786,7 +2785,6 @@
2786
2785
  function genDefaults$1() {
2787
2786
  return {
2788
2787
  defaultTheme: 'light',
2789
- prefix: 'v-',
2790
2788
  variations: {
2791
2789
  colors: [],
2792
2790
  lighten: 0,
@@ -2868,10 +2866,7 @@
2868
2866
  }
2869
2867
  }
2870
2868
  },
2871
- stylesheetId: 'vuetify-theme-stylesheet',
2872
- scoped: false,
2873
- unimportant: false,
2874
- utilities: true
2869
+ stylesheetId: 'vuetify-theme-stylesheet'
2875
2870
  };
2876
2871
  }
2877
2872
  function parseThemeOptions() {
@@ -2894,21 +2889,21 @@
2894
2889
  function createCssClass(lines, selector, content, scope) {
2895
2890
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2896
2891
  }
2897
- function genCssVariables(theme, prefix) {
2892
+ function genCssVariables(theme) {
2898
2893
  const lightOverlay = theme.dark ? 2 : 1;
2899
2894
  const darkOverlay = theme.dark ? 1 : 2;
2900
2895
  const variables = [];
2901
2896
  for (const [key, value] of Object.entries(theme.colors)) {
2902
2897
  const rgb = parseColor(value);
2903
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2898
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2904
2899
  if (!key.startsWith('on-')) {
2905
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2900
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2906
2901
  }
2907
2902
  }
2908
2903
  for (const [key, value] of Object.entries(theme.variables)) {
2909
2904
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2910
2905
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2911
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2906
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2912
2907
  }
2913
2908
  return variables;
2914
2909
  }
@@ -2952,8 +2947,7 @@
2952
2947
  const scopeSelector = `:where(${scope})`;
2953
2948
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2954
2949
  }
2955
- function upsertStyles(id, cspNonce, styles) {
2956
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2950
+ function upsertStyles(styleEl, styles) {
2957
2951
  if (!styleEl) return;
2958
2952
  styleEl.innerHTML = styles;
2959
2953
  }
@@ -2973,17 +2967,8 @@
2973
2967
  // Composables
2974
2968
  function createTheme(options) {
2975
2969
  const parsedOptions = parseThemeOptions(options);
2976
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
2970
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
2977
2971
  const themes = vue.ref(parsedOptions.themes);
2978
- const systemName = vue.shallowRef('light');
2979
- const name = vue.computed({
2980
- get() {
2981
- return _name.value === 'system' ? systemName.value : _name.value;
2982
- },
2983
- set(val) {
2984
- _name.value = val;
2985
- }
2986
- });
2987
2972
  const computedThemes = vue.computed(() => {
2988
2973
  const acc = {};
2989
2974
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3004,49 +2989,28 @@
3004
2989
  const current = vue.toRef(() => computedThemes.value[name.value]);
3005
2990
  const styles = vue.computed(() => {
3006
2991
  const lines = [];
3007
- const important = parsedOptions.unimportant ? '' : ' !important';
3008
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3009
2992
  if (current.value?.dark) {
3010
2993
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3011
2994
  }
3012
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2995
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3013
2996
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
3014
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3015
- }
3016
- if (parsedOptions.utilities) {
3017
- const bgLines = [];
3018
- const fgLines = [];
3019
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3020
- for (const key of colors) {
3021
- if (key.startsWith('on-')) {
3022
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3023
- } else {
3024
- 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);
3025
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3026
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3027
- }
2997
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2998
+ }
2999
+ const bgLines = [];
3000
+ const fgLines = [];
3001
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3002
+ for (const key of colors) {
3003
+ if (key.startsWith('on-')) {
3004
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3005
+ } else {
3006
+ 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);
3007
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3008
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3028
3009
  }
3029
- lines.push(...bgLines, ...fgLines);
3030
3010
  }
3011
+ lines.push(...bgLines, ...fgLines);
3031
3012
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3032
3013
  });
3033
- const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3034
- const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
3035
- if (SUPPORTS_MATCH_MEDIA) {
3036
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3037
- function updateSystemName() {
3038
- systemName.value = media.matches ? 'dark' : 'light';
3039
- }
3040
- updateSystemName();
3041
- media.addEventListener('change', updateSystemName, {
3042
- passive: true
3043
- });
3044
- if (vue.getCurrentScope()) {
3045
- vue.onScopeDispose(() => {
3046
- media.removeEventListener('change', updateSystemName);
3047
- });
3048
- }
3049
- }
3050
3014
  function install(app) {
3051
3015
  if (parsedOptions.isDisabled) return;
3052
3016
  const head = app._context.provides.usehead;
@@ -3084,55 +3048,22 @@
3084
3048
  updateStyles();
3085
3049
  }
3086
3050
  function updateStyles() {
3087
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3051
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3088
3052
  }
3089
3053
  }
3090
3054
  }
3091
- function change(themeName) {
3092
- if (!themeNames.value.includes(themeName)) {
3093
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3094
- return;
3095
- }
3096
- name.value = themeName;
3097
- }
3098
- function cycle() {
3099
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3100
- const currentIndex = themeArray.indexOf(name.value);
3101
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3102
- change(themeArray[nextIndex]);
3103
- }
3104
- function toggle() {
3105
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3106
- cycle(themeArray);
3107
- }
3108
- const globalName = new Proxy(name, {
3109
- get(target, prop) {
3110
- return target[prop];
3111
- },
3112
- set(target, prop, val) {
3113
- if (prop === 'value') {
3114
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3115
- }
3116
- // @ts-expect-error
3117
- target[prop] = val;
3118
- return true;
3119
- }
3120
- });
3055
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3121
3056
  return {
3122
3057
  install,
3123
- change,
3124
- cycle,
3125
- toggle,
3126
3058
  isDisabled: parsedOptions.isDisabled,
3127
3059
  name,
3128
3060
  themes,
3129
3061
  current,
3130
3062
  computedThemes,
3131
- prefix: parsedOptions.prefix,
3132
3063
  themeClasses,
3133
3064
  styles,
3134
3065
  global: {
3135
- name: globalName,
3066
+ name,
3136
3067
  current
3137
3068
  }
3138
3069
  };
@@ -3143,7 +3074,7 @@
3143
3074
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3144
3075
  const name = vue.toRef(() => props.theme ?? theme.name.value);
3145
3076
  const current = vue.toRef(() => theme.themes.value[name.value]);
3146
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3077
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3147
3078
  const newTheme = {
3148
3079
  ...theme,
3149
3080
  name,
@@ -4690,15 +4621,9 @@
4690
4621
  };
4691
4622
  }
4692
4623
 
4693
- // Types
4694
-
4695
4624
  const makeVBtnGroupProps = propsFactory({
4696
4625
  baseColor: String,
4697
4626
  divided: Boolean,
4698
- direction: {
4699
- type: String,
4700
- default: 'horizontal'
4701
- },
4702
4627
  ...makeBorderProps(),
4703
4628
  ...makeComponentProps(),
4704
4629
  ...makeDensityProps(),
@@ -4732,7 +4657,7 @@
4732
4657
  } = useRounded(props);
4733
4658
  provideDefaults({
4734
4659
  VBtn: {
4735
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4660
+ height: 'auto',
4736
4661
  baseColor: vue.toRef(() => props.baseColor),
4737
4662
  color: vue.toRef(() => props.color),
4738
4663
  density: vue.toRef(() => props.density),
@@ -4742,7 +4667,7 @@
4742
4667
  });
4743
4668
  useRender(() => {
4744
4669
  return vue.createVNode(props.tag, {
4745
- "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4670
+ "class": ['v-btn-group', {
4746
4671
  'v-btn-group--divided': props.divided
4747
4672
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4748
4673
  "style": props.style
@@ -12709,12 +12634,7 @@
12709
12634
  }
12710
12635
  function calculateOffset(index) {
12711
12636
  index = clamp(index, 0, items.value.length - 1);
12712
- const whole = Math.floor(index);
12713
- const fraction = index % 1;
12714
- const next = whole + 1;
12715
- const wholeOffset = offsets[whole] || 0;
12716
- const nextOffset = offsets[next] || wholeOffset;
12717
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12637
+ return offsets[index] || 0;
12718
12638
  }
12719
12639
  function calculateIndex(scrollTop) {
12720
12640
  return binaryClosest(offsets, scrollTop);
@@ -29322,7 +29242,7 @@
29322
29242
  };
29323
29243
  });
29324
29244
  }
29325
- const version$1 = "3.8.4-dev.2025-05-07";
29245
+ const version$1 = "3.8.4-master.2025-05-07";
29326
29246
  createVuetify$1.version = version$1;
29327
29247
 
29328
29248
  // Vue's inject() can only be used in setup
@@ -29347,7 +29267,7 @@
29347
29267
  ...options
29348
29268
  });
29349
29269
  };
29350
- const version = "3.8.4-dev.2025-05-07";
29270
+ const version = "3.8.4-master.2025-05-07";
29351
29271
  createVuetify.version = version;
29352
29272
 
29353
29273
  exports.blueprints = index;