@vuetify/nightly 3.5.7-master.2024-03-05 → 3.5.8-dev.2024-03-13

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 (101) hide show
  1. package/CHANGELOG.md +11 -7
  2. package/dist/json/attributes.json +229 -77
  3. package/dist/json/importMap-labs.json +4 -0
  4. package/dist/json/importMap.json +136 -136
  5. package/dist/json/tags.json +43 -0
  6. package/dist/json/web-types.json +539 -144
  7. package/dist/vuetify-labs.css +4771 -4747
  8. package/dist/vuetify-labs.d.ts +787 -147
  9. package/dist/vuetify-labs.esm.js +168 -76
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +167 -75
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +586 -570
  14. package/dist/vuetify.d.ts +264 -186
  15. package/dist/vuetify.esm.js +119 -74
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +118 -73
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +931 -927
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/index.d.mts +5 -2
  23. package/lib/blueprints/md1.d.mts +5 -2
  24. package/lib/blueprints/md2.d.mts +5 -2
  25. package/lib/blueprints/md3.d.mts +5 -2
  26. package/lib/components/VApp/VApp.mjs +5 -2
  27. package/lib/components/VApp/VApp.mjs.map +1 -1
  28. package/lib/components/VApp/index.d.mts +6 -6
  29. package/lib/components/VAppBar/VAppBar.mjs +5 -5
  30. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  31. package/lib/components/VAppBar/index.d.mts +2 -2
  32. package/lib/components/VBottomNavigation/VBottomNavigation.mjs +5 -3
  33. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  34. package/lib/components/VBottomNavigation/index.d.mts +2 -2
  35. package/lib/components/VDatePicker/VDatePickerMonth.mjs +1 -1
  36. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  37. package/lib/components/VFooter/VFooter.mjs +3 -2
  38. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  39. package/lib/components/VForm/index.d.mts +21 -0
  40. package/lib/components/VInput/VInput.sass +1 -1
  41. package/lib/components/VInput/_variables.scss +1 -0
  42. package/lib/components/VLabel/VLabel.sass +1 -1
  43. package/lib/components/VLabel/_variables.scss +1 -0
  44. package/lib/components/VLayout/VLayout.mjs +5 -2
  45. package/lib/components/VLayout/VLayout.mjs.map +1 -1
  46. package/lib/components/VLayout/VLayoutItem.mjs +6 -4
  47. package/lib/components/VLayout/VLayoutItem.mjs.map +1 -1
  48. package/lib/components/VLayout/index.d.mts +9 -9
  49. package/lib/components/VMain/VMain.mjs +3 -2
  50. package/lib/components/VMain/VMain.mjs.map +1 -1
  51. package/lib/components/VMain/index.d.mts +2 -2
  52. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +7 -7
  53. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  54. package/lib/components/VSnackbar/VSnackbar.mjs +4 -2
  55. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  56. package/lib/components/VSnackbar/index.d.mts +147 -119
  57. package/lib/components/index.d.mts +207 -140
  58. package/lib/components/transitions/createTransition.mjs +4 -2
  59. package/lib/components/transitions/createTransition.mjs.map +1 -1
  60. package/lib/components/transitions/index.d.mts +18 -0
  61. package/lib/composables/date/DateAdapter.mjs.map +1 -1
  62. package/lib/composables/date/adapters/vuetify.mjs +39 -3
  63. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  64. package/lib/composables/form.mjs +3 -1
  65. package/lib/composables/form.mjs.map +1 -1
  66. package/lib/composables/icons.mjs +2 -1
  67. package/lib/composables/icons.mjs.map +1 -1
  68. package/lib/composables/layout.mjs +14 -37
  69. package/lib/composables/layout.mjs.map +1 -1
  70. package/lib/composables/transition.mjs +7 -5
  71. package/lib/composables/transition.mjs.map +1 -1
  72. package/lib/composables/validation.mjs +3 -1
  73. package/lib/composables/validation.mjs.map +1 -1
  74. package/lib/entry-bundler.mjs +1 -1
  75. package/lib/entry-bundler.mjs.map +1 -1
  76. package/lib/framework.mjs +1 -1
  77. package/lib/framework.mjs.map +1 -1
  78. package/lib/index.d.mts +57 -46
  79. package/lib/labs/VCalendar/VCalendarInterval.css +1 -0
  80. package/lib/labs/VCalendar/VCalendarInterval.sass +1 -0
  81. package/lib/labs/VCalendar/VCalendarIntervalEvent.css +6 -0
  82. package/lib/labs/VCalendar/VCalendarIntervalEvent.mjs +5 -2
  83. package/lib/labs/VCalendar/VCalendarIntervalEvent.mjs.map +1 -1
  84. package/lib/labs/VCalendar/VCalendarIntervalEvent.sass +6 -0
  85. package/lib/labs/VFab/VFab.css +1 -1
  86. package/lib/labs/VFab/VFab.sass +1 -1
  87. package/lib/labs/VSpeedDial/VSpeedDial.css +3 -0
  88. package/lib/labs/VSpeedDial/VSpeedDial.mjs +56 -0
  89. package/lib/labs/VSpeedDial/VSpeedDial.mjs.map +1 -0
  90. package/lib/labs/VSpeedDial/VSpeedDial.sass +2 -0
  91. package/lib/labs/VSpeedDial/index.d.mts +649 -0
  92. package/lib/labs/VSpeedDial/index.mjs +2 -0
  93. package/lib/labs/VSpeedDial/index.mjs.map +1 -0
  94. package/lib/labs/components.d.mts +637 -2
  95. package/lib/labs/components.mjs +1 -0
  96. package/lib/labs/components.mjs.map +1 -1
  97. package/lib/styles/main.css +16 -0
  98. package/lib/styles/settings/_utilities.scss +20 -0
  99. package/lib/util/helpers.mjs +11 -1
  100. package/lib/util/helpers.mjs.map +1 -1
  101. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.5.7-master.2024-03-05
