@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
  */
@@ -8826,7 +8826,7 @@
8826
8826
  selected.set(id, value ? 'on' : 'off');
8827
8827
  return selected;
8828
8828
  },
8829
- in: (v, children, parents) => {
8829
+ in: (v, children, parents, disabled) => {
8830
8830
  const map = new Map();
8831
8831
  for (const id of v || []) {
8832
8832
  strategy.select({
@@ -8834,7 +8834,8 @@
8834
8834
  value: true,
8835
8835
  selected: map,
8836
8836
  children,
8837
- parents
8837
+ parents,
8838
+ disabled
8838
8839
  });
8839
8840
  }
8840
8841
  return map;
@@ -8866,9 +8867,9 @@
8866
8867
  selected: singleSelected
8867
8868
  });
8868
8869
  },
8869
- in: (v, children, parents) => {
8870
+ in: (v, children, parents, disabled) => {
8870
8871
  if (v?.length) {
8871
- return parentStrategy.in(v.slice(0, 1), children, parents);
8872
+ return parentStrategy.in(v.slice(0, 1), children, parents, disabled);
8872
8873
  }
8873
8874
  return new Map();
8874
8875
  },
@@ -8934,23 +8935,32 @@
8934
8935
  value,
8935
8936
  selected,
8936
8937
  children,
8937
- parents
8938
+ parents,
8939
+ disabled
8938
8940
  } = _ref6;
8939
8941
  id = vue.toRaw(id);
8940
8942
  const original = new Map(selected);
8941
8943
  const items = [id];
8942
8944
  while (items.length) {
8943
8945
  const item = items.shift();
8944
- selected.set(vue.toRaw(item), value ? 'on' : 'off');
8946
+ if (!disabled.has(item)) {
8947
+ selected.set(vue.toRaw(item), value ? 'on' : 'off');
8948
+ }
8945
8949
  if (children.has(item)) {
8946
8950
  items.push(...children.get(item));
8947
8951
  }
8948
8952
  }
8949
8953
  let parent = vue.toRaw(parents.get(id));
8950
8954
  while (parent) {
8951
- const childrenIds = children.get(parent);
8952
- const everySelected = childrenIds.every(cid => selected.get(vue.toRaw(cid)) === 'on');
8953
- const noneSelected = childrenIds.every(cid => !selected.has(vue.toRaw(cid)) || selected.get(vue.toRaw(cid)) === 'off');
8955
+ let everySelected = true;
8956
+ let noneSelected = true;
8957
+ for (const child of children.get(parent)) {
8958
+ const cid = vue.toRaw(child);
8959
+ if (disabled.has(cid)) continue;
8960
+ if (selected.get(cid) !== 'on') everySelected = false;
8961
+ if (selected.has(cid) && selected.get(cid) !== 'off') noneSelected = false;
8962
+ if (!everySelected && !noneSelected) break;
8963
+ }
8954
8964
  selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
8955
8965
  parent = vue.toRaw(parents.get(parent));
8956
8966
  }
@@ -8967,7 +8977,7 @@
8967
8977
  }
8968
8978
  return selected;
8969
8979
  },
8970
- in: (v, children, parents) => {
8980
+ in: (v, children, parents, disabled) => {
8971
8981
  let map = new Map();
8972
8982
  for (const id of v || []) {
8973
8983
  map = strategy.select({
@@ -8975,7 +8985,8 @@
8975
8985
  value: true,
8976
8986
  selected: map,
8977
8987
  children,
8978
- parents
8988
+ parents,
8989
+ disabled
8979
8990
  });
8980
8991
  }
8981
8992
  return map;
@@ -9022,8 +9033,9 @@
9022
9033
  root: {
9023
9034
  register: () => null,
9024
9035
  unregister: () => null,
9025
- parents: vue.ref(new Map()),
9026
9036
  children: vue.ref(new Map()),
9037
+ parents: vue.ref(new Map()),
9038
+ disabled: vue.ref(new Set()),
9027
9039
  open: () => null,
9028
9040
  openOnSelect: () => null,
9029
9041
  activate: () => null,
@@ -9052,6 +9064,7 @@
9052
9064
  let isUnmounted = false;
9053
9065
  const children = vue.shallowRef(new Map());
9054
9066
  const parents = vue.shallowRef(new Map());
9067
+ const disabled = vue.shallowRef(new Set());
9055
9068
  const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(Array.isArray(v) ? v.map(i => vue.toRaw(i)) : v), v => [...v.values()]);
9056
9069
  const activeStrategy = vue.computed(() => {
9057
9070
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
@@ -9100,7 +9113,7 @@
9100
9113
  }
9101
9114
  });
9102
9115
  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));
9103
- 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));
9116
+ 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));
9104
9117
  vue.onBeforeUnmount(() => {
9105
9118
  isUnmounted = true;
9106
9119
  });
@@ -9130,7 +9143,7 @@
9130
9143
  }
9131
9144
  return arr;
9132
9145
  }),
