@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
  */
@@ -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',
@@ -15628,7 +15630,7 @@
15628
15630
  'v-window--vertical-arrows': !!props.verticalArrows,
15629
15631
  'v-window--crossfade': !!props.crossfade
15630
15632
  }, themeClasses.value, props.class]),
15631
- "style": vue.normalizeStyle([props.style, props.transitionDuration ? {
15633
+ "style": vue.normalizeStyle([props.style, props.transitionDuration && !PREFERS_REDUCED_MOTION ? {
15632
15634
  '--v-window-transition-duration': convertToUnit(props.transitionDuration, 'ms')
15633
15635
  } : undefined])
15634
15636
  }, {
@@ -20433,6 +20435,7 @@
20433
20435
  isGroupOpen,
20434
20436
  toggleGroup,
20435
20437
  items: paginatedItemsWithoutGroups.value,
20438
+ itemsCount: filteredItems.value.length,
20436
20439
  groupedItems: paginatedItems.value
20437
20440
  }));
20438
20441
  useRender(() => vue.createVNode(props.tag, {
@@ -20943,6 +20946,8 @@
20943
20946
  lastFixed: Boolean,
20944
20947
  firstFixedEnd: Boolean,
20945
20948
  noPadding: Boolean,
20949
+ indent: [Number, String],
20950
+ empty: Boolean,
20946
20951
  tag: String,
20947
20952
  width: [Number, String],
20948
20953
  maxWidth: [Number, String],
@@ -20960,14 +20965,16 @@
20960
20965
  'v-data-table-column--last-fixed': props.lastFixed,
20961
20966
  'v-data-table-column--first-fixed-end': props.firstFixedEnd,
20962
20967
  'v-data-table-column--no-padding': props.noPadding,
20963
- 'v-data-table-column--nowrap': props.nowrap
20968
+ 'v-data-table-column--nowrap': props.nowrap,
20969
+ 'v-data-table-column--empty': props.empty
20964
20970
  }, `v-data-table-column--align-${props.align}`]),
20965
20971
  "style": {
20966
20972
  height: convertToUnit(props.height),
20967
20973
  width: convertToUnit(props.width),
20968
20974
  maxWidth: convertToUnit(props.maxWidth),
20969
20975
  left: fixedSide === 'start' ? convertToUnit(props.fixedOffset || null) : undefined,
20970
- right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined
20976
+ right: fixedSide === 'end' ? convertToUnit(props.fixedEndOffset || null) : undefined,
20977
+ paddingInlineStart: props.indent ? convertToUnit(props.indent) : undefined
20971
20978
  }
20972
20979
  }, {
20973
20980
  default: () => [slots.default?.()]
@@ -21382,6 +21389,7 @@
21382
21389
  y
21383
21390
  } = _ref2;
21384
21391
  const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21392
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21385
21393
  const headerProps = vue.mergeProps(props.headerProps ?? {}, column.headerProps ?? {});
21386
21394
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21387
21395
  "tag": "th",
@@ -21404,6 +21412,7 @@
21404
21412
  "lastFixed": column.lastFixed,
21405
21413
  "firstFixedEnd": column.firstFixedEnd,
21406
21414
  "noPadding": noPadding,
21415
+ "empty": isEmpty,
21407
21416
  "tabindex": column.sortable ? 0 : undefined,
21408
21417
  "onClick": column.sortable ? () => toggleSort(column) : undefined,
21409
21418
  "onKeydown": column.sortable ? event => handleEnterKeyPress(event, column) : undefined
@@ -21421,6 +21430,7 @@
21421
21430
  getSortIcon
21422
21431
  };
21423
21432
  if (slots[columnSlotName]) return slots[columnSlotName](columnSlotProps);
