@vuetify/nightly 3.9.3-dev.2025-07-31 → 3.9.3-dev.2025-08-01

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 (63) hide show
  1. package/CHANGELOG.md +7 -3
  2. package/dist/json/attributes.json +3665 -3589
  3. package/dist/json/importMap-labs.json +26 -26
  4. package/dist/json/importMap.json +172 -172
  5. package/dist/json/tags.json +19 -0
  6. package/dist/json/web-types.json +7396 -7206
  7. package/dist/vuetify-labs.cjs +70 -20
  8. package/dist/vuetify-labs.css +5522 -5516
  9. package/dist/vuetify-labs.d.ts +330 -63
  10. package/dist/vuetify-labs.esm.js +70 -20
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +70 -20
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +70 -20
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +3671 -3665
  17. package/dist/vuetify.d.ts +330 -63
  18. package/dist/vuetify.esm.js +70 -20
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +70 -20
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +239 -236
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VDataTable/VDataTable.css +7 -1
  26. package/lib/components/VDataTable/VDataTable.d.ts +164 -0
  27. package/lib/components/VDataTable/VDataTable.sass +4 -1
  28. package/lib/components/VDataTable/VDataTableColumn.d.ts +4 -1
  29. package/lib/components/VDataTable/VDataTableColumn.js +6 -2
  30. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  31. package/lib/components/VDataTable/VDataTableGroupHeaderRow.d.ts +57 -3
  32. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +27 -12
  33. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
  34. package/lib/components/VDataTable/VDataTableHeaders.js +3 -0
  35. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  36. package/lib/components/VDataTable/VDataTableRow.d.ts +51 -0
  37. package/lib/components/VDataTable/VDataTableRow.js +17 -4
  38. package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
  39. package/lib/components/VDataTable/VDataTableRows.d.ts +100 -0
  40. package/lib/components/VDataTable/VDataTableRows.js +9 -4
  41. package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
  42. package/lib/components/VDataTable/VDataTableServer.d.ts +110 -0
  43. package/lib/components/VDataTable/VDataTableVirtual.d.ts +110 -0
  44. package/lib/components/VDataTable/composables/headers.d.ts +14 -0
  45. package/lib/components/VDataTable/types.d.ts +1 -0
  46. package/lib/components/VDataTable/types.js.map +1 -1
  47. package/lib/components/VFileInput/VFileInput.d.ts +25 -0
  48. package/lib/components/VFileInput/VFileInput.js +11 -1
  49. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  50. package/lib/entry-bundler.js +1 -1
  51. package/lib/framework.d.ts +64 -63
  52. package/lib/framework.js +1 -1
  53. package/lib/iconsets/fa.js +2 -0
  54. package/lib/iconsets/fa.js.map +1 -1
  55. package/lib/iconsets/fa4.js +2 -0
  56. package/lib/iconsets/fa4.js.map +1 -1
  57. package/lib/iconsets/md.js +2 -0
  58. package/lib/iconsets/md.js.map +1 -1
  59. package/lib/iconsets/mdi-svg.js +2 -0
  60. package/lib/iconsets/mdi-svg.js.map +1 -1
  61. package/lib/iconsets/mdi.js +2 -0
  62. package/lib/iconsets/mdi.js.map +1 -1
  63. package/package.json +1 -1
package/dist/vuetify.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.3-dev.2025-07-31
2
+ * Vuetify v3.9.3-dev.2025-08-01
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1873,6 +1873,8 @@
1873
1873
  calendar: 'mdi-calendar',
1874
1874
  treeviewCollapse: 'mdi-menu-down',
1875
1875
  treeviewExpand: 'mdi-menu-right',
1876
+ tableGroupCollapse: 'mdi-chevron-down',
1877
+ tableGroupExpand: 'mdi-chevron-right',
1876
1878
  eyeDropper: 'mdi-eyedropper',
1877
1879
  upload: 'mdi-cloud-upload',
1878
1880
  color: 'mdi-palette',
@@ -21183,6 +21185,8 @@
21183
21185
  lastFixed: Boolean,
21184
21186
  firstFixedEnd: Boolean,
21185
21187
  noPadding: Boolean,
21188
+ indent: [Number, String],
21189
+ empty: Boolean,
21186
21190
  tag: String,
21187
21191
  width: [Number, String],
21188
21192
  maxWidth: [Number, String],
@@ -21200,14 +21204,16 @@
21200
21204
  'v-data-table-column--last-fixed': props.lastFixed,
21201
21205
  'v-data-table-column--first-fixed-end': props.firstFixedEnd,
21202
21206
  'v-data-table-column--no-padding': props.noPadding,
21203
- 'v-data-table-column--nowrap': props.nowrap
21207
+ 'v-data-table-column--nowrap': props.nowrap,
21208
+ 'v-data-table-column--empty': props.empty
21204
21209
  }, `v-data-table-column--align-${props.align}`]),
21205
21210
  "style": {
21206
21211
  height: convertToUnit(props.height),
21207
21212
  width: convertToUnit(props.width),
21208
21213
  maxWidth: convertToUnit(props.maxWidth),
21209
21214
  left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
21210
- right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
21215
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,
21216
+ paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined
21211
21217
  }
21212
21218
  }, {
21213
21219
  default: () => [slots.default?.()]
@@ -21622,6 +21628,7 @@
21622
21628
  y
21623
21629
  } = _ref2;
21624
21630
  const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21631
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21625
21632
  const headerProps = vue.mergeProps(props.headerProps ?? {}, column.headerProps ?? {});
21626
21633
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21627
21634
  "tag": "th",
@@ -21644,6 +21651,7 @@
21644
21651
  "lastFixed": column.lastFixed,
21645
21652
  "firstFixedEnd": column.firstFixedEnd,
21646
21653
  "noPadding": noPadding,
21654
+ "empty": isEmpty,
21647
21655
  "tabindex": column.sortable ? 0 : undefined,
21648
21656
  "onClick": column.sortable ? () => toggleSort(column) : undefined,
21649
21657
  "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
@@ -21661,6 +21669,7 @@
21661
21669
  getSortIcon
21662
21670
  };
21663
21671
  if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
21672
+ if (isEmpty) return '';
21664
21673
  if (column.key === 'data-table-select') {
21665
21674
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && vue.createVNode(VCheckboxBtn, {
21666
21675
  "modelValue": allSelected.value,
@@ -21755,6 +21764,14 @@
21755
21764
  item: {
21756
21765
  type: Object,
21757
21766
  required: true
21767
+ },
21768
+ groupCollapseIcon: {
21769
+ type: IconValue,
21770
+ default: '$tableGroupCollapse'
21771
+ },
21772
+ groupExpandIcon: {
21773
+ type: IconValue,
21774
+ default: '$tableGroupExpand'
21758
21775
  }
21759
21776
  }, 'VDataTableGroupHeaderRow');
21760
21777
  const VDataTableGroupHeaderRow = genericComponent()({
@@ -21780,6 +21797,7 @@
21780
21797
  const rows = vue.computed(() => {
21781
21798
  return extractRows([props.item]);
21782
21799
  });
21800
+ const colspan = vue.toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));
21783
21801
  return () => vue.createElementVNode("tr", {
21784
21802
  "class": "v-data-table-group-header-row",
21785
21803
  "style": {
@@ -21787,7 +21805,7 @@
21787
21805
  }
21788
21806
  }, [columns.value.map(column => {
21789
21807
  if (column.key === 'data-table-group') {
21790
- const icon = isGroupOpen(props.item) ? '$expand' : '$next';
21808
+ const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;
21791
21809
  const onClick = () => toggleGroup(props.item);
21792
21810
  return slots['data-table-group']?.({
21793
21811
  item: props.item,
@@ -21797,7 +21815,8 @@
21797
21815
  onClick
21798
21816
  }
21799
21817
  }) ?? vue.createVNode(VDataTableColumn, {
21800
- "class": "v-data-table-group-header-row__column"
21818
+ "class": "v-data-table-group-header-row__column",
21819
+ "colspan": colspan.value
21801
21820
  }, {
21802
21821
  default: () => [vue.createVNode(VBtn, {
21803
21822
  "size": "small",
@@ -21806,8 +21825,7 @@
21806
21825
  "onClick": onClick
21807
21826
  }, null), vue.createElementVNode("span", null, [props.item.value]), vue.createElementVNode("span", null, [vue.createTextVNode("("), rows.value.length, vue.createTextVNode(")")])]
21808
21827
  });
21809
- }
21810
- if (column.key === 'data-table-select') {
21828
+ } else if (column.key === 'data-table-select') {
21811
21829
  const modelValue = isSelected(rows.value);
21812
21830
  const indeterminate = isSomeSelected(rows.value) && !modelValue;
21813
21831
  const selectGroup = v => select(rows.value, v);
@@ -21817,13 +21835,18 @@
21817
21835
  indeterminate,
21818
21836
  'onUpdate:modelValue': selectGroup
21819
21837
  }
21820
- }) ?? vue.createElementVNode("td", null, [vue.createVNode(VCheckboxBtn, {
21821
- "modelValue": modelValue,
21822
- "indeterminate": indeterminate,
21823
- "onUpdate:modelValue": selectGroup
21824
- }, null)]);
21838
+ }) ?? vue.createVNode(VDataTableColumn, {
21839
+ "class": "v-data-table__td--select-row",
21840
+ "noPadding": true
21841
+ }, {
21842
+ default: () => [vue.createVNode(VCheckboxBtn, {
21843
+ "modelValue": modelValue,
21844
+ "indeterminate": indeterminate,
21845
+ "onUpdate:modelValue": selectGroup
21846
+ }, null)]
21847
+ });
21825
21848
  }
