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 } 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 } 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
@@ -224,14 +233,22 @@ function omit(obj, exclude) {
224
233
  exclude.forEach(prop => delete clone[prop]);
225
234
  return clone;
226
235
  }
236
+ const onRE = /^on[^a-z]/;
237
+ const isOn = key => onRE.test(key);
238
+ 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'];
227
239
 
228
240
  /**
229
241
  * Filter attributes that should be applied to
230
- * the root element of a an input component. Remaining
242
+ * the root element of an input component. Remaining
231
243
  * attributes should be passed to the <input> element inside.
232
244
  */
233
245
  function filterInputAttrs(attrs) {
234
- return pick(attrs, ['class', 'style', 'id', /^data-/]);
246
+ const [events, props] = pick(attrs, [onRE]);
247
+ const inputEvents = omit(events, bubblingEvents);
248
+ const [rootAttrs, inputAttrs] = pick(props, ['class', 'style', 'id', /^data-/]);
249
+ Object.assign(rootAttrs, events);
250
+ Object.assign(inputAttrs, inputEvents);
251
+ return [rootAttrs, inputAttrs];
235
252
  }
236
253
  function wrapInArray(v) {
237
254
  return v == null ? [] : Array.isArray(v) ? v : [v];
@@ -384,8 +401,6 @@ function destructComputed(getter) {
384
401
  function includes(arr, val) {
385
402
  return arr.includes(val);
386
403
  }
387
- const onRE = /^on[^a-z]/;
388
- const isOn = key => onRE.test(key);
389
404
  function eventName(propName) {
390
405
  return propName[2].toLowerCase() + propName.slice(3);
391
406
  }
@@ -542,6 +557,18 @@ function getOverflow(a, b) {
542
557
  }
543
558
  };
544
559
  }
560
+ function getTargetBox(target) {
561
+ if (Array.isArray(target)) {
562
+ return new Box({
563
+ x: target[0],
564
+ y: target[1],
565
+ width: 0,
566
+ height: 0
567
+ });
568
+ } else {
569
+ return target.getBoundingClientRect();
570
+ }
571
+ }
545
572
 
546
573
  // Utilities
547
574
 
@@ -1013,34 +1040,6 @@ function getContrast(first, second) {
1013
1040
 
1014
1041
  // Types
1015
1042
 
1016
- function useToggleScope(source, fn) {
1017
- let scope;
1018
- function start() {
1019
- scope = effectScope();
1020
- scope.run(() => fn.length ? fn(() => {
1021
- scope?.stop();
1022
- start();
1023
- }) : fn());
1024
- }
1025
- watch(source, active => {
1026
- if (active && !scope) {
1027
- start();
1028
- } else if (!active) {
1029
- scope?.stop();
1030
- scope = undefined;
1031
- }
1032
- }, {
1033
- immediate: true
1034
- });
1035
- onScopeDispose(() => {
1036
- scope?.stop();
1037
- });
1038
- }
1039
-
1040
- // Composables
1041
-
1042
- // Types
1043
-
1044
1043
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
1045
1044
  function createDefaults(options) {
1046
1045
  return ref(options);
@@ -1059,6 +1058,7 @@ function provideDefaults(defaults, options) {
1059
1058
  const scoped = unref(options?.scoped);
1060
1059
  const reset = unref(options?.reset);
1061
1060
  const root = unref(options?.root);
1061
+ if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
1062
1062
  let properties = mergeDeep(providedDefaults.value, {
1063
1063
  prev: injectedDefaults.value
1064
1064
  });
@@ -1114,16 +1114,16 @@ function internalUseDefaults() {
1114
1114
  let [key] = _ref;
1115
1115
  return key.startsWith(key[0].toUpperCase());
1116
1116
  });
1117
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1117
+ _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
1118
+ } else {
1119
+ _subcomponentDefaults.value = undefined;
1118
1120
  }
1119
1121
  });
1120
1122
  function provideSubDefaults() {
1121
- // If subcomponent defaults are provided, override any
1122
- // subcomponents provided by the component's setup function.
1123
- // This uses injectSelf so must be done after the original setup to work.
1124
- useToggleScope(_subcomponentDefaults, () => {
1125
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1126
- });
1123
+ const injected = injectSelf(DefaultsSymbol, vm);
1124
+ provide(DefaultsSymbol, computed(() => {
1125
+ return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
1126
+ }));
1127
1127
  }
