vuetify 3.3.12 → 3.4.0-alpha.0

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 (267) hide show
  1. package/dist/json/attributes.json +152 -16
  2. package/dist/json/importMap.json +4 -4
  3. package/dist/json/tags.json +34 -0
  4. package/dist/json/web-types.json +462 -48
  5. package/dist/vuetify-labs.css +1718 -606
  6. package/dist/vuetify-labs.d.ts +880 -276
  7. package/dist/vuetify-labs.esm.js +373 -189
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +372 -188
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +1591 -479
  12. package/dist/vuetify.d.ts +865 -267
  13. package/dist/vuetify.esm.js +373 -189
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +372 -188
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +920 -905
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  21. package/lib/components/VAppBar/index.d.mts +6 -6
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +6 -2
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VAutocomplete/index.d.mts +62 -14
  25. package/lib/components/VAvatar/VAvatar.mjs +2 -1
  26. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  27. package/lib/components/VAvatar/index.d.mts +6 -0
  28. package/lib/components/VBanner/VBanner.mjs +5 -3
  29. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  30. package/lib/components/VBanner/index.d.mts +10 -0
  31. package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -0
  32. package/lib/components/VBottomNavigation/VBottomNavigation.sass +1 -0
  33. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +9 -4
  34. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  35. package/lib/components/VBreadcrumbs/index.d.mts +28 -2
  36. package/lib/components/VBtn/VBtn.css +3 -0
  37. package/lib/components/VBtn/VBtn.sass +3 -0
  38. package/lib/components/VCarousel/index.d.mts +26 -0
  39. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  40. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  41. package/lib/components/VCheckbox/VCheckboxBtn.mjs +14 -11
  42. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  43. package/lib/components/VCheckbox/index.d.mts +15 -1
  44. package/lib/components/VColorPicker/VColorPickerEdit.css +4 -2
  45. package/lib/components/VColorPicker/VColorPickerPreview.css +16 -6
  46. package/lib/components/VColorPicker/VColorPickerPreview.mjs +28 -2
  47. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  48. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -0
  49. package/lib/components/VColorPicker/_variables.scss +1 -0
  50. package/lib/components/VCombobox/VCombobox.mjs +6 -2
  51. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  52. package/lib/components/VCombobox/index.d.mts +62 -14
  53. package/lib/components/VDialog/index.d.mts +41 -20
  54. package/lib/components/VField/VField.css +11 -6
  55. package/lib/components/VField/VField.mjs +5 -3
  56. package/lib/components/VField/VField.mjs.map +1 -1
  57. package/lib/components/VField/VField.sass +1 -0
  58. package/lib/components/VField/index.d.mts +4 -4
  59. package/lib/components/VFileInput/VFileInput.css +4 -0
  60. package/lib/components/VFileInput/VFileInput.sass +5 -1
  61. package/lib/components/VFileInput/_variables.scss +2 -1
  62. package/lib/components/VFileInput/index.d.mts +4 -4
  63. package/lib/components/VGrid/VGrid.css +153 -142
  64. package/lib/components/VImg/VImg.mjs +13 -1
  65. package/lib/components/VImg/VImg.mjs.map +1 -1
  66. package/lib/components/VImg/index.d.mts +26 -0
  67. package/lib/components/VList/VList.css +1 -1
  68. package/lib/components/VList/VList.sass +1 -1
  69. package/lib/components/VList/VListItem.css +15 -10
  70. package/lib/components/VList/VListItem.mjs +6 -3
  71. package/lib/components/VList/VListItem.mjs.map +1 -1
  72. package/lib/components/VList/VListItem.sass +17 -10
  73. package/lib/components/VList/index.d.mts +12 -12
  74. package/lib/components/VMenu/VMenu.mjs +4 -3
  75. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  76. package/lib/components/VMenu/index.d.mts +46 -25
  77. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +0 -1
  78. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +5 -3
  79. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  80. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +0 -1
  81. package/lib/components/VNavigationDrawer/_variables.scss +0 -1
  82. package/lib/components/VNavigationDrawer/index.d.mts +10 -0
  83. package/lib/components/VOverlay/VOverlay.mjs +9 -4
  84. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  85. package/lib/components/VOverlay/index.d.mts +17 -8
  86. package/lib/components/VOverlay/locationStrategies.mjs +9 -9
  87. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  88. package/lib/components/VOverlay/scrollStrategies.mjs +3 -3
  89. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  90. package/lib/components/VOverlay/useActivator.mjs +50 -21
  91. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  92. package/lib/components/VProgressLinear/VProgressLinear.css +3 -2
  93. package/lib/components/VRadio/index.d.mts +9 -1
  94. package/lib/components/VRadioGroup/VRadioGroup.css +6 -1
  95. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  96. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  97. package/lib/components/VRadioGroup/VRadioGroup.sass +5 -0
  98. package/lib/components/VRadioGroup/_variables.scss +3 -1
  99. package/lib/components/VRadioGroup/index.d.mts +3 -1
  100. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -2
  101. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  102. package/lib/components/VRangeSlider/index.d.mts +128 -33
  103. package/lib/components/VSelect/VSelect.mjs +14 -2
  104. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  105. package/lib/components/VSelect/index.d.mts +62 -14
  106. package/lib/components/VSelectionControl/VSelectionControl.mjs +27 -21
  107. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  108. package/lib/components/VSelectionControl/index.d.mts +33 -25
  109. package/lib/components/VSlideGroup/VSlideGroup.mjs +5 -3
  110. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  111. package/lib/components/VSlideGroup/index.d.mts +10 -0
  112. package/lib/components/VSlider/VSlider.mjs +2 -1
  113. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  114. package/lib/components/VSlider/VSliderThumb.css +8 -4
  115. package/lib/components/VSlider/VSliderTrack.css +22 -12
  116. package/lib/components/VSlider/index.d.mts +128 -33
  117. package/lib/components/VSlider/slider.mjs +5 -1
  118. package/lib/components/VSlider/slider.mjs.map +1 -1
  119. package/lib/components/VSnackbar/index.d.mts +41 -20
  120. package/lib/components/VSwitch/VSwitch.css +24 -17
  121. package/lib/components/VSwitch/VSwitch.mjs +37 -28
  122. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  123. package/lib/components/VSwitch/VSwitch.sass +20 -11
  124. package/lib/components/VSwitch/_variables.scss +18 -6
  125. package/lib/components/VSwitch/index.d.mts +9 -1
  126. package/lib/components/VTabs/index.d.mts +10 -0
  127. package/lib/components/VTextField/VTextField.css +9 -2
  128. package/lib/components/VTextField/VTextField.mjs +6 -3
  129. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  130. package/lib/components/VTextField/VTextField.sass +10 -3
  131. package/lib/components/VTextField/index.d.mts +22 -16
  132. package/lib/components/VTextarea/VTextarea.mjs +1 -2
  133. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  134. package/lib/components/VTextarea/index.d.mts +4 -4
  135. package/lib/components/VTimeline/VTimeline.css +21 -11
  136. package/lib/components/VTimeline/VTimeline.sass +6 -1
  137. package/lib/components/VToolbar/VToolbar.css +4 -2
  138. package/lib/components/VTooltip/index.d.mts +41 -20
  139. package/lib/components/index.d.mts +836 -265
  140. package/lib/components/transitions/dialog-transition.mjs +4 -3
  141. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  142. package/lib/components/transitions/index.d.mts +6 -6
  143. package/lib/composables/defaults.mjs +9 -9
  144. package/lib/composables/defaults.mjs.map +1 -1
  145. package/lib/composables/directiveComponent.mjs +69 -0
  146. package/lib/composables/directiveComponent.mjs.map +1 -0
  147. package/lib/composables/display.mjs +23 -3
  148. package/lib/composables/display.mjs.map +1 -1
  149. package/lib/composables/theme.mjs +7 -7
  150. package/lib/composables/theme.mjs.map +1 -1
  151. package/lib/entry-bundler.mjs +1 -1
  152. package/lib/entry-bundler.mjs.map +1 -1
  153. package/lib/framework.mjs +1 -1
  154. package/lib/framework.mjs.map +1 -1
  155. package/lib/iconsets/fa.mjs +2 -1
  156. package/lib/iconsets/fa.mjs.map +1 -1
  157. package/lib/iconsets/fa4.mjs +2 -1
  158. package/lib/iconsets/fa4.mjs.map +1 -1
  159. package/lib/iconsets/md.mjs +2 -1
  160. package/lib/iconsets/md.mjs.map +1 -1
  161. package/lib/iconsets/mdi-svg.mjs +2 -1
  162. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  163. package/lib/iconsets/mdi.mjs +2 -1
  164. package/lib/iconsets/mdi.mjs.map +1 -1
  165. package/lib/index.d.mts +33 -2
  166. package/lib/labs/VBottomSheet/index.d.mts +14 -8
  167. package/lib/labs/VDateInput/index.d.mts +10 -4
  168. package/lib/labs/VDatePicker/VDatePickerControls.css +1 -1
  169. package/lib/labs/VOtpInput/index.d.mts +4 -4
  170. package/lib/labs/components.d.mts +18 -12
  171. package/lib/locale/af.mjs +1 -0
  172. package/lib/locale/af.mjs.map +1 -1
  173. package/lib/locale/ar.mjs +1 -0
  174. package/lib/locale/ar.mjs.map +1 -1
  175. package/lib/locale/az.mjs +1 -0
  176. package/lib/locale/az.mjs.map +1 -1
  177. package/lib/locale/bg.mjs +1 -0
  178. package/lib/locale/bg.mjs.map +1 -1
  179. package/lib/locale/ca.mjs +1 -0
  180. package/lib/locale/ca.mjs.map +1 -1
  181. package/lib/locale/ckb.mjs +1 -0
  182. package/lib/locale/ckb.mjs.map +1 -1
  183. package/lib/locale/cs.mjs +1 -0
  184. package/lib/locale/cs.mjs.map +1 -1
  185. package/lib/locale/da.mjs +1 -0
  186. package/lib/locale/da.mjs.map +1 -1
  187. package/lib/locale/de.mjs +1 -0
  188. package/lib/locale/de.mjs.map +1 -1
  189. package/lib/locale/el.mjs +1 -0
  190. package/lib/locale/el.mjs.map +1 -1
  191. package/lib/locale/en.mjs +1 -0
  192. package/lib/locale/en.mjs.map +1 -1
  193. package/lib/locale/es.mjs +1 -0
  194. package/lib/locale/es.mjs.map +1 -1
  195. package/lib/locale/et.mjs +1 -0
  196. package/lib/locale/et.mjs.map +1 -1
  197. package/lib/locale/fa.mjs +1 -0
  198. package/lib/locale/fa.mjs.map +1 -1
  199. package/lib/locale/fi.mjs +1 -0
  200. package/lib/locale/fi.mjs.map +1 -1
  201. package/lib/locale/fr.mjs +1 -0
  202. package/lib/locale/fr.mjs.map +1 -1
  203. package/lib/locale/he.mjs +1 -0
  204. package/lib/locale/he.mjs.map +1 -1
  205. package/lib/locale/hr.mjs +1 -0
  206. package/lib/locale/hr.mjs.map +1 -1
  207. package/lib/locale/hu.mjs +1 -0
  208. package/lib/locale/hu.mjs.map +1 -1
  209. package/lib/locale/id.mjs +1 -0
  210. package/lib/locale/id.mjs.map +1 -1
  211. package/lib/locale/index.d.mts +42 -0
  212. package/lib/locale/it.mjs +1 -0
  213. package/lib/locale/it.mjs.map +1 -1
  214. package/lib/locale/ja.mjs +1 -0
  215. package/lib/locale/ja.mjs.map +1 -1
  216. package/lib/locale/ko.mjs +1 -0
  217. package/lib/locale/ko.mjs.map +1 -1
  218. package/lib/locale/lt.mjs +1 -0
  219. package/lib/locale/lt.mjs.map +1 -1
  220. package/lib/locale/lv.mjs +1 -0
  221. package/lib/locale/lv.mjs.map +1 -1
  222. package/lib/locale/nl.mjs +1 -0
  223. package/lib/locale/nl.mjs.map +1 -1
  224. package/lib/locale/no.mjs +1 -0
  225. package/lib/locale/no.mjs.map +1 -1
  226. package/lib/locale/pl.mjs +1 -0
  227. package/lib/locale/pl.mjs.map +1 -1
  228. package/lib/locale/pt.mjs +1 -0
  229. package/lib/locale/pt.mjs.map +1 -1
  230. package/lib/locale/ro.mjs +1 -0
  231. package/lib/locale/ro.mjs.map +1 -1
  232. package/lib/locale/ru.mjs +1 -0
  233. package/lib/locale/ru.mjs.map +1 -1
  234. package/lib/locale/sk.mjs +1 -0
  235. package/lib/locale/sk.mjs.map +1 -1
  236. package/lib/locale/sl.mjs +1 -0
  237. package/lib/locale/sl.mjs.map +1 -1
  238. package/lib/locale/sr-Cyrl.mjs +1 -0
  239. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  240. package/lib/locale/sr-Latn.mjs +1 -0
  241. package/lib/locale/sr-Latn.mjs.map +1 -1
  242. package/lib/locale/sv.mjs +1 -0
  243. package/lib/locale/sv.mjs.map +1 -1
  244. package/lib/locale/th.mjs +1 -0
  245. package/lib/locale/th.mjs.map +1 -1
  246. package/lib/locale/tr.mjs +1 -0
  247. package/lib/locale/tr.mjs.map +1 -1
  248. package/lib/locale/uk.mjs +1 -0
  249. package/lib/locale/uk.mjs.map +1 -1
  250. package/lib/locale/vi.mjs +1 -0
  251. package/lib/locale/vi.mjs.map +1 -1
  252. package/lib/locale/zh-Hans.mjs +1 -0
  253. package/lib/locale/zh-Hans.mjs.map +1 -1
  254. package/lib/locale/zh-Hant.mjs +1 -0
  255. package/lib/locale/zh-Hant.mjs.map +1 -1
  256. package/lib/styles/main.css +1026 -0
  257. package/lib/styles/settings/_utilities.scss +20 -0
  258. package/lib/styles/tools/_rtl.sass +4 -2
  259. package/lib/util/box.mjs +12 -0
  260. package/lib/util/box.mjs.map +1 -1
  261. package/lib/util/globals.mjs +1 -0
  262. package/lib/util/globals.mjs.map +1 -1
  263. package/lib/util/helpers.mjs +19 -5
  264. package/lib/util/helpers.mjs.map +1 -1
  265. package/lib/util/injectSelf.mjs +2 -1
  266. package/lib/util/injectSelf.mjs.map +1 -1
  267. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.3.12
