@vuetify/nightly 3.9.3-master.2025-07-30 → 3.9.3-master.2025-07-31

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 (217) hide show
  1. package/CHANGELOG.md +22 -3
  2. package/dist/json/attributes.json +3339 -3327
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +160 -160
  5. package/dist/json/tags.json +4 -1
  6. package/dist/json/web-types.json +6197 -6075
  7. package/dist/vuetify-labs.cjs +161 -73
  8. package/dist/vuetify-labs.css +5656 -5635
  9. package/dist/vuetify-labs.d.ts +207 -143
  10. package/dist/vuetify-labs.esm.js +161 -73
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +161 -73
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +139 -66
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +4033 -4027
  17. package/dist/vuetify.d.ts +95 -71
  18. package/dist/vuetify.esm.js +139 -66
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +139 -66
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +226 -226
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VColorPicker/VColorPickerEdit.css +5 -0
  26. package/lib/components/VColorPicker/VColorPickerEdit.js +8 -1
  27. package/lib/components/VColorPicker/VColorPickerEdit.js.map +1 -1
  28. package/lib/components/VColorPicker/VColorPickerEdit.sass +5 -0
  29. package/lib/components/VColorPicker/VColorPickerPreview.js +8 -1
  30. package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
  31. package/lib/components/VColorPicker/util/index.d.ts +1 -0
  32. package/lib/components/VColorPicker/util/index.js +20 -10
  33. package/lib/components/VColorPicker/util/index.js.map +1 -1
  34. package/lib/components/VConfirmEdit/VConfirmEdit.js +1 -1
  35. package/lib/components/VConfirmEdit/VConfirmEdit.js.map +1 -1
  36. package/lib/components/VDataIterator/VDataIterator.d.ts +2 -2
  37. package/lib/components/VDataIterator/VDataIterator.js +1 -1
  38. package/lib/components/VDataIterator/VDataIterator.js.map +1 -1
  39. package/lib/components/VDataTable/VDataTable.css +2 -1
  40. package/lib/components/VDataTable/VDataTable.d.ts +6 -4
  41. package/lib/components/VDataTable/VDataTable.js +1 -1
  42. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  43. package/lib/components/VDataTable/VDataTable.sass +2 -1
  44. package/lib/components/VDataTable/VDataTableRows.d.ts +14 -11
  45. package/lib/components/VDataTable/VDataTableRows.js +9 -0
  46. package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
  47. package/lib/components/VDataTable/VDataTableServer.d.ts +4 -2
  48. package/lib/components/VDataTable/VDataTableServer.js +1 -1
  49. package/lib/components/VDataTable/VDataTableServer.js.map +1 -1
  50. package/lib/components/VDataTable/VDataTableVirtual.d.ts +4 -2
  51. package/lib/components/VDataTable/VDataTableVirtual.js +1 -1
  52. package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
  53. package/lib/components/VDataTable/composables/group.d.ts +13 -5
  54. package/lib/components/VDataTable/composables/group.js +11 -5
  55. package/lib/components/VDataTable/composables/group.js.map +1 -1
  56. package/lib/components/VDataTable/composables/headers.js +53 -42
  57. package/lib/components/VDataTable/composables/headers.js.map +1 -1
  58. package/lib/components/VDataTable/composables/paginate.d.ts +3 -3
  59. package/lib/components/VDataTable/composables/paginate.js.map +1 -1
  60. package/lib/components/VDataTable/composables/sort.js +1 -1
  61. package/lib/components/VDataTable/composables/sort.js.map +1 -1
  62. package/lib/components/VDataTable/types.d.ts +7 -1
  63. package/lib/components/VDataTable/types.js.map +1 -1
  64. package/lib/components/VNumberInput/VNumberInput.js +1 -0
  65. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  66. package/lib/components/VSlider/VSliderThumb.css +2 -2
  67. package/lib/components/VSlider/VSliderThumb.sass +2 -2
  68. package/lib/components/VTable/VTable.css +2 -2
  69. package/lib/components/VTable/VTable.sass +4 -4
  70. package/lib/components/VTreeview/VTreeviewChildren.d.ts +20 -2
  71. package/lib/components/VTreeview/VTreeviewChildren.js +7 -2
  72. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  73. package/lib/entry-bundler.js +1 -1
  74. package/lib/framework.d.ts +56 -56
  75. package/lib/framework.js +1 -1
  76. package/lib/labs/VColorInput/VColorInput.css +15 -0
  77. package/lib/labs/VColorInput/VColorInput.d.ts +287 -215
  78. package/lib/labs/VColorInput/VColorInput.js +23 -8
  79. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  80. package/lib/labs/VColorInput/VColorInput.sass +8 -0
  81. package/lib/labs/VColorInput/_variables.scss +2 -0
  82. package/lib/labs/VVideo/VVideoControls.js +1 -1
  83. package/lib/labs/VVideo/VVideoControls.js.map +1 -1
  84. package/lib/labs/VVideo/VVideoVolume.js +1 -1
  85. package/lib/labs/VVideo/VVideoVolume.js.map +1 -1
  86. package/lib/locale/af.d.ts +17 -0
  87. package/lib/locale/af.js +17 -0
  88. package/lib/locale/af.js.map +1 -1
  89. package/lib/locale/ar.d.ts +17 -0
  90. package/lib/locale/ar.js +17 -0
  91. package/lib/locale/ar.js.map +1 -1
  92. package/lib/locale/az.d.ts +17 -0
  93. package/lib/locale/az.js +17 -0
  94. package/lib/locale/az.js.map +1 -1
  95. package/lib/locale/bg.d.ts +17 -0
  96. package/lib/locale/bg.js +17 -0
  97. package/lib/locale/bg.js.map +1 -1
  98. package/lib/locale/ca.d.ts +17 -0
  99. package/lib/locale/ca.js +17 -0
  100. package/lib/locale/ca.js.map +1 -1
  101. package/lib/locale/ckb.d.ts +17 -0
  102. package/lib/locale/ckb.js +17 -0
  103. package/lib/locale/ckb.js.map +1 -1
  104. package/lib/locale/cs.d.ts +17 -0
  105. package/lib/locale/cs.js +17 -0
  106. package/lib/locale/cs.js.map +1 -1
  107. package/lib/locale/da.d.ts +17 -0
  108. package/lib/locale/da.js +17 -0
  109. package/lib/locale/da.js.map +1 -1
  110. package/lib/locale/de.d.ts +17 -0
  111. package/lib/locale/de.js +17 -0
  112. package/lib/locale/de.js.map +1 -1
  113. package/lib/locale/el.d.ts +17 -0
  114. package/lib/locale/el.js +17 -0
  115. package/lib/locale/el.js.map +1 -1
  116. package/lib/locale/en.d.ts +17 -0
  117. package/lib/locale/en.js +17 -0
  118. package/lib/locale/en.js.map +1 -1
  119. package/lib/locale/es.d.ts +17 -0
  120. package/lib/locale/es.js +17 -0
  121. package/lib/locale/es.js.map +1 -1
  122. package/lib/locale/et.d.ts +17 -0
  123. package/lib/locale/et.js +17 -0
  124. package/lib/locale/et.js.map +1 -1
  125. package/lib/locale/fa.d.ts +17 -0
  126. package/lib/locale/fa.js +17 -0
  127. package/lib/locale/fa.js.map +1 -1
  128. package/lib/locale/fi.d.ts +17 -0
  129. package/lib/locale/fi.js +17 -0
  130. package/lib/locale/fi.js.map +1 -1
  131. package/lib/locale/fr.d.ts +17 -0
  132. package/lib/locale/fr.js +17 -0
  133. package/lib/locale/fr.js.map +1 -1
  134. package/lib/locale/he.d.ts +17 -0
  135. package/lib/locale/he.js +17 -0
  136. package/lib/locale/he.js.map +1 -1
  137. package/lib/locale/hr.d.ts +17 -0
  138. package/lib/locale/hr.js +17 -0
  139. package/lib/locale/hr.js.map +1 -1
  140. package/lib/locale/hu.d.ts +17 -0
  141. package/lib/locale/hu.js +17 -0
  142. package/lib/locale/hu.js.map +1 -1
  143. package/lib/locale/id.d.ts +17 -0
  144. package/lib/locale/id.js +17 -0
  145. package/lib/locale/id.js.map +1 -1
  146. package/lib/locale/it.d.ts +17 -0
  147. package/lib/locale/it.js +17 -0
  148. package/lib/locale/it.js.map +1 -1
  149. package/lib/locale/ja.d.ts +17 -0
  150. package/lib/locale/ja.js +17 -0
  151. package/lib/locale/ja.js.map +1 -1
  152. package/lib/locale/km.d.ts +17 -0
  153. package/lib/locale/km.js +17 -0
  154. package/lib/locale/km.js.map +1 -1
  155. package/lib/locale/ko.d.ts +17 -0
  156. package/lib/locale/ko.js +17 -0
  157. package/lib/locale/ko.js.map +1 -1
  158. package/lib/locale/lt.d.ts +17 -0
  159. package/lib/locale/lt.js +17 -0
  160. package/lib/locale/lt.js.map +1 -1
  161. package/lib/locale/lv.d.ts +17 -0
  162. package/lib/locale/lv.js +17 -0
  163. package/lib/locale/lv.js.map +1 -1
  164. package/lib/locale/nl.d.ts +17 -0
  165. package/lib/locale/nl.js +17 -0
  166. package/lib/locale/nl.js.map +1 -1
  167. package/lib/locale/no.d.ts +17 -0
  168. package/lib/locale/no.js +17 -0
  169. package/lib/locale/no.js.map +1 -1
  170. package/lib/locale/pl.d.ts +17 -0
  171. package/lib/locale/pl.js +17 -0
  172. package/lib/locale/pl.js.map +1 -1
  173. package/lib/locale/pt.d.ts +17 -0
  174. package/lib/locale/pt.js +17 -0
  175. package/lib/locale/pt.js.map +1 -1
  176. package/lib/locale/ro.d.ts +17 -0
  177. package/lib/locale/ro.js +17 -0
  178. package/lib/locale/ro.js.map +1 -1
  179. package/lib/locale/ru.d.ts +17 -0
  180. package/lib/locale/ru.js +17 -0
  181. package/lib/locale/ru.js.map +1 -1
  182. package/lib/locale/sk.d.ts +17 -0
  183. package/lib/locale/sk.js +17 -0
  184. package/lib/locale/sk.js.map +1 -1
  185. package/lib/locale/sl.d.ts +17 -0
  186. package/lib/locale/sl.js +17 -0
  187. package/lib/locale/sl.js.map +1 -1
  188. package/lib/locale/sr-Cyrl.d.ts +17 -0
  189. package/lib/locale/sr-Cyrl.js +17 -0
  190. package/lib/locale/sr-Cyrl.js.map +1 -1
  191. package/lib/locale/sr-Latn.d.ts +17 -0
  192. package/lib/locale/sr-Latn.js +17 -0
  193. package/lib/locale/sr-Latn.js.map +1 -1
  194. package/lib/locale/sv.d.ts +17 -0
  195. package/lib/locale/sv.js +17 -0
  196. package/lib/locale/sv.js.map +1 -1
  197. package/lib/locale/th.d.ts +17 -0
  198. package/lib/locale/th.js +17 -0
  199. package/lib/locale/th.js.map +1 -1
  200. package/lib/locale/tr.d.ts +17 -0
  201. package/lib/locale/tr.js +17 -0
  202. package/lib/locale/tr.js.map +1 -1
  203. package/lib/locale/uk.d.ts +17 -0
  204. package/lib/locale/uk.js +17 -0
  205. package/lib/locale/uk.js.map +1 -1
  206. package/lib/locale/vi.d.ts +17 -0
  207. package/lib/locale/vi.js +17 -0
  208. package/lib/locale/vi.js.map +1 -1
  209. package/lib/locale/zh-Hans.d.ts +17 -0
  210. package/lib/locale/zh-Hans.js +17 -0
  211. package/lib/locale/zh-Hans.js.map +1 -1
  212. package/lib/locale/zh-Hant.d.ts +17 -0
  213. package/lib/locale/zh-Hant.js +17 -0
  214. package/lib/locale/zh-Hant.js.map +1 -1
  215. package/lib/util/getScrollParent.js +3 -1
  216. package/lib/util/getScrollParent.js.map +1 -1
  217. package/package.json +1 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.3-master.2025-07-30
