@vuetify/nightly 3.9.0-beta.1-dev.2025-06-28 → 3.9.0-beta.1-dev.2025-07-04

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 (99) hide show
  1. package/CHANGELOG.md +112 -3
  2. package/dist/json/attributes.json +3349 -3357
  3. package/dist/json/importMap-labs.json +26 -26
  4. package/dist/json/importMap.json +160 -160
  5. package/dist/json/tags.json +2 -4
  6. package/dist/json/web-types.json +6608 -6629
  7. package/dist/vuetify-labs.cjs +179 -121
  8. package/dist/vuetify-labs.css +3814 -3803
  9. package/dist/vuetify-labs.d.ts +248 -258
  10. package/dist/vuetify-labs.esm.js +179 -121
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +179 -121
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +154 -97
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3909 -3898
  17. package/dist/vuetify.d.ts +105 -115
  18. package/dist/vuetify.esm.js +154 -97
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +154 -97
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +102 -89
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VDataTable/VDataTable.css +12 -1
  26. package/lib/components/VDataTable/VDataTable.d.ts +20 -38
  27. package/lib/components/VDataTable/VDataTable.sass +12 -2
  28. package/lib/components/VDataTable/VDataTableColumn.d.ts +9 -3
  29. package/lib/components/VDataTable/VDataTableColumn.js +12 -4
  30. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  31. package/lib/components/VDataTable/VDataTableHeaders.d.ts +0 -13
  32. package/lib/components/VDataTable/VDataTableHeaders.js +10 -9
  33. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  34. package/lib/components/VDataTable/VDataTableRow.js +2 -0
  35. package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
  36. package/lib/components/VDataTable/VDataTableServer.d.ts +10 -23
  37. package/lib/components/VDataTable/VDataTableVirtual.d.ts +10 -23
  38. package/lib/components/VDataTable/composables/headers.d.ts +22 -14
  39. package/lib/components/VDataTable/composables/headers.js +51 -22
  40. package/lib/components/VDataTable/composables/headers.js.map +1 -1
  41. package/lib/components/VDataTable/composables/sort.js +2 -1
  42. package/lib/components/VDataTable/composables/sort.js.map +1 -1
  43. package/lib/components/VDataTable/types.d.ts +3 -1
  44. package/lib/components/VDataTable/types.js.map +1 -1
  45. package/lib/components/VDatePicker/VDatePickerMonth.js +1 -2
  46. package/lib/components/VDatePicker/VDatePickerMonth.js.map +1 -1
  47. package/lib/components/VList/VListGroup.d.ts +13 -0
  48. package/lib/components/VList/VListGroup.js +2 -1
  49. package/lib/components/VList/VListGroup.js.map +1 -1
  50. package/lib/components/VList/VListItem.d.ts +6 -3
  51. package/lib/components/VList/VListItem.js +1 -1
  52. package/lib/components/VList/VListItem.js.map +1 -1
  53. package/lib/components/VOtpInput/VOtpInput.js +17 -14
  54. package/lib/components/VOtpInput/VOtpInput.js.map +1 -1
  55. package/lib/components/VOverlay/locationStrategies.js +1 -1
  56. package/lib/components/VOverlay/locationStrategies.js.map +1 -1
  57. package/lib/components/VTextField/VTextField.js +1 -1
  58. package/lib/components/VTextField/VTextField.js.map +1 -1
  59. package/lib/components/VTreeview/VTreeview.d.ts +6 -21
  60. package/lib/components/VTreeview/VTreeview.js +6 -9
  61. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  62. package/lib/components/VTreeview/VTreeviewGroup.d.ts +13 -0
  63. package/lib/components/VTreeview/VTreeviewItem.d.ts +18 -9
  64. package/lib/components/VTreeview/VTreeviewItem.js +1 -1
  65. package/lib/components/VTreeview/VTreeviewItem.js.map +1 -1
  66. package/lib/composables/calendar.d.ts +0 -1
  67. package/lib/composables/calendar.js +6 -10
  68. package/lib/composables/calendar.js.map +1 -1
  69. package/lib/composables/date/adapters/vuetify.js +1 -1
  70. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  71. package/lib/composables/nested/nested.d.ts +7 -4
  72. package/lib/composables/nested/nested.js +16 -6
  73. package/lib/composables/nested/nested.js.map +1 -1
  74. package/lib/composables/nested/selectStrategies.d.ts +2 -1
  75. package/lib/composables/nested/selectStrategies.js +22 -11
  76. package/lib/composables/nested/selectStrategies.js.map +1 -1
  77. package/lib/composables/virtual.js +1 -1
  78. package/lib/composables/virtual.js.map +1 -1
  79. package/lib/entry-bundler.js +1 -1
  80. package/lib/framework.d.ts +60 -57
  81. package/lib/framework.js +1 -1
  82. package/lib/labs/VCalendar/VCalendar.d.ts +33 -33
  83. package/lib/labs/VCalendar/VCalendar.js +9 -9
  84. package/lib/labs/VCalendar/VCalendar.js.map +1 -1
  85. package/lib/labs/VCalendar/VCalendarDay.d.ts +33 -33
  86. package/lib/labs/VCalendar/VCalendarDay.js +1 -1
  87. package/lib/labs/VCalendar/VCalendarDay.js.map +1 -1
  88. package/lib/labs/VCalendar/VCalendarInterval.d.ts +36 -36
  89. package/lib/labs/VCalendar/VCalendarInterval.js +9 -9
  90. package/lib/labs/VCalendar/VCalendarInterval.js.map +1 -1
  91. package/lib/labs/VCalendar/VCalendarIntervalEvent.d.ts +12 -12
  92. package/lib/labs/VCalendar/VCalendarIntervalEvent.js +1 -1
  93. package/lib/labs/VCalendar/VCalendarIntervalEvent.js.map +1 -1
  94. package/lib/labs/VCalendar/VCalendarMonthDay.d.ts +36 -36
  95. package/lib/labs/VCalendar/VCalendarMonthDay.js +4 -4
  96. package/lib/labs/VCalendar/VCalendarMonthDay.js.map +1 -1
  97. package/lib/labs/VIconBtn/VIconBtn.js +1 -0
  98. package/lib/labs/VIconBtn/VIconBtn.js.map +1 -1
  99. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.0-beta.1-dev.2025-06-28