21433
+ if (isEmpty) return '';
21424
21434
  if (column.key === 'data-table-select') {
21425
21435
  return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && vue.createVNode(VCheckboxBtn, {
21426
21436
  "modelValue": allSelected.value,
@@ -21515,6 +21525,14 @@
21515
21525
  item: {
21516
21526
  type: Object,
21517
21527
  required: true
21528
+ },
21529
+ groupCollapseIcon: {
21530
+ type: IconValue,
21531
+ default: '$tableGroupCollapse'
21532
+ },
21533
+ groupExpandIcon: {
21534
+ type: IconValue,
21535
+ default: '$tableGroupExpand'
21518
21536
  }
21519
21537
  }, 'VDataTableGroupHeaderRow');
21520
21538
  const VDataTableGroupHeaderRow = genericComponent()({
@@ -21540,6 +21558,7 @@
21540
21558
  const rows = vue.computed(() => {
21541
21559
  return extractRows([props.item]);
21542
21560
  });
21561
+ const colspan = vue.toRef(() => columns.value.length - (columns.value.some(c => c.key === 'data-table-select') ? 1 : 0));
21543
21562
  return () => vue.createElementVNode("tr", {
21544
21563
  "class": "v-data-table-group-header-row",
21545
21564
  "style": {
@@ -21547,7 +21566,7 @@
21547
21566
  }
21548
21567
  }, [columns.value.map(column => {
21549
21568
  if (column.key === 'data-table-group') {
21550
- const icon = isGroupOpen(props.item) ? '$expand' : '$next';
21569
+ const icon = isGroupOpen(props.item) ? props.groupCollapseIcon : props.groupExpandIcon;
21551
21570
  const onClick = () => toggleGroup(props.item);
21552
21571
  return slots['data-table-group']?.({
21553
21572
  item: props.item,
@@ -21557,7 +21576,8 @@
21557
21576
  onClick
21558
21577
  }
21559
21578
  }) ?? vue.createVNode(VDataTableColumn, {
21560
- "class": "v-data-table-group-header-row__column"
21579
+ "class": "v-data-table-group-header-row__column",
21580
+ "colspan": colspan.value
21561
21581
  }, {
21562
21582
  default: () => [vue.createVNode(VBtn, {
21563
21583
  "size": "small",
@@ -21566,8 +21586,7 @@
21566
21586
  "onClick": onClick
21567
21587
  }, null), vue.createElementVNode("span", null, [props.item.value]), vue.createElementVNode("span", null, [vue.createTextVNode("("), rows.value.length, vue.createTextVNode(")")])]
21568
21588
  });
21569
- }
21570
- if (column.key === 'data-table-select') {
21589
+ } else if (column.key === 'data-table-select') {
21571
21590
  const modelValue = isSelected(rows.value);
21572
21591
  const indeterminate = isSomeSelected(rows.value) && !modelValue;
21573
21592
  const selectGroup = v => select(rows.value, v);
@@ -21577,13 +21596,18 @@
21577
21596
  indeterminate,
21578
21597
  'onUpdate:modelValue': selectGroup
21579
21598
  }
21580
- }) ?? vue.createElementVNode("td", null, [vue.createVNode(VCheckboxBtn, {
21581
- "modelValue": modelValue,
21582
- "indeterminate": indeterminate,
21583
- "onUpdate:modelValue": selectGroup
21584
- }, null)]);
21599
+ }) ?? vue.createVNode(VDataTableColumn, {
21600
+ "class": "v-data-table__td--select-row",
21601
+ "noPadding": true
21602
+ }, {
21603
+ default: () => [vue.createVNode(VCheckboxBtn, {
21604
+ "modelValue": modelValue,
21605
+ "indeterminate": indeterminate,
21606
+ "onUpdate:modelValue": selectGroup
21607
+ }, null)]
21608
+ });
21585
21609
  }
21586
- return vue.createElementVNode("td", null, null);
21610
+ return '';
21587
21611
  })]);
21588
21612
  }
21589
21613
  });
@@ -21594,6 +21618,14 @@
21594
21618
  index: Number,
21595
21619
  item: Object,
21596
21620
  cellProps: [Object, Function],
21621
+ collapseIcon: {
21622
+ type: IconValue,
21623
+ default: '$collapse'
21624
+ },
21625
+ expandIcon: {
21626
+ type: IconValue,
21627
+ default: '$expand'
21628
+ },
21597
21629
  onClick: EventProp(),