9133
- register: (id, parentId, isGroup) => {
9146
+ register: (id, parentId, isDisabled, isGroup) => {
9134
9147
  if (nodeIds.has(id)) {
9135
9148
  const path = getPath(id).map(String).join(' -> ');
9136
9149
  const newPath = getPath(parentId).concat(id).map(String).join(' -> ');
@@ -9140,6 +9153,7 @@
9140
9153
  nodeIds.add(id);
9141
9154
  }
9142
9155
  parentId && id !== parentId && parents.value.set(id, parentId);
9156
+ isDisabled && disabled.value.add(id);
9143
9157
  isGroup && children.value.set(id, []);
9144
9158
  if (parentId != null) {
9145
9159
  children.value.set(parentId, [...(children.value.get(parentId) || []), id]);
@@ -9149,6 +9163,7 @@
9149
9163
  if (isUnmounted) return;
9150
9164
  nodeIds.delete(id);
9151
9165
  children.value.delete(id);
9166
+ disabled.value.delete(id);
9152
9167
  const parent = parents.value.get(id);
9153
9168
  if (parent) {
9154
9169
  const list = children.value.get(parent) ?? [];
@@ -9198,6 +9213,7 @@
9198
9213
  selected: new Map(selected.value),
9199
9214
  children: children.value,
9200
9215
  parents: parents.value,
9216
+ disabled: disabled.value,
9201
9217
  event
9202
9218
  });
9203
9219
  newSelected && (selected.value = newSelected);
@@ -9240,13 +9256,14 @@
9240
9256
  },
9241
9257
  children,
9242
9258
  parents,
9259
+ disabled,
9243
9260
  getPath
9244
9261
  }
9245
9262
  };
9246
9263
  vue.provide(VNestedSymbol, nested);
9247
9264
  return nested.root;
9248
9265
  };
9249
- const useNestedItem = (id, isGroup) => {
9266
+ const useNestedItem = (id, isDisabled, isGroup) => {
9250
9267
  const parent = vue.inject(VNestedSymbol, emptyNested);
9251
9268
  const uidSymbol = Symbol('nested item');
9252
9269
  const computedId = vue.computed(() => vue.toRaw(vue.toValue(id)) ?? uidSymbol);
@@ -9266,10 +9283,14 @@
9266
9283
  isGroupActivator: parent.isGroupActivator
9267
9284
  };
9268
9285
  vue.onBeforeMount(() => {
9269
- !parent.isGroupActivator && parent.root.register(computedId.value, parent.id.value, isGroup);
9286
+ if (!parent.isGroupActivator) {
9287
+ parent.root.register(computedId.value, parent.id.value, vue.toValue(isDisabled), isGroup);
9288
+ }
9270
9289
  });
9271
9290
  vue.onBeforeUnmount(() => {
9272
- !parent.isGroupActivator && parent.root.unregister(computedId.value);
9291
+ if (!parent.isGroupActivator) {
9292
+ parent.root.unregister(computedId.value);
9293
+ }
9273
9294
  });
9274
9295
  isGroup && vue.provide(VNestedSymbol, item);
9275
9296
  return item;
@@ -9301,6 +9322,7 @@
9301
9322
  type: IconValue,
9302
9323
  default: '$collapse'
9303
9324
  },
9325
+ disabled: Boolean,
9304
9326
  expandIcon: {
9305
9327
  type: IconValue,
9306
9328
  default: '$expand'
@@ -9326,7 +9348,7 @@
9326
9348
  isOpen,
9327
9349
  open,
9328
9350
  id: _id
9329
- } = useNestedItem(() => props.value, true);
9351
+ } = useNestedItem(() => props.value, () => props.disabled, true);
9330
9352
  const id = vue.computed(() => `v-list-group--id-${String(props.rawId ?? _id.value)}`);
9331
9353
  const list = useList();
9332
9354
  const {
@@ -9496,7 +9518,7 @@
9496
9518
  parent,
9497
9519
  openOnSelect,
9498
9520
  id: uid
9499
- } = useNestedItem(id, false);
9521
+ } = useNestedItem(id, () => props.disabled, false);
9500
9522
  const list = useList();
9501
9523
  const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
9502
9524
  const isLink = vue.toRef(() => props.link !== false && link.isLink.value);
@@ -10456,7 +10478,7 @@
10456
10478
  });
10457
10479
  if (flipped.isFull) {
10458
10480
  const values = flipped.values();
10459
- if (deepEqual(values.at(-1), values.at(-3))) {
10481
+ if (deepEqual(values.at(-1), values.at(-3)) && !deepEqual(values.at(-1), values.at(-2))) {
10460
10482
  // Flipping is causing a container resize loop
10461
10483
  return;
10462
10484
  }
@@ -12306,7 +12328,7 @@
12306
12328
  if (!isFocused.value) focus();
12307
12329
  vue.nextTick(() => {
12308
12330
  if (inputRef.value !== document.activeElement) {
12309
- inputRef.value?.focus();
12331
+ vue.nextTick(() => inputRef.value?.focus());
12310
12332
  }
12311
12333
  });
12312
12334
  }
@@ -12645,7 +12667,7 @@
12645
12667
  raf = requestAnimationFrame(_calculateVisibleItems);
12646
12668
  }