1128
1128
  return {
1129
1129
  props: _props,
@@ -1301,9 +1301,10 @@ function isPotentiallyScrollable(el) {
1301
1301
  // Types
1302
1302
 
1303
1303
  function injectSelf(key) {
1304
+ let vm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstance('injectSelf');
1304
1305
  const {
1305
1306
  provides
1306
- } = getCurrentInstance('injectSelf');
1307
+ } = vm;
1307
1308
  if (provides && key in provides) {
1308
1309
  // TS doesn't allow symbol as index type
1309
1310
  return provides[key];
@@ -1641,6 +1642,7 @@ function createLayout(props) {
1641
1642
 
1642
1643
  var en = {
1643
1644
  badge: 'Badge',
1645
+ open: 'Open',
1644
1646
  close: 'Close',
1645
1647
  dataIterator: {
1646
1648
  noResultsText: 'No matching records found',
@@ -1779,6 +1781,34 @@ const defaultRtl = {
1779
1781
  zhHant: false
1780
1782
  };
1781
1783
 
1784
+ // Utilities
1785
+
1786
+ // Types
1787
+
1788
+ function useToggleScope(source, fn) {
1789
+ let scope;
1790
+ function start() {
1791
+ scope = effectScope();
1792
+ scope.run(() => fn.length ? fn(() => {
1793
+ scope?.stop();
1794
+ start();
1795
+ }) : fn());
1796
+ }
1797
+ watch(source, active => {
1798
+ if (active && !scope) {
1799
+ start();
1800
+ } else if (!active) {
1801
+ scope?.stop();
1802
+ scope = undefined;
1803
+ }
1804
+ }, {
1805
+ immediate: true
1806
+ });
1807
+ onScopeDispose(() => {
1808
+ scope?.stop();
1809
+ });
1810
+ }
1811
+
1782
1812
  // Composables
1783
1813
 
1784
1814
  // Types
@@ -2091,9 +2121,9 @@ const defaultThemeOptions = {
2091
2121
  surface: '#FFFFFF',
2092
2122
  'surface-variant': '#424242',
2093
2123
  'on-surface-variant': '#EEEEEE',
2094
- primary: '#6200EE',
2095
- 'primary-darken-1': '#3700B3',
2096
- secondary: '#03DAC6',
2124
+ primary: '#1867C0',
2125
+ 'primary-darken-1': '#1F5592',
2126
+ secondary: '#48A9A6',
2097
2127
  'secondary-darken-1': '#018786',
2098
2128
  error: '#B00020',
2099
2129
  info: '#2196F3',
@@ -2126,10 +2156,10 @@ const defaultThemeOptions = {
2126
2156
  surface: '#212121',
2127
2157
  'surface-variant': '#BDBDBD',
2128
2158
  'on-surface-variant': '#424242',
2129
- primary: '#BB86FC',
2130
- 'primary-darken-1': '#3700B3',
2131
- secondary: '#03DAC5',
2132
- 'secondary-darken-1': '#03DAC5',
2159
+ primary: '#2196F3',
2160
+ 'primary-darken-1': '#277CC1',
2161
+ secondary: '#54B6B2',
2162
+ 'secondary-darken-1': '#48A9A6',
2133
2163
  error: '#CF6679',
2134
2164
  info: '#2196F3',
2135
2165
  success: '#4CAF50',
@@ -2614,7 +2644,7 @@ function ExpandTransitionGenerator () {
2614
2644
  // Types
2615
2645
 
2616
2646
  const makeVDialogTransitionProps = propsFactory({
2617
- target: Object
2647
+ target: [Object, Array]
2618
2648
  }, 'v-dialog-transition');
2619
2649
  const VDialogTransition = genericComponent()({
2620
2650
  name: 'VDialogTransition',
@@ -2716,7 +2746,7 @@ function getChildren(el) {
2716
2746
  return els && [...els];
2717
2747
  }
2718
2748
  function getDimensions(target, el) {
2719
- const targetBox = target.getBoundingClientRect();
2749
+ const targetBox = getTargetBox(target);
2720
2750
  const elBox = nullifyTransforms(el);
2721
2751
  const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v));
2722
2752
  const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ');
@@ -2962,6 +2992,10 @@ const Intersect = {
2962
2992
  const makeVImgProps = propsFactory({
2963
2993
  alt: String,
2964
2994
  cover: Boolean,
2995
+ draggable: {
2996
+ type: [Boolean, String],
2997
+ default: undefined
2998
+ },
2965
2999
  eager: Boolean,
2966
3000
  gradient: String,
2967
3001
  lazySrc: String,
@@ -2980,6 +3014,8 @@ const makeVImgProps = propsFactory({
2980
3014
  type: [String, Object],
2981
3015
  default: ''
2982
3016
  },
3017
+ crossorigin: String,
3018
+ referrerpolicy: String,
2983
3019
  srcset: String,
2984
3020
  ...makeVResponsiveProps(),
2985
3021
  ...makeComponentProps(),
@@ -3104,6 +3140,9 @@ const VImg = genericComponent()({
3104
3140
  "src": normalisedSrc.value.src,
3105
3141
  "srcset": normalisedSrc.value.srcset,
3106
3142
  "alt": props.alt,
3143
+ "crossorigin": props.crossorigin,
3144
+ "referrerpolicy": props.referrerpolicy,
3145
+ "draggable": props.draggable,
3107
3146
  "sizes": props.sizes,
3108
3147
  "ref": image,
3109
3148
  "onLoad": onLoad,
@@ -3125,7 +3164,10 @@ const VImg = genericComponent()({
3125
3164
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && createVNode("img", {
3126
3165
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
3127
3166
  "src": normalisedSrc.value.lazySrc,
3128
- "alt": props.alt
3167
+ "alt": props.alt,
3168
+ "crossorigin": props.crossorigin,
3169
+ "referrerpolicy": props.referrerpolicy,
3170
+ "draggable": props.draggable
3129
3171
  }, null)]
3130
3172
  });
3131
3173
  const __placeholder = () => {
@@ -4144,7 +4186,8 @@ const aliases = {
4144
4186
  file: 'mdi-paperclip',
4145
4187
  plus: 'mdi-plus',
4146
4188
  minus: 'mdi-minus',
4147
- calendar: 'mdi-calendar'
4189
+ calendar: 'mdi-calendar',
4190
+ eyeDropper: 'mdi-eyedropper'
4148
4191
  };
4149
4192
  const mdi = {
4150
4193
  // Not using mergeProps here, functional components merge props by default (?)
@@ -5734,6 +5777,7 @@ const VSelectionControlGroup = genericComponent()({
5734
5777
 
5735
5778
  const makeVSelectionControlProps = propsFactory({
5736
5779
  label: String,
5780
+ baseColor: String,
5737
5781
  trueValue: null,
5738
5782
  falseValue: null,
5739
5783
  value: null,
@@ -5772,7 +5816,8 @@ function useSelectionControl(props) {
5772
5816
  textColorClasses,
5773
5817
  textColorStyles
5774
5818
  } = useTextColor(computed(() => {
5775
- return model.value && !props.error && !props.disabled ? props.color : undefined;
5819
+ if (props.error || props.disabled) return undefined;
5820
+ return model.value ? props.color : props.baseColor;
5776
5821
  }));
5777
5822
  const icon = computed(() => model.value ? props.trueIcon : props.falseIcon);
5778
5823
  return {
@@ -5844,6 +5889,20 @@ const VSelectionControl = genericComponent()({
5844
5889
  }
5845
5890
  }) : props.label;
5846
5891
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
5892
+ const inputNode = createVNode("input", mergeProps({
5893
+ "ref": input,
5894
+ "checked": model.value,
5895
+ "disabled": !!(props.readonly || props.disabled),
5896
+ "id": id.value,
5897
+ "onBlur": onBlur,
5898
+ "onFocus": onFocus,
5899
+ "onInput": onInput,
5900
+ "aria-disabled": !!(props.readonly || props.disabled),
5901
+ "type": props.type,
5902
+ "value": trueValue.value,
5903
+ "name": props.name,
5904
+ "aria-checked": props.type === 'checkbox' ? model.value : undefined
5905
+ }, inputAttrs), null);
5847
5906
  return createVNode("div", mergeProps({
5848
5907
  "class": ['v-selection-control', {
5849
5908
  'v-selection-control--dirty': model.value,
@@ -5860,34 +5919,24 @@ const VSelectionControl = genericComponent()({
5860
5919
  "style": textColorStyles.value
5861
5920
  }, [slots.default?.(), withDirectives(createVNode("div", {
5862
5921
  "class": ['v-selection-control__input']
5863
- }, [icon.value && createVNode(VIcon, {
5864
- "key": "icon",
5865
- "icon": icon.value
5866
- }, null), createVNode("input", mergeProps({
5867
- "ref": input,
5868
- "checked": model.value,
5869
- "disabled": !!(props.readonly || props.disabled),
5870
- "id": id.value,
5871
- "onBlur": onBlur,
5872
- "onFocus": onFocus,
5873
- "onInput": onInput,
5874
- "aria-disabled": !!(props.readonly || props.disabled),
5875
- "type": props.type,
5876
- "value": trueValue.value,
5877
- "name": props.name,
5878
- "aria-checked": props.type === 'checkbox' ? model.value : undefined
5879
- }, inputAttrs), null), slots.input?.({
5922
+ }, [slots.input?.({
5880
5923
  model,
5881
5924
  textColorClasses,
5882
5925
  textColorStyles,
5926
+ inputNode,
5927
+ icon: icon.value,
5883
5928
  props: {
5884
5929
  onFocus,
5885
5930
  onBlur,
5886
5931
  id: id.value
5887
5932
  }
5888
- })]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
5933
+ }) ?? createVNode(Fragment, null, [icon.value && createVNode(VIcon, {
5934
+ "key": "icon",
5935
+ "icon": icon.value
5936
+ }, null), inputNode])]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
5889
5937
  "for": id.value,
5890
- "clickable": true
5938
+ "clickable": true,
5939
+ "onClick": e => e.stopPropagation()
5891
5940
  }, {
5892
5941
  default: () => [label]
5893
5942
  })]);
@@ -5936,16 +5985,19 @@ const VCheckboxBtn = genericComponent()({
5936
5985
  const trueIcon = computed(() => {
5937
5986
  return indeterminate.value ? props.indeterminateIcon : props.trueIcon;
5938
5987
  });
5939
- useRender(() => createVNode(VSelectionControl, mergeProps(props, {
5940
- "modelValue": model.value,
5941
- "onUpdate:modelValue": [$event => model.value = $event, onChange],
5942
- "class": ['v-checkbox-btn', props.class],
5943
- "style": props.style,
5944
- "type": "checkbox",
5945
- "falseIcon": falseIcon.value,
5946
- "trueIcon": trueIcon.value,
5947
- "aria-checked": indeterminate.value ? 'mixed' : undefined
5948
- }), slots));
5988
+ useRender(() => {
5989
+ const controlProps = omit(VSelectionControl.filterProps(props)[0], ['modelValue']);
5990
+ return createVNode(VSelectionControl, mergeProps(controlProps, {
5991
+ "modelValue": model.value,
5992
+ "onUpdate:modelValue": [$event => model.value = $event, onChange],
5993
+ "class": ['v-checkbox-btn', props.class],
5994
+ "style": props.style,
5995
+ "type": "checkbox",
5996
+ "falseIcon": falseIcon.value,
5997
+ "trueIcon": trueIcon.value,
5998
+ "aria-checked": indeterminate.value ? 'mixed' : undefined
5999
+ }), slots);
6000
+ });
5949
6001
  return {};
5950
6002
  }
5951
6003
  });
@@ -6509,12 +6561,12 @@ const VCheckbox = genericComponent()({
6509
6561
  const uid = getUid();
6510
6562
  const id = computed(() => props.id || `checkbox-${uid}`);
6511
6563
  useRender(() => {
6512
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6564
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
6513
6565
  const [inputProps, _1] = VInput.filterProps(props);
6514
6566
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6515
6567
  return createVNode(VInput, mergeProps({
6516
6568
  "class": ['v-checkbox', props.class]
6517
- }, inputAttrs, inputProps, {
6569
+ }, rootAttrs, inputProps, {
6518
6570
  "modelValue": model.value,
6519
6571
  "onUpdate:modelValue": $event => model.value = $event,
6520
6572
  "id": id.value,
@@ -6552,6 +6604,7 @@ const makeVAvatarProps = propsFactory({
6552
6604
  end: Boolean,
6553
6605
  icon: IconValue,
6554
6606
  image: String,
6607
+ text: String,
6555
6608
  ...makeComponentProps(),
6556
6609
  ...makeDensityProps(),
6557
6610
  ...makeRoundedProps(),
@@ -6602,7 +6655,7 @@ const VAvatar = genericComponent()({
6602
6655
  }, null) : props.icon ? createVNode(VIcon, {
6603
6656
  "key": "icon",
6604
6657
  "icon": props.icon
6605
- }, null) : slots.default?.(), genOverlays(false, 'v-avatar')]
6658
+ }, null) : slots.default?.() ?? props.text, genOverlays(false, 'v-avatar')]
6606
6659
  }));
6607
6660
  return {};
6608
6661
  }
@@ -7654,7 +7707,6 @@ const VListItem = genericComponent()({
7654
7707
  "style": [colorStyles.value, dimensionStyles.value, props.style],
7655
7708
  "href": link.href.value,
7656
7709
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
7657
- "title": props.title,
7658
7710
  "onClick": onClick,
7659
7711
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7660
7712
  }, {
@@ -7687,7 +7739,9 @@ const VListItem = genericComponent()({
7687
7739
  }
7688
7740
  }, {
7689
7741
  default: () => [slots.prepend?.(slotProps.value)]
7690
- })]), createVNode("div", {
7742
+ }), createVNode("div", {
7743
+ "class": "v-list-item__spacer"
7744
+ }, null)]), createVNode("div", {
7691
7745
  "class": "v-list-item__content",
7692
7746
  "data-no-activator": ""
7693
7747
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7731,7 +7785,9 @@ const VListItem = genericComponent()({
7731
7785
  }
7732
7786
  }, {
7733
7787
  default: () => [slots.append?.(slotProps.value)]
7734
- })])]
7788
+ }), createVNode("div", {
7789
+ "class": "v-list-item__spacer"
7790
+ }, null)])]
7735
7791
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7736
7792
  });
7737
7793
  return {};
@@ -8380,7 +8436,7 @@ function getIntrinsicSize(el, isRtl) {
8380
8436
  return contentBox;
8381
8437
  }
8382
8438
  function connectedLocationStrategy(data, props, contentStyles) {
8383
- const activatorFixed = isFixedPosition(data.activatorEl.value);
8439
+ const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value);
8384
8440
  if (activatorFixed) {
8385
8441
  Object.assign(contentStyles.value, {
8386
8442
  position: 'fixed',
@@ -8429,11 +8485,11 @@ function connectedLocationStrategy(data, props, contentStyles) {
8429
8485
  const observer = new ResizeObserver(() => {
8430
8486
  if (observe) updateLocation();
8431
8487
  });
8432
- watch([data.activatorEl, data.contentEl], (_ref, _ref2) => {
8433
- let [newActivatorEl, newContentEl] = _ref;
8434
- let [oldActivatorEl, oldContentEl] = _ref2;
8435
- if (oldActivatorEl) observer.unobserve(oldActivatorEl);
8436
- if (newActivatorEl) observer.observe(newActivatorEl);
8488
+ watch([data.target, data.contentEl], (_ref, _ref2) => {
8489
+ let [newTarget, newContentEl] = _ref;
8490
+ let [oldTarget, oldContentEl] = _ref2;
8491
+ if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget);
8492
+ if (newTarget && !Array.isArray(newTarget)) observer.observe(newTarget);
8437
8493
  if (oldContentEl) observer.unobserve(oldContentEl);
8438
8494
  if (newContentEl) observer.observe(newContentEl);
8439
8495
  }, {
@@ -8449,8 +8505,8 @@ function connectedLocationStrategy(data, props, contentStyles) {
8449
8505
  requestAnimationFrame(() => {
8450
8506
  requestAnimationFrame(() => observe = true);
8451
8507
  });
8452
- if (!data.activatorEl.value || !data.contentEl.value) return;
8453
- const targetBox = data.activatorEl.value.getBoundingClientRect();
8508
+ if (!data.target.value || !data.contentEl.value) return;
8509
+ const targetBox = getTargetBox(data.target.value);
8454
8510
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
8455
8511
  const scrollParents = getScrollParents(data.contentEl.value);
8456
8512
  const viewportMargin = 12;
@@ -8737,11 +8793,11 @@ function closeScrollStrategy(data) {
8737
8793
  function onScroll(e) {
8738
8794
  data.isActive.value = false;
8739
8795
  }
8740
- bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll);
8796
+ bindScroll(data.targetEl.value ?? data.contentEl.value, onScroll);
8741
8797
  }
8742
8798
  function blockScrollStrategy(data, props) {
8743
8799
  const offsetParent = data.root.value?.offsetParent;
8744
- 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'));
8800
+ 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'));
8745
8801
  const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth;
8746
8802
  const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement);
8747
8803
  if (scrollableParent) {
@@ -8785,7 +8841,7 @@ function repositionScrollStrategy(data, props, scope) {
8785
8841
  }
8786
8842
  ric = (typeof requestIdleCallback === 'undefined' ? cb => cb() : requestIdleCallback)(() => {
8787
8843
  scope.run(() => {
8788
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
8844
+ bindScroll(data.targetEl.value ?? data.contentEl.value, e => {
8789
8845
  if (slow) {
8790
8846
  // If the position calculation is slow,
8791
8847
  // defer updates until scrolling is finished.
@@ -8866,6 +8922,7 @@ function useDelay(props, cb) {
8866
8922
  // Types
8867
8923
 
8868
8924
  const makeActivatorProps = propsFactory({
8925
+ target: [String, Object],
8869
8926
  activator: [String, Object],
8870
8927
  activatorProps: {
8871
8928
  type: Object,
@@ -8888,6 +8945,7 @@ function useActivator(props, _ref) {
8888
8945
  isActive,
8889
8946
  isTop
8890
8947
  } = _ref;
8948
+ const vm = getCurrentInstance('useActivator');
8891
8949
  const activatorEl = ref();
8892
8950
  let isHovered = false;
8893
8951
  let isFocused = false;
@@ -8905,10 +8963,14 @@ function useActivator(props, _ref) {
8905
8963
  isActive.value = value;
8906
8964
  }
8907
8965
  });
8966
+ const cursorTarget = ref();
8908
8967
  const availableEvents = {
8909
8968
  onClick: e => {
8910
8969
  e.stopPropagation();
8911
8970
  activatorEl.value = e.currentTarget || e.target;
8971
+ if (!isActive.value) {
8972
+ cursorTarget.value = [e.clientX, e.clientY];
8973
+ }
8912
8974
  isActive.value = !isActive.value;
8913
8975
  },
8914
8976
  onMouseenter: e => {
@@ -9002,6 +9064,15 @@ function useActivator(props, _ref) {
9002
9064
  isActive.value = false;
9003
9065
  }
9004
9066
  });
9067
+ watch(isActive, val => {
9068
+ if (!val) {
9069
+ setTimeout(() => {
9070
+ cursorTarget.value = undefined;
9071
+ });
9072
+ }
9073
+ }, {
9074
+ flush: 'post'
9075
+ });
9005
9076
  const activatorRef = ref();
9006
9077
  watchEffect(() => {
9007
9078
  if (!activatorRef.value) return;
@@ -9009,7 +9080,15 @@ function useActivator(props, _ref) {
9009
9080
  activatorEl.value = refElement(activatorRef.value);
9010
9081
  });
9011
9082
  });
9012
- const vm = getCurrentInstance('useActivator');
9083
+ const targetRef = ref();
9084
+ const target = computed(() => {
9085
+ if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
9086
+ if (targetRef.value) return refElement(targetRef.value);
9087
+ return getTarget(props.target, vm) || activatorEl.value;
9088
+ });
9089
+ const targetEl = computed(() => {
9090
+ return Array.isArray(target.value) ? undefined : target.value;
9091
+ });
9013
9092
  let scope;
9014
9093
  watch(() => !!props.activator, val => {
9015
9094
  if (val && IN_BROWSER) {
@@ -9033,6 +9112,9 @@ function useActivator(props, _ref) {
9033
9112
  return {
9034
9113
  activatorEl,
9035
9114
  activatorRef,
9115
+ target,
9116
+ targetEl,
9117
+ targetRef,
9036
9118
  activatorEvents,
9037
9119
  contentEvents,
9038
9120
  scrimEvents
@@ -9074,31 +9156,34 @@ function _useActivator(props, vm, _ref2) {
9074
9156
  }
9075
9157
  function getActivator() {
9076
9158
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
9077
- let activator;
9078
- if (selector) {
9079
- if (selector === 'parent') {
9080
- let el = vm?.proxy?.$el?.parentNode;
9081
- while (el.hasAttribute('data-no-activator')) {
9082
- el = el.parentNode;
9083
- }
9084
- activator = el;
9085
- } else if (typeof selector === 'string') {
9086
- // Selector
9087
- activator = document.querySelector(selector);
9088
- } else if ('$el' in selector) {
9089
- // Component (ref)
9090
- activator = selector.$el;
9091
- } else {
9092
- // HTMLElement | Element
9093
- activator = selector;
9094
- }
9095
- }
9159
+ const activator = getTarget(selector, vm);
9096
9160
 
9097
9161
  // The activator should only be a valid element (Ignore comments and text nodes)
9098
- activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null;
9162
+ activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;
9099
9163
  return activatorEl.value;
9100
9164
  }
9101
9165
  }
9166
+ function getTarget(selector, vm) {
9167
+ if (!selector) return;
9168
+ let target;
9169
+ if (selector === 'parent') {
9170
+ let el = vm?.proxy?.$el?.parentNode;
9171
+ while (el.hasAttribute('data-no-activator')) {
9172
+ el = el.parentNode;
9173
+ }
9174
+ target = el;
9175
+ } else if (typeof selector === 'string') {
9176
+ // Selector
9177
+ target = document.querySelector(selector);
9178
+ } else if ('$el' in selector) {
9179
+ // Component (ref)
9180
+ target = selector.$el;
9181
+ } else {
9182
+ // HTMLElement | Element | [x, y]
9183
+ target = selector;
9184
+ }
9185
+ return target;
9186
+ }
9102
9187
 
9103
9188
  // Utilities
9104
9189
 
@@ -9222,10 +9307,30 @@ function createDisplay(options, ssr) {
9222
9307
  ssr: !!ssr
9223
9308
  };
9224
9309
  }
9310
+ const makeDisplayProps = propsFactory({
9311
+ mobileBreakpoint: [Number, String]
9312
+ }, 'display');
9225
9313
  function useDisplay() {
9314
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9315
+ let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
9226
9316
  const display = inject$1(DisplaySymbol);
9227
9317
  if (!display) throw new Error('Could not find Vuetify display injection');
9228
- return display;
9318
+ const mobile = computed(() => {
9319
+ if (!props.mobileBreakpoint) return display.mobile.value;
9320
+ const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
9321
+ return display.width.value < breakpointValue;
9322
+ });
9323
+ const displayClasses = computed(() => {
9324
+ if (!name) return {};
9325
+ return {
9326
+ [`${name}--mobile`]: mobile.value
9327
+ };
9328
+ });
9329
+ return {
9330
+ ...display,
9331
+ displayClasses,
9332
+ mobile
9333
+ };
9229
9334
  }
9230
9335
 
9231
9336
  // Composables
@@ -9542,6 +9647,9 @@ const VOverlay = genericComponent()({
9542
9647
  const {
9543
9648
  activatorEl,
9544
9649
  activatorRef,
9650
+ target,
9651
+ targetEl,
9652
+ targetRef,
9545
9653
  activatorEvents,
9546
9654
  contentEvents,
9547
9655
  scrimEvents
@@ -9567,13 +9675,13 @@ const VOverlay = genericComponent()({
9567
9675
  } = useLocationStrategies(props, {
9568
9676
  isRtl,
9569
9677
  contentEl,
9570
- activatorEl,
9678
+ target,
9571
9679
  isActive
9572
9680
  });
9573
9681
  useScrollStrategies(props, {
9574
9682
  root,
9575
9683
  contentEl,
9576
- activatorEl,
9684
+ targetEl,
9577
9685
  isActive,
9578
9686
  updateLocation
9579
9687
  });
@@ -9641,7 +9749,8 @@ const VOverlay = genericComponent()({
9641
9749
  useRender(() => createVNode(Fragment, null, [slots.activator?.({
9642
9750
  isActive: isActive.value,
9643
9751
  props: mergeProps({
9644
- ref: activatorRef
9752
+ ref: activatorRef,
9753
+ targetRef
9645
9754
  }, activatorEvents.value, props.activatorProps)
9646
9755
  }), isMounted.value && hasContent.value && createVNode(Teleport, {
9647
9756
  "disabled": !teleportTarget.value,
@@ -9664,7 +9773,7 @@ const VOverlay = genericComponent()({
9664
9773
  "appear": true,
9665
9774
  "persisted": true,
9666
9775
  "transition": props.transition,
9667
- "target": activatorEl.value,
9776
+ "target": target.value,
9668
9777
  "onAfterLeave": () => {
9669
9778
  onAfterLeave();
9670
9779
  emit('afterLeave');
@@ -9685,6 +9794,7 @@ const VOverlay = genericComponent()({
9685
9794
  })]));
9686
9795
  return {
9687
9796
  activatorEl,
9797
+ target,
9688
9798
  animateClick,
9689
9799
  contentEl,
9690
9800
  globalTop,
@@ -9842,10 +9952,11 @@ const VMenu = genericComponent()({
9842
9952
  }, 40);
9843
9953
  }
9844
9954
  });
9845
- function onFocusIn(e) {
9955
+ async function onFocusIn(e) {
9846
9956
  const before = e.relatedTarget;
9847
9957
  const after = e.target;
9848
- if (before !== after && overlay.value?.contentEl &&
9958
+ await nextTick();
9959
+ if (isActive.value && before !== after && overlay.value?.contentEl &&
9849
9960
  // We're the topmost menu
9850
9961
  overlay.value?.globalTop &&
9851
9962
  // It isn't the document or the menu body
@@ -10181,7 +10292,7 @@ const VField = genericComponent()({
10181
10292
  'v-field--no-label': !label,
10182
10293
  [`v-field--variant-${props.variant}`]: true
10183
10294
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
10184
- "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
10295
+ "style": [backgroundColorStyles.value, props.style],
10185
10296
  "onClick": onClick
10186
10297
  }, attrs), [createVNode("div", {
10187
10298
  "class": "v-field__overlay"
@@ -10205,7 +10316,8 @@ const VField = genericComponent()({
10205
10316
  "ref": floatingLabelRef,
10206
10317
  "class": [textColorClasses.value],
10207
10318
  "floating": true,
10208
- "for": id.value
10319
+ "for": id.value,
10320
+ "style": textColorStyles.value
10209
10321
  }, {
10210
10322
  default: () => [label]
10211
10323
  }), createVNode(VFieldLabel, {
@@ -10241,7 +10353,8 @@ const VField = genericComponent()({
10241
10353
  "key": "append-icon",
10242
10354
  "name": "appendInner"
10243
10355
  }, null)]), createVNode("div", {
10244
- "class": ['v-field__outline', textColorClasses.value]
10356
+ "class": ['v-field__outline', textColorClasses.value],
10357
+ "style": textColorStyles.value
10245
10358
  }, [isOutlined && createVNode(Fragment, null, [createVNode("div", {
10246
10359
  "class": "v-field__outline__start"
10247
10360
  }, null), hasLabel.value && createVNode("div", {
@@ -10285,6 +10398,7 @@ const makeVTextFieldProps = propsFactory({
10285
10398
  persistentPlaceholder: Boolean,
10286
10399
  persistentCounter: Boolean,
10287
10400
  suffix: String,
10401
+ role: String,
10288
10402
  type: {
10289
10403
  type: String,
10290
10404
  default: 'text'
@@ -10409,7 +10523,7 @@ const VTextField = genericComponent()({
10409
10523
  "onClick:clear": onClear,
10410
10524
  "onClick:prependInner": props['onClick:prependInner'],
10411
10525
  "onClick:appendInner": props['onClick:appendInner'],
10412
- "role": "textbox"
10526
+ "role": props.role
10413
10527
  }, fieldProps, {
10414
10528
  "id": id.value,
10415
10529
  "active": isActive.value || isDirty.value,
@@ -10448,10 +10562,12 @@ const VTextField = genericComponent()({
10448
10562
  "class": "v-text-field__prefix"
10449
10563
  }, [createVNode("span", {
10450
10564
  "class": "v-text-field__prefix__text"
10451
- }, [props.prefix])]), createVNode("div", {
10565
+ }, [props.prefix])]), slots.default ? createVNode("div", {
10452
10566
  "class": fieldClass,
10453
10567
  "data-no-activator": ""
10454
- }, [slots.default ? createVNode(Fragment, null, [slots.default(), inputNode]) : cloneVNode(inputNode)]), props.suffix && createVNode("span", {
10568
+ }, [slots.default(), inputNode]) : cloneVNode(inputNode, {
10569
+ class: fieldClass
10570
+ }), props.suffix && createVNode("span", {
10455
10571
  "class": "v-text-field__suffix"
10456
10572
  }, [createVNode("span", {
10457
10573
  "class": "v-text-field__suffix__text"
@@ -10770,6 +10886,14 @@ function useScrolling(listRef, textFieldRef) {
10770
10886
  const makeSelectProps = propsFactory({
10771
10887
  chips: Boolean,
10772
10888
  closableChips: Boolean,
10889
+ closeText: {
10890
+ type: String,
10891
+ default: '$vuetify.close'
10892
+ },
10893
+ openText: {
10894
+ type: String,
10895
+ default: '$vuetify.open'
10896
+ },
10773
10897
  eager: Boolean,
10774
10898
  hideNoData: Boolean,
10775
10899
  hideSelected: Boolean,
@@ -10799,7 +10923,8 @@ const makeSelectProps = propsFactory({
10799
10923
  const makeVSelectProps = propsFactory({
10800
10924
  ...makeSelectProps(),
10801
10925
  ...omit(makeVTextFieldProps({
10802
- modelValue: null
10926
+ modelValue: null,
10927
+ role: 'button'
10803
10928
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
10804
10929
  ...makeTransitionProps({
10805
10930
  transition: {
@@ -10854,6 +10979,7 @@ const VSelect = genericComponent()({
10854
10979
  });
10855
10980
  const selected = computed(() => selections.value.map(selection => selection.props.value));
10856
10981
  const isFocused = shallowRef(false);
10982
+ const label = computed(() => menu.value ? props.closeText : props.openText);
10857
10983
  let keyboardLookupPrefix = '';
10858
10984
  let keyboardLookupLastTime;
10859
10985
  const displayItems = computed(() => {
@@ -10980,7 +11106,9 @@ const VSelect = genericComponent()({
10980
11106
  "onClick:clear": onClear,
10981
11107
  "onMousedown:control": onMousedownControl,
10982
11108
  "onBlur": onBlur,
10983
- "onKeydown": onKeydown
11109
+ "onKeydown": onKeydown,
11110
+ "aria-label": t(label.value),
11111
+ "title": t(label.value)
10984
11112
  }), {
10985
11113
  ...slots,
10986
11114
  default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
@@ -11243,7 +11371,8 @@ const makeVAutocompleteProps = propsFactory({
11243
11371
  }),
11244
11372
  ...makeSelectProps(),
11245
11373
  ...omit(makeVTextFieldProps({
11246
- modelValue: null
11374
+ modelValue: null,
11375
+ role: 'combobox'
11247
11376
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
11248
11377
  ...makeTransitionProps({
11249
11378
  transition: false
@@ -11280,6 +11409,7 @@ const VAutocomplete = genericComponent()({
11280
11409
  });
11281
11410
  const selectionIndex = shallowRef(-1);
11282
11411
  const color = computed(() => vTextFieldRef.value?.color);
11412
+ const label = computed(() => menu.value ? props.closeText : props.openText);
11283
11413
  const {
11284
11414
  items,
11285
11415
  transformIn,
@@ -11627,7 +11757,9 @@ const VAutocomplete = genericComponent()({
11627
11757
  "class": "v-autocomplete__menu-icon",
11628
11758
  "icon": props.menuIcon,
11629
11759
  "onMousedown": onMousedownMenuIcon,
11630
- "onClick": noop
11760
+ "onClick": noop,
11761
+ "aria-label": t(label.value),
11762
+ "title": t(label.value)
11631
11763
  }, null) : undefined]);
11632
11764
  }
11633
11765
  });
@@ -11782,6 +11914,7 @@ const makeVBannerProps = propsFactory({
11782
11914
  ...makeComponentProps(),
11783
11915
  ...makeDensityProps(),
11784
11916
  ...makeDimensionProps(),
11917
+ ...makeDisplayProps(),
11785
11918
  ...makeElevationProps(),
11786
11919
  ...makeLocationProps(),
11787
11920
  ...makePositionProps(),
@@ -11803,8 +11936,9 @@ const VBanner = genericComponent()({
11803
11936
  densityClasses
11804
11937
  } = useDensity(props);
11805
11938
  const {
11939
+ displayClasses,
11806
11940
  mobile
11807
- } = useDisplay();
11941
+ } = useDisplay(props);
11808
11942
  const {
11809
11943
  dimensionStyles
11810
11944
  } = useDimension(props);
@@ -11840,7 +11974,7 @@ const VBanner = genericComponent()({
11840
11974
  'v-banner--stacked': props.stacked || mobile.value,
11841
11975
  'v-banner--sticky': props.sticky,
11842
11976
  [`v-banner--${props.lines}-line`]: !!props.lines
11843
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11977
+ }, borderClasses.value, densityClasses.value, displayClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11844
11978
  "style": [dimensionStyles.value, locationStyles.value, props.style],
11845
11979
  "role": "banner"
11846
11980
  }, {
@@ -12147,12 +12281,17 @@ const VBreadcrumbs = genericComponent()({
12147
12281
  item,
12148
12282
  raw
12149
12283
  } = _ref2;
12150
- return createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
12151
- "key": item.title,
12284
+ return createVNode(Fragment, null, [slots.item?.({
12285
+ item,
12286
+ index
12287
+ }) ?? createVNode(VBreadcrumbsItem, mergeProps({
12288
+ "key": index,
12152
12289
  "disabled": index >= array.length - 1
12153
- }, item), {
12290
+ }, typeof item === 'string' ? {
12291
+ title: item
12292
+ } : item), {
12154
12293
  default: slots.title ? () => slots.title?.({
12155
- item: raw,
12294
+ item,
12156
12295
  index
12157
12296
  }) : undefined
12158
12297
  }), index < array.length - 1 && createVNode(VBreadcrumbsDivider, null, {
@@ -13490,7 +13629,11 @@ const makeSliderProps = propsFactory({
13490
13629
  ...makeRoundedProps(),
13491
13630
  ...makeElevationProps({
13492
13631
  elevation: 2
13493
- })
13632
+ }),
13633
+ ripple: {
13634
+ type: Boolean,
13635
+ default: true
13636
+ }
13494
13637
  }, 'Slider');
13495
13638
  const useSteps = props => {
13496
13639
  const min = computed(() => parseFloat(props.min));
@@ -14097,7 +14240,8 @@ const VSlider = genericComponent()({
14097
14240
  "position": trackStop.value,
14098
14241
  "elevation": props.elevation,
14099
14242
  "onFocus": focus,
14100
- "onBlur": blur
14243
+ "onBlur": blur,
14244
+ "ripple": props.ripple
14101
14245
  }, {
14102
14246
  'thumb-label': slots['thumb-label']
14103
14247
  })]);
@@ -14128,12 +14272,36 @@ const VColorPickerPreview = defineComponent({
14128
14272
  let {
14129
14273
  emit
14130
14274
  } = _ref;
14275
+ const abortController = new AbortController();
14276
+ onUnmounted(() => abortController.abort());
14277
+ async function openEyeDropper() {
14278
+ if (!SUPPORTS_EYE_DROPPER) return;
14279
+ const eyeDropper = new window.EyeDropper();
14280
+ try {
14281
+ const result = await eyeDropper.open({
14282
+ signal: abortController.signal
14283
+ });
14284
+ const colorHexValue = HexToHSV(result.sRGBHex);
14285
+ emit('update:color', {
14286
+ ...(props.color ?? nullColor),
14287
+ ...colorHexValue
14288
+ });
14289
+ } catch (e) {}
14290
+ }
14131
14291
  useRender(() => createVNode("div", {
14132
14292
  "class": ['v-color-picker-preview', {
14133
14293
  'v-color-picker-preview--hide-alpha': props.hideAlpha
14134
14294
  }, props.class],
14135
14295
  "style": props.style
14136
- }, [createVNode("div", {
14296
+ }, [SUPPORTS_EYE_DROPPER && createVNode("div", {
14297
+ "class": "v-color-picker-preview__eye-dropper",
14298
+ "key": "eyeDropper"
14299
+ }, [createVNode(VBtn, {
14300
+ "onClick": openEyeDropper,
14301
+ "icon": "$eyeDropper",
14302
+ "variant": "plain",
14303
+ "density": "comfortable"
14304
+ }, null)]), createVNode("div", {
14137
14305
  "class": "v-color-picker-preview__dot"
14138
14306
  }, [createVNode("div", {
14139
14307
  "style": {
@@ -14771,7 +14939,8 @@ const makeVComboboxProps = propsFactory({
14771
14939
  returnObject: true
14772
14940
  }),
14773
14941
  ...omit(makeVTextFieldProps({
14774
- modelValue: null
14942
+ modelValue: null,
14943
+ role: 'combobox'
14775
14944
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
14776
14945
  ...makeTransitionProps({
14777
14946
  transition: false
@@ -14810,6 +14979,7 @@ const VCombobox = genericComponent()({
14810
14979
  const selectionIndex = shallowRef(-1);
14811
14980
  let cleared = false;
14812
14981
  const color = computed(() => vTextFieldRef.value?.color);
14982
+ const label = computed(() => menu.value ? props.closeText : props.openText);
14813
14983
  const {
14814
14984
  items,
14815
14985
  transformIn,
@@ -15185,7 +15355,9 @@ const VCombobox = genericComponent()({
15185
15355
  "class": "v-combobox__menu-icon",
15186
15356
  "icon": props.menuIcon,
15187
15357
  "onMousedown": onMousedownMenuIcon,
15188
- "onClick": noop
15358
+ "onClick": noop,
15359
+ "aria-label": t(label.value),
15360
+ "title": t(label.value)
15189
15361
  }, null) : undefined]);
15190
15362
  }
15191
15363
  });
@@ -16800,6 +16972,7 @@ const makeVNavigationDrawerProps = propsFactory({
16800
16972
  sticky: Boolean,
16801
16973
  ...makeBorderProps(),
16802
16974
  ...makeComponentProps(),
16975
+ ...makeDisplayProps(),
16803
16976
  ...makeElevationProps(),
16804
16977
  ...makeLayoutItemProps(),
16805
16978
  ...makeRoundedProps(),
@@ -16838,8 +17011,9 @@ const VNavigationDrawer = genericComponent()({
16838
17011
  elevationClasses
16839
17012
  } = useElevation(props);
16840
17013
  const {
17014
+ displayClasses,
16841
17015
  mobile
16842
- } = useDisplay();
17016
+ } = useDisplay(props);
16843
17017
  const {
16844
17018
  roundedClasses
16845
17019
  } = useRounded(props);
@@ -16950,7 +17124,7 @@ const VNavigationDrawer = genericComponent()({
16950
17124
  'v-navigation-drawer--temporary': isTemporary.value,
16951
17125
  'v-navigation-drawer--active': isActive.value,
16952
17126
  'v-navigation-drawer--sticky': isSticky.value
16953
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17127
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16954
17128
  "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16955
17129
  }, scopeId, attrs), {
16956
17130
  default: () => [hasImage && createVNode("div", {
@@ -17478,7 +17652,7 @@ const VRadioGroup = genericComponent()({
17478
17652
  const id = computed(() => props.id || `radio-group-${uid}`);
17479
17653
  const model = useProxiedModel(props, 'modelValue');
17480
17654
  useRender(() => {
17481
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
17655
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
17482
17656
  const [inputProps, _1] = VInput.filterProps(props);
17483
17657
  const [controlProps, _2] = VSelectionControl.filterProps(props);
17484
17658
  const label = slots.label ? slots.label({
@@ -17490,7 +17664,7 @@ const VRadioGroup = genericComponent()({
17490
17664
  return createVNode(VInput, mergeProps({
17491
17665
  "class": ['v-radio-group', props.class],
17492
17666
  "style": props.style
17493
- }, inputAttrs, inputProps, {
17667
+ }, rootAttrs, inputProps, {
17494
17668
  "modelValue": model.value,
17495
17669
  "onUpdate:modelValue": $event => model.value = $event,
17496
17670
  "id": id.value
@@ -17698,7 +17872,8 @@ const VRangeSlider = genericComponent()({
17698
17872
  },
17699
17873
  "min": min.value,
17700
17874
  "max": model.value[1],
17701
- "position": trackStart.value
17875
+ "position": trackStart.value,
17876
+ "ripple": props.ripple
17702
17877
  }, {
17703
17878
  'thumb-label': slots['thumb-label']
17704
17879
  }), createVNode(VSliderThumb, {
@@ -17726,7 +17901,8 @@ const VRangeSlider = genericComponent()({
17726
17901
  },
17727
17902
  "min": model.value[0],
17728
17903
  "max": max.value,
17729
- "position": trackStop.value
17904
+ "position": trackStop.value,
17905
+ "ripple": props.ripple
17730
17906
  }, {
17731
17907
  'thumb-label': slots['thumb-label']
17732
17908
  })]);
@@ -18000,6 +18176,7 @@ const makeVSlideGroupProps = propsFactory({
18000
18176
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
18001
18177
  },
18002
18178
  ...makeComponentProps(),
18179
+ ...makeDisplayProps(),
18003
18180
  ...makeTagProps(),
18004
18181
  ...makeGroupProps({
18005
18182
  selectedClass: 'v-slide-group-item--active'
@@ -18019,8 +18196,9 @@ const VSlideGroup = genericComponent()({
18019
18196
  isRtl
18020
18197
  } = useRtl();
18021
18198
  const {
18199
+ displayClasses,
18022
18200
  mobile
18023
- } = useDisplay();
18201
+ } = useDisplay(props);
18024
18202
  const group = useGroup(props, props.symbol);
18025
18203
  const isOverflowing = shallowRef(false);
18026
18204
  const scrollOffset = shallowRef(0);
@@ -18240,7 +18418,7 @@ const VSlideGroup = genericComponent()({
18240
18418
  'v-slide-group--vertical': !isHorizontal.value,
18241
18419
  'v-slide-group--has-affixes': hasAffixes.value,
18242
18420
  'v-slide-group--is-overflowing': isOverflowing.value
18243
- }, props.class],
18421
+ }, displayClasses.value, props.class],
18244
18422
  "style": props.style,
18245
18423
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
18246
18424
  "onFocus": onFocus
@@ -18467,6 +18645,7 @@ const VSwitch = genericComponent()({
18467
18645
  focus,
18468
18646
  blur
18469
18647
  } = useFocus(props);
18648
+ const control = ref();
18470
18649
  const loaderColor = computed(() => {
18471
18650
  return typeof props.loading === 'string' && props.loading !== '' ? props.loading : props.color;
18472
18651
  });
@@ -18477,16 +18656,15 @@ const VSwitch = genericComponent()({
18477
18656
  indeterminate.value = false;
18478
18657
  }
18479
18658
  }
18659
+ function onTrackClick(e) {
18660
+ e.stopPropagation();
18661
+ e.preventDefault();
18662
+ control.value?.input?.click();
18663
+ }
18480
18664
  useRender(() => {
18481
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
18665
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
18482
18666
  const [inputProps, _1] = VInput.filterProps(props);
18483
18667
  const [controlProps, _2] = VSelectionControl.filterProps(props);
18484
- const control = ref();
18485
- function onClick(e) {
18486
- e.stopPropagation();
18487
- e.preventDefault();
18488
- control.value?.input?.click();
18489
- }
18490
18668
  return createVNode(VInput, mergeProps({
18491
18669
  "class": ['v-switch', {
18492
18670
  'v-switch--inset': props.inset
@@ -18494,7 +18672,7 @@ const VSwitch = genericComponent()({
18494
18672
  'v-switch--indeterminate': indeterminate.value
18495
18673
  }, loaderClasses.value, props.class],
18496
18674
  "style": props.style
18497
- }, inputAttrs, inputProps, {
18675
+ }, rootAttrs, inputProps, {
18498
18676
  "id": id.value,
18499
18677
  "focused": isFocused.value
18500
18678
  }), {
@@ -18524,29 +18702,36 @@ const VSwitch = genericComponent()({
18524
18702
  ...slots,
18525
18703
  default: () => createVNode("div", {
18526
18704
  "class": "v-switch__track",
18527
- "onClick": onClick
18705
+ "onClick": onTrackClick
18528
18706
  }, null),
18529
18707
  input: _ref3 => {
18530
18708
  let {
18531
- textColorClasses,
18532
- textColorStyles
18709
+ inputNode,
18710
+ icon
18533
18711
  } = _ref3;
18534
- return createVNode("div", {
18535
- "class": ['v-switch__thumb', textColorClasses.value],
18536
- "style": textColorStyles.value
18537
- }, [props.loading && createVNode(LoaderSlot, {
18538
- "name": "v-switch",
18539
- "active": true,
18540
- "color": isValid.value === false ? undefined : loaderColor.value
18541
- }, {
18542
- default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
18543
- "active": slotProps.isActive,
18544
- "color": slotProps.color,
18545
- "indeterminate": true,
18546
- "size": "16",
18547
- "width": "2"
18548
- }, null)
18549
- })]);
18712
+ return createVNode(Fragment, null, [inputNode, createVNode("div", {
18713
+ "class": ['v-switch__thumb', {
18714
+ 'v-switch__thumb--filled': icon || props.loading
18715
+ }]
18716
+ }, [createVNode(VScaleTransition, null, {
18717
+ default: () => [!props.loading ? icon && createVNode(VIcon, {
18718
+ "key": icon,
18719
+ "icon": icon,
18720
+ "size": "x-small"
18721
+ }, null) : createVNode(LoaderSlot, {
18722
+ "name": "v-switch",
18723
+ "active": true,
18724
+ "color": isValid.value === false ? undefined : loaderColor.value
18725
+ }, {
18726
+ default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
18727
+ "active": slotProps.isActive,
18728
+ "color": slotProps.color,
18729
+ "indeterminate": true,
18730
+ "size": "16",
18731
+ "width": "2"
18732
+ }, null)
18733
+ })]
18734
+ })])]);
18550
18735
  }
18551
18736
  });
18552
18737
  }
@@ -19027,8 +19212,7 @@ const VTextarea = genericComponent()({
19027
19212
  "onMousedown": onControlMousedown,
19028
19213
  "onClick:clear": onClear,
19029
19214
  "onClick:prependInner": props['onClick:prependInner'],
19030
- "onClick:appendInner": props['onClick:appendInner'],
19031
- "role": "textbox"
19215
+ "onClick:appendInner": props['onClick:appendInner']
19032
19216
  }, fieldProps, {
19033
19217
  "active": isActive.value || isDirty.value,
19034
19218
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
@@ -20289,7 +20473,7 @@ function createVuetify$1() {
20289
20473
  date
20290
20474
  };
20291
20475
  }
20292
- const version$1 = "3.3.12";
20476
+ const version$1 = "3.4.0-alpha.0";
20293
20477
  createVuetify$1.version = version$1;
20294
20478
 
20295
20479
  // Vue's inject() can only be used in setup
@@ -20314,7 +20498,7 @@ const createVuetify = function () {
20314
20498
  ...options
20315
20499
  });
20316
20500
  };
20317
- const version = "3.3.12";
20501
+ const version = "3.4.0-alpha.0";
20318
20502
  createVuetify.version = version;
20319
20503
 
20320
20504
  export { components, createVuetify, directives, useDefaults, useDisplay, useLayout, useLocale, useRtl, useTheme, version };