@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
@@ -1,16 +1,15 @@
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
  */
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, createVNode, mergeProps, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, getCurrentScope, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, 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, createVNode, mergeProps, toValue, onBeforeUnmount, watch, readonly, onMounted, useId, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, toRefs, isRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
11
11
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
12
12
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
13
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
14
13
 
15
14
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
16
15
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -2782,7 +2781,6 @@ const makeThemeProps = propsFactory({
2782
2781
  function genDefaults$1() {
2783
2782
  return {
2784
2783
  defaultTheme: 'light',
2785
- prefix: 'v-',
2786
2784
  variations: {
2787
2785
  colors: [],
2788
2786
  lighten: 0,
@@ -2864,10 +2862,7 @@ function genDefaults$1() {
2864
2862
  }
2865
2863
  }
2866
2864
  },
2867
- stylesheetId: 'vuetify-theme-stylesheet',
2868
- scoped: false,
2869
- unimportant: false,
2870
- utilities: true
2865
+ stylesheetId: 'vuetify-theme-stylesheet'
2871
2866
  };
2872
2867
  }
2873
2868
  function parseThemeOptions() {
@@ -2890,21 +2885,21 @@ function parseThemeOptions() {
2890
2885
  function createCssClass(lines, selector, content, scope) {
2891
2886
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2892
2887
  }
2893
- function genCssVariables(theme, prefix) {
2888
+ function genCssVariables(theme) {
2894
2889
  const lightOverlay = theme.dark ? 2 : 1;
2895
2890
  const darkOverlay = theme.dark ? 1 : 2;
2896
2891
  const variables = [];
2897
2892
  for (const [key, value] of Object.entries(theme.colors)) {
2898
2893
  const rgb = parseColor(value);
2899
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2894
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2900
2895
  if (!key.startsWith('on-')) {
2901
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2896
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2902
2897
  }
2903
2898
  }
2904
2899
  for (const [key, value] of Object.entries(theme.variables)) {
2905
2900
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2906
2901
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2907
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2902
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2908
2903
  }
2909
2904
  return variables;
2910
2905
  }
@@ -2948,8 +2943,7 @@ function getScopedSelector(selector, scope) {
2948
2943
  const scopeSelector = `:where(${scope})`;
2949
2944
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2950
2945
  }
2951
- function upsertStyles(id, cspNonce, styles) {
2952
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2946
+ function upsertStyles(styleEl, styles) {
2953
2947
  if (!styleEl) return;
2954
2948
  styleEl.innerHTML = styles;
2955
2949
  }
@@ -2969,17 +2963,8 @@ function getOrCreateStyleElement(id, cspNonce) {
2969
2963
  // Composables
2970
2964
  function createTheme(options) {
2971
2965
  const parsedOptions = parseThemeOptions(options);
2972
- const _name = shallowRef(parsedOptions.defaultTheme);
2966
+ const name = shallowRef(parsedOptions.defaultTheme);
2973
2967
  const themes = ref(parsedOptions.themes);
2974
- const systemName = shallowRef('light');
2975
- const name = computed({
2976
- get() {
2977
- return _name.value === 'system' ? systemName.value : _name.value;
2978
- },
2979
- set(val) {
2980
- _name.value = val;
2981
- }
2982
- });
2983
2968
  const computedThemes = computed(() => {
2984
2969
  const acc = {};
2985
2970
  for (const [name, original] of Object.entries(themes.value)) {
@@ -3000,49 +2985,28 @@ function createTheme(options) {
3000
2985
  const current = toRef(() => computedThemes.value[name.value]);
3001
2986
  const styles = computed(() => {
3002
2987
  const lines = [];
3003
- const important = parsedOptions.unimportant ? '' : ' !important';
3004
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
3005
2988
  if (current.value?.dark) {
3006
2989
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
3007
2990
  }
3008
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2991
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
3009
2992
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
3010
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
3011
- }
3012
- if (parsedOptions.utilities) {
3013
- const bgLines = [];
3014
- const fgLines = [];
3015
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
3016
- for (const key of colors) {
3017
- if (key.startsWith('on-')) {
3018
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3019
- } else {
3020
- 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);
3021
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
3022
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
3023
- }
2993
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2994
+ }
2995
+ const bgLines = [];
2996
+ const fgLines = [];
2997
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2998
+ for (const key of colors) {
2999
+ if (key.startsWith('on-')) {
3000
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3001
+ } else {
3002
+ 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);
3003
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
3004
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
3024
3005
  }
3025
- lines.push(...bgLines, ...fgLines);
3026
3006
  }
3007
+ lines.push(...bgLines, ...fgLines);
3027
3008
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
3028
3009
  });
3029
- const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
3030
- const themeNames = toRef(() => Object.keys(computedThemes.value));
3031
- if (SUPPORTS_MATCH_MEDIA) {
3032
- const media = window.matchMedia('(prefers-color-scheme: dark)');
3033
- function updateSystemName() {
3034
- systemName.value = media.matches ? 'dark' : 'light';
3035
- }
3036
- updateSystemName();
3037
- media.addEventListener('change', updateSystemName, {
3038
- passive: true
3039
- });
3040
- if (getCurrentScope()) {
3041
- onScopeDispose(() => {
3042
- media.removeEventListener('change', updateSystemName);
3043
- });
3044
- }
3045
- }
3046
3010
  function install(app) {
3047
3011
  if (parsedOptions.isDisabled) return;
3048
3012
  const head = app._context.provides.usehead;
@@ -3080,55 +3044,22 @@ function createTheme(options) {
3080
3044
  updateStyles();
3081
3045
  }
3082
3046
  function updateStyles() {
3083
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
3047
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
3084
3048
  }
3085
3049
  }
3086
3050
  }
3087
- function change(themeName) {
3088
- if (!themeNames.value.includes(themeName)) {
3089
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
3090
- return;
3091
- }
3092
- name.value = themeName;
3093
- }
3094
- function cycle() {
3095
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
3096
- const currentIndex = themeArray.indexOf(name.value);
3097
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
3098
- change(themeArray[nextIndex]);
3099
- }
3100
- function toggle() {
3101
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
3102
- cycle(themeArray);
3103
- }
3104
- const globalName = new Proxy(name, {
3105
- get(target, prop) {
3106
- return target[prop];
3107
- },
3108
- set(target, prop, val) {
3109
- if (prop === 'value') {
3110
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
3111
- }
3112
- // @ts-expect-error
3113
- target[prop] = val;
3114
- return true;
3115
- }
3116
- });
3051
+ const themeClasses = toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
3117
3052
  return {
3118
3053
  install,
3119
- change,
3120
- cycle,
3121
- toggle,
3122
3054
  isDisabled: parsedOptions.isDisabled,
3123
3055
  name,
3124
3056
  themes,
3125
3057
  current,
3126
3058
  computedThemes,
3127
- prefix: parsedOptions.prefix,
3128
3059
  themeClasses,
3129
3060
  styles,
3130
3061
  global: {
3131
- name: globalName,
3062
+ name,
3132
3063
  current
3133
3064
  }
3134
3065
  };
@@ -3139,7 +3070,7 @@ function provideTheme(props) {
3139
3070
  if (!theme) throw new Error('Could not find Vuetify theme injection');
3140
3071
  const name = toRef(() => props.theme ?? theme.name.value);
3141
3072
  const current = toRef(() => theme.themes.value[name.value]);
3142
- const themeClasses = toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
3073
+ const themeClasses = toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
3143
3074
  const newTheme = {
3144
3075
  ...theme,
3145
3076
  name,
@@ -4686,15 +4617,9 @@ function useVariant(props) {
4686
4617
  };
4687
4618
  }
4688
4619
 
4689
- // Types
4690
-
4691
4620
  const makeVBtnGroupProps = propsFactory({
4692
4621
  baseColor: String,
4693
4622
  divided: Boolean,
4694
- direction: {
4695
- type: String,
4696
- default: 'horizontal'
4697
- },
4698
4623
  ...makeBorderProps(),
4699
4624
  ...makeComponentProps(),
4700
4625
  ...makeDensityProps(),
@@ -4728,7 +4653,7 @@ const VBtnGroup = genericComponent()({
4728
4653
  } = useRounded(props);
4729
4654
  provideDefaults({
4730
4655
  VBtn: {
4731
- height: toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4656
+ height: 'auto',
4732
4657
  baseColor: toRef(() => props.baseColor),
4733
4658
  color: toRef(() => props.color),
4734
4659
  density: toRef(() => props.density),
@@ -4738,7 +4663,7 @@ const VBtnGroup = genericComponent()({
4738
4663
  });
4739
4664
  useRender(() => {
4740
4665
  return createVNode(props.tag, {
4741
- "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4666
+ "class": ['v-btn-group', {
4742
4667
  'v-btn-group--divided': props.divided
4743
4668
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4744
4669
  "style": props.style
@@ -12705,12 +12630,7 @@ function useVirtual(props, items) {
12705
12630
  }
12706
12631
  function calculateOffset(index) {
12707
12632
  index = clamp(index, 0, items.value.length - 1);
12708
- const whole = Math.floor(index);
12709
- const fraction = index % 1;
12710
- const next = whole + 1;
12711
- const wholeOffset = offsets[whole] || 0;
12712
- const nextOffset = offsets[next] || wholeOffset;
12713
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12633
+ return offsets[index] || 0;
12714
12634
  }
12715
12635
  function calculateIndex(scrollTop) {
12716
12636
  return binaryClosest(offsets, scrollTop);
@@ -29318,7 +29238,7 @@ function createVuetify$1() {
29318
29238
  };
29319
29239
  });
29320
29240
  }
29321
- const version$1 = "3.8.4-dev.2025-05-07";
29241
+ const version$1 = "3.8.4-master.2025-05-07";
29322
29242
  createVuetify$1.version = version$1;
29323
29243
 
29324
29244
  // Vue's inject() can only be used in setup
@@ -29343,7 +29263,7 @@ const createVuetify = function () {
29343
29263
  ...options
29344
29264
  });
29345
29265
  };
29346
- const version = "3.8.4-dev.2025-05-07";
29266
+ const version = "3.8.4-master.2025-05-07";
29347
29267
  createVuetify.version = version;
29348
29268
 
29349
29269
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };