vuetify 3.7.8 → 3.7.10

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 (56) hide show
  1. package/dist/json/attributes.json +855 -851
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +182 -182
  4. package/dist/json/tags.json +1 -0
  5. package/dist/json/web-types.json +1675 -1665
  6. package/dist/vuetify-labs.css +4564 -4564
  7. package/dist/vuetify-labs.d.ts +41 -118
  8. package/dist/vuetify-labs.esm.js +75 -10
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +74 -9
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +5268 -5268
  13. package/dist/vuetify.d.ts +90 -182
  14. package/dist/vuetify.esm.js +64 -9
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +63 -8
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +463 -460
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAutocomplete/VAutocomplete.mjs +10 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  23. package/lib/components/VCombobox/VCombobox.mjs +11 -1
  24. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  25. package/lib/components/VDatePicker/VDatePicker.mjs +2 -1
  26. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  27. package/lib/components/VSelect/VSelect.mjs +5 -1
  28. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  29. package/lib/components/VTabs/VTabs.mjs +1 -1
  30. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  31. package/lib/components/VTabs/index.d.mts +52 -119
  32. package/lib/components/index.d.mts +26 -118
  33. package/lib/components/transitions/expand-transition.mjs +2 -0
  34. package/lib/components/transitions/expand-transition.mjs.map +1 -1
  35. package/lib/composables/display.mjs +3 -1
  36. package/lib/composables/display.mjs.map +1 -1
  37. package/lib/composables/mousedown.mjs +30 -0
  38. package/lib/composables/mousedown.mjs.map +1 -0
  39. package/lib/entry-bundler.mjs +1 -1
  40. package/lib/entry-bundler.mjs.map +1 -1
  41. package/lib/framework.mjs +1 -1
  42. package/lib/framework.mjs.map +1 -1
  43. package/lib/index.d.mts +64 -64
  44. package/lib/labs/VTreeview/VTreeview.mjs +1 -1
  45. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  46. package/lib/labs/VTreeview/VTreeviewChildren.mjs +13 -2
  47. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  48. package/lib/labs/VTreeview/index.d.mts +15 -0
  49. package/lib/labs/components.d.mts +15 -0
  50. package/lib/locale/da.mjs +5 -5
  51. package/lib/locale/da.mjs.map +1 -1
  52. package/lib/locale/de.mjs +3 -3
  53. package/lib/locale/de.mjs.map +1 -1
  54. package/lib/locale/fi.mjs +5 -5
  55. package/lib/locale/fi.mjs.map +1 -1
  56. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.8
2
+ * Vuetify v3.7.10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -3212,6 +3212,7 @@
3212
3212
  },
3213
3213
  onEnter(el) {
3214
3214
  const initialStyle = el._initialStyle;
3215
+ if (!initialStyle) return;
3215
3216
  el.style.setProperty('transition', 'none', 'important');
3216
3217
  // Hide overflow to account for collapsed margins in the calculated height
3217
3218
  el.style.overflow = 'hidden';
@@ -3251,6 +3252,7 @@
3251
3252
  resetStyles(el);
3252
3253
  }
3253
3254
  function resetStyles(el) {
3255
+ if (!el._initialStyle) return;
3254
3256
  const size = el._initialStyle[sizeProperty];
3255
3257
  el.style.overflow = el._initialStyle.overflow;
3256
3258
  if (size != null) el.style[sizeProperty] = size;
@@ -7438,7 +7440,9 @@
7438
7440
  mobileBreakpoint: [Number, String]
7439
7441
  }, 'display');
7440
7442
  function useDisplay() {
7441
- let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7443
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
7444
+ mobile: null
7445
+ };
7442
7446
  let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
7443
7447
  const display = vue.inject(DisplaySymbol);
7444
7448
  if (!display) throw new Error('Could not find Vuetify display injection');
@@ -12633,6 +12637,34 @@
12633
12637
  }; // typescript doesn't know about vue's event merging
12634
12638
  }
12635
12639
 
12640
+ // https://github.com/vuetifyjs/vuetify/issues/20003
12641
+ /**
12642
+ * This composable is designed to track whether the mouse is in a mousedown state at any given time. The original motivation is that
12643
+ * it is impossible to distinguish whether a blur event is triggered by mousedown, keydown, or via JavaScript.
12644
+ * This composable allows for conditional logic when a blur is triggered by mousedown.
12645
+ */
12646
+
12647
+ function useIsMousedown() {
12648
+ const isMousedown = vue.shallowRef(false);
12649
+ function mousedown() {
12650
+ isMousedown.value = true;
12651
+ }
12652
+ function mouseup() {
12653
+ isMousedown.value = false;
12654
+ }
12655
+ vue.onMounted(() => {
12656
+ document.body.addEventListener('mousedown', mousedown);
12657
+ document.body.addEventListener('mouseup', mouseup);
12658
+ });
12659
+ vue.onUnmounted(() => {
12660
+ document.body.removeEventListener('mousedown', mousedown);
12661
+ document.body.removeEventListener('mouseup', mouseup);
12662
+ });
12663
+ return {
12664
+ isMousedown
12665
+ };
12666
+ }
12667
+
12636
12668
  // Types
12637
12669
 
12638
12670
  const makeSelectProps = propsFactory({
@@ -12722,6 +12754,9 @@
12722
12754
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : model.value.length;
12723
12755
  });
12724
12756
  const form = useForm(props);
12757
+ const {
12758
+ isMousedown
12759
+ } = useIsMousedown();
12725
12760
  const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
12726
12761
  const isFocused = vue.shallowRef(false);
12727
12762
  const label = vue.computed(() => menu.value ? props.closeText : props.openText);
@@ -12819,7 +12854,7 @@
12819
12854
  }
12820
12855
  }
12821
12856
  function onBlur(e) {
12822
- if (!listRef.value?.$el.contains(e.relatedTarget)) {
12857
+ if (!listRef.value?.$el.contains(e.relatedTarget) && !isMousedown.value) {
12823
12858
  menu.value = false;
12824
12859
  }
12825
12860
  }
@@ -13231,6 +13266,9 @@
13231
13266
  textColorClasses,
13232
13267
  textColorStyles
13233
13268
  } = useTextColor(color);
13269
+ const {
13270
+ isMousedown
13271
+ } = useIsMousedown();
13234
13272
  const search = useProxiedModel(props, 'search', '');
13235
13273
  const model = useProxiedModel(props, 'modelValue', [], v => transformIn(v === null ? [null] : wrapInArray(v)), v => {
13236
13274
  const transformed = transformOut(v);
@@ -13404,6 +13442,11 @@
13404
13442
  });
13405
13443
  }
13406
13444
  }
13445
+ function onBlur(e) {
13446
+ if (!isMousedown.value) {
13447
+ menu.value = false;
13448
+ }
13449
+ }
13407
13450
  vue.watch(isFocused, (val, oldVal) => {
13408
13451
  if (val === oldVal) return;
13409
13452
  if (val) {
@@ -13413,7 +13456,6 @@
13413
13456
  vue.nextTick(() => isSelecting.value = false);
13414
13457
  } else {
13415
13458
  if (!props.multiple && search.value == null) model.value = [];
13416
- menu.value = false;
13417
13459
  if (!model.value.some(_ref3 => {
13418
13460
  let {
13419
13461
  title
@@ -13467,6 +13509,7 @@
13467
13509
  "readonly": form.isReadonly.value,
13468
13510
  "placeholder": isDirty ? undefined : props.placeholder,
13469
13511
  "onClick:clear": onClear,
13512
+ "onBlur": onBlur,
13470
13513
  "onMousedown:control": onMousedownControl,
13471
13514
  "onKeydown": onKeydown
13472
13515
  }), {
@@ -17086,6 +17129,9 @@
17086
17129
  return props.multiple ? transformed : transformed[0] ?? null;
17087
17130
  });
17088
17131
  const form = useForm(props);
17132
+ const {
17133
+ isMousedown
17134
+ } = useIsMousedown();
17089
17135
  const hasChips = vue.computed(() => !!(props.chips || slots.chip));
17090
17136
  const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
17091
17137
  const _search = vue.shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
@@ -17249,6 +17295,12 @@
17249
17295
  vTextFieldRef.value?.focus();
17250
17296
  }
17251
17297
  }
17298
+ function onBlur(e) {
17299
+ if (!isMousedown.value) {
17300
+ menu.value = false;
17301
+ }
17302
+ }
17303
+
17252
17304
  /** @param set - null means toggle */
17253
17305
  function select(item) {
17254
17306
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -17293,7 +17345,6 @@
17293
17345
  vue.watch(isFocused, (val, oldVal) => {
17294
17346
  if (val || val === oldVal) return;
17295
17347
  selectionIndex.value = -1;
17296
- menu.value = false;
17297
17348
  if (search.value) {
17298
17349
  if (props.multiple) {
17299
17350
  select(transformItem$3(props, search.value));
@@ -17351,6 +17402,7 @@
17351
17402
  "readonly": form.isReadonly.value,
17352
17403
  "placeholder": isDirty ? undefined : props.placeholder,
17353
17404
  "onClick:clear": onClear,
17405
+ "onBlur": onBlur,
17354
17406
  "onMousedown:control": onMousedownControl,
17355
17407
  "onKeydown": onKeydown
17356
17408
  }), {
@@ -22437,8 +22489,9 @@
22437
22489
  targets.push(...['prev', 'next']);
22438
22490
  } else {
22439
22491
  let _date = adapter.date();
22440
- _date = adapter.setYear(_date, year.value);
22492
+ _date = adapter.startOfMonth(_date);
22441
22493
  _date = adapter.setMonth(_date, month.value);
22494
+ _date = adapter.setYear(_date, year.value);
22442
22495
  if (minDate.value) {
22443
22496
  const date = adapter.addDays(adapter.startOfMonth(_date), -1);
22444
22497
  adapter.isAfter(minDate.value, date) && targets.push('prev');
@@ -27088,6 +27141,8 @@
27088
27141
  }
27089
27142
  });
27090
27143
 
27144
+ // Types
27145
+
27091
27146
  function parseItems(items) {
27092
27147
  if (!items) return [];
27093
27148
  return items.map(item => {
@@ -28326,7 +28381,7 @@
28326
28381
  goTo
28327
28382
  };
28328
28383
  }
28329
- const version$1 = "3.7.8";
28384
+ const version$1 = "3.7.10";
28330
28385
  createVuetify$1.version = version$1;
28331
28386
 
28332
28387
  // Vue's inject() can only be used in setup
@@ -28351,7 +28406,7 @@
28351
28406
  ...options
28352
28407
  });
28353
28408
  };
28354
- const version = "3.7.8";
28409
+ const version = "3.7.10";
28355
28410
  createVuetify.version = version;
28356
28411
 
28357
28412
  exports.blueprints = index;