@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
package/dist/vuetify.cjs CHANGED
@@ -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
  */
@@ -473,6 +473,10 @@
473
473
  return child.type !== vue.Fragment || ensureValidVNode(child.children);
474
474
  }) ? vnodes : null;
475
475
  }
476
+ function renderSlot(slot, props, fallback) {
477
+ // TODO: check if slot returns elements: #18308
478
+ return slot?.(props) ?? fallback?.(props);
479
+ }
476
480
  function defer(timeout, cb) {
477
481
  if (!IN_BROWSER || timeout === 0) {
478
482
  cb();
@@ -1618,6 +1622,40 @@
1618
1622
  return ['scroll', 'auto'].includes(style.overflowY);
1619
1623
  }
1620
1624
 
1625
+ // Types
1626
+
1627
+ function getIndentLines(_ref) {
1628
+ let {
1629
+ depth,
1630
+ isLast,
1631
+ isLastGroup,
1632
+ leafLinks,
1633
+ separateRoots,
1634
+ parentIndentLines,
1635
+ variant
1636
+ } = _ref;
1637
+ if (!parentIndentLines || !depth) {
1638
+ return {
1639
+ leaf: undefined,
1640
+ node: undefined,
1641
+ children: parentIndentLines
1642
+ };
1643
+ }
1644
+ if (variant === 'simple') {
1645
+ return {
1646
+ leaf: [...parentIndentLines, 'line'],
1647
+ node: [...parentIndentLines, 'line'],
1648
+ children: [...parentIndentLines, 'line']
1649
+ };
1650
+ }
1651
+ const isLastLeaf = isLast && (!isLastGroup || separateRoots || depth > 1);
1652
+ return {
1653
+ leaf: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf', ...(leafLinks ? ['leaf-link'] : [])],
1654
+ node: [...parentIndentLines, isLastLeaf ? 'last-leaf' : 'leaf'],
1655
+ children: [...parentIndentLines, isLastLeaf ? 'none' : 'line']
1656
+ };
1657
+ }
1658
+
1621
1659
  function isFixedPosition(el) {
1622
1660
  while (el) {
1623
1661
  if (window.getComputedStyle(el).position === 'fixed') {
@@ -9802,6 +9840,11 @@
9802
9840
  const isLink = vue.toRef(() => props.link !== false && link.isLink.value);
9803
9841
  const isSelectable = vue.computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9804
9842
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9843
+ const role = vue.computed(() => list ? isSelectable.value ? 'option' : 'listitem' : undefined);
9844
+ const ariaSelected = vue.computed(() => {
9845
+ if (!isSelectable.value) return undefined;
9846
+ return root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value;
9847
+ });
9805
9848
  const roundedProps = vue.toRef(() => props.rounded || props.nav);
9806
9849
  const color = vue.toRef(() => props.color ?? props.activeColor);
9807
9850
  const variantProps = vue.toRef(() => ({
@@ -9905,7 +9948,8 @@
9905
9948
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
9906
9949
  "style": [colorStyles.value, dimensionStyles.value, props.style],
9907
9950
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
9908
- "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
9951
+ "aria-selected": ariaSelected.value,
9952
+ "role": role.value,
9909
9953
  "onClick": onClick,
9910
9954
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
9911
9955
  }, link.linkProps), {
@@ -10148,6 +10192,10 @@
10148
10192
  type: [Boolean, String, Array, Function],
10149
10193
  default: 'props'
10150
10194
  },
10195
+ itemType: {
10196
+ type: [Boolean, String, Array, Function],
10197
+ default: 'type'
10198
+ },
10151
10199
  returnObject: Boolean,
10152
10200
  valueComparator: Function
10153
10201
  }, 'list-items');
@@ -10155,6 +10203,7 @@
10155
10203
  const title = getPropertyFromItem(item, props.itemTitle, item);
10156
10204
  const value = getPropertyFromItem(item, props.itemValue, title);
10157
10205
  const children = getPropertyFromItem(item, props.itemChildren);
10206
+ const type = getPropertyFromItem(item, props.itemType, 'item');
10158
10207
  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);
10159
10208
  const _props = {
10160
10209
  title,
@@ -10162,15 +10211,16 @@
10162
10211
  ...itemProps
10163
10212
  };
10164
10213
  return {
10214
+ type,
10165
10215
  title: String(_props.title ?? ''),
10166
10216
  value: _props.value,
10167
10217
  props: _props,
10168
- children: Array.isArray(children) ? transformItems$3(props, children) : undefined,
10218
+ children: type === 'item' && Array.isArray(children) ? transformItems$3(props, children) : undefined,
10169
10219
  raw: item
10170
10220
  };
10171
10221
  }
10172
10222
  function transformItems$3(props, items) {
10173
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
10223
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
10174
10224
  const array = [];
10175
10225
  for (const item of items) {
10176
10226
  array.push(transformItem$3(_props, item));
@@ -10212,7 +10262,7 @@
10212
10262
  const _returnObject = props.returnObject;
10213
10263
  const hasValueComparator = !!props.valueComparator;
10214
10264
  const valueComparator = props.valueComparator || deepEqual;
10215
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
10265
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
10216
10266
  const returnValue = [];
10217
10267
  main: for (const v of value) {
10218
10268
  // When the model value is null, return an InternalItem
@@ -10332,10 +10382,6 @@
10332
10382
  ...makeDensityProps(),
10333
10383
  ...makeDimensionProps(),
10334
10384
  ...makeElevationProps(),
10335
- itemType: {
10336
- type: String,
10337
- default: 'type'
10338
- },
10339
10385
  ...makeItemsProps(),
10340
10386
  ...makeRoundedProps(),
10341
10387
  ...makeTagProps(),
@@ -10395,6 +10441,7 @@
10395
10441
  const activeColor = vue.toRef(() => props.activeColor);
10396
10442
  const baseColor = vue.toRef(() => props.baseColor);
10397
10443
  const color = vue.toRef(() => props.color);
10444
+ const isSelectable = vue.toRef(() => props.selectable || props.activatable);
10398
10445
  createList({
10399
10446
  filterable: props.filterable
10400
10447
  });
@@ -10464,7 +10511,7 @@
10464
10511
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class]),
10465
10512
  "style": vue.normalizeStyle([backgroundColorStyles.value, dimensionStyles.value, props.style]),
10466
10513
  "tabindex": props.disabled ? -1 : 0,
10467
- "role": "listbox",
10514
+ "role": isSelectable.value ? 'listbox' : 'list',
10468
10515
  "aria-activedescendant": undefined,
10469
10516
  "onFocusin": onFocusin,
10470
10517
  "onFocusout": onFocusout,
@@ -13529,6 +13576,7 @@
13529
13576
  "onKeydown": onListKeydown,
13530
13577
  "onFocusin": onFocusin,
13531
13578
  "tabindex": "-1",
13579
+ "selectable": true,
13532
13580
  "aria-live": "polite",
13533
13581
  "aria-label": `${props.label}-list`,
13534
13582
  "color": props.itemColor ?? props.color
@@ -13554,7 +13602,7 @@
13554
13602
  key: item.value,
13555
13603
  onClick: () => select(item, null)
13556
13604
  });
