@vuetify/nightly 3.8.9-master.2025-06-13 → 3.8.9-master.2025-06-17

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 (50) hide show
  1. package/CHANGELOG.md +9 -3
  2. package/dist/json/attributes.json +3382 -3382
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +166 -166
  5. package/dist/json/web-types.json +6389 -6389
  6. package/dist/vuetify-labs.cjs +39 -14
  7. package/dist/vuetify-labs.css +3161 -3157
  8. package/dist/vuetify-labs.d.ts +65 -65
  9. package/dist/vuetify-labs.esm.js +39 -14
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +39 -14
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.cjs +38 -14
  14. package/dist/vuetify.cjs.map +1 -1
  15. package/dist/vuetify.css +3844 -3840
  16. package/dist/vuetify.d.ts +65 -65
  17. package/dist/vuetify.esm.js +38 -14
  18. package/dist/vuetify.esm.js.map +1 -1
  19. package/dist/vuetify.js +38 -14
  20. package/dist/vuetify.js.map +1 -1
  21. package/dist/vuetify.min.css +2 -2
  22. package/dist/vuetify.min.js +372 -371
  23. package/dist/vuetify.min.js.map +1 -1
  24. package/lib/components/VBtnGroup/VBtnGroup.css +2 -1
  25. package/lib/components/VBtnGroup/VBtnGroup.sass +2 -1
  26. package/lib/components/VDataTable/VDataTable.css +6 -3
  27. package/lib/components/VDataTable/VDataTable.sass +4 -2
  28. package/lib/components/VOtpInput/VOtpInput.js +17 -1
  29. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  30. package/lib/components/VTextField/VTextField.js +4 -4
  31. package/lib/components/VTextField/VTextField.js.map +1 -1
  32. package/lib/components/VTextarea/VTextarea.js +4 -4
  33. package/lib/components/VTextarea/VTextarea.js.map +1 -1
  34. package/lib/composables/autofocus.d.ts +7 -0
  35. package/lib/composables/autofocus.js +10 -0
  36. package/lib/composables/autofocus.js.map +1 -0
  37. package/lib/composables/group.js +1 -0
  38. package/lib/composables/group.js.map +1 -1
  39. package/lib/composables/hotkey.js +17 -17
  40. package/lib/composables/hotkey.js.map +1 -1
  41. package/lib/composables/intersectionObserver.js +2 -2
  42. package/lib/composables/intersectionObserver.js.map +1 -1
  43. package/lib/composables/selectLink.js +2 -2
  44. package/lib/composables/selectLink.js.map +1 -1
  45. package/lib/entry-bundler.js +1 -1
  46. package/lib/framework.d.ts +65 -65
  47. package/lib/framework.js +1 -1
  48. package/lib/labs/VFileUpload/VFileUploadItem.js +1 -0
  49. package/lib/labs/VFileUpload/VFileUploadItem.js.map +1 -1
  50. package/package.json +1 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.8.9-master.2025-06-13
2
+ * Vuetify v3.8.9-master.2025-06-17
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -4891,6 +4891,7 @@
4891
4891
  } else {
4892
4892
  const isSelected = selected.value.includes(id);
4893
4893
  if (props.mandatory && isSelected) return;
4894
+ if (!isSelected && !value) return;
4894
4895
  selected.value = value ?? !isSelected ? [id] : [];
4895
4896
  }
4896
4897
  }
@@ -5116,7 +5117,7 @@
5116
5117
  const observer = new IntersectionObserver(entries => {
5117
5118
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
5118
5119
  }, options);
5119
- vue.onBeforeUnmount(() => {
5120
+ vue.onScopeDispose(() => {
5120
5121
  observer.disconnect();
5121
5122
  });
5122
5123
  vue.watch(intersectionRef, (newValue, oldValue) => {
@@ -5647,9 +5648,9 @@
5647
5648
 
5648
5649
  function useSelectLink(link, select) {
5649
5650
  vue.watch(() => link.isActive?.value, isActive => {
5650
- if (link.isLink.value && isActive && select) {
5651
+ if (link.isLink.value && isActive != null && select) {
5651
5652
  vue.nextTick(() => {
5652
- select(true);
5653
+ select(isActive);
5653
5654
  });
5654
5655
  }
5655
5656
  }, {
@@ -12346,6 +12347,16 @@
12346
12347
  }
12347
12348
  });
12348
12349
 
12350
+ function useAutofocus(props) {
12351
+ function onIntersect(isIntersecting, entries) {
12352
+ if (!props.autofocus || !isIntersecting) return;
12353
+ entries[0].target?.focus?.();
12354
+ }
12355
+ return {
12356
+ onIntersect
12357
+ };
12358
+ }
12359
+
12349
12360
  // Types
12350
12361
 
12351
12362
  const activeTypes = ['color', 'file', 'time', 'date', 'datetime-local', 'week', 'month'];
@@ -12392,6 +12403,9 @@
12392
12403
  focus,
12393
12404
  blur
12394
12405
  } = useFocus(props);
12406
+ const {
12407
+ onIntersect
12408
+ } = useAutofocus(props);
12395
12409
  const counterValue = vue.computed(() => {
12396
12410
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : (model.value ?? '').toString().length;
12397
12411
  });
@@ -12401,10 +12415,6 @@
12401
12415
  return props.counter;
12402
12416
  });
12403
12417
  const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
12404
- function onIntersect(isIntersecting, entries) {
12405
- if (!props.autofocus || !isIntersecting) return;
12406
- entries[0].target?.focus?.();
12407
- }
12408
12418
  const vInputRef = vue.ref();
12409
12419
  const vFieldRef = vue.ref();
12410
12420
  const inputRef = vue.ref();
@@ -25650,6 +25660,21 @@
25650
25660
  const contentRef = vue.ref();
25651
25661
  const inputRef = vue.ref([]);
25652
25662
  const current = vue.computed(() => inputRef.value[focusIndex.value]);
25663
+ const intersectScope = vue.effectScope();
25664
+ intersectScope.run(() => {
25665
+ const {
25666
+ intersectionRef,
25667
+ isIntersecting
25668
+ } = useIntersectionObserver();
25669
+ vue.watch(isIntersecting, v => {
25670
+ if (!v) return;
25671
+ intersectionRef.value?.focus();
25672
+ intersectScope.stop();
25673
+ });
25674
+ vue.watchEffect(() => {
25675
+ intersectionRef.value = inputRef.value[0];
25676
+ });
25677
+ });
25653
25678
  function onInput() {
25654
25679
  // The maxlength attribute doesn't work for the number type input, so the text type is used.
25655
25680
  // The following logic simulates the behavior of a number input.
@@ -28396,6 +28421,9 @@
28396
28421
  focus,
28397
28422
  blur
28398
28423
  } = useFocus(props);
28424
+ const {
28425
+ onIntersect
28426
+ } = useAutofocus(props);
28399
28427
  const counterValue = vue.computed(() => {
28400
28428
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : (model.value || '').toString().length;
28401
28429
  });
@@ -28404,10 +28432,6 @@
28404
28432
  if (!props.counter || typeof props.counter !== 'number' && typeof props.counter !== 'string') return undefined;
28405
28433
  return props.counter;
28406
28434
  });
28407
- function onIntersect(isIntersecting, entries) {
28408
- if (!props.autofocus || !isIntersecting) return;
28409
- entries[0].target?.focus?.();
28410
- }
28411
28435
  const vInputRef = vue.ref();
28412
28436
  const vFieldRef = vue.ref();
28413
28437
  const controlHeight = vue.shallowRef('');
@@ -29487,7 +29511,7 @@
29487
29511
  };
29488
29512
  });
29489
29513
  }
29490
- const version$1 = "3.8.9-master.2025-06-13";
29514
+ const version$1 = "3.8.9-master.2025-06-17";
29491
29515
  createVuetify$1.version = version$1;
29492
29516
 
29493
29517
  // Vue's inject() can only be used in setup
@@ -29512,7 +29536,7 @@
29512
29536
  ...options
29513
29537
  });
29514
29538
  };
29515
- const version = "3.8.9-master.2025-06-13";
29539
+ const version = "3.8.9-master.2025-06-17";
29516
29540
  createVuetify.version = version;
29517
29541
 
29518
29542
  exports.blueprints = index;