2
+ * Vuetify v3.4.0-alpha.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, warn, watch, onScopeDispose, effectScope, ref, unref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, readonly, onDeactivated, onActivated, onMounted, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onBeforeUpdate, vModelText, withModifiers } from 'vue';
7
+ import { Fragment, reactive, computed, watchEffect, toRefs, capitalize, warn, ref, unref, provide, shallowRef, inject as inject$1, defineComponent as defineComponent$1, camelize, h, getCurrentInstance as getCurrentInstance$1, onBeforeUnmount, watch, readonly, onDeactivated, onActivated, onMounted, onScopeDispose, effectScope, toRaw, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, vModelText, withModifiers } from 'vue';
8
8
 
9
9
  // Types
10
10
  // eslint-disable-line vue/prefer-import-from-vue
@@ -74,6 +74,7 @@ const makeComponentProps = propsFactory({
74
74
  const IN_BROWSER = typeof window !== 'undefined';
75
75
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
76
76
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
77
+ const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
77
78
 
78
79
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
79
80
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -157,7 +158,15 @@ function isObject(obj) {
157
158
  return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
158
159
  }
159
160
  function refElement(obj) {
160
- return obj && '$el' in obj ? obj.$el : obj;
161
+ if (obj && '$el' in obj) {
162
+ const el = obj.$el;
163
+ if (el?.nodeType === Node.TEXT_NODE) {
164
+ // Multi-root component, use the first element
165
+ return el.nextElementSibling;
166
+ }
167
+ return el;
168
+ }
169
+ return obj;
161
170
  }
162
171
 
163
172
  // KeyboardEvent.keyCode aliases
@@ -229,14 +238,22 @@ function only(obj, include) {
229
238
  include.forEach(prop => clone[prop] = obj[prop]);
230
239
  return clone;
231
240
  }
241
+ const onRE = /^on[^a-z]/;
242
+ const isOn = key => onRE.test(key);
243
+ const bubblingEvents = ['onAfterscriptexecute', 'onAnimationcancel', 'onAnimationend', 'onAnimationiteration', 'onAnimationstart', 'onAuxclick', 'onBeforeinput', 'onBeforescriptexecute', 'onChange', 'onClick', 'onCompositionend', 'onCompositionstart', 'onCompositionupdate', 'onContextmenu', 'onCopy', 'onCut', 'onDblclick', 'onFocusin', 'onFocusout', 'onFullscreenchange', 'onFullscreenerror', 'onGesturechange', 'onGestureend', 'onGesturestart', 'onGotpointercapture', 'onInput', 'onKeydown', 'onKeypress', 'onKeyup', 'onLostpointercapture', 'onMousedown', 'onMousemove', 'onMouseout', 'onMouseover', 'onMouseup', 'onMousewheel', 'onPaste', 'onPointercancel', 'onPointerdown', 'onPointerenter', 'onPointerleave', 'onPointermove', 'onPointerout', 'onPointerover', 'onPointerup', 'onReset', 'onSelect', 'onSubmit', 'onTouchcancel', 'onTouchend', 'onTouchmove', 'onTouchstart', 'onTransitioncancel', 'onTransitionend', 'onTransitionrun', 'onTransitionstart', 'onWheel'];
232
244
 
233
245
  /**
234
246
  * Filter attributes that should be applied to
235
- * the root element of a an input component. Remaining
247
+ * the root element of an input component. Remaining
236
248
  * attributes should be passed to the <input> element inside.
237
249
  */
238
250
  function filterInputAttrs(attrs) {
239
- return pick(attrs, ['class', 'style', 'id', /^data-/]);
251
+ const [events, props] = pick(attrs, [onRE]);
252
+ const inputEvents = omit(events, bubblingEvents);
253
+ const [rootAttrs, inputAttrs] = pick(props, ['class', 'style', 'id', /^data-/]);
254
+ Object.assign(rootAttrs, events);
255
+ Object.assign(inputAttrs, inputEvents);
256
+ return [rootAttrs, inputAttrs];
240
257
  }
241
258
  function wrapInArray(v) {
242
259
  return v == null ? [] : Array.isArray(v) ? v : [v];
@@ -389,8 +406,6 @@ function destructComputed(getter) {
389
406
  function includes(arr, val) {
390
407
  return arr.includes(val);
391
408
  }
392
- const onRE = /^on[^a-z]/;
393
- const isOn = key => onRE.test(key);
394
409
  function eventName(propName) {
395
410
  return propName[2].toLowerCase() + propName.slice(3);
396
411
  }
@@ -550,6 +565,18 @@ function getOverflow(a, b) {
550
565
  }
551
566
  };
552
567
  }
568
+ function getTargetBox(target) {
569
+ if (Array.isArray(target)) {
570
+ return new Box({
571
+ x: target[0],
572
+ y: target[1],
573
+ width: 0,
574
+ height: 0
575
+ });
576
+ } else {
577
+ return target.getBoundingClientRect();
578
+ }
579
+ }
553
580
 
554
581
  // Utilities
555
582
 
@@ -1021,34 +1048,6 @@ function getContrast(first, second) {
1021
1048
 
1022
1049
  // Types
1023
1050
 
1024
- function useToggleScope(source, fn) {
1025
- let scope;
1026
- function start() {
1027
- scope = effectScope();
1028
- scope.run(() => fn.length ? fn(() => {
1029
- scope?.stop();
1030
- start();
1031
- }) : fn());
1032
- }
1033
- watch(source, active => {
1034
- if (active && !scope) {
1035
- start();
1036
- } else if (!active) {
1037
- scope?.stop();
1038
- scope = undefined;
1039
- }
1040
- }, {
1041
- immediate: true
1042
- });
1043
- onScopeDispose(() => {
1044
- scope?.stop();
1045
- });
1046
- }
1047
-
1048
- // Composables
1049
-
1050
- // Types
1051
-
1052
1051
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
1053
1052
  function createDefaults(options) {
1054
1053
  return ref(options);
@@ -1067,6 +1066,7 @@ function provideDefaults(defaults, options) {
1067
1066
  const scoped = unref(options?.scoped);
1068
1067
  const reset = unref(options?.reset);
1069
1068
  const root = unref(options?.root);
1069
+ if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
1070
1070
  let properties = mergeDeep(providedDefaults.value, {
1071
1071
  prev: injectedDefaults.value
1072
1072
  });
@@ -1122,16 +1122,16 @@ function internalUseDefaults() {
1122
1122
  let [key] = _ref;
1123
1123
  return key.startsWith(key[0].toUpperCase());
1124
1124
  });
1125
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1125
+ _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
1126
+ } else {
1127
+ _subcomponentDefaults.value = undefined;
1126
1128
  }
1127
1129
  });
1128
1130
  function provideSubDefaults() {
1129
- // If subcomponent defaults are provided, override any
1130
- // subcomponents provided by the component's setup function.
1131
- // This uses injectSelf so must be done after the original setup to work.
1132
- useToggleScope(_subcomponentDefaults, () => {
1133
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1134
- });
1131
+ const injected = injectSelf(DefaultsSymbol, vm);
1132
+ provide(DefaultsSymbol, computed(() => {
1133
+ return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
1134
+ }));
1135
1135
  }
1136
1136
  return {
1137
1137
  props: _props,
@@ -1313,9 +1313,10 @@ function isPotentiallyScrollable(el) {
1313
1313
  // Types
1314
1314
 
1315
1315
  function injectSelf(key) {
1316
+ let vm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstance('injectSelf');
1316
1317
  const {
1317
1318
  provides
1318
- } = getCurrentInstance('injectSelf');
1319
+ } = vm;
1319
1320
  if (provides && key in provides) {
1320
1321
  // TS doesn't allow symbol as index type
1321
1322
  return provides[key];
@@ -1653,6 +1654,7 @@ function createLayout(props) {
1653
1654
 
1654
1655
  var en = {
1655
1656
  badge: 'Badge',
1657
+ open: 'Open',
1656
1658
  close: 'Close',
1657
1659
  dataIterator: {
1658
1660
  noResultsText: 'No matching records found',
@@ -1791,6 +1793,34 @@ const defaultRtl = {
1791
1793
  zhHant: false
1792
1794
  };
1793
1795
 
1796
+ // Utilities
1797
+
1798
+ // Types
1799
+
1800
+ function useToggleScope(source, fn) {
1801
+ let scope;
1802
+ function start() {
1803
+ scope = effectScope();
1804
+ scope.run(() => fn.length ? fn(() => {
1805
+ scope?.stop();
1806
+ start();
1807
+ }) : fn());
1808
+ }
1809
+ watch(source, active => {
1810
+ if (active && !scope) {
1811
+ start();
1812
+ } else if (!active) {
1813
+ scope?.stop();
1814
+ scope = undefined;
1815
+ }
1816
+ }, {
1817
+ immediate: true
1818
+ });
1819
+ onScopeDispose(() => {
1820
+ scope?.stop();
1821
+ });
1822
+ }
1823
+
1794
1824
  // Composables
1795
1825
 
1796
1826
  // Types
@@ -2103,9 +2133,9 @@ const defaultThemeOptions = {
2103
2133
  surface: '#FFFFFF',
2104
2134
  'surface-variant': '#424242',
2105
2135
  'on-surface-variant': '#EEEEEE',
2106
- primary: '#6200EE',
2107
- 'primary-darken-1': '#3700B3',
2108
- secondary: '#03DAC6',
2136
+ primary: '#1867C0',
2137
+ 'primary-darken-1': '#1F5592',
2138
+ secondary: '#48A9A6',
2109
2139
  'secondary-darken-1': '#018786',
2110
2140
  error: '#B00020',
2111
2141
  info: '#2196F3',
@@ -2138,10 +2168,10 @@ const defaultThemeOptions = {
2138
2168
  surface: '#212121',
2139
2169
  'surface-variant': '#BDBDBD',
2140
2170
  'on-surface-variant': '#424242',
2141
- primary: '#BB86FC',
2142
- 'primary-darken-1': '#3700B3',
2143
- secondary: '#03DAC5',
2144
- 'secondary-darken-1': '#03DAC5',
2171
+ primary: '#2196F3',
2172
+ 'primary-darken-1': '#277CC1',
2173
+ secondary: '#54B6B2',
2174
+ 'secondary-darken-1': '#48A9A6',
2145
2175
  error: '#CF6679',
2146
2176
  info: '#2196F3',
2147
2177
  success: '#4CAF50',
@@ -2626,7 +2656,7 @@ function ExpandTransitionGenerator () {
2626
2656
  // Types
2627
2657
 
2628
2658
  const makeVDialogTransitionProps = propsFactory({
2629
- target: Object
2659
+ target: [Object, Array]
2630
2660
  }, 'v-dialog-transition');
2631
2661
  const VDialogTransition = genericComponent()({
2632
2662
  name: 'VDialogTransition',
@@ -2728,7 +2758,7 @@ function getChildren(el) {
2728
2758
  return els && [...els];
2729
2759
  }
2730
2760
  function getDimensions(target, el) {
2731
- const targetBox = target.getBoundingClientRect();
2761
+ const targetBox = getTargetBox(target);
2732
2762
  const elBox = nullifyTransforms(el);
2733
2763
  const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v));
2734
2764
  const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ');
@@ -2974,6 +3004,10 @@ const Intersect = {
2974
3004
  const makeVImgProps = propsFactory({
2975
3005
  alt: String,
2976
3006
  cover: Boolean,
3007
+ draggable: {
3008
+ type: [Boolean, String],
3009
+ default: undefined
3010
+ },
2977
3011
  eager: Boolean,
2978
3012
  gradient: String,
2979
3013
  lazySrc: String,
@@ -2992,6 +3026,8 @@ const makeVImgProps = propsFactory({
2992
3026
  type: [String, Object],
2993
3027
  default: ''
2994
3028
  },
3029
+ crossorigin: String,
3030
+ referrerpolicy: String,
2995
3031
  srcset: String,
2996
3032
  ...makeVResponsiveProps(),
2997
3033
  ...makeComponentProps(),
@@ -3116,6 +3152,9 @@ const VImg = genericComponent()({
3116
3152
  "src": normalisedSrc.value.src,
3117
3153
  "srcset": normalisedSrc.value.srcset,
3118
3154
  "alt": props.alt,
3155
+ "crossorigin": props.crossorigin,
3156
+ "referrerpolicy": props.referrerpolicy,
3157
+ "draggable": props.draggable,
3119
3158
  "sizes": props.sizes,
3120
3159
  "ref": image,
3121
3160
  "onLoad": onLoad,
@@ -3137,7 +3176,10 @@ const VImg = genericComponent()({
3137
3176
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && createVNode("img", {
3138
3177
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
3139
3178
  "src": normalisedSrc.value.lazySrc,
3140
- "alt": props.alt
3179
+ "alt": props.alt,
3180
+ "crossorigin": props.crossorigin,
3181
+ "referrerpolicy": props.referrerpolicy,
3182
+ "draggable": props.draggable
3141
3183
  }, null)]
3142
3184
  });
3143
3185
  const __placeholder = () => {
@@ -4156,7 +4198,8 @@ const aliases = {
4156
4198
  file: 'mdi-paperclip',
4157
4199
  plus: 'mdi-plus',
4158
4200
  minus: 'mdi-minus',
4159
- calendar: 'mdi-calendar'
4201
+ calendar: 'mdi-calendar',
4202
+ eyeDropper: 'mdi-eyedropper'
4160
4203
  };
4161
4204
  const mdi = {
4162
4205
  // Not using mergeProps here, functional components merge props by default (?)
@@ -5746,6 +5789,7 @@ const VSelectionControlGroup = genericComponent()({
5746
5789
 
5747
5790
  const makeVSelectionControlProps = propsFactory({
5748
5791
  label: String,
5792
+ baseColor: String,
5749
5793
  trueValue: null,
5750
5794
  falseValue: null,
5751
5795
  value: null,
@@ -5784,7 +5828,8 @@ function useSelectionControl(props) {
5784
5828
  textColorClasses,
5785
5829
  textColorStyles
5786
5830
  } = useTextColor(computed(() => {
5787
- return model.value && !props.error && !props.disabled ? props.color : undefined;
5831
+ if (props.error || props.disabled) return undefined;
5832
+ return model.value ? props.color : props.baseColor;
5788
5833
  }));
5789
5834
  const icon = computed(() => model.value ? props.trueIcon : props.falseIcon);
5790
5835
  return {
@@ -5856,6 +5901,20 @@ const VSelectionControl = genericComponent()({
5856
5901
  }
5857
5902
  }) : props.label;
5858
5903
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
5904
+ const inputNode = createVNode("input", mergeProps({
5905
+ "ref": input,
5906
+ "checked": model.value,
5907
+ "disabled": !!(props.readonly || props.disabled),
5908
+ "id": id.value,
5909
+ "onBlur": onBlur,
5910
+ "onFocus": onFocus,
5911
+ "onInput": onInput,
5912
+ "aria-disabled": !!(props.readonly || props.disabled),
5913
+ "type": props.type,
5914
+ "value": trueValue.value,
5915
+ "name": props.name,
5916
+ "aria-checked": props.type === 'checkbox' ? model.value : undefined
5917
+ }, inputAttrs), null);
5859
5918
  return createVNode("div", mergeProps({
5860
5919
  "class": ['v-selection-control', {
5861
5920
  'v-selection-control--dirty': model.value,
@@ -5872,34 +5931,24 @@ const VSelectionControl = genericComponent()({
5872
5931
  "style": textColorStyles.value
5873
5932
  }, [slots.default?.(), withDirectives(createVNode("div", {
5874
5933
  "class": ['v-selection-control__input']
5875
- }, [icon.value && createVNode(VIcon, {
5876
- "key": "icon",
5877
- "icon": icon.value
5878
- }, null), createVNode("input", mergeProps({
5879
- "ref": input,
5880
- "checked": model.value,
5881
- "disabled": !!(props.readonly || props.disabled),
5882
- "id": id.value,
5883
- "onBlur": onBlur,
5884
- "onFocus": onFocus,
5885
- "onInput": onInput,
5886
- "aria-disabled": !!(props.readonly || props.disabled),
5887
- "type": props.type,
5888
- "value": trueValue.value,
5889
- "name": props.name,
5890
- "aria-checked": props.type === 'checkbox' ? model.value : undefined
5891
- }, inputAttrs), null), slots.input?.({
5934
+ }, [slots.input?.({
5892
5935
  model,
5893
5936
  textColorClasses,
5894
5937
  textColorStyles,
5938
+ inputNode,
5939
+ icon: icon.value,
5895
5940
  props: {
5896
5941
  onFocus,
5897
5942
  onBlur,
5898
5943
  id: id.value
5899
5944
  }
5900
- })]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
5945
+ }) ?? createVNode(Fragment, null, [icon.value && createVNode(VIcon, {
5946
+ "key": "icon",
5947
+ "icon": icon.value
5948
+ }, null), inputNode])]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
5901
5949
  "for": id.value,
5902
- "clickable": true
5950
+ "clickable": true,
5951
+ "onClick": e => e.stopPropagation()
5903
5952
  }, {
5904
5953
  default: () => [label]
5905
5954
  })]);
@@ -5948,16 +5997,19 @@ const VCheckboxBtn = genericComponent()({
5948
5997
  const trueIcon = computed(() => {
5949
5998
  return indeterminate.value ? props.indeterminateIcon : props.trueIcon;
5950
5999
  });
5951
- useRender(() => createVNode(VSelectionControl, mergeProps(props, {
5952
- "modelValue": model.value,
5953
- "onUpdate:modelValue": [$event => model.value = $event, onChange],
5954
- "class": ['v-checkbox-btn', props.class],
5955
- "style": props.style,
5956
- "type": "checkbox",
5957
- "falseIcon": falseIcon.value,
5958
- "trueIcon": trueIcon.value,
5959
- "aria-checked": indeterminate.value ? 'mixed' : undefined
5960
- }), slots));
6000
+ useRender(() => {
6001
+ const controlProps = omit(VSelectionControl.filterProps(props)[0], ['modelValue']);
6002
+ return createVNode(VSelectionControl, mergeProps(controlProps, {
6003
+ "modelValue": model.value,
6004
+ "onUpdate:modelValue": [$event => model.value = $event, onChange],
6005
+ "class": ['v-checkbox-btn', props.class],
6006
+ "style": props.style,
6007
+ "type": "checkbox",
6008
+ "falseIcon": falseIcon.value,
6009
+ "trueIcon": trueIcon.value,
6010
+ "aria-checked": indeterminate.value ? 'mixed' : undefined
6011
+ }), slots);
6012
+ });
5961
6013
  return {};
5962
6014
  }
5963
6015
  });
@@ -6521,12 +6573,12 @@ const VCheckbox = genericComponent()({
6521
6573
  const uid = getUid();
6522
6574
  const id = computed(() => props.id || `checkbox-${uid}`);
6523
6575
  useRender(() => {
6524
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6576
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
6525
6577
  const [inputProps, _1] = VInput.filterProps(props);
6526
6578
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6527
6579
  return createVNode(VInput, mergeProps({
6528
6580
  "class": ['v-checkbox', props.class]
6529
- }, inputAttrs, inputProps, {
6581
+ }, rootAttrs, inputProps, {
6530
6582
  "modelValue": model.value,
6531
6583
  "onUpdate:modelValue": $event => model.value = $event,
6532
6584
  "id": id.value,
@@ -6564,6 +6616,7 @@ const makeVAvatarProps = propsFactory({
6564
6616
  end: Boolean,
6565
6617
  icon: IconValue,
6566
6618
  image: String,
6619
+ text: String,
6567
6620
  ...makeComponentProps(),
6568
6621
  ...makeDensityProps(),
6569
6622
  ...makeRoundedProps(),
@@ -6614,7 +6667,7 @@ const VAvatar = genericComponent()({
6614
6667
  }, null) : props.icon ? createVNode(VIcon, {
6615
6668
  "key": "icon",
6616
6669
  "icon": props.icon
6617
- }, null) : slots.default?.(), genOverlays(false, 'v-avatar')]
6670
+ }, null) : slots.default?.() ?? props.text, genOverlays(false, 'v-avatar')]
6618
6671
  }));
6619
6672
  return {};
6620
6673
  }
@@ -7666,7 +7719,6 @@ const VListItem = genericComponent()({
7666
7719
  "style": [colorStyles.value, dimensionStyles.value, props.style],
7667
7720
  "href": link.href.value,
7668
7721
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
7669
- "title": props.title,
7670
7722
  "onClick": onClick,
7671
7723
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7672
7724
  }, {
@@ -7699,7 +7751,9 @@ const VListItem = genericComponent()({
7699
7751
  }
7700
7752
  }, {
7701
7753
  default: () => [slots.prepend?.(slotProps.value)]
7702
- })]), createVNode("div", {
7754
+ }), createVNode("div", {
7755
+ "class": "v-list-item__spacer"
7756
+ }, null)]), createVNode("div", {
7703
7757
  "class": "v-list-item__content",
7704
7758
  "data-no-activator": ""
7705
7759
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7743,7 +7797,9 @@ const VListItem = genericComponent()({
7743
7797
  }
7744
7798
  }, {
7745
7799
  default: () => [slots.append?.(slotProps.value)]
7746
- })])]
7800
+ }), createVNode("div", {
7801
+ "class": "v-list-item__spacer"
7802
+ }, null)])]
7747
7803
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7748
7804
  });
7749
7805
  return {};
@@ -8392,7 +8448,7 @@ function getIntrinsicSize(el, isRtl) {
8392
8448
  return contentBox;
8393
8449
  }
8394
8450
  function connectedLocationStrategy(data, props, contentStyles) {
8395
- const activatorFixed = isFixedPosition(data.activatorEl.value);
8451
+ const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value);
8396
8452
  if (activatorFixed) {
8397
8453
  Object.assign(contentStyles.value, {
8398
8454
  position: 'fixed',
@@ -8441,11 +8497,11 @@ function connectedLocationStrategy(data, props, contentStyles) {
8441
8497
  const observer = new ResizeObserver(() => {
8442
8498
  if (observe) updateLocation();
8443
8499
  });
8444
- watch([data.activatorEl, data.contentEl], (_ref, _ref2) => {
8445
- let [newActivatorEl, newContentEl] = _ref;
8446
- let [oldActivatorEl, oldContentEl] = _ref2;
8447
- if (oldActivatorEl) observer.unobserve(oldActivatorEl);
8448
- if (newActivatorEl) observer.observe(newActivatorEl);
8500
+ watch([data.target, data.contentEl], (_ref, _ref2) => {
8501
+ let [newTarget, newContentEl] = _ref;
8502
+ let [oldTarget, oldContentEl] = _ref2;
8503
+ if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget);
8504
+ if (newTarget && !Array.isArray(newTarget)) observer.observe(newTarget);
8449
8505
  if (oldContentEl) observer.unobserve(oldContentEl);
8450
8506
  if (newContentEl) observer.observe(newContentEl);
8451
8507
  }, {
@@ -8461,8 +8517,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
8461
8517
  requestAnimationFrame(() => {
8462
8518
  requestAnimationFrame(() => observe = true);
8463
8519
  });
8464
- if (!data.activatorEl.value || !data.contentEl.value) return;
8465
- const targetBox = data.activatorEl.value.getBoundingClientRect();
8520
+ if (!data.target.value || !data.contentEl.value) return;
8521
+ const targetBox = getTargetBox(data.target.value);
8466
8522
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
8467
8523
  const scrollParents = getScrollParents(data.contentEl.value);
8468
8524
  const viewportMargin = 12;
@@ -8749,11 +8805,11 @@ function closeScrollStrategy(data) {
8749
8805
  function onScroll(e) {
8750
8806
  data.isActive.value = false;
8751
8807
  }
8752
- bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll);
8808
+ bindScroll(data.targetEl.value ?? data.contentEl.value, onScroll);
8753
8809
  }
8754
8810
  function blockScrollStrategy(data, props) {
8755
8811
  const offsetParent = data.root.value?.offsetParent;
8756
- const scrollElements = [...new Set([...getScrollParents(data.activatorEl.value, props.contained ? offsetParent : undefined), ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined)])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'));
8812
+ const scrollElements = [...new Set([...getScrollParents(data.targetEl.value, props.contained ? offsetParent : undefined), ...getScrollParents(data.contentEl.value, props.contained ? offsetParent : undefined)])].filter(el => !el.classList.contains('v-overlay-scroll-blocked'));
8757
8813
  const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth;
8758
8814
  const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement);
8759
8815
  if (scrollableParent) {
@@ -8797,7 +8853,7 @@ function repositionScrollStrategy(data, props, scope) {
8797
8853
  }
8798
8854
  ric = (typeof requestIdleCallback === 'undefined' ? cb => cb() : requestIdleCallback)(() => {
8799
8855
  scope.run(() => {
8800
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
8856
+ bindScroll(data.targetEl.value ?? data.contentEl.value, e => {
8801
8857
  if (slow) {
8802
8858
  // If the position calculation is slow,
8803
8859
  // defer updates until scrolling is finished.
@@ -8878,6 +8934,7 @@ function useDelay(props, cb) {
8878
8934
  // Types
8879
8935
 
8880
8936
  const makeActivatorProps = propsFactory({
8937
+ target: [String, Object],
8881
8938
  activator: [String, Object],
8882
8939
  activatorProps: {
8883
8940
  type: Object,
@@ -8900,6 +8957,7 @@ function useActivator(props, _ref) {
8900
8957
  isActive,
8901
8958
  isTop
8902
8959
  } = _ref;
8960
+ const vm = getCurrentInstance('useActivator');
8903
8961
  const activatorEl = ref();
8904
8962
  let isHovered = false;
8905
8963
  let isFocused = false;
@@ -8917,10 +8975,14 @@ function useActivator(props, _ref) {
8917
8975
  isActive.value = value;
8918
8976
  }
8919
8977
  });
8978
+ const cursorTarget = ref();
8920
8979
  const availableEvents = {
8921
8980
  onClick: e => {
8922
8981
  e.stopPropagation();
8923
8982
  activatorEl.value = e.currentTarget || e.target;
8983
+ if (!isActive.value) {
8984
+ cursorTarget.value = [e.clientX, e.clientY];
8985
+ }
8924
8986
  isActive.value = !isActive.value;
8925
8987
  },
8926
8988
  onMouseenter: e => {
@@ -9014,6 +9076,15 @@ function useActivator(props, _ref) {
9014
9076
  isActive.value = false;
9015
9077
  }
9016
9078
  });
9079
+ watch(isActive, val => {
9080
+ if (!val) {
9081
+ setTimeout(() => {
9082
+ cursorTarget.value = undefined;
9083
+ });
9084
+ }
9085
+ }, {
9086
+ flush: 'post'
9087
+ });
9017
9088
  const activatorRef = ref();
9018
9089
  watchEffect(() => {
9019
9090
  if (!activatorRef.value) return;
@@ -9021,7 +9092,15 @@ function useActivator(props, _ref) {
9021
9092
  activatorEl.value = refElement(activatorRef.value);
9022
9093
  });
9023
9094
  });
9024
- const vm = getCurrentInstance('useActivator');
9095
+ const targetRef = ref();
9096
+ const target = computed(() => {
9097
+ if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
9098
+ if (targetRef.value) return refElement(targetRef.value);
9099
+ return getTarget(props.target, vm) || activatorEl.value;
9100
+ });
9101
+ const targetEl = computed(() => {
9102
+ return Array.isArray(target.value) ? undefined : target.value;
9103
+ });
9025
9104
  let scope;
9026
9105
  watch(() => !!props.activator, val => {
9027
9106
  if (val && IN_BROWSER) {
@@ -9045,6 +9124,9 @@ function useActivator(props, _ref) {
9045
9124
  return {
9046
9125
  activatorEl,
9047
9126
  activatorRef,
9127
+ target,
9128
+ targetEl,
9129
+ targetRef,
9048
9130
  activatorEvents,
9049
9131
  contentEvents,
9050
9132
  scrimEvents
@@ -9086,31 +9168,34 @@ function _useActivator(props, vm, _ref2) {
9086
9168
  }
9087
9169
  function getActivator() {
9088
9170
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
9089
- let activator;
9090
- if (selector) {
9091
- if (selector === 'parent') {
9092
- let el = vm?.proxy?.$el?.parentNode;
9093
- while (el.hasAttribute('data-no-activator')) {
9094
- el = el.parentNode;
9095
- }
9096
- activator = el;
9097
- } else if (typeof selector === 'string') {
9098
- // Selector
9099
- activator = document.querySelector(selector);
9100
- } else if ('$el' in selector) {
9101
- // Component (ref)
9102
- activator = selector.$el;
9103
- } else {
9104
- // HTMLElement | Element
9105
- activator = selector;
9106
- }
9107
- }
9171
+ const activator = getTarget(selector, vm);
9108
9172
 
9109
9173
  // The activator should only be a valid element (Ignore comments and text nodes)
9110
- activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null;
9174
+ activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;
9111
9175
  return activatorEl.value;
9112
9176
  }
9113
9177
  }
9178
+ function getTarget(selector, vm) {
9179
+ if (!selector) return;
9180
+ let target;
9181
+ if (selector === 'parent') {
9182
+ let el = vm?.proxy?.$el?.parentNode;
9183
+ while (el.hasAttribute('data-no-activator')) {
9184
+ el = el.parentNode;
9185
+ }
9186
+ target = el;
9187
+ } else if (typeof selector === 'string') {
9188
+ // Selector
9189
+ target = document.querySelector(selector);
9190
+ } else if ('$el' in selector) {
9191
+ // Component (ref)
9192
+ target = selector.$el;
9193
+ } else {
9194
+ // HTMLElement | Element | [x, y]
9195
+ target = selector;
9196
+ }
9197
+ return target;
9198
+ }
9114
9199
 
9115
9200
  // Utilities
9116
9201
 
@@ -9234,10 +9319,30 @@ function createDisplay(options, ssr) {
9234
9319
  ssr: !!ssr
9235
9320
  };
9236
9321
  }
9322
+ const makeDisplayProps = propsFactory({
9323
+ mobileBreakpoint: [Number, String]
9324
+ }, 'display');
9237
9325
  function useDisplay() {
9326
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9327
+ let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
9238
9328
  const display = inject$1(DisplaySymbol);
9239
9329
  if (!display) throw new Error('Could not find Vuetify display injection');
9240
- return display;
9330
+ const mobile = computed(() => {
9331
+ if (!props.mobileBreakpoint) return display.mobile.value;
9332
+ const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
9333
+ return display.width.value < breakpointValue;
9334
+ });
9335
+ const displayClasses = computed(() => {
9336
+ if (!name) return {};
9337
+ return {
9338
+ [`${name}--mobile`]: mobile.value
9339
+ };
9340
+ });
9341
+ return {
9342
+ ...display,
9343
+ displayClasses,
9344
+ mobile
9345
+ };
9241
9346
  }
9242
9347
 
9243
9348
  // Composables
@@ -9554,6 +9659,9 @@ const VOverlay = genericComponent()({
9554
9659
  const {
9555
9660
  activatorEl,
9556
9661
  activatorRef,
9662
+ target,
9663
+ targetEl,
9664
+ targetRef,
9557
9665
  activatorEvents,
9558
9666
  contentEvents,
9559
9667
  scrimEvents
@@ -9579,13 +9687,13 @@ const VOverlay = genericComponent()({
9579
9687
  } = useLocationStrategies(props, {
9580
9688
  isRtl,
9581
9689
  contentEl,
9582
- activatorEl,
9690
+ target,
9583
9691
  isActive
9584
9692
  });
9585
9693
  useScrollStrategies(props, {
9586
9694
  root,
9587
9695
  contentEl,
9588
- activatorEl,
9696
+ targetEl,
9589
9697
  isActive,
9590
9698
  updateLocation
9591
9699
  });
@@ -9653,7 +9761,8 @@ const VOverlay = genericComponent()({
9653
9761
  useRender(() => createVNode(Fragment, null, [slots.activator?.({
9654
9762
  isActive: isActive.value,
9655
9763
  props: mergeProps({
9656
- ref: activatorRef
9764
+ ref: activatorRef,
9765
+ targetRef
9657
9766
  }, activatorEvents.value, props.activatorProps)
9658
9767
  }), isMounted.value && hasContent.value && createVNode(Teleport, {
9659
9768
  "disabled": !teleportTarget.value,
@@ -9676,7 +9785,7 @@ const VOverlay = genericComponent()({
9676
9785
  "appear": true,
9677
9786
  "persisted": true,
9678
9787
  "transition": props.transition,
9679
- "target": activatorEl.value,
9788
+ "target": target.value,
9680
9789
  "onAfterLeave": () => {
9681
9790
  onAfterLeave();
9682
9791
  emit('afterLeave');
@@ -9697,6 +9806,7 @@ const VOverlay = genericComponent()({
9697
9806
  })]));
9698
9807
  return {
9699
9808
  activatorEl,
9809
+ target,
9700
9810
  animateClick,
9701
9811
  contentEl,
9702
9812
  globalTop,
@@ -9854,10 +9964,11 @@ const VMenu = genericComponent()({
9854
9964
  }, 40);
9855
9965
  }
9856
9966
  });
9857
- function onFocusIn(e) {
9967
+ async function onFocusIn(e) {
9858
9968
  const before = e.relatedTarget;
9859
9969
  const after = e.target;
9860
- if (before !== after && overlay.value?.contentEl &&
9970
+ await nextTick();
9971
+ if (isActive.value && before !== after && overlay.value?.contentEl &&
9861
9972
  // We're the topmost menu
9862
9973
  overlay.value?.globalTop &&
9863
9974
  // It isn't the document or the menu body
@@ -10193,7 +10304,7 @@ const VField = genericComponent()({
10193
10304
  'v-field--no-label': !label,
10194
10305
  [`v-field--variant-${props.variant}`]: true
10195
10306
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
10196
- "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
10307
+ "style": [backgroundColorStyles.value, props.style],
10197
10308
  "onClick": onClick
10198
10309
  }, attrs), [createVNode("div", {
10199
10310
  "class": "v-field__overlay"
@@ -10217,7 +10328,8 @@ const VField = genericComponent()({
10217
10328
  "ref": floatingLabelRef,
10218
10329
  "class": [textColorClasses.value],
10219
10330
  "floating": true,
10220
- "for": id.value
10331
+ "for": id.value,
10332
+ "style": textColorStyles.value
10221
10333
  }, {
10222
10334
  default: () => [label]
10223
10335
  }), createVNode(VFieldLabel, {
@@ -10253,7 +10365,8 @@ const VField = genericComponent()({
10253
10365
  "key": "append-icon",
10254
10366
  "name": "appendInner"
10255
10367
  }, null)]), createVNode("div", {
10256
- "class": ['v-field__outline', textColorClasses.value]
10368
+ "class": ['v-field__outline', textColorClasses.value],
10369
+ "style": textColorStyles.value
10257
10370
  }, [isOutlined && createVNode(Fragment, null, [createVNode("div", {
10258
10371
  "class": "v-field__outline__start"
10259
10372
  }, null), hasLabel.value && createVNode("div", {
@@ -10297,6 +10410,7 @@ const makeVTextFieldProps = propsFactory({
10297
10410
  persistentPlaceholder: Boolean,
10298
10411
  persistentCounter: Boolean,
10299
10412
  suffix: String,
10413
+ role: String,
10300
10414
  type: {
10301
10415
  type: String,
10302
10416
  default: 'text'
@@ -10421,7 +10535,7 @@ const VTextField = genericComponent()({
10421
10535
  "onClick:clear": onClear,
10422
10536
  "onClick:prependInner": props['onClick:prependInner'],
10423
10537
  "onClick:appendInner": props['onClick:appendInner'],
10424
- "role": "textbox"
10538
+ "role": props.role
10425
10539
  }, fieldProps, {
10426
10540
  "id": id.value,
10427
10541
  "active": isActive.value || isDirty.value,
@@ -10460,10 +10574,12 @@ const VTextField = genericComponent()({
10460
10574
  "class": "v-text-field__prefix"
10461
10575
  }, [createVNode("span", {
10462
10576
  "class": "v-text-field__prefix__text"
10463
- }, [props.prefix])]), createVNode("div", {
10577
+ }, [props.prefix])]), slots.default ? createVNode("div", {
10464
10578
  "class": fieldClass,
10465
10579
  "data-no-activator": ""
10466
- }, [slots.default ? createVNode(Fragment, null, [slots.default(), inputNode]) : cloneVNode(inputNode)]), props.suffix && createVNode("span", {
10580
+ }, [slots.default(), inputNode]) : cloneVNode(inputNode, {
10581
+ class: fieldClass
10582
+ }), props.suffix && createVNode("span", {
10467
10583
  "class": "v-text-field__suffix"
10468
10584
  }, [createVNode("span", {
10469
10585
  "class": "v-text-field__suffix__text"
@@ -10782,6 +10898,14 @@ function useScrolling(listRef, textFieldRef) {
10782
10898
  const makeSelectProps = propsFactory({
10783
10899
  chips: Boolean,
10784
10900
  closableChips: Boolean,
10901
+ closeText: {
10902
+ type: String,
10903
+ default: '$vuetify.close'
10904
+ },
10905
+ openText: {
10906
+ type: String,
10907
+ default: '$vuetify.open'
10908
+ },
10785
10909
  eager: Boolean,
10786
10910
  hideNoData: Boolean,
10787
10911
  hideSelected: Boolean,
@@ -10811,7 +10935,8 @@ const makeSelectProps = propsFactory({
10811
10935
  const makeVSelectProps = propsFactory({
10812
10936
  ...makeSelectProps(),
10813
10937
  ...omit(makeVTextFieldProps({
10814
- modelValue: null
10938
+ modelValue: null,
10939
+ role: 'button'
10815
10940
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
10816
10941
  ...makeTransitionProps({
10817
10942
  transition: {
@@ -10866,6 +10991,7 @@ const VSelect = genericComponent()({
10866
10991
  });
10867
10992
  const selected = computed(() => selections.value.map(selection => selection.props.value));
10868
10993
  const isFocused = shallowRef(false);
10994
+ const label = computed(() => menu.value ? props.closeText : props.openText);
10869
10995
  let keyboardLookupPrefix = '';
10870
10996
  let keyboardLookupLastTime;
10871
10997
  const displayItems = computed(() => {
@@ -10992,7 +11118,9 @@ const VSelect = genericComponent()({
10992
11118
  "onClick:clear": onClear,
10993
11119
  "onMousedown:control": onMousedownControl,
10994
11120
  "onBlur": onBlur,
10995
- "onKeydown": onKeydown
11121
+ "onKeydown": onKeydown,
11122
+ "aria-label": t(label.value),
11123
+ "title": t(label.value)
10996
11124
  }), {
10997
11125
  ...slots,
10998
11126
  default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
@@ -11255,7 +11383,8 @@ const makeVAutocompleteProps = propsFactory({
11255
11383
  }),
11256
11384
  ...makeSelectProps(),
11257
11385
  ...omit(makeVTextFieldProps({
11258
- modelValue: null
11386
+ modelValue: null,
11387
+ role: 'combobox'
11259
11388
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
11260
11389
  ...makeTransitionProps({
11261
11390
  transition: false
@@ -11292,6 +11421,7 @@ const VAutocomplete = genericComponent()({
11292
11421
  });
11293
11422
  const selectionIndex = shallowRef(-1);
11294
11423
  const color = computed(() => vTextFieldRef.value?.color);
11424
+ const label = computed(() => menu.value ? props.closeText : props.openText);
11295
11425
  const {
11296
11426
  items,
11297
11427
  transformIn,
@@ -11639,7 +11769,9 @@ const VAutocomplete = genericComponent()({
11639
11769
  "class": "v-autocomplete__menu-icon",
11640
11770
  "icon": props.menuIcon,
11641
11771
  "onMousedown": onMousedownMenuIcon,
11642
- "onClick": noop
11772
+ "onClick": noop,
11773
+ "aria-label": t(label.value),
11774
+ "title": t(label.value)
11643
11775
  }, null) : undefined]);
11644
11776
  }
11645
11777
  });
@@ -11794,6 +11926,7 @@ const makeVBannerProps = propsFactory({
11794
11926
  ...makeComponentProps(),
11795
11927
  ...makeDensityProps(),
11796
11928
  ...makeDimensionProps(),
11929
+ ...makeDisplayProps(),
11797
11930
  ...makeElevationProps(),
11798
11931
  ...makeLocationProps(),
11799
11932
  ...makePositionProps(),
@@ -11815,8 +11948,9 @@ const VBanner = genericComponent()({
11815
11948
  densityClasses
11816
11949
  } = useDensity(props);
11817
11950
  const {
11951
+ displayClasses,
11818
11952
  mobile
11819
- } = useDisplay();
11953
+ } = useDisplay(props);
11820
11954
  const {
11821
11955
  dimensionStyles
11822
11956
  } = useDimension(props);
@@ -11852,7 +11986,7 @@ const VBanner = genericComponent()({
11852
11986
  'v-banner--stacked': props.stacked || mobile.value,
11853
11987
  'v-banner--sticky': props.sticky,
11854
11988
  [`v-banner--${props.lines}-line`]: !!props.lines
11855
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11989
+ }, borderClasses.value, densityClasses.value, displayClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11856
11990
  "style": [dimensionStyles.value, locationStyles.value, props.style],
11857
11991
  "role": "banner"
11858
11992
  }, {
@@ -12159,12 +12293,17 @@ const VBreadcrumbs = genericComponent()({
12159
12293
  item,
12160
12294
  raw
12161
12295
  } = _ref2;
12162
- return createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
12163
- "key": item.title,
12296
+ return createVNode(Fragment, null, [slots.item?.({
12297
+ item,
12298
+ index
12299
+ }) ?? createVNode(VBreadcrumbsItem, mergeProps({
12300
+ "key": index,
12164
12301
  "disabled": index >= array.length - 1
12165
- }, item), {
12302
+ }, typeof item === 'string' ? {
12303
+ title: item
12304
+ } : item), {
12166
12305
  default: slots.title ? () => slots.title?.({
12167
- item: raw,
12306
+ item,
12168
12307
  index
12169
12308
  }) : undefined
12170
12309
  }), index < array.length - 1 && createVNode(VBreadcrumbsDivider, null, {
@@ -13502,7 +13641,11 @@ const makeSliderProps = propsFactory({
13502
13641
  ...makeRoundedProps(),
13503
13642
  ...makeElevationProps({
13504
13643
  elevation: 2
13505
- })
13644
+ }),
13645
+ ripple: {
13646
+ type: Boolean,
13647
+ default: true
13648
+ }
13506
13649
  }, 'Slider');
13507
13650
  const useSteps = props => {
13508
13651
  const min = computed(() => parseFloat(props.min));
@@ -14109,7 +14252,8 @@ const VSlider = genericComponent()({
14109
14252
  "position": trackStop.value,
14110
14253
  "elevation": props.elevation,
14111
14254
  "onFocus": focus,
14112
- "onBlur": blur
14255
+ "onBlur": blur,
14256
+ "ripple": props.ripple
14113
14257
  }, {
14114
14258
  'thumb-label': slots['thumb-label']
14115
14259
  })]);
@@ -14140,12 +14284,36 @@ const VColorPickerPreview = defineComponent({
14140
14284
  let {
14141
14285
  emit
14142
14286
  } = _ref;
14287
+ const abortController = new AbortController();
14288
+ onUnmounted(() => abortController.abort());
14289
+ async function openEyeDropper() {
14290
+ if (!SUPPORTS_EYE_DROPPER) return;
14291
+ const eyeDropper = new window.EyeDropper();
14292
+ try {
14293
+ const result = await eyeDropper.open({
14294
+ signal: abortController.signal
14295
+ });
14296
+ const colorHexValue = HexToHSV(result.sRGBHex);
14297
+ emit('update:color', {
14298
+ ...(props.color ?? nullColor),
14299
+ ...colorHexValue
14300
+ });
14301
+ } catch (e) {}
14302
+ }
14143
14303
  useRender(() => createVNode("div", {
14144
14304
  "class": ['v-color-picker-preview', {
14145
14305
  'v-color-picker-preview--hide-alpha': props.hideAlpha
14146
14306
  }, props.class],
14147
14307
  "style": props.style
14148
- }, [createVNode("div", {
14308
+ }, [SUPPORTS_EYE_DROPPER && createVNode("div", {
14309
+ "class": "v-color-picker-preview__eye-dropper",
14310
+ "key": "eyeDropper"
14311
+ }, [createVNode(VBtn, {
14312
+ "onClick": openEyeDropper,
14313
+ "icon": "$eyeDropper",
14314
+ "variant": "plain",
14315
+ "density": "comfortable"
14316
+ }, null)]), createVNode("div", {
14149
14317
  "class": "v-color-picker-preview__dot"
14150
14318
  }, [createVNode("div", {
14151
14319
  "style": {
@@ -14783,7 +14951,8 @@ const makeVComboboxProps = propsFactory({
14783
14951
  returnObject: true
14784
14952
  }),
14785
14953
  ...omit(makeVTextFieldProps({
14786
- modelValue: null
14954
+ modelValue: null,
14955
+ role: 'combobox'
14787
14956
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
14788
14957
  ...makeTransitionProps({
14789
14958
  transition: false
@@ -14822,6 +14991,7 @@ const VCombobox = genericComponent()({
14822
14991
  const selectionIndex = shallowRef(-1);
14823
14992
  let cleared = false;
14824
14993
  const color = computed(() => vTextFieldRef.value?.color);
14994
+ const label = computed(() => menu.value ? props.closeText : props.openText);
14825
14995
  const {
14826
14996
  items,
14827
14997
  transformIn,
@@ -15197,7 +15367,9 @@ const VCombobox = genericComponent()({
15197
15367
  "class": "v-combobox__menu-icon",
15198
15368
  "icon": props.menuIcon,
15199
15369
  "onMousedown": onMousedownMenuIcon,
15200
- "onClick": noop
15370
+ "onClick": noop,
15371
+ "aria-label": t(label.value),
15372
+ "title": t(label.value)
15201
15373
  }, null) : undefined]);
15202
15374
  }
15203
15375
  });
@@ -16812,6 +16984,7 @@ const makeVNavigationDrawerProps = propsFactory({
16812
16984
  sticky: Boolean,
16813
16985
  ...makeBorderProps(),
16814
16986
  ...makeComponentProps(),
16987
+ ...makeDisplayProps(),
16815
16988
  ...makeElevationProps(),
16816
16989
  ...makeLayoutItemProps(),
16817
16990
  ...makeRoundedProps(),
@@ -16850,8 +17023,9 @@ const VNavigationDrawer = genericComponent()({
16850
17023
  elevationClasses
16851
17024
  } = useElevation(props);
16852
17025
  const {
17026
+ displayClasses,
16853
17027
  mobile
16854
- } = useDisplay();
17028
+ } = useDisplay(props);
16855
17029
  const {
16856
17030
  roundedClasses
16857
17031
  } = useRounded(props);
@@ -16962,7 +17136,7 @@ const VNavigationDrawer = genericComponent()({
16962
17136
  'v-navigation-drawer--temporary': isTemporary.value,
16963
17137
  'v-navigation-drawer--active': isActive.value,
16964
17138
  'v-navigation-drawer--sticky': isSticky.value
16965
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17139
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16966
17140
  "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16967
17141
  }, scopeId, attrs), {
16968
17142
  default: () => [hasImage && createVNode("div", {
@@ -17490,7 +17664,7 @@ const VRadioGroup = genericComponent()({
17490
17664
  const id = computed(() => props.id || `radio-group-${uid}`);
17491
17665
  const model = useProxiedModel(props, 'modelValue');
17492
17666
  useRender(() => {
17493
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
17667
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
17494
17668
  const [inputProps, _1] = VInput.filterProps(props);
17495
17669
  const [controlProps, _2] = VSelectionControl.filterProps(props);
17496
17670
  const label = slots.label ? slots.label({
@@ -17502,7 +17676,7 @@ const VRadioGroup = genericComponent()({
17502
17676
  return createVNode(VInput, mergeProps({
17503
17677
  "class": ['v-radio-group', props.class],
17504
17678
  "style": props.style
17505
- }, inputAttrs, inputProps, {
17679
+ }, rootAttrs, inputProps, {
17506
17680
  "modelValue": model.value,
17507
17681
  "onUpdate:modelValue": $event => model.value = $event,
17508
17682
  "id": id.value
@@ -17710,7 +17884,8 @@ const VRangeSlider = genericComponent()({
17710
17884
  },
17711
17885
  "min": min.value,
17712
17886
  "max": model.value[1],
17713
- "position": trackStart.value
17887
+ "position": trackStart.value,
17888
+ "ripple": props.ripple
17714
17889
  }, {
17715
17890
  'thumb-label': slots['thumb-label']
17716
17891
  }), createVNode(VSliderThumb, {
@@ -17738,7 +17913,8 @@ const VRangeSlider = genericComponent()({
17738
17913
  },
17739
17914
  "min": model.value[0],
17740
17915
  "max": max.value,
17741
- "position": trackStop.value
17916
+ "position": trackStop.value,
17917
+ "ripple": props.ripple
17742
17918
  }, {
17743
17919
  'thumb-label': slots['thumb-label']
17744
17920
  })]);
@@ -18012,6 +18188,7 @@ const makeVSlideGroupProps = propsFactory({
18012
18188
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
18013
18189
  },
18014
18190
  ...makeComponentProps(),
18191
+ ...makeDisplayProps(),
18015
18192
  ...makeTagProps(),
18016
18193
  ...makeGroupProps({
18017
18194
  selectedClass: 'v-slide-group-item--active'
@@ -18031,8 +18208,9 @@ const VSlideGroup = genericComponent()({
18031
18208
  isRtl
18032
18209
  } = useRtl();
18033
18210
  const {
18211
+ displayClasses,
18034
18212
  mobile
18035
- } = useDisplay();
18213
+ } = useDisplay(props);
18036
18214
  const group = useGroup(props, props.symbol);
18037
18215
  const isOverflowing = shallowRef(false);
18038
18216
  const scrollOffset = shallowRef(0);
@@ -18252,7 +18430,7 @@ const VSlideGroup = genericComponent()({
18252
18430
  'v-slide-group--vertical': !isHorizontal.value,
18253
18431
  'v-slide-group--has-affixes': hasAffixes.value,
18254
18432
  'v-slide-group--is-overflowing': isOverflowing.value
18255
- }, props.class],
18433
+ }, displayClasses.value, props.class],
18256
18434
  "style": props.style,
18257
18435
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
18258
18436
  "onFocus": onFocus
@@ -18479,6 +18657,7 @@ const VSwitch = genericComponent()({
18479
18657
  focus,
18480
18658
  blur
18481
18659
  } = useFocus(props);
18660
+ const control = ref();
18482
18661
  const loaderColor = computed(() => {
18483
18662
  return typeof props.loading === 'string' && props.loading !== '' ? props.loading : props.color;
18484
18663
  });
@@ -18489,16 +18668,15 @@ const VSwitch = genericComponent()({
18489
18668
  indeterminate.value = false;
18490
18669
  }
18491
18670
  }
18671
+ function onTrackClick(e) {
18672
+ e.stopPropagation();
18673
+ e.preventDefault();
18674
+ control.value?.input?.click();
18675
+ }
18492
18676
  useRender(() => {
18493
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
18677
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
18494
18678
  const [inputProps, _1] = VInput.filterProps(props);
18495
18679
  const [controlProps, _2] = VSelectionControl.filterProps(props);
18496
- const control = ref();
18497
- function onClick(e) {
18498
- e.stopPropagation();
18499
- e.preventDefault();
18500
- control.value?.input?.click();
18501
- }
18502
18680
  return createVNode(VInput, mergeProps({
18503
18681
  "class": ['v-switch', {
18504
18682
  'v-switch--inset': props.inset
@@ -18506,7 +18684,7 @@ const VSwitch = genericComponent()({
18506
18684
  'v-switch--indeterminate': indeterminate.value
18507
18685
  }, loaderClasses.value, props.class],
18508
18686
  "style": props.style
18509
- }, inputAttrs, inputProps, {
18687
+ }, rootAttrs, inputProps, {
18510
18688
  "id": id.value,
18511
18689
  "focused": isFocused.value
18512
18690
  }), {
@@ -18536,29 +18714,36 @@ const VSwitch = genericComponent()({
18536
18714
  ...slots,
18537
18715
  default: () => createVNode("div", {
18538
18716
  "class": "v-switch__track",
18539
- "onClick": onClick
18717
+ "onClick": onTrackClick
18540
18718
  }, null),
18541
18719
  input: _ref3 => {
18542
18720
  let {
18543
- textColorClasses,
18544
- textColorStyles
18721
+ inputNode,
18722
+ icon
18545
18723
  } = _ref3;
18546
- return createVNode("div", {
18547
- "class": ['v-switch__thumb', textColorClasses.value],
18548
- "style": textColorStyles.value
18549
- }, [props.loading && createVNode(LoaderSlot, {
18550
- "name": "v-switch",
18551
- "active": true,
18552
- "color": isValid.value === false ? undefined : loaderColor.value
18553
- }, {
18554
- default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
18555
- "active": slotProps.isActive,
18556
- "color": slotProps.color,
18557
- "indeterminate": true,
18558
- "size": "16",
18559
- "width": "2"
18560
- }, null)
18561
- })]);
18724
+ return createVNode(Fragment, null, [inputNode, createVNode("div", {
18725
+ "class": ['v-switch__thumb', {
18726
+ 'v-switch__thumb--filled': icon || props.loading
18727
+ }]
18728
+ }, [createVNode(VScaleTransition, null, {
18729
+ default: () => [!props.loading ? icon && createVNode(VIcon, {
18730
+ "key": icon,
18731
+ "icon": icon,
18732
+ "size": "x-small"
18733
+ }, null) : createVNode(LoaderSlot, {
18734
+ "name": "v-switch",
18735
+ "active": true,
18736
+ "color": isValid.value === false ? undefined : loaderColor.value
18737
+ }, {
18738
+ default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
18739
+ "active": slotProps.isActive,
18740
+ "color": slotProps.color,
18741
+ "indeterminate": true,
18742
+ "size": "16",
18743
+ "width": "2"
18744
+ }, null)
18745
+ })]
18746
+ })])]);
18562
18747
  }
18563
18748
  });
18564
18749
  }
@@ -19039,8 +19224,7 @@ const VTextarea = genericComponent()({
19039
19224
  "onMousedown": onControlMousedown,
19040
19225
  "onClick:clear": onClear,
19041
19226
  "onClick:prependInner": props['onClick:prependInner'],
19042
- "onClick:appendInner": props['onClick:appendInner'],
19043
- "role": "textbox"
19227
+ "onClick:appendInner": props['onClick:appendInner']
19044
19228
  }, fieldProps, {
19045
19229
  "active": isActive.value || isDirty.value,
19046
19230
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
@@ -24392,7 +24576,7 @@ function createVuetify$1() {
24392
24576
  date
24393
24577
  };
24394
24578
  }
24395
- const version$1 = "3.3.12";
24579
+ const version$1 = "3.4.0-alpha.0";
24396
24580
  createVuetify$1.version = version$1;
24397
24581
 
24398
24582
  // Vue's inject() can only be used in setup
@@ -24406,7 +24590,7 @@ function inject(key) {
24406
24590
 
24407
24591
  /* eslint-disable local-rules/sort-imports */
24408
24592
 
24409
- const version = "3.3.12";
24593
+ const version = "3.4.0-alpha.0";
24410
24594
 
24411
24595
  /* eslint-disable local-rules/sort-imports */
24412
24596