@vuetify/nightly 3.9.3-master.2025-07-30 → 3.9.3-master.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 (222) hide show
  1. package/CHANGELOG.md +27 -3
  2. package/dist/json/attributes.json +2099 -2091
  3. package/dist/json/importMap-labs.json +26 -26
  4. package/dist/json/importMap.json +154 -154
  5. package/dist/json/tags.json +4 -2
  6. package/dist/json/web-types.json +3784 -3672
  7. package/dist/vuetify-labs.cjs +193 -96
  8. package/dist/vuetify-labs.css +5517 -5496
  9. package/dist/vuetify-labs.d.ts +211 -161
  10. package/dist/vuetify-labs.esm.js +193 -96
  11. package/dist/vuetify-labs.esm.js.map +1 -1
  12. package/dist/vuetify-labs.js +193 -96
  13. package/dist/vuetify-labs.min.css +2 -2
  14. package/dist/vuetify.cjs +171 -89
  15. package/dist/vuetify.cjs.map +1 -1
  16. package/dist/vuetify.css +2952 -2946
  17. package/dist/vuetify.d.ts +99 -89
  18. package/dist/vuetify.esm.js +171 -89
  19. package/dist/vuetify.esm.js.map +1 -1
  20. package/dist/vuetify.js +171 -89
  21. package/dist/vuetify.js.map +1 -1
  22. package/dist/vuetify.min.css +2 -2
  23. package/dist/vuetify.min.js +228 -227
  24. package/dist/vuetify.min.js.map +1 -1
  25. package/lib/components/VApp/VApp.d.ts +0 -25
  26. package/lib/components/VApp/VApp.js +3 -3
  27. package/lib/components/VApp/VApp.js.map +1 -1
  28. package/lib/components/VColorPicker/VColorPickerEdit.css +5 -0
  29. package/lib/components/VColorPicker/VColorPickerEdit.js +8 -1
  30. package/lib/components/VColorPicker/VColorPickerEdit.js.map +1 -1
  31. package/lib/components/VColorPicker/VColorPickerEdit.sass +5 -0
  32. package/lib/components/VColorPicker/VColorPickerPreview.js +8 -1
  33. package/lib/components/VColorPicker/VColorPickerPreview.js.map +1 -1
  34. package/lib/components/VColorPicker/util/index.d.ts +1 -0
  35. package/lib/components/VColorPicker/util/index.js +20 -10
  36. package/lib/components/VColorPicker/util/index.js.map +1 -1
  37. package/lib/components/VConfirmEdit/VConfirmEdit.js +1 -1
  38. package/lib/components/VConfirmEdit/VConfirmEdit.js.map +1 -1
  39. package/lib/components/VDataIterator/VDataIterator.d.ts +2 -2
  40. package/lib/components/VDataIterator/VDataIterator.js +1 -1
  41. package/lib/components/VDataIterator/VDataIterator.js.map +1 -1
  42. package/lib/components/VDataTable/VDataTable.css +2 -1
  43. package/lib/components/VDataTable/VDataTable.d.ts +6 -4
  44. package/lib/components/VDataTable/VDataTable.js +1 -1
  45. package/lib/components/VDataTable/VDataTable.js.map +1 -1
  46. package/lib/components/VDataTable/VDataTable.sass +2 -1
  47. package/lib/components/VDataTable/VDataTableRows.d.ts +14 -11
  48. package/lib/components/VDataTable/VDataTableRows.js +9 -0
  49. package/lib/components/VDataTable/VDataTableRows.js.map +1 -1
  50. package/lib/components/VDataTable/VDataTableServer.d.ts +4 -2
  51. package/lib/components/VDataTable/VDataTableServer.js +1 -1
  52. package/lib/components/VDataTable/VDataTableServer.js.map +1 -1
  53. package/lib/components/VDataTable/VDataTableVirtual.d.ts +4 -2
  54. package/lib/components/VDataTable/VDataTableVirtual.js +1 -1
  55. package/lib/components/VDataTable/VDataTableVirtual.js.map +1 -1
  56. package/lib/components/VDataTable/composables/group.d.ts +13 -5
  57. package/lib/components/VDataTable/composables/group.js +11 -5
  58. package/lib/components/VDataTable/composables/group.js.map +1 -1
  59. package/lib/components/VDataTable/composables/headers.js +53 -42
  60. package/lib/components/VDataTable/composables/headers.js.map +1 -1
  61. package/lib/components/VDataTable/composables/paginate.d.ts +3 -3
  62. package/lib/components/VDataTable/composables/paginate.js.map +1 -1
  63. package/lib/components/VDataTable/composables/sort.js +1 -1
  64. package/lib/components/VDataTable/composables/sort.js.map +1 -1
  65. package/lib/components/VDataTable/types.d.ts +7 -1
  66. package/lib/components/VDataTable/types.js.map +1 -1
  67. package/lib/components/VNumberInput/VNumberInput.js +1 -0
  68. package/lib/components/VNumberInput/VNumberInput.js.map +1 -1
  69. package/lib/components/VSlider/VSliderThumb.css +2 -2
  70. package/lib/components/VSlider/VSliderThumb.sass +2 -2
  71. package/lib/components/VTable/VTable.css +2 -2
  72. package/lib/components/VTable/VTable.js +32 -20
  73. package/lib/components/VTable/VTable.js.map +1 -1
  74. package/lib/components/VTable/VTable.sass +4 -4
  75. package/lib/components/VTreeview/VTreeviewChildren.d.ts +20 -2
  76. package/lib/components/VTreeview/VTreeviewChildren.js +7 -2
  77. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  78. package/lib/entry-bundler.js +1 -1
  79. package/lib/framework.d.ts +60 -60
  80. package/lib/framework.js +1 -1
  81. package/lib/labs/VColorInput/VColorInput.css +15 -0
  82. package/lib/labs/VColorInput/VColorInput.d.ts +287 -215
  83. package/lib/labs/VColorInput/VColorInput.js +23 -8
  84. package/lib/labs/VColorInput/VColorInput.js.map +1 -1
  85. package/lib/labs/VColorInput/VColorInput.sass +8 -0
  86. package/lib/labs/VColorInput/_variables.scss +2 -0
  87. package/lib/labs/VVideo/VVideoControls.js +1 -1
  88. package/lib/labs/VVideo/VVideoControls.js.map +1 -1
  89. package/lib/labs/VVideo/VVideoVolume.js +1 -1
  90. package/lib/labs/VVideo/VVideoVolume.js.map +1 -1
  91. package/lib/locale/af.d.ts +17 -0
  92. package/lib/locale/af.js +17 -0
  93. package/lib/locale/af.js.map +1 -1
  94. package/lib/locale/ar.d.ts +17 -0
  95. package/lib/locale/ar.js +17 -0
  96. package/lib/locale/ar.js.map +1 -1
  97. package/lib/locale/az.d.ts +17 -0
  98. package/lib/locale/az.js +17 -0
  99. package/lib/locale/az.js.map +1 -1
  100. package/lib/locale/bg.d.ts +17 -0
  101. package/lib/locale/bg.js +17 -0
  102. package/lib/locale/bg.js.map +1 -1
  103. package/lib/locale/ca.d.ts +17 -0
  104. package/lib/locale/ca.js +17 -0
  105. package/lib/locale/ca.js.map +1 -1
  106. package/lib/locale/ckb.d.ts +17 -0
  107. package/lib/locale/ckb.js +17 -0
  108. package/lib/locale/ckb.js.map +1 -1
  109. package/lib/locale/cs.d.ts +17 -0
  110. package/lib/locale/cs.js +17 -0
  111. package/lib/locale/cs.js.map +1 -1
  112. package/lib/locale/da.d.ts +17 -0
  113. package/lib/locale/da.js +17 -0
  114. package/lib/locale/da.js.map +1 -1
  115. package/lib/locale/de.d.ts +17 -0
  116. package/lib/locale/de.js +17 -0
  117. package/lib/locale/de.js.map +1 -1
  118. package/lib/locale/el.d.ts +17 -0
  119. package/lib/locale/el.js +17 -0
  120. package/lib/locale/el.js.map +1 -1
  121. package/lib/locale/en.d.ts +17 -0
  122. package/lib/locale/en.js +17 -0
  123. package/lib/locale/en.js.map +1 -1
  124. package/lib/locale/es.d.ts +17 -0
  125. package/lib/locale/es.js +17 -0
  126. package/lib/locale/es.js.map +1 -1
  127. package/lib/locale/et.d.ts +17 -0
  128. package/lib/locale/et.js +17 -0
  129. package/lib/locale/et.js.map +1 -1
  130. package/lib/locale/fa.d.ts +17 -0
  131. package/lib/locale/fa.js +17 -0
  132. package/lib/locale/fa.js.map +1 -1
  133. package/lib/locale/fi.d.ts +17 -0
  134. package/lib/locale/fi.js +17 -0
  135. package/lib/locale/fi.js.map +1 -1
  136. package/lib/locale/fr.d.ts +17 -0
  137. package/lib/locale/fr.js +17 -0
  138. package/lib/locale/fr.js.map +1 -1
  139. package/lib/locale/he.d.ts +17 -0
  140. package/lib/locale/he.js +17 -0
  141. package/lib/locale/he.js.map +1 -1
  142. package/lib/locale/hr.d.ts +17 -0
  143. package/lib/locale/hr.js +17 -0
  144. package/lib/locale/hr.js.map +1 -1
  145. package/lib/locale/hu.d.ts +17 -0
  146. package/lib/locale/hu.js +17 -0
  147. package/lib/locale/hu.js.map +1 -1
  148. package/lib/locale/id.d.ts +17 -0
  149. package/lib/locale/id.js +17 -0
  150. package/lib/locale/id.js.map +1 -1
  151. package/lib/locale/it.d.ts +17 -0
  152. package/lib/locale/it.js +17 -0
  153. package/lib/locale/it.js.map +1 -1
  154. package/lib/locale/ja.d.ts +17 -0
  155. package/lib/locale/ja.js +17 -0
  156. package/lib/locale/ja.js.map +1 -1
  157. package/lib/locale/km.d.ts +17 -0
  158. package/lib/locale/km.js +17 -0
  159. package/lib/locale/km.js.map +1 -1
  160. package/lib/locale/ko.d.ts +17 -0
  161. package/lib/locale/ko.js +17 -0
  162. package/lib/locale/ko.js.map +1 -1
  163. package/lib/locale/lt.d.ts +17 -0
  164. package/lib/locale/lt.js +17 -0
  165. package/lib/locale/lt.js.map +1 -1
  166. package/lib/locale/lv.d.ts +17 -0
  167. package/lib/locale/lv.js +17 -0
  168. package/lib/locale/lv.js.map +1 -1
  169. package/lib/locale/nl.d.ts +17 -0
  170. package/lib/locale/nl.js +17 -0
  171. package/lib/locale/nl.js.map +1 -1
  172. package/lib/locale/no.d.ts +17 -0
  173. package/lib/locale/no.js +17 -0
  174. package/lib/locale/no.js.map +1 -1
  175. package/lib/locale/pl.d.ts +17 -0
  176. package/lib/locale/pl.js +17 -0
  177. package/lib/locale/pl.js.map +1 -1
  178. package/lib/locale/pt.d.ts +17 -0
  179. package/lib/locale/pt.js +17 -0
  180. package/lib/locale/pt.js.map +1 -1
  181. package/lib/locale/ro.d.ts +17 -0
  182. package/lib/locale/ro.js +17 -0
  183. package/lib/locale/ro.js.map +1 -1
  184. package/lib/locale/ru.d.ts +17 -0
  185. package/lib/locale/ru.js +17 -0
  186. package/lib/locale/ru.js.map +1 -1
  187. package/lib/locale/sk.d.ts +17 -0
  188. package/lib/locale/sk.js +17 -0
  189. package/lib/locale/sk.js.map +1 -1
  190. package/lib/locale/sl.d.ts +17 -0
  191. package/lib/locale/sl.js +17 -0
  192. package/lib/locale/sl.js.map +1 -1
  193. package/lib/locale/sr-Cyrl.d.ts +17 -0
  194. package/lib/locale/sr-Cyrl.js +17 -0
  195. package/lib/locale/sr-Cyrl.js.map +1 -1
  196. package/lib/locale/sr-Latn.d.ts +17 -0
  197. package/lib/locale/sr-Latn.js +17 -0
  198. package/lib/locale/sr-Latn.js.map +1 -1
  199. package/lib/locale/sv.d.ts +17 -0
  200. package/lib/locale/sv.js +17 -0
  201. package/lib/locale/sv.js.map +1 -1
  202. package/lib/locale/th.d.ts +17 -0
  203. package/lib/locale/th.js +17 -0
  204. package/lib/locale/th.js.map +1 -1
  205. package/lib/locale/tr.d.ts +17 -0
  206. package/lib/locale/tr.js +17 -0
  207. package/lib/locale/tr.js.map +1 -1
  208. package/lib/locale/uk.d.ts +17 -0
  209. package/lib/locale/uk.js +17 -0
  210. package/lib/locale/uk.js.map +1 -1
  211. package/lib/locale/vi.d.ts +17 -0
  212. package/lib/locale/vi.js +17 -0
  213. package/lib/locale/vi.js.map +1 -1
  214. package/lib/locale/zh-Hans.d.ts +17 -0
  215. package/lib/locale/zh-Hans.js +17 -0
  216. package/lib/locale/zh-Hans.js.map +1 -1
  217. package/lib/locale/zh-Hant.d.ts +17 -0
  218. package/lib/locale/zh-Hant.js +17 -0
  219. package/lib/locale/zh-Hant.js.map +1 -1
  220. package/lib/util/getScrollParent.js +3 -1
  221. package/lib/util/getScrollParent.js.map +1 -1
  222. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.9.3-master.2025-07-30
