@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
@@ -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
  */
@@ -4807,6 +4807,8 @@
4807
4807
  calendar: 'mdi-calendar',
4808
4808
  treeviewCollapse: 'mdi-menu-down',
4809
4809
  treeviewExpand: 'mdi-menu-right',
4810
+ tableGroupCollapse: 'mdi-chevron-down',
4811
+ tableGroupExpand: 'mdi-chevron-right',
4810
4812
  eyeDropper: 'mdi-eyedropper',
4811
4813
  upload: 'mdi-cloud-upload',
4812
4814
  color: 'mdi-palette',
@@ -20943,6 +20945,8 @@
20943
20945
  lastFixed: Boolean,
20944
20946
  firstFixedEnd: Boolean,
20945
20947
  noPadding: Boolean,
20948
+ indent: [Number, String],
20949
+ empty: Boolean,
20946
20950
  tag: String,
20947
20951
  width: [Number, String],
20948
20952
  maxWidth: [Number, String],
@@ -20960,14 +20964,16 @@
20960
20964
  'v-data-table-column--last-fixed': props.lastFixed,
20961
20965
  'v-data-table-column--first-fixed-end': props.firstFixedEnd,
20962
20966
  'v-data-table-column--no-padding': props.noPadding,
20963
- 'v-data-table-column--nowrap': props.nowrap
20967
+ 'v-data-table-column--nowrap': props.nowrap,
20968
+ 'v-data-table-column--empty': props.empty
20964
20969
  }, `v-data-table-column--align-${props.align}`]),
20965
20970
  "style": {
20966
20971
  height: convertToUnit(props.height),
20967
20972
  width: convertToUnit(props.width),
20968
20973
  maxWidth: convertToUnit(props.maxWidth),
20969
20974
  left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
20970
- right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
20975
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,
20976
+ paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined
20971
20977
  }
20972
20978
  }, {
20973
20979
  default: () => [slots.default?.()]
@@ -21382,6 +21388,7 @@
21382
21388
  y
21383
21389
  } = _ref2;
21384
21390
  const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21391
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21385
21392
  const headerProps = vue.mergeProps(props.headerProps ?? {}, column.headerProps ?? {});
21386
21393
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21387
21394
  "tag": "th",
@@ -21404,6 +21411,7 @@
21404
21411
  "lastFixed": column.lastFixed,
21405
21412
  "firstFixedEnd": column.firstFixedEnd,
21406
21413
  "noPadding": noPadding,
21414
+ "empty": isEmpty,
21407
21415
  "tabindex": column.sortable ? 0 : undefined,
21408
21416
  "onClick": column.sortable ? () => toggleSort(column) : undefined,
21409
21417
  "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
@@ -21421,6 +21429,7 @@
21421
21429
  getSortIcon
21422
21430
  };
21423
21431
  if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
