@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,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
  */
@@ -85,7 +85,6 @@
85
85
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
86
86
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
87
87
  const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
88
- const SUPPORTS_MATCH_MEDIA = IN_BROWSER && 'matchMedia' in window && typeof window.matchMedia === 'function';
89
88
 
90
89
  function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
91
90
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
@@ -2300,7 +2299,6 @@
2300
2299
  function genDefaults$2() {
2301
2300
  return {
2302
2301
  defaultTheme: 'light',
2303
- prefix: 'v-',
2304
2302
  variations: {
2305
2303
  colors: [],
2306
2304
  lighten: 0,
@@ -2382,10 +2380,7 @@
2382
2380
  }
2383
2381
  }
2384
2382
  },
2385
- stylesheetId: 'vuetify-theme-stylesheet',
2386
- scoped: false,
2387
- unimportant: false,
2388
- utilities: true
2383
+ stylesheetId: 'vuetify-theme-stylesheet'
2389
2384
  };
2390
2385
  }
2391
2386
  function parseThemeOptions() {
@@ -2408,21 +2403,21 @@
2408
2403
  function createCssClass(lines, selector, content, scope) {
2409
2404
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2410
2405
  }
2411
- function genCssVariables(theme, prefix) {
2406
+ function genCssVariables(theme) {
2412
2407
  const lightOverlay = theme.dark ? 2 : 1;
2413
2408
  const darkOverlay = theme.dark ? 1 : 2;
2414
2409
  const variables = [];
2415
2410
  for (const [key, value] of Object.entries(theme.colors)) {
2416
2411
  const rgb = parseColor(value);
2417
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2412
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2418
2413
  if (!key.startsWith('on-')) {
2419
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2414
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2420
2415
  }
2421
2416
  }
2422
2417
  for (const [key, value] of Object.entries(theme.variables)) {
2423
2418
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2424
2419
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2425
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2420
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2426
2421
  }
2427
2422
  return variables;
2428
2423
  }
@@ -2466,8 +2461,7 @@
2466
2461
  const scopeSelector = `:where(${scope})`;
2467
2462
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2468
2463
  }
2469
- function upsertStyles(id, cspNonce, styles) {
2470
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2464
+ function upsertStyles(styleEl, styles) {
2471
2465
  if (!styleEl) return;
2472
2466
  styleEl.innerHTML = styles;
2473
2467
  }
@@ -2487,17 +2481,8 @@
2487
2481
  // Composables
2488
2482
  function createTheme(options) {
2489
2483
  const parsedOptions = parseThemeOptions(options);
2490
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
2484
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
2491
2485
  const themes = vue.ref(parsedOptions.themes);
2492
- const systemName = vue.shallowRef('light');
2493
- const name = vue.computed({
2494
- get() {
2495
- return _name.value === 'system' ? systemName.value : _name.value;
2496
- },
2497
- set(val) {
2498
- _name.value = val;
2499
- }
2500
- });
2501
2486
  const computedThemes = vue.computed(() => {
2502
2487
  const acc = {};
2503
2488
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2518,49 +2503,28 @@
2518
2503
  const current = vue.toRef(() => computedThemes.value[name.value]);
2519
2504
  const styles = vue.computed(() => {
2520
2505
  const lines = [];
2521
- const important = parsedOptions.unimportant ? '' : ' !important';
2522
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2523
2506
  if (current.value?.dark) {
2524
2507
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2525
2508
  }
2526
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2509
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2527
2510
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2528
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2529
- }
2530
- if (parsedOptions.utilities) {
2531
- const bgLines = [];
2532
- const fgLines = [];
2533
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2534
- for (const key of colors) {
2535
- if (key.startsWith('on-')) {
2536
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2537
- } else {
2538
- 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);
2539
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2540
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
2541
- }
2511
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2512
+ }
2513
+ const bgLines = [];
2514
+ const fgLines = [];
2515
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2516
+ for (const key of colors) {
2517
+ if (key.startsWith('on-')) {
2518
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2519
+ } else {
2520
+ 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);
2521
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2522
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2542
2523
  }
2543
- lines.push(...bgLines, ...fgLines);
2544
2524
  }
2525
+ lines.push(...bgLines, ...fgLines);
2545
2526
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2546
2527
  });
2547
- const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
2548
- const themeNames = vue.toRef(() => Object.keys(computedThemes.value));
2549
- if (SUPPORTS_MATCH_MEDIA) {
2550
- const media = window.matchMedia('(prefers-color-scheme: dark)');
2551
- function updateSystemName() {
2552
- systemName.value = media.matches ? 'dark' : 'light';
2553
- }
2554
- updateSystemName();
2555
- media.addEventListener('change', updateSystemName, {
2556
- passive: true
2557
- });
2558
- if (vue.getCurrentScope()) {
2559
- vue.onScopeDispose(() => {
2560
- media.removeEventListener('change', updateSystemName);
2561
- });
2562
- }
2563
- }
2564
2528
  function install(app) {
2565
2529
  if (parsedOptions.isDisabled) return;
2566
2530
  const head = app._context.provides.usehead;
@@ -2598,55 +2562,22 @@
2598
2562
  updateStyles();
2599
2563
  }
2600
2564
  function updateStyles() {
2601
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
2565
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2602
2566
  }
2603
2567
  }
2604
2568
  }
2605
- function change(themeName) {
2606
- if (!themeNames.value.includes(themeName)) {
2607
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
2608
- return;
2609
- }
2610
- name.value = themeName;
2611
- }
2612
- function cycle() {
2613
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
2614
- const currentIndex = themeArray.indexOf(name.value);
2615
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
2616
- change(themeArray[nextIndex]);
2617
- }
2618
- function toggle() {
2619
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
2620
- cycle(themeArray);
2621
- }
2622
- const globalName = new Proxy(name, {
2623
- get(target, prop) {
2624
- return target[prop];
2625
- },
2626
- set(target, prop, val) {
2627
- if (prop === 'value') {
2628
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
2629
- }
2630
- // @ts-expect-error
2631
- target[prop] = val;
2632
- return true;
2633
- }
2634
- });
2569
+ const themeClasses = vue.toRef(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
2635
2570
  return {
2636
2571
  install,
2637
- change,
2638
- cycle,
2639
- toggle,
2640
2572
  isDisabled: parsedOptions.isDisabled,
2641
2573
  name,
2642
2574
  themes,
2643
2575
  current,
2644
2576
  computedThemes,
2645
- prefix: parsedOptions.prefix,
2646
2577
  themeClasses,
2647
2578
  styles,
2648
2579
  global: {
2649
- name: globalName,
2580
+ name,
2650
2581
  current
2651
2582
  }
2652
2583
  };
@@ -2657,7 +2588,7 @@
2657
2588
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2658
2589
  const name = vue.toRef(() => props.theme ?? theme.name.value);
2659
2590
  const current = vue.toRef(() => theme.themes.value[name.value]);
2660
- const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
2591
+ const themeClasses = vue.toRef(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2661
2592
  const newTheme = {
2662
2593
  ...theme,
2663
2594
  name,
@@ -4204,15 +4135,9 @@
4204
4135
  };
4205
4136
  }
4206
4137
 
4207
- // Types
4208
-
4209
4138
  const makeVBtnGroupProps = propsFactory({
4210
4139
  baseColor: String,
4211
4140
  divided: Boolean,
4212
- direction: {
4213
- type: String,
4214
- default: 'horizontal'
4215
- },
4216
4141
  ...makeBorderProps(),
4217
4142
  ...makeComponentProps(),
4218
4143
  ...makeDensityProps(),
@@ -4246,7 +4171,7 @@
4246
4171
  } = useRounded(props);
4247
4172
  provideDefaults({
4248
4173
  VBtn: {
4249
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4174
+ height: 'auto',
4250
4175
  baseColor: vue.toRef(() => props.baseColor),
4251
4176
  color: vue.toRef(() => props.color),
4252
4177
  density: vue.toRef(() => props.density),
@@ -4256,7 +4181,7 @@
4256
4181
  });
4257
4182
  useRender(() => {
4258
4183
  return vue.createVNode(props.tag, {
4259
- "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4184
+ "class": ['v-btn-group', {
4260
4185
  'v-btn-group--divided': props.divided
4261
4186
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4262
4187
  "style": props.style
@@ -12431,12 +12356,7 @@
12431
12356
  }
12432
12357
  function calculateOffset(index) {
12433
12358
  index = clamp(index, 0, items.value.length - 1);
12434
- const whole = Math.floor(index);
12435
- const fraction = index % 1;
12436
- const next = whole + 1;
12437
- const wholeOffset = offsets[whole] || 0;
12438
- const nextOffset = offsets[next] || wholeOffset;
12439
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12359
+ return offsets[index] || 0;
12440
12360
  }
12441
12361
  function calculateIndex(scrollTop) {
12442
12362
  return binaryClosest(offsets, scrollTop);
@@ -31754,7 +31674,7 @@
31754
31674
  };
31755
31675
  });
31756
31676
  }
31757
- const version$1 = "3.8.4-dev.2025-05-07";
31677
+ const version$1 = "3.8.4-master.2025-05-07";
31758
31678
  createVuetify$1.version = version$1;
31759
31679
 
31760
31680
  // Vue's inject() can only be used in setup
@@ -32052,7 +31972,7 @@
32052
31972
 
32053
31973
  /* eslint-disable local-rules/sort-imports */
32054
31974
 
32055
- const version = "3.8.4-dev.2025-05-07";
31975
+ const version = "3.8.4-master.2025-05-07";
32056
31976
 
32057
31977
  /* eslint-disable local-rules/sort-imports */
32058
31978