@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
  */
@@ -1649,7 +1649,9 @@ function getScrollParents(el, stopAt) {
1649
1649
  function hasScrollbar(el) {
1650
1650
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
1651
1651
  const style = window.getComputedStyle(el);
1652
- return style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1652
+ const hasVerticalScrollbar = style.overflowY === 'scroll' || style.overflowY === 'auto' && el.scrollHeight > el.clientHeight;
1653
+ const hasHorizontalScrollbar = style.overflowX === 'scroll' || style.overflowX === 'auto' && el.scrollWidth > el.clientWidth;
1654
+ return hasVerticalScrollbar || hasHorizontalScrollbar;
1653
1655
  }
1654
1656
  function isPotentiallyScrollable(el) {
1655
1657
  if (!el || el.nodeType !== Node.ELEMENT_NODE) return false;
@@ -2253,6 +2255,23 @@ var en = {
2253
2255
  unmute: 'Unmute',
2254
2256
  enterFullscreen: 'Full screen',
2255
2257
  exitFullscreen: 'Exit full screen'
2258
+ },
2259
+ colorPicker: {
2260
+ ariaLabel: {
2261
+ eyedropper: 'Select color with eyedropper',
2262
+ hueSlider: 'Hue',
2263
+ alphaSlider: 'Alpha',
2264
+ redInput: 'Red value',
2265
+ greenInput: 'Green value',
2266
+ blueInput: 'Blue value',
2267
+ alphaInput: 'Alpha value',
2268
+ hueInput: 'Hue value',
2269
+ saturationInput: 'Saturation value',
2270
+ lightnessInput: 'Lightness value',
2271
+ hexInput: 'HEX value',
2272
+ hexaInput: 'HEX with alpha value',
2273
+ changeFormat: 'Change color format'
2274
+ }
2256
2275
  }
2257
2276
  };
2258
2277
 
@@ -15978,7 +15997,8 @@ const rgba = {
15978
15997
  getColor: (c, v) => ({
15979
15998
  ...c,
15980
15999
  r: Number(v)
15981
- })
16000
+ }),
16001
+ localeKey: 'redInput'
15982
16002
  }, {
15983
16003
  label: 'G',
15984
16004
  max: 255,
@@ -15987,7 +16007,8 @@ const rgba = {
15987
16007
  getColor: (c, v) => ({
15988
16008
  ...c,
15989
16009
  g: Number(v)
15990
- })
16010
+ }),
16011
+ localeKey: 'greenInput'
15991
16012
  }, {
15992
16013
  label: 'B',
15993
16014
  max: 255,
@@ -15996,7 +16017,8 @@ const rgba = {
15996
16017
  getColor: (c, v) => ({
15997
16018
  ...c,
15998
16019
  b: Number(v)
15999
- })
16020
+ }),
16021
+ localeKey: 'blueInput'
16000
16022
  }, {
16001
16023
  label: 'A',
16002
16024
  max: 1,
@@ -16010,7 +16032,8 @@ const rgba = {
16010
16032
  getColor: (c, v) => ({
16011
16033
  ...c,
16012
16034
  a: Number(v)
16013
- })
16035
+ }),
16036
+ localeKey: 'alphaInput'
16014
16037
  }],
16015
16038
  to: HSVtoRGB,
16016
16039
  from: RGBtoHSV