13557
- if (item.raw.type === 'divider') {
13605
+ if (item.type === 'divider') {
13558
13606
  return slots.divider?.({
13559
13607
  props: item.raw,
13560
13608
  index
@@ -13562,7 +13610,7 @@
13562
13610
  "key": `divider-${index}`
13563
13611
  }), null);
13564
13612
  }
13565
- if (item.raw.type === 'subheader') {
13613
+ if (item.type === 'subheader') {
13566
13614
  return slots.subheader?.({
13567
13615
  props: item.raw,
13568
13616
  index
@@ -13730,7 +13778,7 @@
13730
13778
  let match = -1;
13731
13779
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13732
13780
  if (typeof item === 'object') {
13733
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13781
+ if (item.type === 'divider' || item.type === 'subheader') {
13734
13782
  continue;
13735
13783
  }
13736
13784
  const filterKeys = keys || Object.keys(transformed);
@@ -14148,6 +14196,7 @@
14148
14196
  "onFocusin": onFocusin,
14149
14197
  "onFocusout": onFocusout,
14150
14198
  "tabindex": "-1",
14199
+ "selectable": true,
14151
14200
  "aria-live": "polite",
14152
14201
  "color": props.itemColor ?? props.color
14153
14202
  }, listEvents, props.listProps), {
@@ -14172,7 +14221,7 @@
14172
14221
  active: highlightFirst.value && index === 0 ? true : undefined,
14173
14222
  onClick: () => select(item, null)
14174
14223
  });
14175
- if (item.raw.type === 'divider') {
14224
+ if (item.type === 'divider') {
14176
14225
  return slots.divider?.({
14177
14226
  props: item.raw,
14178
14227
  index
@@ -14180,7 +14229,7 @@
14180
14229
  "key": `divider-${index}`
14181
14230
  }), null);
14182
14231
  }
14183
- if (item.raw.type === 'subheader') {
14232
+ if (item.type === 'subheader') {
14184
14233
  return slots.subheader?.({
14185
14234
  props: item.raw,
14186
14235
  index
@@ -19235,6 +19284,7 @@
19235
19284
  "selected": selectedValues.value,
19236
19285
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
19237
19286
  "onMousedown": e => e.preventDefault(),
19287
+ "selectable": true,
19238
19288
  "onKeydown": onListKeydown,
19239
19289
  "onFocusin": onFocusin,
19240
19290
  "onFocusout": onFocusout,
@@ -19263,7 +19313,7 @@
19263
19313
  active: highlightFirst.value && index === 0 ? true : undefined,
19264
19314
  onClick: () => select(item, null)
19265
19315
  });
19266
- if (item.raw.type === 'divider') {
19316
+ if (item.type === 'divider') {
19267
19317
  return slots.divider?.({
19268
19318
  props: item.raw,
19269
19319
  index
@@ -19271,7 +19321,7 @@
19271
19321
  "key": `divider-${index}`
19272
19322
  }), null);
19273
19323
  }
19274
- if (item.raw.type === 'subheader') {
19324
+ if (item.type === 'subheader') {
19275
19325
  return slots.subheader?.({
19276
19326
  props: item.raw,
19277
19327
  index
@@ -23613,7 +23663,8 @@
23613
23663
  }
23614
23664
  function allowedMonths(month) {
23615
23665
  if (typeof props.allowedDates === 'function') {
23616
- const startOfMonth = adapter.parseISO(`${year.value}-${month + 1}-01`);
23666
+ const monthTwoDigits = String(month + 1).padStart(2, '0');
23667
+ const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);
23617
23668
  return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth));
23618
23669
  }
23619
23670
  if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
@@ -30409,6 +30460,8 @@
30409
30460
 
30410
30461
  const makeVTreeviewItemProps = propsFactory({
30411
30462
  loading: Boolean,
30463
+ hideActions: Boolean,
30464
+ indentLines: Array,
30412
30465
  toggleIcon: IconValue,
30413
30466
  ...makeVListItemProps({
30414
30467
  slim: true
@@ -30445,7 +30498,7 @@
30445
30498
  }
30446
30499
  useRender(() => {
30447
30500
  const listItemProps = VListItem.filterProps(props);
30448
- const hasPrepend = slots.prepend || props.toggleIcon;
30501
+ const hasPrepend = slots.prepend || props.toggleIcon || props.indentLines;
30449
30502
  return vue.createVNode(VListItem, vue.mergeProps({
30450
30503
  "ref": vListItemRef
30451
30504
  }, listItemProps, {
@@ -30459,7 +30512,15 @@
30459
30512
  }), {
30460
30513
  ...slots,
30461
30514
  prepend: hasPrepend ? slotProps => {
30462
- return vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VListItemAction, {
30515
+ return vue.createElementVNode(vue.Fragment, null, [props.indentLines && props.indentLines.length > 0 ? vue.createElementVNode("div", {
30516
+ "key": "indent-lines",
30517
+ "class": "v-treeview-indent-lines",
30518
+ "style": {
30519
+ '--v-indent-parts': props.indentLines.length
30520
+ }
30521
+ }, [props.indentLines.map(type => vue.createElementVNode("div", {
30522
+ "class": vue.normalizeClass(`v-treeview-indent-line v-treeview-indent-line--${type}`)
30523
+ }, null))]) : '', !props.hideActions && vue.createVNode(VListItemAction, {
30463
30524
  "start": true
30464
30525
  }, {
30465
30526
  default: () => [props.toggleIcon ? vue.createVNode(VBtn, {
@@ -30511,10 +30572,15 @@
30511
30572
  selectedColor: String,
30512
30573
  selectStrategy: [String, Function, Object],
30513
30574
  index: Number,
30575
+ isLastGroup: Boolean,
30576
+ separateRoots: Boolean,
30577
+ parentIndentLines: Array,
30578
+ indentLinesVariant: String,
30514
30579
  path: {
30515
30580
  type: Array,
30516
30581
  default: () => []
30517
30582
  },
30583
+ ...pick(makeVTreeviewItemProps(), ['hideActions']),
30518
30584
  ...makeDensityProps()
30519
30585
  }, 'VTreeviewChildren');
30520
30586
  const VTreeviewChildren = genericComponent()({
@@ -30543,19 +30609,32 @@
30543
30609
  select(isSelected);
30544
30610
  }
30545
30611
  }
30546
- return () => slots.default?.() ?? props.items?.map((item, index) => {
30612
+ return () => slots.default?.() ?? props.items?.map((item, index, items) => {
30547
30613
  const {
30548
30614
  children,
30549
30615
  props: itemProps
30550
30616
  } = item;
30551
30617
  const loading = isLoading.has(item.value);
30618
+ const nextItemHasChildren = !!items.at(index + 1)?.children;
30619
+ const depth = props.path?.length ?? 0;
30620
+ const isLast = items.length - 1 === index;
30552
30621
  const treeItemProps = {
30553
30622
  index,
30554
- depth: props.path?.length ?? 0,
30623
+ depth,
30555
30624
  isFirst: index === 0,
30556
- isLast: props.items ? props.items.length - 1 === index : false,
30557
- path: [...props.path, index]
30625
+ isLast,
30626
+ path: [...props.path, index],
30627
+ hideAction: props.hideActions
30558
30628
  };
30629
+ const indentLines = getIndentLines({
30630
+ depth,
30631
+ isLast,
30632
+ isLastGroup: props.isLastGroup,
30633
+ leafLinks: !props.hideActions,
30634
+ separateRoots: props.separateRoots,
30635
+ parentIndentLines: props.parentIndentLines,
30636
+ variant: props.indentLinesVariant
30637
+ });
30559
30638
  const slotsWithItem = {
30560
30639
  prepend: slotProps => vue.createElementVNode(vue.Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && vue.createElementVNode("div", null, [vue.createVNode(VCheckboxBtn, {
30561
30640
  "key": item.value,
@@ -30621,21 +30700,40 @@
30621
30700
  return vue.createVNode(VTreeviewItem, vue.mergeProps({
30622
30701
  "ref": el => activatorItems.value[index] = el
30623
30702
  }, listItemProps, {
30703
+ "hideActions": props.hideActions,
30704
+ "indentLines": indentLines.node,
30624
30705
  "value": props.returnObject ? item.raw : itemProps.value,
30625
30706
  "loading": loading
30626
30707
  }), slotsWithItem);
30627
30708
  },
30628
30709
  default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30629
30710
  "items": children,
30711
+ "indentLinesVariant": props.indentLinesVariant,
30712
+ "parentIndentLines": indentLines.children,
30713
+ "isLastGroup": nextItemHasChildren,
30630
30714
  "returnObject": props.returnObject
30631
30715
  }), slots)
30632
- }) : slots.item?.({
30716
+ }) : renderSlot(slots.item, {
30633
30717
  props: itemProps,
30634
30718
  item: item.raw,
30635
30719
  internalItem: item
30636
- }) ?? vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
30637
- "value": props.returnObject ? vue.toRaw(item.raw) : itemProps.value
30638
- }), slotsWithItem);
30720
+ }, () => {
30721
+ if (item.type === 'divider') {
30722
+ return renderSlot(slots.divider, {
30723
+ props: item.raw
30724
+ }, () => vue.createVNode(VDivider, item.props, null));
30725
+ }
30726
+ if (item.type === 'subheader') {
30727
+ return renderSlot(slots.subheader, {
30728
+ props: item.raw
30729
+ }, () => vue.createVNode(VListSubheader, item.props, null));
30730
+ }
30731
+ return vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
30732
+ "hideActions": props.hideActions,
30733
+ "indentLines": indentLines.leaf,
30734
+ "value": props.returnObject ? vue.toRaw(item.raw) : itemProps.value
30735
+ }), slotsWithItem);
30736
+ });
30639
30737
  });
30640
30738
  }
30641
30739
  });
@@ -30651,16 +30749,17 @@
30651
30749
  const makeVTreeviewProps = propsFactory({
30652
30750
  fluid: Boolean,
30653
30751
  openAll: Boolean,
30752
+ indentLines: [Boolean, String],
30654
30753
  search: String,
30655
30754
  ...makeFilterProps({
30656
30755
  filterKeys: ['title']
30657
30756
  }),
30658
- ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
30757
+ ...omit(makeVTreeviewChildrenProps(), ['index', 'path', 'indentLinesVariant', 'parentIndentLines', 'isLastGroup']),
30659
30758
  ...omit(makeVListProps({
30660
30759
  collapseIcon: '$treeviewCollapse',
30661
30760
  expandIcon: '$treeviewExpand',
30662
30761
  slim: true
30663
- }), ['itemType', 'nav', 'openStrategy']),
30762
+ }), ['nav', 'openStrategy']),
30664
30763
  modelValue: Array
30665
30764
  }, 'VTreeview');
30666
30765
  const VTreeview = genericComponent()({
@@ -30757,6 +30856,7 @@
30757
30856
  useRender(() => {
30758
30857
  const listProps = VList.filterProps(props);
30759
30858
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
30859
+ const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines;
30760
30860
  return vue.createVNode(VList, vue.mergeProps({
30761
30861
  "ref": vListRef
30762
30862
  }, listProps, {
@@ -30774,7 +30874,9 @@
30774
30874
  default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30775
30875
  "density": props.density,
30776
30876
  "returnObject": props.returnObject,
30777
- "items": items.value
30877
+ "items": items.value,
30878
+ "parentIndentLines": props.indentLines ? [] : undefined,
30879
+ "indentLinesVariant": indentLinesVariant
30778
30880
  }), slots)]
30779
30881
  });
30780
30882
  });
@@ -31294,7 +31396,7 @@
31294
31396
  };
31295
31397
  });
31296
31398
  }
31297
- const version$1 = "3.9.0-beta.1-dev.2025-07-05";
31399
+ const version$1 = "3.9.0-dev.2025-07-15";
31298
31400
  createVuetify$1.version = version$1;
31299
31401
 
31300
31402
  // Vue's inject() can only be used in setup
@@ -31319,7 +31421,7 @@
31319
31421
  ...options
31320
31422
  });
31321
31423
  };
31322
- const version = "3.9.0-beta.1-dev.2025-07-05";
31424
+ const version = "3.9.0-dev.2025-07-15";
31323
31425
  createVuetify.version = version;
31324
31426
 
31325
31427
  exports.blueprints = index;