vuetify 3.7.7 → 3.7.8

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 (92) hide show
  1. package/dist/json/attributes.json +3260 -3256
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +152 -152
  4. package/dist/json/tags.json +1 -0
  5. package/dist/json/web-types.json +6188 -6287
  6. package/dist/vuetify-labs.css +3878 -3860
  7. package/dist/vuetify-labs.d.ts +909 -1131
  8. package/dist/vuetify-labs.esm.js +77 -57
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +77 -57
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +3217 -3205
  13. package/dist/vuetify.d.ts +155 -163
  14. package/dist/vuetify.esm.js +70 -51
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +70 -51
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +42 -45
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +1 -0
  22. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  23. package/lib/components/VDataIterator/index.d.mts +0 -1
  24. package/lib/components/VDataTable/VDataTable.css +2 -2
  25. package/lib/components/VDataTable/VDataTable.mjs +3 -1
  26. package/lib/components/VDataTable/VDataTable.mjs.map +1 -1
  27. package/lib/components/VDataTable/VDataTable.sass +2 -2
  28. package/lib/components/VDataTable/VDataTableHeaders.mjs +6 -4
  29. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  30. package/lib/components/VDataTable/VDataTableServer.mjs +5 -5
  31. package/lib/components/VDataTable/VDataTableServer.mjs.map +1 -1
  32. package/lib/components/VDataTable/VDataTableVirtual.mjs +5 -5
  33. package/lib/components/VDataTable/VDataTableVirtual.mjs.map +1 -1
  34. package/lib/components/VDataTable/composables/group.mjs +1 -1
  35. package/lib/components/VDataTable/composables/group.mjs.map +1 -1
  36. package/lib/components/VDataTable/composables/paginate.mjs +2 -0
  37. package/lib/components/VDataTable/composables/paginate.mjs.map +1 -1
  38. package/lib/components/VDataTable/index.d.mts +38 -46
  39. package/lib/components/VDataTable/types.mjs.map +1 -1
  40. package/lib/components/VFab/VFab.css +5 -1
  41. package/lib/components/VFab/VFab.mjs +1 -2
  42. package/lib/components/VFab/VFab.mjs.map +1 -1
  43. package/lib/components/VFab/VFab.sass +5 -1
  44. package/lib/components/VField/VField.css +9 -1
  45. package/lib/components/VField/VField.mjs +6 -13
  46. package/lib/components/VField/VField.mjs.map +1 -1
  47. package/lib/components/VField/VField.sass +10 -2
  48. package/lib/components/VImg/VImg.mjs +2 -2
  49. package/lib/components/VImg/VImg.mjs.map +1 -1
  50. package/lib/components/VInput/InputIcon.mjs +10 -2
  51. package/lib/components/VInput/InputIcon.mjs.map +1 -1
  52. package/lib/components/VInput/VInput.mjs +4 -2
  53. package/lib/components/VInput/VInput.mjs.map +1 -1
  54. package/lib/components/VMenu/VMenu.mjs +1 -1
  55. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  56. package/lib/components/VMessages/VMessages.mjs +1 -3
  57. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  58. package/lib/components/VPagination/VPagination.mjs +1 -1
  59. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  60. package/lib/components/VSelect/VSelect.mjs +1 -1
  61. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  62. package/lib/components/VSlider/slider.mjs +2 -2
  63. package/lib/components/VSlider/slider.mjs.map +1 -1
  64. package/lib/components/VStepper/VStepperItem.mjs.map +1 -1
  65. package/lib/components/VStepper/index.d.mts +66 -66
  66. package/lib/components/index.d.mts +104 -112
  67. package/lib/composables/calendar.mjs +4 -1
  68. package/lib/composables/calendar.mjs.map +1 -1
  69. package/lib/composables/display.mjs +11 -4
  70. package/lib/composables/display.mjs.map +1 -1
  71. package/lib/composables/router.mjs +2 -2
  72. package/lib/composables/router.mjs.map +1 -1
  73. package/lib/entry-bundler.mjs +1 -1
  74. package/lib/framework.mjs +1 -1
  75. package/lib/index.d.mts +51 -51
  76. package/lib/labs/VStepperVertical/VStepperVertical.mjs.map +1 -1
  77. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +1 -2
  78. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs.map +1 -1
  79. package/lib/labs/VStepperVertical/index.d.mts +585 -774
  80. package/lib/labs/VTimePicker/VTimePicker.mjs +1 -1
  81. package/lib/labs/VTimePicker/VTimePicker.mjs.map +1 -1
  82. package/lib/labs/VTreeview/VTreeviewChildren.mjs +3 -1
  83. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  84. package/lib/labs/VTreeview/VTreeviewItem.css +6 -0
  85. package/lib/labs/VTreeview/VTreeviewItem.mjs +2 -2
  86. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  87. package/lib/labs/VTreeview/VTreeviewItem.sass +6 -0
  88. package/lib/labs/VTreeview/_variables.scss +1 -0
  89. package/lib/labs/components.d.mts +567 -781
  90. package/lib/util/helpers.mjs +3 -0
  91. package/lib/util/helpers.mjs.map +1 -1
  92. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.7
