@vuetify/nightly 3.8.2-dev.2025-04-17 → 3.8.2-master.2025-04-19

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 (44) hide show
  1. package/CHANGELOG.md +7 -16
  2. package/dist/json/attributes.json +3562 -3562
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +164 -164
  5. package/dist/json/web-types.json +6668 -6669
  6. package/dist/vuetify-labs.cjs +36 -112
  7. package/dist/vuetify-labs.css +3302 -3302
  8. package/dist/vuetify-labs.d.ts +62 -76
  9. package/dist/vuetify-labs.esm.js +37 -113
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +36 -112
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +29 -103
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +5737 -5737
  16. package/dist/vuetify.d.ts +57 -62
  17. package/dist/vuetify.esm.js +30 -104
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +29 -103
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +1165 -1171
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VOverlay/VOverlay.css +1 -1
  25. package/lib/components/VOverlay/_variables.scss +1 -1
  26. package/lib/composables/calendar.d.ts +0 -1
  27. package/lib/composables/calendar.js.map +1 -1
  28. package/lib/composables/theme.d.ts +1 -6
  29. package/lib/composables/theme.js +26 -94
  30. package/lib/composables/theme.js.map +1 -1
  31. package/lib/composables/virtual.js +1 -6
  32. package/lib/composables/virtual.js.map +1 -1
  33. package/lib/entry-bundler.js +1 -1
  34. package/lib/entry-bundler.js.map +1 -1
  35. package/lib/framework.d.ts +57 -62
  36. package/lib/framework.js +1 -1
  37. package/lib/framework.js.map +1 -1
  38. package/lib/labs/VIconBtn/VIconBtn.d.ts +6 -21
  39. package/lib/labs/VIconBtn/VIconBtn.js +7 -9
  40. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  41. package/lib/util/globals.d.ts +0 -1
  42. package/lib/util/globals.js +0 -1
  43. package/lib/util/globals.js.map +1 -1
  44. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.2-dev.2025-04-17
2
+ * Vuetify v3.8.2-master.2025-04-19
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"); }
@@ -2286,7 +2285,6 @@
2286
2285
  function genDefaults$2() {
2287
2286
  return {
2288
2287
  defaultTheme: 'light',
2289
- prefix: 'v-',
2290
2288
  variations: {
2291
2289
  colors: [],
2292
2290
  lighten: 0,
@@ -2368,10 +2366,7 @@
2368
2366
  }
2369
2367
  }
2370
2368
  },
2371
- stylesheetId: 'vuetify-theme-stylesheet',
2372
- scoped: false,
2373
- unimportant: false,
2374
- utilities: true
2369
+ stylesheetId: 'vuetify-theme-stylesheet'
2375
2370
  };
2376
2371
  }