2
+ * Vuetify v3.9.3-master.2025-08-01
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1609,7 +1609,9 @@ function getScrollParents(el, stopAt) {
1609
1609
  function hasScrollbar(el) {
1610
1610
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
1611
1611
  const style = window.getComputedStyle(el);
1612
- return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1612
+ const hasVerticalScrollbar = style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1613
+ const hasHorizontalScrollbar = style.overflowX === 'scroll' || style.overflowX === 'auto' && el.scrollWidth > el.clientWidth;
1614
+ return hasVerticalScrollbar || hasHorizontalScrollbar;
1613
1615
  }
1614
1616
  function isPotentiallyScrollable(el) {
1615
1617
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
@@ -2721,6 +2723,23 @@ var en = {
2721
2723
  unmute: 'Unmute',
2722
2724
  enterFullscreen: 'Full screen',
2723
2725
  exitFullscreen: 'Exit full screen'
2726
+ },
2727
+ colorPicker: {
2728
+ ariaLabel: {
2729
+ eyedropper: 'Select color with eyedropper',
2730
+ hueSlider: 'Hue',
2731
+ alphaSlider: 'Alpha',
2732
+ redInput: 'Red value',
2733
+ greenInput: 'Green value',
2734
+ blueInput: 'Blue value',
2735
+ alphaInput: 'Alpha value',
2736
+ hueInput: 'Hue value',
2737
+ saturationInput: 'Saturation value',
2738
+ lightnessInput: 'Lightness value',
2739
+ hexInput: 'HEX value',
2740
+ hexaInput: 'HEX with alpha value',
2741
+ changeFormat: 'Change color format'
2742
+ }
2724
2743
  }
2725
2744
  };
2726
2745
 
@@ -3319,9 +3338,9 @@ function useTheme() {
3319
3338
 
3320
3339
  const makeVAppProps = propsFactory({
3321
3340
  ...makeComponentProps(),
3322
- ...makeLayoutProps({
3341
+ ...omit(makeLayoutProps({
3323
3342
  fullHeight: true
3324
- }),
3343
+ }), ['fullHeight']),
3325
3344
  ...makeThemeProps()
3326
3345
  }, 'VApp');
3327
3346
  const VApp = genericComponent()({
@@ -16218,7 +16237,8 @@ const rgba = {
16218
16237
  getColor: (c, v) => ({
16219
16238
  ...c,
16220
16239
  r: Number(v)
16221
- })
16240
+ }),
16241
+ localeKey: 'redInput'
16222
16242
  }, {
16223
16243
  label: 'G',
16224
16244
  max: 255,
@@ -16227,7 +16247,8 @@ const rgba = {
16227
16247
  getColor: (c, v) => ({
16228
16248
  ...c,
16229
16249
  g: Number(v)
16230
- })
16250
+ }),
16251
+ localeKey: 'greenInput'
16231
16252
  }, {
16232
16253
  label: 'B',
16233
16254
  max: 255,
@@ -16236,7 +16257,8 @@ const rgba = {
16236
16257
  getColor: (c, v) => ({
16237
16258
  ...c,
16238
16259
  b: Number(v)
16239
- })
16260
+ }),
16261
+ localeKey: 'blueInput'
16240
16262
  }, {
16241
16263
  label: 'A',
16242
16264
  max: 1,
@@ -16250,7 +16272,8 @@ const rgba = {
16250
16272
  getColor: (c, v) => ({
16251
16273
  ...c,
16252
16274
  a: Number(v)
16253
- })
16275
+ }),
16276
+ localeKey: 'alphaInput'
16254
16277
  }],
