@vuetify/nightly 3.8.3-dev.2025-04-29 → 3.8.3-master.2025-04-30

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 (74) hide show
  1. package/CHANGELOG.md +8 -17
  2. package/dist/json/attributes.json +2876 -2884
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +130 -130
  5. package/dist/json/tags.json +0 -2
  6. package/dist/json/web-types.json +5265 -5285
  7. package/dist/vuetify-labs.cjs +47 -124
  8. package/dist/vuetify-labs.css +3531 -3554
  9. package/dist/vuetify-labs.d.ts +4036 -905
  10. package/dist/vuetify-labs.esm.js +48 -125
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +47 -124
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +47 -124
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +5454 -5477
  17. package/dist/vuetify.d.ts +4036 -905
  18. package/dist/vuetify.esm.js +48 -125
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +47 -124
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1173 -1179
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.d.ts +792 -74
  26. package/lib/components/VBadge/VBadge.d.ts +22 -46
  27. package/lib/components/VBottomSheet/VBottomSheet.d.ts +1434 -80
  28. package/lib/components/VBtnGroup/VBtnGroup.css +7 -30
  29. package/lib/components/VBtnGroup/VBtnGroup.d.ts +32 -58
  30. package/lib/components/VBtnGroup/VBtnGroup.js +3 -7
  31. package/lib/components/VBtnGroup/VBtnGroup.js.map +1 -1
  32. package/lib/components/VBtnGroup/VBtnGroup.sass +17 -44
  33. package/lib/components/VBtnToggle/VBtnToggle.d.ts +0 -25
  34. package/lib/components/VCombobox/VCombobox.d.ts +792 -74
  35. package/lib/components/VCounter/VCounter.d.ts +22 -46
  36. package/lib/components/VDataIterator/VDataIterator.d.ts +22 -46
  37. package/lib/components/VDialog/VDialog.d.ts +1048 -146
  38. package/lib/components/VDialog/VDialog.js.map +1 -1
  39. package/lib/components/VFab/VFab.d.ts +22 -46
  40. package/lib/components/VImg/VImg.d.ts +22 -49
  41. package/lib/components/VInput/VInput.d.ts +1 -1
  42. package/lib/components/VLazy/VLazy.d.ts +22 -46
  43. package/lib/components/VMenu/VMenu.d.ts +1048 -146
  44. package/lib/components/VMenu/VMenu.js.map +1 -1
  45. package/lib/components/VMessages/VMessages.d.ts +22 -46
  46. package/lib/components/VOverlay/VOverlay.css +1 -1
  47. package/lib/components/VOverlay/VOverlay.d.ts +22 -49
  48. package/lib/components/VOverlay/_variables.scss +1 -1
  49. package/lib/components/VSelect/VSelect.d.ts +1232 -90
  50. package/lib/components/VSnackbar/VSnackbar.d.ts +58 -109
  51. package/lib/components/VSnackbarQueue/VSnackbarQueue.d.ts +22 -46
  52. package/lib/components/VSpeedDial/VSpeedDial.d.ts +1434 -80
  53. package/lib/components/VTooltip/VTooltip.d.ts +58 -109
  54. package/lib/components/VTooltip/VTooltip.js +2 -2
  55. package/lib/components/VTooltip/VTooltip.js.map +1 -1
  56. package/lib/composables/calendar.d.ts +0 -1
  57. package/lib/composables/calendar.js.map +1 -1
  58. package/lib/composables/theme.d.ts +1 -6
  59. package/lib/composables/theme.js +26 -94
  60. package/lib/composables/theme.js.map +1 -1
  61. package/lib/composables/transition.d.ts +10 -20
  62. package/lib/composables/transition.js +15 -12
  63. package/lib/composables/transition.js.map +1 -1
  64. package/lib/composables/virtual.js +1 -6
  65. package/lib/composables/virtual.js.map +1 -1
  66. package/lib/entry-bundler.js +1 -1
  67. package/lib/entry-bundler.js.map +1 -1
  68. package/lib/framework.d.ts +98 -142
  69. package/lib/framework.js +1 -1
  70. package/lib/framework.js.map +1 -1
  71. package/lib/util/globals.d.ts +0 -1
  72. package/lib/util/globals.js +0 -1
  73. package/lib/util/globals.js.map +1 -1
  74. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.3-dev.2025-04-29
2
+ * Vuetify v3.8.3-master.2025-04-30
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,
@@ -3324,7 +3255,7 @@
3324
3255
 
