@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
@@ -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
  */
@@ -4803,6 +4803,8 @@ const aliases = {
4803
4803
  calendar: 'mdi-calendar',
4804
4804
  treeviewCollapse: 'mdi-menu-down',
4805
4805
  treeviewExpand: 'mdi-menu-right',
4806
+ tableGroupCollapse: 'mdi-chevron-down',
4807
+ tableGroupExpand: 'mdi-chevron-right',
4806
4808
  eyeDropper: 'mdi-eyedropper',
4807
4809
  upload: 'mdi-cloud-upload',
4808
4810
  color: 'mdi-palette',
@@ -15624,7 +15626,7 @@ const VWindow = genericComponent()({
15624
15626
  'v-window--vertical-arrows': !!props.verticalArrows,
15625
15627
  'v-window--crossfade': !!props.crossfade
15626
15628
  }, themeClasses.value, props.class]),
15627
- "style": normalizeStyle([props.style, props.transitionDuration ? {
15629
+ "style": normalizeStyle([props.style, props.transitionDuration && !PREFERS_REDUCED_MOTION ? {
15628
15630
  '--v-window-transition-duration': convertToUnit(props.transitionDuration, 'ms')
15629
15631
  } : undefined])
15630
15632
  }, {
@@ -20429,6 +20431,7 @@ const VDataIterator = genericComponent()({
20429
20431
  isGroupOpen,
20430
20432
  toggleGroup,
20431
20433
  items: paginatedItemsWithoutGroups.value,
20434
+ itemsCount: filteredItems.value.length,
20432
20435
  groupedItems: paginatedItems.value
20433
20436
  }));
20434
20437
  useRender(() => createVNode(props.tag, {
@@ -20939,6 +20942,8 @@ const VDataTableColumn = defineFunctionalComponent({
20939
20942
  lastFixed: Boolean,
20940
20943
  firstFixedEnd: Boolean,
20941
20944
  noPadding: Boolean,
20945
+ indent: [Number, String],
20946
+ empty: Boolean,
20942
20947
  tag: String,
20943
20948
  width: [Number, String],
20944
20949
  maxWidth: [Number, String],
@@ -20956,14 +20961,16 @@ const VDataTableColumn = defineFunctionalComponent({
20956
20961
  'v-data-table-column--last-fixed': props.lastFixed,
20957
20962
  'v-data-table-column--first-fixed-end': props.firstFixedEnd,
20958
20963
  'v-data-table-column--no-padding': props.noPadding,
20959
- 'v-data-table-column--nowrap': props.nowrap
20964
+ 'v-data-table-column--nowrap': props.nowrap,
20965
+ 'v-data-table-column--empty': props.empty
20960
20966
  }, `v-data-table-column--align-${props.align}`]),
20961
20967
  "style": {
20962
20968
  height: convertToUnit(props.height),
20963
20969
  width: convertToUnit(props.width),
20964
20970
  maxWidth: convertToUnit(props.maxWidth),
20965
20971
  left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
20966
- right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
20972
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,
20973
+ paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined
20967
20974
  }
20968
20975
  }, {
20969
20976
  default: () => [slots.default?.()]
@@ -21378,6 +21385,7 @@ const VDataTableHeaders = genericComponent()({
21378
21385
  y
21379
21386
  } = _ref2;
21380
21387
  const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21388
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21381
21389
  const headerProps = mergeProps(props.headerProps ?? {}, column.headerProps ?? {});
21382
21390
  return createVNode(VDataTableColumn, mergeProps({
21383
21391
  "tag": "th",
@@ -21400,6 +21408,7 @@ const VDataTableHeaders = genericComponent()({
21400
21408
  "lastFixed": column.lastFixed,
21401
21409
  "firstFixedEnd": column.firstFixedEnd,
21402
21410
  "noPadding": noPadding,
21411
+ "empty": isEmpty,
21403
21412
  "tabindex": column.sortable ? 0 : undefined,
21404
21413
  "onClick": column.sortable ? () => toggleSort(column) : undefined,
21405
21414
  "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
@@ -21417,6 +21426,7 @@ const VDataTableHeaders = genericComponent()({
21417
21426
  getSortIcon
21418
21427
  };
21419
21428
  if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
21429
+ if (isEmpty) return '';
21420
21430
  if (column.key === 'data-table-select') {
21421
21431
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && createVNode(VCheckboxBtn, {
21422
21432
  "modelValue": allSelected.value,
@@ -21511,6 +21521,14 @@ const makeVDataTableGroupHeaderRowProps = propsFactory({
21511
21521
  item: {
21512
21522
  type: Object,
21513
21523
  required: true
21524
+ },
21525
+ groupCollapseIcon: {
21526
+ type: IconValue,
21527
+ default: '$tableGroupCollapse'
21528
+ },
21529
+ groupExpandIcon: {
21530
+ type: IconValue,
21531
+ default: '$tableGroupExpand'
21514
21532
  }
21515
21533
  }, 'VDataTableGroupHeaderRow');
21516
21534
  const VDataTableGroupHeaderRow = genericComponent()({
@@ -21536,6 +21554,7 @@ const VDataTableGroupHeaderRow = genericComponent()({
21536
21554
  const rows = computed(() => {
21537
21555
  return extractRows([props.item]);
21538
21556
  });
21557
+ const colspan = toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));
21539
21558
  return () => createElementVNode("tr", {
21540
21559
  "class": "v-data-table-group-header-row",
21541
21560
  "style": {
@@ -21543,7 +21562,7 @@ const VDataTableGroupHeaderRow = genericComponent()({
21543
21562
  }
21544
21563
  }, [columns.value.map(column => {
21545
21564
  if (column.key === 'data-table-group') {
21546
- const icon = isGroupOpen(props.item) ? '$expand' : '$next';
21565
+ const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;
21547
21566
  const onClick = () => toggleGroup(props.item);
21548
21567
  return slots['data-table-group']?.({
21549
21568
  item: props.item,
@@ -21553,7 +21572,8 @@ const VDataTableGroupHeaderRow = genericComponent()({
21553
21572
  onClick
21554
21573
  }
21555
21574
  }) ?? createVNode(VDataTableColumn, {
21556
- "class": "v-data-table-group-header-row__column"
21575
+ "class": "v-data-table-group-header-row__column",
21576
+ "colspan": colspan.value
21557
21577
  }, {
21558
21578
  default: () => [createVNode(VBtn, {
21559
21579
  "size": "small",
@@ -21562,8 +21582,7 @@ const VDataTableGroupHeaderRow = genericComponent()({
21562
21582
  "onClick": onClick
21563
21583
  }, null), createElementVNode("span", null, [props.item.value]), createElementVNode("span", null, [createTextVNode("("), rows.value.length, createTextVNode(")")])]
21564
21584
  });
21565
- }
21566
- if (column.key === 'data-table-select') {
21585
+ } else if (column.key === 'data-table-select') {
21567
21586
  const modelValue = isSelected(rows.value);
21568
21587
  const indeterminate = isSomeSelected(rows.value) && !modelValue;
21569
21588
  const selectGroup = v => select(rows.value, v);
@@ -21573,13 +21592,18 @@ const VDataTableGroupHeaderRow = genericComponent()({
21573
21592
  indeterminate,
21574
21593
  'onUpdate:modelValue': selectGroup
21575
21594
  }
21576
- }) ?? createElementVNode("td", null, [createVNode(VCheckboxBtn, {
21577
- "modelValue": modelValue,
21578
- "indeterminate": indeterminate,
21579
- "onUpdate:modelValue": selectGroup
21580
- }, null)]);
21595
+ }) ?? createVNode(VDataTableColumn, {
21596
+ "class": "v-data-table__td--select-row",
21597
+ "noPadding": true
21598
+ }, {
21599
+ default: () => [createVNode(VCheckboxBtn, {
21600
+ "modelValue": modelValue,
21601
+ "indeterminate": indeterminate,
21602
+ "onUpdate:modelValue": selectGroup
21603
+ }, null)]
21604
+ });
21581
21605
  }
21582
- return createElementVNode("td", null, null);
21606
+ return '';
21583
21607
  })]);
21584
21608
  }
21585
21609
  });
@@ -21590,6 +21614,14 @@ const makeVDataTableRowProps = propsFactory({
21590
21614
  index: Number,
21591
21615
  item: Object,
21592
21616
  cellProps: [Object, Function],
21617
+ collapseIcon: {
21618
+ type: IconValue,
21619
+ default: '$collapse'
21620
+ },
21621
+ expandIcon: {
21622
+ type: IconValue,
21623
+ default: '$expand'
21624
+ },
21593
21625
  onClick: EventProp(),
21594
21626
  onContextmenu: EventProp(),
21595
21627
  onDblclick: EventProp(),
@@ -21670,8 +21702,11 @@ const VDataTableRow = genericComponent()({
21670
21702
  internalItem: slotProps.internalItem,
21671
21703
  value: slotProps.value
21672
21704
  }) : column.cellProps;
21705
+ const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21706
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21673
21707
  return createVNode(VDataTableColumn, mergeProps({
21674
21708
  "align": column.align,
21709
+ "indent": column.intent,
21675
21710
  "class": {
21676
21711
  'v-data-table__td--expanded-row': column.key === 'data-table-expand',
21677
21712
  'v-data-table__td--select-row': column.key === 'data-table-select'
@@ -21682,7 +21717,8 @@ const VDataTableRow = genericComponent()({
21682
21717
  "lastFixed": column.lastFixed,
21683
21718
  "firstFixedEnd": column.firstFixedEnd,
21684
21719
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21685
- "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21720
+ "noPadding": noPadding,
21721
+ "empty": isEmpty,
21686
21722
  "nowrap": column.nowrap,
21687
21723
  "width": !mobile.value ? column.width : undefined
21688
21724
  }, cellProps, columnCellProps), {
@@ -21705,13 +21741,13 @@ const VDataTableRow = genericComponent()({
21705
21741
  return slots['item.data-table-expand']?.({
21706
21742
  ...slotProps,
21707
21743
  props: {
21708
- icon: isExpanded(item) ? '$collapse' : '$expand',
21744
+ icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,
21709
21745
  size: 'small',
21710
21746
  variant: 'text',
21711
21747
  onClick: withModifiers(() => toggleExpand(item), ['stop'])
21712
21748
  }
21713
21749
  }) ?? createVNode(VBtn, {
21714
- "icon": isExpanded(item) ? '$collapse' : '$expand',
21750
+ "icon": isExpanded(item) ? props.collapseIcon : props.expandIcon,
21715
21751
  "size": "small",
21716
21752
  "variant": "text",
21717
21753
  "onClick": withModifiers(() => toggleExpand(item), ['stop'])
@@ -21749,6 +21785,8 @@ const makeVDataTableRowsProps = propsFactory({
21749
21785
  },
21750
21786
  rowProps: [Object, Function],
21751
21787
  cellProps: [Object, Function],
21788
+ ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
21789
+ ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
21752
21790
  ...makeDisplayProps()
21753
21791
  }, 'VDataTableRows');
21754
21792
  const VDataTableRows = genericComponent()({
@@ -21783,6 +21821,7 @@ const VDataTableRows = genericComponent()({
21783
21821
  mobile
21784
21822
  } = useDisplay(props);
21785
21823
  useRender(() => {
21824
+ const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
21786
21825
  if (props.loading && (!props.items.length || slots.loading)) {
21787
21826
  return createElementVNode("tr", {
21788
21827
  "class": "v-data-table-rows-loading",
@@ -21815,7 +21854,7 @@ const VDataTableRows = genericComponent()({
21815
21854
  return slots['group-header'] ? slots['group-header'](slotProps) : createVNode(VDataTableGroupHeaderRow, mergeProps({
21816
21855
  "key": `group-header_${item.id}`,
21817
21856
  "item": item
21818
- }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21857
+ }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps), groupHeaderRowProps), slots);
21819
21858
  }
21820
21859
  const slotProps = {
21821
21860
  index,
@@ -21837,6 +21876,8 @@ const VDataTableRows = genericComponent()({
21837
21876
  index,
21838
21877
  item,
21839
21878
  cellProps: props.cellProps,
21879
+ collapseIcon: props.collapseIcon,
21880
+ expandIcon: props.expandIcon,
21840
21881
  mobile: mobile.value
21841
21882
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
21842
21883
  item: slotProps.item,
@@ -24494,6 +24535,10 @@ const makeVFileInputProps = propsFactory({
24494
24535
  return typeof v === 'boolean' || [1000, 1024].includes(Number(v));
24495
24536
  }
24496
24537
  },
24538
+ truncateLength: {
24539
+ type: [Number, String],
24540
+ default: 22
24541
+ },
24497
24542
  ...makeVInputProps({
24498
24543
  prependIcon: '$file'
24499
24544
  }),
@@ -24551,7 +24596,8 @@ const VFileInput = genericComponent()({
24551
24596
  name = '',
24552
24597
  size = 0
24553
24598
  } = file;
24554
- return !props.showSize ? name : `${name} (${humanReadableFileSize(size, base.value)})`;
24599
+ const truncatedText = truncateText(name);
24600
+ return !props.showSize ? truncatedText : `${truncatedText} (${humanReadableFileSize(size, base.value)})`;
24555
24601
  }));
24556
24602
  const counterValue = computed(() => {
24557
24603
  const fileCount = model.value?.length ?? 0;
@@ -24591,6 +24637,11 @@ const VFileInput = genericComponent()({
24591
24637
  callEvent(props['onClick:clear'], e);
24592
24638
  });
24593
24639
  }
24640
+ function truncateText(str) {
24641
+ if (str.length < Number(props.truncateLength)) return str;
24642
+ const charsKeepOneSide = Math.floor((Number(props.truncateLength) - 1) / 2);
24643
+ return `${str.slice(0, charsKeepOneSide)}…${str.slice(str.length - charsKeepOneSide)}`;
24644
+ }
24594
24645
  function onDragover(e) {
24595
24646
  e.preventDefault();
24596
24647
  e.stopImmediatePropagation();
@@ -27450,9 +27501,11 @@ const makeVSkeletonLoaderProps = propsFactory({
27450
27501
  }, 'VSkeletonLoader');
27451
27502
  const VSkeletonLoader = genericComponent()({
27452
27503
  name: 'VSkeletonLoader',
27504
+ inheritAttrs: false,
27453
27505
  props: makeVSkeletonLoaderProps(),
27454
27506
  setup(props, _ref) {
27455
27507
  let {
27508
+ attrs,
27456
27509
  slots
27457
27510
  } = _ref;
27458
27511
  const {
@@ -27479,12 +27532,12 @@ const VSkeletonLoader = genericComponent()({
27479
27532
  ariaLabel: t(props.loadingText),
27480
27533
  role: 'alert'
27481
27534
  };
27482
- return createElementVNode("div", mergeProps({
27535
+ return createElementVNode(Fragment, null, [isLoading ? createElementVNode("div", mergeProps({
27483
27536
  "class": ['v-skeleton-loader', {
27484
27537
  'v-skeleton-loader--boilerplate': props.boilerplate
27485
27538
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
27486
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}]
27487
- }, loadingProps), [isLoading ? items.value : slots.default?.()]);
27539
+ "style": [backgroundColorStyles.value, dimensionStyles.value]
27540
+ }, loadingProps, attrs), [items.value]) : slots.default?.()]);
27488
27541
  });
27489
27542
  return {};
27490
27543
  }
@@ -35573,7 +35626,7 @@ function createVuetify$1() {
35573
35626
  };
35574
35627
  });
35575
35628
  }
35576
- const version$1 = "3.9.3-dev.2025-07-31";
35629
+ const version$1 = "3.9.3-dev.2025-08-02";
35577
35630
  createVuetify$1.version = version$1;
35578
35631
 
35579
35632
  // Vue's inject() can only be used in setup
@@ -35871,7 +35924,7 @@ var index = /*#__PURE__*/Object.freeze({
35871
35924
 
35872
35925
  /* eslint-disable local-rules/sort-imports */
35873
35926
 
35874
- const version = "3.9.3-dev.2025-07-31";
35927
+ const version = "3.9.3-dev.2025-08-02";
35875
35928
 
35876
35929
  /* eslint-disable local-rules/sort-imports */
35877
35930