2
+ * Vuetify v3.9.0-beta.1-dev.2025-07-04
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -8822,7 +8822,7 @@ const independentSelectStrategy = mandatory => {
8822
8822
  selected.set(id, value ? 'on' : 'off');
8823
8823
  return selected;
8824
8824
  },
8825
- in: (v, children, parents) => {
8825
+ in: (v, children, parents, disabled) => {
8826
8826
  const map = new Map();
8827
8827
  for (const id of v || []) {
8828
8828
  strategy.select({
@@ -8830,7 +8830,8 @@ const independentSelectStrategy = mandatory => {
8830
8830
  value: true,
8831
8831
  selected: map,
8832
8832
  children,
8833
- parents
8833
+ parents,
8834
+ disabled
8834
8835
  });
8835
8836
  }
8836
8837
  return map;
@@ -8862,9 +8863,9 @@ const independentSingleSelectStrategy = mandatory => {
8862
8863
  selected: singleSelected
8863
8864
  });
8864
8865
  },
8865
- in: (v, children, parents) => {
8866
+ in: (v, children, parents, disabled) => {
8866
8867
  if (v?.length) {
8867
- return parentStrategy.in(v.slice(0, 1), children, parents);
8868
+ return parentStrategy.in(v.slice(0, 1), children, parents, disabled);
8868
8869
  }
8869
8870
  return new Map();
8870
8871
  },
@@ -8930,23 +8931,32 @@ const classicSelectStrategy = mandatory => {
8930
8931
  value,
8931
8932
  selected,
8932
8933
  children,
8933
- parents
8934
+ parents,
8935
+ disabled
8934
8936
  } = _ref6;
8935
8937
  id = toRaw(id);
8936
8938
  const original = new Map(selected);
8937
8939
  const items = [id];
8938
8940
  while (items.length) {
8939
8941
  const item = items.shift();
8940
- selected.set(toRaw(item), value ? 'on' : 'off');
8942
+ if (!disabled.has(item)) {
8943
+ selected.set(toRaw(item), value ? 'on' : 'off');
8944
+ }
8941
8945
  if (children.has(item)) {
8942
8946
  items.push(...children.get(item));
8943
8947
  }
8944
8948
  }
8945
8949
  let parent = toRaw(parents.get(id));
8946
8950
  while (parent) {
8947
- const childrenIds = children.get(parent);
8948
- const everySelected = childrenIds.every(cid => selected.get(toRaw(cid)) === 'on');
8949
- const noneSelected = childrenIds.every(cid => !selected.has(toRaw(cid)) || selected.get(toRaw(cid)) === 'off');
8951
+ let everySelected = true;
8952
+ let noneSelected = true;
8953
+ for (const child of children.get(parent)) {
8954
+ const cid = toRaw(child);
8955
+ if (disabled.has(cid)) continue;
8956
+ if (selected.get(cid) !== 'on') everySelected = false;
8957
+ if (selected.has(cid) && selected.get(cid) !== 'off') noneSelected = false;
8958
+ if (!everySelected && !noneSelected) break;
8959
+ }
8950
8960
  selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
8951
8961
  parent = toRaw(parents.get(parent));
8952
8962
  }
@@ -8963,7 +8973,7 @@ const classicSelectStrategy = mandatory => {
8963
8973
  }
8964
8974
  return selected;
8965
8975
  },
8966
- in: (v, children, parents) => {
8976
+ in: (v, children, parents, disabled) => {
8967
8977
  let map = new Map();
8968
8978
  for (const id of v || []) {
8969
8979
  map = strategy.select({
@@ -8971,7 +8981,8 @@ const classicSelectStrategy = mandatory => {
8971
8981
  value: true,
8972
8982
  selected: map,
8973
8983
  children,
8974
- parents
8984
+ parents,
8985
+ disabled
8975
8986
  });
8976
8987
  }
8977
8988
  return map;
@@ -9018,8 +9029,9 @@ const emptyNested = {
9018
9029
  root: {
9019
9030
  register: () => null,
9020
9031
  unregister: () => null,
9021
- parents: ref(new Map()),
9022
9032
  children: ref(new Map()),
9033
+ parents: ref(new Map()),
9034
+ disabled: ref(new Set()),
9023
9035
  open: () => null,
9024
9036
  openOnSelect: () => null,
9025
9037
  activate: () => null,
@@ -9048,6 +9060,7 @@ const useNested = props => {
9048
9060
  let isUnmounted = false;
9049
9061
  const children = shallowRef(new Map());
9050
9062
  const parents = shallowRef(new Map());
9063
+ const disabled = shallowRef(new Set());
9051
9064
  const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(Array.isArray(v) ? v.map(i => toRaw(i)) : v), v => [...v.values()]);
9052
9065
  const activeStrategy = computed(() => {
9053
9066
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
@@ -9096,7 +9109,7 @@ const useNested = props => {
9096
9109
  }
9097
9110
  });
9098
9111
  const activated = useProxiedModel(props, 'activated', props.activated, v => activeStrategy.value.in(v, children.value, parents.value), v => activeStrategy.value.out(v, children.value, parents.value));
9099
- const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(v, children.value, parents.value), v => selectStrategy.value.out(v, children.value, parents.value));
9112
+ const selected = useProxiedModel(props, 'selected', props.selected, v => selectStrategy.value.in(v, children.value, parents.value, disabled.value), v => selectStrategy.value.out(v, children.value, parents.value));
9100
9113
  onBeforeUnmount(() => {
9101
9114
  isUnmounted = true;
9102
9115
  });
@@ -9126,7 +9139,7 @@ const useNested = props => {
9126
9139
  }
9127
9140
  return arr;
9128
9141
  }),
9129
- register: (id, parentId, isGroup) => {
9142
+ register: (id, parentId, isDisabled, isGroup) => {
9130
9143
  if (nodeIds.has(id)) {
9131
9144
  const path = getPath(id).map(String).join(' -> ');
9132
9145
  const newPath = getPath(parentId).concat(id).map(String).join(' -> ');
@@ -9136,6 +9149,7 @@ const useNested = props => {
9136
9149
  nodeIds.add(id);
9137
9150
  }
9138
9151
  parentId && id !== parentId && parents.value.set(id, parentId);
9152
+ isDisabled && disabled.value.add(id);
9139
9153
  isGroup && children.value.set(id, []);
9140
9154
  if (parentId != null) {
9141
9155
  children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
@@ -9145,6 +9159,7 @@ const useNested = props => {
9145
9159
  if (isUnmounted) return;
9146
9160
  nodeIds.delete(id);
9147
9161
  children.value.delete(id);
9162
+ disabled.value.delete(id);
9148
9163
  const parent = parents.value.get(id);
9149
9164
  if (parent) {
9150
9165
  const list = children.value.get(parent) ?? [];
@@ -9194,6 +9209,7 @@ const useNested = props => {
9194
9209
  selected: new Map(selected.value),
9195
9210
  children: children.value,
9196
9211
  parents: parents.value,
9212
+ disabled: disabled.value,
9197
9213
  event
9198
9214
  });
9199
9215
  newSelected && (selected.value = newSelected);
@@ -9236,13 +9252,14 @@ const useNested = props => {
9236
9252
  },
9237
9253
  children,
9238
9254
  parents,
9255
+ disabled,
9239
9256
  getPath
9240
9257
  }
9241
9258
  };
9242
9259
  provide(VNestedSymbol, nested);
9243
9260
  return nested.root;
9244
9261
  };
9245
- const useNestedItem = (id, isGroup) => {
9262
+ const useNestedItem = (id, isDisabled, isGroup) => {
9246
9263
  const parent = inject$1(VNestedSymbol, emptyNested);
9247
9264
  const uidSymbol = Symbol('nested item');
9248
9265
  const computedId = computed(() => toRaw(toValue(id)) ?? uidSymbol);
@@ -9262,10 +9279,14 @@ const useNestedItem = (id, isGroup) => {
9262
9279
  isGroupActivator: parent.isGroupActivator
9263
9280
  };
9264
9281
  onBeforeMount(() => {
9265
- !parent.isGroupActivator && parent.root.register(computedId.value, parent.id.value, isGroup);
9282
+ if (!parent.isGroupActivator) {
9283
+ parent.root.register(computedId.value, parent.id.value, toValue(isDisabled), isGroup);
9284
+ }
9266
9285
  });
9267
9286
  onBeforeUnmount(() => {
9268
- !parent.isGroupActivator && parent.root.unregister(computedId.value);
9287
+ if (!parent.isGroupActivator) {
9288
+ parent.root.unregister(computedId.value);
9289
+ }
9269
9290
  });
9270
9291
  isGroup && provide(VNestedSymbol, item);
9271
9292
  return item;
@@ -9297,6 +9318,7 @@ const makeVListGroupProps = propsFactory({
9297
9318
  type: IconValue,
9298
9319
  default: '$collapse'
9299
9320
  },
9321
+ disabled: Boolean,
9300
9322
  expandIcon: {
9301
9323
  type: IconValue,
9302
9324
  default: '$expand'
@@ -9322,7 +9344,7 @@ const VListGroup = genericComponent()({
9322
9344
  isOpen,
9323
9345
  open,
9324
9346
  id: _id
9325
- } = useNestedItem(() => props.value, true);
9347
+ } = useNestedItem(() => props.value, () => props.disabled, true);
9326
9348
  const id = computed(() => `v-list-group--id-${String(props.rawId ?? _id.value)}`);
9327
9349
  const list = useList();
9328
9350
  const {
@@ -9492,7 +9514,7 @@ const VListItem = genericComponent()({
9492
9514
  parent,
9493
9515
  openOnSelect,
9494
9516
  id: uid
9495
- } = useNestedItem(id, false);
9517
+ } = useNestedItem(id, () => props.disabled, false);
9496
9518
  const list = useList();
9497
9519
  const isActive = computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
9498
9520
  const isLink = toRef(() => props.link !== false && link.isLink.value);
@@ -10452,7 +10474,7 @@ function connectedLocationStrategy(data, props, contentStyles) {
10452
10474
  });
10453
10475
  if (flipped.isFull) {
10454
10476
  const values = flipped.values();
10455
- if (deepEqual(values.at(-1), values.at(-3))) {
10477
+ if (deepEqual(values.at(-1), values.at(-3)) && !deepEqual(values.at(-1), values.at(-2))) {
10456
10478
  // Flipping is causing a container resize loop
10457
10479
  return;
10458
10480
  }
@@ -12302,7 +12324,7 @@ const VTextField = genericComponent()({
12302
12324
  if (!isFocused.value) focus();
12303
12325
  nextTick(() => {
12304
12326
  if (inputRef.value !== document.activeElement) {
12305
- inputRef.value?.focus();
12327
+ nextTick(() => inputRef.value?.focus());
12306
12328
  }
12307
12329
  });
12308
12330
  }
@@ -12641,7 +12663,7 @@ function useVirtual(props, items) {
12641
12663
  raf = requestAnimationFrame(_calculateVisibleItems);
12642
12664
  }
12643
12665
  function _calculateVisibleItems() {
12644
- if (!containerRef.value || !viewportHeight.value) return;
12666
+ if (!containerRef.value || !viewportHeight.value || !itemHeight.value) return;
12645
12667
  const scrollTop = lastScrollTop - markerOffset;
12646
12668
  const direction = Math.sign(scrollVelocity);
12647
12669
  const startPx = Math.max(0, scrollTop - BUFFER_PX);
@@ -17524,7 +17546,7 @@ function format(value, formatString, locale, formats) {
17524
17546
  case 'fullDate':
17525
17547
  options = {
17526
17548
  year: 'numeric',
17527
- month: 'long',
17549
+ month: 'short',
17528
17550
  day: 'numeric'
17529
17551
  };
17530
17552
  break;
@@ -19841,7 +19863,8 @@ function sortItems(items, sortByItems, locale, options) {
19841
19863
 
19842
19864
  // Dates should be compared numerically
19843
19865
  if (sortA instanceof Date && sortB instanceof Date) {
19844
- return sortA.getTime() - sortB.getTime();
19866
+ sortA = sortA.getTime();
19867
+ sortB = sortB.getTime();
19845
19868
  }
19846
19869
  [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s);
19847
19870
  if (sortA !== sortB) {
@@ -20550,10 +20573,15 @@ const VDataTableColumn = defineFunctionalComponent({
20550
20573
  type: String,
20551
20574
  default: 'start'
20552
20575
  },
20553
- fixed: Boolean,
20576
+ fixed: {
20577
+ type: [Boolean, String],
20578
+ default: false
20579
+ },
20554
20580
  fixedOffset: [Number, String],
20581
+ fixedEndOffset: [Number, String],
20555
20582
  height: [Number, String],
20556
20583
  lastFixed: Boolean,
20584
+ firstFixedEnd: Boolean,
20557
20585
  noPadding: Boolean,
20558
20586
  tag: String,
20559
20587
  width: [Number, String],
@@ -20564,11 +20592,13 @@ const VDataTableColumn = defineFunctionalComponent({
20564
20592
  slots
20565
20593
  } = _ref;
20566
20594
  const Tag = props.tag ?? 'td';
20595
+ const fixedSide = typeof props.fixed === 'string' ? props.fixed : props.fixed ? 'start' : 'none';
20567
20596
  return createVNode(Tag, {
20568
- "tabindex": "0",
20569
20597
  "class": normalizeClass(['v-data-table__td', {
20570
- 'v-data-table-column--fixed': props.fixed,
20598
+ 'v-data-table-column--fixed': fixedSide === 'start',
20599
+ 'v-data-table-column--fixed-end': fixedSide === 'end',
20571
20600
  'v-data-table-column--last-fixed': props.lastFixed,
20601
+ 'v-data-table-column--first-fixed-end': props.firstFixedEnd,
20572
20602
  'v-data-table-column--no-padding': props.noPadding,
20573
20603
  'v-data-table-column--nowrap': props.nowrap
20574
20604
  }, `v-data-table-column--align-${props.align}`]),
@@ -20576,7 +20606,8 @@ const VDataTableColumn = defineFunctionalComponent({
20576
20606
  height: convertToUnit(props.height),
20577
20607
  width: convertToUnit(props.width),
20578
20608
  maxWidth: convertToUnit(props.maxWidth),
20579
- left: convertToUnit(props.fixedOffset || null)
20609
+ left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
20610
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
20580
20611
  }
20581
20612
  }, {
20582
20613
  default: () => [slots.default?.()]
@@ -20673,20 +20704,28 @@ function getDepth(item) {
20673
20704
  }
20674
20705
  function parseFixedColumns(items) {
20675
20706
  let seenFixed = false;
20676
- function setFixed(item) {
20677
- let parentFixed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20707
+ function setFixed(item, side) {
20708
+ let parentFixedSide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none';
20678
20709
  if (!item) return;
20679
- if (parentFixed) {
20680
- item.fixed = true;
20710
+ if (parentFixedSide !== 'none') {
20711
+ item.fixed = parentFixedSide;
20681
20712
  }
20682
- if (item.fixed) {
20683
- if (item.children) {
20684
- for (let i = item.children.length - 1; i >= 0; i--) {
20685
- setFixed(item.children[i], true);
20713
+
20714
+ // normalize to simplify logic below
20715
+ if (item.fixed === true) {
20716
+ item.fixed = 'start';
20717
+ }
20718
+ const orderedChildren = side === 'start' ? item.children?.toReversed() : item.children;
20719
+ if (item.fixed === side) {
20720
+ if (orderedChildren) {
20721
+ for (const child of orderedChildren) {
20722
+ setFixed(child, side, side);
20686
20723
  }
20687
20724
  } else {
20688
- if (!seenFixed) {
20725
+ if (!seenFixed && side === 'start') {
20689
20726
  item.lastFixed = true;
20727
+ } else if (!seenFixed && side === 'end') {
20728
+ item.firstFixedEnd = true;
20690
20729
  } else if (isNaN(Number(item.width))) {
20691
20730
  consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
20692
20731
  } else {
@@ -20695,36 +20734,57 @@ function parseFixedColumns(items) {
20695
20734
  seenFixed = true;
20696
20735
  }
20697
20736
  } else {
20698
- if (item.children) {
20699
- for (let i = item.children.length - 1; i >= 0; i--) {
20700
- setFixed(item.children[i]);
20737
+ if (orderedChildren) {
20738
+ for (const child of orderedChildren) {
20739
+ setFixed(child, side);
20701
20740
  }
20702
20741
  } else {
20703
20742
  seenFixed = false;
20704
20743
  }
20705
20744
  }
20706
20745
  }
20707
- for (let i = items.length - 1; i >= 0; i--) {
20708
- setFixed(items[i]);
20746
+ for (const item of items.toReversed()) {
20747
+ setFixed(item, 'start');
20748
+ }
20749
+ for (const item of items) {
20750
+ setFixed(item, 'end');
20709
20751
  }
20710
20752
  function setFixedOffset(item) {
20711
- let fixedOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20712
- if (!item) return fixedOffset;
20753
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20754
+ if (!item) return offset;
20713
20755
  if (item.children) {
20714
- item.fixedOffset = fixedOffset;
20756
+ item.fixedOffset = offset;
20715
20757
  for (const child of item.children) {
20716
- fixedOffset = setFixedOffset(child, fixedOffset);
20758
+ offset = setFixedOffset(child, offset);
20717
20759
  }
20718
- } else if (item.fixed) {
20719
- item.fixedOffset = fixedOffset;
20720
- fixedOffset += parseFloat(item.width || '0') || 0;
20760
+ } else if (item.fixed && item.fixed !== 'end') {
20761
+ item.fixedOffset = offset;
20762
+ offset += parseFloat(item.width || '0') || 0;
20721
20763
  }
20722
- return fixedOffset;
20764
+ return offset;
20723
20765
  }
20724
20766
  let fixedOffset = 0;
20725
20767
  for (const item of items) {
20726
20768
  fixedOffset = setFixedOffset(item, fixedOffset);
20727
20769
  }
20770
+ function setFixedEndOffset(item) {
20771
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20772
+ if (!item) return offset;
20773
+ if (item.children) {
20774
+ item.fixedEndOffset = offset;
20775
+ for (const child of item.children) {
20776
+ offset = setFixedEndOffset(child, offset);
20777
+ }
20778
+ } else if (item.fixed === 'end') {
20779
+ item.fixedEndOffset = offset;
20780
+ offset += parseFloat(item.width || '0') || 0;
20781
+ }
20782
+ return offset;
20783
+ }
20784
+ let fixedEndOffset = 0;
20785
+ for (const item of items.toReversed()) {
20786
+ fixedEndOffset = setFixedEndOffset(item, fixedEndOffset);
20787
+ }
20728
20788
  }
20729
20789
  function parse(items, maxDepth) {
20730
20790
  const headers = [];
@@ -20857,7 +20917,6 @@ const makeVDataTableHeadersProps = propsFactory({
20857
20917
  color: String,
20858
20918
  disableSort: Boolean,
20859
20919
  fixedHeader: Boolean,
20860
- lastFixed: Boolean,
20861
20920
  multiSort: Boolean,
20862
20921
  sortAscIcon: {
20863
20922
  type: IconValue,
@@ -20904,11 +20963,12 @@ const VDataTableHeaders = genericComponent()({
20904
20963
  loaderClasses
20905
20964
  } = useLoader(props);
20906
20965
  function getFixedStyles(column, y) {
20907
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20966
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20967
+ const fixedSide = typeof column.fixed === 'string' ? column.fixed : column.fixed ? 'start' : 'none';
20908
20968
  return {
20909
20969
  position: 'sticky',
20910
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20911
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20970
+ left: fixedSide === 'start' ? convertToUnit(column.fixedOffset) : undefined,
20971
+ right: fixedSide === 'end' ? convertToUnit(column.fixedEndOffset) : undefined,
20912
20972
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20913
20973
  };
20914
20974
  }
@@ -20968,14 +21028,15 @@ const VDataTableHeaders = genericComponent()({
20968
21028
  },
20969
21029
  "colspan": column.colspan,
20970
21030
  "rowspan": column.rowspan,
20971
- "onClick": column.sortable ? () => toggleSort(column) : undefined,
20972
21031
  "fixed": column.fixed,
20973
21032
  "nowrap": column.nowrap,
20974
21033
  "lastFixed": column.lastFixed,
20975
- "noPadding": noPadding
20976
- }, headerProps, {
20977
- "onKeydown": event => column.sortable && handleEnterKeyPress(event, column)
20978
- }), {
21034
+ "firstFixedEnd": column.firstFixedEnd,
21035
+ "noPadding": noPadding,
21036
+ "tabindex": column.sortable ? 0 : undefined,
21037
+ "onClick": column.sortable ? () => toggleSort(column) : undefined,
21038
+ "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
21039
+ }, headerProps), {
20979
21040
  default: () => {
20980
21041
  const columnSlotName = `header.${column.key}`;
20981
21042
  const columnSlotProps = {
@@ -21251,7 +21312,9 @@ const VDataTableRow = genericComponent()({
21251
21312
  },
21252
21313
  "fixed": column.fixed,
21253
21314
  "fixedOffset": column.fixedOffset,
21315
+ "fixedEndOffset": column.fixedEndOffset,
21254
21316
  "lastFixed": column.lastFixed,
21317
+ "firstFixedEnd": column.firstFixedEnd,
21255
21318
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21256
21319
  "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21257
21320
  "nowrap": column.nowrap,
@@ -22661,13 +22724,9 @@ function useCalendar(props) {
22661
22724
  const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
22662
22725
  return adapter.setMonth(date, value);
22663
22726
  }, v => adapter.getMonth(v));
22664
- const weekDays = computed(() => {
22665
- const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay();
22666
- return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
22667
- });
22668
22727
  const weekdayLabels = computed(() => {
22669
- const labels = adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat);
22670
- return weekDays.value.map(day => labels[day]);
22728
+ const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay();
22729
+ return adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).filter((_, i) => props.weekdays.includes((i + firstDayOfWeek) % 7));
22671
22730
  });
22672
22731
  const weeksInMonth = computed(() => {
22673
22732
  const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek);
@@ -22691,13 +22750,14 @@ function useCalendar(props) {
22691
22750
  });
22692
22751
  function genDays(days, today) {
22693
22752
  return days.filter(date => {
22694
- return weekDays.value.includes(adapter.toJsDate(date).getDay());
22753
+ return props.weekdays.includes(adapter.toJsDate(date).getDay());
22695
22754
  }).map((date, index) => {
22696
22755
  const isoDate = adapter.toISO(date);
22697
22756
  const isAdjacent = !adapter.isSameMonth(date, month.value);
22698
22757
  const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value));
22699
22758
  const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value));
22700
22759
  const isSame = adapter.isSameDay(date, month.value);
22760
+ const weekdaysCount = props.weekdays.length;
22701
22761
  return {
22702
22762
  date,
22703
22763
  formatted: adapter.format(date, 'keyboardDate'),
@@ -22709,8 +22769,8 @@ function useCalendar(props) {
22709
22769
  isSelected: model.value.some(value => adapter.isSameDay(date, value)),
22710
22770
  isStart,
22711
22771
  isToday: adapter.isSameDay(date, today),
22712
- isWeekEnd: index % 7 === 6,
22713
- isWeekStart: index % 7 === 0,
22772
+ isWeekEnd: index % weekdaysCount === weekdaysCount - 1,
22773
+ isWeekStart: index % weekdaysCount === 0,
22714
22774
  isoDate,
22715
22775
  localized: adapter.format(date, 'dayOfMonth'),
22716
22776
  month: adapter.getMonth(date),
@@ -22757,7 +22817,6 @@ function useCalendar(props) {
22757
22817
  genDays,
22758
22818
  model,
22759
22819
  weeksInMonth,
22760
- weekDays,
22761
22820
  weekdayLabels,
22762
22821
  weekNumbers
22763
22822
  };
@@ -22798,7 +22857,6 @@ const VDatePickerMonth = genericComponent()({
22798
22857
  daysInMonth,
22799
22858
  model,
22800
22859
  weekNumbers,
22801
- weekDays,
22802
22860
  weekdayLabels
22803
22861
  } = useCalendar(props);
22804
22862
  const adapter = useDate();
@@ -22873,7 +22931,7 @@ const VDatePickerMonth = genericComponent()({
22873
22931
  useRender(() => createElementVNode("div", {
22874
22932
  "class": "v-date-picker-month",
22875
22933
  "style": {
22876
- '--v-date-picker-days-in-week': weekDays.value.length
22934
+ '--v-date-picker-days-in-week': props.weekdays.length
22877
22935
  }
22878
22936
  }, [props.showWeek && createElementVNode("div", {
22879
22937
  "key": "weeks",
@@ -26044,19 +26102,21 @@ const VOtpInput = genericComponent()({
26044
26102
  const contentRef = ref();
26045
26103
  const inputRef = ref([]);
26046
26104
  const current = computed(() => inputRef.value[focusIndex.value]);
26047
- const intersectScope = effectScope();
26048
- intersectScope.run(() => {
26049
- const {
26050
- intersectionRef,
26051
- isIntersecting
26052
- } = useIntersectionObserver();
26053
- watch(isIntersecting, v => {
26054
- if (!v) return;
26055
- intersectionRef.value?.focus();
26056
- intersectScope.stop();
26057
- });
26058
- watchEffect(() => {
26059
- intersectionRef.value = inputRef.value[0];
26105
+ useToggleScope(() => props.autofocus, () => {
26106
+ const intersectScope = effectScope();
26107
+ intersectScope.run(() => {
26108
+ const {
26109
+ intersectionRef,
26110
+ isIntersecting
26111
+ } = useIntersectionObserver();
26112
+ watchEffect(() => {
26113
+ intersectionRef.value = inputRef.value[0];
26114
+ });
26115
+ watch(isIntersecting, v => {
26116
+ if (!v) return;
26117
+ intersectionRef.value?.focus();
26118
+ intersectScope.stop();
26119
+ });
26060
26120
  });
26061
26121
  });
26062
26122
  function onInput() {
@@ -30107,7 +30167,7 @@ const VTreeviewItem = genericComponent()({
30107
30167
  return createVNode(VListItem, mergeProps({
30108
30168
  "ref": vListItemRef
30109
30169
  }, listItemProps, {
30110
- "active": vListItemRef.value?.isActivated,
30170
+ "active": vListItemRef.value?.isActivated || undefined,
30111
30171
  "class": ['v-treeview-item', {
30112
30172
  'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
30113
30173
  'v-treeview-item--filtered': isFiltered.value
@@ -30319,10 +30379,7 @@ const makeVTreeviewProps = propsFactory({
30319
30379
  expandIcon: '$treeviewExpand',
30320
30380
  slim: true
30321
30381
  }), ['itemType', 'nav', 'openStrategy']),
30322
- modelValue: {
30323
- type: Array,
30324
- default: () => []
30325
- }
30382
+ modelValue: Array
30326
30383
  }, 'VTreeview');
30327
30384
  const VTreeview = genericComponent()({
30328
30385
  name: 'VTreeview',
@@ -30337,7 +30394,8 @@ const VTreeview = genericComponent()({
30337
30394
  },
30338
30395
  setup(props, _ref) {
30339
30396
  let {
30340
- slots
30397
+ slots,
30398
+ emit
30341
30399
  } = _ref;
30342
30400
  const {
30343
30401
  items
@@ -30346,13 +30404,12 @@ const VTreeview = genericComponent()({
30346
30404
  const baseColor = toRef(() => props.baseColor);
30347
30405
  const color = toRef(() => props.color);
30348
30406
  const activated = useProxiedModel(props, 'activated');
30349
- const model = useProxiedModel(props, 'modelValue');
30350
- const _selected = useProxiedModel(props, 'selected', props.modelValue);
30407
+ const _selected = useProxiedModel(props, 'selected');
30351
30408
  const selected = computed({
30352
- get: () => _selected.value,
30409
+ get: () => props.modelValue ?? _selected.value,
30353
30410
  set(val) {
30354
30411
  _selected.value = val;
30355
- model.value = val;
30412
+ emit('update:modelValue', val);
30356
30413
  }
30357
30414
  });
30358
30415
  const vListRef = ref();
@@ -30524,7 +30581,7 @@ const VCalendarIntervalEvent = genericComponent()({
30524
30581
  }
30525
30582
  };
30526
30583
  useRender(() => {
30527
- return createElementVNode("div", null, [slots.intervalEvent?.({
30584
+ return createElementVNode("div", null, [slots['interval-event']?.({
30528
30585
  height: calcHeight().height,
30529
30586
  margin: calcHeight().margin,
30530
30587
  eventClass: 'v-calendar-internal-event',
@@ -30621,13 +30678,13 @@ const VCalendarInterval = genericComponent()({
30621
30678
  "style": normalizeStyle(`height: ${convertToUnit(props.intervalHeight)}`)
30622
30679
  }, [createElementVNode("div", mergeProps({
30623
30680
  "class": "v-calendar-day__row-label"
30624
- }, getPrefixedEventHandlers(attrs, ':time', () => props)), [slots.intervalTitle?.({
30681
+ }, getPrefixedEventHandlers(attrs, ':time', () => props)), [slots['interval-title']?.({
30625
30682
  interval: interval.value
30626
30683
  }) ?? (props.index ? props.intervalFormat ? typeof props.intervalFormat === 'string' ? adapter.format(interval.value.start, 'hours12h') : props.intervalFormat(interval.value) : interval.value.label : '12 AM')]), createElementVNode("div", {
30627
30684
  "class": "v-calendar-day__row-hairline"
30628
30685
  }, null), createElementVNode("div", mergeProps({
30629
30686
  "class": ['v-calendar-day__row-content', interval.value.events.some(e => !e.last) ? 'v-calendar-day__row-content-through' : '']
30630
- }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots.intervalBody?.({
30687
+ }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots['interval-body']?.({
30631
30688
  interval: interval.value
30632
30689
  }) ?? createElementVNode("div", null, [interval.value.events?.map(event => createVNode(VCalendarIntervalEvent, mergeProps({
30633
30690
  "event": event,
@@ -30636,8 +30693,8 @@ const VCalendarInterval = genericComponent()({
30636
30693
  "intervalDuration": props.intervalDuration,
30637
30694
  "intervalHeight": props.intervalHeight
30638
30695
  }, attrs), {
30639
- ...(slots.intervalEvent ? {
30640
- intervalEvent: _ref2 => {
30696
+ ...(slots['interval-event'] ? {
30697
+ 'interval-event': _ref2 => {
30641
30698
  let {
30642
30699
  height,
30643
30700
  margin,
@@ -30645,7 +30702,7 @@ const VCalendarInterval = genericComponent()({
30645
30702
  event,
30646
30703
  interval
30647
30704
  } = _ref2;
30648
- return slots.intervalEvent?.({
30705
+ return slots['interval-event']?.({
30649
30706
  height,
30650
30707
  margin,
30651
30708
  eventClass,
@@ -30659,7 +30716,7 @@ const VCalendarInterval = genericComponent()({
30659
30716
  "style": normalizeStyle(`height: ${convertToUnit(props.intervalHeight)}`)
30660
30717
  }, [createElementVNode("div", mergeProps({
30661
30718
  "class": ['v-calendar-day__row-content', interval.value.events.some(e => !e.last) ? 'v-calendar-day__row-content-through' : '']
30662
- }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots.intervalBody?.({
30719
+ }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots['interval-body']?.({
30663
30720
  interval: interval.value
30664
30721
  }) ?? interval.value.events?.map(event => createVNode(VCalendarIntervalEvent, mergeProps({
30665
30722
  "event": event,
@@ -30668,8 +30725,8 @@ const VCalendarInterval = genericComponent()({
30668
30725
  "intervalDuration": props.intervalDuration,
30669
30726
  "intervalHeight": props.intervalHeight
30670
30727
  }, attrs), {
30671
- ...(slots.intervalEvent ? {
30672
- intervalEvent: _ref3 => {
30728
+ ...(slots['interval-event'] ? {
30729
+ 'interval-event': _ref3 => {
30673
30730
  let {
30674
30731
  height,
30675
30732
  margin,
@@ -30677,7 +30734,7 @@ const VCalendarInterval = genericComponent()({
30677
30734
  event,
30678
30735
  interval
30679
30736
  } = _ref3;
30680
- return slots.intervalEvent?.({
30737
+ return slots['interval-event']?.({
30681
30738
  height,
30682
30739
  margin,
30683
30740
  eventClass,
@@ -30732,7 +30789,7 @@ const VCalendarDay = genericComponent()({
30732
30789
  }), null)])]), intervals.value.map((_, index) => slots.interval?.(calendarIntervalProps) ?? createVNode(VCalendarInterval, mergeProps({
30733
30790
  "index": index
30734
30791
  }, calendarIntervalProps, attrs, getPrefixedEventHandlers(attrs, ':interval', () => calendarIntervalProps)), {
30735
- ...pick(slots, ['intervalBody', 'intervalEvent', 'intervalTitle'])
30792
+ ...pick(slots, ['interval-body', 'interval-event', 'interval-title'])
30736
30793
  }))]);
30737
30794
  });
30738
30795
  return {
@@ -30876,7 +30933,7 @@ const VCalendarMonthDay = genericComponent()({
30876
30933
  }, getPrefixedEventHandlers(attrs, ':day', () => props)), [!props.day?.isHidden ? createElementVNode("div", {
30877
30934
  "key": "title",
30878
30935
  "class": "v-calendar-weekly__day-label"
30879
- }, [slots.dayTitle?.({
30936
+ }, [slots['day-title']?.({
30880
30937
  title: props.title
30881
30938
  }) ?? createVNode(VBtn, mergeProps({
30882
30939
  "class": props.day?.isToday ? 'v-calendar-weekly__day-label__today' : undefined,
@@ -30889,12 +30946,12 @@ const VCalendarMonthDay = genericComponent()({
30889
30946
  }, getPrefixedEventHandlers(attrs, ':date', () => props)), null)]) : undefined, !props.day?.isHidden ? createElementVNode("div", {
30890
30947
  "key": "content",
30891
30948
  "class": "v-calendar-weekly__day-content"
30892
- }, [slots.dayBody?.({
30949
+ }, [slots['day-body']?.({
30893
30950
  day: props.day,
30894
30951
  events: props.events
30895
30952
  }) ?? createElementVNode("div", null, [createElementVNode("div", {
30896
30953
  "class": "v-calendar-weekly__day-alldayevents-container"
30897
- }, [props.events?.filter(event => event.allDay).map(event => slots.dayEvent ? slots.dayEvent({
30954
+ }, [props.events?.filter(event => event.allDay).map(event => slots['day-event'] ? slots['day-event']({
30898
30955
  day: props.day,
30899
30956
  allDay: true,
30900
30957
  event
@@ -30904,7 +30961,7 @@ const VCalendarMonthDay = genericComponent()({
30904
30961
  "allDay": true
30905
30962
  }, attrs), null))]), createElementVNode("div", {
30906
30963
  "class": "v-calendar-weekly__day-events-container"
30907
- }, [props.events?.filter(event => !event.allDay).map(event => slots.dayEvent ? slots.dayEvent({
30964
+ }, [props.events?.filter(event => !event.allDay).map(event => slots['day-event'] ? slots['day-event']({
30908
30965
  day: props.day,
30909
30966
  event,
30910
30967
  allDay: false
@@ -30949,9 +31006,8 @@ const VCalendar = genericComponent()({
30949
31006
  model,
30950
31007
  displayValue,
30951
31008
  weekNumbers,
30952
- weekDays
31009
+ weekdayLabels
30953
31010
  } = useCalendar(props);
30954
- const dayNames = adapter.getWeekdays();
30955
31011
  function onClickNext() {
30956
31012
  if (props.viewMode === 'month') {
30957
31013
  model.value = [adapter.addMonths(displayValue.value, 1)];
@@ -30989,6 +31045,7 @@ const VCalendar = genericComponent()({
30989
31045
  useRender(() => {
30990
31046
  const calendarDayProps = VCalendarDay.filterProps(props);
30991
31047
  const calendarHeaderProps = VCalendarHeader.filterProps(props);
31048
+ const weekdaysCount = daysInWeek.value.length;
30992
31049
  return createElementVNode("div", {
30993
31050
  "class": normalizeClass(['v-calendar', {
30994
31051
  'v-calendar-monthly': props.viewMode === 'month',
@@ -31010,19 +31067,19 @@ const VCalendar = genericComponent()({
31010
31067
  }), {
31011
31068
  title: slots.title
31012
31069
  }))]), createElementVNode("div", {
31013
- "class": normalizeClass(['v-calendar__container', `days__${weekDays.value.length}`])
31070
+ "class": normalizeClass(['v-calendar__container', `days__${weekdaysCount}`])
31014
31071
  }, [props.viewMode === 'month' && !props.hideDayHeader && createElementVNode("div", {
31015
- "class": normalizeClass(['v-calendar-weekly__head', `days__${weekDays.value.length}`, ...(!props.hideWeekNumber ? ['v-calendar-weekly__head-weeknumbers'] : [])]),
31072
+ "class": normalizeClass(['v-calendar-weekly__head', `days__${weekdaysCount}`, ...(!props.hideWeekNumber ? ['v-calendar-weekly__head-weeknumbers'] : [])]),
31016
31073
  "key": "calendarWeeklyHead"
31017
31074
  }, [!props.hideWeekNumber ? createElementVNode("div", {
31018
31075
  "key": "weekNumber0",
31019
31076
  "class": "v-calendar-weekly__head-weeknumber"
31020
- }, null) : '', weekDays.value.map(weekday => createElementVNode("div", {
31077
+ }, null) : '', weekdayLabels.value.map(weekday => createElementVNode("div", {
31021
31078
  "class": normalizeClass(`v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`)
31022
- }, [dayNames[weekday]]))]), props.viewMode === 'month' && createElementVNode("div", {
31079
+ }, [weekday]))]), props.viewMode === 'month' && createElementVNode("div", {
31023
31080
  "key": "VCalendarMonth",
31024
- "class": normalizeClass(['v-calendar-month__days', `days${!props.hideWeekNumber ? '-with-weeknumbers' : ''}__${weekDays.value.length}`, ...(!props.hideWeekNumber ? ['v-calendar-month__weeknumbers'] : [])])
31025
- }, [chunkArray(daysInMonth.value, weekDays.value.length).map((week, wi) => [!props.hideWeekNumber ? createElementVNode("div", mergeProps({
31081
+ "class": normalizeClass(['v-calendar-month__days', `days${!props.hideWeekNumber ? '-with-weeknumbers' : ''}__${weekdaysCount}`, ...(!props.hideWeekNumber ? ['v-calendar-month__weeknumbers'] : [])])
31082
+ }, [chunkArray(daysInMonth.value, weekdaysCount).map((week, wi) => [!props.hideWeekNumber ? createElementVNode("div", mergeProps({
31026
31083
  "class": "v-calendar-month__weeknumber"
31027
31084
  }, getPrefixedEventHandlers(attrs, ':weekNumber', () => ({
31028
31085
  weekNumber: weekNumbers.value[wi],
@@ -31045,7 +31102,7 @@ const VCalendar = genericComponent()({
31045
31102
  "dayIndex": i,
31046
31103
  "events": props.events?.filter(e => adapter.isSameDay(e.start, day.date) || adapter.isSameDay(e.end, day.date))
31047
31104
  }, attrs), {
31048
- ...pick(slots, ['interval', 'intervalBody', 'intervalEvent', 'intervalTitle'])
31105
+ ...pick(slots, ['interval', 'interval-body', 'interval-event', 'interval-title'])
31049
31106
  })), props.viewMode === 'day' && (slots['day-interval'] ? slots['day-interval']({
31050
31107
  day: genDays([displayValue.value], adapter.date())[0],
31051
31108
  dayIndex: 0,
@@ -31960,6 +32017,7 @@ const VIconBtn = genericComponent()({
31960
32017
  opacity: props.opacity
31961
32018
  };
31962
32019
  return createVNode(props.tag, {
32020
+ "type": props.tag === 'button' ? 'button' : undefined,
31963
32021
  "class": normalizeClass([{
31964
32022
  'v-icon-btn': true,
31965
32023
  'v-icon-btn--active': isActive.value,
@@ -33522,7 +33580,7 @@ function createVuetify$1() {
33522
33580
  };
33523
33581
  });
33524
33582
  }
33525
- const version$1 = "3.9.0-beta.1-dev.2025-06-28";
33583
+ const version$1 = "3.9.0-beta.1-dev.2025-07-04";
33526
33584
  createVuetify$1.version = version$1;
33527
33585
 
33528
33586
  // Vue's inject() can only be used in setup
@@ -33820,7 +33878,7 @@ var index = /*#__PURE__*/Object.freeze({
33820
33878
 
33821
33879
  /* eslint-disable local-rules/sort-imports */
33822
33880
 
33823
- const version = "3.9.0-beta.1-dev.2025-06-28";
33881
+ const version = "3.9.0-beta.1-dev.2025-07-04";
33824
33882
 
33825
33883
  /* eslint-disable local-rules/sort-imports */
33826
33884