@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
@@ -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
  */
@@ -1653,7 +1653,9 @@
1653
1653
  function hasScrollbar(el) {
1654
1654
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
1655
1655
  const style = window.getComputedStyle(el);
1656
- return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1656
+ const hasVerticalScrollbar = style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1657
+ const hasHorizontalScrollbar = style.overflowX === 'scroll' || style.overflowX === 'auto' && el.scrollWidth > el.clientWidth;
1658
+ return hasVerticalScrollbar || hasHorizontalScrollbar;
1657
1659
  }
1658
1660
  function isPotentiallyScrollable(el) {
1659
1661
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
@@ -2257,6 +2259,23 @@
2257
2259
  unmute: 'Unmute',
2258
2260
  enterFullscreen: 'Full screen',
2259
2261
  exitFullscreen: 'Exit full screen'
2262
+ },
2263
+ colorPicker: {
2264
+ ariaLabel: {
2265
+ eyedropper: 'Select color with eyedropper',
2266
+ hueSlider: 'Hue',
2267
+ alphaSlider: 'Alpha',
2268
+ redInput: 'Red value',
2269
+ greenInput: 'Green value',
2270
+ blueInput: 'Blue value',
2271
+ alphaInput: 'Alpha value',
2272
+ hueInput: 'Hue value',
2273
+ saturationInput: 'Saturation value',
2274
+ lightnessInput: 'Lightness value',
2275
+ hexInput: 'HEX value',
2276
+ hexaInput: 'HEX with alpha value',
2277
+ changeFormat: 'Change color format'
2278
+ }
2260
2279
  }
2261
2280
  };
2262
2281
 
@@ -15982,7 +16001,8 @@
15982
16001
  getColor: (c, v) => ({
15983
16002
  ...c,
15984
16003
  r: Number(v)
15985
- })
16004
+ }),
16005
+ localeKey: 'redInput'
15986
16006
  }, {
15987
16007
  label: 'G',
15988
16008
  max: 255,
@@ -15991,7 +16011,8 @@
15991
16011
  getColor: (c, v) => ({
15992
16012
  ...c,
15993
16013
  g: Number(v)
15994
- })
16014
+ }),
16015
+ localeKey: 'greenInput'
15995
16016
  }, {
15996
16017
  label: 'B',
15997
16018
  max: 255,
@@ -16000,7 +16021,8 @@
16000
16021
  getColor: (c, v) => ({
16001
16022
  ...c,
16002
16023
  b: Number(v)
16003
- })
16024
+ }),
16025
+ localeKey: 'blueInput'
16004
16026
  }, {
16005
16027
  label: 'A',
16006
16028
  max: 1,
@@ -16014,7 +16036,8 @@
16014
16036
  getColor: (c, v) => ({
16015
16037
  ...c,
16016
16038
  a: Number(v)
16017
- })
16039
+ }),
16040
+ localeKey: 'alphaInput'
16018
16041
  }],
16019
16042
  to: HSVtoRGB,
16020
16043
  from: RGBtoHSV
@@ -16036,7 +16059,8 @@
16036
16059
  getColor: (c, v) => ({
16037
16060
  ...c,
16038
16061
  h: Number(v)
16039
- })
16062
+ }),
16063
+ localeKey: 'hueInput'
16040
16064
  }, {
16041
16065
  label: 'S',
16042
16066
  max: 1,
@@ -16045,7 +16069,8 @@
16045
16069
  getColor: (c, v) => ({
16046
16070
  ...c,
16047
16071
  s: Number(v)
16048
- })
16072
+ }),
16073
+ localeKey: 'saturationInput'
16049
16074
  }, {
16050
16075
  label: 'L',
16051
16076
  max: 1,
@@ -16054,7 +16079,8 @@
16054
16079
  getColor: (c, v) => ({
16055
16080
  ...c,
16056
16081
  l: Number(v)
16057
- })
16082
+ }),
16083
+ localeKey: 'lightnessInput'
16058
16084
  }, {
16059
16085
  label: 'A',
16060
16086
  max: 1,
@@ -16068,7 +16094,8 @@
16068
16094
  getColor: (c, v) => ({
16069
16095
  ...c,
16070
16096
  a: Number(v)
16071
- })
16097
+ }),
16098
+ localeKey: 'alphaInput'
16072
16099
  }],