2
+ * Vuetify v3.5.8-dev.2024-03-13
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, unref, warn, ref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, isVNode, Comment, shallowRef, readonly, unref, warn, ref, provide, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, nextTick, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, createVNode, Suspense, TransitionGroup, Transition, mergeProps, isRef, toRef, onBeforeMount, withDirectives, resolveDirective, vShow, onMounted, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -545,6 +545,16 @@ function defer(timeout, cb) {
545
545
  const timeoutId = window.setTimeout(cb, timeout);
546
546
  return () => window.clearTimeout(timeoutId);
547
547
  }
548
+ function eagerComputed(fn, options) {
549
+ const result = shallowRef();
550
+ watchEffect(() => {
551
+ result.value = fn();
552
+ }, {
553
+ flush: 'sync',
554
+ ...options
555
+ });
556
+ return readonly(result);
557
+ }
548
558
  function isClickInsideElement(event, targetDiv) {
549
559
  const mouseX = event.clientX;
550
560
  const mouseY = event.clientY;
@@ -1619,7 +1629,9 @@ const makeLayoutItemProps = propsFactory({
1619
1629
  function useLayout() {
1620
1630
  const layout = inject$1(VuetifyLayoutKey);
1621
1631
  if (!layout) throw new Error('[Vuetify] Could not find injected layout');
1632
+ const layoutIsReady = nextTick();
1622
1633
  return {
1634
+ layoutIsReady,
1623
1635
  getLayoutItem: layout.getLayoutItem,
1624
1636
  mainRect: layout.mainRect,
1625
1637
  mainStyles: layout.mainStyles
@@ -1636,6 +1648,7 @@ function useLayoutItem(options) {
1636
1648
  const isKeptAlive = shallowRef(false);
1637
1649
  onDeactivated(() => isKeptAlive.value = true);
1638
1650
  onActivated(() => isKeptAlive.value = false);
1651
+ const layoutIsReady = nextTick();
1639
1652
  const {
1640
1653
  layoutItemStyles,
1641
1654
  layoutItemScrimStyles
@@ -1648,7 +1661,8 @@ function useLayoutItem(options) {
1648
1661
  return {
1649
1662
  layoutItemStyles,
1650
1663
  layoutRect: layout.layoutRect,
1651
- layoutItemScrimStyles
1664
+ layoutItemScrimStyles,
1665
+ layoutIsReady
1652
1666
  };
1653
1667
  }
1654
1668
  const generateLayers = (layout, positions, layoutSizes, activeItems) => {
@@ -1694,29 +1708,7 @@ function createLayout(props) {
1694
1708
  resizeRef,
1695
1709
  contentRect: layoutRect
1696
1710
  } = useResizeObserver();
1697
- const computedOverlaps = computed(() => {
1698
- const map = new Map();
1699
- const overlaps = props.overlaps ?? [];
1700
- for (const overlap of overlaps.filter(item => item.includes(':'))) {
1701
- const [top, bottom] = overlap.split(':');
1702
- if (!registered.value.includes(top) || !registered.value.includes(bottom)) continue;
1703
- const topPosition = positions.get(top);
1704
- const bottomPosition = positions.get(bottom);
1705
- const topAmount = layoutSizes.get(top);
1706
- const bottomAmount = layoutSizes.get(bottom);
1707
- if (!topPosition || !bottomPosition || !topAmount || !bottomAmount) continue;
1708
- map.set(bottom, {
1709
- position: topPosition.value,
1710
- amount: parseInt(topAmount.value, 10)
1711
- });
1712
- map.set(top, {
1713
- position: bottomPosition.value,
1714
- amount: -parseInt(bottomAmount.value, 10)
1715
- });
1716
- }
1717
- return map;
1718
- });
1719
- const layers = computed(() => {
1711
+ const layers = eagerComputed(() => {
1720
1712
  const uniquePriorities = [...new Set([...priorities.values()].map(p => p.value))].sort((a, b) => a - b);
1721
1713
  const layout = [];
1722
1714
  for (const p of uniquePriorities) {
@@ -1742,7 +1734,7 @@ function createLayout(props) {
1742
1734
  })
1743
1735
  };
1744
1736
  });
1745
- const items = computed(() => {
1737
+ const items = eagerComputed(() => {
1746
1738
  return layers.value.slice(1).map((_ref, index) => {
1747
1739
  let {
1748
1740
  id
@@ -1764,10 +1756,7 @@ function createLayout(props) {
1764
1756
  return items.value.find(item => item.id === id);
1765
1757
  };
1766
1758
  const rootVm = getCurrentInstance('createLayout');
1767
- const isMounted = shallowRef(false);
1768
- onMounted(() => {
1769
- isMounted.value = true;
1770
- });
1759
+ const layoutIsReady = nextTick();
1771
1760
  provide(VuetifyLayoutKey, {
1772
1761
  register: (vm, _ref2) => {
1773
1762
  let {
@@ -1803,13 +1792,9 @@ function createLayout(props) {
1803
1792
  transition: 'none'
1804
1793
  })
1805
1794
  };
1806
- if (!isMounted.value) return styles;
1795
+ if (index.value < 0) throw new Error(`Layout item "${id}" is missing`);
1807
1796
  const item = items.value[index.value];
1808
1797
  if (!item) throw new Error(`[Vuetify] Could not find layout item "${id}"`);
1809
- const overlap = computedOverlaps.value.get(id);
1810
- if (overlap) {
1811
- item[overlap.position] += overlap.amount;
1812
- }
1813
1798
  return {
1814
1799
  ...styles,
1815
1800
  height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,
@@ -1842,7 +1827,8 @@ function createLayout(props) {
1842
1827
  getLayoutItem,
1843
1828
  items,
1844
1829
  layoutRect,
1845
- rootZIndex
1830
+ rootZIndex,
1831
+ layoutIsReady
1846
1832
  });
1847
1833
  const layoutClasses = computed(() => ['v-layout', {
1848
1834
  'v-layout--full-height': props.fullHeight
@@ -1858,6 +1844,7 @@ function createLayout(props) {
1858
1844
  getLayoutItem,
1859
1845
  items,
1860
1846
  layoutRect,
1847
+ layoutIsReady,
1861
1848
  layoutRef: resizeRef
1862
1849
  };
1863
1850
  }
@@ -2552,7 +2539,9 @@ const VApp = genericComponent()({
2552
2539
  "style": [props.style]
2553
2540
  }, [createVNode("div", {
2554
2541
  "class": "v-application__wrap"
2555
- }, [slots.default?.()])]));
2542
+ }, [createVNode(Suspense, null, {
2543
+ default: () => [createVNode(Fragment, null, [slots.default?.()])]
2544
+ })])]));
2556
2545
  return {
2557
2546
  getLayoutItem,
2558
2547
  items,
@@ -2695,14 +2684,16 @@ function createJavascriptTransition(name, functions) {
2695
2684
  type: String,
2696
2685
  default: mode
2697
2686
  },
2698
- disabled: Boolean
2687
+ disabled: Boolean,
2688
+ group: Boolean
2699
2689
  },
2700
2690
  setup(props, _ref2) {
2701
2691
  let {
2702
2692
  slots
2703
2693
  } = _ref2;
2694
+ const tag = props.group ? TransitionGroup : Transition;
2704
2695
  return () => {
2705
- return h(Transition, {
2696
+ return h(tag, {
2706
2697
  name: props.disabled ? '' : name,
2707
2698
  css: !props.disabled,
2708
2699
  // mode: props.mode, // TODO: vuejs/vue-next#3104
@@ -3160,17 +3151,19 @@ const MaybeTransition = (props, _ref) => {
3160
3151
  const {
3161
3152
  transition,
3162
3153
  disabled,
3154
+ group,
3163
3155
  ...rest
3164
3156
  } = props;
3165
3157
  const {
3166
- component = Transition,
3158
+ component = group ? TransitionGroup : Transition,
3167
3159
  ...customProps
3168
3160
  } = typeof transition === 'object' ? transition : {};
3169
3161
  return h(component, mergeProps(typeof transition === 'string' ? {
3170
3162
  name: disabled ? '' : transition
3171
- } : customProps, rest, {
3172
- disabled
3173
- }), slots);
3163
+ } : customProps, typeof transition === 'string' ? {} : {
3164
+ disabled,
3165
+ group
3166
+ }, rest), slots);
3174
3167
  };
3175
3168
 
3176
3169
  // Utilities
@@ -3889,9 +3882,8 @@ const VAppBar = genericComponent()({
3889
3882
  const isFlat = computed(() => props.flat || scrollBehavior.value.elevate && (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0));
3890
3883
  const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3891
3884
  const height = computed(() => {
3892
- if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
3893
- const height = vToolbarRef.value?.contentHeight ?? 0;
3894
- const extensionHeight = vToolbarRef.value?.extensionHeight ?? 0;
3885
+ const height = Number(vToolbarRef.value?.contentHeight ?? props.height);
3886
+ const extensionHeight = Number(vToolbarRef.value?.extensionHeight ?? 0);
3895
3887
  return height + extensionHeight;
3896
3888
  });
3897
3889
  useToggleScope(computed(() => !!props.scrollBehavior), () => {
@@ -3911,7 +3903,8 @@ const VAppBar = genericComponent()({
3911
3903
  ssrBootStyles
3912
3904
  } = useSsrBoot();
3913
3905
  const {
3914
- layoutItemStyles
3906
+ layoutItemStyles,
3907
+ layoutIsReady
3915
3908
  } = useLayoutItem({
3916
3909
  id: props.name,
3917
3910
  order: computed(() => parseInt(props.order, 10)),
@@ -3939,7 +3932,7 @@ const VAppBar = genericComponent()({
3939
3932
  "flat": isFlat.value
3940
3933
  }), slots);
3941
3934
  });
3942
- return {};
3935
+ return layoutIsReady;
3943
3936
  }
3944
3937
  });
3945
3938
 
@@ -4486,7 +4479,8 @@ function createIcons(options) {
4486
4479
  ...aliases,
4487
4480
  /* eslint-disable max-len */
4488
4481
  vuetify: ['M8.2241 14.2009L12 21L22 3H14.4459L8.2241 14.2009Z', ['M7.26303 12.4733L7.00113 12L2 3H12.5261C12.5261 3 12.5261 3 12.5261 3L7.26303 12.4733Z', 0.6]],
4489
- 'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z'
4482
+ 'vuetify-outline': 'svg:M7.26 12.47 12.53 3H2L7.26 12.47ZM14.45 3 8.22 14.2 12 21 22 3H14.45ZM18.6 5 12 16.88 10.51 14.2 15.62 5ZM7.26 8.35 5.4 5H9.13L7.26 8.35Z',
4483
+ 'vuetify-play': ['m6.376 13.184-4.11-7.192C1.505 4.66 2.467 3 4.003 3h8.532l-.953 1.576-.006.01-.396.677c-.429.732-.214 1.507.194 2.015.404.503 1.092.878 1.869.806a3.72 3.72 0 0 1 1.005.022c.276.053.434.143.523.237.138.146.38.635-.25 2.09-.893 1.63-1.553 1.722-1.847 1.677-.213-.033-.468-.158-.756-.406a4.95 4.95 0 0 1-.8-.927c-.39-.564-1.04-.84-1.66-.846-.625-.006-1.316.27-1.693.921l-.478.826-.911 1.506Z', ['M9.093 11.552c.046-.079.144-.15.32-.148a.53.53 0 0 1 .43.207c.285.414.636.847 1.046 1.2.405.35.914.662 1.516.754 1.334.205 2.502-.698 3.48-2.495l.014-.028.013-.03c.687-1.574.774-2.852-.005-3.675-.37-.391-.861-.586-1.333-.676a5.243 5.243 0 0 0-1.447-.044c-.173.016-.393-.073-.54-.257-.145-.18-.127-.316-.082-.392l.393-.672L14.287 3h5.71c1.536 0 2.499 1.659 1.737 2.992l-7.997 13.996c-.768 1.344-2.706 1.344-3.473 0l-3.037-5.314 1.377-2.278.004-.006.004-.007.481-.831Z', 0.6]]
4490
4484
  /* eslint-enable max-len */
4491
4485
  }
4492
4486
  }, options);
@@ -6492,6 +6486,7 @@ function createForm(props) {
6492
6486
  register: _ref => {
6493
6487
  let {
6494
6488
  id,
6489
+ vm,
6495
6490
  validate,
6496
6491
  reset,
6497
6492
  resetValidation
@@ -6504,6 +6499,7 @@ function createForm(props) {
6504
6499
  validate,
6505
6500
  reset,
6506
6501
  resetValidation,
6502
+ vm: markRaw(vm),
6507
6503
  isValid: null,
6508
6504
  errorMessages: []
6509
6505
  });
@@ -6618,10 +6614,12 @@ function useValidation(props) {
6618
6614
  [`${name}--readonly`]: isReadonly.value
6619
6615
  };
6620
6616
  });
6617
+ const vm = getCurrentInstance('validation');
6621
6618
  const uid = computed(() => props.name ?? unref(id));
6622
6619
  onBeforeMount(() => {
6623
6620
  form?.register({
6624
6621
  id: uid.value,
6622
+ vm,
6625
6623
  validate,
6626
6624
  reset,
6627
6625
  resetValidation
@@ -12959,9 +12957,10 @@ const VBottomNavigation = genericComponent()({
12959
12957
  ssrBootStyles
12960
12958
  } = useSsrBoot();
12961
12959
  const height = computed(() => Number(props.height) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0));
12962
- const isActive = toRef(props, 'active');
12960
+ const isActive = useProxiedModel(props, 'modelValue', props.modelValue);
12963
12961
  const {
12964
- layoutItemStyles
12962
+ layoutItemStyles,
12963
+ layoutIsReady
12965
12964
  } = useLayoutItem({
12966
12965
  id: props.name,
12967
12966
  order: computed(() => parseInt(props.order, 10)),
@@ -12999,7 +12998,7 @@ const VBottomNavigation = genericComponent()({
12999
12998
  }, [slots.default()])]
13000
12999
  });
13001
13000
  });
13002
- return {};
13001
+ return layoutIsReady;
13003
13002
  }
13004
13003
  });
13005
13004
 
@@ -17335,6 +17334,9 @@ function getMonth(date) {
17335
17334
  function getNextMonth(date) {
17336
17335
  return new Date(date.getFullYear(), date.getMonth() + 1, 1);
17337
17336
  }
17337
+ function getPreviousMonth(date) {
17338
+ return new Date(date.getFullYear(), date.getMonth() - 1, 1);
17339
+ }
17338
17340
  function getHours(date) {
17339
17341
  return date.getHours();
17340
17342
  }
@@ -17357,6 +17359,9 @@ function isValid(date) {
17357
17359
  function isAfter(date, comparing) {
17358
17360
  return date.getTime() > comparing.getTime();
17359
17361
  }
17362
+ function isAfterDay(date, comparing) {
17363
+ return isAfter(startOfDay(date), startOfDay(comparing));
17364
+ }
17360
17365
  function isBefore(date, comparing) {
17361
17366
  return date.getTime() < comparing.getTime();
17362
17367
  }
@@ -17369,13 +17374,34 @@ function isSameDay(date, comparing) {
17369
17374
  function isSameMonth(date, comparing) {
17370
17375
  return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear();
17371
17376
  }
17377
+ function isSameYear(date, comparing) {
17378
+ return date.getFullYear() === comparing.getFullYear();
17379
+ }
17372
17380
  function getDiff(date, comparing, unit) {
17373
17381
  const d = new Date(date);
17374
17382
  const c = new Date(comparing);
17375
- if (unit === 'month') {
17376
- return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
17383
+ switch (unit) {
17384
+ case 'years':
17385
+ return d.getFullYear() - c.getFullYear();
17386
+ case 'quarters':
17387
+ return Math.floor((d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12) / 4);
17388
+ case 'months':
17389
+ return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12;
17390
+ case 'weeks':
17391
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24 * 7));
17392
+ case 'days':
17393
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
17394
+ case 'hours':
17395
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60));
17396
+ case 'minutes':
17397
+ return Math.floor((d.getTime() - c.getTime()) / (1000 * 60));
17398
+ case 'seconds':
17399
+ return Math.floor((d.getTime() - c.getTime()) / 1000);
17400
+ default:
17401
+ {
17402
+ return d.getTime() - c.getTime();
17403
+ }
17377
17404
  }
17378
- return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24));
17379
17405
  }
17380
17406
  function setHours(date, count) {
17381
17407
  const d = new Date(date);
@@ -17465,6 +17491,9 @@ class VuetifyDateAdapter {
17465
17491
  isAfter(date, comparing) {
17466
17492
  return isAfter(date, comparing);
17467
17493
  }
17494
+ isAfterDay(date, comparing) {
17495
+ return isAfterDay(date, comparing);
17496
+ }
17468
17497
  isBefore(date, comparing) {
17469
17498
  return !isAfter(date, comparing) && !isEqual(date, comparing);
17470
17499
  }
@@ -17474,6 +17503,9 @@ class VuetifyDateAdapter {
17474
17503
  isSameMonth(date, comparing) {
17475
17504
  return isSameMonth(date, comparing);
17476
17505
  }
17506
+ isSameYear(date, comparing) {
17507
+ return isSameYear(date, comparing);
17508
+ }
17477
17509
  setMinutes(date, count) {
17478
17510
  return setMinutes(date, count);
17479
17511
  }
@@ -17501,6 +17533,9 @@ class VuetifyDateAdapter {
17501
17533
  getNextMonth(date) {
17502
17534
  return getNextMonth(date);
17503
17535
  }
17536
+ getPreviousMonth(date) {
17537
+ return getPreviousMonth(date);
17538
+ }
17504
17539
  getHours(date) {
17505
17540
  return getHours(date);
17506
17541
  }
@@ -20570,7 +20605,7 @@ const VDatePickerMonth = genericComponent()({
20570
20605
  } else {
20571
20606
  rangeStop.value = _value;
20572
20607
  }
20573
- const diff = adapter.getDiff(rangeStop.value, rangeStart.value);
20608
+ const diff = adapter.getDiff(rangeStop.value, rangeStart.value, 'days');
20574
20609
  const datesInRange = [rangeStart.value];
20575
20610
  for (let i = 1; i < diff; i++) {
20576
20611
  const nextDate = adapter.addDays(rangeStart.value, i);
@@ -21621,7 +21656,8 @@ const VFooter = genericComponent()({
21621
21656
  });
21622
21657
  const height = computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10));
21623
21658
  const {
21624
- layoutItemStyles
21659
+ layoutItemStyles,
21660
+ layoutIsReady
21625
21661
  } = useLayoutItem({
21626
21662
  id: props.name,
21627
21663
  order: computed(() => parseInt(props.order, 10)),
@@ -21638,7 +21674,7 @@ const VFooter = genericComponent()({
21638
21674
  height: convertToUnit(props.height)
21639
21675
  }, props.style]
21640
21676
  }, slots));
21641
- return {};
21677
+ return props.app ? layoutIsReady : {};
21642
21678
  }
21643
21679
  });
21644
21680
 
@@ -22061,7 +22097,9 @@ const VLayout = genericComponent()({
22061
22097
  "ref": layoutRef,
22062
22098
  "class": [layoutClasses.value, props.class],
22063
22099
  "style": [layoutStyles.value, props.style]
22064
- }, [slots.default?.()]));
22100
+ }, [createVNode(Suspense, null, {
22101
+ default: () => [createVNode(Fragment, null, [slots.default?.()])]
22102
+ })]));
22065
22103
  return {
22066
22104
  getLayoutItem,
22067
22105
  items
@@ -22092,7 +22130,8 @@ const VLayoutItem = genericComponent()({
22092
22130
  slots
22093
22131
  } = _ref;
22094
22132
  const {
22095
- layoutItemStyles
22133
+ layoutItemStyles,
22134
+ layoutIsReady
22096
22135
  } = useLayoutItem({
22097
22136
  id: props.name,
22098
22137
  order: computed(() => parseInt(props.order, 10)),
@@ -22102,10 +22141,11 @@ const VLayoutItem = genericComponent()({
22102
22141
  active: toRef(props, 'modelValue'),
22103
22142
  absolute: toRef(props, 'absolute')
22104
22143
  });
22105
- return () => createVNode("div", {
22144
+ useRender(() => createVNode("div", {
22106
22145
  "class": ['v-layout-item', props.class],
22107
22146
  "style": [layoutItemStyles.value, props.style]
22108
- }, [slots.default?.()]);
22147
+ }, [slots.default?.()]));
22148
+ return layoutIsReady;
22109
22149
  }
22110
22150
  });
22111
22151
 
@@ -22212,7 +22252,8 @@ const VMain = genericComponent()({
22212
22252
  slots
22213
22253
  } = _ref;
22214
22254
  const {
22215
- mainStyles
22255
+ mainStyles,
22256
+ layoutIsReady
22216
22257
  } = useLayout();
22217
22258
  const {
22218
22259
  ssrBootStyles
@@ -22227,7 +22268,7 @@ const VMain = genericComponent()({
22227
22268
  "class": "v-main__scroller"
22228
22269
  }, [slots.default?.()]) : slots.default?.()]
22229
22270
  }));
22230
- return {};
22271
+ return layoutIsReady;
22231
22272
  }
22232
22273
  });
22233
22274
 
@@ -22652,10 +22693,9 @@ const VNavigationDrawer = genericComponent()({
22652
22693
  watch(() => props.permanent, val => {
22653
22694
  if (val) isActive.value = true;
22654
22695
  });
22655
- onBeforeMount(() => {
22656
- if (props.modelValue != null || isTemporary.value) return;
22696
+ if (props.modelValue == null && !isTemporary.value) {
22657
22697
  isActive.value = props.permanent || !mobile.value;
22658
- });
22698
+ }
22659
22699
  const {
22660
22700
  isDragging,
22661
22701
  dragProgress,
@@ -22673,7 +22713,8 @@ const VNavigationDrawer = genericComponent()({
22673
22713
  });
22674
22714
  const {
22675
22715
  layoutItemStyles,
22676
- layoutItemScrimStyles
22716
+ layoutItemScrimStyles,
22717
+ layoutIsReady
22677
22718
  } = useLayoutItem({
22678
22719
  id: props.name,
22679
22720
  order: computed(() => parseInt(props.order, 10)),
@@ -22757,9 +22798,9 @@ const VNavigationDrawer = genericComponent()({
22757
22798
  }, scopeId), null)]
22758
22799
  })]);
22759
22800
  });
22760
- return {
22801
+ return layoutIsReady.then(() => ({
22761
22802
  isStuck
22762
- };
22803
+ }));
22763
22804
  }
