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

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 (70) hide show
  1. package/CHANGELOG.md +10 -3
  2. package/dist/json/attributes.json +2098 -2022
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +168 -168
  5. package/dist/json/tags.json +19 -0
  6. package/dist/json/web-types.json +4252 -4050
  7. package/dist/vuetify-labs.cjs +77 -24
  8. package/dist/vuetify-labs.css +5349 -5343
  9. package/dist/vuetify-labs.d.ts +329 -61
  10. package/dist/vuetify-labs.esm.js +77 -24
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +77 -24
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +77 -24
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +2939 -2933
  17. package/dist/vuetify.d.ts +329 -61
  18. package/dist/vuetify.esm.js +77 -24
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +77 -24
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +252 -249
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VDataIterator/VDataIterator.d.ts +1 -0
  26. package/lib/components/VDataIterator/VDataIterator.js +1 -0
  27. package/lib/components/VDataIterator/VDataIterator.js.map +1 -1
  28. package/lib/components/VDataTable/VDataTable.css +7 -1
  29. package/lib/components/VDataTable/VDataTable.d.ts +164 -0
  30. package/lib/components/VDataTable/VDataTable.sass +4 -1
  31. package/lib/components/VDataTable/VDataTableColumn.d.ts +4 -1
  32. package/lib/components/VDataTable/VDataTableColumn.js +6 -2
  33. package/lib/components/VDataTable/VDataTableColumn.js.map +1 -1
  34. package/lib/components/VDataTable/VDataTableGroupHeaderRow.d.ts +57 -3
  35. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js +27 -12
  36. package/lib/components/VDataTable/VDataTableGroupHeaderRow.js.map +1 -1
  37. package/lib/components/VDataTable/VDataTableHeaders.js +3 -0
  38. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  39. package/lib/components/VDataTable/VDataTableRow.d.ts +51 -0
  40. package/lib/components/VDataTable/VDataTableRow.js +17 -4
  41. package/lib/components/VDataTable/VDataTableRow.js.map +1 -1
  42. package/lib/components/VDataTable/VDataTableRows.d.ts +100 -0
  43. package/lib/components/VDataTable/VDataTableRows.js +9 -4
  44. package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
  45. package/lib/components/VDataTable/VDataTableServer.d.ts +110 -0
  46. package/lib/components/VDataTable/VDataTableVirtual.d.ts +110 -0
  47. package/lib/components/VDataTable/composables/headers.d.ts +14 -0
  48. package/lib/components/VDataTable/types.d.ts +1 -0
  49. package/lib/components/VDataTable/types.js.map +1 -1
  50. package/lib/components/VFileInput/VFileInput.d.ts +25 -0
  51. package/lib/components/VFileInput/VFileInput.js +11 -1
  52. package/lib/components/VFileInput/VFileInput.js.map +1 -1
  53. package/lib/components/VSkeletonLoader/VSkeletonLoader.js +6 -4
  54. package/lib/components/VSkeletonLoader/VSkeletonLoader.js.map +1 -1
  55. package/lib/components/VWindow/VWindow.js +2 -2
  56. package/lib/components/VWindow/VWindow.js.map +1 -1
  57. package/lib/entry-bundler.js +1 -1
  58. package/lib/framework.d.ts +62 -61
  59. package/lib/framework.js +1 -1
  60. package/lib/iconsets/fa.js +2 -0
  61. package/lib/iconsets/fa.js.map +1 -1
  62. package/lib/iconsets/fa4.js +2 -0
  63. package/lib/iconsets/fa4.js.map +1 -1
  64. package/lib/iconsets/md.js +2 -0
  65. package/lib/iconsets/md.js.map +1 -1
  66. package/lib/iconsets/mdi-svg.js +2 -0
  67. package/lib/iconsets/mdi-svg.js.map +1 -1
  68. package/lib/iconsets/mdi.js +2 -0
  69. package/lib/iconsets/mdi.js.map +1 -1
  70. 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-02
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',
@@ -15868,7 +15870,7 @@
15868
15870
  'v-window--vertical-arrows': !!props.verticalArrows,
15869
15871
  'v-window--crossfade': !!props.crossfade
15870
15872
  }, themeClasses.value, props.class]),
15871
- "style": vue.normalizeStyle([props.style, props.transitionDuration ? {
15873
+ "style": vue.normalizeStyle([props.style, props.transitionDuration && !PREFERS_REDUCED_MOTION ? {
15872
15874
  '--v-window-transition-duration': convertToUnit(props.transitionDuration, 'ms')
15873
15875
  } : undefined])
15874
15876
  }, {
@@ -20673,6 +20675,7 @@
20673
20675
  isGroupOpen,
20674
20676
  toggleGroup,
20675
20677
  items: paginatedItemsWithoutGroups.value,
20678
+ itemsCount: filteredItems.value.length,
20676
20679
  groupedItems: paginatedItems.value
20677
20680
  }));
20678
20681
  useRender(() => vue.createVNode(props.tag, {
@@ -21183,6 +21186,8 @@
21183
21186
  lastFixed: Boolean,
21184
21187
  firstFixedEnd: Boolean,
21185
21188
  noPadding: Boolean,
21189
+ indent: [Number, String],
21190
+ empty: Boolean,
21186
21191
  tag: String,
21187
21192
  width: [Number, String],
21188
21193
  maxWidth: [Number, String],
@@ -21200,14 +21205,16 @@
21200
21205
  'v-data-table-column--last-fixed': props.lastFixed,
21201
21206
  'v-data-table-column--first-fixed-end': props.firstFixedEnd,
21202
21207
  'v-data-table-column--no-padding': props.noPadding,
21203
- 'v-data-table-column--nowrap': props.nowrap
21208
+ 'v-data-table-column--nowrap': props.nowrap,
21209
+ 'v-data-table-column--empty': props.empty
21204
21210
  }, `v-data-table-column--align-${props.align}`]),
21205
21211
  "style": {
21206
21212
  height: convertToUnit(props.height),
21207
21213
  width: convertToUnit(props.width),
21208
21214
  maxWidth: convertToUnit(props.maxWidth),
21209
21215
  left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
21210
- right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
21216
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,
21217
+ paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined
21211
21218
  }
21212
21219
  }, {
21213
21220
  default: () => [slots.default?.()]
@@ -21622,6 +21629,7 @@
21622
21629
  y
21623
21630
  } = _ref2;
21624
21631
  const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21632
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21625
21633
  const headerProps = vue.mergeProps(props.headerProps ?? {}, column.headerProps ?? {});
21626
21634
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21627
21635
  "tag": "th",
@@ -21644,6 +21652,7 @@
21644
21652
  "lastFixed": column.lastFixed,
21645
21653
  "firstFixedEnd": column.firstFixedEnd,
21646
21654
  "noPadding": noPadding,
21655
+ "empty": isEmpty,
21647
21656
  "tabindex": column.sortable ? 0 : undefined,
21648
21657
  "onClick": column.sortable ? () => toggleSort(column) : undefined,
21649
21658
  "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
@@ -21661,6 +21670,7 @@
21661
21670
  getSortIcon
21662
21671
  };
21663
21672
  if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
21673
+ if (isEmpty) return '';
21664
21674
  if (column.key === 'data-table-select') {
21665
21675
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && vue.createVNode(VCheckboxBtn, {
21666
21676
  "modelValue": allSelected.value,
@@ -21755,6 +21765,14 @@
21755
21765
  item: {
21756
21766
  type: Object,
21757
21767
  required: true
21768
+ },
21769
+ groupCollapseIcon: {
21770
+ type: IconValue,
21771
+ default: '$tableGroupCollapse'
21772
+ },
21773
+ groupExpandIcon: {
21774
+ type: IconValue,
21775
+ default: '$tableGroupExpand'
21758
21776
  }
21759
21777
  }, 'VDataTableGroupHeaderRow');
21760
21778
  const VDataTableGroupHeaderRow = genericComponent()({
@@ -21780,6 +21798,7 @@
21780
21798
  const rows = vue.computed(() => {
21781
21799
  return extractRows([props.item]);
21782
21800
  });
21801
+ const colspan = vue.toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));
21783
21802
  return () => vue.createElementVNode("tr", {
21784
21803
  "class": "v-data-table-group-header-row",
21785
21804
  "style": {
@@ -21787,7 +21806,7 @@
21787
21806
  }
21788
21807
  }, [columns.value.map(column => {
21789
21808
  if (column.key === 'data-table-group') {
21790
- const icon = isGroupOpen(props.item) ? '$expand' : '$next';
21809
+ const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;
21791
21810
  const onClick = () => toggleGroup(props.item);
21792
21811
  return slots['data-table-group']?.({
21793
21812
  item: props.item,
@@ -21797,7 +21816,8 @@
21797
21816
  onClick
21798
21817
  }
21799
21818
  }) ?? vue.createVNode(VDataTableColumn, {
21800
- "class": "v-data-table-group-header-row__column"
21819
+ "class": "v-data-table-group-header-row__column",
21820
+ "colspan": colspan.value
21801
21821
  }, {
21802
21822
  default: () => [vue.createVNode(VBtn, {
21803
21823
  "size": "small",
@@ -21806,8 +21826,7 @@
21806
21826
  "onClick": onClick
21807
21827
  }, null), vue.createElementVNode("span", null, [props.item.value]), vue.createElementVNode("span", null, [vue.createTextVNode("("), rows.value.length, vue.createTextVNode(")")])]
21808
21828
  });
21809
- }
21810
- if (column.key === 'data-table-select') {
21829
+ } else if (column.key === 'data-table-select') {
21811
21830
  const modelValue = isSelected(rows.value);
21812
21831
  const indeterminate = isSomeSelected(rows.value) && !modelValue;
21813
21832
  const selectGroup = v => select(rows.value, v);
@@ -21817,13 +21836,18 @@
21817
21836
  indeterminate,
21818
21837
  'onUpdate:modelValue': selectGroup
21819
21838
  }
21820
- }) ?? vue.createElementVNode("td", null, [vue.createVNode(VCheckboxBtn, {
21821
- "modelValue": modelValue,
21822
- "indeterminate": indeterminate,
21823
- "onUpdate:modelValue": selectGroup
21824
- }, null)]);
21839
+ }) ?? vue.createVNode(VDataTableColumn, {
21840
+ "class": "v-data-table__td--select-row",
21841
+ "noPadding": true
21842
+ }, {
21843
+ default: () => [vue.createVNode(VCheckboxBtn, {
21844
+ "modelValue": modelValue,
21845
+ "indeterminate": indeterminate,
21846
+ "onUpdate:modelValue": selectGroup
21847
+ }, null)]
21848
+ });
21825
21849
  }
21826
- return vue.createElementVNode("td", null, null);
21850
+ return '';
21827
21851
  })]);
21828
21852
  }
21829
21853
  });
@@ -21834,6 +21858,14 @@
21834
21858
  index: Number,
21835
21859
  item: Object,
21836
21860
  cellProps: [Object, Function],
21861
+ collapseIcon: {
21862
+ type: IconValue,
21863
+ default: '$collapse'
21864
+ },
21865
+ expandIcon: {
21866
+ type: IconValue,
21867
+ default: '$expand'
21868
+ },
21837
21869
  onClick: EventProp(),
21838
21870
  onContextmenu: EventProp(),
21839
21871
  onDblclick: EventProp(),
@@ -21914,8 +21946,11 @@
21914
21946
  internalItem: slotProps.internalItem,
21915
21947
  value: slotProps.value
21916
21948
  }) : column.cellProps;
21949
+ const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21950
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21917
21951
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21918
21952
  "align": column.align,
21953
+ "indent": column.intent,
21919
21954
  "class": {
21920
21955
  'v-data-table__td--expanded-row': column.key === 'data-table-expand',
21921
21956
  'v-data-table__td--select-row': column.key === 'data-table-select'
@@ -21926,7 +21961,8 @@
21926
21961
  "lastFixed": column.lastFixed,
21927
21962
  "firstFixedEnd": column.firstFixedEnd,
21928
21963
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21929
- "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21964
+ "noPadding": noPadding,
21965
+ "empty": isEmpty,
21930
21966
  "nowrap": column.nowrap,
21931
21967
  "width": !mobile.value ? column.width : undefined
21932
21968
  }, cellProps, columnCellProps), {
@@ -21949,13 +21985,13 @@
21949
21985
  return slots['item.data-table-expand']?.({
21950
21986
  ...slotProps,
21951
21987
  props: {
21952
- icon: isExpanded(item) ? '$collapse' : '$expand',
21988
+ icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,
21953
21989
  size: 'small',
21954
21990
  variant: 'text',
21955
21991
  onClick: vue.withModifiers(() => toggleExpand(item), ['stop'])
21956
21992
  }
21957
21993
  }) ?? vue.createVNode(VBtn, {
21958
- "icon": isExpanded(item) ? '$collapse' : '$expand',
21994
+ "icon": isExpanded(item) ? props.collapseIcon : props.expandIcon,
21959
21995
  "size": "small",
21960
21996
  "variant": "text",
21961
21997
  "onClick": vue.withModifiers(() => toggleExpand(item), ['stop'])
@@ -21993,6 +22029,8 @@
21993
22029
  },
21994
22030
  rowProps: [Object, Function],
21995
22031
  cellProps: [Object, Function],
22032
+ ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
22033
+ ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
21996
22034
  ...makeDisplayProps()
21997
22035
  }, 'VDataTableRows');