2
+ * Vuetify v3.9.3-master.2025-07-31
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1613,7 +1613,9 @@
1613
1613
  function hasScrollbar(el) {
1614
1614
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
1615
1615
  const style = window.getComputedStyle(el);
1616
- return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1616
+ const hasVerticalScrollbar = style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1617
+ const hasHorizontalScrollbar = style.overflowX === 'scroll' || style.overflowX === 'auto' && el.scrollWidth > el.clientWidth;
1618
+ return hasVerticalScrollbar || hasHorizontalScrollbar;
1617
1619
  }
1618
1620
  function isPotentiallyScrollable(el) {
1619
1621
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
@@ -2725,6 +2727,23 @@
2725
2727
  unmute: 'Unmute',
2726
2728
  enterFullscreen: 'Full screen',
2727
2729
  exitFullscreen: 'Exit full screen'
2730
+ },
2731
+ colorPicker: {
2732
+ ariaLabel: {
2733
+ eyedropper: 'Select color with eyedropper',
2734
+ hueSlider: 'Hue',
2735
+ alphaSlider: 'Alpha',
2736
+ redInput: 'Red value',
2737
+ greenInput: 'Green value',
2738
+ blueInput: 'Blue value',
2739
+ alphaInput: 'Alpha value',
2740
+ hueInput: 'Hue value',
2741
+ saturationInput: 'Saturation value',
2742
+ lightnessInput: 'Lightness value',
2743
+ hexInput: 'HEX value',
2744
+ hexaInput: 'HEX with alpha value',
2745
+ changeFormat: 'Change color format'
2746
+ }
2728
2747
  }
2729
2748
  };
2730
2749
 
@@ -16222,7 +16241,8 @@
16222
16241
  getColor: (c, v) => ({
16223
16242
  ...c,
16224
16243
  r: Number(v)
16225
- })
16244
+ }),
16245
+ localeKey: 'redInput'
16226
16246
  }, {
16227
16247
  label: 'G',
16228
16248
  max: 255,
@@ -16231,7 +16251,8 @@
16231
16251
  getColor: (c, v) => ({
16232
16252
  ...c,
16233
16253
  g: Number(v)
16234
- })
16254
+ }),
16255
+ localeKey: 'greenInput'
16235
16256
  }, {
16236
16257
  label: 'B',
16237
16258
  max: 255,
@@ -16240,7 +16261,8 @@
16240
16261
  getColor: (c, v) => ({
16241
16262
  ...c,
16242
16263
  b: Number(v)
16243
- })
16264
+ }),
16265
+ localeKey: 'blueInput'
16244
16266
  }, {
16245
16267
  label: 'A',
16246
16268
  max: 1,
@@ -16254,7 +16276,8 @@
16254
16276
  getColor: (c, v) => ({
16255
16277
  ...c,
16256
16278
  a: Number(v)
16257
- })
16279
+ }),
16280
+ localeKey: 'alphaInput'
16258
16281
  }],
