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
@@ -1,10 +1,10 @@
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
  */
6
6
 
7
- import { shallowRef, Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, onUnmounted, createTextVNode, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -3208,6 +3208,7 @@ function ExpandTransitionGenerator () {
3208
3208
  },
3209
3209
  onEnter(el) {
3210
3210
  const initialStyle = el._initialStyle;
3211
+ if (!initialStyle) return;
3211
3212
  el.style.setProperty('transition', 'none', 'important');
3212
3213
  // Hide overflow to account for collapsed margins in the calculated height
3213
3214
  el.style.overflow = 'hidden';
@@ -3247,6 +3248,7 @@ function ExpandTransitionGenerator () {
3247
3248
  resetStyles(el);
3248
3249
  }
3249
3250
  function resetStyles(el) {
3251
+ if (!el._initialStyle) return;
3250
3252
  const size = el._initialStyle[sizeProperty];
3251
3253
  el.style.overflow = el._initialStyle.overflow;
3252
3254
  if (size != null) el.style[sizeProperty] = size;
@@ -7434,7 +7436,9 @@ const makeDisplayProps = propsFactory({
7434
7436
  mobileBreakpoint: [Number, String]
7435
7437
  }, 'display');
7436
7438
  function useDisplay() {
7437
- let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7439
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
7440
+ mobile: null
7441
+ };
7438
7442
  let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
7439
7443
  const display = inject$1(DisplaySymbol);
7440
7444
  if (!display) throw new Error('Could not find Vuetify display injection');
@@ -12629,6 +12633,34 @@ function useScrolling(listRef, textFieldRef) {
12629
12633
  }; // typescript doesn't know about vue's event merging
12630
12634
  }
12631
12635
 
12636
+ // https://github.com/vuetifyjs/vuetify/issues/20003
12637
+ /**
12638
+ * This composable is designed to track whether the mouse is in a mousedown state at any given time. The original motivation is that
12639
+ * it is impossible to distinguish whether a blur event is triggered by mousedown, keydown, or via JavaScript.
12640
+ * This composable allows for conditional logic when a blur is triggered by mousedown.
12641
+ */
12642
+
12643
+ function useIsMousedown() {
12644
+ const isMousedown = shallowRef(false);
12645
+ function mousedown() {
12646
+ isMousedown.value = true;
12647
+ }
12648
+ function mouseup() {
12649
+ isMousedown.value = false;
12650
+ }
12651
+ onMounted(() => {
12652
+ document.body.addEventListener('mousedown', mousedown);
12653
+ document.body.addEventListener('mouseup', mouseup);
12654
+ });
12655
+ onUnmounted(() => {
12656
+ document.body.removeEventListener('mousedown', mousedown);
12657
+ document.body.removeEventListener('mouseup', mouseup);
12658
+ });
12659
+ return {
12660
+ isMousedown
12661
+ };
12662
+ }
12663
+
12632
12664
  // Types
12633
12665
 
12634
12666
  const makeSelectProps = propsFactory({
@@ -12718,6 +12750,9 @@ const VSelect = genericComponent()({
12718
12750
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : model.value.length;
12719
12751
  });
12720
12752
  const form = useForm(props);
12753
+ const {
12754
+ isMousedown
12755
+ } = useIsMousedown();
12721
12756
  const selectedValues = computed(() => model.value.map(selection => selection.value));
12722
12757
  const isFocused = shallowRef(false);
12723
12758
  const label = computed(() => menu.value ? props.closeText : props.openText);
@@ -12815,7 +12850,7 @@ const VSelect = genericComponent()({
12815
12850
  }
12816
12851
  }
12817
12852
  function onBlur(e) {
12818
- if (!listRef.value?.$el.contains(e.relatedTarget)) {
12853
+ if (!listRef.value?.$el.contains(e.relatedTarget) && !isMousedown.value) {
12819
12854
  menu.value = false;
12820
12855
  }
12821
12856
  }
@@ -13227,6 +13262,9 @@ const VAutocomplete = genericComponent()({
13227
13262
  textColorClasses,
13228
13263
  textColorStyles
13229
13264
  } = useTextColor(color);
13265
+ const {
13266
+ isMousedown
13267
+ } = useIsMousedown();
13230
13268
  const search = useProxiedModel(props, 'search', '');
13231
13269
  const model = useProxiedModel(props, 'modelValue', [], v => transformIn(v === null ? [null] : wrapInArray(v)), v => {
13232
13270
  const transformed = transformOut(v);
@@ -13400,6 +13438,11 @@ const VAutocomplete = genericComponent()({
13400
13438
  });
13401
13439
  }
13402
13440
  }
13441
+ function onBlur(e) {
13442
+ if (!isMousedown.value) {
13443
+ menu.value = false;
13444
+ }
13445
+ }
13403
13446
  watch(isFocused, (val, oldVal) => {
13404
13447
  if (val === oldVal) return;
13405
13448
  if (val) {
@@ -13409,7 +13452,6 @@ const VAutocomplete = genericComponent()({
13409
13452
  nextTick(() => isSelecting.value = false);
13410
13453
  } else {
13411
13454
  if (!props.multiple && search.value == null) model.value = [];
13412
- menu.value = false;
13413
13455
  if (!model.value.some(_ref3 => {
13414
13456
  let {
13415
13457
  title
@@ -13463,6 +13505,7 @@ const VAutocomplete = genericComponent()({
13463
13505
  "readonly": form.isReadonly.value,
13464
13506
  "placeholder": isDirty ? undefined : props.placeholder,
13465
13507
  "onClick:clear": onClear,
13508
+ "onBlur": onBlur,
13466
13509
  "onMousedown:control": onMousedownControl,
13467
13510
  "onKeydown": onKeydown
13468
13511
  }), {
@@ -17082,6 +17125,9 @@ const VCombobox = genericComponent()({
17082
17125
  return props.multiple ? transformed : transformed[0] ?? null;
17083
17126
  });
17084
17127
  const form = useForm(props);
17128
+ const {
17129
+ isMousedown
17130
+ } = useIsMousedown();
17085
17131
  const hasChips = computed(() => !!(props.chips || slots.chip));
17086
17132
  const hasSelectionSlot = computed(() => hasChips.value || !!slots.selection);
17087
17133
  const _search = shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
@@ -17245,6 +17291,12 @@ const VCombobox = genericComponent()({
17245
17291
  vTextFieldRef.value?.focus();
17246
17292
  }
17247
17293
  }
17294
+ function onBlur(e) {
17295
+ if (!isMousedown.value) {
17296
+ menu.value = false;
17297
+ }
17298
+ }
17299
+
17248
17300
  /** @param set - null means toggle */
17249
17301
  function select(item) {
17250
17302
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
@@ -17289,7 +17341,6 @@ const VCombobox = genericComponent()({
17289
17341
  watch(isFocused, (val, oldVal) => {
17290
17342
  if (val || val === oldVal) return;
17291
17343
  selectionIndex.value = -1;
17292
- menu.value = false;
17293
17344
  if (search.value) {
17294
17345
  if (props.multiple) {
17295
17346
  select(transformItem$3(props, search.value));
@@ -17347,6 +17398,7 @@ const VCombobox = genericComponent()({
17347
17398
  "readonly": form.isReadonly.value,
17348
17399
  "placeholder": isDirty ? undefined : props.placeholder,
17349
17400
  "onClick:clear": onClear,
17401
+ "onBlur": onBlur,
17350
17402
  "onMousedown:control": onMousedownControl,
17351
17403
  "onKeydown": onKeydown
17352
17404
  }), {
@@ -22433,8 +22485,9 @@ const VDatePicker = genericComponent()({
22433
22485
  targets.push(...['prev', 'next']);
22434
22486
  } else {
22435
22487
  let _date = adapter.date();
22436
- _date = adapter.setYear(_date, year.value);
22488
+ _date = adapter.startOfMonth(_date);
22437
22489
  _date = adapter.setMonth(_date, month.value);
22490
+ _date = adapter.setYear(_date, year.value);
22438
22491
  if (minDate.value) {
22439
22492
  const date = adapter.addDays(adapter.startOfMonth(_date), -1);
22440
22493
  adapter.isAfter(minDate.value, date) && targets.push('prev');
@@ -27084,6 +27137,8 @@ const VTabsWindowItem = genericComponent()({
27084
27137
  }
27085
27138
  });
27086
27139
 
27140
+ // Types
27141
+
27087
27142
  function parseItems(items) {
27088
27143
  if (!items) return [];
27089
27144
  return items.map(item => {
@@ -28322,7 +28377,7 @@ function createVuetify$1() {
28322
28377
  goTo
28323
28378
  };
28324
28379
  }
28325
- const version$1 = "3.7.8";
28380
+ const version$1 = "3.7.10";
28326
28381
  createVuetify$1.version = version$1;
28327
28382
 
28328
28383
  // Vue's inject() can only be used in setup
@@ -28347,7 +28402,7 @@ const createVuetify = function () {
28347
28402
  ...options
28348
28403
  });
28349
28404
  };
28350
- const version = "3.7.8";
28405
+ const version = "3.7.10";
28351
28406
  createVuetify.version = version;
28352
28407
 
28353
28408
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };