@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
  */
@@ -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
 
@@ -2851,9 +2870,9 @@ function useTheme() {
2851
2870
 
2852
2871
  const makeVAppProps = propsFactory({
2853
2872
  ...makeComponentProps(),
2854
- ...makeLayoutProps({
2873
+ ...omit(makeLayoutProps({
2855
2874
  fullHeight: true
2856
- }),
2875
+ }), ['fullHeight']),
2857
2876
  ...makeThemeProps()
2858
2877
  }, 'VApp');
2859
2878
  const VApp = genericComponent()({
@@ -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,
@@ -21630,8 +21697,6 @@ const VDataTableRows = genericComponent()({
21630
21697
  }
21631
21698
  });
21632
21699
 
21633
- // Types
21634
-
21635
21700
  const makeVTableProps = propsFactory({
21636
21701
  fixedHeader: Boolean,
21637
21702
  fixedFooter: Boolean,
@@ -21661,26 +21726,37 @@ const VTable = genericComponent()({
21661
21726
  const {
21662
21727
  densityClasses
21663
21728
  } = useDensity(props);
21664
- useRender(() => createVNode(props.tag, {
21665
- "class": normalizeClass(['v-table', {
21666
- 'v-table--fixed-height': !!props.height,
21667
- 'v-table--fixed-header': props.fixedHeader,
21668
- 'v-table--fixed-footer': props.fixedFooter,
21669
- 'v-table--has-top': !!slots.top,
21670
- 'v-table--has-bottom': !!slots.bottom,
21671
- 'v-table--hover': props.hover,
21672
- 'v-table--striped-even': props.striped === 'even',
21673
- 'v-table--striped-odd': props.striped === 'odd'
21674
- }, themeClasses.value, densityClasses.value, props.class]),
21675
- "style": normalizeStyle(props.style)
21676
- }, {
21677
- default: () => [slots.top?.(), slots.default ? createElementVNode("div", {
21678
- "class": "v-table__wrapper",
21679
- "style": {
21680
- height: convertToUnit(props.height)
21729
+ useRender(() => {
21730
+ const tableContentDefaults = {
21731
+ VCheckboxBtn: {
21732
+ density: props.density
21681
21733
  }
21682
- }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.(), slots.bottom?.()]
21683
- }));
21734
+ };
21735
+ return createVNode(props.tag, {
21736
+ "class": normalizeClass(['v-table', {
21737
+ 'v-table--fixed-height': !!props.height,
21738
+ 'v-table--fixed-header': props.fixedHeader,
21739
+ 'v-table--fixed-footer': props.fixedFooter,
21740
+ 'v-table--has-top': !!slots.top,
21741
+ 'v-table--has-bottom': !!slots.bottom,
21742
+ 'v-table--hover': props.hover,
21743
+ 'v-table--striped-even': props.striped === 'even',
21744
+ 'v-table--striped-odd': props.striped === 'odd'
21745
+ }, themeClasses.value, densityClasses.value, props.class]),
21746
+ "style": normalizeStyle(props.style)
21747
+ }, {
21748
+ default: () => [slots.top?.(), createVNode(VDefaultsProvider, {
21749
+ "defaults": tableContentDefaults
21750
+ }, {
21751
+ default: () => [slots.default ? createElementVNode("div", {
21752
+ "class": "v-table__wrapper",
21753
+ "style": {
21754
+ height: convertToUnit(props.height)
21755
+ }
21756
+ }, [createElementVNode("table", null, [slots.default()])]) : slots.wrapper?.()]
21757
+ }), slots.bottom?.()]
21758
+ });
21759
+ });
21684
21760
  return {};
21685
21761
  }
21686
21762
  });
@@ -21843,7 +21919,7 @@ const VDataTable = genericComponent()({
21843
21919
  });
21844
21920
  const {
21845
21921
  flatItems
21846
- } = useGroupedItems(sortedItems, groupBy, opened);
21922
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
21847
21923
  const itemsLength = computed(() => flatItems.value.length);
21848
21924
  const {
21849
21925
  startIndex,
@@ -22031,7 +22107,7 @@ const VDataTableVirtual = genericComponent()({
22031
22107
  });
22032
22108
  const {
22033
22109
  flatItems
22034
- } = useGroupedItems(sortedItems, groupBy, opened);
22110
+ } = useGroupedItems(sortedItems, groupBy, opened, () => !!slots['group-summary']);
22035
22111
  const allItems = computed(() => extractRows(flatItems.value));
22036
22112
  const {
22037
22113
  isSelected,
@@ -22260,7 +22336,7 @@ const VDataTableServer = genericComponent()({
22260
22336
  });
22261
22337
  const {
22262
22338
  flatItems
22263
- } = useGroupedItems(items, groupBy, opened);
22339
+ } = useGroupedItems(items, groupBy, opened, () => !!slots['group-summary']);
22264
22340
  const {
22265
22341
  isSelected,
22266
22342
  select,
@@ -26013,6 +26089,7 @@ const VNumberInput = genericComponent()({
26013
26089
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
26014
26090
  if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
26015
26091
  e.preventDefault();
26092
+ e.stopPropagation();
26016
26093
  clampModel();
26017
26094
  // _model is controlled, so need to wait until props['modelValue'] is updated
26018
26095
  await nextTick();
@@ -30533,14 +30610,19 @@ const VTreeviewChildren = genericComponent()({
30533
30610
  onToggleExpand: [() => checkChildren(item), activatorProps.onClick],
30534
30611
  onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : () => selectItem(activatorItems.value[index]?.select, !activatorItems.value[index]?.isSelected)
30535
30612
  };
30536
- return createVNode(VTreeviewItem, mergeProps({
30613
+ return renderSlot(slots.header, {
30614
+ props: listItemProps,
30615
+ item: item.raw,
30616
+ internalItem: item,
30617
+ loading
30618
+ }, () => createVNode(VTreeviewItem, mergeProps({
30537
30619
  "ref": el => activatorItems.value[index] = el
30538
30620
  }, listItemProps, {
30539
30621
  "hideActions": props.hideActions,
30540
30622
  "indentLines": indentLines.node,
30541
30623
  "value": props.returnObject ? item.raw : itemProps.value,
30542
30624
  "loading": loading
30543
- }), slotsWithItem);
30625
+ }), slotsWithItem));
30544
30626
  },
30545
30627
  default: () => createVNode(VTreeviewChildren, mergeProps(treeviewChildrenProps, {
30546
30628
  "items": children,
@@ -31342,12 +31424,23 @@ const VCalendar = genericComponent()({
31342
31424
 
31343
31425
  // Types
31344
31426
 
31427
+ const availablePipLocations = ['prepend', 'prepend-inner', 'append', 'append-inner'];
31345
31428
  const makeVColorInputProps = propsFactory({
31346
- pip: Boolean,
31429
+ hidePip: Boolean,
31430
+ colorPip: Boolean,
31347
31431
  pipIcon: {
31348
31432
  type: String,
31349
31433
  default: '$color'
31350
31434
  },
31435
+ pipLocation: {
31436
+ type: String,
31437
+ default: 'prepend',
31438
+ validator: v => availablePipLocations.includes(v)
31439
+ },
31440
+ pipVariant: {
31441
+ type: String,
31442
+ default: 'text'
31443
+ },
31351
31444
  ...makeFocusProps(),
31352
31445
  ...makeVConfirmEditProps(),
31353
31446
  ...makeVTextFieldProps(),
@@ -31391,8 +31484,15 @@ const VColorInput = genericComponent()({
31391
31484
  useRender(() => {
31392
31485
  const confirmEditProps = VConfirmEdit.filterProps(props);
31393
31486
  const colorPickerProps = VColorPicker.filterProps(omit(props, ['active', 'color']));
31394
- const textFieldProps = VTextField.filterProps(omit(props, ['prependInnerIcon']));
31395
- const hasPrepend = !!(slots.prepend || props.pipIcon);
31487
+ const textFieldProps = VTextField.filterProps(props);
31488
+ const slotWithPip = props.hidePip ? undefined : {
31489
+ [props.pipLocation]: arg => createElementVNode(Fragment, null, [createVNode(VAvatar, {
31490
+ "class": "v-color-input__pip",
31491
+ "color": props.colorPip ? model.value : undefined,
31492
+ "variant": props.pipVariant,
31493
+ "icon": props.pipIcon
31494
+ }, null), slots[props.pipLocation]?.(arg)])
31495
+ };
31396
31496
  return createVNode(VTextField, mergeProps(textFieldProps, {
31397
31497
  "class": ['v-color-input', props.class],
31398
31498
  "style": props.style,
@@ -31408,10 +31508,7 @@ const VColorInput = genericComponent()({
31408
31508
  }
31409
31509
  }), {
31410
31510
  ...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,
31511
+ ...slotWithPip,
31415
31512
  default: () => createElementVNode(Fragment, null, [createVNode(VMenu, {
31416
31513
  "modelValue": menu.value,
31417
31514
  "onUpdate:modelValue": $event => menu.value = $event,
@@ -35156,7 +35253,7 @@ function createVuetify$1() {
35156
35253
  };
35157
35254
  });
35158
35255
  }
35159
- const version$1 = "3.9.3-master.2025-07-30";
35256
+ const version$1 = "3.9.3-master.2025-08-01";
35160
35257
  createVuetify$1.version = version$1;
35161
35258
 
35162
35259
  // Vue's inject() can only be used in setup
@@ -35454,7 +35551,7 @@ var index = /*#__PURE__*/Object.freeze({
35454
35551
 
35455
35552
  /* eslint-disable local-rules/sort-imports */
35456
35553
 
35457
- const version = "3.9.3-master.2025-07-30";
35554
+ const version = "3.9.3-master.2025-08-01";
35458
35555
 
35459
35556
  /* eslint-disable local-rules/sort-imports */
35460
35557