21598
21630
  onContextmenu: EventProp(),
21599
21631
  onDblclick: EventProp(),
@@ -21674,8 +21706,11 @@
21674
21706
  internalItem: slotProps.internalItem,
21675
21707
  value: slotProps.value
21676
21708
  }) : column.cellProps;
21709
+ const noPadding = column.key === 'data-table-select' || column.key === 'data-table-expand';
21710
+ const isEmpty = column.key === 'data-table-group' && column.width === 0 && !column.title;
21677
21711
  return vue.createVNode(VDataTableColumn, vue.mergeProps({
21678
21712
  "align": column.align,
21713
+ "indent": column.intent,
21679
21714
  "class": {
21680
21715
  'v-data-table__td--expanded-row': column.key === 'data-table-expand',
21681
21716
  'v-data-table__td--select-row': column.key === 'data-table-select'
@@ -21686,7 +21721,8 @@
21686
21721
  "lastFixed": column.lastFixed,
21687
21722
  "firstFixedEnd": column.firstFixedEnd,
21688
21723
  "maxWidth": !mobile.value ? column.maxWidth : undefined,
21689
- "noPadding": column.key === 'data-table-select' || column.key === 'data-table-expand',
21724
+ "noPadding": noPadding,
21725
+ "empty": isEmpty,
21690
21726
  "nowrap": column.nowrap,
21691
21727
  "width": !mobile.value ? column.width : undefined
21692
21728
  }, cellProps, columnCellProps), {
@@ -21709,13 +21745,13 @@
21709
21745
  return slots['item.data-table-expand']?.({
21710
21746
  ...slotProps,
21711
21747
  props: {
21712
- icon: isExpanded(item) ? '$collapse' : '$expand',
21748
+ icon: isExpanded(item) ? props.collapseIcon : props.expandIcon,
21713
21749
  size: 'small',
21714
21750
  variant: 'text',
21715
21751
  onClick: vue.withModifiers(() => toggleExpand(item), ['stop'])
21716
21752
  }
21717
21753
  }) ?? vue.createVNode(VBtn, {
21718
- "icon": isExpanded(item) ? '$collapse' : '$expand',
21754
+ "icon": isExpanded(item) ? props.collapseIcon : props.expandIcon,
21719
21755
  "size": "small",
21720
21756
  "variant": "text",
21721
21757
  "onClick": vue.withModifiers(() => toggleExpand(item), ['stop'])
@@ -21753,6 +21789,8 @@
21753
21789
  },
21754
21790
  rowProps: [Object, Function],
21755
21791
  cellProps: [Object, Function],
21792
+ ...pick(makeVDataTableRowProps(), ['collapseIcon', 'expandIcon']),
21793
+ ...pick(makeVDataTableGroupHeaderRowProps(), ['groupCollapseIcon', 'groupExpandIcon']),
21756
21794
  ...makeDisplayProps()
21757
21795
  }, 'VDataTableRows');
21758
21796
  const VDataTableRows = genericComponent()({
@@ -21787,6 +21825,7 @@
21787
21825
  mobile
21788
21826
  } = useDisplay(props);
21789
21827
  useRender(() => {
21828
+ const groupHeaderRowProps = pick(props, ['groupCollapseIcon', 'groupExpandIcon']);
21790
21829
  if (props.loading && (!props.items.length || slots.loading)) {
21791
21830
  return vue.createElementVNode("tr", {
21792
21831
  "class": "v-data-table-rows-loading",
@@ -21819,7 +21858,7 @@
21819
21858
  return slots['group-header'] ? slots['group-header'](slotProps) : vue.createVNode(VDataTableGroupHeaderRow, vue.mergeProps({
21820
21859
  "key": `group-header_${item.id}`,
21821
21860
  "item": item
21822
- }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21861
+ }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps), groupHeaderRowProps), slots);
21823
21862
  }
21824
21863
  const slotProps = {
21825
21864
  index,
@@ -21841,6 +21880,8 @@
21841
21880
  index,
21842
21881
  item,
21843
21882
  cellProps: props.cellProps,
21883
+ collapseIcon: props.collapseIcon,
21884
+ expandIcon: props.expandIcon,
21844
21885
  mobile: mobile.value
21845
21886
  }, getPrefixedEventHandlers(attrs, ':row', () => slotProps), typeof props.rowProps === 'function' ? props.rowProps({
21846
21887
  item: slotProps.item,
@@ -24498,6 +24539,10 @@
24498
24539
  return typeof v === 'boolean' || [1000, 1024].includes(Number(v));
24499
24540
  }
24500
24541
  },
24542
+ truncateLength: {
24543
+ type: [Number, String],
24544
+ default: 22
24545
+ },
24501
24546
  ...makeVInputProps({
24502
24547
  prependIcon: '$file'
24503
24548
  }),
@@ -24555,7 +24600,8 @@
24555
24600
  name = '',
24556
24601
  size = 0
24557
24602
  } = file;
24558
- return !props.showSize ? name : `${name} (${humanReadableFileSize(size, base.value)})`;
24603
+ const truncatedText = truncateText(name);
24604
+ return !props.showSize ? truncatedText : `${truncatedText} (${humanReadableFileSize(size, base.value)})`;
24559
24605
  }));
24560
24606
  const counterValue = vue.computed(() => {
24561
24607
  const fileCount = model.value?.length ?? 0;
@@ -24595,6 +24641,11 @@
24595
24641
  callEvent(props['onClick:clear'], e);
24596
24642
  });
24597
24643
  }
