vuetify 3.7.9 → 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 (54) hide show
  1. package/dist/json/attributes.json +1041 -1037
  2. package/dist/json/importMap-labs.json +14 -14
  3. package/dist/json/importMap.json +154 -154
  4. package/dist/json/tags.json +1 -0
  5. package/dist/json/web-types.json +2437 -2427
  6. package/dist/vuetify-labs.css +4911 -4911
  7. package/dist/vuetify-labs.d.ts +41 -118
  8. package/dist/vuetify-labs.esm.js +72 -9
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +71 -8
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +4741 -4741
  13. package/dist/vuetify.d.ts +81 -173
  14. package/dist/vuetify.esm.js +61 -8
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +60 -7
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +462 -459
  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/mousedown.mjs +30 -0
  36. package/lib/composables/mousedown.mjs.map +1 -0
  37. package/lib/entry-bundler.mjs +1 -1
  38. package/lib/entry-bundler.mjs.map +1 -1
  39. package/lib/framework.mjs +1 -1
  40. package/lib/framework.mjs.map +1 -1
  41. package/lib/index.d.mts +55 -55
  42. package/lib/labs/VTreeview/VTreeview.mjs +1 -1
  43. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  44. package/lib/labs/VTreeview/VTreeviewChildren.mjs +13 -2
  45. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  46. package/lib/labs/VTreeview/index.d.mts +15 -0
  47. package/lib/labs/components.d.mts +15 -0
  48. package/lib/locale/da.mjs +5 -5
  49. package/lib/locale/da.mjs.map +1 -1
  50. package/lib/locale/de.mjs +3 -3
  51. package/lib/locale/de.mjs.map +1 -1
  52. package/lib/locale/fi.mjs +5 -5
  53. package/lib/locale/fi.mjs.map +1 -1
  54. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.9
2
+ * Vuetify v3.7.10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -2771,6 +2771,7 @@
2771
2771
  },
2772
2772
  onEnter(el) {
2773
2773
  const initialStyle = el._initialStyle;
2774
+ if (!initialStyle) return;
2774
2775
  el.style.setProperty('transition', 'none', 'important');
2775
2776
  // Hide overflow to account for collapsed margins in the calculated height
2776
2777
  el.style.overflow = 'hidden';
@@ -2810,6 +2811,7 @@
2810
2811
  resetStyles(el);
2811
2812
  }
2812
2813
  function resetStyles(el) {
2814
+ if (!el._initialStyle) return;
2813
2815
  const size = el._initialStyle[sizeProperty];
2814
2816
  el.style.overflow = el._initialStyle.overflow;
2815
2817
  if (size != null) el.style[sizeProperty] = size;
@@ -12402,6 +12404,34 @@
12402
12404
  }; // typescript doesn't know about vue's event merging
12403
12405
  }
12404
12406
 
12407
+ // https://github.com/vuetifyjs/vuetify/issues/20003
12408
+ /**
12409
+ * This composable is designed to track whether the mouse is in a mousedown state at any given time. The original motivation is that
12410
+ * it is impossible to distinguish whether a blur event is triggered by mousedown, keydown, or via JavaScript.
12411
+ * This composable allows for conditional logic when a blur is triggered by mousedown.
12412
+ */
12413
+
12414
+ function useIsMousedown() {
12415
+ const isMousedown = vue.shallowRef(false);
12416
+ function mousedown() {
12417
+ isMousedown.value = true;
12418
+ }
12419
+ function mouseup() {
12420
+ isMousedown.value = false;
12421
+ }
12422
+ vue.onMounted(() => {
12423
+ document.body.addEventListener('mousedown', mousedown);
12424
+ document.body.addEventListener('mouseup', mouseup);
12425
+ });
12426
+ vue.onUnmounted(() => {
12427
+ document.body.removeEventListener('mousedown', mousedown);
12428
+ document.body.removeEventListener('mouseup', mouseup);
12429
+ });
12430
+ return {
12431
+ isMousedown
12432
+ };
12433
+ }
12434
+
12405
12435
  // Types
12406
12436
 
12407
12437
  const makeSelectProps = propsFactory({
@@ -12491,6 +12521,9 @@
12491
12521
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : model.value.length;
12492
12522
  });
12493
12523
  const form = useForm(props);
12524
+ const {
12525
+ isMousedown
12526
+ } = useIsMousedown();
12494
12527
  const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
12495
12528
  const isFocused = vue.shallowRef(false);
12496
12529
  const label = vue.computed(() => menu.value ? props.closeText : props.openText);
@@ -12588,7 +12621,7 @@
12588
12621
  }
12589
12622
  }
12590
12623
  function onBlur(e) {
12591
- if (!listRef.value?.$el.contains(e.relatedTarget)) {
12624
+ if (!listRef.value?.$el.contains(e.relatedTarget) && !isMousedown.value) {
12592
12625
  menu.value = false;
12593
12626
  }
12594
12627
  }
@@ -13000,6 +13033,9 @@
13000
13033
  textColorClasses,
13001
13034
  textColorStyles
13002
13035
  } = useTextColor(color);
13036
+ const {
13037
+ isMousedown
13038
+ } = useIsMousedown();
13003
13039
  const search = useProxiedModel(props, 'search', '');
13004
13040
  const model = useProxiedModel(props, 'modelValue', [], v => transformIn(v === null ? [null] : wrapInArray(v)), v => {
13005
13041
  const transformed = transformOut(v);
@@ -13173,6 +13209,11 @@
13173
13209
  });
13174
13210
  }
13175
13211
  }