@@ -16032,7 +16055,8 @@ const hsla = {
16032
16055
  getColor: (c, v) => ({
16033
16056
  ...c,
16034
16057
  h: Number(v)
16035
- })
16058
+ }),
16059
+ localeKey: 'hueInput'
16036
16060
  }, {
16037
16061
  label: 'S',
16038
16062
  max: 1,
@@ -16041,7 +16065,8 @@ const hsla = {
16041
16065
  getColor: (c, v) => ({
16042
16066
  ...c,
16043
16067
  s: Number(v)
16044
- })
16068
+ }),
16069
+ localeKey: 'saturationInput'
16045
16070
  }, {
16046
16071
  label: 'L',
16047
16072
  max: 1,
@@ -16050,7 +16075,8 @@ const hsla = {
16050
16075
  getColor: (c, v) => ({
16051
16076
  ...c,
16052
16077
  l: Number(v)
16053
- })
16078
+ }),
16079
+ localeKey: 'lightnessInput'
16054
16080
  }, {
16055
16081
  label: 'A',
16056
16082
  max: 1,
@@ -16064,7 +16090,8 @@ const hsla = {
16064
16090
  getColor: (c, v) => ({
16065
16091
  ...c,
16066
16092
  a: Number(v)
16067
- })
16093
+ }),
16094
+ localeKey: 'alphaInput'
16068
16095
  }],
16069
16096
  to: HSVtoHSL,
16070
16097
  from: HSLtoHSV