12647
12669
  function _calculateVisibleItems() {
12648
- if (!containerRef.value || !viewportHeight.value) return;
12670
+ if (!containerRef.value || !viewportHeight.value || !itemHeight.value) return;
12649
12671
  const scrollTop = lastScrollTop - markerOffset;
12650
12672
  const direction = Math.sign(scrollVelocity);
12651
12673
  const startPx = Math.max(0, scrollTop - BUFFER_PX);
@@ -17528,7 +17550,7 @@
17528
17550
  case 'fullDate':
17529
17551
  options = {
17530
17552
  year: 'numeric',
17531
- month: 'long',
17553
+ month: 'short',
17532
17554
  day: 'numeric'
17533
17555
  };
17534
17556
  break;
@@ -19845,7 +19867,8 @@
19845
19867
 
19846
19868
  // Dates should be compared numerically
19847
19869
  if (sortA instanceof Date && sortB instanceof Date) {
19848
- return sortA.getTime() - sortB.getTime();
19870
+ sortA = sortA.getTime();
19871
+ sortB = sortB.getTime();
19849
19872
  }
19850
19873
  [sortA, sortB] = [sortA, sortB].map(s => s != null ? s.toString().toLocaleLowerCase() : s);
19851
19874
  if (sortA !== sortB) {
@@ -20554,10 +20577,15 @@
20554
20577
  type: String,
20555
20578
  default: 'start'
20556
20579
  },
20557
- fixed: Boolean,
20580
+ fixed: {
20581
+ type: [Boolean, String],
20582
+ default: false
20583
+ },
20558
20584
  fixedOffset: [Number, String],
20585
+ fixedEndOffset: [Number, String],
20559
20586
  height: [Number, String],
20560
20587
  lastFixed: Boolean,
20588
+ firstFixedEnd: Boolean,
20561
20589
  noPadding: Boolean,
20562
20590
  tag: String,
20563
20591
  width: [Number, String],
@@ -20568,11 +20596,13 @@
20568
20596
  slots
20569
20597
  } = _ref;
20570
20598
  const Tag = props.tag ?? 'td';
20599
+ const fixedSide = typeof props.fixed === 'string' ? props.fixed : props.fixed ? 'start' : 'none';
20571
20600
  return vue.createVNode(Tag, {
20572
- "tabindex": "0",
20573
20601
  "class": vue.normalizeClass(['v-data-table__td', {
20574
- 'v-data-table-column--fixed': props.fixed,
20602
+ 'v-data-table-column--fixed': fixedSide === 'start',
20603
+ 'v-data-table-column--fixed-end': fixedSide === 'end',
20575
20604
  'v-data-table-column--last-fixed': props.lastFixed,
20605
+ 'v-data-table-column--first-fixed-end': props.firstFixedEnd,
20576
20606
  'v-data-table-column--no-padding': props.noPadding,
20577
20607
  'v-data-table-column--nowrap': props.nowrap
20578
20608
  }, `v-data-table-column--align-${props.align}`]),
@@ -20580,7 +20610,8 @@
20580
20610
  height: convertToUnit(props.height),
20581
20611
  width: convertToUnit(props.width),
20582
20612
  maxWidth: convertToUnit(props.maxWidth),
20583
- left: convertToUnit(props.fixedOffset || null)
20613
+ left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
20614
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
20584
20615
  }
20585
20616
  }, {
20586
20617
  default: () => [slots.default?.()]
@@ -20677,20 +20708,28 @@
20677
20708
  }
