@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
  */
@@ -469,6 +469,10 @@ function ensureValidVNode(vnodes) {
469
469
  return child.type !== Fragment || ensureValidVNode(child.children);
470
470
  }) ? vnodes : null;
471
471
  }
472
+ function renderSlot(slot, props, fallback) {
473
+ // TODO: check if slot returns elements: #18308
474
+ return slot?.(props) ?? fallback?.(props);
475
+ }
472
476
  function defer(timeout, cb) {
473
477
  if (!IN_BROWSER || timeout === 0) {
474
478
  cb();
@@ -1614,6 +1618,40 @@ function isPotentiallyScrollable(el) {
1614
1618
  return ['scroll', 'auto'].includes(style.overflowY);
1615
1619
  }
1616
1620
 
1621
+ // Types
1622
+
1623
+ function getIndentLines(_ref) {
1624
+ let {
1625
+ depth,
1626
+ isLast,
1627
+ isLastGroup,
1628
+ leafLinks,
1629
+ separateRoots,
1630
+ parentIndentLines,
1631
+ variant
1632
+ } = _ref;
1633
+ if (!parentIndentLines || !depth) {
1634
+ return {
1635
+ leaf: undefined,
1636
+ node: undefined,
1637
+ children: parentIndentLines
1638
+ };
1639
+ }
1640
+ if (variant === 'simple') {
1641
+ return {
1642
+ leaf: [...parentIndentLines, 'line'],
1643
+ node: [...parentIndentLines, 'line'],
1644
+ children: [...parentIndentLines, 'line']
1645
+ };
1646
+ }
1647
+ const isLastLeaf = isLast && (!isLastGroup || separateRoots || depth > 1);
1648
+ return {
1649
+ leaf: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf', ...(leafLinks ? ['leaf-link'] : [])],
1650
+ node: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf'],
1651
+ children: [...parentIndentLines, isLastLeaf ? 'none' : 'line']
1652
+ };
1653
+ }
1654
+
1617
1655
  function isFixedPosition(el) {
1618
1656
  while (el) {
1619
1657
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -9798,6 +9836,11 @@ const VListItem = genericComponent()({
9798
9836
  const isLink = toRef(() => props.link !== false && link.isLink.value);
9799
9837
  const isSelectable = computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9800
9838
  const isClickable = computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9839
+ const role = computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9840
+ const ariaSelected = computed(() => {
9841
+ if (!isSelectable.value) return undefined;
9842
+ return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
9843
+ });
9801
9844
  const roundedProps = toRef(() => props.rounded || props.nav);
9802
9845
  const color = toRef(() => props.color ?? props.activeColor);
9803
9846
  const variantProps = toRef(() => ({
@@ -9901,7 +9944,8 @@ const VListItem = genericComponent()({
9901
9944
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
9902
9945
  "style": [colorStyles.value, dimensionStyles.value, props.style],
9903
9946
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
9904
- "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
9947
+ "aria-selected": ariaSelected.value,
9948
+ "role": role.value,
9905
9949
  "onClick": onClick,
9906
9950
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
9907
9951
  }, link.linkProps), {
@@ -10144,6 +10188,10 @@ const makeItemsProps = propsFactory({
10144
10188
  type: [Boolean, String, Array, Function],
10145
10189
  default: 'props'
10146
10190
  },
10191
+ itemType: {
10192
+ type: [Boolean, String, Array, Function],
10193
+ default: 'type'
10194
+ },
10147
10195
  returnObject: Boolean,
10148
10196
  valueComparator: Function
10149
10197
  }, 'list-items');
@@ -10151,6 +10199,7 @@ function transformItem$3(props, item) {
10151
10199
  const title = getPropertyFromItem(item, props.itemTitle, item);
10152
10200
  const value = getPropertyFromItem(item, props.itemValue, title);
10153
10201
  const children = getPropertyFromItem(item, props.itemChildren);
10202
+ const type = getPropertyFromItem(item, props.itemType, 'item');
10154
10203
  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);
10155
10204
  const _props = {
10156
10205
  title,
@@ -10158,15 +10207,16 @@ function transformItem$3(props, item) {
10158
10207
  ...itemProps
10159
10208
  };
10160
10209
  return {
10210
+ type,
10161
10211
  title: String(_props.title ?? ''),
10162
10212
  value: _props.value,
10163
10213
  props: _props,
10164
- children: Array.isArray(children) ? transformItems$3(props, children) : undefined,
10214
+ children: type === 'item' && Array.isArray(children) ? transformItems$3(props, children) : undefined,
10165
10215
  raw: item
10166
10216
  };
10167
10217
  }
10168
10218
  function transformItems$3(props, items) {
10169
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
10219
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
10170
10220
  const array = [];
10171
10221
  for (const item of items) {
10172
10222
  array.push(transformItem$3(_props, item));
@@ -10208,7 +10258,7 @@ function useItems(props) {
10208
10258
  const _returnObject = props.returnObject;
10209
10259
  const hasValueComparator = !!props.valueComparator;
10210
10260
  const valueComparator = props.valueComparator || deepEqual;
10211
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
10261
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
10212
10262
  const returnValue = [];
10213
10263
  main: for (const v of value) {
10214
10264
  // When the model value is null, return an InternalItem
@@ -10328,10 +10378,6 @@ const makeVListProps = propsFactory({
10328
10378
  ...makeDensityProps(),
10329
10379
  ...makeDimensionProps(),
10330
10380
  ...makeElevationProps(),
10331
- itemType: {
10332
- type: String,
10333
- default: 'type'
10334
- },
10335
10381
  ...makeItemsProps(),
10336
10382
  ...makeRoundedProps(),
10337
10383
  ...makeTagProps(),
@@ -10391,6 +10437,7 @@ const VList = genericComponent()({
10391
10437
  const activeColor = toRef(() => props.activeColor);
10392
10438
  const baseColor = toRef(() => props.baseColor);
10393
10439
  const color = toRef(() => props.color);
10440
+ const isSelectable = toRef(() => props.selectable || props.activatable);
10394
10441
  createList({
10395
10442
  filterable: props.filterable
10396
10443
  });
@@ -10460,7 +10507,7 @@ const VList = genericComponent()({
10460
10507
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
10461
10508
  "style": normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
10462
10509
  "tabindex": props.disabled ? -1 : 0,
10463
- "role": "listbox",
10510
+ "role": isSelectable.value ? 'listbox' : 'list',
10464
10511
  "aria-activedescendant": undefined,
10465
10512
  "onFocusin": onFocusin,
10466
10513
  "onFocusout": onFocusout,
@@ -13525,6 +13572,7 @@ const VSelect = genericComponent()({
13525
13572
  "onKeydown": onListKeydown,
13526
13573
  "onFocusin": onFocusin,
13527
13574
  "tabindex": "-1",
13575
+ "selectable": true,
13528
13576
  "aria-live": "polite",
13529
13577
  "aria-label": `${props.label}-list`,
13530
13578
  "color": props.itemColor ?? props.color
@@ -13550,7 +13598,7 @@ const VSelect = genericComponent()({
13550
13598
  key: item.value,
13551
13599
  onClick: () => select(item, null)
13552
13600
  });
13553
- if (item.raw.type === 'divider') {
13601
+ if (item.type === 'divider') {
13554
13602
  return slots.divider?.({
13555
13603
  props: item.raw,
13556
13604
  index
@@ -13558,7 +13606,7 @@ const VSelect = genericComponent()({
13558
13606
  "key": `divider-${index}`
13559
13607
  }), null);
13560
13608
  }
13561
- if (item.raw.type === 'subheader') {
13609
+ if (item.type === 'subheader') {
13562
13610
  return slots.subheader?.({
13563
13611
  props: item.raw,
13564
13612
  index
@@ -13726,7 +13774,7 @@ function filterItems(items, query, options) {
13726
13774
  let match = -1;
13727
13775
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13728
13776
  if (typeof item === 'object') {
13729
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13777
+ if (item.type === 'divider' || item.type === 'subheader') {
13730
13778
  continue;
13731
13779
  }
13732
13780
  const filterKeys = keys || Object.keys(transformed);
@@ -14144,6 +14192,7 @@ const VAutocomplete = genericComponent()({
14144
14192
  "onFocusin": onFocusin,
14145
14193
  "onFocusout": onFocusout,
14146
14194
  "tabindex": "-1",
14195
+ "selectable": true,
14147
14196
  "aria-live": "polite",
14148
14197
  "color": props.itemColor ?? props.color
14149
14198
  }, listEvents, props.listProps), {
@@ -14168,7 +14217,7 @@ const VAutocomplete = genericComponent()({
14168
14217
  active: highlightFirst.value && index === 0 ? true : undefined,
14169
14218
  onClick: () => select(item, null)
14170
14219
  });
14171
- if (item.raw.type === 'divider') {
14220
+ if (item.type === 'divider') {
14172
14221
  return slots.divider?.({
14173
14222
  props: item.raw,
14174
14223
  index
@@ -14176,7 +14225,7 @@ const VAutocomplete = genericComponent()({
14176
14225
  "key": `divider-${index}`
14177
14226
  }), null);
14178
14227
  }
14179
- if (item.raw.type === 'subheader') {
14228
+ if (item.type === 'subheader') {
14180
14229
  return slots.subheader?.({
14181
14230
  props: item.raw,
14182
14231
  index
@@ -19231,6 +19280,7 @@ const VCombobox = genericComponent()({
19231
19280
  "selected": selectedValues.value,
19232
19281
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
19233
19282
  "onMousedown": e => e.preventDefault(),
19283
+ "selectable": true,
19234
19284
  "onKeydown": onListKeydown,
19235
19285
  "onFocusin": onFocusin,
19236
19286
  "onFocusout": onFocusout,
@@ -19259,7 +19309,7 @@ const VCombobox = genericComponent()({
19259
19309
  active: highlightFirst.value && index === 0 ? true : undefined,
19260
19310
  onClick: () => select(item, null)
19261
19311
  });
19262
- if (item.raw.type === 'divider') {
19312
+ if (item.type === 'divider') {
19263
19313
  return slots.divider?.({
19264
19314
  props: item.raw,
19265
19315
  index
@@ -19267,7 +19317,7 @@ const VCombobox = genericComponent()({
19267
19317
  "key": `divider-${index}`
19268
19318
  }), null);
19269
19319
  }
19270
- if (item.raw.type === 'subheader') {
19320
+ if (item.type === 'subheader') {
19271
19321
  return slots.subheader?.({
19272
19322
  props: item.raw,
19273
19323
  index
@@ -23609,7 +23659,8 @@ const VDatePicker = genericComponent()({
23609
23659
  }
23610
23660
  function allowedMonths(month) {
23611
23661
  if (typeof props.allowedDates === 'function') {
23612
- const startOfMonth = adapter.parseISO(`${year.value}-${month + 1}-01`);
23662
+ const monthTwoDigits = String(month + 1).padStart(2, '0');
23663
+ const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);
23613
23664
  return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth));
23614
23665
  }
23615
23666
  if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
@@ -30405,6 +30456,8 @@ const VTreeviewSymbol = Symbol.for('vuetify:v-treeview');
30405
30456
 
30406
30457
  const makeVTreeviewItemProps = propsFactory({
30407
30458
  loading: Boolean,
30459
+ hideActions: Boolean,
30460
+ indentLines: Array,
30408
30461
  toggleIcon: IconValue,
30409
30462
  ...makeVListItemProps({
30410
30463
  slim: true
@@ -30441,7 +30494,7 @@ const VTreeviewItem = genericComponent()({
30441
30494
  }
30442
30495
  useRender(() => {
30443
30496
  const listItemProps = VListItem.filterProps(props);
30444
- const hasPrepend = slots.prepend || props.toggleIcon;
30497
+ const hasPrepend = slots.prepend || props.toggleIcon || props.indentLines;
30445
30498
  return createVNode(VListItem, mergeProps({
30446
30499
  "ref": vListItemRef
30447
30500
  }, listItemProps, {
@@ -30455,7 +30508,15 @@ const VTreeviewItem = genericComponent()({
30455
30508
  }), {
30456
30509
  ...slots,
30457
30510
  prepend: hasPrepend ? slotProps => {
30458
- return createElementVNode(Fragment, null, [createVNode(VListItemAction, {
30511
+ return createElementVNode(Fragment, null, [props.indentLines && props.indentLines.length > 0 ? createElementVNode("div", {
30512
+ "key": "indent-lines",
30513
+ "class": "v-treeview-indent-lines",
30514
+ "style": {
30515
+ '--v-indent-parts': props.indentLines.length
30516
+ }
30517
+ }, [props.indentLines.map(type => createElementVNode("div", {
30518
+ "class": normalizeClass(`v-treeview-indent-line v-treeview-indent-line--${type}`)
30519
+ }, null))]) : '', !props.hideActions && createVNode(VListItemAction, {
30459
30520
  "start": true
30460
30521
  }, {
30461
30522
  default: () => [props.toggleIcon ? createVNode(VBtn, {
@@ -30507,10 +30568,15 @@ const makeVTreeviewChildrenProps = propsFactory({
30507
30568
  selectedColor: String,
30508
30569
  selectStrategy: [String, Function, Object],
30509
30570
  index: Number,
30571
+ isLastGroup: Boolean,
30572
+ separateRoots: Boolean,
30573
+ parentIndentLines: Array,
30574
+ indentLinesVariant: String,
30510
30575
  path: {
30511
30576
  type: Array,
30512
30577
  default: () => []
30513
30578
  },
30579
+ ...pick(makeVTreeviewItemProps(), ['hideActions']),
30514
30580
  ...makeDensityProps()
30515
30581
  }, 'VTreeviewChildren');
30516
30582
  const VTreeviewChildren = genericComponent()({
@@ -30539,19 +30605,32 @@ const VTreeviewChildren = genericComponent()({
30539
30605
  select(isSelected);
30540
30606
  }
30541
30607
  }
30542
- return () => slots.default?.() ?? props.items?.map((item, index) => {
30608
+ return () => slots.default?.() ?? props.items?.map((item, index, items) => {
30543
30609
  const {
30544
30610
  children,
30545
30611
  props: itemProps
30546
30612
  } = item;
30547
30613
  const loading = isLoading.has(item.value);
30614
+ const nextItemHasChildren = !!items.at(index + 1)?.children;
30615
+ const depth = props.path?.length ?? 0;
30616
+ const isLast = items.length - 1 === index;
30548
30617
  const treeItemProps = {
30549
30618
  index,
30550
- depth: props.path?.length ?? 0,
30619
+ depth,
30551
30620
  isFirst: index === 0,
30552
- isLast: props.items ? props.items.length - 1 === index : false,
30553
- path: [...props.path, index]
30621
+ isLast,
30622
+ path: [...props.path, index],
30623
+ hideAction: props.hideActions
30554
30624
  };
30625
+ const indentLines = getIndentLines({
30626
+ depth,
30627
+ isLast,
30628
+ isLastGroup: props.isLastGroup,
30629
+ leafLinks: !props.hideActions,
30630
+ separateRoots: props.separateRoots,
30631
+ parentIndentLines: props.parentIndentLines,
30632
+ variant: props.indentLinesVariant
30633
+ });
30555
30634
  const slotsWithItem = {
30556
30635
  prepend: slotProps => createElementVNode(Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && createElementVNode("div", null, [createVNode(VCheckboxBtn, {
30557
30636
  "key": item.value,
@@ -30617,21 +30696,40 @@ const VTreeviewChildren = genericComponent()({
30617
30696
  return createVNode(VTreeviewItem, mergeProps({
30618
30697
  "ref": el => activatorItems.value[index] = el
30619
30698
  }, listItemProps, {
30699
+ "hideActions": props.hideActions,
30700
+ "indentLines": indentLines.node,
30620
30701
  "value": props.returnObject ? item.raw : itemProps.value,
30621
30702
  "loading": loading
30622
30703
  }), slotsWithItem);
30623
30704
  },
30624
30705
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30625
30706
  "items": children,
30707
+ "indentLinesVariant": props.indentLinesVariant,
30708
+ "parentIndentLines": indentLines.children,
30709
+ "isLastGroup": nextItemHasChildren,
30626
30710
  "returnObject": props.returnObject
30627
30711
  }), slots)
30628
- }) : slots.item?.({
30712
+ }) : renderSlot(slots.item, {
30629
30713
  props: itemProps,
30630
30714
  item: item.raw,
30631
30715
  internalItem: item
30632
- }) ?? createVNode(VTreeviewItem, mergeProps(itemProps, {
30633
- "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30634
- }), slotsWithItem);
30716
+ }, () => {
30717
+ if (item.type === 'divider') {
30718
+ return renderSlot(slots.divider, {
30719
+ props: item.raw
30720
+ }, () => createVNode(VDivider, item.props, null));
30721
+ }
30722
+ if (item.type === 'subheader') {
30723
+ return renderSlot(slots.subheader, {
30724
+ props: item.raw
30725
+ }, () => createVNode(VListSubheader, item.props, null));
30726
+ }
30727
+ return createVNode(VTreeviewItem, mergeProps(itemProps, {
30728
+ "hideActions": props.hideActions,
30729
+ "indentLines": indentLines.leaf,
30730
+ "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30731
+ }), slotsWithItem);
30732
+ });
30635
30733
  });
30636
30734
  }
30637
30735
  });
@@ -30647,16 +30745,17 @@ function flatten(items) {
30647
30745
  const makeVTreeviewProps = propsFactory({
30648
30746
  fluid: Boolean,
30649
30747
  openAll: Boolean,
30748
+ indentLines: [Boolean, String],
30650
30749
  search: String,
30651
30750
  ...makeFilterProps({
30652
30751
  filterKeys: ['title']
30653
30752
  }),
30654
- ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
30753
+ ...omit(makeVTreeviewChildrenProps(), ['index', 'path', 'indentLinesVariant', 'parentIndentLines', 'isLastGroup']),
30655
30754
  ...omit(makeVListProps({
30656
30755
  collapseIcon: '$treeviewCollapse',
30657
30756
  expandIcon: '$treeviewExpand',
30658
30757
  slim: true
30659
- }), ['itemType', 'nav', 'openStrategy']),
30758
+ }), ['nav', 'openStrategy']),
30660
30759
  modelValue: Array
30661
30760
  }, 'VTreeview');
30662
30761
  const VTreeview = genericComponent()({
@@ -30753,6 +30852,7 @@ const VTreeview = genericComponent()({
30753
30852
  useRender(() => {
30754
30853
  const listProps = VList.filterProps(props);
30755
30854
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
30855
+ const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines;
30756
30856
  return createVNode(VList, mergeProps({
30757
30857
  "ref": vListRef
30758
30858
  }, listProps, {
@@ -30770,7 +30870,9 @@ const VTreeview = genericComponent()({
30770
30870
  default: () => [createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30771
30871
  "density": props.density,
30772
30872
  "returnObject": props.returnObject,
30773
- "items": items.value
30873
+ "items": items.value,
30874
+ "parentIndentLines": props.indentLines ? [] : undefined,
30875
+ "indentLinesVariant": indentLinesVariant
30774
30876
  }), slots)]
30775
30877
  });
30776
30878
  });
@@ -31290,7 +31392,7 @@ function createVuetify$1() {
31290
31392
  };
31291
31393
  });
31292
31394
  }
31293
- const version$1 = "3.9.0-beta.1-dev.2025-07-05";
31395
+ const version$1 = "3.9.0-dev.2025-07-15";
31294
31396
  createVuetify$1.version = version$1;
31295
31397
 
31296
31398
  // Vue's inject() can only be used in setup
@@ -31315,7 +31417,7 @@ const createVuetify = function () {
31315
31417
  ...options
31316
31418
  });
31317
31419
  };
31318
- const version = "3.9.0-beta.1-dev.2025-07-05";
31420
+ const version = "3.9.0-dev.2025-07-15";
31319
31421
  createVuetify.version = version;
31320
31422
 
31321
31423
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useRtl, useTheme, version };