@vuetify/nightly 3.9.0-beta.1-dev.2025-07-05 → 3.9.0-dev.2025-07-15

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 (79) hide show
  1. package/CHANGELOG.md +4 -113
  2. package/dist/json/attributes.json +3780 -3744
  3. package/dist/json/importMap-labs.json +16 -16
  4. package/dist/json/importMap.json +190 -190
  5. package/dist/json/tags.json +9 -0
  6. package/dist/json/web-types.json +6526 -6437
  7. package/dist/vuetify-labs.cjs +136 -34
  8. package/dist/vuetify-labs.css +4604 -4547
  9. package/dist/vuetify-labs.d.ts +280 -185
  10. package/dist/vuetify-labs.esm.js +136 -34
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +136 -34
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +135 -33
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3908 -3851
  17. package/dist/vuetify.d.ts +280 -185
  18. package/dist/vuetify.esm.js +135 -33
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +135 -33
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1089 -1085
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.d.ts +39 -14
  26. package/lib/components/VAutocomplete/VAutocomplete.js +3 -2
  27. package/lib/components/VAutocomplete/VAutocomplete.js.map +1 -1
  28. package/lib/components/VCombobox/VCombobox.d.ts +39 -14
  29. package/lib/components/VCombobox/VCombobox.js +3 -2
  30. package/lib/components/VCombobox/VCombobox.js.map +1 -1
  31. package/lib/components/VDataIterator/composables/items.d.ts +2 -1
  32. package/lib/components/VDataIterator/composables/items.js.map +1 -1
  33. package/lib/components/VDataTable/types.d.ts +1 -1
  34. package/lib/components/VDataTable/types.js.map +1 -1
  35. package/lib/components/VDatePicker/VDatePicker.js +2 -1
  36. package/lib/components/VDatePicker/VDatePicker.js.map +1 -1
  37. package/lib/components/VList/VList.d.ts +24 -27
  38. package/lib/components/VList/VList.js +2 -5
  39. package/lib/components/VList/VList.js.map +1 -1
  40. package/lib/components/VList/VListItem.js +7 -1
  41. package/lib/components/VList/VListItem.js.map +1 -1
  42. package/lib/components/VSelect/VSelect.d.ts +58 -22
  43. package/lib/components/VSelect/VSelect.js +3 -2
  44. package/lib/components/VSelect/VSelect.js.map +1 -1
  45. package/lib/components/VTreeview/VTreeview.d.ts +229 -167
  46. package/lib/components/VTreeview/VTreeview.js +7 -3
  47. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  48. package/lib/components/VTreeview/VTreeviewChildren.d.ts +81 -10
  49. package/lib/components/VTreeview/VTreeviewChildren.js +50 -11
  50. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  51. package/lib/components/VTreeview/VTreeviewItem.css +57 -0
  52. package/lib/components/VTreeview/VTreeviewItem.d.ts +119 -94
  53. package/lib/components/VTreeview/VTreeviewItem.js +13 -3
  54. package/lib/components/VTreeview/VTreeviewItem.js.map +1 -1
  55. package/lib/components/VTreeview/VTreeviewItem.sass +60 -0
  56. package/lib/components/VTreeview/_variables.scss +15 -0
  57. package/lib/composables/filter.d.ts +1 -0
  58. package/lib/composables/filter.js +1 -1
  59. package/lib/composables/filter.js.map +1 -1
  60. package/lib/composables/list-items.d.ts +14 -1
  61. package/lib/composables/list-items.js +9 -3
  62. package/lib/composables/list-items.js.map +1 -1
  63. package/lib/entry-bundler.js +1 -1
  64. package/lib/entry-bundler.js.map +1 -1
  65. package/lib/framework.d.ts +65 -64
  66. package/lib/framework.js +1 -1
  67. package/lib/framework.js.map +1 -1
  68. package/lib/labs/VCalendar/VCalendar.js +1 -1
  69. package/lib/labs/VCalendar/VCalendar.js.map +1 -1
  70. package/lib/util/helpers.d.ts +3 -0
  71. package/lib/util/helpers.js +4 -0
  72. package/lib/util/helpers.js.map +1 -1
  73. package/lib/util/indentLines.d.ts +17 -0
  74. package/lib/util/indentLines.js +34 -0
  75. package/lib/util/indentLines.js.map +1 -0
  76. package/lib/util/index.d.ts +1 -0
  77. package/lib/util/index.js +1 -0
  78. package/lib/util/index.js.map +1 -1
  79. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.0-beta.1-dev.2025-07-05
2
+ * Vuetify v3.9.0-dev.2025-07-15
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -546,6 +546,10 @@ function ensureValidVNode(vnodes) {
546
546
  return child.type !== Fragment || ensureValidVNode(child.children);
547
547
  }) ? vnodes : null;
548
548
  }
549
+ function renderSlot(slot, props, fallback) {
550
+ // TODO: check if slot returns elements: #18308
551
+ return slot?.(props) ?? fallback?.(props);
552
+ }
549
553
  function defer(timeout, cb) {
550
554
  if (!IN_BROWSER || timeout === 0) {
551
555
  cb();
@@ -1620,6 +1624,40 @@ function isPotentiallyScrollable(el) {
1620
1624
  return ['scroll', 'auto'].includes(style.overflowY);
1621
1625
  }
1622
1626
 
1627
+ // Types
1628
+
1629
+ function getIndentLines(_ref) {
1630
+ let {
1631
+ depth,
1632
+ isLast,
1633
+ isLastGroup,
1634
+ leafLinks,
1635
+ separateRoots,
1636
+ parentIndentLines,
1637
+ variant
1638
+ } = _ref;
1639
+ if (!parentIndentLines || !depth) {
1640
+ return {
1641
+ leaf: undefined,
1642
+ node: undefined,
1643
+ children: parentIndentLines
1644
+ };
1645
+ }
1646
+ if (variant === 'simple') {
1647
+ return {
1648
+ leaf: [...parentIndentLines, 'line'],
1649
+ node: [...parentIndentLines, 'line'],
1650
+ children: [...parentIndentLines, 'line']
1651
+ };
1652
+ }
1653
+ const isLastLeaf = isLast && (!isLastGroup || separateRoots || depth > 1);
1654
+ return {
1655
+ leaf: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf', ...(leafLinks ? ['leaf-link'] : [])],
1656
+ node: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf'],
1657
+ children: [...parentIndentLines, isLastLeaf ? 'none' : 'line']
1658
+ };
1659
+ }
1660
+
1623
1661
  function isFixedPosition(el) {
1624
1662
  while (el) {
1625
1663
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -9520,6 +9558,11 @@ const VListItem = genericComponent()({
9520
9558
  const isLink = toRef(() => props.link !== false && link.isLink.value);
9521
9559
  const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9522
9560
  const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9561
+ const role = computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9562
+ const ariaSelected = computed(() => {
9563
+ if (!isSelectable.value) return undefined;
9564
+ return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
9565
+ });
9523
9566
  const roundedProps = toRef(() => props.rounded || props.nav);
9524
9567
  const color = toRef(() => props.color ?? props.activeColor);
9525
9568
  const variantProps = toRef(() => ({
@@ -9623,7 +9666,8 @@ const VListItem = genericComponent()({
9623
9666
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
9624
9667
  "style": [colorStyles.value, dimensionStyles.value, props.style],
9625
9668
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
9626
- "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
9669
+ "aria-selected": ariaSelected.value,
9670
+ "role": role.value,
9627
9671
  "onClick": onClick,
9628
9672
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
9629
9673
  }, link.linkProps), {
@@ -9866,6 +9910,10 @@ const makeItemsProps = propsFactory({
9866
9910
  type: [Boolean, String, Array, Function],
9867
9911
  default: 'props'
9868
9912
  },
9913
+ itemType: {
9914
+ type: [Boolean, String, Array, Function],
9915
+ default: 'type'
9916
+ },
9869
9917
  returnObject: Boolean,
9870
9918
  valueComparator: Function
9871
9919
  }, 'list-items');
@@ -9873,6 +9921,7 @@ function transformItem$3(props, item) {
9873
9921
  const title = getPropertyFromItem(item, props.itemTitle, item);
9874
9922
  const value = getPropertyFromItem(item, props.itemValue, title);
9875
9923
  const children = getPropertyFromItem(item, props.itemChildren);
9924
+ const type = getPropertyFromItem(item, props.itemType, 'item');
9876
9925
  const itemProps = props.itemProps === true ? typeof item === 'object' && item != null && !Array.isArray(item) ? 'children' in item ? omit(item, ['children']) : item : undefined : getPropertyFromItem(item, props.itemProps);
9877
9926
  const _props = {
9878
9927
  title,
@@ -9880,15 +9929,16 @@ function transformItem$3(props, item) {
9880
9929
  ...itemProps
9881
9930
  };
9882
9931
  return {
9932
+ type,
9883
9933
  title: String(_props.title ?? ''),
9884
9934
  value: _props.value,
9885
9935
  props: _props,
9886
- children: Array.isArray(children) ? transformItems$3(props, children) : undefined,
9936
+ children: type === 'item' && Array.isArray(children) ? transformItems$3(props, children) : undefined,
9887
9937
  raw: item
9888
9938
  };
9889
9939
  }
9890
9940
  function transformItems$3(props, items) {
9891
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9941
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
9892
9942
  const array = [];
9893
9943
  for (const item of items) {
9894
9944
  array.push(transformItem$3(_props, item));
@@ -9930,7 +9980,7 @@ function useItems(props) {
9930
9980
  const _returnObject = props.returnObject;
9931
9981
  const hasValueComparator = !!props.valueComparator;
9932
9982
  const valueComparator = props.valueComparator || deepEqual;
9933
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9983
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
9934
9984
  const returnValue = [];
9935
9985
  main: for (const v of value) {
9936
9986
  // When the model value is null, return an InternalItem
@@ -10050,10 +10100,6 @@ const makeVListProps = propsFactory({
10050
10100
  ...makeDensityProps(),
10051
10101
  ...makeDimensionProps(),
10052
10102
  ...makeElevationProps(),
10053
- itemType: {
10054
- type: String,
10055
- default: 'type'
10056
- },
10057
10103
  ...makeItemsProps(),
10058
10104
  ...makeRoundedProps(),
10059
10105
  ...makeTagProps(),
@@ -10113,6 +10159,7 @@ const VList = genericComponent()({
10113
10159
  const activeColor = toRef(() => props.activeColor);
10114
10160
  const baseColor = toRef(() => props.baseColor);
10115
10161
  const color = toRef(() => props.color);
10162
+ const isSelectable = toRef(() => props.selectable || props.activatable);
10116
10163
  createList({
10117
10164
  filterable: props.filterable
10118
10165
  });
@@ -10182,7 +10229,7 @@ const VList = genericComponent()({
10182
10229
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
10183
10230
  "style": normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
10184
10231
  "tabindex": props.disabled ? -1 : 0,
10185
- "role": "listbox",
10232
+ "role": isSelectable.value ? 'listbox' : 'list',
10186
10233
  "aria-activedescendant": undefined,
10187
10234
  "onFocusin": onFocusin,
10188
10235
  "onFocusout": onFocusout,
@@ -13247,6 +13294,7 @@ const VSelect = genericComponent()({
13247
13294
  "onKeydown": onListKeydown,
13248
13295
  "onFocusin": onFocusin,
13249
13296
  "tabindex": "-1",
13297
+ "selectable": true,
13250
13298
  "aria-live": "polite",
13251
13299
  "aria-label": `${props.label}-list`,
13252
13300
  "color": props.itemColor ?? props.color
@@ -13272,7 +13320,7 @@ const VSelect = genericComponent()({
13272
13320
  key: item.value,
13273
13321
  onClick: () => select(item, null)
13274
13322
  });
13275
- if (item.raw.type === 'divider') {
13323
+ if (item.type === 'divider') {
13276
13324
  return slots.divider?.({
13277
13325
  props: item.raw,
13278
13326
  index
@@ -13280,7 +13328,7 @@ const VSelect = genericComponent()({
13280
13328
  "key": `divider-${index}`
13281
13329
  }), null);
13282
13330
  }
13283
- if (item.raw.type === 'subheader') {
13331
+ if (item.type === 'subheader') {
13284
13332
  return slots.subheader?.({
13285
13333
  props: item.raw,
13286
13334
  index
@@ -13448,7 +13496,7 @@ function filterItems(items, query, options) {
13448
13496
  let match = -1;
13449
13497
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13450
13498
  if (typeof item === 'object') {
13451
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13499
+ if (item.type === 'divider' || item.type === 'subheader') {
13452
13500
  continue;
13453
13501
  }
13454
13502
  const filterKeys = keys || Object.keys(transformed);
@@ -13866,6 +13914,7 @@ const VAutocomplete = genericComponent()({
13866
13914
  "onFocusin": onFocusin,
13867
13915
  "onFocusout": onFocusout,
13868
13916
  "tabindex": "-1",
13917
+ "selectable": true,
13869
13918
  "aria-live": "polite",
13870
13919
  "color": props.itemColor ?? props.color
13871
13920
  }, listEvents, props.listProps), {
@@ -13890,7 +13939,7 @@ const VAutocomplete = genericComponent()({
13890
13939
  active: highlightFirst.value && index === 0 ? true : undefined,
13891
13940
  onClick: () => select(item, null)
13892
13941
  });
13893
- if (item.raw.type === 'divider') {
13942
+ if (item.type === 'divider') {
13894
13943
  return slots.divider?.({
13895
13944
  props: item.raw,
13896
13945
  index
@@ -13898,7 +13947,7 @@ const VAutocomplete = genericComponent()({
13898
13947
  "key": `divider-${index}`
13899
13948
  }), null);
13900
13949
  }
13901
- if (item.raw.type === 'subheader') {
13950
+ if (item.type === 'subheader') {
13902
13951
  return slots.subheader?.({
13903
13952
  props: item.raw,
13904
13953
  index
@@ -18953,6 +19002,7 @@ const VCombobox = genericComponent()({
18953
19002
  "selected": selectedValues.value,
18954
19003
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
18955
19004
  "onMousedown": e => e.preventDefault(),
19005
+ "selectable": true,
18956
19006
  "onKeydown": onListKeydown,
18957
19007
  "onFocusin": onFocusin,
18958
19008
  "onFocusout": onFocusout,
@@ -18981,7 +19031,7 @@ const VCombobox = genericComponent()({
18981
19031
  active: highlightFirst.value && index === 0 ? true : undefined,
18982
19032
  onClick: () => select(item, null)
18983
19033
  });
18984
- if (item.raw.type === 'divider') {
19034
+ if (item.type === 'divider') {
18985
19035
  return slots.divider?.({
18986
19036
  props: item.raw,
18987
19037
  index
@@ -18989,7 +19039,7 @@ const VCombobox = genericComponent()({
18989
19039
  "key": `divider-${index}`
18990
19040
  }), null);
18991
19041
  }
18992
- if (item.raw.type === 'subheader') {
19042
+ if (item.type === 'subheader') {
18993
19043
  return slots.subheader?.({
18994
19044
  props: item.raw,
18995
19045
  index
@@ -23331,7 +23381,8 @@ const VDatePicker = genericComponent()({
23331
23381
  }
23332
23382
  function allowedMonths(month) {
23333
23383
  if (typeof props.allowedDates === 'function') {
23334
- const startOfMonth = adapter.parseISO(`${year.value}-${month + 1}-01`);
23384
+ const monthTwoDigits = String(month + 1).padStart(2, '0');
23385
+ const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);
23335
23386
  return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth));
23336
23387
  }
23337
23388
  if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
@@ -30127,6 +30178,8 @@ const VTreeviewSymbol = Symbol.for('vuetify:v-treeview');
30127
30178
 
30128
30179
  const makeVTreeviewItemProps = propsFactory({
30129
30180
  loading: Boolean,
30181
+ hideActions: Boolean,
30182
+ indentLines: Array,
30130
30183
  toggleIcon: IconValue,
30131
30184
  ...makeVListItemProps({
30132
30185
  slim: true
@@ -30163,7 +30216,7 @@ const VTreeviewItem = genericComponent()({
30163
30216
  }
30164
30217
  useRender(() => {
30165
30218
  const listItemProps = VListItem.filterProps(props);
30166
- const hasPrepend = slots.prepend || props.toggleIcon;
30219
+ const hasPrepend = slots.prepend || props.toggleIcon || props.indentLines;
30167
30220
  return createVNode(VListItem, mergeProps({
30168
30221
  "ref": vListItemRef
30169
30222
  }, listItemProps, {
@@ -30177,7 +30230,15 @@ const VTreeviewItem = genericComponent()({
30177
30230
  }), {
30178
30231
  ...slots,
30179
30232
  prepend: hasPrepend ? slotProps => {
30180
- return createElementVNode(Fragment, null, [createVNode(VListItemAction, {
30233
+ return createElementVNode(Fragment, null, [props.indentLines && props.indentLines.length > 0 ? createElementVNode("div", {
30234
+ "key": "indent-lines",
30235
+ "class": "v-treeview-indent-lines",
30236
+ "style": {
30237
+ '--v-indent-parts': props.indentLines.length
30238
+ }
30239
+ }, [props.indentLines.map(type => createElementVNode("div", {
30240
+ "class": normalizeClass(`v-treeview-indent-line v-treeview-indent-line--${type}`)
30241
+ }, null))]) : '', !props.hideActions && createVNode(VListItemAction, {
30181
30242
  "start": true
30182
30243
  }, {
30183
30244
  default: () => [props.toggleIcon ? createVNode(VBtn, {
@@ -30229,10 +30290,15 @@ const makeVTreeviewChildrenProps = propsFactory({
30229
30290
  selectedColor: String,
30230
30291
  selectStrategy: [String, Function, Object],
30231
30292
  index: Number,
30293
+ isLastGroup: Boolean,
30294
+ separateRoots: Boolean,
30295
+ parentIndentLines: Array,
30296
+ indentLinesVariant: String,
30232
30297
  path: {
30233
30298
  type: Array,
30234
30299
  default: () => []
30235
30300
  },
30301
+ ...pick(makeVTreeviewItemProps(), ['hideActions']),
30236
30302
  ...makeDensityProps()
30237
30303
  }, 'VTreeviewChildren');
30238
30304
  const VTreeviewChildren = genericComponent()({
@@ -30261,19 +30327,32 @@ const VTreeviewChildren = genericComponent()({
30261
30327
  select(isSelected);
30262
30328
  }
30263
30329
  }
30264
- return () => slots.default?.() ?? props.items?.map((item, index) => {
30330
+ return () => slots.default?.() ?? props.items?.map((item, index, items) => {
30265
30331
  const {
30266
30332
  children,
30267
30333
  props: itemProps
30268
30334
  } = item;
30269
30335
  const loading = isLoading.has(item.value);
30336
+ const nextItemHasChildren = !!items.at(index + 1)?.children;
30337
+ const depth = props.path?.length ?? 0;
30338
+ const isLast = items.length - 1 === index;
30270
30339
  const treeItemProps = {
30271
30340
  index,
30272
- depth: props.path?.length ?? 0,
30341
+ depth,
30273
30342
  isFirst: index === 0,
30274
- isLast: props.items ? props.items.length - 1 === index : false,
30275
- path: [...props.path, index]
30343
+ isLast,
30344
+ path: [...props.path, index],
30345
+ hideAction: props.hideActions
30276
30346
  };
30347
+ const indentLines = getIndentLines({
30348
+ depth,
30349
+ isLast,
30350
+ isLastGroup: props.isLastGroup,
30351
+ leafLinks: !props.hideActions,
30352
+ separateRoots: props.separateRoots,
30353
+ parentIndentLines: props.parentIndentLines,
30354
+ variant: props.indentLinesVariant
30355
+ });
30277
30356
  const slotsWithItem = {
30278
30357
  prepend: slotProps => createElementVNode(Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && createElementVNode("div", null, [createVNode(VCheckboxBtn, {
30279
30358
  "key": item.value,
@@ -30339,21 +30418,40 @@ const VTreeviewChildren = genericComponent()({
30339
30418
  return createVNode(VTreeviewItem, mergeProps({
30340
30419
  "ref": el => activatorItems.value[index] = el
30341
30420
  }, listItemProps, {
30421
+ "hideActions": props.hideActions,
30422
+ "indentLines": indentLines.node,
30342
30423
  "value": props.returnObject ? item.raw : itemProps.value,
30343
30424
  "loading": loading
30344
30425
  }), slotsWithItem);
30345
30426
  },
30346
30427
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30347
30428
  "items": children,
30429
+ "indentLinesVariant": props.indentLinesVariant,
30430
+ "parentIndentLines": indentLines.children,
30431
+ "isLastGroup": nextItemHasChildren,
30348
30432
  "returnObject": props.returnObject
30349
30433
  }), slots)
30350
- }) : slots.item?.({
30434
+ }) : renderSlot(slots.item, {
30351
30435
  props: itemProps,
30352
30436
  item: item.raw,
30353
30437
  internalItem: item
30354
- }) ?? createVNode(VTreeviewItem, mergeProps(itemProps, {
30355
- "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30356
- }), slotsWithItem);
30438
+ }, () => {
30439
+ if (item.type === 'divider') {
30440
+ return renderSlot(slots.divider, {
30441
+ props: item.raw
30442
+ }, () => createVNode(VDivider, item.props, null));
30443
+ }
30444
+ if (item.type === 'subheader') {
30445
+ return renderSlot(slots.subheader, {
30446
+ props: item.raw
30447
+ }, () => createVNode(VListSubheader, item.props, null));
30448
+ }
30449
+ return createVNode(VTreeviewItem, mergeProps(itemProps, {
30450
+ "hideActions": props.hideActions,
30451
+ "indentLines": indentLines.leaf,
30452
+ "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30453
+ }), slotsWithItem);
30454
+ });
30357
30455
  });
30358
30456
  }
30359
30457
  });
@@ -30369,16 +30467,17 @@ function flatten(items) {
30369
30467
  const makeVTreeviewProps = propsFactory({
30370
30468
  fluid: Boolean,
30371
30469
  openAll: Boolean,
30470
+ indentLines: [Boolean, String],
30372
30471
  search: String,
30373
30472
  ...makeFilterProps({
30374
30473
  filterKeys: ['title']
30375
30474
  }),
30376
- ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
30475
+ ...omit(makeVTreeviewChildrenProps(), ['index', 'path', 'indentLinesVariant', 'parentIndentLines', 'isLastGroup']),
30377
30476
  ...omit(makeVListProps({
30378
30477
  collapseIcon: '$treeviewCollapse',
30379
30478
  expandIcon: '$treeviewExpand',
30380
30479
  slim: true
30381
- }), ['itemType', 'nav', 'openStrategy']),
30480
+ }), ['nav', 'openStrategy']),
30382
30481
  modelValue: Array
30383
30482
  }, 'VTreeview');
30384
30483
  const VTreeview = genericComponent()({
@@ -30475,6 +30574,7 @@ const VTreeview = genericComponent()({
30475
30574
  useRender(() => {
30476
30575
  const listProps = VList.filterProps(props);
30477
30576
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
30577
+ const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines;
30478
30578
  return createVNode(VList, mergeProps({
30479
30579
  "ref": vListRef
30480
30580
  }, listProps, {
@@ -30492,7 +30592,9 @@ const VTreeview = genericComponent()({
30492
30592
  default: () => [createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30493
30593
  "density": props.density,
30494
30594
  "returnObject": props.returnObject,
30495
- "items": items.value
30595
+ "items": items.value,
30596
+ "parentIndentLines": props.indentLines ? [] : undefined,
30597
+ "indentLinesVariant": indentLinesVariant
30496
30598
  }), slots)]
30497
30599
  });
30498
30600
  });
@@ -31085,7 +31187,7 @@ const VCalendar = genericComponent()({
31085
31187
  weekNumber: weekNumbers.value[wi],
31086
31188
  week
31087
31189
  }))), [weekNumbers.value[wi]]) : '', week.map(day => createVNode(VCalendarMonthDay, mergeProps({
31088
- "key": day.date.getTime()
31190
+ "key": adapter.toJsDate(day.date).getTime()
31089
31191
  }, calendarDayProps, {
31090
31192
  "day": day,
31091
31193
  "title": adapter.format(day.date, 'dayOfMonth'),
@@ -33580,7 +33682,7 @@ function createVuetify$1() {
33580
33682
  };
33581
33683
  });
33582
33684
  }
33583
- const version$1 = "3.9.0-beta.1-dev.2025-07-05";
33685
+ const version$1 = "3.9.0-dev.2025-07-15";
33584
33686
  createVuetify$1.version = version$1;
33585
33687
 
33586
33688
  // Vue's inject() can only be used in setup
@@ -33878,7 +33980,7 @@ var index = /*#__PURE__*/Object.freeze({
33878
33980
 
33879
33981
  /* eslint-disable local-rules/sort-imports */
33880
33982
 
33881
- const version = "3.9.0-beta.1-dev.2025-07-05";
33983
+ const version = "3.9.0-dev.2025-07-15";
33882
33984
 
33883
33985
  /* eslint-disable local-rules/sort-imports */
33884
33986