20678
20709
  function parseFixedColumns(items) {
20679
20710
  let seenFixed = false;
20680
- function setFixed(item) {
20681
- let parentFixed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
20711
+ function setFixed(item, side) {
20712
+ let parentFixedSide = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none';
20682
20713
  if (!item) return;
20683
- if (parentFixed) {
20684
- item.fixed = true;
20714
+ if (parentFixedSide !== 'none') {
20715
+ item.fixed = parentFixedSide;
20685
20716
  }
20686
- if (item.fixed) {
20687
- if (item.children) {
20688
- for (let i = item.children.length - 1; i >= 0; i--) {
20689
- setFixed(item.children[i], true);
20717
+
20718
+ // normalize to simplify logic below
20719
+ if (item.fixed === true) {
20720
+ item.fixed = 'start';
20721
+ }
20722
+ const orderedChildren = side === 'start' ? item.children?.toReversed() : item.children;
20723
+ if (item.fixed === side) {
20724
+ if (orderedChildren) {
20725
+ for (const child of orderedChildren) {
20726
+ setFixed(child, side, side);
20690
20727
  }
20691
20728
  } else {
20692
- if (!seenFixed) {
20729
+ if (!seenFixed && side === 'start') {
20693
20730
  item.lastFixed = true;
20731
+ } else if (!seenFixed && side === 'end') {
20732
+ item.firstFixedEnd = true;
20694
20733
  } else if (isNaN(Number(item.width))) {
20695
20734
  consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
20696
20735
  } else {
@@ -20699,36 +20738,57 @@
20699
20738
  seenFixed = true;
20700
20739
  }
20701
20740
  } else {
20702
- if (item.children) {
20703
- for (let i = item.children.length - 1; i >= 0; i--) {
20704
- setFixed(item.children[i]);
20741
+ if (orderedChildren) {
20742
+ for (const child of orderedChildren) {
20743
+ setFixed(child, side);
20705
20744
  }
20706
20745
  } else {
20707
20746
  seenFixed = false;
20708
20747
  }
20709
20748
  }
20710
20749
  }
20711
- for (let i = items.length - 1; i >= 0; i--) {
20712
- setFixed(items[i]);
20750
+ for (const item of items.toReversed()) {
20751
+ setFixed(item, 'start');
20752
+ }
20753
+ for (const item of items) {
20754
+ setFixed(item, 'end');
20713
20755
  }
20714
20756
  function setFixedOffset(item) {
20715
- let fixedOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20716
- if (!item) return fixedOffset;
20757
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20758
+ if (!item) return offset;
20717
20759
  if (item.children) {
20718
- item.fixedOffset = fixedOffset;
20760
+ item.fixedOffset = offset;
20719
20761
  for (const child of item.children) {
20720
- fixedOffset = setFixedOffset(child, fixedOffset);
20762
+ offset = setFixedOffset(child, offset);
20721
20763
  }
20722
- } else if (item.fixed) {
20723
- item.fixedOffset = fixedOffset;
20724
- fixedOffset += parseFloat(item.width || '0') || 0;
20764
+ } else if (item.fixed && item.fixed !== 'end') {
20765
+ item.fixedOffset = offset;
20766
+ offset += parseFloat(item.width || '0') || 0;
20725
20767
  }
20726
- return fixedOffset;
20768
+ return offset;
20727
20769
  }
20728
20770
  let fixedOffset = 0;
20729
20771
  for (const item of items) {
20730
20772
  fixedOffset = setFixedOffset(item, fixedOffset);
20731
20773
  }
20774
+ function setFixedEndOffset(item) {
20775
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20776
+ if (!item) return offset;
20777
+ if (item.children) {
20778
+ item.fixedEndOffset = offset;
20779
+ for (const child of item.children) {
20780
+ offset = setFixedEndOffset(child, offset);
20781
+ }
20782
+ } else if (item.fixed === 'end') {
20783
+ item.fixedEndOffset = offset;
20784
+ offset += parseFloat(item.width || '0') || 0;
20785
+ }
20786
+ return offset;
20787
+ }
20788
+ let fixedEndOffset = 0;
20789
+ for (const item of items.toReversed()) {
20790
+ fixedEndOffset = setFixedEndOffset(item, fixedEndOffset);
20791
+ }
20732
20792
  }
20733
20793
  function parse(items, maxDepth) {
20734
20794
  const headers = [];
@@ -20861,7 +20921,6 @@
20861
20921
  color: String,
20862
20922
  disableSort: Boolean,
20863
20923
  fixedHeader: Boolean,
20864
- lastFixed: Boolean,
20865
20924
  multiSort: Boolean,
20866
20925
  sortAscIcon: {
20867
20926
  type: IconValue,
@@ -20908,11 +20967,12 @@
20908
20967
  loaderClasses
20909
20968
  } = useLoader(props);
20910
20969
  function getFixedStyles(column, y) {
20911
- if (!(props.sticky || props.fixedHeader) && !(column.fixed || column.lastFixed)) return undefined;
20970
+ if (!(props.sticky || props.fixedHeader) && !column.fixed) return undefined;
20971
+ const fixedSide = typeof column.fixed === 'string' ? column.fixed : column.fixed ? 'start' : 'none';
20912
20972
  return {
20913
20973
  position: 'sticky',
20914
- left: column.fixed || column.lastFixed ? convertToUnit(column.fixedOffset) : undefined,
20915
- right: column.lastFixed ? convertToUnit(column.fixedOffset ?? 0) : undefined,
20974
+ left: fixedSide === 'start' ? convertToUnit(column.fixedOffset) : undefined,
20975
+ right: fixedSide === 'end' ? convertToUnit(column.fixedEndOffset) : undefined,
20916
20976
  top: props.sticky || props.fixedHeader ? `calc(var(--v-table-header-height) * ${y})` : undefined
20917
20977
  };
20918
20978
  }
@@ -20972,14 +21032,15 @@
20972
21032
  },
20973
21033
  "colspan": column.colspan,
20974
21034
  "rowspan": column.rowspan,
20975
- "onClick": column.sortable ? () => toggleSort(column) : undefined,
20976
21035
  "fixed": column.fixed,
20977
21036
  "nowrap": column.nowrap,
20978
21037
  "lastFixed": column.lastFixed,
20979
- "noPadding": noPadding
20980
- }, headerProps, {
20981
- "onKeydown": event => column.sortable && handleEnterKeyPress(event, column)
20982
- }), {
21038
+ "firstFixedEnd": column.firstFixedEnd,
21039
+ "noPadding": noPadding,
21040
+ "tabindex": column.sortable ? 0 : undefined,
21041
+ "onClick": column.sortable ? () => toggleSort(column) : undefined,
21042
+ "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
21043
+ }, headerProps), {
20983
21044
  default: () => {
20984
21045
  const columnSlotName = `header.${column.key}`;
20985
21046
  const columnSlotProps = {
@@ -21255,7 +21316,9 @@
21255
21316
  },
21256
21317
  "fixed": column.fixed,
21257
21318
  "fixedOffset": column.fixedOffset,
21319
+ "fixedEndOffset": column.fixedEndOffset,
21258
21320
  "lastFixed": column.lastFixed,
21321
+ "firstFixedEnd": column.firstFixedEnd,
21259
21322
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21260
21323
  "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21261
21324
  "nowrap": column.nowrap,
@@ -22665,13 +22728,9 @@
22665
22728
  const date = adapter.setYear(adapter.startOfMonth(adapter.date()), adapter.getYear(year.value));
22666
22729
  return adapter.setMonth(date, value);
22667
22730
  }, v => adapter.getMonth(v));
22668
- const weekDays = vue.computed(() => {
22669
- const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay();
22670
- return props.weekdays.map(day => (day + firstDayOfWeek) % 7);
22671
- });
22672
22731
  const weekdayLabels = vue.computed(() => {
22673
- const labels = adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat);
22674
- return weekDays.value.map(day => labels[day]);
22732
+ const firstDayOfWeek = adapter.toJsDate(adapter.startOfWeek(adapter.date(), props.firstDayOfWeek)).getDay();
22733
+ return adapter.getWeekdays(props.firstDayOfWeek, props.weekdayFormat).filter((_, i) => props.weekdays.includes((i + firstDayOfWeek) % 7));
22675
22734
  });
22676
22735
  const weeksInMonth = vue.computed(() => {
22677
22736
  const weeks = adapter.getWeekArray(month.value, props.firstDayOfWeek);
@@ -22695,13 +22754,14 @@
22695
22754
  });
22696
22755
  function genDays(days, today) {
22697
22756
  return days.filter(date => {
22698
- return weekDays.value.includes(adapter.toJsDate(date).getDay());
22757
+ return props.weekdays.includes(adapter.toJsDate(date).getDay());
22699
22758
  }).map((date, index) => {
22700
22759
  const isoDate = adapter.toISO(date);
22701
22760
  const isAdjacent = !adapter.isSameMonth(date, month.value);
22702
22761
  const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value));
22703
22762
  const isEnd = adapter.isSameDay(date, adapter.endOfMonth(month.value));
22704
22763
  const isSame = adapter.isSameDay(date, month.value);
22764
+ const weekdaysCount = props.weekdays.length;
22705
22765
  return {
22706
22766
  date,
22707
22767
  formatted: adapter.format(date, 'keyboardDate'),
@@ -22713,8 +22773,8 @@
22713
22773
  isSelected: model.value.some(value => adapter.isSameDay(date, value)),
22714
22774
  isStart,
22715
22775
  isToday: adapter.isSameDay(date, today),
22716
- isWeekEnd: index % 7 === 6,
22717
- isWeekStart: index % 7 === 0,
22776
+ isWeekEnd: index % weekdaysCount === weekdaysCount - 1,
22777
+ isWeekStart: index % weekdaysCount === 0,
22718
22778
  isoDate,
22719
22779
  localized: adapter.format(date, 'dayOfMonth'),
22720
22780
  month: adapter.getMonth(date),
@@ -22761,7 +22821,6 @@
22761
22821
  genDays,
22762
22822
  model,
22763
22823
  weeksInMonth,
22764
- weekDays,
22765
22824
  weekdayLabels,
22766
22825
  weekNumbers
22767
22826
  };
@@ -22802,7 +22861,6 @@
22802
22861
  daysInMonth,
22803
22862
  model,
22804
22863
  weekNumbers,
22805
- weekDays,
22806
22864
  weekdayLabels
22807
22865
  } = useCalendar(props);
22808
22866
  const adapter = useDate();
@@ -22877,7 +22935,7 @@
22877
22935
  useRender(() => vue.createElementVNode("div", {
22878
22936
  "class": "v-date-picker-month",
22879
22937
  "style": {
22880
- '--v-date-picker-days-in-week': weekDays.value.length
22938
+ '--v-date-picker-days-in-week': props.weekdays.length
22881
22939
  }
22882
22940
  }, [props.showWeek && vue.createElementVNode("div", {
22883
22941
  "key": "weeks",
@@ -26048,19 +26106,21 @@
26048
26106
  const contentRef = vue.ref();
26049
26107
  const inputRef = vue.ref([]);
26050
26108
  const current = vue.computed(() => inputRef.value[focusIndex.value]);
26051
- const intersectScope = vue.effectScope();
26052
- intersectScope.run(() => {
26053
- const {
26054
- intersectionRef,
26055
- isIntersecting
26056
- } = useIntersectionObserver();
26057
- vue.watch(isIntersecting, v => {
26058
- if (!v) return;
26059
- intersectionRef.value?.focus();
26060
- intersectScope.stop();
26061
- });
26062
- vue.watchEffect(() => {
26063
- intersectionRef.value = inputRef.value[0];
26109
+ useToggleScope(() => props.autofocus, () => {
26110
+ const intersectScope = vue.effectScope();
26111
+ intersectScope.run(() => {
26112
+ const {
26113
+ intersectionRef,
26114
+ isIntersecting
26115
+ } = useIntersectionObserver();
26116
+ vue.watchEffect(() => {
26117
+ intersectionRef.value = inputRef.value[0];
26118
+ });
26119
+ vue.watch(isIntersecting, v => {
26120
+ if (!v) return;
26121
+ intersectionRef.value?.focus();
26122
+ intersectScope.stop();
26123
+ });
26064
26124
  });
26065
26125
  });
26066
26126
  function onInput() {
@@ -30111,7 +30171,7 @@
30111
30171
  return vue.createVNode(VListItem, vue.mergeProps({
30112
30172
  "ref": vListItemRef
30113
30173
  }, listItemProps, {
30114
- "active": vListItemRef.value?.isActivated,
30174
+ "active": vListItemRef.value?.isActivated || undefined,
30115
30175
  "class": ['v-treeview-item', {
30116
30176
  'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
30117
30177
  'v-treeview-item--filtered': isFiltered.value
@@ -30323,10 +30383,7 @@
30323
30383
  expandIcon: '$treeviewExpand',
30324
30384
  slim: true
30325
30385
  }), ['itemType', 'nav', 'openStrategy']),
30326
- modelValue: {
30327
- type: Array,
30328
- default: () => []
30329
- }
30386
+ modelValue: Array
30330
30387
  }, 'VTreeview');
30331
30388
  const VTreeview = genericComponent()({
30332
30389
  name: 'VTreeview',
@@ -30341,7 +30398,8 @@
30341
30398
  },
30342
30399
  setup(props, _ref) {
30343
30400
  let {
30344
- slots
30401
+ slots,
30402
+ emit
30345
30403
  } = _ref;
30346
30404
  const {
30347
30405
  items
@@ -30350,13 +30408,12 @@
30350
30408
  const baseColor = vue.toRef(() => props.baseColor);
30351
30409
  const color = vue.toRef(() => props.color);
30352
30410
  const activated = useProxiedModel(props, 'activated');
30353
- const model = useProxiedModel(props, 'modelValue');
30354
- const _selected = useProxiedModel(props, 'selected', props.modelValue);
30411
+ const _selected = useProxiedModel(props, 'selected');
30355
30412
  const selected = vue.computed({
30356
- get: () => _selected.value,
30413
+ get: () => props.modelValue ?? _selected.value,
30357
30414
  set(val) {
30358
30415
  _selected.value = val;
30359
- model.value = val;
30416
+ emit('update:modelValue', val);
30360
30417
  }
30361
30418
  });
30362
30419
  const vListRef = vue.ref();
@@ -30528,7 +30585,7 @@
30528
30585
  }
30529
30586
  };
30530
30587
  useRender(() => {
30531
- return vue.createElementVNode("div", null, [slots.intervalEvent?.({
30588
+ return vue.createElementVNode("div", null, [slots['interval-event']?.({
30532
30589
  height: calcHeight().height,
30533
30590
  margin: calcHeight().margin,
30534
30591
  eventClass: 'v-calendar-internal-event',
@@ -30625,13 +30682,13 @@
30625
30682
  "style": vue.normalizeStyle(`height: ${convertToUnit(props.intervalHeight)}`)
30626
30683
  }, [vue.createElementVNode("div", vue.mergeProps({
30627
30684
  "class": "v-calendar-day__row-label"
30628
- }, getPrefixedEventHandlers(attrs, ':time', () => props)), [slots.intervalTitle?.({
30685
+ }, getPrefixedEventHandlers(attrs, ':time', () => props)), [slots['interval-title']?.({
30629
30686
  interval: interval.value
30630
30687
  }) ?? (props.index ? props.intervalFormat ? typeof props.intervalFormat === 'string' ? adapter.format(interval.value.start, 'hours12h') : props.intervalFormat(interval.value) : interval.value.label : '12 AM')]), vue.createElementVNode("div", {
30631
30688
  "class": "v-calendar-day__row-hairline"
30632
30689
  }, null), vue.createElementVNode("div", vue.mergeProps({
30633
30690
  "class": ['v-calendar-day__row-content', interval.value.events.some(e => !e.last) ? 'v-calendar-day__row-content-through' : '']
30634
- }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots.intervalBody?.({
30691
+ }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots['interval-body']?.({
30635
30692
  interval: interval.value
30636
30693
  }) ?? vue.createElementVNode("div", null, [interval.value.events?.map(event => vue.createVNode(VCalendarIntervalEvent, vue.mergeProps({
30637
30694
  "event": event,
@@ -30640,8 +30697,8 @@
30640
30697
  "intervalDuration": props.intervalDuration,
30641
30698
  "intervalHeight": props.intervalHeight
30642
30699
  }, attrs), {
30643
- ...(slots.intervalEvent ? {
30644
- intervalEvent: _ref2 => {
30700
+ ...(slots['interval-event'] ? {
30701
+ 'interval-event': _ref2 => {
30645
30702
  let {
30646
30703
  height,
30647
30704
  margin,
@@ -30649,7 +30706,7 @@
30649
30706
  event,
30650
30707
  interval
30651
30708
  } = _ref2;
30652
- return slots.intervalEvent?.({
30709
+ return slots['interval-event']?.({
30653
30710
  height,
30654
30711
  margin,
30655
30712
  eventClass,
@@ -30663,7 +30720,7 @@
30663
30720
  "style": vue.normalizeStyle(`height: ${convertToUnit(props.intervalHeight)}`)
30664
30721
  }, [vue.createElementVNode("div", vue.mergeProps({
30665
30722
  "class": ['v-calendar-day__row-content', interval.value.events.some(e => !e.last) ? 'v-calendar-day__row-content-through' : '']
30666
- }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots.intervalBody?.({
30723
+ }, getPrefixedEventHandlers(attrs, ':interval', () => interval.value)), [slots['interval-body']?.({
30667
30724
  interval: interval.value
30668
30725
  }) ?? interval.value.events?.map(event => vue.createVNode(VCalendarIntervalEvent, vue.mergeProps({
30669
30726
  "event": event,
@@ -30672,8 +30729,8 @@
30672
30729
  "intervalDuration": props.intervalDuration,
30673
30730
  "intervalHeight": props.intervalHeight
30674
30731
  }, attrs), {
30675
- ...(slots.intervalEvent ? {
30676
- intervalEvent: _ref3 => {
30732
+ ...(slots['interval-event'] ? {
30733
+ 'interval-event': _ref3 => {
30677
30734
  let {
30678
30735
  height,
30679
30736
  margin,
@@ -30681,7 +30738,7 @@
30681
30738
  event,
30682
30739
  interval
30683
30740
  } = _ref3;
30684
- return slots.intervalEvent?.({
30741
+ return slots['interval-event']?.({
30685
30742
  height,
30686
30743
  margin,
30687
30744
  eventClass,
@@ -30736,7 +30793,7 @@
30736
30793
  }), null)])]), intervals.value.map((_, index) => slots.interval?.(calendarIntervalProps) ?? vue.createVNode(VCalendarInterval, vue.mergeProps({
30737
30794
  "index": index
30738
30795
  }, calendarIntervalProps, attrs, getPrefixedEventHandlers(attrs, ':interval', () => calendarIntervalProps)), {
30739
- ...pick(slots, ['intervalBody', 'intervalEvent', 'intervalTitle'])
30796
+ ...pick(slots, ['interval-body', 'interval-event', 'interval-title'])
30740
30797
  }))]);
30741
30798
  });
30742
30799
  return {
@@ -30880,7 +30937,7 @@
30880
30937
  }, getPrefixedEventHandlers(attrs, ':day', () => props)), [!props.day?.isHidden ? vue.createElementVNode("div", {
30881
30938
  "key": "title",
30882
30939
  "class": "v-calendar-weekly__day-label"
30883
- }, [slots.dayTitle?.({
30940
+ }, [slots['day-title']?.({
30884
30941
  title: props.title
30885
30942
  }) ?? vue.createVNode(VBtn, vue.mergeProps({
30886
30943
  "class": props.day?.isToday ? 'v-calendar-weekly__day-label__today' : undefined,
@@ -30893,12 +30950,12 @@
30893
30950
  }, getPrefixedEventHandlers(attrs, ':date', () => props)), null)]) : undefined, !props.day?.isHidden ? vue.createElementVNode("div", {
30894
30951
  "key": "content",
30895
30952
  "class": "v-calendar-weekly__day-content"
30896
- }, [slots.dayBody?.({
30953
+ }, [slots['day-body']?.({
30897
30954
  day: props.day,
30898
30955
  events: props.events
30899
30956
  }) ?? vue.createElementVNode("div", null, [vue.createElementVNode("div", {
30900
30957
  "class": "v-calendar-weekly__day-alldayevents-container"
30901
- }, [props.events?.filter(event => event.allDay).map(event => slots.dayEvent ? slots.dayEvent({
30958
+ }, [props.events?.filter(event => event.allDay).map(event => slots['day-event'] ? slots['day-event']({
30902
30959
  day: props.day,
30903
30960
  allDay: true,
30904
30961
  event
@@ -30908,7 +30965,7 @@
30908
30965
  "allDay": true
30909
30966
  }, attrs), null))]), vue.createElementVNode("div", {
30910
30967
  "class": "v-calendar-weekly__day-events-container"
30911
- }, [props.events?.filter(event => !event.allDay).map(event => slots.dayEvent ? slots.dayEvent({
30968
+ }, [props.events?.filter(event => !event.allDay).map(event => slots['day-event'] ? slots['day-event']({
30912
30969
  day: props.day,
30913
30970
  event,
30914
30971
  allDay: false
@@ -30953,9 +31010,8 @@
30953
31010
  model,
30954
31011
  displayValue,
30955
31012
  weekNumbers,
30956
- weekDays
31013
+ weekdayLabels
30957
31014
  } = useCalendar(props);
30958
- const dayNames = adapter.getWeekdays();
30959
31015
  function onClickNext() {
30960
31016
  if (props.viewMode === 'month') {
30961
31017
  model.value = [adapter.addMonths(displayValue.value, 1)];
@@ -30993,6 +31049,7 @@
30993
31049
  useRender(() => {
30994
31050
  const calendarDayProps = VCalendarDay.filterProps(props);
30995
31051
  const calendarHeaderProps = VCalendarHeader.filterProps(props);
31052
+ const weekdaysCount = daysInWeek.value.length;
30996
31053
  return vue.createElementVNode("div", {
30997
31054
  "class": vue.normalizeClass(['v-calendar', {
30998
31055
  'v-calendar-monthly': props.viewMode === 'month',
@@ -31014,19 +31071,19 @@
31014
31071
  }), {
31015
31072
  title: slots.title
31016
31073
  }))]), vue.createElementVNode("div", {
31017
- "class": vue.normalizeClass(['v-calendar__container', `days__${weekDays.value.length}`])
31074
+ "class": vue.normalizeClass(['v-calendar__container', `days__${weekdaysCount}`])
31018
31075
  }, [props.viewMode === 'month' && !props.hideDayHeader && vue.createElementVNode("div", {
31019
- "class": vue.normalizeClass(['v-calendar-weekly__head', `days__${weekDays.value.length}`, ...(!props.hideWeekNumber ? ['v-calendar-weekly__head-weeknumbers'] : [])]),
31076
+ "class": vue.normalizeClass(['v-calendar-weekly__head', `days__${weekdaysCount}`, ...(!props.hideWeekNumber ? ['v-calendar-weekly__head-weeknumbers'] : [])]),
31020
31077
  "key": "calendarWeeklyHead"
31021
31078
  }, [!props.hideWeekNumber ? vue.createElementVNode("div", {
31022
31079
  "key": "weekNumber0",
31023
31080
  "class": "v-calendar-weekly__head-weeknumber"
31024
- }, null) : '', weekDays.value.map(weekday => vue.createElementVNode("div", {
31081
+ }, null) : '', weekdayLabels.value.map(weekday => vue.createElementVNode("div", {
31025
31082
  "class": vue.normalizeClass(`v-calendar-weekly__head-weekday${!props.hideWeekNumber ? '-with-weeknumber' : ''}`)
31026
- }, [dayNames[weekday]]))]), props.viewMode === 'month' && vue.createElementVNode("div", {
31083
+ }, [weekday]))]), props.viewMode === 'month' && vue.createElementVNode("div", {
31027
31084
  "key": "VCalendarMonth",
31028
- "class": vue.normalizeClass(['v-calendar-month__days', `days${!props.hideWeekNumber ? '-with-weeknumbers' : ''}__${weekDays.value.length}`, ...(!props.hideWeekNumber ? ['v-calendar-month__weeknumbers'] : [])])
31029
- }, [chunkArray(daysInMonth.value, weekDays.value.length).map((week, wi) => [!props.hideWeekNumber ? vue.createElementVNode("div", vue.mergeProps({
31085
+ "class": vue.normalizeClass(['v-calendar-month__days', `days${!props.hideWeekNumber ? '-with-weeknumbers' : ''}__${weekdaysCount}`, ...(!props.hideWeekNumber ? ['v-calendar-month__weeknumbers'] : [])])
31086
+ }, [chunkArray(daysInMonth.value, weekdaysCount).map((week, wi) => [!props.hideWeekNumber ? vue.createElementVNode("div", vue.mergeProps({
31030
31087
  "class": "v-calendar-month__weeknumber"
31031
31088
  }, getPrefixedEventHandlers(attrs, ':weekNumber', () => ({
31032
31089
  weekNumber: weekNumbers.value[wi],
@@ -31049,7 +31106,7 @@
31049
31106
  "dayIndex": i,
31050
31107
  "events": props.events?.filter(e => adapter.isSameDay(e.start, day.date) || adapter.isSameDay(e.end, day.date))
31051
31108
  }, attrs), {
31052
- ...pick(slots, ['interval', 'intervalBody', 'intervalEvent', 'intervalTitle'])
31109
+ ...pick(slots, ['interval', 'interval-body', 'interval-event', 'interval-title'])
31053
31110
  })), props.viewMode === 'day' && (slots['day-interval'] ? slots['day-interval']({
31054
31111
  day: genDays([displayValue.value], adapter.date())[0],
31055
31112
  dayIndex: 0,
@@ -31964,6 +32021,7 @@
31964
32021
  opacity: props.opacity
31965
32022
  };
31966
32023
  return vue.createVNode(props.tag, {
32024
+ "type": props.tag === 'button' ? 'button' : undefined,
31967
32025
  "class": vue.normalizeClass([{
31968
32026
  'v-icon-btn': true,
31969
32027
  'v-icon-btn--active': isActive.value,
@@ -33526,7 +33584,7 @@
33526
33584
  };
33527
33585
  });
33528
33586
  }
33529
- const version$1 = "3.9.0-beta.1-dev.2025-06-28";
33587
+ const version$1 = "3.9.0-beta.1-dev.2025-07-04";
33530
33588
  createVuetify$1.version = version$1;
33531
33589
 
33532
33590
  // Vue's inject() can only be used in setup
@@ -33824,7 +33882,7 @@
33824
33882
 
33825
33883
  /* eslint-disable local-rules/sort-imports */
33826
33884
 
33827
- const version = "3.9.0-beta.1-dev.2025-06-28";
33885
+ const version = "3.9.0-beta.1-dev.2025-07-04";
33828
33886
 
33829
33887
  /* eslint-disable local-rules/sort-imports */
33830
33888