2377
2372
  function parseThemeOptions() {
@@ -2394,21 +2389,21 @@
2394
2389
  function createCssClass(lines, selector, content, scope) {
2395
2390
  lines.push(`${getScopedSelector(selector, scope)} {\n`, ...content.map(line => ` ${line};\n`), '}\n');
2396
2391
  }
2397
- function genCssVariables(theme, prefix) {
2392
+ function genCssVariables(theme) {
2398
2393
  const lightOverlay = theme.dark ? 2 : 1;
2399
2394
  const darkOverlay = theme.dark ? 1 : 2;
2400
2395
  const variables = [];
2401
2396
  for (const [key, value] of Object.entries(theme.colors)) {
2402
2397
  const rgb = parseColor(value);
2403
- variables.push(`--${prefix}theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2398
+ variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
2404
2399
  if (!key.startsWith('on-')) {
2405
- variables.push(`--${prefix}theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2400
+ variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
2406
2401
  }
2407
2402
  }
2408
2403
  for (const [key, value] of Object.entries(theme.variables)) {
2409
2404
  const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
2410
2405
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
2411
- variables.push(`--${prefix}${key}: ${rgb ?? value}`);
2406
+ variables.push(`--v-${key}: ${rgb ?? value}`);
2412
2407
  }
2413
2408
  return variables;
2414
2409
  }
@@ -2452,8 +2447,7 @@
2452
2447
  const scopeSelector = `:where(${scope})`;
2453
2448
  return selector === ':root' ? scopeSelector : `${scopeSelector} ${selector}`;
2454
2449
  }
2455
- function upsertStyles(id, cspNonce, styles) {
2456
- const styleEl = getOrCreateStyleElement(id, cspNonce);
2450
+ function upsertStyles(styleEl, styles) {
2457
2451
  if (!styleEl) return;
2458
2452
  styleEl.innerHTML = styles;
2459
2453
  }
@@ -2473,17 +2467,8 @@
2473
2467
  // Composables
2474
2468
  function createTheme(options) {
2475
2469
  const parsedOptions = parseThemeOptions(options);
2476
- const _name = vue.shallowRef(parsedOptions.defaultTheme);
2470
+ const name = vue.shallowRef(parsedOptions.defaultTheme);
2477
2471
  const themes = vue.ref(parsedOptions.themes);
2478
- const systemName = vue.shallowRef('light');
2479
- const name = vue.computed({
2480
- get() {
2481
- return _name.value === 'system' ? systemName.value : _name.value;
2482
- },
2483
- set(val) {
2484
- _name.value = val;
2485
- }
2486
- });
2487
2472
  const computedThemes = vue.computed(() => {
2488
2473
  const acc = {};
2489
2474
  for (const [name, original] of Object.entries(themes.value)) {
@@ -2504,49 +2489,28 @@
2504
2489
  const current = vue.computed(() => computedThemes.value[name.value]);
2505
2490
  const styles = vue.computed(() => {
2506
2491
  const lines = [];
2507
- const important = parsedOptions.unimportant ? '' : ' !important';
2508
- const scoped = parsedOptions.scoped ? parsedOptions.prefix : '';
2509
2492
  if (current.value?.dark) {
2510
2493
  createCssClass(lines, ':root', ['color-scheme: dark'], parsedOptions.scope);
2511
2494
  }
2512
- createCssClass(lines, ':root', genCssVariables(current.value, parsedOptions.prefix), parsedOptions.scope);
2495
+ createCssClass(lines, ':root', genCssVariables(current.value), parsedOptions.scope);
2513
2496
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
2514
- createCssClass(lines, `.${parsedOptions.prefix}theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme, parsedOptions.prefix)], parsedOptions.scope);
2515
- }
2516
- if (parsedOptions.utilities) {
2517
- const bgLines = [];
2518
- const fgLines = [];
2519
- const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2520
- for (const key of colors) {
2521
- if (key.startsWith('on-')) {
2522
- createCssClass(fgLines, `.${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2523
- } else {
2524
- 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);
2525
- createCssClass(fgLines, `.${scoped}text-${key}`, [`color: rgb(var(--${parsedOptions.prefix}theme-${key}))${important}`], parsedOptions.scope);
2526
- createCssClass(fgLines, `.${scoped}border-${key}`, [`--${parsedOptions.prefix}border-color: var(--${parsedOptions.prefix}theme-${key})`], parsedOptions.scope);
2527
- }
2497
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)], parsedOptions.scope);
2498
+ }
2499
+ const bgLines = [];
2500
+ const fgLines = [];
2501
+ const colors = new Set(Object.values(computedThemes.value).flatMap(theme => Object.keys(theme.colors)));
2502
+ for (const key of colors) {
2503
+ if (key.startsWith('on-')) {
2504
+ createCssClass(fgLines, `.${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2505
+ } else {
2506
+ 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);
2507
+ createCssClass(fgLines, `.text-${key}`, [`color: rgb(var(--v-theme-${key})) !important`], parsedOptions.scope);
2508
+ createCssClass(fgLines, `.border-${key}`, [`--v-border-color: var(--v-theme-${key})`], parsedOptions.scope);
2528
2509
  }
2529
- lines.push(...bgLines, ...fgLines);
2530
2510
  }
2511
+ lines.push(...bgLines, ...fgLines);
2531
2512
  return lines.map((str, i) => i === 0 ? str : ` ${str}`).join('');
2532
2513
  });
2533
- const themeClasses = vue.computed(() => parsedOptions.isDisabled ? undefined : `${parsedOptions.prefix}theme--${name.value}`);
2534
- const themeNames = vue.computed(() => Object.keys(computedThemes.value));
2535
- if (SUPPORTS_MATCH_MEDIA) {
2536
- const media = window.matchMedia('(prefers-color-scheme: dark)');
2537
- function updateSystemName() {
2538
- systemName.value = media.matches ? 'dark' : 'light';
2539
- }
2540
- updateSystemName();
2541
- media.addEventListener('change', updateSystemName, {
2542
- passive: true
2543
- });
2544
- if (vue.getCurrentScope()) {
2545
- vue.onScopeDispose(() => {
2546
- media.removeEventListener('change', updateSystemName);
2547
- });
2548
- }
2549
- }
2550
2514
  function install(app) {
2551
2515
  if (parsedOptions.isDisabled) return;
2552
2516
  const head = app._context.provides.usehead;
@@ -2584,55 +2548,22 @@
2584
2548
  updateStyles();
2585
2549
  }
2586
2550
  function updateStyles() {
2587
- upsertStyles(parsedOptions.stylesheetId, parsedOptions.cspNonce, styles.value);
2551
+ upsertStyles(getOrCreateStyleElement(parsedOptions.stylesheetId, parsedOptions.cspNonce), styles.value);
2588
2552
  }
2589
2553
  }
2590
2554
  }
2591
- function change(themeName) {
2592
- if (!themeNames.value.includes(themeName)) {
2593
- consoleWarn(`Theme "${themeName}" not found on the Vuetify theme instance`);
2594
- return;
2595
- }
2596
- name.value = themeName;
2597
- }
2598
- function cycle() {
2599
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : themeNames.value;
2600
- const currentIndex = themeArray.indexOf(name.value);
2601
- const nextIndex = currentIndex === -1 ? 0 : (currentIndex + 1) % themeArray.length;
2602
- change(themeArray[nextIndex]);
2603
- }
2604
- function toggle() {
2605
- let themeArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['light', 'dark'];
2606
- cycle(themeArray);
2607
- }
2608
- const globalName = new Proxy(name, {
2609
- get(target, prop) {
2610
- return target[prop];
2611
- },
2612
- set(target, prop, val) {
2613
- if (prop === 'value') {
2614
- deprecate(`theme.global.name.value = ${val}`, `theme.change('${val}')`);
2615
- }
2616
- // @ts-expect-error
2617
- target[prop] = val;
2618
- return true;
2619
- }
2620
- });
2555
+ const themeClasses = vue.computed(() => parsedOptions.isDisabled ? undefined : `v-theme--${name.value}`);
2621
2556
  return {
2622
2557
  install,
2623
- change,
2624
- cycle,
2625
- toggle,
2626
2558
  isDisabled: parsedOptions.isDisabled,
2627
2559
  name,
2628
2560
  themes,
2629
2561
  current,
2630
2562
  computedThemes,
2631
- prefix: parsedOptions.prefix,
2632
2563
  themeClasses,
2633
2564
  styles,
2634
2565
  global: {
2635
- name: globalName,
2566
+ name,
2636
2567
  current
2637
2568
  }
2638
2569
  };
@@ -2643,7 +2574,7 @@
2643
2574
  if (!theme) throw new Error('Could not find Vuetify theme injection');
2644
2575
  const name = vue.computed(() => props.theme ?? theme.name.value);
2645
2576
  const current = vue.computed(() => theme.themes.value[name.value]);
2646
- const themeClasses = vue.computed(() => theme.isDisabled ? undefined : `${theme.prefix}theme--${name.value}`);
2577
+ const themeClasses = vue.computed(() => theme.isDisabled ? undefined : `v-theme--${name.value}`);
2647
2578
  const newTheme = {
2648
2579
  ...theme,
2649
2580
  name,
@@ -12381,12 +12312,7 @@
12381
12312
  }
12382
12313
  function calculateOffset(index) {
12383
12314
  index = clamp(index, 0, items.value.length - 1);
12384
- const whole = Math.floor(index);
12385
- const fraction = index % 1;
12386
- const next = whole + 1;
12387
- const wholeOffset = offsets[whole] || 0;
12388
- const nextOffset = offsets[next] || wholeOffset;
12389
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12315
+ return offsets[index] || 0;
12390
12316
  }
12391
12317
  function calculateIndex(scrollTop) {
12392
12318
  return binaryClosest(offsets, scrollTop);
@@ -29520,10 +29446,7 @@
29520
29446
  hideOverlay: Boolean,
29521
29447
  icon: [String, Function, Object],
29522
29448
  iconColor: String,
29523
- iconSize: {
29524
- type: [Number, String],
29525
- default: 'default'
29526
- },
29449
+ iconSize: [Number, String],
29527
29450
  iconSizes: {
29528
29451
  type: Array,
29529
29452
  default: () => [['x-small', 10], ['small', 16], ['default', 24], ['large', 28], ['x-large', 32]]
@@ -29608,13 +29531,14 @@
29608
29531
  }
29609
29532
  useRender(() => {
29610
29533
  const icon = isActive.value ? props.activeIcon ?? props.icon : props.icon;
29611
- const size = props.size;
29612
- const hasNamedSize = btnSizeMap.has(size);
29613
- const btnSize = hasNamedSize ? btnSizeMap.get(size) : size;
29534
+ const _btnSize = props.size;
29535
+ const hasNamedSize = btnSizeMap.has(_btnSize);
29536
+ const btnSize = hasNamedSize ? btnSizeMap.get(_btnSize) : _btnSize;
29614
29537
  const btnHeight = props.height ?? btnSize;
29615
29538
  const btnWidth = props.width ?? btnSize;
29616
- const _iconSize = hasNamedSize ? size : props.iconSize ?? size;
29617
- const iconSize = iconSizeMap.get(_iconSize) ?? _iconSize;
29539
+ const _iconSize = props.iconSize;
29540
+ const hasNamedIconSize = iconSizeMap.has(_iconSize);
29541
+ const iconSize = !_iconSize ? hasNamedSize ? iconSizeMap.get(_btnSize) : iconSizeMap.get('default') : hasNamedIconSize ? iconSizeMap.get(_iconSize) : _iconSize;
29618
29542
  const iconProps = {
29619
29543
  icon,
29620
29544
  size: iconSize,
@@ -31569,7 +31493,7 @@
31569
31493
  };
31570
31494
  });
31571
31495
  }
31572
- const version$1 = "3.8.2-dev.2025-04-17";
31496
+ const version$1 = "3.8.2-master.2025-04-19";
31573
31497
  createVuetify$1.version = version$1;
31574
31498
 
31575
31499
  // Vue's inject() can only be used in setup
@@ -31867,7 +31791,7 @@
31867
31791
 
31868
31792
  /* eslint-disable local-rules/sort-imports */
31869
31793
 
31870
- const version = "3.8.2-dev.2025-04-17";
31794
+ const version = "3.8.2-master.2025-04-19";
31871
31795
 
31872
31796
  /* eslint-disable local-rules/sort-imports */
31873
31797