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

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 (77) hide show
  1. package/CHANGELOG.md +3 -117
  2. package/dist/json/attributes.json +3156 -3120
  3. package/dist/json/importMap-labs.json +12 -12
  4. package/dist/json/importMap.json +196 -196
  5. package/dist/json/tags.json +9 -0
  6. package/dist/json/web-types.json +6143 -6054
  7. package/dist/vuetify-labs.cjs +124 -32
  8. package/dist/vuetify-labs.css +4807 -4750
  9. package/dist/vuetify-labs.d.ts +281 -186
  10. package/dist/vuetify-labs.esm.js +124 -32
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +124 -32
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +123 -31
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4212 -4155
  17. package/dist/vuetify.d.ts +281 -186
  18. package/dist/vuetify.esm.js +123 -31
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +123 -31
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +1083 -1079
  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 +2 -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 +2 -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 +0 -4
  39. package/lib/components/VList/VList.js.map +1 -1
  40. package/lib/components/VSelect/VSelect.d.ts +58 -22
  41. package/lib/components/VSelect/VSelect.js +2 -2
  42. package/lib/components/VSelect/VSelect.js.map +1 -1
  43. package/lib/components/VTreeview/VTreeview.d.ts +229 -167
  44. package/lib/components/VTreeview/VTreeview.js +7 -3
  45. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  46. package/lib/components/VTreeview/VTreeviewChildren.d.ts +81 -10
  47. package/lib/components/VTreeview/VTreeviewChildren.js +50 -11
  48. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  49. package/lib/components/VTreeview/VTreeviewItem.css +57 -0
  50. package/lib/components/VTreeview/VTreeviewItem.d.ts +119 -94
  51. package/lib/components/VTreeview/VTreeviewItem.js +13 -3
  52. package/lib/components/VTreeview/VTreeviewItem.js.map +1 -1
  53. package/lib/components/VTreeview/VTreeviewItem.sass +60 -0
  54. package/lib/components/VTreeview/_variables.scss +15 -0
  55. package/lib/composables/filter.d.ts +1 -0
  56. package/lib/composables/filter.js +1 -1
  57. package/lib/composables/filter.js.map +1 -1
  58. package/lib/composables/list-items.d.ts +14 -1
  59. package/lib/composables/list-items.js +9 -3
  60. package/lib/composables/list-items.js.map +1 -1
  61. package/lib/entry-bundler.js +1 -1
  62. package/lib/entry-bundler.js.map +1 -1
  63. package/lib/framework.d.ts +66 -65
  64. package/lib/framework.js +1 -1
  65. package/lib/framework.js.map +1 -1
  66. package/lib/labs/VCalendar/VCalendar.js +1 -1
  67. package/lib/labs/VCalendar/VCalendar.js.map +1 -1
  68. package/lib/util/helpers.d.ts +3 -0
  69. package/lib/util/helpers.js +4 -0
  70. package/lib/util/helpers.js.map +1 -1
  71. package/lib/util/indentLines.d.ts +17 -0
  72. package/lib/util/indentLines.js +34 -0
  73. package/lib/util/indentLines.js.map +1 -0
  74. package/lib/util/index.d.ts +1 -0
  75. package/lib/util/index.js +1 -0
  76. package/lib/util/index.js.map +1 -1
  77. 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-08
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') {
@@ -9866,6 +9904,10 @@ const makeItemsProps = propsFactory({
9866
9904
  type: [Boolean, String, Array, Function],
9867
9905
  default: 'props'
9868
9906
  },
9907
+ itemType: {
9908
+ type: [Boolean, String, Array, Function],
9909
+ default: 'type'
9910
+ },
9869
9911
  returnObject: Boolean,
9870
9912
  valueComparator: Function
9871
9913
  }, 'list-items');
