@vuetify/nightly 3.9.0-beta.1-dev.2025-07-05 → 3.9.0-master.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 +3556 -3520
  3. package/dist/json/importMap-labs.json +32 -32
  4. package/dist/json/importMap.json +140 -140
  5. package/dist/json/tags.json +9 -0
  6. package/dist/json/web-types.json +6422 -6333
  7. package/dist/vuetify-labs.cjs +124 -32
  8. package/dist/vuetify-labs.css +5401 -5344
  9. package/dist/vuetify-labs.d.ts +271 -176
  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 +4117 -4060
  17. package/dist/vuetify.d.ts +271 -176
  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 +56 -55
  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-master.2025-07-08
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') {
@@ -10144,6 +10182,10 @@ const makeItemsProps = propsFactory({
10144
10182
  type: [Boolean, String, Array, Function],
10145
10183
  default: 'props'
10146
10184
  },
10185
+ itemType: {
10186
+ type: [Boolean, String, Array, Function],
10187
+ default: 'type'
10188
+ },
10147
10189
  returnObject: Boolean,
10148
10190
  valueComparator: Function
10149
10191
  }, 'list-items');
@@ -10151,6 +10193,7 @@ function transformItem$3(props, item) {
10151
10193
  const title = getPropertyFromItem(item, props.itemTitle, item);
10152
10194
  const value = getPropertyFromItem(item, props.itemValue, title);
10153
10195
  const children = getPropertyFromItem(item, props.itemChildren);
10196
+ const type = getPropertyFromItem(item, props.itemType, 'item');
10154
10197
  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
10198
  const _props = {
10156
10199
  title,
@@ -10158,15 +10201,16 @@ function transformItem$3(props, item) {
10158
10201
  ...itemProps
10159
10202
  };
10160
10203
  return {
10204
+ type,
10161
10205
  title: String(_props.title ?? ''),
10162
10206
  value: _props.value,
10163
10207
  props: _props,
10164
- children: Array.isArray(children) ? transformItems$3(props, children) : undefined,
10208
+ children: type === 'item' && Array.isArray(children) ? transformItems$3(props, children) : undefined,
10165
10209
  raw: item
10166
10210
  };
10167
10211
  }
10168
10212
  function transformItems$3(props, items) {
10169
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
10213
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
10170
10214
  const array = [];
10171
10215
  for (const item of items) {
10172
10216
  array.push(transformItem$3(_props, item));
@@ -10208,7 +10252,7 @@ function useItems(props) {
10208
10252
  const _returnObject = props.returnObject;
10209
10253
  const hasValueComparator = !!props.valueComparator;
10210
10254
  const valueComparator = props.valueComparator || deepEqual;
10211
- const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
10255
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'itemType', 'returnObject', 'valueComparator']);
10212
10256
  const returnValue = [];
10213
10257
  main: for (const v of value) {
10214
10258
  // When the model value is null, return an InternalItem
@@ -10328,10 +10372,6 @@ const makeVListProps = propsFactory({
10328
10372
  ...makeDensityProps(),
10329
10373
  ...makeDimensionProps(),
10330
10374
  ...makeElevationProps(),
10331
- itemType: {
10332
- type: String,
10333
- default: 'type'
10334
- },
10335
10375
  ...makeItemsProps(),
10336
10376
  ...makeRoundedProps(),
10337
10377
  ...makeTagProps(),
@@ -13550,7 +13590,7 @@ const VSelect = genericComponent()({
13550
13590
  key: item.value,
13551
13591
  onClick: () => select(item, null)
13552
13592
  });
13553
- if (item.raw.type === 'divider') {
13593
+ if (item.type === 'divider') {
13554
13594
  return slots.divider?.({
13555
13595
  props: item.raw,
13556
13596
  index
@@ -13558,7 +13598,7 @@ const VSelect = genericComponent()({
13558
13598
  "key": `divider-${index}`
13559
13599
  }), null);
13560
13600
  }
13561
- if (item.raw.type === 'subheader') {
13601
+ if (item.type === 'subheader') {
13562
13602
  return slots.subheader?.({
13563
13603
  props: item.raw,
13564
13604
  index
@@ -13726,7 +13766,7 @@ function filterItems(items, query, options) {
13726
13766
  let match = -1;
13727
13767
  if ((query || customFiltersLength > 0) && !options?.noFilter) {
13728
13768
  if (typeof item === 'object') {
13729
- if (['divider', 'subheader'].includes(item.raw?.type)) {
13769
+ if (item.type === 'divider' || item.type === 'subheader') {
13730
13770
  continue;
13731
13771
  }
13732
13772
  const filterKeys = keys || Object.keys(transformed);
@@ -14168,7 +14208,7 @@ const VAutocomplete = genericComponent()({
14168
14208
  active: highlightFirst.value && index === 0 ? true : undefined,
14169
14209
  onClick: () => select(item, null)
14170
14210
  });
14171
- if (item.raw.type === 'divider') {
14211
+ if (item.type === 'divider') {
14172
14212
  return slots.divider?.({
14173
14213
  props: item.raw,
14174
14214
  index
@@ -14176,7 +14216,7 @@ const VAutocomplete = genericComponent()({
14176
14216
  "key": `divider-${index}`
14177
14217
  }), null);
14178
14218
  }
14179
- if (item.raw.type === 'subheader') {
14219
+ if (item.type === 'subheader') {
14180
14220
  return slots.subheader?.({
14181
14221
  props: item.raw,
14182
14222
  index
@@ -19259,7 +19299,7 @@ const VCombobox = genericComponent()({
19259
19299
  active: highlightFirst.value && index === 0 ? true : undefined,
19260
19300
  onClick: () => select(item, null)
19261
19301
  });
19262
- if (item.raw.type === 'divider') {
19302
+ if (item.type === 'divider') {
19263
19303
  return slots.divider?.({
19264
19304
  props: item.raw,
19265
19305
  index
@@ -19267,7 +19307,7 @@ const VCombobox = genericComponent()({
19267
19307
  "key": `divider-${index}`
19268
19308
  }), null);
19269
19309
  }
19270
- if (item.raw.type === 'subheader') {
19310
+ if (item.type === 'subheader') {
19271
19311
  return slots.subheader?.({
19272
19312
  props: item.raw,
19273
19313
  index
@@ -23609,7 +23649,8 @@ const VDatePicker = genericComponent()({
23609
23649
  }
23610
23650
  function allowedMonths(month) {
23611
23651
  if (typeof props.allowedDates === 'function') {
23612
- const startOfMonth = adapter.parseISO(`${year.value}-${month + 1}-01`);
23652
+ const monthTwoDigits = String(month + 1).padStart(2, '0');
23653
+ const startOfMonth = adapter.parseISO(`${year.value}-${monthTwoDigits}-01`);
23613
23654
  return isAllowedInRange(startOfMonth, adapter.endOfMonth(startOfMonth));
23614
23655
  }
23615
23656
  if (Array.isArray(props.allowedDates) && props.allowedDates.length) {
@@ -30405,6 +30446,8 @@ const VTreeviewSymbol = Symbol.for('vuetify:v-treeview');
30405
30446
 
30406
30447
  const makeVTreeviewItemProps = propsFactory({
30407
30448
  loading: Boolean,
30449
+ hideActions: Boolean,
30450
+ indentLines: Array,
30408
30451
  toggleIcon: IconValue,
30409
30452
  ...makeVListItemProps({
30410
30453
  slim: true
@@ -30441,7 +30484,7 @@ const VTreeviewItem = genericComponent()({
30441
30484
  }
30442
30485
  useRender(() => {
30443
30486
  const listItemProps = VListItem.filterProps(props);
30444
- const hasPrepend = slots.prepend || props.toggleIcon;
30487
+ const hasPrepend = slots.prepend || props.toggleIcon || props.indentLines;
30445
30488
  return createVNode(VListItem, mergeProps({
30446
30489
  "ref": vListItemRef
30447
30490
  }, listItemProps, {
@@ -30455,7 +30498,15 @@ const VTreeviewItem = genericComponent()({
30455
30498
  }), {
30456
30499
  ...slots,
30457
30500
  prepend: hasPrepend ? slotProps => {
30458
- return createElementVNode(Fragment, null, [createVNode(VListItemAction, {
30501
+ return createElementVNode(Fragment, null, [props.indentLines && props.indentLines.length > 0 ? createElementVNode("div", {
30502
+ "key": "indent-lines",
30503
+ "class": "v-treeview-indent-lines",
30504
+ "style": {
30505
+ '--v-indent-parts': props.indentLines.length
30506
+ }
30507
+ }, [props.indentLines.map(type => createElementVNode("div", {
30508
+ "class": normalizeClass(`v-treeview-indent-line v-treeview-indent-line--${type}`)
30509
+ }, null))]) : '', !props.hideActions && createVNode(VListItemAction, {
30459
30510
  "start": true
30460
30511
  }, {
30461
30512
  default: () => [props.toggleIcon ? createVNode(VBtn, {
@@ -30507,10 +30558,15 @@ const makeVTreeviewChildrenProps = propsFactory({
30507
30558
  selectedColor: String,
30508
30559
  selectStrategy: [String, Function, Object],
30509
30560
  index: Number,
30561
+ isLastGroup: Boolean,
30562
+ separateRoots: Boolean,
30563
+ parentIndentLines: Array,
30564
+ indentLinesVariant: String,
30510
30565
  path: {
30511
30566
  type: Array,
30512
30567
  default: () => []
30513
30568
  },
30569
+ ...pick(makeVTreeviewItemProps(), ['hideActions']),
30514
30570
  ...makeDensityProps()
30515
30571
  }, 'VTreeviewChildren');
30516
30572
  const VTreeviewChildren = genericComponent()({
@@ -30539,19 +30595,32 @@ const VTreeviewChildren = genericComponent()({
30539
30595
  select(isSelected);
30540
30596
  }
30541
30597
  }
30542
- return () => slots.default?.() ?? props.items?.map((item, index) => {
30598
+ return () => slots.default?.() ?? props.items?.map((item, index, items) => {
30543
30599
  const {
30544
30600
  children,
30545
30601
  props: itemProps
30546
30602
  } = item;
30547
30603
  const loading = isLoading.has(item.value);
30604
+ const nextItemHasChildren = !!items.at(index + 1)?.children;
30605
+ const depth = props.path?.length ?? 0;
30606
+ const isLast = items.length - 1 === index;
30548
30607
  const treeItemProps = {
30549
30608
  index,
30550
- depth: props.path?.length ?? 0,
30609
+ depth,
30551
30610
  isFirst: index === 0,
30552
- isLast: props.items ? props.items.length - 1 === index : false,
30553
- path: [...props.path, index]
30611
+ isLast,
30612
+ path: [...props.path, index],
30613
+ hideAction: props.hideActions
30554
30614
  };
30615
+ const indentLines = getIndentLines({
30616
+ depth,
30617
+ isLast,
30618
+ isLastGroup: props.isLastGroup,
30619
+ leafLinks: !props.hideActions,
30620
+ separateRoots: props.separateRoots,
30621
+ parentIndentLines: props.parentIndentLines,
30622
+ variant: props.indentLinesVariant
30623
+ });
30555
30624
  const slotsWithItem = {
30556
30625
  prepend: slotProps => createElementVNode(Fragment, null, [props.selectable && (!children || children && !['leaf', 'single-leaf'].includes(props.selectStrategy)) && createElementVNode("div", null, [createVNode(VCheckboxBtn, {
30557
30626
  "key": item.value,
@@ -30617,21 +30686,40 @@ const VTreeviewChildren = genericComponent()({
30617
30686
  return createVNode(VTreeviewItem, mergeProps({
30618
30687
  "ref": el => activatorItems.value[index] = el
30619
30688
  }, listItemProps, {
30689
+ "hideActions": props.hideActions,
30690
+ "indentLines": indentLines.node,
30620
30691
  "value": props.returnObject ? item.raw : itemProps.value,
30621
30692
  "loading": loading
30622
30693
  }), slotsWithItem);
30623
30694
  },
30624
30695
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30625
30696
  "items": children,
30697
+ "indentLinesVariant": props.indentLinesVariant,
30698
+ "parentIndentLines": indentLines.children,
30699
+ "isLastGroup": nextItemHasChildren,
30626
30700
  "returnObject": props.returnObject
30627
30701
  }), slots)
30628
- }) : slots.item?.({
30702
+ }) : renderSlot(slots.item, {
30629
30703
  props: itemProps,
30630
30704
  item: item.raw,
30631
30705
  internalItem: item
30632
- }) ?? createVNode(VTreeviewItem, mergeProps(itemProps, {
30633
- "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30634
- }), slotsWithItem);
30706
+ }, () => {
30707
+ if (item.type === 'divider') {
30708
+ return renderSlot(slots.divider, {
30709
+ props: item.raw
30710
+ }, () => createVNode(VDivider, item.props, null));
30711
+ }
30712
+ if (item.type === 'subheader') {
30713
+ return renderSlot(slots.subheader, {
30714
+ props: item.raw
30715
+ }, () => createVNode(VListSubheader, item.props, null));
30716
+ }
30717
+ return createVNode(VTreeviewItem, mergeProps(itemProps, {
30718
+ "hideActions": props.hideActions,
30719
+ "indentLines": indentLines.leaf,
30720
+ "value": props.returnObject ? toRaw(item.raw) : itemProps.value
30721
+ }), slotsWithItem);
30722
+ });
30635
30723
  });
30636
30724
  }
30637
30725
  });
@@ -30647,16 +30735,17 @@ function flatten(items) {
30647
30735
  const makeVTreeviewProps = propsFactory({
30648
30736
  fluid: Boolean,
30649
30737
  openAll: Boolean,
30738
+ indentLines: [Boolean, String],
30650
30739
  search: String,
30651
30740
  ...makeFilterProps({
30652
30741
  filterKeys: ['title']
30653
30742
  }),
30654
- ...omit(makeVTreeviewChildrenProps(), ['index', 'path']),
30743
+ ...omit(makeVTreeviewChildrenProps(), ['index', 'path', 'indentLinesVariant', 'parentIndentLines', 'isLastGroup']),
30655
30744
  ...omit(makeVListProps({
30656
30745
  collapseIcon: '$treeviewCollapse',
30657
30746
  expandIcon: '$treeviewExpand',
30658
30747
  slim: true
30659
- }), ['itemType', 'nav', 'openStrategy']),
30748
+ }), ['nav', 'openStrategy']),
30660
30749
  modelValue: Array
30661
30750
  }, 'VTreeview');
30662
30751
  const VTreeview = genericComponent()({
@@ -30753,6 +30842,7 @@ const VTreeview = genericComponent()({
30753
30842
  useRender(() => {
30754
30843
  const listProps = VList.filterProps(props);
30755
30844
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
30845
+ const indentLinesVariant = typeof props.indentLines === 'boolean' ? 'default' : props.indentLines;
30756
30846
  return createVNode(VList, mergeProps({
30757
30847
  "ref": vListRef
30758
30848
  }, listProps, {
@@ -30770,7 +30860,9 @@ const VTreeview = genericComponent()({
30770
30860
  default: () => [createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30771
30861
  "density": props.density,
30772
30862
  "returnObject": props.returnObject,
30773
- "items": items.value
30863
+ "items": items.value,
30864
+ "parentIndentLines": props.indentLines ? [] : undefined,
30865
+ "indentLinesVariant": indentLinesVariant
30774
30866
  }), slots)]
30775
30867
  });
30776
30868
  });
@@ -31290,7 +31382,7 @@ function createVuetify$1() {
31290
31382
  };
31291
31383
  });
31292
31384
  }
31293
- const version$1 = "3.9.0-beta.1-dev.2025-07-05";
31385
+ const version$1 = "3.9.0-master.2025-07-08";
31294
31386
  createVuetify$1.version = version$1;
31295
31387
 
31296
31388
  // Vue's inject() can only be used in setup
@@ -31315,7 +31407,7 @@ const createVuetify = function () {
31315
31407
  ...options
31316
31408
  });
31317
31409
  };
31318
- const version = "3.9.0-beta.1-dev.2025-07-05";
31410
+ const version = "3.9.0-master.2025-07-08";
31319
31411
  createVuetify.version = version;
31320
31412
 
31321
31413
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useRtl, useTheme, version };