21432
+ if (isEmpty) return '';
21424
21433
  if (column.key === 'data-table-select') {
21425
21434
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && vue.createVNode(VCheckboxBtn, {
21426
21435
  "modelValue": allSelected.value,
@@ -21515,6 +21524,14 @@
21515
21524
  item: {
21516
21525
  type: Object,
21517
21526
  required: true
21527
+ },
21528
+ groupCollapseIcon: {
21529
+ type: IconValue,
21530
+ default: '$tableGroupCollapse'
21531
+ },
21532
+ groupExpandIcon: {
21533
+ type: IconValue,
21534
+ default: '$tableGroupExpand'
21518
21535
  }
21519
21536
  }, 'VDataTableGroupHeaderRow');
21520
21537
  const VDataTableGroupHeaderRow = genericComponent()({
@@ -21540,6 +21557,7 @@
21540
21557
  const rows = vue.computed(() => {
21541
21558
  return extractRows([props.item]);
21542
21559
  });
21560
+ const colspan = vue.toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));
21543
21561
  return () => vue.createElementVNode("tr", {
21544
21562
  "class": "v-data-table-group-header-row",
21545
21563
  "style": {
@@ -21547,7 +21565,7 @@
21547
21565
  }
21548
21566
  }, [columns.value.map(column => {
21549
21567
  if (column.key === 'data-table-group') {
21550
- const icon = isGroupOpen(props.item) ? '$expand' : '$next';
21568
+ const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;
21551
21569
  const onClick = () => toggleGroup(props.item);
21552
21570
  return slots['data-table-group']?.({
21553
21571
  item: props.item,
@@ -21557,7 +21575,8 @@
21557
21575
  onClick
21558
21576
  }
21559
21577
  }) ?? vue.createVNode(VDataTableColumn, {
21560
- "class": "v-data-table-group-header-row__column"
21578
+ "class": "v-data-table-group-header-row__column",
21579
+ "colspan": colspan.value
21561
21580
  }, {
21562
21581
  default: () => [vue.createVNode(VBtn, {
21563
21582
  "size": "small",
@@ -21566,8 +21585,7 @@
21566
21585
  "onClick": onClick
21567
21586
  }, null), vue.createElementVNode("span", null, [props.item.value]), vue.createElementVNode("span", null, [vue.createTextVNode("("), rows.value.length, vue.createTextVNode(")")])]
21568
21587
  });
21569
- }
21570
- if (column.key === 'data-table-select') {
21588
+ } else if (column.key === 'data-table-select') {
21571
21589
  const modelValue = isSelected(rows.value);
21572
21590
  const indeterminate = isSomeSelected(rows.value) && !modelValue;
21573
21591
  const selectGroup = v => select(rows.value, v);
@@ -21577,13 +21595,18 @@
21577
21595
  indeterminate,
21578
21596
  'onUpdate:modelValue': selectGroup
21579
21597
  }
21580
- }) ?? vue.createElementVNode("td", null, [vue.createVNode(VCheckboxBtn, {
21581
- "modelValue": modelValue,
21582
- "indeterminate": indeterminate,
21583
- "onUpdate:modelValue": selectGroup
21584
- }, null)]);
21598
+ }) ?? vue.createVNode(VDataTableColumn, {
21599
+ "class": "v-data-table__td--select-row",
21600
+ "noPadding": true
21601
+ }, {
21602
+ default: () => [vue.createVNode(VCheckboxBtn, {
21603
+ "modelValue": modelValue,
21604
+ "indeterminate": indeterminate,
21605
+ "onUpdate:modelValue": selectGroup
21606
+ }, null)]
21607
+ });
21585
21608
  }
21586
- return vue.createElementVNode("td", null, null);
21609
+ return '';
21587
21610
  })]);
21588
21611
  }
21589
21612
  });
@@ -21594,6 +21617,14 @@
21594
21617
  index: Number,
21595
21618
  item: Object,
21596
21619
  cellProps: [Object, Function],
21620
+ collapseIcon: {
21621
+ type: IconValue,
21622
+ default: '$collapse'
21623
+ },
21624
+ expandIcon: {
21625
+ type: IconValue,
21626
+ default: '$expand'
21627
+ },
21597
21628
  onClick: EventProp(),
21598
21629
  onContextmenu: EventProp(),
21599
21630
  onDblclick: EventProp(),
@@ -21674,8 +21705,11 @@
21674
21705
  internalItem: slotProps.internalItem,
21675
21706
  value: slotProps.value
21676
21707
  }) : column.cellProps;
21708
+ const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21709
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21677
21710
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21678
21711
  "align": column.align,
21712
+ "indent": column.intent,
21679
21713
  "class": {
21680
21714
  'v-data-table__td--expanded-row': column.key === 'data-table-expand',
21681
21715
  'v-data-table__td--select-row': column.key === 'data-table-select'
@@ -21686,7 +21720,8 @@
21686
21720
  "lastFixed": column.lastFixed,
21687
21721
  "firstFixedEnd": column.firstFixedEnd,
21688
21722
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21689
- "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21723
+ "noPadding": noPadding,
21724
+ "empty": isEmpty,
21690
21725
  "nowrap": column.nowrap,
21691
21726
  "width": !mobile.value ? column.width : undefined
21692
21727
  }, cellProps, columnCellProps), {
@@ -21709,13 +21744,13 @@
21709
21744
  return slots['item.data-table-expand']?.({
21710
21745
  ...slotProps,
21711
21746
  props: {
21712
- icon: isExpanded(item) ? '$collapse' : '$expand',
21747
+ icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,
21713
21748
  size: 'small',
21714
21749
  variant: 'text',
21715
21750
  onClick: vue.withModifiers(() => toggleExpand(item), ['stop'])
21716
21751
  }
21717
21752
  }) ?? vue.createVNode(VBtn, {
21718
- "icon": isExpanded(item) ? '$collapse' : '$expand',
21753
+ "icon": isExpanded(item) ? props.collapseIcon : props.expandIcon,
21719
21754
  "size": "small",
21720
21755
  "variant": "text",
21721
21756
  "onClick": vue.withModifiers(() => toggleExpand(item), ['stop'])
@@ -21753,6 +21788,8 @@
21753
21788
  },
21754
21789
  rowProps: [Object, Function],
21755
21790
  cellProps: [Object, Function],
21791
+ ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
21792
+ ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
21756
21793
  ...makeDisplayProps()
21757
21794
  }, 'VDataTableRows');