24644
+ function truncateText(str) {
24645
+ if (str.length < Number(props.truncateLength)) return str;
24646
+ const charsKeepOneSide = Math.floor((Number(props.truncateLength) - 1) / 2);
24647
+ return `${str.slice(0, charsKeepOneSide)}…${str.slice(str.length - charsKeepOneSide)}`;
24648
+ }
24598
24649
  function onDragover(e) {
24599
24650
  e.preventDefault();
24600
24651
  e.stopImmediatePropagation();
@@ -27454,9 +27505,11 @@
27454
27505
  }, 'VSkeletonLoader');
27455
27506
  const VSkeletonLoader = genericComponent()({
27456
27507
  name: 'VSkeletonLoader',
27508
+ inheritAttrs: false,
27457
27509
  props: makeVSkeletonLoaderProps(),
27458
27510
  setup(props, _ref) {
27459
27511
  let {
27512
+ attrs,
27460
27513
  slots
27461
27514
  } = _ref;
27462
27515
  const {
@@ -27483,12 +27536,12 @@
27483
27536
  ariaLabel: t(props.loadingText),
27484
27537
  role: 'alert'
27485
27538
  };
27486
- return vue.createElementVNode("div", vue.mergeProps({
27539
+ return vue.createElementVNode(vue.Fragment, null, [isLoading ? vue.createElementVNode("div", vue.mergeProps({
27487
27540
  "class": ['v-skeleton-loader', {
27488
27541
  'v-skeleton-loader--boilerplate': props.boilerplate
27489
27542
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
27490
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}]
27491
- }, loadingProps), [isLoading ? items.value : slots.default?.()]);
27543
+ "style": [backgroundColorStyles.value, dimensionStyles.value]
27544
+ }, loadingProps, attrs), [items.value]) : slots.default?.()]);
27492
27545
  });
27493
27546
  return {};
27494
27547
  }
@@ -35577,7 +35630,7 @@
35577
35630
  };
35578
35631
  });
35579
35632
  }
35580
- const version$1 = "3.9.3-dev.2025-07-31";
35633
+ const version$1 = "3.9.3-dev.2025-08-02";
35581
35634
  createVuetify$1.version = version$1;
35582
35635
 
35583
35636
  // Vue's inject() can only be used in setup
@@ -35875,7 +35928,7 @@
35875
35928
 
35876
35929
  /* eslint-disable local-rules/sort-imports */
35877
35930
 
35878
- const version = "3.9.3-dev.2025-07-31";
35931
+ const version = "3.9.3-dev.2025-08-02";
35879
35932
 
35880
35933
  /* eslint-disable local-rules/sort-imports */
35881
35934