21826
- return vue.createElementVNode("td", null, null);
21849
+ return '';
21827
21850
  })]);
21828
21851
  }
21829
21852
  });
@@ -21834,6 +21857,14 @@
21834
21857
  index: Number,
21835
21858
  item: Object,
21836
21859
  cellProps: [Object, Function],
21860
+ collapseIcon: {
21861
+ type: IconValue,
21862
+ default: '$collapse'
21863
+ },
21864
+ expandIcon: {
21865
+ type: IconValue,
21866
+ default: '$expand'
21867
+ },
21837
21868
  onClick: EventProp(),
21838
21869
  onContextmenu: EventProp(),
21839
21870
  onDblclick: EventProp(),
@@ -21914,8 +21945,11 @@
21914
21945
  internalItem: slotProps.internalItem,
21915
21946
  value: slotProps.value
21916
21947
  }) : column.cellProps;
21948
+ const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21949
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21917
21950
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21918
21951
  "align": column.align,
21952
+ "indent": column.intent,
21919
21953
  "class": {
21920
21954
  'v-data-table__td--expanded-row': column.key === 'data-table-expand',
21921
21955
  'v-data-table__td--select-row': column.key === 'data-table-select'
@@ -21926,7 +21960,8 @@
21926
21960
  "lastFixed": column.lastFixed,
21927
21961
  "firstFixedEnd": column.firstFixedEnd,
21928
21962
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21929
- "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21963
+ "noPadding": noPadding,
21964
+ "empty": isEmpty,
21930
21965
  "nowrap": column.nowrap,
21931
21966
  "width": !mobile.value ? column.width : undefined
21932
21967
  }, cellProps, columnCellProps), {
@@ -21949,13 +21984,13 @@
21949
21984
  return slots['item.data-table-expand']?.({
21950
21985
  ...slotProps,
21951
21986
  props: {
21952
- icon: isExpanded(item) ? '$collapse' : '$expand',
21987
+ icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,
21953
21988
  size: 'small',
21954
21989
  variant: 'text',
21955
21990
  onClick: vue.withModifiers(() => toggleExpand(item), ['stop'])
21956
21991
  }
21957
21992
  }) ?? vue.createVNode(VBtn, {
21958
- "icon": isExpanded(item) ? '$collapse' : '$expand',
21993
+ "icon": isExpanded(item) ? props.collapseIcon : props.expandIcon,
21959
21994
  "size": "small",
21960
21995
  "variant": "text",
21961
21996
  "onClick": vue.withModifiers(() => toggleExpand(item), ['stop'])
@@ -21993,6 +22028,8 @@
21993
22028
  },
21994
22029
  rowProps: [Object, Function],
21995
22030
  cellProps: [Object, Function],
22031
+ ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
22032
+ ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
21996
22033
  ...makeDisplayProps()
21997
22034
  }, 'VDataTableRows');