2
+ * Vuetify v3.7.8
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -464,6 +464,9 @@ function includes(arr, val) {
464
464
  function eventName(propName) {
465
465
  return propName[2].toLowerCase() + propName.slice(3);
466
466
  }
467
+
468
+ // TODO: this should be an array but vue's types don't accept arrays: vuejs/core#8025
469
+
467
470
  const EventProp = () => [Function, Array];
468
471
  function hasEvent(props, name) {
469
472
  name = 'on' + capitalize(name);
@@ -3445,10 +3448,10 @@ const VImg = genericComponent()({
3445
3448
  "style": {
3446
3449
  objectPosition: props.position
3447
3450
  },
3451
+ "crossorigin": props.crossorigin,
3448
3452
  "src": normalisedSrc.value.src,
3449
3453
  "srcset": normalisedSrc.value.srcset,
3450
3454
  "alt": props.alt,
3451
- "crossorigin": props.crossorigin,
3452
3455
  "referrerpolicy": props.referrerpolicy,
3453
3456
  "draggable": props.draggable,
3454
3457
  "sizes": props.sizes,
@@ -3474,9 +3477,9 @@ const VImg = genericComponent()({
3474
3477
  "style": {
3475
3478
  objectPosition: props.position
3476
3479
  },
3480
+ "crossorigin": props.crossorigin,
3477
3481
  "src": normalisedSrc.value.lazySrc,
3478
3482
  "alt": props.alt,
3479
- "crossorigin": props.crossorigin,
3480
3483
  "referrerpolicy": props.referrerpolicy,
3481
3484
  "draggable": props.draggable
3482
3485
  }, null)]
@@ -5212,10 +5215,10 @@ function useBackButton(router, cb) {
5212
5215
  let popped = false;
5213
5216
  let removeBefore;
5214
5217
  let removeAfter;
5215
- if (IN_BROWSER) {
5218
+ if (IN_BROWSER && router?.beforeEach) {
5216
5219
  nextTick(() => {
5217
5220
  window.addEventListener('popstate', onPopstate);
5218
- removeBefore = router?.beforeEach((to, from, next) => {
5221
+ removeBefore = router.beforeEach((to, from, next) => {
5219
5222
  if (!inTransition) {
5220
5223
  setTimeout(() => popped ? cb(next) : next());
5221
5224
  } else {
@@ -6457,11 +6460,18 @@ function useInputIcon(props) {
6457
6460
  clear: 'clear'
6458
6461
  }[name];
6459
6462
  const listener = props[`onClick:${name}`];
6463
+ function onKeydown(e) {
6464
+ if (e.key !== 'Enter' && e.key !== ' ') return;
6465
+ e.preventDefault();
6466
+ e.stopPropagation();
6467
+ callEvent(listener, new PointerEvent('click', e));
6468
+ }
6460
6469
  const label = listener && localeKey ? t(`$vuetify.input.${localeKey}`, props.label ?? '') : undefined;
6461
6470
  return createVNode(VIcon, {
6462
6471
  "icon": props[`${name}Icon`],
6463
6472
  "aria-label": label,
6464
- "onClick": listener
6473
+ "onClick": listener,
6474
+ "onKeydown": onKeydown
6465
6475
  }, null);
6466
6476
  }
6467
6477
  return {
@@ -6503,9 +6513,7 @@ const VMessages = genericComponent()({
6503
6513
  "transition": props.transition,
6504
6514
  "tag": "div",
6505
6515
  "class": ['v-messages', textColorClasses.value, props.class],
6506
- "style": [textColorStyles.value, props.style],
6507
- "role": "alert",
6508
- "aria-live": "polite"
6516
+ "style": [textColorStyles.value, props.style]
6509
6517
  }, {
6510
6518
  default: () => [props.active && messages.value.map((message, i) => createVNode("div", {
6511
6519
  "class": "v-messages__message",
@@ -6974,9 +6982,11 @@ const VInput = genericComponent()({
6974
6982
  "key": "append-icon",
6975
6983
  "name": "append"
6976
6984
  }, null), slots.append?.(slotProps.value)]), hasDetails && createVNode("div", {
6977
- "class": "v-input__details"
6978
- }, [createVNode(VMessages, {
6979
6985
  "id": messagesId.value,
6986
+ "class": "v-input__details",
6987
+ "role": "alert",
6988
+ "aria-live": "polite"
6989
+ }, [createVNode(VMessages, {
6980
6990
  "active": hasMessages,
6981
6991
  "messages": messages.value
6982
6992
  }, {
@@ -7196,10 +7206,17 @@ function useDisplay() {
7196
7206
  const display = inject$1(DisplaySymbol);
7197
7207
  if (!display) throw new Error('Could not find Vuetify display injection');
7198
7208
  const mobile = computed(() => {
7199
- if (props.mobile != null) return props.mobile;
7200
- if (!props.mobileBreakpoint) return display.mobile.value;
7201
- const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
7202
- return display.width.value < breakpointValue;
7209
+ if (props.mobile) {
7210
+ return true;
7211
+ } else if (typeof props.mobileBreakpoint === 'number') {
7212
+ return display.width.value < props.mobileBreakpoint;
7213
+ } else if (props.mobileBreakpoint) {
7214
+ return display.width.value < display.thresholds.value[props.mobileBreakpoint];
7215
+ } else if (props.mobile === null) {
7216
+ return display.mobile.value;
7217
+ } else {
7218
+ return false;
7219
+ }
7203
7220
  });
7204
7221
  const displayClasses = computed(() => {
7205
7222
  if (!name) return {};
@@ -11322,7 +11339,7 @@ const VMenu = genericComponent()({
11322
11339
  const activatorProps = computed(() => mergeProps({
11323
11340
  'aria-haspopup': 'menu',
11324
11341
  'aria-expanded': String(isActive.value),
11325
- 'aria-owns': id.value,
11342
+ 'aria-controls': id.value,
11326
11343
  onKeydown: onActivatorKeydown
11327
11344
  }, props.activatorProps));
11328
11345
  useRender(() => {
@@ -11512,7 +11529,8 @@ const VField = genericComponent()({
11512
11529
  rtlClasses
11513
11530
  } = useRtl();
11514
11531
  const isActive = computed(() => props.dirty || props.active);
11515
- const hasLabel = computed(() => !props.singleLine && !!(props.label || slots.label));
11532
+ const hasLabel = computed(() => !!(props.label || slots.label));
11533
+ const hasFloatingLabel = computed(() => !props.singleLine && hasLabel.value);
11516
11534
  const uid = getUid();
11517
11535
  const id = computed(() => props.id || `input-${uid}`);
11518
11536
  const messagesId = computed(() => `${id.value}-messages`);
@@ -11531,7 +11549,7 @@ const VField = genericComponent()({
11531
11549
  return props.error || props.disabled ? undefined : isActive.value && isFocused.value ? props.color : props.baseColor;
11532
11550
  }));
11533
11551
  watch(isActive, val => {
11534
- if (hasLabel.value) {
11552
+ if (hasFloatingLabel.value) {
11535
11553
  const el = labelRef.value.$el;
11536
11554
  const targetEl = floatingLabelRef.value.$el;
11537
11555
  requestAnimationFrame(() => {
@@ -11579,12 +11597,6 @@ const VField = genericComponent()({
11579
11597
  e.preventDefault();
11580
11598
  }
11581
11599
  }
11582
- function onKeydownClear(e) {
11583
- if (e.key !== 'Enter' && e.key !== ' ') return;
11584
- e.preventDefault();
11585
- e.stopPropagation();
11586
- props['onClick:clear']?.(new MouseEvent('click'));
11587
- }
11588
11600
  useRender(() => {
11589
11601
  const isOutlined = props.variant === 'outlined';
11590
11602
  const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
@@ -11633,7 +11645,7 @@ const VField = genericComponent()({
11633
11645
  }, null), slots['prepend-inner']?.(slotProps.value)]), createVNode("div", {
11634
11646
  "class": "v-field__field",
11635
11647
  "data-no-activator": ""
11636
- }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasLabel.value && createVNode(VFieldLabel, {
11648
+ }, [['filled', 'solo', 'solo-inverted', 'solo-filled'].includes(props.variant) && hasFloatingLabel.value && createVNode(VFieldLabel, {
11637
11649
  "key": "floating-label",
11638
11650
  "ref": floatingLabelRef,
11639
11651
  "class": [textColorClasses.value],
@@ -11676,14 +11688,12 @@ const VField = genericComponent()({
11676
11688
  default: () => [slots.clear ? slots.clear({
11677
11689
  ...slotProps.value,
11678
11690
  props: {
11679
- onKeydown: onKeydownClear,
11680
11691
  onFocus: focus,
11681
11692
  onBlur: blur,
11682
11693
  onClick: props['onClick:clear']
11683
11694
  }
11684
11695
  }) : createVNode(InputIcon, {
11685
11696
  "name": "clear",
11686
- "onKeydown": onKeydownClear,
11687
11697
  "onFocus": focus,
11688
11698
  "onBlur": blur
11689
11699
  }, null)]
@@ -11699,7 +11709,7 @@ const VField = genericComponent()({
11699
11709
  "style": textColorStyles.value
11700
11710
  }, [isOutlined && createVNode(Fragment, null, [createVNode("div", {
11701
11711
  "class": "v-field__outline__start"
11702
- }, null), hasLabel.value && createVNode("div", {
11712
+ }, null), hasFloatingLabel.value && createVNode("div", {
11703
11713
  "class": "v-field__outline__notch"
11704
11714
  }, [createVNode(VFieldLabel, {
11705
11715
  "ref": floatingLabelRef,
@@ -11709,7 +11719,7 @@ const VField = genericComponent()({
11709
11719
  default: () => [label()]
11710
11720
  })]), createVNode("div", {
11711
11721
  "class": "v-field__outline__end"
11712
- }, null)]), isPlainOrUnderlined.value && hasLabel.value && createVNode(VFieldLabel, {
11722
+ }, null)]), isPlainOrUnderlined.value && hasFloatingLabel.value && createVNode(VFieldLabel, {
11713
11723
  "ref": floatingLabelRef,
11714
11724
  "floating": true,
11715
11725
  "for": id.value
@@ -12532,7 +12542,7 @@ const VSelect = genericComponent()({
12532
12542
  // html select hotkeys
12533
12543
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12534
12544
 
12535
- if (props.multiple || !checkPrintable(e)) return;
12545
+ if (!checkPrintable(e)) return;
12536
12546
  const now = performance.now();
12537
12547
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
12538
12548
  keyboardLookupPrefix = '';
@@ -13922,6 +13932,7 @@ const VBreadcrumbsDivider = genericComponent()({
13922
13932
  slots
13923
13933
  } = _ref;
13924
13934
  useRender(() => createVNode("li", {
13935
+ "aria-hidden": "true",
13925
13936
  "class": ['v-breadcrumbs-divider', props.class],
13926
13937
  "style": props.style
13927
13938
  }, [slots?.default?.() ?? props.divider]));
@@ -15546,7 +15557,6 @@ const useSlider = _ref => {
15546
15557
  const handleStart = e => {
15547
15558
  activeThumbRef.value = getActiveThumb(e);
15548
15559
  if (!activeThumbRef.value) return;
15549
- activeThumbRef.value.focus();
15550
15560
  mousePressed.value = true;
15551
15561
  if (activeThumbRef.value.contains(e.target)) {
15552
15562
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
@@ -15559,6 +15569,7 @@ const useSlider = _ref => {
15559
15569
  onSliderStart({
15560
15570
  value: parseMouseMove(e)
15561
15571
  });
15572
+ nextTick(() => activeThumbRef.value?.focus());
15562
15573
  };
15563
15574
  const moveListenerOptions = {
15564
15575
  passive: true,
@@ -18280,7 +18291,7 @@ function provideGroupBy(options) {
18280
18291
  arr.push(item);
18281
18292
  }
18282
18293
  }
18283
- return arr;
18294
+ return [...new Set(arr)];
18284
18295
  }
18285
18296
  return dive({
18286
18297
  type: 'group',
@@ -18506,6 +18517,8 @@ function usePaginatedItems(options) {
18506
18517
  });
18507
18518
  watch(paginatedItems, val => {
18508
18519
  vm.emit('update:currentItems', val);
18520
+ }, {
18521
+ immediate: true
18509
18522
  });
18510
18523
  return {
18511
18524
  paginatedItems
@@ -19230,7 +19243,7 @@ const VPagination = genericComponent()({
19230
19243
  const rangeStart = length.value - rangeLength + start.value;
19231
19244
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
19232
19245
  } else {
19233
- const rangeLength = Math.max(1, totalVisible.value - 3);
19246
+ const rangeLength = Math.max(1, totalVisible.value - 2);
19234
19247
  const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
19235
19248
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
19236
19249
  }
@@ -19830,8 +19843,8 @@ function useHeaders() {
19830
19843
 
19831
19844
  const makeVDataTableHeadersProps = propsFactory({
19832
19845
  color: String,
19833
- sticky: Boolean,
19834
19846
  disableSort: Boolean,
19847
+ fixedHeader: Boolean,
19835
19848
  multiSort: Boolean,
19836
19849
  sortAscIcon: {
19837
19850
  type: IconValue,
@@ -19844,6 +19857,8 @@ const makeVDataTableHeadersProps = propsFactory({
19844
19857
  headerProps: {
19845
19858
  type: Object
19846
19859
  },
19860
+ /** @deprecated */
19861
+ sticky: Boolean,
19847
19862
  ...makeDisplayProps(),
19848
19863
  ...makeLoaderProps()
19849
19864
  }, 'VDataTableHeaders');
@@ -19876,11 +19891,11 @@ const VDataTableHeaders = genericComponent()({
19876
19891
  loaderClasses
19877
19892
  } = useLoader(props);
19878
19893
  function getFixedStyles(column, y) {
19879
- if (!props.sticky && !column.fixed) return undefined;
19894
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
19880
19895
  return {
19881
19896
  position: 'sticky',
19882
19897
  left: column.fixed ? convertToUnit(column.fixedOffset) : undefined,
19883
- top: props.sticky ? `calc(var(--v-table-header-height) * ${y})` : undefined
19898
+ top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
19884
19899
  };
19885
19900
  }
19886
19901
  function getSortIcon(column) {
@@ -19908,7 +19923,7 @@ const VDataTableHeaders = genericComponent()({
19908
19923
  getSortIcon
19909
19924
  }));
19910
19925
  const headerCellClasses = computed(() => ['v-data-table__th', {
19911
- 'v-data-table__th--sticky': props.sticky
19926
+ 'v-data-table__th--sticky': props.sticky || props.fixedHeader
19912
19927
  }, displayClasses.value, loaderClasses.value]);
19913
19928
  const VDataTableHeaderCell = _ref2 => {
19914
19929
  let {
@@ -20663,7 +20678,9 @@ const VDataTable = genericComponent()({
20663
20678
  'v-data-table--loading': props.loading
20664
20679
  }, props.class],
20665
20680
  "style": props.style
20666
- }, tableProps), {
20681
+ }, tableProps, {
20682
+ "fixedHeader": props.fixedHeader || props.sticky
20683
+ }), {
20667
20684
  top: () => slots.top?.(slotProps.value),
20668
20685
  default: () => slots.default ? slots.default(slotProps.value) : createVNode(Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createVNode("thead", {
20669
20686
  "key": "thead"
@@ -20835,7 +20852,9 @@ const VDataTableVirtual = genericComponent()({
20835
20852
  'v-data-table--loading': props.loading
20836
20853
  }, props.class],
20837
20854
  "style": props.style
20838
- }, tableProps), {
20855
+ }, tableProps, {
20856
+ "fixedHeader": props.fixedHeader || props.sticky
20857
+ }), {
20839
20858
  top: () => slots.top?.(slotProps.value),
20840
20859
  wrapper: () => createVNode("div", {
20841
20860
  "ref": containerRef,
@@ -20847,9 +20866,7 @@ const VDataTableVirtual = genericComponent()({
20847
20866
  }
20848
20867
  }, [createVNode("table", null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createVNode("thead", {
20849
20868
  "key": "thead"
20850
- }, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
20851
- "sticky": props.fixedHeader
20852
- }), slots)]), !props.hideDefaultBody && createVNode("tbody", null, [createVNode("tr", {
20869
+ }, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), !props.hideDefaultBody && createVNode("tbody", null, [createVNode("tr", {
20853
20870
  "ref": markerRef,
20854
20871
  "style": {
20855
20872
  height: convertToUnit(paddingTop.value),
@@ -21054,15 +21071,15 @@ const VDataTableServer = genericComponent()({
21054
21071
  'v-data-table--loading': props.loading
21055
21072
  }, props.class],
21056
21073
  "style": props.style
21057
- }, tableProps), {
21074
+ }, tableProps, {
21075
+ "fixedHeader": props.fixedHeader || props.sticky
21076
+ }), {
21058
21077
  top: () => slots.top?.(slotProps.value),
21059
21078
  default: () => slots.default ? slots.default(slotProps.value) : createVNode(Fragment, null, [slots.colgroup?.(slotProps.value), !props.hideDefaultHeader && createVNode("thead", {
21060
21079
  "key": "thead",
21061
21080
  "class": "v-data-table__thead",
21062
21081
  "role": "rowgroup"
21063
- }, [createVNode(VDataTableHeaders, mergeProps(dataTableHeadersProps, {
21064
- "sticky": props.fixedHeader
21065
- }), slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createVNode("tbody", {
21082
+ }, [createVNode(VDataTableHeaders, dataTableHeadersProps, slots)]), slots.thead?.(slotProps.value), !props.hideDefaultBody && createVNode("tbody", {
21066
21083
  "class": "v-data-table__tbody",
21067
21084
  "role": "rowgroup"
21068
21085
  }, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
@@ -21579,12 +21596,15 @@ function useCalendar(props) {
21579
21596
  const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
21580
21597
  return adapter.setMonth(date, value);
21581
21598
  }, v => adapter.getMonth(v));
21599
+ const defaultFirstDayOfWeek = computed(() => {
21600
+ return props.firstDayOfWeek ?? props.weekdays[0];
21601
+ });
21582
21602
  const weekDays = computed(() => {
21583
21603
  const firstDayOfWeek = Number(props.firstDayOfWeek ?? 0);
21584
21604
  return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
21585
21605
  });
21586
21606
  const weeksInMonth = computed(() => {
21587
- const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek);
21607
+ const weeks = adapter.getWeekArray(month.value, defaultFirstDayOfWeek.value);
21588
21608
  const days = weeks.flat();
21589
21609
 
21590
21610
  // Make sure there's always 6 weeks in month (6 * 7 days)
@@ -22821,8 +22841,7 @@ const VFab = genericComponent()({
22821
22841
  "style": [props.app ? {
22822
22842
  ...layoutItemStyles.value
22823
22843
  } : {
22824
- height: 'inherit',
22825
- width: undefined
22844
+ height: props.absolute ? '100%' : 'inherit'
22826
22845
  }, props.style]
22827
22846
  }, [createVNode("div", {
22828
22847
  "class": "v-fab__container"
@@ -28883,8 +28902,7 @@ const VStepperVerticalItem = genericComponent()({
28883
28902
  hasCompleted: hasCompleted.value,
28884
28903
  title: props.title,
28885
28904
  subtitle: props.subtitle,
28886
- step: step.value,
28887
- value: props.value
28905
+ step: step.value
28888
28906
  }));
28889
28907
  const actionProps = computed(() => ({
28890
28908
  ...slotProps.value,
@@ -29842,7 +29860,7 @@ const VTimePicker = genericComponent()({
29842
29860
  emit('update:second', value);
29843
29861
  break;
29844
29862
  }
29845
- const emitChange = selecting.value === (props.useSeconds ? SelectingTimes.Second : SelectingTimes.Minute);
29863
+ const emitChange = inputHour.value !== null && inputMinute.value !== null && (props.useSeconds ? inputSecond.value !== null : true);
29846
29864
  if (selecting.value === SelectingTimes.Hour) {
29847
29865
  selecting.value = SelectingTimes.Minute;
29848
29866
  } else if (props.useSeconds && selecting.value === SelectingTimes.Minute) {
@@ -29992,10 +30010,10 @@ const VTreeviewItem = genericComponent()({
29992
30010
  }), {
29993
30011
  ...slots,
29994
30012
  prepend: hasPrepend ? slotProps => {
29995
- return createVNode(Fragment, null, [props.toggleIcon && createVNode(VListItemAction, {
30013
+ return createVNode(Fragment, null, [createVNode(VListItemAction, {
29996
30014
  "start": false
29997
30015
  }, {
29998
- default: () => [createVNode(VBtn, {
30016
+ default: () => [props.toggleIcon && createVNode(VBtn, {
29999
30017
  "density": "compact",
30000
30018
  "icon": props.toggleIcon,
30001
30019
  "loading": props.loading,
@@ -30021,6 +30039,7 @@ const VTreeviewItem = genericComponent()({
30021
30039
  // Types
30022
30040
 
30023
30041
  const makeVTreeviewChildrenProps = propsFactory({
30042
+ disabled: Boolean,
30024
30043
  loadChildren: Function,
30025
30044
  loadingIcon: {
30026
30045
  type: String,
@@ -30050,7 +30069,7 @@ const VTreeviewChildren = genericComponent()({
30050
30069
  slots
30051
30070
  } = _ref;
30052
30071
  const isLoading = reactive(new Set());
30053
- const isClickOnOpen = computed(() => props.openOnClick != null ? props.openOnClick : props.selectable);
30072
+ const isClickOnOpen = computed(() => !props.disabled && (props.openOnClick != null ? props.openOnClick : props.selectable));
30054
30073
  async function checkChildren(item) {
30055
30074
  try {
30056
30075
  if (!props.items?.length || !props.loadChildren) return;
@@ -30077,6 +30096,7 @@ const VTreeviewChildren = genericComponent()({
30077
30096
  prepend: slotProps => createVNode(Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && createVNode("div", null, [createVNode(VCheckboxBtn, {
30078
30097
  "key": item.value,
30079
30098
  "modelValue": slotProps.isSelected,
30099
+ "disabled": props.disabled,
30080
30100
  "loading": loading,
30081
30101
  "color": props.selectedColor,
30082
30102
  "indeterminate": slotProps.isIndeterminate,
@@ -30780,7 +30800,7 @@ function createVuetify$1() {
30780
30800
  goTo
30781
30801
  };
30782
30802
  }
30783
- const version$1 = "3.7.7";
30803
+ const version$1 = "3.7.8";
30784
30804
  createVuetify$1.version = version$1;
30785
30805
 
30786
30806
  // Vue's inject() can only be used in setup
@@ -31033,7 +31053,7 @@ var index = /*#__PURE__*/Object.freeze({
31033
31053
 
31034
31054
  /* eslint-disable local-rules/sort-imports */
31035
31055
 
31036
- const version = "3.7.7";
31056
+ const version = "3.7.8";
31037
31057
 
31038
31058
  /* eslint-disable local-rules/sort-imports */
31039
31059