21758
21795
  const VDataTableRows = genericComponent()({
@@ -21787,6 +21824,7 @@
21787
21824
  mobile
21788
21825
  } = useDisplay(props);
21789
21826
  useRender(() => {
21827
+ const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
21790
21828
  if (props.loading && (!props.items.length || slots.loading)) {
21791
21829
  return vue.createElementVNode("tr", {
21792
21830
  "class": "v-data-table-rows-loading",
@@ -21819,7 +21857,7 @@
21819
21857
  return slots['group-header'] ? slots['group-header'](slotProps) : vue.createVNode(VDataTableGroupHeaderRow, vue.mergeProps({
21820
21858
  "key": `group-header_${item.id}`,
21821
21859
  "item": item
21822
- }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21860
+ }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps), groupHeaderRowProps), slots);
21823
21861
  }
21824
21862
  const slotProps = {
21825
21863
  index,
@@ -21841,6 +21879,8 @@
21841
21879
  index,
21842
21880
  item,
21843
21881
  cellProps: props.cellProps,
21882
+ collapseIcon: props.collapseIcon,
21883
+ expandIcon: props.expandIcon,
21844
21884
  mobile: mobile.value
21845
21885
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
21846
21886
  item: slotProps.item,
@@ -24498,6 +24538,10 @@
24498
24538
  return typeof v === 'boolean' || [1000, 1024].includes(Number(v));
24499
24539
  }
24500
24540
  },
24541
+ truncateLength: {
24542
+ type: [Number, String],
24543
+ default: 22
24544
+ },
24501
24545
  ...makeVInputProps({
24502
24546
  prependIcon: '$file'
24503
24547
  }),
@@ -24555,7 +24599,8 @@
24555
24599
  name = '',
24556
24600
  size = 0
24557
24601
  } = file;
24558
- return !props.showSize ? name : `${name} (${humanReadableFileSize(size, base.value)})`;
24602
+ const truncatedText = truncateText(name);
24603
+ return !props.showSize ? truncatedText : `${truncatedText} (${humanReadableFileSize(size, base.value)})`;
24559
24604
  }));
24560
24605
  const counterValue = vue.computed(() => {
24561
24606
  const fileCount = model.value?.length ?? 0;
@@ -24595,6 +24640,11 @@
24595
24640
  callEvent(props['onClick:clear'], e);
24596
24641
  });
24597
24642
  }
24643
+ function truncateText(str) {
24644
+ if (str.length < Number(props.truncateLength)) return str;
24645
+ const charsKeepOneSide = Math.floor((Number(props.truncateLength) - 1) / 2);
24646
+ return `${str.slice(0, charsKeepOneSide)}…${str.slice(str.length - charsKeepOneSide)}`;
24647
+ }
24598
24648
  function onDragover(e) {
24599
24649
  e.preventDefault();
24600
24650
  e.stopImmediatePropagation();
@@ -35577,7 +35627,7 @@
35577
35627
  };
35578
35628
  });
35579
35629
  }
35580
- const version$1 = "3.9.3-dev.2025-07-31";
35630
+ const version$1 = "3.9.3-dev.2025-08-01";
35581
35631
  createVuetify$1.version = version$1;
35582
35632
 
35583
35633
  // Vue's inject() can only be used in setup
@@ -35875,7 +35925,7 @@
35875
35925
 
35876
35926
  /* eslint-disable local-rules/sort-imports */
35877
35927
 
35878
- const version = "3.9.3-dev.2025-07-31";
35928
+ const version = "3.9.3-dev.2025-08-01";
35879
35929
 
35880
35930
  /* eslint-disable local-rules/sort-imports */
35881
35931