16073
16100
  to: HSVtoHSL,
16074
16101
  from: HSLtoHSV
@@ -16084,7 +16111,8 @@
16084
16111
  inputs: [{
16085
16112
  label: 'HEXA',
16086
16113
  getValue: c => c,
16087
- getColor: (c, v) => v
16114
+ getColor: (c, v) => v,
16115
+ localeKey: 'hexaInput'
16088
16116
  }],
16089
16117
  to: HSVtoHex,
16090
16118
  from: HexToHSV
@@ -16094,7 +16122,8 @@
16094
16122
  inputs: [{
16095
16123
  label: 'HEX',
16096
16124
  getValue: c => c.slice(0, 7),
16097
- getColor: (c, v) => v
16125
+ getColor: (c, v) => v,
16126
+ localeKey: 'hexInput'
16098
16127
  }]
16099
16128
  };
16100
16129
  const modes = {
@@ -16143,6 +16172,9 @@
16143
16172
  let {
16144
16173
  emit
16145
16174
  } = _ref2;
16175
+ const {
16176
+ t
16177
+ } = useLocale();
16146
16178
  const enabledModes = vue.computed(() => {
16147
16179
  return props.modes.map(key => ({
16148
16180
  ...modes[key],
@@ -16157,11 +16189,13 @@
16157
16189
  let {
16158
16190
  getValue,
16159
16191
  getColor,
16192
+ localeKey,
16160
16193
  ...inputProps
16161
16194
  } = _ref3;
16162
16195
  return {
16163
16196
  ...mode.inputProps,
16164
16197
  ...inputProps,
16198
+ ariaLabel: t(`$vuetify.colorPicker.ariaLabel.${localeKey}`),
16165
16199
  disabled: props.disabled,
16166
16200
  value: color && getValue(color),
16167
16201
  onChange: e => {
@@ -16179,6 +16213,7 @@
16179
16213
  "icon": "$unfold",
16180
16214
  "size": "x-small",
16181
16215
  "variant": "plain",
16216
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.changeFormat'),
16182
16217
  "onClick": () => {
16183
16218
  const mi = enabledModes.value.findIndex(m => m.name === props.mode);
16184
16219
  emit('update:mode', enabledModes.value[(mi + 1) % enabledModes.value.length].name);
@@ -16944,6 +16979,9 @@
16944
16979
  let {
16945
16980
  emit
16946
16981
  } = _ref;
16982
+ const {
16983
+ t
16984
+ } = useLocale();
16947
16985
  const abortController = new AbortController();
16948
16986
  vue.onUnmounted(() => abortController.abort());
16949
16987
  async function openEyeDropper() {
@@ -16969,6 +17007,7 @@
16969
17007
  "class": "v-color-picker-preview__eye-dropper",
16970
17008
  "key": "eyeDropper"
16971
17009
  }, [vue.createVNode(VBtn, {
17010
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.eyedropper'),
16972
17011
  "density": "comfortable",
16973
17012
  "disabled": props.disabled,
16974
17013
  "icon": "$eyeDropper",
@@ -16984,6 +17023,7 @@
16984
17023
  "class": "v-color-picker-preview__sliders"
16985
17024
  }, [vue.createVNode(VSlider, {
16986
17025
  "class": "v-color-picker-preview__track v-color-picker-preview__hue",
17026
+ "name": t('$vuetify.colorPicker.ariaLabel.hueSlider'),
16987
17027
  "modelValue": props.color?.h,
16988
17028
  "onUpdate:modelValue": h => emit('update:color', {
16989
17029
  ...(props.color ?? nullColor),
@@ -16999,6 +17039,7 @@
16999
17039
  "hideDetails": true
17000
17040
  }, null), !props.hideAlpha && vue.createVNode(VSlider, {
17001
17041
  "class": "v-color-picker-preview__track v-color-picker-preview__alpha",
17042
+ "name": t('$vuetify.colorPicker.ariaLabel.alphaSlider'),
17002
17043
  "modelValue": props.color?.a ?? 1,
17003
17044
  "onUpdate:modelValue": a => emit('update:color', {
17004
17045
  ...(props.color ?? nullColor),
@@ -19519,7 +19560,7 @@
19519
19560
  });
19520
19561
  return groups;
19521
19562
  }
19522
- function flattenItems(items, opened) {
19563
+ function flattenItems(items, opened, hasSummary) {
19523
19564
  const flatItems = [];
19524
19565
  for (const item of items) {
19525
19566
  // TODO: make this better
@@ -19528,7 +19569,13 @@
19528
19569
  flatItems.push(item);
19529
19570
  }
19530
19571
  if (opened.has(item.id) || item.value == null) {
19531
- flatItems.push(...flattenItems(item.items, opened));
19572
+ flatItems.push(...flattenItems(item.items, opened, hasSummary));
19573
+ if (hasSummary) {
19574
+ flatItems.push({
19575
+ ...item,
19576
+ type: 'group-summary'
19577
+ });
19578
+ }
19532
19579
  }
19533
19580
  } else {
19534
19581
  flatItems.push(item);
@@ -19536,11 +19583,11 @@
19536
19583
  }
19537
19584
  return flatItems;
19538
19585
  }
19539
- function useGroupedItems(items, groupBy, opened) {
19586
+ function useGroupedItems(items, groupBy, opened, hasSummary) {
19540
19587
  const flatItems = vue.computed(() => {
19541
19588
  if (!groupBy.value.length) return items.value;
19542
19589
  const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));
19543
- return flattenItems(groupedItems, opened.value);
19590
+ return flattenItems(groupedItems, opened.value, vue.toValue(hasSummary));
19544
19591
  });
19545
19592
  return {
19546
19593
  flatItems
@@ -20158,7 +20205,7 @@
20158
20205
  });
20159
20206
  const {
20160
20207
  flatItems
20161
- } = useGroupedItems(sortedItems, groupBy, opened);
20208
+ } = useGroupedItems(sortedItems, groupBy, opened, false);
20162
20209
  const itemsLength = vue.toRef(() => flatItems.value.length);
20163
20210
  const {
20164
20211
  startIndex,
@@ -20863,11 +20910,16 @@
20863
20910
  if (item.fixed === true) {
20864
20911
  item.fixed = 'start';
20865
20912
  }
20866
- const orderedChildren = side === 'start' ? item.children?.toReversed() : item.children;
20867
20913
  if (item.fixed === side) {
20868
- if (orderedChildren) {
20869
- for (const child of orderedChildren) {
20870
- setFixed(child, side, side);
20914
+ if (item.children) {
20915
+ if (side === 'start') {
20916
+ for (let i = item.children.length - 1; i >= 0; i--) {
20917
+ setFixed(item.children[i], side, side);
20918
+ }
20919
+ } else {
20920
+ for (let i = 0; i < item.children.length; i++) {
20921
+ setFixed(item.children[i], side, side);
20922
+ }
20871
20923
  }
20872
20924
  } else {
20873
20925
  if (!seenFixed && side === 'start') {
@@ -20882,57 +20934,63 @@
20882
20934
  seenFixed = true;
20883
20935
  }
20884
20936
  } else {
20885
- if (orderedChildren) {
20886
- for (const child of orderedChildren) {
20887
- setFixed(child, side);
20937
+ if (item.children) {
20938
+ if (side === 'start') {
20939
+ for (let i = item.children.length - 1; i >= 0; i--) {
20940
+ setFixed(item.children[i], side);
20941
+ }
20942
+ } else {
20943
+ for (let i = 0; i < item.children.length; i++) {
20944
+ setFixed(item.children[i], side);
20945
+ }
20888
20946
  }
20889
20947
  } else {
20890
20948
  seenFixed = false;
20891
20949
  }
20892
20950
  }
20893
20951
  }
20894
- for (const item of items.toReversed()) {
20895
- setFixed(item, 'start');
20952
+ for (let i = items.length - 1; i >= 0; i--) {
20953
+ setFixed(items[i], 'start');
20896
20954
  }
20897
- for (const item of items) {
20898
- setFixed(item, 'end');
20899
- }
20900
- function setFixedOffset(item) {
20901
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20902
- if (!item) return offset;
20903
- if (item.children) {
20904
- item.fixedOffset = offset;
20905
- for (const child of item.children) {
20906
- offset = setFixedOffset(child, offset);
20907
- }
20908
- } else if (item.fixed && item.fixed !== 'end') {
20909
- item.fixedOffset = offset;
20910
- offset += parseFloat(item.width || '0') || 0;
20911
- }
20912
- return offset;
20955
+ for (let i = 0; i < items.length; i++) {
20956
+ setFixed(items[i], 'end');
20913
20957
  }
20914
20958
  let fixedOffset = 0;
20915
- for (const item of items) {
20916
- fixedOffset = setFixedOffset(item, fixedOffset);
20959
+ for (let i = 0; i < items.length; i++) {
20960
+ fixedOffset = setFixedOffset(items[i], fixedOffset);
20917
20961
  }
20918
- function setFixedEndOffset(item) {
20919
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20920
- if (!item) return offset;
20921
- if (item.children) {
20922
- item.fixedEndOffset = offset;
20923
- for (const child of item.children) {
20924
- offset = setFixedEndOffset(child, offset);
20925
- }
20926
- } else if (item.fixed === 'end') {
20927
- item.fixedEndOffset = offset;
20928
- offset += parseFloat(item.width || '0') || 0;
20962
+ let fixedEndOffset = 0;
20963
+ for (let i = items.length - 1; i >= 0; i--) {
20964
+ fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);
20965
+ }
20966
+ }
20967
+ function setFixedOffset(item) {
20968
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20969
+ if (!item) return offset;
20970
+ if (item.children) {
20971
+ item.fixedOffset = offset;
20972
+ for (const child of item.children) {
20973
+ offset = setFixedOffset(child, offset);
20929
20974
  }
20930
- return offset;
20975
+ } else if (item.fixed && item.fixed !== 'end') {
20976
+ item.fixedOffset = offset;
20977
+ offset += parseFloat(item.width || '0') || 0;
20931
20978
  }
20932
- let fixedEndOffset = 0;
20933
- for (const item of items.toReversed()) {
20934
- fixedEndOffset = setFixedEndOffset(item, fixedEndOffset);
20979
+ return offset;
20980
+ }
20981
+ function setFixedEndOffset(item) {
20982
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20983
+ if (!item) return offset;
20984
+ if (item.children) {
20985
+ item.fixedEndOffset = offset;
20986
+ for (const child of item.children) {
20987
+ offset = setFixedEndOffset(child, offset);
20988
+ }
20989
+ } else if (item.fixed === 'end') {
20990
+ item.fixedEndOffset = offset;
20991
+ offset += parseFloat(item.width || '0') || 0;
20935
20992
  }
20993
+ return offset;
20936
20994
  }
20937
20995
  function parse(items, maxDepth) {
20938
20996
  const headers = [];
@@ -21598,6 +21656,15 @@
21598
21656
  "item": item
21599
21657
  }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21600
21658
  }
21659
+ if (item.type === 'group-summary') {
21660
+ const slotProps = {
21661
+ index,
21662
+ item,
21663
+ columns: columns.value,
21664
+ toggleGroup
21665
+ };
21666
+ return slots['group-summary']?.(slotProps) ?? '';
21667
+ }
21601
21668
  const slotProps = {
21602
21669
  index,
21603
21670
  item: item.raw,
@@ -21847,7 +21914,7 @@
21847
21914
  });
21848
21915
  const {
21849
21916
  flatItems
21850
- } = useGroupedItems(sortedItems, groupBy, opened);
21917
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
21851
21918
  const itemsLength = vue.computed(() => flatItems.value.length);
21852
21919
  const {
21853
21920
  startIndex,
@@ -22035,7 +22102,7 @@
22035
22102
  });
22036
22103
  const {
22037
22104
  flatItems
22038
- } = useGroupedItems(sortedItems, groupBy, opened);
22105
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22039
22106
  const allItems = vue.computed(() => extractRows(flatItems.value));
22040
22107
  const {
22041
22108
  isSelected,
@@ -22264,7 +22331,7 @@
22264
22331
  });
22265
22332
  const {
22266
22333
  flatItems
22267
- } = useGroupedItems(items, groupBy, opened);
22334
+ } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);
22268
22335
  const {
22269
22336
  isSelected,
22270
22337
  select,
@@ -26017,6 +26084,7 @@
26017
26084
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
26018
26085
  if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
26019
26086
  e.preventDefault();
26087
+ e.stopPropagation();
26020
26088
  clampModel();
26021
26089
  // _model is controlled, so need to wait until props['modelValue'] is updated
26022
26090
  await vue.nextTick();
@@ -30537,14 +30605,19 @@
30537
30605
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30538
30606
  onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30539
30607
  };
30540
- return vue.createVNode(VTreeviewItem, vue.mergeProps({
30608
+ return renderSlot(slots.header, {
30609
+ props: listItemProps,
30610
+ item: item.raw,
30611
+ internalItem: item,
30612
+ loading
30613
+ }, () => vue.createVNode(VTreeviewItem, vue.mergeProps({
30541
30614
  "ref": el => activatorItems.value[index] = el
30542
30615
  }, listItemProps, {
30543
30616
  "hideActions": props.hideActions,
30544
30617
  "indentLines": indentLines.node,
30545
30618
  "value": props.returnObject ? item.raw : itemProps.value,
30546
30619
  "loading": loading
30547
- }), slotsWithItem);
30620
+ }), slotsWithItem));
30548
30621
  },
30549
30622
  default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30550
30623
  "items": children,
@@ -31346,12 +31419,23 @@
31346
31419
 
31347
31420
  // Types
31348
31421
 
31422
+ const availablePipLocations = ['prepend', 'prepend-inner', 'append', 'append-inner'];
31349
31423
  const makeVColorInputProps = propsFactory({
31350
- pip: Boolean,
31424
+ hidePip: Boolean,
31425
+ colorPip: Boolean,
31351
31426
  pipIcon: {
31352
31427
  type: String,
31353
31428
  default: '$color'
31354
31429
  },
31430
+ pipLocation: {
31431
+ type: String,
31432
+ default: 'prepend',
31433
+ validator: v => availablePipLocations.includes(v)
31434
+ },
31435
+ pipVariant: {
31436
+ type: String,
31437
+ default: 'text'
31438
+ },
31355
31439
  ...makeFocusProps(),
31356
31440
  ...makeVConfirmEditProps(),
31357
31441
  ...makeVTextFieldProps(),
@@ -31395,8 +31479,15 @@
31395
31479
  useRender(() => {
31396
31480
  const confirmEditProps = VConfirmEdit.filterProps(props);
31397
31481
  const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']));
31398
- const textFieldProps = VTextField.filterProps(omit(props, ['prependInnerIcon']));
31399
- const hasPrepend = !!(slots.prepend || props.pipIcon);
31482
+ const textFieldProps = VTextField.filterProps(props);
31483
+ const slotWithPip = props.hidePip ? undefined : {
31484
+ [props.pipLocation]: arg => vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VAvatar, {
31485
+ "class": "v-color-input__pip",
31486
+ "color": props.colorPip ? model.value : undefined,
31487
+ "variant": props.pipVariant,
31488
+ "icon": props.pipIcon
31489
+ }, null), slots[props.pipLocation]?.(arg)])
31490
+ };
31400
31491
  return vue.createVNode(VTextField, vue.mergeProps(textFieldProps, {
31401
31492
  "class": ['v-color-input', props.class],
31402
31493
  "style": props.style,
@@ -31412,10 +31503,7 @@
31412
31503
  }
31413
31504
  }), {
31414
31505
  ...slots,
31415
- prepend: props.pipIcon ? arg => vue.createElementVNode(vue.Fragment, null, [hasPrepend && vue.createVNode(VIcon, {
31416
- "color": props.pip ? model.value : undefined,
31417
- "icon": props.pipIcon
31418
- }, null), slots.prepend?.(arg)]) : undefined,
31506
+ ...slotWithPip,
31419
31507
  default: () => vue.createElementVNode(vue.Fragment, null, [vue.createVNode(VMenu, {
31420
31508
  "modelValue": menu.value,
31421
31509
  "onUpdate:modelValue": $event => menu.value = $event,
@@ -35160,7 +35248,7 @@
35160
35248
  };
35161
35249
  });
35162
35250
  }
35163
- const version$1 = "3.9.3-master.2025-07-30";
35251
+ const version$1 = "3.9.3-master.2025-07-31";
35164
35252
  createVuetify$1.version = version$1;
35165
35253
 
35166
35254
  // Vue's inject() can only be used in setup
@@ -35458,7 +35546,7 @@
35458
35546
 
35459
35547
  /* eslint-disable local-rules/sort-imports */
35460
35548
 
35461
- const version = "3.9.3-master.2025-07-30";
35549
+ const version = "3.9.3-master.2025-07-31";
35462
35550
 
35463
35551
  /* eslint-disable local-rules/sort-imports */
35464
35552