16255
16278
  to: HSVtoRGB,
16256
16279
  from: RGBtoHSV
@@ -16272,7 +16295,8 @@ const hsla = {
16272
16295
  getColor: (c, v) => ({
16273
16296
  ...c,
16274
16297
  h: Number(v)
16275
- })
16298
+ }),
16299
+ localeKey: 'hueInput'
16276
16300
  }, {
16277
16301
  label: 'S',
16278
16302
  max: 1,
@@ -16281,7 +16305,8 @@ const hsla = {
16281
16305
  getColor: (c, v) => ({
16282
16306
  ...c,
16283
16307
  s: Number(v)
16284
- })
16308
+ }),
16309
+ localeKey: 'saturationInput'
16285
16310
  }, {
16286
16311
  label: 'L',
16287
16312
  max: 1,
@@ -16290,7 +16315,8 @@ const hsla = {
16290
16315
  getColor: (c, v) => ({
16291
16316
  ...c,
16292
16317
  l: Number(v)
16293
- })
16318
+ }),
16319
+ localeKey: 'lightnessInput'
16294
16320
  }, {
16295
16321
  label: 'A',
16296
16322
  max: 1,
@@ -16304,7 +16330,8 @@ const hsla = {
16304
16330
  getColor: (c, v) => ({
16305
16331
  ...c,
16306
16332
  a: Number(v)
16307
- })
16333
+ }),
16334
+ localeKey: 'alphaInput'
16308
16335
  }],