@@ -16080,7 +16107,8 @@ const hexa = {
16080
16107
  inputs: [{
16081
16108
  label: 'HEXA',
16082
16109
  getValue: c => c,
16083
- getColor: (c, v) => v
16110
+ getColor: (c, v) => v,
16111
+ localeKey: 'hexaInput'
16084
16112
  }],
16085
16113
  to: HSVtoHex,
16086
16114
  from: HexToHSV
@@ -16090,7 +16118,8 @@ const hex = {
16090
16118
  inputs: [{
16091
16119
  label: 'HEX',
16092
16120
  getValue: c => c.slice(0, 7),
16093
- getColor: (c, v) => v
16121
+ getColor: (c, v) => v,
16122
+ localeKey: 'hexInput'
16094
16123
  }]
16095
16124
  };
16096
16125
  const modes = {
@@ -16139,6 +16168,9 @@ const VColorPickerEdit = defineComponent({
16139
16168
  let {
16140
16169
  emit
16141
16170
  } = _ref2;
16171
+ const {
16172
+ t
16173
+ } = useLocale();
16142
16174
  const enabledModes = computed(() => {
16143
16175
  return props.modes.map(key => ({
16144
16176
  ...modes[key],
@@ -16153,11 +16185,13 @@ const VColorPickerEdit = defineComponent({
16153
16185
  let {
16154
16186
  getValue,
16155
16187
  getColor,
16188
+ localeKey,
16156
16189
  ...inputProps
16157
16190
  } = _ref3;
16158
16191
  return {
16159
16192
  ...mode.inputProps,
16160
16193
  ...inputProps,
16194
+ ariaLabel: t(`$vuetify.colorPicker.ariaLabel.${localeKey}`),
16161
16195
  disabled: props.disabled,
16162
16196
  value: color && getValue(color),
16163
16197
  onChange: e => {
@@ -16175,6 +16209,7 @@ const VColorPickerEdit = defineComponent({
16175
16209
  "icon": "$unfold",
16176
16210
  "size": "x-small",
16177
16211
  "variant": "plain",
16212
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.changeFormat'),
16178
16213
  "onClick": () => {
16179
16214
  const mi = enabledModes.value.findIndex(m => m.name === props.mode);
16180
16215
  emit('update:mode', enabledModes.value[(mi + 1) % enabledModes.value.length].name);
@@ -16940,6 +16975,9 @@ const VColorPickerPreview = defineComponent({
16940
16975
  let {
16941
16976
  emit
16942
16977
  } = _ref;
16978
+ const {
16979
+ t
16980
+ } = useLocale();
16943
16981
  const abortController = new AbortController();
16944
16982
  onUnmounted(() => abortController.abort());
16945
16983
  async function openEyeDropper() {
@@ -16965,6 +17003,7 @@ const VColorPickerPreview = defineComponent({
16965
17003
  "class": "v-color-picker-preview__eye-dropper",
16966
17004
  "key": "eyeDropper"
16967
17005
  }, [createVNode(VBtn, {
17006
+ "aria-label": t('$vuetify.colorPicker.ariaLabel.eyedropper'),
16968
17007
  "density": "comfortable",
16969
17008
  "disabled": props.disabled,
16970
17009
  "icon": "$eyeDropper",
@@ -16980,6 +17019,7 @@ const VColorPickerPreview = defineComponent({
16980
17019
  "class": "v-color-picker-preview__sliders"
16981
17020
  }, [createVNode(VSlider, {
16982
17021
  "class": "v-color-picker-preview__track v-color-picker-preview__hue",
17022
+ "name": t('$vuetify.colorPicker.ariaLabel.hueSlider'),
16983
17023
  "modelValue": props.color?.h,
16984
17024
  "onUpdate:modelValue": h => emit('update:color', {
16985
17025
  ...(props.color ?? nullColor),
@@ -16995,6 +17035,7 @@ const VColorPickerPreview = defineComponent({
16995
17035
  "hideDetails": true
16996
17036
  }, null), !props.hideAlpha && createVNode(VSlider, {
16997
17037
  "class": "v-color-picker-preview__track v-color-picker-preview__alpha",
17038
+ "name": t('$vuetify.colorPicker.ariaLabel.alphaSlider'),
16998
17039
  "modelValue": props.color?.a ?? 1,
16999
17040
  "onUpdate:modelValue": a => emit('update:color', {
17000
17041
  ...(props.color ?? nullColor),
@@ -19515,7 +19556,7 @@ function groupItems(items, groupBy) {
19515
19556
  });
19516
19557
  return groups;
19517
19558
  }
19518
- function flattenItems(items, opened) {
19559
+ function flattenItems(items, opened, hasSummary) {
19519
19560
  const flatItems = [];
19520
19561
  for (const item of items) {
19521
19562
  // TODO: make this better
@@ -19524,7 +19565,13 @@ function flattenItems(items, opened) {
19524
19565
  flatItems.push(item);
19525
19566
  }
19526
19567
  if (opened.has(item.id) || item.value == null) {
19527
- flatItems.push(...flattenItems(item.items, opened));
19568
+ flatItems.push(...flattenItems(item.items, opened, hasSummary));
19569
+ if (hasSummary) {
19570
+ flatItems.push({
19571
+ ...item,
19572
+ type: 'group-summary'
19573
+ });
19574
+ }
19528
19575
  }
19529
19576
  } else {
19530
19577
  flatItems.push(item);
@@ -19532,11 +19579,11 @@ function flattenItems(items, opened) {
19532
19579
  }
19533
19580
  return flatItems;
19534
19581
  }
19535
- function useGroupedItems(items, groupBy, opened) {
19582
+ function useGroupedItems(items, groupBy, opened, hasSummary) {
19536
19583
  const flatItems = computed(() => {
19537
19584
  if (!groupBy.value.length) return items.value;
19538
19585
  const groupedItems = groupItems(items.value, groupBy.value.map(item => item.key));
19539
- return flattenItems(groupedItems, opened.value);
19586
+ return flattenItems(groupedItems, opened.value, toValue(hasSummary));
19540
19587
  });
19541
19588
  return {
19542
19589
  flatItems
@@ -20154,7 +20201,7 @@ const VDataIterator = genericComponent()({
20154
20201
  });
20155
20202
  const {
20156
20203
  flatItems
20157
- } = useGroupedItems(sortedItems, groupBy, opened);
20204
+ } = useGroupedItems(sortedItems, groupBy, opened, false);
20158
20205
  const itemsLength = toRef(() => flatItems.value.length);
20159
20206
  const {
20160
20207
  startIndex,
@@ -20859,11 +20906,16 @@ function parseFixedColumns(items) {
20859
20906
  if (item.fixed === true) {
20860
20907
  item.fixed = 'start';
20861
20908
  }
20862
- const orderedChildren = side === 'start' ? item.children?.toReversed() : item.children;
20863
20909
  if (item.fixed === side) {
20864
- if (orderedChildren) {
20865
- for (const child of orderedChildren) {
20866
- setFixed(child, side, side);
20910
+ if (item.children) {
20911
+ if (side === 'start') {
20912
+ for (let i = item.children.length - 1; i >= 0; i--) {
20913
+ setFixed(item.children[i], side, side);
20914
+ }
20915
+ } else {
20916
+ for (let i = 0; i < item.children.length; i++) {
20917
+ setFixed(item.children[i], side, side);
20918
+ }
20867
20919
  }
20868
20920
  } else {
20869
20921
  if (!seenFixed && side === 'start') {
@@ -20878,57 +20930,63 @@ function parseFixedColumns(items) {
20878
20930
  seenFixed = true;
20879
20931
  }
20880
20932
  } else {
20881
- if (orderedChildren) {
20882
- for (const child of orderedChildren) {
20883
- setFixed(child, side);
20933
+ if (item.children) {
20934
+ if (side === 'start') {
20935
+ for (let i = item.children.length - 1; i >= 0; i--) {
20936
+ setFixed(item.children[i], side);
20937
+ }
20938
+ } else {
20939
+ for (let i = 0; i < item.children.length; i++) {
20940
+ setFixed(item.children[i], side);
20941
+ }
20884
20942
  }
20885
20943
  } else {
20886
20944
  seenFixed = false;
20887
20945
  }
20888
20946
  }
20889
20947
  }
20890
- for (const item of items.toReversed()) {
20891
- setFixed(item, 'start');
20948
+ for (let i = items.length - 1; i >= 0; i--) {
20949
+ setFixed(items[i], 'start');
20892
20950
  }
20893
- for (const item of items) {
20894
- setFixed(item, 'end');
20895
- }
20896
- function setFixedOffset(item) {
20897
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20898
- if (!item) return offset;
20899
- if (item.children) {
20900
- item.fixedOffset = offset;
20901
- for (const child of item.children) {
20902
- offset = setFixedOffset(child, offset);
20903
- }
20904
- } else if (item.fixed && item.fixed !== 'end') {
20905
- item.fixedOffset = offset;
20906
- offset += parseFloat(item.width || '0') || 0;
20907
- }
20908
- return offset;
20951
+ for (let i = 0; i < items.length; i++) {
20952
+ setFixed(items[i], 'end');
20909
20953
  }
20910
20954
  let fixedOffset = 0;
20911
- for (const item of items) {
20912
- fixedOffset = setFixedOffset(item, fixedOffset);
20955
+ for (let i = 0; i < items.length; i++) {
20956
+ fixedOffset = setFixedOffset(items[i], fixedOffset);
20913
20957
  }
20914
- function setFixedEndOffset(item) {
20915
- let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20916
- if (!item) return offset;
20917
- if (item.children) {
20918
- item.fixedEndOffset = offset;
20919
- for (const child of item.children) {
20920
- offset = setFixedEndOffset(child, offset);
20921
- }
20922
- } else if (item.fixed === 'end') {
20923
- item.fixedEndOffset = offset;
20924
- offset += parseFloat(item.width || '0') || 0;
20958
+ let fixedEndOffset = 0;
20959
+ for (let i = items.length - 1; i >= 0; i--) {
20960
+ fixedEndOffset = setFixedEndOffset(items[i], fixedEndOffset);
20961
+ }
20962
+ }
20963
+ function setFixedOffset(item) {
20964
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20965
+ if (!item) return offset;
20966
+ if (item.children) {
20967
+ item.fixedOffset = offset;
20968
+ for (const child of item.children) {
20969
+ offset = setFixedOffset(child, offset);
20925
20970
  }
20926
- return offset;
20971
+ } else if (item.fixed && item.fixed !== 'end') {
20972
+ item.fixedOffset = offset;
20973
+ offset += parseFloat(item.width || '0') || 0;
20927
20974
  }
20928
- let fixedEndOffset = 0;
20929
- for (const item of items.toReversed()) {
20930
- fixedEndOffset = setFixedEndOffset(item, fixedEndOffset);
20975
+ return offset;
20976
+ }
20977
+ function setFixedEndOffset(item) {
20978
+ let offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
20979
+ if (!item) return offset;
20980
+ if (item.children) {
20981
+ item.fixedEndOffset = offset;
20982
+ for (const child of item.children) {
20983
+ offset = setFixedEndOffset(child, offset);
20984
+ }
20985
+ } else if (item.fixed === 'end') {
20986
+ item.fixedEndOffset = offset;
20987
+ offset += parseFloat(item.width || '0') || 0;
20931
20988
  }
20989
+ return offset;
20932
20990
  }
20933
20991
  function parse(items, maxDepth) {
20934
20992
  const headers = [];
@@ -21594,6 +21652,15 @@ const VDataTableRows = genericComponent()({
21594
21652
  "item": item
21595
21653
  }, getPrefixedEventHandlers(attrs, ':group-header', () => slotProps)), slots);
21596
21654
  }
21655
+ if (item.type === 'group-summary') {
21656
+ const slotProps = {
21657
+ index,
21658
+ item,
21659
+ columns: columns.value,
21660
+ toggleGroup
21661
+ };
21662
+ return slots['group-summary']?.(slotProps) ?? '';
21663
+ }
21597
21664
  const slotProps = {
21598
21665
  index,
21599
21666
  item: item.raw,
@@ -21843,7 +21910,7 @@ const VDataTable = genericComponent()({
21843
21910
  });
21844
21911
  const {
21845
21912
  flatItems
21846
- } = useGroupedItems(sortedItems, groupBy, opened);
21913
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
21847
21914
  const itemsLength = computed(() => flatItems.value.length);
21848
21915
  const {
21849
21916
  startIndex,
@@ -22031,7 +22098,7 @@ const VDataTableVirtual = genericComponent()({
22031
22098
  });
22032
22099
  const {
22033
22100
  flatItems
22034
- } = useGroupedItems(sortedItems, groupBy, opened);
22101
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22035
22102
  const allItems = computed(() => extractRows(flatItems.value));
22036
22103
  const {
22037
22104
  isSelected,
@@ -22260,7 +22327,7 @@ const VDataTableServer = genericComponent()({
22260
22327
  });
22261
22328
  const {
22262
22329
  flatItems
22263
- } = useGroupedItems(items, groupBy, opened);
22330
+ } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);
22264
22331
  const {
22265
22332
  isSelected,
22266
22333
  select,
@@ -26013,6 +26080,7 @@ const VNumberInput = genericComponent()({
26013
26080
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
26014
26081
  if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
26015
26082
  e.preventDefault();
26083
+ e.stopPropagation();
26016
26084
  clampModel();
26017
26085
  // _model is controlled, so need to wait until props['modelValue'] is updated
26018
26086
  await nextTick();
@@ -30533,14 +30601,19 @@ const VTreeviewChildren = genericComponent()({
30533
30601
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30534
30602
  onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30535
30603
  };
30536
- return createVNode(VTreeviewItem, mergeProps({
30604
+ return renderSlot(slots.header, {
30605
+ props: listItemProps,
30606
+ item: item.raw,
30607
+ internalItem: item,
30608
+ loading
30609
+ }, () => createVNode(VTreeviewItem, mergeProps({
30537
30610
  "ref": el => activatorItems.value[index] = el
30538
30611
  }, listItemProps, {
30539
30612
  "hideActions": props.hideActions,
30540
30613
  "indentLines": indentLines.node,
30541
30614
  "value": props.returnObject ? item.raw : itemProps.value,
30542
30615
  "loading": loading
30543
- }), slotsWithItem);
30616
+ }), slotsWithItem));
30544
30617
  },
30545
30618
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30546
30619
  "items": children,
@@ -31342,12 +31415,23 @@ const VCalendar = genericComponent()({
31342
31415
 
31343
31416
  // Types
31344
31417
 
31418
+ const availablePipLocations = ['prepend', 'prepend-inner', 'append', 'append-inner'];
31345
31419
  const makeVColorInputProps = propsFactory({
31346
- pip: Boolean,
31420
+ hidePip: Boolean,
31421
+ colorPip: Boolean,
31347
31422
  pipIcon: {
31348
31423
  type: String,
31349
31424
  default: '$color'
31350
31425
  },
31426
+ pipLocation: {
31427
+ type: String,
31428
+ default: 'prepend',
31429
+ validator: v => availablePipLocations.includes(v)
31430
+ },
31431
+ pipVariant: {
31432
+ type: String,
31433
+ default: 'text'
31434
+ },
31351
31435
  ...makeFocusProps(),
31352
31436
  ...makeVConfirmEditProps(),
31353
31437
  ...makeVTextFieldProps(),
@@ -31391,8 +31475,15 @@ const VColorInput = genericComponent()({
31391
31475
  useRender(() => {
31392
31476
  const confirmEditProps = VConfirmEdit.filterProps(props);
31393
31477
  const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']));
31394
- const textFieldProps = VTextField.filterProps(omit(props, ['prependInnerIcon']));
31395
- const hasPrepend = !!(slots.prepend || props.pipIcon);
31478
+ const textFieldProps = VTextField.filterProps(props);
31479
+ const slotWithPip = props.hidePip ? undefined : {
31480
+ [props.pipLocation]: arg => createElementVNode(Fragment, null, [createVNode(VAvatar, {
31481
+ "class": "v-color-input__pip",
31482
+ "color": props.colorPip ? model.value : undefined,
31483
+ "variant": props.pipVariant,
31484
+ "icon": props.pipIcon
31485
+ }, null), slots[props.pipLocation]?.(arg)])
31486
+ };
31396
31487
  return createVNode(VTextField, mergeProps(textFieldProps, {
31397
31488
  "class": ['v-color-input', props.class],
31398
31489
  "style": props.style,
@@ -31408,10 +31499,7 @@ const VColorInput = genericComponent()({
31408
31499
  }
31409
31500
  }), {
31410
31501
  ...slots,
31411
- prepend: props.pipIcon ? arg => createElementVNode(Fragment, null, [hasPrepend && createVNode(VIcon, {
31412
- "color": props.pip ? model.value : undefined,
31413
- "icon": props.pipIcon
31414
- }, null), slots.prepend?.(arg)]) : undefined,
31502
+ ...slotWithPip,
31415
31503
  default: () => createElementVNode(Fragment, null, [createVNode(VMenu, {
31416
31504
  "modelValue": menu.value,
31417
31505
  "onUpdate:modelValue": $event => menu.value = $event,
@@ -35156,7 +35244,7 @@ function createVuetify$1() {
35156
35244
  };
35157
35245
  });
35158
35246
  }
35159
- const version$1 = "3.9.3-master.2025-07-30";
35247
+ const version$1 = "3.9.3-master.2025-07-31";
35160
35248
  createVuetify$1.version = version$1;
35161
35249
 
35162
35250
  // Vue's inject() can only be used in setup
@@ -35454,7 +35542,7 @@ var index = /*#__PURE__*/Object.freeze({
35454
35542
 
35455
35543
  /* eslint-disable local-rules/sort-imports */
35456
35544
 
35457
- const version = "3.9.3-master.2025-07-30";
35545
+ const version = "3.9.3-master.2025-07-31";
35458
35546
 
35459
35547
  /* eslint-disable local-rules/sort-imports */
35460
35548