16259
16282
  to: HSVtoRGB,
16260
16283
  from: RGBtoHSV
@@ -16276,7 +16299,8 @@
16276
16299
  getColor: (c, v) => ({
16277
16300
  ...c,
16278
16301
  h: Number(v)
16279
- })
16302
+ }),
16303
+ localeKey: 'hueInput'
16280
16304
  }, {
16281
16305
  label: 'S',
16282
16306
  max: 1,
@@ -16285,7 +16309,8 @@
16285
16309
  getColor: (c, v) => ({
16286
16310
  ...c,
16287
16311
  s: Number(v)
16288
- })
16312
+ }),
16313
+ localeKey: 'saturationInput'
16289
16314
  }, {
16290
16315
  label: 'L',
16291
16316
  max: 1,
@@ -16294,7 +16319,8 @@
16294
16319
  getColor: (c, v) => ({
16295
16320
  ...c,
16296
16321
  l: Number(v)
16297
- })
16322
+ }),
16323
+ localeKey: 'lightnessInput'
16298
16324
  }, {
16299
16325
  label: 'A',
16300
16326
  max: 1,
@@ -16308,7 +16334,8 @@
16308
16334
  getColor: (c, v) => ({
16309
16335
  ...c,
16310
16336
  a: Number(v)
16311
- })
16337
+ }),
16338
+ localeKey: 'alphaInput'
16312
16339
  }],