21998
22036
  const VDataTableRows = genericComponent()({
@@ -22027,6 +22065,7 @@
22027
22065
  mobile
22028
22066
  } = useDisplay(props);
22029
22067
  useRender(() => {
22068
+ const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
22030
22069
  if (props.loading && (!props.items.length || slots.loading)) {
22031
22070
  return vue.createElementVNode("tr", {
22032
22071
  "class": "v-data-table-rows-loading",
@@ -22059,7 +22098,7 @@
22059
22098
  return slots['group-header'] ? slots['group-header'](slotProps) : vue.createVNode(VDataTableGroupHeaderRow, vue.mergeProps({
22060
22099
  "key": `group-header_${item.id}`,
22061
22100
  "item": item
22062
- }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
22101
+ }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps), groupHeaderRowProps), slots);
22063
22102
  }
22064
22103
  const slotProps = {
22065
22104
  index,
@@ -22081,6 +22120,8 @@
22081
22120
  index,
22082
22121
  item,
22083
22122
  cellProps: props.cellProps,
22123
+ collapseIcon: props.collapseIcon,
22124
+ expandIcon: props.expandIcon,
22084
22125
  mobile: mobile.value
22085
22126
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
22086
22127
  item: slotProps.item,
@@ -24738,6 +24779,10 @@
24738
24779
  return typeof v === 'boolean' || [1000, 1024].includes(Number(v));
24739
24780
  }
24740
24781
  },
24782
+ truncateLength: {
24783
+ type: [Number, String],
24784
+ default: 22
24785
+ },
24741
24786
  ...makeVInputProps({
24742
24787
  prependIcon: '$file'
24743
24788
  }),
@@ -24795,7 +24840,8 @@
24795
24840
  name = '',
24796
24841
  size = 0
24797
24842
  } = file;
24798
- return !props.showSize ? name : `${name} (${humanReadableFileSize(size, base.value)})`;
24843
+ const truncatedText = truncateText(name);
24844
+ return !props.showSize ? truncatedText : `${truncatedText} (${humanReadableFileSize(size, base.value)})`;
24799
24845
  }));
24800
24846
  const counterValue = vue.computed(() => {
24801
24847
  const fileCount = model.value?.length ?? 0;
@@ -24835,6 +24881,11 @@
24835
24881
  callEvent(props['onClick:clear'], e);
24836
24882
  });
24837
24883
  }
24884
+ function truncateText(str) {
24885
+ if (str.length < Number(props.truncateLength)) return str;
24886
+ const charsKeepOneSide = Math.floor((Number(props.truncateLength) - 1) / 2);
24887
+ return `${str.slice(0, charsKeepOneSide)}…${str.slice(str.length - charsKeepOneSide)}`;
24888
+ }
24838
24889
  function onDragover(e) {
24839
24890
  e.preventDefault();
24840
24891
  e.stopImmediatePropagation();
@@ -27694,9 +27745,11 @@
27694
27745
  }, 'VSkeletonLoader');
27695
27746
  const VSkeletonLoader = genericComponent()({
27696
27747
  name: 'VSkeletonLoader',
27748
+ inheritAttrs: false,
27697
27749
  props: makeVSkeletonLoaderProps(),
27698
27750
  setup(props, _ref) {
27699
27751
  let {
27752
+ attrs,
27700
27753
  slots
27701
27754
  } = _ref;
27702
27755
  const {
@@ -27723,12 +27776,12 @@
27723
27776
  ariaLabel: t(props.loadingText),
27724
27777
  role: 'alert'
27725
27778
  };
27726
- return vue.createElementVNode("div", vue.mergeProps({
27779
+ return vue.createElementVNode(vue.Fragment, null, [isLoading ? vue.createElementVNode("div", vue.mergeProps({
27727
27780
  "class": ['v-skeleton-loader', {
27728
27781
  'v-skeleton-loader--boilerplate': props.boilerplate
27729
27782
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
27730
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}]
27731
- }, loadingProps), [isLoading ? items.value : slots.default?.()]);
27783
+ "style": [backgroundColorStyles.value, dimensionStyles.value]
27784
+ }, loadingProps, attrs), [items.value]) : slots.default?.()]);
27732
27785
  });
27733
27786
  return {};
27734
27787
  }
@@ -31848,7 +31901,7 @@
31848
31901
  };
31849
31902
  });
31850
31903
  }
31851
- const version$1 = "3.9.3-dev.2025-07-31";
31904
+ const version$1 = "3.9.3-dev.2025-08-02";
31852
31905
  createVuetify$1.version = version$1;
31853
31906
 
31854
31907
  // Vue's inject() can only be used in setup
@@ -31873,7 +31926,7 @@
31873
31926
  ...options
31874
31927
  });
31875
31928
  };
31876
- const version = "3.9.3-dev.2025-07-31";
31929
+ const version = "3.9.3-dev.2025-08-02";
31877
31930
  createVuetify.version = version;
31878
31931
 
31879
31932
  exports.blueprints = index;