@@ -9873,6 +9915,7 @@ function transformItem$3(props, item) {
9873
9915
  const title = getPropertyFromItem(item, props.itemTitle, item);
9874
9916
  const value = getPropertyFromItem(item, props.itemValue, title);
9875
9917
  const children = getPropertyFromItem(item, props.itemChildren);
9918
+ const type = getPropertyFromItem(item, props.itemType, 'item');
9876
9919
  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
9920
  const _props = {
9878
9921
  title,
@@ -9880,15 +9923,16 @@ function transformItem$3(props, item) {
9880
9923
  ...itemProps
9881
9924
  };
9882
9925
  return {
9926
+ type,
9883
9927
  title: String(_props.title ?? ''),
9884
9928
  value: _props.value,
9885
9929
  props: _props,
9886
- children: Array.isArray(children) ? transformItems$3(props, children) : undefined,
9930
+ children: type === 'item' && Array.isArray(children) ? transformItems$3(props, children) : undefined,
9887
9931
  raw: item
9888
9932
  };
9889
9933
  }
9890
9934
  function transformItems$3(props, items) {
9891
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9935
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
9892
9936
  const array = [];
9893
9937
  for (const item of items) {
9894
9938
  array.push(transformItem$3(_props, item));
@@ -9930,7 +9974,7 @@ function useItems(props) {
9930
9974
  const _returnObject = props.returnObject;
9931
9975
  const hasValueComparator = !!props.valueComparator;
9932
9976
  const valueComparator = props.valueComparator || deepEqual;
9933
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9977
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
9934
9978
  const returnValue = [];
9935
9979
  main: for (const v of value) {
9936
9980
  // When the model value is null, return an InternalItem
@@ -10050,10 +10094,6 @@ const makeVListProps = propsFactory({
10050
10094
  ...makeDensityProps(),
10051
10095
  ...makeDimensionProps(),
10052
10096
  ...makeElevationProps(),
10053
- itemType: {
10054
- type: String,
10055
- default: 'type'
10056
- },
10057
10097
  ...makeItemsProps(),
10058
10098
  ...makeRoundedProps(),
10059
10099
  ...makeTagProps(),
@@ -13272,7 +13312,7 @@ const VSelect = genericComponent()({
13272
13312
  key: item.value,
13273
13313
  onClick: () => select(item, null)
13274
13314
  });
13275
- if (item.raw.type === 'divider') {
13315
+ if (item.type === 'divider') {
13276
13316
  return slots.divider?.({
13277
13317
  props: item.raw,
13278
13318
  index
@@ -13280,7 +13320,7 @@ const VSelect = genericComponent()({
13280
13320
  "key": `divider-${index}`
13281
13321
  }), null);
13282
13322
  }
13283
- if (item.raw.type === 'subheader') {
13323
+ if (item.type === 'subheader') {
13284
13324
  return slots.subheader?.({
13285
13325
  props: item.raw,
13286
13326
  index
@@ -13448,7 +13488,7 @@ function filterItems(items, query, options) {
13448
13488
  let match = -1;
13449
13489
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13450
13490
  if (typeof item === 'object') {
13451
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13491
+ if (item.type === 'divider' || item.type === 'subheader') {
13452
13492
  continue;
13453
13493
  }
13454
13494
  const filterKeys = keys || Object.keys(transformed);
@@ -13890,7 +13930,7 @@ const VAutocomplete = genericComponent()({
13890
13930
  active: highlightFirst.value && index === 0 ? true : undefined,
13891
13931
  onClick: () => select(item, null)
13892
13932
  });
13893
- if (item.raw.type === 'divider') {
13933
+ if (item.type === 'divider') {
13894
13934
  return slots.divider?.({
13895
13935
  props: item.raw,
13896
13936
  index
@@ -13898,7 +13938,7 @@ const VAutocomplete = genericComponent()({
13898
13938
  "key": `divider-${index}`
13899
13939
  }), null);
13900
13940
  }
13901
- if (item.raw.type === 'subheader') {
13941
+ if (item.type === 'subheader') {
13902
13942
  return slots.subheader?.({
13903
13943
  props: item.raw,
13904
13944
  index
@@ -18981,7 +19021,7 @@ const VCombobox = genericComponent()({
18981
19021
  active: highlightFirst.value && index === 0 ? true : undefined,
18982
19022
  onClick: () => select(item, null)
18983
19023
  });
18984
- if (item.raw.type === 'divider') {
19024
+ if (item.type === 'divider') {
18985
19025
  return slots.divider?.({
18986
19026
  props: item.raw,
18987
19027
  index
@@ -18989,7 +19029,7 @@ const VCombobox = genericComponent()({
18989
19029
  "key": `divider-${index}`
18990
19030
  }), null);
18991
19031
  }
18992
- if (item.raw.type === 'subheader') {
19032
+ if (item.type === 'subheader') {
18993
19033
  return slots.subheader?.({
18994
19034
  props: item.raw,
18995
19035
  index
@@ -23331,7 +23371,8 @@ const VDatePicker = genericComponent()({
23331
23371
  }
23332
23372
  function allowedMonths(month) {
23333
23373
  if (typeof props.allowedDates === 'function') {
23334
- const startOfMonth = adapter.parseISO(`${year.value}-${month + 1}-01`);
23374
+ const monthTwoDigits = String(month + 1).padStart(2, '0');
23375
+ const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);
23335
23376
  return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth));
23336
23377
  }
23337
23378
  if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
@@ -30127,6 +30168,8 @@ const VTreeviewSymbol = Symbol.for('vuetify:v-treeview');
30127
30168
 
30128
30169
  const makeVTreeviewItemProps = propsFactory({
30129
30170
  loading: Boolean,
30171
+ hideActions: Boolean,
30172
+ indentLines: Array,
30130
30173
  toggleIcon: IconValue,
30131
30174
  ...makeVListItemProps({
30132
30175
  slim: true
@@ -30163,7 +30206,7 @@ const VTreeviewItem = genericComponent()({
30163
30206
  }
30164
30207
  useRender(() => {
30165
30208
  const listItemProps = VListItem.filterProps(props);
30166
- const hasPrepend = slots.prepend || props.toggleIcon;
30209
+ const hasPrepend = slots.prepend || props.toggleIcon || props.indentLines;
30167
30210
  return createVNode(VListItem, mergeProps({
30168
30211
  "ref": vListItemRef
30169
30212
  }, listItemProps, {
@@ -30177,7 +30220,15 @@ const VTreeviewItem = genericComponent()({
30177
30220
  }), {
30178
30221
  ...slots,
30179
30222
  prepend: hasPrepend ? slotProps => {
30180
- return createElementVNode(Fragment, null, [createVNode(VListItemAction, {
30223
+ return createElementVNode(Fragment, null, [props.indentLines && props.indentLines.length > 0 ? createElementVNode("div", {
30224
+ "key": "indent-lines",
30225
+ "class": "v-treeview-indent-lines",
30226
+ "style": {
30227
+ '--v-indent-parts': props.indentLines.length
30228
+ }
30229
+ }, [props.indentLines.map(type => createElementVNode("div", {
30230
+ "class": normalizeClass(`v-treeview-indent-line v-treeview-indent-line--${type}`)
30231
+ }, null))]) : '', !props.hideActions && createVNode(VListItemAction, {
30181
30232
  "start": true
30182
30233
  }, {
30183
30234
  default: () => [props.toggleIcon ? createVNode(VBtn, {
@@ -30229,10 +30280,15 @@ const makeVTreeviewChildrenProps = propsFactory({
30229
30280
  selectedColor: String,
30230
30281
  selectStrategy: [String, Function, Object],
30231
30282
  index: Number,
30283
+ isLastGroup: Boolean,
30284
+ separateRoots: Boolean,
30285
+ parentIndentLines: Array,
30286
+ indentLinesVariant: String,
30232
30287
  path: {
30233
30288
  type: Array,
30234
30289
  default: () => []
30235
30290
  },
30291
+ ...pick(makeVTreeviewItemProps(), ['hideActions']),
30236
30292
  ...makeDensityProps()
30237
30293
  }, 'VTreeviewChildren');
30238
30294
  const VTreeviewChildren = genericComponent()({
@@ -30261,19 +30317,32 @@ const VTreeviewChildren = genericComponent()({
30261
30317
  select(isSelected);
30262
30318
  }
30263
30319
  }
30264
- return () => slots.default?.() ?? props.items?.map((item, index) => {
30320
+ return () => slots.default?.() ?? props.items?.map((item, index, items) => {
30265
30321
  const {
30266
30322
  children,
30267
30323
  props: itemProps
30268
30324
  } = item;
30269
30325
  const loading = isLoading.has(item.value);
30326
+ const nextItemHasChildren = !!items.at(index + 1)?.children;
30327
+ const depth = props.path?.length ?? 0;
30328
+ const isLast = items.length - 1 === index;
30270
30329
  const treeItemProps = {
30271
30330
  index,
30272
- depth: props.path?.length ?? 0,
30331
+ depth,
30273
30332
  isFirst: index === 0,
30274
- isLast: props.items ? props.items.length - 1 === index : false,
30275
- path: [...props.path, index]
30333
+ isLast,
30334
+ path: [...props.path, index],
30335
+ hideAction: props.hideActions
30276
30336
  };
30337
+ const indentLines = getIndentLines({
30338
+ depth,
30339
+ isLast,
30340
+ isLastGroup: props.isLastGroup,
30341
+ leafLinks: !props.hideActions,
30342
+ separateRoots: props.separateRoots,
30343
+ parentIndentLines: props.parentIndentLines,
30344
+ variant: props.indentLinesVariant
30345
+ });
30277
30346
  const slotsWithItem = {
30278
30347
  prepend: slotProps => createElementVNode(Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && createElementVNode("div", null, [createVNode(VCheckboxBtn, {
30279
30348
  "key": item.value,
@@ -30339,21 +30408,40 @@ const VTreeviewChildren = genericComponent()({
30339
30408
  return createVNode(VTreeviewItem, mergeProps({
30340
30409
  "ref": el => activatorItems.value[index] = el
30341
30410
  }, listItemProps, {
30411
+ "hideActions": props.hideActions,
30412
+ "indentLines": indentLines.node,
30342
30413
  "value": props.returnObject ? item.raw : itemProps.value,
30343
30414
  "loading": loading
30344
30415
  }), slotsWithItem);
30345
30416
  },
30346
30417
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30347
30418
  "items": children,
30419
+ "indentLinesVariant": props.indentLinesVariant,
30420
+ "parentIndentLines": indentLines.children,
30421
+ "isLastGroup": nextItemHasChildren,
30348
30422
  "returnObject": props.returnObject
30349
30423
  }), slots)
30350
- }) : slots.item?.({
30424
+ }) : renderSlot(slots.item, {
30351
30425
  props: itemProps,
30352
30426
  item: item.raw,
30353
30427
  internalItem: item
30354
- }) ?? createVNode(VTreeviewItem, mergeProps(itemProps, {
30355
- "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30356
- }), slotsWithItem);
30428
+ }, () => {
30429
+ if (item.type === 'divider') {
30430
+ return renderSlot(slots.divider, {
30431
+ props: item.raw
30432
+ }, () => createVNode(VDivider, item.props, null));
30433
+ }
30434
+ if (item.type === 'subheader') {
30435
+ return renderSlot(slots.subheader, {
30436
+ props: item.raw
30437
+ }, () => createVNode(VListSubheader, item.props, null));
30438
+ }
30439
+ return createVNode(VTreeviewItem, mergeProps(itemProps, {
30440
+ "hideActions": props.hideActions,
30441
+ "indentLines": indentLines.leaf,
30442
+ "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30443
+ }), slotsWithItem);
30444
+ });
30357
30445
  });
30358
30446
  }
30359
30447
  });
@@ -30369,16 +30457,17 @@ function flatten(items) {
30369
30457
  const makeVTreeviewProps = propsFactory({
30370
30458
  fluid: Boolean,
30371
30459
  openAll: Boolean,
30460
+ indentLines: [Boolean, String],
30372
30461
  search: String,
30373
30462
  ...makeFilterProps({
30374
30463
  filterKeys: ['title']
30375
30464
  }),
30376
- ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
30465
+ ...omit(makeVTreeviewChildrenProps(), ['index', 'path', 'indentLinesVariant', 'parentIndentLines', 'isLastGroup']),
30377
30466
  ...omit(makeVListProps({
30378
30467
  collapseIcon: '$treeviewCollapse',
30379
30468
  expandIcon: '$treeviewExpand',
30380
30469
  slim: true
30381
- }), ['itemType', 'nav', 'openStrategy']),
30470
+ }), ['nav', 'openStrategy']),
30382
30471
  modelValue: Array
30383
30472
  }, 'VTreeview');
30384
30473
  const VTreeview = genericComponent()({
@@ -30475,6 +30564,7 @@ const VTreeview = genericComponent()({
30475
30564
  useRender(() => {
30476
30565
  const listProps = VList.filterProps(props);
30477
30566
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
30567
+ const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines;
30478
30568
  return createVNode(VList, mergeProps({
30479
30569
  "ref": vListRef
30480
30570
  }, listProps, {
@@ -30492,7 +30582,9 @@ const VTreeview = genericComponent()({
30492
30582
  default: () => [createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30493
30583
  "density": props.density,
30494
30584
  "returnObject": props.returnObject,
30495
- "items": items.value
30585
+ "items": items.value,
30586
+ "parentIndentLines": props.indentLines ? [] : undefined,
30587
+ "indentLinesVariant": indentLinesVariant
30496
30588
  }), slots)]
30497
30589
  });
30498
30590
  });
@@ -31085,7 +31177,7 @@ const VCalendar = genericComponent()({
31085
31177
  weekNumber: weekNumbers.value[wi],
31086
31178
  week
31087
31179
  }))), [weekNumbers.value[wi]]) : '', week.map(day => createVNode(VCalendarMonthDay, mergeProps({
31088
- "key": day.date.getTime()
31180
+ "key": adapter.toJsDate(day.date).getTime()
31089
31181
  }, calendarDayProps, {
31090
31182
  "day": day,
31091
31183
  "title": adapter.format(day.date, 'dayOfMonth'),
@@ -33580,7 +33672,7 @@ function createVuetify$1() {
33580
33672
  };
33581
33673
  });
33582
33674
  }
33583
- const version$1 = "3.9.0-beta.1-dev.2025-07-05";
33675
+ const version$1 = "3.9.0-dev.2025-07-08";
33584
33676
  createVuetify$1.version = version$1;
33585
33677
 
33586
33678
  // Vue's inject() can only be used in setup
@@ -33878,7 +33970,7 @@ var index = /*#__PURE__*/Object.freeze({
33878
33970
 
33879
33971
  /* eslint-disable local-rules/sort-imports */
33880
33972
 
33881
- const version = "3.9.0-beta.1-dev.2025-07-05";
33973
+ const version = "3.9.0-dev.2025-07-08";
33882
33974
 
33883
33975
  /* eslint-disable local-rules/sort-imports */
33884
33976