3325
3256
  const makeTransitionProps = propsFactory({
3326
3257
  transition: {
3327
- type: [Boolean, String, Object],
3258
+ type: null,
3328
3259
  default: 'fade-transition',
3329
3260
  validator: val => val !== true
3330
3261
  }
@@ -3342,16 +3273,19 @@
3342
3273
  const {
3343
3274
  component = group ? vue.TransitionGroup : vue.Transition,
3344
3275
  ...customProps
3345
- } = typeof transition === 'object' ? transition : {};
3346
- return vue.h(component, vue.mergeProps(typeof transition === 'string' ? {
3347
- name: disabled ? '' : transition
3348
- } : customProps, typeof transition === 'string' ? {} : Object.fromEntries(Object.entries({
3349
- disabled,
3350
- group
3351
- }).filter(_ref2 => {
3352
- let [_, v] = _ref2;
3353
- return v !== undefined;
3354
- })), rest), slots);
3276
+ } = isObject(transition) ? transition : {};
3277
+ let transitionProps;
3278
+ if (isObject(transition)) {
3279
+ transitionProps = vue.mergeProps(customProps, JSON.parse(JSON.stringify({
3280
+ disabled,
3281
+ group
3282
+ })), rest);
3283
+ } else {
3284
+ transitionProps = vue.mergeProps({
3285
+ name: disabled || !transition ? '' : transition
3286
+ }, rest);
3287
+ }
3288
+ return vue.h(component, transitionProps, slots);
3355
3289
  };
3356
3290
 
3357
3291
  // Utilities
@@ -4201,15 +4135,9 @@
4201
4135
  };
4202
4136
  }
4203
4137
 
4204
- // Types
4205
-
4206
4138
  const makeVBtnGroupProps = propsFactory({
4207
4139
  baseColor: String,
4208
4140
  divided: Boolean,
4209
- direction: {
4210
- type: String,
4211
- default: 'horizontal'
4212
- },
4213
4141
  ...makeBorderProps(),
4214
4142
  ...makeComponentProps(),
4215
4143
  ...makeDensityProps(),
@@ -4243,7 +4171,7 @@
4243
4171
  } = useRounded(props);
4244
4172
  provideDefaults({
4245
4173
  VBtn: {
4246
- height: vue.toRef(() => props.direction === 'horizontal' ? 'auto' : null),
4174
+ height: 'auto',
4247
4175
  baseColor: vue.toRef(() => props.baseColor),
4248
4176
  color: vue.toRef(() => props.color),
4249
4177
  density: vue.toRef(() => props.density),
@@ -4253,7 +4181,7 @@
4253
4181
  });
4254
4182
  useRender(() => {
4255
4183
  return vue.createVNode(props.tag, {
4256
- "class": ['v-btn-group', `v-btn-group--${props.direction}`, {
4184
+ "class": ['v-btn-group', {
4257
4185
  'v-btn-group--divided': props.divided
4258
4186
  }, themeClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, props.class],
4259
4187
  "style": props.style
@@ -12426,12 +12354,7 @@
12426
12354
  }
12427
12355
  function calculateOffset(index) {
12428
12356
  index = clamp(index, 0, items.value.length - 1);
12429
- const whole = Math.floor(index);
12430
- const fraction = index % 1;
12431
- const next = whole + 1;
12432
- const wholeOffset = offsets[whole] || 0;
12433
- const nextOffset = offsets[next] || wholeOffset;
12434
- return wholeOffset + (nextOffset - wholeOffset) * fraction;
12357
+ return offsets[index] || 0;
12435
12358
  }
12436
12359
  function calculateIndex(scrollTop) {
12437
12360
  return binaryClosest(offsets, scrollTop);
@@ -28444,7 +28367,7 @@
28444
28367
  origin: 'auto',
28445
28368
  scrim: false,
28446
28369
  scrollStrategy: 'reposition',
28447
- transition: false
28370
+ transition: null
28448
28371
  }), ['absolute', 'persistent'])
28449
28372
  }, 'VTooltip');
28450
28373
  const VTooltip = genericComponent()({
@@ -28471,7 +28394,7 @@
28471
28394
  return props.origin === 'auto' || props.origin === 'overlap' || props.origin.split(' ').length > 1 || props.location.split(' ').length > 1 ? props.origin : props.origin + ' center';
28472
28395
  });
28473
28396
  const transition = vue.toRef(() => {
28474
- if (props.transition) return props.transition;
28397
+ if (props.transition != null) return props.transition;
28475
28398
  return isActive.value ? 'scale-transition' : 'fade-transition';
28476
28399
  });
28477
28400
  const activatorProps = vue.computed(() => vue.mergeProps({
@@ -31718,7 +31641,7 @@
31718
31641
  };
31719
31642
  });
31720
31643
  }
31721
- const version$1 = "3.8.3-dev.2025-04-29";
31644
+ const version$1 = "3.8.3-master.2025-04-30";
31722
31645
  createVuetify$1.version = version$1;
31723
31646
 
31724
31647
  // Vue's inject() can only be used in setup
@@ -32016,7 +31939,7 @@
32016
31939
 
32017
31940
  /* eslint-disable local-rules/sort-imports */
32018
31941
 
32019
- const version = "3.8.3-dev.2025-04-29";
31942
+ const version = "3.8.3-master.2025-04-30";
32020
31943
 
32021
31944
  /* eslint-disable local-rules/sort-imports */
32022
31945