22764
22805
  });
22765
22806
 
@@ -23759,6 +23800,8 @@ const VSlideGroupItem = genericComponent()({
23759
23800
  }
23760
23801
  });
23761
23802
 
23803
+ // Types
23804
+
23762
23805
  function useCountdown(milliseconds) {
23763
23806
  const time = shallowRef(milliseconds);
23764
23807
  let timer = -1;
@@ -23926,7 +23969,9 @@ const VSnackbar = genericComponent()({
23926
23969
  }, {
23927
23970
  default: () => [createVNode("div", {
23928
23971
  "class": "v-snackbar__actions"
23929
- }, [slots.actions()])]
23972
+ }, [slots.actions({
23973
+ isActive
23974
+ })])]
23930
23975
  })],
23931
23976
  activator: slots.activator
23932
23977
  });
@@ -25509,8 +25554,8 @@ const VCalendarIntervalEvent = genericComponent()({
25509
25554
  return createVNode(VSheet, {
25510
25555
  "height": calcHeight().height,
25511
25556
  "density": "comfortable",
25512
- "style": `width: 100%; margin-top: ${calcHeight().margin}`,
25513
- "class": "align-center pa-1",
25557
+ "style": `margin-top: ${calcHeight().margin}`,
25558
+ "class": "v-calendar-internal-event",
25514
25559
  "color": props.event?.color ?? undefined,
25515
25560
  "rounded": props.event?.first && props.event?.last ? true : props.event?.first ? 't' : props.event?.last ? 'b' : false
25516
25561
  }, {
@@ -26468,6 +26513,52 @@ const VSparkline = genericComponent()({
26468
26513
  }
26469
26514
  });
26470
26515
 
26516
+ const makeVSpeedDialProps = propsFactory({
26517
+ ...makeComponentProps(),
26518
+ ...makeVMenuProps({
26519
+ offset: 8,
26520
+ minWidth: 0,
26521
+ location: 'top center'
26522
+ }),
26523
+ ...makeTransitionProps({
26524
+ transition: 'fade-transition'
26525
+ })
26526
+ }, 'VSpeedDial');
26527
+ const VSpeedDial = genericComponent()({
26528
+ name: 'VSpeedDial',
26529
+ props: makeVSpeedDialProps(),
26530
+ setup(props, _ref) {
26531
+ let {
26532
+ slots
26533
+ } = _ref;
26534
+ useRender(() => {
26535
+ const menuProps = VMenu.filterProps(props);
26536
+ return createVNode(VMenu, mergeProps(menuProps, {
26537
+ "class": props.class,
26538
+ "style": props.style,
26539
+ "contentClass": "v-speed-dial__content"
26540
+ }), {
26541
+ default: () => [createVNode(VDefaultsProvider, {
26542
+ "defaults": {
26543
+ VBtn: {
26544
+ size: 'small'
26545
+ }
26546
+ }
26547
+ }, {
26548
+ default: () => [createVNode(MaybeTransition, {
26549
+ "appear": true,
26550
+ "group": true,
26551
+ "transition": props.transition
26552
+ }, {
26553
+ default: () => [slots.default?.()]
26554
+ })]
26555
+ })]
26556
+ });
26557
+ });
26558
+ return {};
26559
+ }
26560
+ });
26561
+
26471
26562
  // Types
26472
26563
 
26473
26564
  // Types
@@ -26745,6 +26836,7 @@ var components = /*#__PURE__*/Object.freeze({
26745
26836
  VSnackbar: VSnackbar,
26746
26837
  VSpacer: VSpacer,
26747
26838
  VSparkline: VSparkline,
26839
+ VSpeedDial: VSpeedDial,
26748
26840
  VStepper: VStepper,
26749
26841
  VStepperActions: VStepperActions,
26750
26842
  VStepperHeader: VStepperHeader,
@@ -26992,7 +27084,7 @@ function createVuetify$1() {
26992
27084
  goTo
26993
27085
  };
26994
27086
  }
26995
- const version$1 = "3.5.7-master.2024-03-05";
27087
+ const version$1 = "3.5.8-dev.2024-03-13";
26996
27088
  createVuetify$1.version = version$1;
26997
27089
 
26998
27090
  // Vue's inject() can only be used in setup
@@ -27006,7 +27098,7 @@ function inject(key) {
27006
27098
 
27007
27099
  /* eslint-disable local-rules/sort-imports */
27008
27100
 
27009
- const version = "3.5.7-master.2024-03-05";
27101
+ const version = "3.5.8-dev.2024-03-13";
27010
27102
 
27011
27103
  /* eslint-disable local-rules/sort-imports */
27012
27104