16309
16336
  to: HSVtoHSL,
16310
16337
  from: HSLtoHSV
@@ -16320,7 +16347,8 @@ const hexa = {
16320
16347
  inputs: [{
16321
16348
  label: 'HEXA',
16322
16349
  getValue: c => c,
16323
- getColor: (c, v) => v
16350
+ getColor: (c, v) => v,
16351
+ localeKey: 'hexaInput'
16324
16352
  }],
16325
16353
  to: HSVtoHex,
16326
16354
  from: HexToHSV
@@ -16330,7 +16358,8 @@ const hex = {
16330
16358
  inputs: [{
16331
16359
  label: 'HEX',
16332
16360
  getValue: c => c.slice(0, 7),
16333
- getColor: (c, v) => v
16361
+ getColor: (c, v) => v,
16362
+ localeKey: 'hexInput'
16334
16363
  }]
16335
16364
  };
16336
16365
  const modes = {
@@ -16379,6 +16408,9 @@ const VColorPickerEdit = defineComponent({
16379
16408
  let {
16380
16409
  emit
16381
16410
  } = _ref2;
16411
+ const {
16412
+ t
16413
+ } = useLocale();
16382
16414
  const enabledModes = computed(() => {
16383
16415
  return props.modes.map(key => ({
16384
16416
  ...modes[key],
@@ -16393,11 +16425,13 @@ const VColorPickerEdit = defineComponent({
16393
16425
  let {
16394
16426
  getValue,
16395
16427
  getColor,
16428
+ localeKey,
16396
16429
  ...inputProps
16397
16430
  } = _ref3;
16398
16431
  return {
16399
16432
  ...mode.inputProps,
16400
16433
  ...inputProps,
16434
+ ariaLabel: t(`$vuetify.colorPicker.ariaLabel.${localeKey}`),
16401
16435
  disabled: props.disabled,
16402
16436
  value: color && getValue(color),
16403
16437
  onChange: e => {
@@ -16415,6 +16449,7 @@ const VColorPickerEdit = defineComponent({
16415
16449
  "icon": "$unfold",
16416
16450
  "size": "x-small",
16417
16451
  "variant": "plain",
16452
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.changeFormat'),
16418
16453
  "onClick": () => {
16419
16454
  const mi = enabledModes.value.findIndex(m => m.name === props.mode);
16420
16455
  emit('update:mode', enabledModes.value[(mi + 1) % enabledModes.value.length].name);
@@ -17180,6 +17215,9 @@ const VColorPickerPreview = defineComponent({
17180
17215
  let {
17181
17216
  emit
17182
17217
  } = _ref;
17218
+ const {
17219
+ t
17220
+ } = useLocale();
17183
17221
  const abortController = new AbortController();
17184
17222
  onUnmounted(() => abortController.abort());
17185
17223
  async function openEyeDropper() {
@@ -17205,6 +17243,7 @@ const VColorPickerPreview = defineComponent({
17205
17243
  "class": "v-color-picker-preview__eye-dropper",
17206
17244
  "key": "eyeDropper"
17207
17245
  }, [createVNode(VBtn, {
17246
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.eyedropper'),
17208
17247
  "density": "comfortable",
17209
17248
  "disabled": props.disabled,
17210
17249
  "icon": "$eyeDropper",
@@ -17220,6 +17259,7 @@ const VColorPickerPreview = defineComponent({
17220
17259
  "class": "v-color-picker-preview__sliders"
17221
17260
  }, [createVNode(VSlider, {
17222
17261
  "class": "v-color-picker-preview__track v-color-picker-preview__hue",
17262
+ "name": t('$vuetify.colorPicker.ariaLabel.hueSlider'),
17223
17263
  "modelValue": props.color?.h,
17224
17264
  "onUpdate:modelValue": h => emit('update:color', {
17225
17265
  ...(props.color ?? nullColor),
@@ -17235,6 +17275,7 @@ const VColorPickerPreview = defineComponent({
17235
17275
  "hideDetails": true
17236
17276
  }, null), !props.hideAlpha && createVNode(VSlider, {
17237
17277
  "class": "v-color-picker-preview__track v-color-picker-preview__alpha",
17278
+ "name": t('$vuetify.colorPicker.ariaLabel.alphaSlider'),
17238
17279
  "modelValue": props.color?.a ?? 1,
17239
17280
  "onUpdate:modelValue": a => emit('update:color', {
17240
17281
  ...(props.color ?? nullColor),
@@ -19755,7 +19796,7 @@ function groupItems(items, groupBy) {
19755
19796
  });
19756
19797
  return groups;
19757
19798
  }
19758
- function flattenItems(items, opened) {
19799
+ function flattenItems(items, opened, hasSummary) {
19759
19800
  const flatItems = [];
19760
19801
  for (const item of items) {
19761
19802
  // TODO: make this better
@@ -19764,7 +19805,13 @@ function flattenItems(items, opened) {
19764
19805
  flatItems.push(item);
19765
19806
  }
19766
19807
  if (opened.has(item.id) || item.value == null) {
19767
- flatItems.push(...flattenItems(item.items, opened));
19808
+ flatItems.push(...flattenItems(item.items, opened, hasSummary));
19809
+ if (hasSummary) {
19810
+ flatItems.push({
19811
+ ...item,
19812
+ type: 'group-summary'
19813
+ });
19814
+ }
19768
19815
  }
19769
19816
  } else {
19770
19817
  flatItems.push(item);
@@ -19772,11 +19819,11 @@ function flattenItems(items, opened) {
19772
19819
  }
19773
19820
  return flatItems;
19774
19821
  }
19775
- function useGroupedItems(items, groupBy, opened) {
19822
+ function useGroupedItems(items, groupBy, opened, hasSummary) {
19776
19823
  const flatItems = computed(() => {
19777
19824
  if (!groupBy.value.length) return items.value;
19778
19825
  const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));
19779
- return flattenItems(groupedItems, opened.value);
19826
+ return flattenItems(groupedItems, opened.value, toValue(hasSummary));
19780
19827
  });
19781
19828
  return {
19782
19829
  flatItems
@@ -20394,7 +20441,7 @@ const VDataIterator = genericComponent()({
20394
20441
  });
20395
20442
  const {
20396
20443
  flatItems
20397
- } = useGroupedItems(sortedItems, groupBy, opened);
20444
+ } = useGroupedItems(sortedItems, groupBy, opened, false);
20398
20445
  const itemsLength = toRef(() => flatItems.value.length);
20399
20446
  const {
20400
20447
  startIndex,
@@ -21099,11 +21146,16 @@ function parseFixedColumns(items) {
21099
21146
  if (item.fixed === true) {
21100
21147
  item.fixed = 'start';
21101
21148
  }
21102
- const orderedChildren = side === 'start' ? item.children?.toReversed() : item.children;
21103
21149
  if (item.fixed === side) {
21104
- if (orderedChildren) {
21105
- for (const child of orderedChildren) {
21106
- setFixed(child, side, side);
21150
+ if (item.children) {
21151
+ if (side === 'start') {
21152
+ for (let i = item.children.length - 1; i >= 0; i--) {
21153
+ setFixed(item.children[i], side, side);
21154
+ }
21155
+ } else {
21156
+ for (let i = 0; i < item.children.length; i++) {
21157
+ setFixed(item.children[i], side, side);
21158
+ }
21107
21159
  }
21108
21160
  } else {
21109
21161
  if (!seenFixed && side === 'start') {
@@ -21118,57 +21170,63 @@ function parseFixedColumns(items) {
21118
21170
  seenFixed = true;
21119
21171
  }
21120
21172
  } else {
21121
- if (orderedChildren) {
21122
- for (const child of orderedChildren) {
21123
- setFixed(child, side);
21173
+ if (item.children) {
21174
+ if (side === 'start') {
21175
+ for (let i = item.children.length - 1; i >= 0; i--) {
21176
+ setFixed(item.children[i], side);
21177
+ }
21178
+ } else {
21179
+ for (let i = 0; i < item.children.length; i++) {
21180
+ setFixed(item.children[i], side);
21181
+ }
21124
21182
  }
21125
21183
  } else {
21126
21184
  seenFixed = false;
21127
21185
  }
21128
21186
  }
21129
21187
  }
21130
- for (const item of items.toReversed()) {
21131
- setFixed(item, 'start');
21188
+ for (let i = items.length - 1; i >= 0; i--) {
21189
+ setFixed(items[i], 'start');
21132
21190
  }
21133
- for (const item of items) {
21134
- setFixed(item, 'end');
21135
- }
21136
- function setFixedOffset(item) {
21137
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21138
- if (!item) return offset;
21139
- if (item.children) {
21140
- item.fixedOffset = offset;
21141
- for (const child of item.children) {
21142
- offset = setFixedOffset(child, offset);
21143
- }
21144
- } else if (item.fixed && item.fixed !== 'end') {
21145
- item.fixedOffset = offset;
21146
- offset += parseFloat(item.width || '0') || 0;
21147
- }
21148
- return offset;
21191
+ for (let i = 0; i < items.length; i++) {
21192
+ setFixed(items[i], 'end');
21149
21193
  }
21150
21194
  let fixedOffset = 0;
21151
- for (const item of items) {
21152
- fixedOffset = setFixedOffset(item, fixedOffset);
21195
+ for (let i = 0; i < items.length; i++) {
21196
+ fixedOffset = setFixedOffset(items[i], fixedOffset);
21153
21197
  }
21154
- function setFixedEndOffset(item) {
21155
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21156
- if (!item) return offset;
21157
- if (item.children) {
21158
- item.fixedEndOffset = offset;
21159
- for (const child of item.children) {
21160
- offset = setFixedEndOffset(child, offset);
21161
- }
21162
- } else if (item.fixed === 'end') {
21163
- item.fixedEndOffset = offset;
21164
- offset += parseFloat(item.width || '0') || 0;
21198
+ let fixedEndOffset = 0;
21199
+ for (let i = items.length - 1; i >= 0; i--) {
21200
+ fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);
21201
+ }
21202
+ }
21203
+ function setFixedOffset(item) {
21204
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21205
+ if (!item) return offset;
21206
+ if (item.children) {
21207
+ item.fixedOffset = offset;
21208
+ for (const child of item.children) {
21209
+ offset = setFixedOffset(child, offset);
21165
21210
  }
21166
- return offset;
21211
+ } else if (item.fixed && item.fixed !== 'end') {
21212
+ item.fixedOffset = offset;
21213
+ offset += parseFloat(item.width || '0') || 0;
21167
21214
  }
21168
- let fixedEndOffset = 0;
21169
- for (const item of items.toReversed()) {
21170
- fixedEndOffset = setFixedEndOffset(item, fixedEndOffset);
21215
+ return offset;
21216
+ }
21217
+ function setFixedEndOffset(item) {
21218
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
21219
+ if (!item) return offset;
21220
+ if (item.children) {
21221
+ item.fixedEndOffset = offset;
21222
+ for (const child of item.children) {
21223
+ offset = setFixedEndOffset(child, offset);
21224
+ }
21225
+ } else if (item.fixed === 'end') {
21226
+ item.fixedEndOffset = offset;
21227
+ offset += parseFloat(item.width || '0') || 0;
21171
21228
  }
21229
+ return offset;
21172
21230
  }
21173
21231
  function parse(items, maxDepth) {
21174
21232
  const headers = [];
@@ -21834,6 +21892,15 @@ const VDataTableRows = genericComponent()({
21834
21892
  "item": item
21835
21893
  }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21836
21894
  }
21895
+ if (item.type === 'group-summary') {
21896
+ const slotProps = {
21897
+ index,
21898
+ item,
21899
+ columns: columns.value,
21900
+ toggleGroup
21901
+ };
21902
+ return slots['group-summary']?.(slotProps) ?? '';
21903
+ }
21837
21904
  const slotProps = {
21838
21905
  index,
21839
21906
  item: item.raw,
@@ -21870,8 +21937,6 @@ const VDataTableRows = genericComponent()({
21870
21937
  }
21871
21938
  });
21872
21939
 
21873
- // Types
21874
-
21875
21940
  const makeVTableProps = propsFactory({
21876
21941
  fixedHeader: Boolean,
21877
21942
  fixedFooter: Boolean,
@@ -21901,26 +21966,37 @@ const VTable = genericComponent()({
21901
21966
  const {
21902
21967
  densityClasses
21903
21968
  } = useDensity(props);
21904
- useRender(() => createVNode(props.tag, {
21905
- "class": normalizeClass(['v-table', {
21906
- 'v-table--fixed-height': !!props.height,
21907
- 'v-table--fixed-header': props.fixedHeader,
21908
- 'v-table--fixed-footer': props.fixedFooter,
21909
- 'v-table--has-top': !!slots.top,
21910
- 'v-table--has-bottom': !!slots.bottom,
21911
- 'v-table--hover': props.hover,
21912
- 'v-table--striped-even': props.striped === 'even',
21913
- 'v-table--striped-odd': props.striped === 'odd'
21914
- }, themeClasses.value, densityClasses.value, props.class]),
21915
- "style": normalizeStyle(props.style)
21916
- }, {
21917
- default: () => [slots.top?.(), slots.default ? createElementVNode("div", {
21918
- "class": "v-table__wrapper",
21919
- "style": {
21920
- height: convertToUnit(props.height)
21969
+ useRender(() => {
21970
+ const tableContentDefaults = {
21971
+ VCheckboxBtn: {
21972
+ density: props.density
21921
21973
  }
21922
- }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
21923
- }));
21974
+ };
21975
+ return createVNode(props.tag, {
21976
+ "class": normalizeClass(['v-table', {
21977
+ 'v-table--fixed-height': !!props.height,
21978
+ 'v-table--fixed-header': props.fixedHeader,
21979
+ 'v-table--fixed-footer': props.fixedFooter,
21980
+ 'v-table--has-top': !!slots.top,
21981
+ 'v-table--has-bottom': !!slots.bottom,
21982
+ 'v-table--hover': props.hover,
21983
+ 'v-table--striped-even': props.striped === 'even',
21984
+ 'v-table--striped-odd': props.striped === 'odd'
21985
+ }, themeClasses.value, densityClasses.value, props.class]),
21986
+ "style": normalizeStyle(props.style)
21987
+ }, {
21988
+ default: () => [slots.top?.(), createVNode(VDefaultsProvider, {
21989
+ "defaults": tableContentDefaults
21990
+ }, {
21991
+ default: () => [slots.default ? createElementVNode("div", {
21992
+ "class": "v-table__wrapper",
21993
+ "style": {
21994
+ height: convertToUnit(props.height)
21995
+ }
21996
+ }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.()]
21997
+ }), slots.bottom?.()]
21998
+ });
21999
+ });
21924
22000
  return {};
21925
22001
  }
21926
22002
  });
@@ -22083,7 +22159,7 @@ const VDataTable = genericComponent()({
22083
22159
  });
22084
22160
  const {
22085
22161
  flatItems
22086
- } = useGroupedItems(sortedItems, groupBy, opened);
22162
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22087
22163
  const itemsLength = computed(() => flatItems.value.length);
22088
22164
  const {
22089
22165
  startIndex,
@@ -22271,7 +22347,7 @@ const VDataTableVirtual = genericComponent()({
22271
22347
  });
22272
22348
  const {
22273
22349
  flatItems
22274
- } = useGroupedItems(sortedItems, groupBy, opened);
22350
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22275
22351
  const allItems = computed(() => extractRows(flatItems.value));
22276
22352
  const {
22277
22353
  isSelected,
@@ -22500,7 +22576,7 @@ const VDataTableServer = genericComponent()({
22500
22576
  });
22501
22577
  const {
22502
22578
  flatItems
22503
- } = useGroupedItems(items, groupBy, opened);
22579
+ } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);
22504
22580
  const {
22505
22581
  isSelected,
22506
22582
  select,
@@ -26253,6 +26329,7 @@ const VNumberInput = genericComponent()({
26253
26329
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
26254
26330
  if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
26255
26331
  e.preventDefault();
26332
+ e.stopPropagation();
26256
26333
  clampModel();
26257
26334
  // _model is controlled, so need to wait until props['modelValue'] is updated
26258
26335
  await nextTick();
@@ -30773,14 +30850,19 @@ const VTreeviewChildren = genericComponent()({
30773
30850
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30774
30851
  onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30775
30852
  };
30776
- return createVNode(VTreeviewItem, mergeProps({
30853
+ return renderSlot(slots.header, {
30854
+ props: listItemProps,
30855
+ item: item.raw,
30856
+ internalItem: item,
30857
+ loading
30858
+ }, () => createVNode(VTreeviewItem, mergeProps({
30777
30859
  "ref": el => activatorItems.value[index] = el
30778
30860
  }, listItemProps, {
30779
30861
  "hideActions": props.hideActions,
30780
30862
  "indentLines": indentLines.node,
30781
30863
  "value": props.returnObject ? item.raw : itemProps.value,
30782
30864
  "loading": loading
30783
- }), slotsWithItem);
30865
+ }), slotsWithItem));
30784
30866
  },
30785
30867
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30786
30868
  "items": children,
@@ -31471,7 +31553,7 @@ function createVuetify$1() {
31471
31553
  };
31472
31554
  });
31473
31555
  }
31474
- const version$1 = "3.9.3-master.2025-07-30";
31556
+ const version$1 = "3.9.3-master.2025-08-01";
31475
31557
  createVuetify$1.version = version$1;
31476
31558
 
31477
31559
  // Vue's inject() can only be used in setup
@@ -31496,7 +31578,7 @@ const createVuetify = function () {
31496
31578
  ...options
31497
31579
  });
31498
31580
  };
31499
- const version = "3.9.3-master.2025-07-30";
31581
+ const version = "3.9.3-master.2025-08-01";
31500
31582
  createVuetify.version = version;
31501
31583
 
31502
31584
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useHotkey, useLayout, useLocale, useRtl, useTheme, version };