21998
22035
  const VDataTableRows = genericComponent()({
@@ -22027,6 +22064,7 @@
22027
22064
  mobile
22028
22065
  } = useDisplay(props);
22029
22066
  useRender(() => {
22067
+ const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
22030
22068
  if (props.loading && (!props.items.length || slots.loading)) {
22031
22069
  return vue.createElementVNode("tr", {
22032
22070
  "class": "v-data-table-rows-loading",
@@ -22059,7 +22097,7 @@
22059
22097
  return slots['group-header'] ? slots['group-header'](slotProps) : vue.createVNode(VDataTableGroupHeaderRow, vue.mergeProps({
22060
22098
  "key": `group-header_${item.id}`,
22061
22099
  "item": item
22062
- }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
22100
+ }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps), groupHeaderRowProps), slots);
22063
22101
  }
22064
22102
  const slotProps = {
22065
22103
  index,
@@ -22081,6 +22119,8 @@
22081
22119
  index,
22082
22120
  item,
22083
22121
  cellProps: props.cellProps,
22122
+ collapseIcon: props.collapseIcon,
22123
+ expandIcon: props.expandIcon,
22084
22124
  mobile: mobile.value
22085
22125
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
22086
22126
  item: slotProps.item,
@@ -24738,6 +24778,10 @@
24738
24778
  return typeof v === 'boolean' || [1000, 1024].includes(Number(v));
24739
24779
  }
24740
24780
  },
24781
+ truncateLength: {
24782
+ type: [Number, String],
24783
+ default: 22
24784
+ },
24741
24785
  ...makeVInputProps({
24742
24786
  prependIcon: '$file'
24743
24787
  }),
@@ -24795,7 +24839,8 @@
24795
24839
  name = '',
24796
24840
  size = 0
24797
24841
  } = file;
24798
- return !props.showSize ? name : `${name} (${humanReadableFileSize(size, base.value)})`;
24842
+ const truncatedText = truncateText(name);
24843
+ return !props.showSize ? truncatedText : `${truncatedText} (${humanReadableFileSize(size, base.value)})`;
24799
24844
  }));
24800
24845
  const counterValue = vue.computed(() => {
24801
24846
  const fileCount = model.value?.length ?? 0;
@@ -24835,6 +24880,11 @@
24835
24880
  callEvent(props['onClick:clear'], e);
24836
24881
  });
24837
24882
  }
24883
+ function truncateText(str) {
24884
+ if (str.length < Number(props.truncateLength)) return str;
24885
+ const charsKeepOneSide = Math.floor((Number(props.truncateLength) - 1) / 2);
24886
+ return `${str.slice(0, charsKeepOneSide)}…${str.slice(str.length - charsKeepOneSide)}`;
24887
+ }
24838
24888
  function onDragover(e) {
24839
24889
  e.preventDefault();
24840
24890
  e.stopImmediatePropagation();
@@ -31848,7 +31898,7 @@
31848
31898
  };
31849
31899
  });
31850
31900
  }
31851
- const version$1 = "3.9.3-dev.2025-07-31";
31901
+ const version$1 = "3.9.3-dev.2025-08-01";
31852
31902
  createVuetify$1.version = version$1;
31853
31903
 
31854
31904
  // Vue's inject() can only be used in setup
@@ -31873,7 +31923,7 @@
31873
31923
  ...options
31874
31924
  });
31875
31925
  };
31876
- const version = "3.9.3-dev.2025-07-31";
31926
+ const version = "3.9.3-dev.2025-08-01";
31877
31927
  createVuetify.version = version;
31878
31928
 
31879
31929
  exports.blueprints = index;