16313
16340
  to: HSVtoHSL,
16314
16341
  from: HSLtoHSV
@@ -16324,7 +16351,8 @@
16324
16351
  inputs: [{
16325
16352
  label: 'HEXA',
16326
16353
  getValue: c => c,
16327
- getColor: (c, v) => v
16354
+ getColor: (c, v) => v,
16355
+ localeKey: 'hexaInput'
16328
16356
  }],
16329
16357
  to: HSVtoHex,
16330
16358
  from: HexToHSV
@@ -16334,7 +16362,8 @@
16334
16362
  inputs: [{
16335
16363
  label: 'HEX',
16336
16364
  getValue: c => c.slice(0, 7),
16337
- getColor: (c, v) => v
16365
+ getColor: (c, v) => v,
16366
+ localeKey: 'hexInput'
16338
16367
  }]
16339
16368
  };
16340
16369
  const modes = {
@@ -16383,6 +16412,9 @@
16383
16412
  let {
16384
16413
  emit
16385
16414
  } = _ref2;
16415
+ const {
16416
+ t
16417
+ } = useLocale();
16386
16418
  const enabledModes = vue.computed(() => {
16387
16419
  return props.modes.map(key => ({
16388
16420
  ...modes[key],
@@ -16397,11 +16429,13 @@
16397
16429
  let {
16398
16430
  getValue,
16399
16431
  getColor,
16432
+ localeKey,
16400
16433
  ...inputProps
16401
16434
  } = _ref3;
16402
16435
  return {
16403
16436
  ...mode.inputProps,
16404
16437
  ...inputProps,
16438
+ ariaLabel: t(`$vuetify.colorPicker.ariaLabel.${localeKey}`),
16405
16439
  disabled: props.disabled,
16406
16440
  value: color && getValue(color),
16407
16441
  onChange: e => {
@@ -16419,6 +16453,7 @@
16419
16453
  "icon": "$unfold",
16420
16454
  "size": "x-small",
16421
16455
  "variant": "plain",
16456
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.changeFormat'),
16422
16457
  "onClick": () => {
16423
16458
  const mi = enabledModes.value.findIndex(m => m.name === props.mode);
16424
16459
  emit('update:mode', enabledModes.value[(mi + 1) % enabledModes.value.length].name);
@@ -17184,6 +17219,9 @@
17184
17219
  let {
17185
17220
  emit
17186
17221
  } = _ref;
17222
+ const {
17223
+ t
17224
+ } = useLocale();
17187
17225
  const abortController = new AbortController();
17188
17226
  vue.onUnmounted(() => abortController.abort());
17189
17227
  async function openEyeDropper() {
@@ -17209,6 +17247,7 @@
17209
17247
  "class": "v-color-picker-preview__eye-dropper",
17210
17248
  "key": "eyeDropper"
17211
17249
  }, [vue.createVNode(VBtn, {
17250
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.eyedropper'),
17212
17251
  "density": "comfortable",
17213
17252
  "disabled": props.disabled,
17214
17253
  "icon": "$eyeDropper",
@@ -17224,6 +17263,7 @@
17224
17263
  "class": "v-color-picker-preview__sliders"
17225
17264
  }, [vue.createVNode(VSlider, {
17226
17265
  "class": "v-color-picker-preview__track v-color-picker-preview__hue",
17266
+ "name": t('$vuetify.colorPicker.ariaLabel.hueSlider'),
17227
17267
  "modelValue": props.color?.h,
17228
17268
  "onUpdate:modelValue": h => emit('update:color', {
17229
17269
  ...(props.color ?? nullColor),
@@ -17239,6 +17279,7 @@
17239
17279
  "hideDetails": true
17240
17280
  }, null), !props.hideAlpha && vue.createVNode(VSlider, {
17241
17281
  "class": "v-color-picker-preview__track v-color-picker-preview__alpha",
17282
+ "name": t('$vuetify.colorPicker.ariaLabel.alphaSlider'),
17242
17283
  "modelValue": props.color?.a ?? 1,
17243
17284
  "onUpdate:modelValue": a => emit('update:color', {
17244
17285
  ...(props.color ?? nullColor),
@@ -19759,7 +19800,7 @@
19759
19800
  });
19760
19801
  return groups;
19761
19802
  }
19762
- function flattenItems(items, opened) {
19803
+ function flattenItems(items, opened, hasSummary) {
19763
19804
  const flatItems = [];
19764
19805
  for (const item of items) {
19765
19806
  // TODO: make this better
@@ -19768,7 +19809,13 @@
19768
19809
  flatItems.push(item);
19769
19810
  }
19770
19811
  if (opened.has(item.id) || item.value == null) {
19771
- flatItems.push(...flattenItems(item.items, opened));
19812
+ flatItems.push(...flattenItems(item.items, opened, hasSummary));
19813
+ if (hasSummary) {
19814
+ flatItems.push({
19815
+ ...item,
19816
+ type: 'group-summary'
19817
+ });
19818
+ }
19772
19819
  }
19773
19820
  } else {
19774
19821
  flatItems.push(item);
@@ -19776,11 +19823,11 @@
19776
19823
  }
19777
19824
  return flatItems;
19778
19825
  }
19779
- function useGroupedItems(items, groupBy, opened) {
19826
+ function useGroupedItems(items, groupBy, opened, hasSummary) {
19780
19827
  const flatItems = vue.computed(() => {
19781
19828
  if (!groupBy.value.length) return items.value;
19782
19829
  const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));
19783
- return flattenItems(groupedItems, opened.value);
19830
+ return flattenItems(groupedItems, opened.value, vue.toValue(hasSummary));
19784
19831
  });
19785
19832
  return {
19786
19833
  flatItems
@@ -20398,7 +20445,7 @@
20398
20445
  });
20399
20446
  const {
20400
20447
  flatItems
20401
- } = useGroupedItems(sortedItems, groupBy, opened);
20448
+ } = useGroupedItems(sortedItems, groupBy, opened, false);
20402
20449
  const itemsLength = vue.toRef(() => flatItems.value.length);
20403
20450
  const {
20404
20451
  startIndex,
@@ -21103,11 +21150,16 @@
21103
21150
  if (item.fixed === true) {
21104
21151
  item.fixed = 'start';
21105
21152
  }
21106
- const orderedChildren = side === 'start' ? item.children?.toReversed() : item.children;
21107
21153
  if (item.fixed === side) {
21108
- if (orderedChildren) {
21109
- for (const child of orderedChildren) {
21110
- setFixed(child, side, side);
21154
+ if (item.children) {
21155
+ if (side === 'start') {
21156
+ for (let i = item.children.length - 1; i >= 0; i--) {
21157
+ setFixed(item.children[i], side, side);
21158
+ }
21159
+ } else {
21160
+ for (let i = 0; i < item.children.length; i++) {
21161
+ setFixed(item.children[i], side, side);
21162
+ }
21111
21163
  }
21112
21164
  } else {
21113
21165
  if (!seenFixed && side === 'start') {
@@ -21122,57 +21174,63 @@
21122
21174
  seenFixed = true;
21123
21175
  }
21124
21176
  } else {
21125
- if (orderedChildren) {
21126
- for (const child of orderedChildren) {
21127
- setFixed(child, side);
21177
+ if (item.children) {
21178
+ if (side === 'start') {
21179
+ for (let i = item.children.length - 1; i >= 0; i--) {
21180
+ setFixed(item.children[i], side);
21181
+ }
21182
+ } else {
21183
+ for (let i = 0; i < item.children.length; i++) {
21184
+ setFixed(item.children[i], side);
21185
+ }
21128
21186
  }
21129
21187
  } else {
21130
21188
  seenFixed = false;
21131
21189
  }
21132
21190
  }
21133
21191
  }
21134
- for (const item of items.toReversed()) {
21135
- setFixed(item, 'start');
21192
+ for (let i = items.length - 1; i >= 0; i--) {
21193
+ setFixed(items[i], 'start');
21136
21194
  }
21137
- for (const item of items) {
21138
- setFixed(item, 'end');
21139
- }
21140
- function setFixedOffset(item) {
21141
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21142
- if (!item) return offset;
21143
- if (item.children) {
21144
- item.fixedOffset = offset;
21145
- for (const child of item.children) {
21146
- offset = setFixedOffset(child, offset);
21147
- }
21148
- } else if (item.fixed && item.fixed !== 'end') {
21149
- item.fixedOffset = offset;
21150
- offset += parseFloat(item.width || '0') || 0;
21151
- }
21152
- return offset;
21195
+ for (let i = 0; i < items.length; i++) {
21196
+ setFixed(items[i], 'end');
21153
21197
  }
21154
21198
  let fixedOffset = 0;
21155
- for (const item of items) {
21156
- fixedOffset = setFixedOffset(item, fixedOffset);
21199
+ for (let i = 0; i < items.length; i++) {
21200
+ fixedOffset = setFixedOffset(items[i], fixedOffset);
21157
21201
  }
21158
- function setFixedEndOffset(item) {
21159
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21160
- if (!item) return offset;
21161
- if (item.children) {
21162
- item.fixedEndOffset = offset;
21163
- for (const child of item.children) {
21164
- offset = setFixedEndOffset(child, offset);
21165
- }
21166
- } else if (item.fixed === 'end') {
21167
- item.fixedEndOffset = offset;
21168
- offset += parseFloat(item.width || '0') || 0;
21202
+ let fixedEndOffset = 0;
21203
+ for (let i = items.length - 1; i >= 0; i--) {
21204
+ fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);
21205
+ }
21206
+ }
21207
+ function setFixedOffset(item) {
21208
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21209
+ if (!item) return offset;
21210
+ if (item.children) {
21211
+ item.fixedOffset = offset;
21212
+ for (const child of item.children) {
21213
+ offset = setFixedOffset(child, offset);
21169
21214
  }
21170
- return offset;
21215
+ } else if (item.fixed && item.fixed !== 'end') {
21216
+ item.fixedOffset = offset;
21217
+ offset += parseFloat(item.width || '0') || 0;
21171
21218
  }
21172
- let fixedEndOffset = 0;
21173
- for (const item of items.toReversed()) {
21174
- fixedEndOffset = setFixedEndOffset(item, fixedEndOffset);
21219
+ return offset;
21220
+ }
21221
+ function setFixedEndOffset(item) {
21222
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21223
+ if (!item) return offset;
21224
+ if (item.children) {
21225
+ item.fixedEndOffset = offset;
21226
+ for (const child of item.children) {
21227
+ offset = setFixedEndOffset(child, offset);
21228
+ }
21229
+ } else if (item.fixed === 'end') {
21230
+ item.fixedEndOffset = offset;
21231
+ offset += parseFloat(item.width || '0') || 0;
21175
21232
  }
21233
+ return offset;
21176
21234
  }
21177
21235
  function parse(items, maxDepth) {
21178
21236
  const headers = [];
@@ -21838,6 +21896,15 @@
21838
21896
  "item": item
21839
21897
  }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21840
21898
  }
21899
+ if (item.type === 'group-summary') {
21900
+ const slotProps = {
21901
+ index,
21902
+ item,
21903
+ columns: columns.value,
21904
+ toggleGroup
21905
+ };
21906
+ return slots['group-summary']?.(slotProps) ?? '';
21907
+ }
21841
21908
  const slotProps = {
21842
21909
  index,
21843
21910
  item: item.raw,
@@ -22087,7 +22154,7 @@
22087
22154
  });
22088
22155
  const {
22089
22156
  flatItems
22090
- } = useGroupedItems(sortedItems, groupBy, opened);
22157
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22091
22158
  const itemsLength = vue.computed(() => flatItems.value.length);
22092
22159
  const {
22093
22160
  startIndex,
@@ -22275,7 +22342,7 @@
22275
22342
  });
22276
22343
  const {
22277
22344
  flatItems
22278
- } = useGroupedItems(sortedItems, groupBy, opened);
22345
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22279
22346
  const allItems = vue.computed(() => extractRows(flatItems.value));
22280
22347
  const {
22281
22348
  isSelected,
@@ -22504,7 +22571,7 @@
22504
22571
  });
22505
22572
  const {
22506
22573
  flatItems
22507
- } = useGroupedItems(items, groupBy, opened);
22574
+ } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);
22508
22575
  const {
22509
22576
  isSelected,
22510
22577
  select,
@@ -26257,6 +26324,7 @@
26257
26324
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
26258
26325
  if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
26259
26326
  e.preventDefault();
26327
+ e.stopPropagation();
26260
26328
  clampModel();
26261
26329
  // _model is controlled, so need to wait until props['modelValue'] is updated
26262
26330
  await vue.nextTick();
@@ -30777,14 +30845,19 @@
30777
30845
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30778
30846
  onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30779
30847
  };
30780
- return vue.createVNode(VTreeviewItem, vue.mergeProps({
30848
+ return renderSlot(slots.header, {
30849
+ props: listItemProps,
30850
+ item: item.raw,
30851
+ internalItem: item,
30852
+ loading
30853
+ }, () => vue.createVNode(VTreeviewItem, vue.mergeProps({
30781
30854
  "ref": el => activatorItems.value[index] = el
30782
30855
  }, listItemProps, {
30783
30856
  "hideActions": props.hideActions,
30784
30857
  "indentLines": indentLines.node,
30785
30858
  "value": props.returnObject ? item.raw : itemProps.value,
30786
30859
  "loading": loading
30787
- }), slotsWithItem);
30860
+ }), slotsWithItem));
30788
30861
  },
30789
30862
  default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30790
30863
  "items": children,
@@ -31475,7 +31548,7 @@
31475
31548
  };
31476
31549
  });
31477
31550
  }
31478
- const version$1 = "3.9.3-master.2025-07-30";
31551
+ const version$1 = "3.9.3-master.2025-07-31";
31479
31552
  createVuetify$1.version = version$1;
31480
31553
 
31481
31554
  // Vue's inject() can only be used in setup
@@ -31500,7 +31573,7 @@
31500
31573
  ...options
31501
31574
  });
31502
31575
  };
31503
- const version = "3.9.3-master.2025-07-30";
31576
+ const version = "3.9.3-master.2025-07-31";
31504
31577
  createVuetify.version = version;
31505
31578
 
31506
31579
  exports.blueprints = index;