13212
+ function onBlur(e) {
13213
+ if (!isMousedown.value) {
13214
+ menu.value = false;
13215
+ }
13216
+ }
13176
13217
  vue.watch(isFocused, (val, oldVal) => {
13177
13218
  if (val === oldVal) return;
13178
13219
  if (val) {
@@ -13182,7 +13223,6 @@
13182
13223
  vue.nextTick(() => isSelecting.value = false);
13183
13224
  } else {
13184
13225
  if (!props.multiple && search.value == null) model.value = [];
13185
- menu.value = false;
13186
13226
  if (!model.value.some(_ref3 => {
13187
13227
  let {
13188
13228
  title
@@ -13236,6 +13276,7 @@
13236
13276
  "readonly": form.isReadonly.value,
13237
13277
  "placeholder": isDirty ? undefined : props.placeholder,
13238
13278
  "onClick:clear": onClear,
13279
+ "onBlur": onBlur,
13239
13280
  "onMousedown:control": onMousedownControl,
13240
13281
  "onKeydown": onKeydown
13241
13282
  }), {
@@ -16855,6 +16896,9 @@
16855
16896
  return props.multiple ? transformed : transformed[0] ?? null;
16856
16897
  });
16857
16898
  const form = useForm(props);
16899
+ const {
16900
+ isMousedown
16901
+ } = useIsMousedown();
16858
16902
  const hasChips = vue.computed(() => !!(props.chips || slots.chip));
16859
16903
  const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
16860
16904
  const _search = vue.shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
@@ -17018,6 +17062,12 @@
17018
17062
  vTextFieldRef.value?.focus();
17019
17063
  }
17020
17064
  }
17065
+ function onBlur(e) {
17066
+ if (!isMousedown.value) {
17067
+ menu.value = false;
17068
+ }
17069
+ }
17070
+
17021
17071
  /** @param set - null means toggle */
17022
17072
  function select(item) {
17023
17073
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -17062,7 +17112,6 @@
17062
17112
  vue.watch(isFocused, (val, oldVal) => {
17063
17113
  if (val || val === oldVal) return;
17064
17114
  selectionIndex.value = -1;
17065
- menu.value = false;
17066
17115
  if (search.value) {
17067
17116
  if (props.multiple) {
17068
17117
  select(transformItem$3(props, search.value));
@@ -17120,6 +17169,7 @@
17120
17169
  "readonly": form.isReadonly.value,
17121
17170
  "placeholder": isDirty ? undefined : props.placeholder,
17122
17171
  "onClick:clear": onClear,
17172
+ "onBlur": onBlur,
17123
17173
  "onMousedown:control": onMousedownControl,
17124
17174
  "onKeydown": onKeydown
17125
17175
  }), {
@@ -22206,8 +22256,9 @@
22206
22256
  targets.push(...['prev', 'next']);
22207
22257
  } else {
22208
22258
  let _date = adapter.date();
22209
- _date = adapter.setYear(_date, year.value);
22259
+ _date = adapter.startOfMonth(_date);
22210
22260
  _date = adapter.setMonth(_date, month.value);
22261
+ _date = adapter.setYear(_date, year.value);
22211
22262
  if (minDate.value) {
22212
22263
  const date = adapter.addDays(adapter.startOfMonth(_date), -1);
22213
22264
  adapter.isAfter(minDate.value, date) && targets.push('prev');
@@ -26857,6 +26908,8 @@
26857
26908
  }
26858
26909
  });
26859
26910
 
26911
+ // Types
26912
+
26860
26913
  function parseItems(items) {
26861
26914
  if (!items) return [];
26862
26915
  return items.map(item => {
@@ -30093,6 +30146,11 @@
30093
30146
  }
30094
30147
  }
30095
30148
  return () => slots.default?.() ?? props.items?.map(item => {
30149
+ if (item.type === 'divider') {
30150
+ return slots.divider?.({
30151
+ props: item.props
30152
+ }) ?? vue.createVNode(VDivider, item.props, null);
30153
+ }
30096
30154
  const {
30097
30155
  children,
30098
30156
  props: itemProps
@@ -30129,6 +30187,11 @@
30129
30187
  ...slotProps,
30130
30188
  item: item.raw,
30131
30189
  internalItem: item
30190
+ }) : undefined,
30191
+ subtitle: slots.subtitle ? slotProps => slots.subtitle?.({
30192
+ ...slotProps,
30193
+ item: item.raw,
30194
+ internalItem: item
30132
30195
  }) : undefined
30133
30196
  };
30134
30197
  const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
@@ -30186,7 +30249,7 @@
30186
30249
  collapseIcon: '$treeviewCollapse',
30187
30250
  expandIcon: '$treeviewExpand',
30188
30251
  slim: true
30189
- }), ['itemType', 'nav', 'openStrategy']),
30252
+ }), ['nav', 'openStrategy']),
30190
30253
  modelValue: {
30191
30254
  type: Array,
30192
30255
  default: () => []
@@ -30806,7 +30869,7 @@
30806
30869
  goTo
30807
30870
  };
30808
30871
  }
30809
- const version$1 = "3.7.9";
30872
+ const version$1 = "3.7.10";
30810
30873
  createVuetify$1.version = version$1;
30811
30874
 
30812
30875
  // Vue's inject() can only be used in setup
@@ -31059,7 +31122,7 @@
31059
31122
 
31060
31123
  /* eslint-disable local-rules/sort-imports */
31061
31124
 
31062
- const version = "3.7.9";
31125
+ const version = "3.7.10";
31063
31126
 
31064
31127
  /* eslint-disable local-rules/sort-imports */
31065
31128