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
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
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
  */
@@ -78,6 +78,7 @@
78
78
  const IN_BROWSER = typeof window !== 'undefined';
79
79
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
80
80
  const SUPPORTS_TOUCH = IN_BROWSER && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0);
81
+ const SUPPORTS_EYE_DROPPER = IN_BROWSER && 'EyeDropper' in window;
81
82
 
82
83
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
83
84
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
@@ -161,7 +162,15 @@
161
162
  return obj !== null && typeof obj === 'object' && !Array.isArray(obj);
162
163
  }
163
164
  function refElement(obj) {
164
- return obj && '$el' in obj ? obj.$el : obj;
165
+ if (obj && '$el' in obj) {
166
+ const el = obj.$el;
167
+ if (el?.nodeType === Node.TEXT_NODE) {
168
+ // Multi-root component, use the first element
169
+ return el.nextElementSibling;
170
+ }
171
+ return el;
172
+ }
173
+ return obj;
165
174
  }
166
175
 
167
176
  // KeyboardEvent.keyCode aliases
@@ -228,14 +237,22 @@
228
237
  exclude.forEach(prop => delete clone[prop]);
229
238
  return clone;
230
239
  }
240
+ const onRE = /^on[^a-z]/;
241
+ const isOn = key => onRE.test(key);
242
+ 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'];
231
243
 
232
244
  /**
233
245
  * Filter attributes that should be applied to
234
- * the root element of a an input component. Remaining
246
+ * the root element of an input component. Remaining
235
247
  * attributes should be passed to the <input> element inside.
236
248
  */
237
249
  function filterInputAttrs(attrs) {
238
- return pick(attrs, ['class', 'style', 'id', /^data-/]);
250
+ const [events, props] = pick(attrs, [onRE]);
251
+ const inputEvents = omit(events, bubblingEvents);
252
+ const [rootAttrs, inputAttrs] = pick(props, ['class', 'style', 'id', /^data-/]);
253
+ Object.assign(rootAttrs, events);
254
+ Object.assign(inputAttrs, inputEvents);
255
+ return [rootAttrs, inputAttrs];
239
256
  }
240
257
  function wrapInArray(v) {
241
258
  return v == null ? [] : Array.isArray(v) ? v : [v];
@@ -388,8 +405,6 @@
388
405
  function includes(arr, val) {
389
406
  return arr.includes(val);
390
407
  }
391
- const onRE = /^on[^a-z]/;
392
- const isOn = key => onRE.test(key);
393
408
  function eventName(propName) {
394
409
  return propName[2].toLowerCase() + propName.slice(3);
395
410
  }
@@ -546,6 +561,18 @@
546
561
  }
547
562
  };
548
563
  }
564
+ function getTargetBox(target) {
565
+ if (Array.isArray(target)) {
566
+ return new Box({
567
+ x: target[0],
568
+ y: target[1],
569
+ width: 0,
570
+ height: 0
571
+ });
572
+ } else {
573
+ return target.getBoundingClientRect();
574
+ }
575
+ }
549
576
 
550
577
  // Utilities
551
578
 
@@ -1017,34 +1044,6 @@
1017
1044
 
1018
1045
  // Types
1019
1046
 
1020
- function useToggleScope(source, fn) {
1021
- let scope;
1022
- function start() {
1023
- scope = vue.effectScope();
1024
- scope.run(() => fn.length ? fn(() => {
1025
- scope?.stop();
1026
- start();
1027
- }) : fn());
1028
- }
1029
- vue.watch(source, active => {
1030
- if (active && !scope) {
1031
- start();
1032
- } else if (!active) {
1033
- scope?.stop();
1034
- scope = undefined;
1035
- }
1036
- }, {
1037
- immediate: true
1038
- });
1039
- vue.onScopeDispose(() => {
1040
- scope?.stop();
1041
- });
1042
- }
1043
-
1044
- // Composables
1045
-
1046
- // Types
1047
-
1048
1047
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
1049
1048
  function createDefaults(options) {
1050
1049
  return vue.ref(options);
@@ -1063,6 +1062,7 @@
1063
1062
  const scoped = vue.unref(options?.scoped);
1064
1063
  const reset = vue.unref(options?.reset);
1065
1064
  const root = vue.unref(options?.root);
1065
+ if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
1066
1066
  let properties = mergeDeep(providedDefaults.value, {
1067
1067
  prev: injectedDefaults.value
1068
1068
  });
@@ -1118,16 +1118,16 @@
1118
1118
  let [key] = _ref;
1119
1119
  return key.startsWith(key[0].toUpperCase());
1120
1120
  });
1121
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1121
+ _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
1122
+ } else {
1123
+ _subcomponentDefaults.value = undefined;
1122
1124
  }
1123
1125
  });
1124
1126
  function provideSubDefaults() {
1125
- // If subcomponent defaults are provided, override any
1126
- // subcomponents provided by the component's setup function.
1127
- // This uses injectSelf so must be done after the original setup to work.
1128
- useToggleScope(_subcomponentDefaults, () => {
1129
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1130
- });
1127
+ const injected = injectSelf(DefaultsSymbol, vm);
1128
+ vue.provide(DefaultsSymbol, vue.computed(() => {
1129
+ return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
1130
+ }));
1131
1131
  }
1132
1132
  return {
1133
1133
  props: _props,
@@ -1305,9 +1305,10 @@
1305
1305
  // Types
1306
1306
 
1307
1307
  function injectSelf(key) {
1308
+ let vm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstance('injectSelf');
1308
1309
  const {
1309
1310
  provides
1310
- } = getCurrentInstance('injectSelf');
1311
+ } = vm;
1311
1312
  if (provides && key in provides) {
1312
1313
  // TS doesn't allow symbol as index type
1313
1314
  return provides[key];
@@ -1645,6 +1646,7 @@
1645
1646
 
1646
1647
  var en = {
1647
1648
  badge: 'Badge',
1649
+ open: 'Open',
1648
1650
  close: 'Close',
1649
1651
  dataIterator: {
1650
1652
  noResultsText: 'No matching records found',
@@ -1783,6 +1785,34 @@
1783
1785
  zhHant: false
1784
1786
  };
1785
1787
 
1788
+ // Utilities
1789
+
1790
+ // Types
1791
+
1792
+ function useToggleScope(source, fn) {
1793
+ let scope;
1794
+ function start() {
1795
+ scope = vue.effectScope();
1796
+ scope.run(() => fn.length ? fn(() => {
1797
+ scope?.stop();
1798
+ start();
1799
+ }) : fn());
1800
+ }
1801
+ vue.watch(source, active => {
1802
+ if (active && !scope) {
1803
+ start();
1804
+ } else if (!active) {
1805
+ scope?.stop();
1806
+ scope = undefined;
1807
+ }
1808
+ }, {
1809
+ immediate: true
1810
+ });
1811
+ vue.onScopeDispose(() => {
1812
+ scope?.stop();
1813
+ });
1814
+ }
1815
+
1786
1816
  // Composables
1787
1817
 
1788
1818
  // Types
@@ -2095,9 +2125,9 @@
2095
2125
  surface: '#FFFFFF',
2096
2126
  'surface-variant': '#424242',
2097
2127
  'on-surface-variant': '#EEEEEE',
2098
- primary: '#6200EE',
2099
- 'primary-darken-1': '#3700B3',
2100
- secondary: '#03DAC6',
2128
+ primary: '#1867C0',
2129
+ 'primary-darken-1': '#1F5592',
2130
+ secondary: '#48A9A6',
2101
2131
  'secondary-darken-1': '#018786',
2102
2132
  error: '#B00020',
2103
2133
  info: '#2196F3',
@@ -2130,10 +2160,10 @@
2130
2160
  surface: '#212121',
2131
2161
  'surface-variant': '#BDBDBD',
2132
2162
  'on-surface-variant': '#424242',
2133
- primary: '#BB86FC',
2134
- 'primary-darken-1': '#3700B3',
2135
- secondary: '#03DAC5',
2136
- 'secondary-darken-1': '#03DAC5',
2163
+ primary: '#2196F3',
2164
+ 'primary-darken-1': '#277CC1',
2165
+ secondary: '#54B6B2',
2166
+ 'secondary-darken-1': '#48A9A6',
2137
2167
  error: '#CF6679',
2138
2168
  info: '#2196F3',
2139
2169
  success: '#4CAF50',
@@ -2618,7 +2648,7 @@
2618
2648
  // Types
2619
2649
 
2620
2650
  const makeVDialogTransitionProps = propsFactory({
2621
- target: Object
2651
+ target: [Object, Array]
2622
2652
  }, 'v-dialog-transition');
2623
2653
  const VDialogTransition = genericComponent()({
2624
2654
  name: 'VDialogTransition',
@@ -2720,7 +2750,7 @@
2720
2750
  return els && [...els];
2721
2751
  }
2722
2752
  function getDimensions(target, el) {
2723
- const targetBox = target.getBoundingClientRect();
2753
+ const targetBox = getTargetBox(target);
2724
2754
  const elBox = nullifyTransforms(el);
2725
2755
  const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v));
2726
2756
  const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ');
@@ -2966,6 +2996,10 @@
2966
2996
  const makeVImgProps = propsFactory({
2967
2997
  alt: String,
2968
2998
  cover: Boolean,
2999
+ draggable: {
3000
+ type: [Boolean, String],
3001
+ default: undefined
3002
+ },
2969
3003
  eager: Boolean,
2970
3004
  gradient: String,
2971
3005
  lazySrc: String,
@@ -2984,6 +3018,8 @@
2984
3018
  type: [String, Object],
2985
3019
  default: ''
2986
3020
  },
3021
+ crossorigin: String,
3022
+ referrerpolicy: String,
2987
3023
  srcset: String,
2988
3024
  ...makeVResponsiveProps(),
2989
3025
  ...makeComponentProps(),
@@ -3108,6 +3144,9 @@
3108
3144
  "src": normalisedSrc.value.src,
3109
3145
  "srcset": normalisedSrc.value.srcset,
3110
3146
  "alt": props.alt,
3147
+ "crossorigin": props.crossorigin,
3148
+ "referrerpolicy": props.referrerpolicy,
3149
+ "draggable": props.draggable,
3111
3150
  "sizes": props.sizes,
3112
3151
  "ref": image,
3113
3152
  "onLoad": onLoad,
@@ -3129,7 +3168,10 @@
3129
3168
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && vue.createVNode("img", {
3130
3169
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
3131
3170
  "src": normalisedSrc.value.lazySrc,
3132
- "alt": props.alt
3171
+ "alt": props.alt,
3172
+ "crossorigin": props.crossorigin,
3173
+ "referrerpolicy": props.referrerpolicy,
3174
+ "draggable": props.draggable
3133
3175
  }, null)]
3134
3176
  });
3135
3177
  const __placeholder = () => {
@@ -4148,7 +4190,8 @@
4148
4190
  file: 'mdi-paperclip',
4149
4191
  plus: 'mdi-plus',
4150
4192
  minus: 'mdi-minus',
4151
- calendar: 'mdi-calendar'
4193
+ calendar: 'mdi-calendar',
4194
+ eyeDropper: 'mdi-eyedropper'
4152
4195
  };
4153
4196
  const mdi = {
4154
4197
  // Not using mergeProps here, functional components merge props by default (?)
@@ -5738,6 +5781,7 @@
5738
5781
 
5739
5782
  const makeVSelectionControlProps = propsFactory({
5740
5783
  label: String,
5784
+ baseColor: String,
5741
5785
  trueValue: null,
5742
5786
  falseValue: null,
5743
5787
  value: null,
@@ -5776,7 +5820,8 @@
5776
5820
  textColorClasses,
5777
5821
  textColorStyles
5778
5822
  } = useTextColor(vue.computed(() => {
5779
- return model.value && !props.error && !props.disabled ? props.color : undefined;
5823
+ if (props.error || props.disabled) return undefined;
5824
+ return model.value ? props.color : props.baseColor;
5780
5825
  }));
5781
5826
  const icon = vue.computed(() => model.value ? props.trueIcon : props.falseIcon);
5782
5827
  return {
@@ -5848,6 +5893,20 @@
5848
5893
  }
5849
5894
  }) : props.label;
5850
5895
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
5896
+ const inputNode = vue.createVNode("input", vue.mergeProps({
5897
+ "ref": input,
5898
+ "checked": model.value,
5899
+ "disabled": !!(props.readonly || props.disabled),
5900
+ "id": id.value,
5901
+ "onBlur": onBlur,
5902
+ "onFocus": onFocus,
5903
+ "onInput": onInput,
5904
+ "aria-disabled": !!(props.readonly || props.disabled),
5905
+ "type": props.type,
5906
+ "value": trueValue.value,
5907
+ "name": props.name,
5908
+ "aria-checked": props.type === 'checkbox' ? model.value : undefined
5909
+ }, inputAttrs), null);
5851
5910
  return vue.createVNode("div", vue.mergeProps({
5852
5911
  "class": ['v-selection-control', {
5853
5912
  'v-selection-control--dirty': model.value,
@@ -5864,34 +5923,24 @@
5864
5923
  "style": textColorStyles.value
5865
5924
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
5866
5925
  "class": ['v-selection-control__input']
5867
- }, [icon.value && vue.createVNode(VIcon, {
5868
- "key": "icon",
5869
- "icon": icon.value
5870
- }, null), vue.createVNode("input", vue.mergeProps({
5871
- "ref": input,
5872
- "checked": model.value,
5873
- "disabled": !!(props.readonly || props.disabled),
5874
- "id": id.value,
5875
- "onBlur": onBlur,
5876
- "onFocus": onFocus,
5877
- "onInput": onInput,
5878
- "aria-disabled": !!(props.readonly || props.disabled),
5879
- "type": props.type,
5880
- "value": trueValue.value,
5881
- "name": props.name,
5882
- "aria-checked": props.type === 'checkbox' ? model.value : undefined
5883
- }, inputAttrs), null), slots.input?.({
5926
+ }, [slots.input?.({
5884
5927
  model,
5885
5928
  textColorClasses,
5886
5929
  textColorStyles,
5930
+ inputNode,
5931
+ icon: icon.value,
5887
5932
  props: {
5888
5933
  onFocus,
5889
5934
  onBlur,
5890
5935
  id: id.value
5891
5936
  }
5892
- })]), [[vue.resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && vue.createVNode(VLabel, {
5937
+ }) ?? vue.createVNode(vue.Fragment, null, [icon.value && vue.createVNode(VIcon, {
5938
+ "key": "icon",
5939
+ "icon": icon.value
5940
+ }, null), inputNode])]), [[vue.resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && vue.createVNode(VLabel, {
5893
5941
  "for": id.value,
5894
- "clickable": true
5942
+ "clickable": true,
5943
+ "onClick": e => e.stopPropagation()
5895
5944
  }, {
5896
5945
  default: () => [label]
5897
5946
  })]);
@@ -5940,16 +5989,19 @@
5940
5989
  const trueIcon = vue.computed(() => {
5941
5990
  return indeterminate.value ? props.indeterminateIcon : props.trueIcon;
5942
5991
  });
5943
- useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
5944
- "modelValue": model.value,
5945
- "onUpdate:modelValue": [$event => model.value = $event, onChange],
5946
- "class": ['v-checkbox-btn', props.class],
5947
- "style": props.style,
5948
- "type": "checkbox",
5949
- "falseIcon": falseIcon.value,
5950
- "trueIcon": trueIcon.value,
5951
- "aria-checked": indeterminate.value ? 'mixed' : undefined
5952
- }), slots));
5992
+ useRender(() => {
5993
+ const controlProps = omit(VSelectionControl.filterProps(props)[0], ['modelValue']);
5994
+ return vue.createVNode(VSelectionControl, vue.mergeProps(controlProps, {
5995
+ "modelValue": model.value,
5996
+ "onUpdate:modelValue": [$event => model.value = $event, onChange],
5997
+ "class": ['v-checkbox-btn', props.class],
5998
+ "style": props.style,
5999
+ "type": "checkbox",
6000
+ "falseIcon": falseIcon.value,
6001
+ "trueIcon": trueIcon.value,
6002
+ "aria-checked": indeterminate.value ? 'mixed' : undefined
6003
+ }), slots);
6004
+ });
5953
6005
  return {};
5954
6006
  }
5955
6007
  });
@@ -6513,12 +6565,12 @@
6513
6565
  const uid = getUid();
6514
6566
  const id = vue.computed(() => props.id || `checkbox-${uid}`);
6515
6567
  useRender(() => {
6516
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6568
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
6517
6569
  const [inputProps, _1] = VInput.filterProps(props);
6518
6570
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6519
6571
  return vue.createVNode(VInput, vue.mergeProps({
6520
6572
  "class": ['v-checkbox', props.class]
6521
- }, inputAttrs, inputProps, {
6573
+ }, rootAttrs, inputProps, {
6522
6574
  "modelValue": model.value,
6523
6575
  "onUpdate:modelValue": $event => model.value = $event,
6524
6576
  "id": id.value,
@@ -6556,6 +6608,7 @@
6556
6608
  end: Boolean,
6557
6609
  icon: IconValue,
6558
6610
  image: String,
6611
+ text: String,
6559
6612
  ...makeComponentProps(),
6560
6613
  ...makeDensityProps(),
6561
6614
  ...makeRoundedProps(),
@@ -6606,7 +6659,7 @@
6606
6659
  }, null) : props.icon ? vue.createVNode(VIcon, {
6607
6660
  "key": "icon",
6608
6661
  "icon": props.icon
6609
- }, null) : slots.default?.(), genOverlays(false, 'v-avatar')]
6662
+ }, null) : slots.default?.() ?? props.text, genOverlays(false, 'v-avatar')]
6610
6663
  }));
6611
6664
  return {};
6612
6665
  }
@@ -7658,7 +7711,6 @@
7658
7711
  "style": [colorStyles.value, dimensionStyles.value, props.style],
7659
7712
  "href": link.href.value,
7660
7713
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
7661
- "title": props.title,
7662
7714
  "onClick": onClick,
7663
7715
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7664
7716
  }, {
@@ -7691,7 +7743,9 @@
7691
7743
  }
7692
7744
  }, {
7693
7745
  default: () => [slots.prepend?.(slotProps.value)]
7694
- })]), vue.createVNode("div", {
7746
+ }), vue.createVNode("div", {
7747
+ "class": "v-list-item__spacer"
7748
+ }, null)]), vue.createVNode("div", {
7695
7749
  "class": "v-list-item__content",
7696
7750
  "data-no-activator": ""
7697
7751
  }, [hasTitle && vue.createVNode(VListItemTitle, {
@@ -7735,7 +7789,9 @@
7735
7789
  }
7736
7790
  }, {
7737
7791
  default: () => [slots.append?.(slotProps.value)]
7738
- })])]
7792
+ }), vue.createVNode("div", {
7793
+ "class": "v-list-item__spacer"
7794
+ }, null)])]
7739
7795
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7740
7796
  });
7741
7797
  return {};
@@ -8384,7 +8440,7 @@
8384
8440
  return contentBox;
8385
8441
  }
8386
8442
  function connectedLocationStrategy(data, props, contentStyles) {
8387
- const activatorFixed = isFixedPosition(data.activatorEl.value);
8443
+ const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value);
8388
8444
  if (activatorFixed) {
8389
8445
  Object.assign(contentStyles.value, {
8390
8446
  position: 'fixed',
@@ -8433,11 +8489,11 @@
8433
8489
  const observer = new ResizeObserver(() => {
8434
8490
  if (observe) updateLocation();
8435
8491
  });
8436
- vue.watch([data.activatorEl, data.contentEl], (_ref, _ref2) => {
8437
- let [newActivatorEl, newContentEl] = _ref;
8438
- let [oldActivatorEl, oldContentEl] = _ref2;
8439
- if (oldActivatorEl) observer.unobserve(oldActivatorEl);
8440
- if (newActivatorEl) observer.observe(newActivatorEl);
8492
+ vue.watch([data.target, data.contentEl], (_ref, _ref2) => {
8493
+ let [newTarget, newContentEl] = _ref;
8494
+ let [oldTarget, oldContentEl] = _ref2;
8495
+ if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget);
8496
+ if (newTarget && !Array.isArray(newTarget)) observer.observe(newTarget);
8441
8497
  if (oldContentEl) observer.unobserve(oldContentEl);
8442
8498
  if (newContentEl) observer.observe(newContentEl);
8443
8499
  }, {
@@ -8453,8 +8509,8 @@
8453
8509
  requestAnimationFrame(() => {
8454
8510
  requestAnimationFrame(() => observe = true);
8455
8511
  });
8456
- if (!data.activatorEl.value || !data.contentEl.value) return;
8457
- const targetBox = data.activatorEl.value.getBoundingClientRect();
8512
+ if (!data.target.value || !data.contentEl.value) return;
8513
+ const targetBox = getTargetBox(data.target.value);
8458
8514
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
8459
8515
  const scrollParents = getScrollParents(data.contentEl.value);
8460
8516
  const viewportMargin = 12;
@@ -8741,11 +8797,11 @@
8741
8797
  function onScroll(e) {
8742
8798
  data.isActive.value = false;
8743
8799
  }
8744
- bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll);
8800
+ bindScroll(data.targetEl.value ?? data.contentEl.value, onScroll);
8745
8801
  }
8746
8802
  function blockScrollStrategy(data, props) {
8747
8803
  const offsetParent = data.root.value?.offsetParent;
8748
- 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'));
8804
+ 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'));
8749
8805
  const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth;
8750
8806
  const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement);
8751
8807
  if (scrollableParent) {
@@ -8789,7 +8845,7 @@
8789
8845
  }
8790
8846
  ric = (typeof requestIdleCallback === 'undefined' ? cb => cb() : requestIdleCallback)(() => {
8791
8847
  scope.run(() => {
8792
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
8848
+ bindScroll(data.targetEl.value ?? data.contentEl.value, e => {
8793
8849
  if (slow) {
8794
8850
  // If the position calculation is slow,
8795
8851
  // defer updates until scrolling is finished.
@@ -8870,6 +8926,7 @@
8870
8926
  // Types
8871
8927
 
8872
8928
  const makeActivatorProps = propsFactory({
8929
+ target: [String, Object],
8873
8930
  activator: [String, Object],
8874
8931
  activatorProps: {
8875
8932
  type: Object,
@@ -8892,6 +8949,7 @@
8892
8949
  isActive,
8893
8950
  isTop
8894
8951
  } = _ref;
8952
+ const vm = getCurrentInstance('useActivator');
8895
8953
  const activatorEl = vue.ref();
8896
8954
  let isHovered = false;
8897
8955
  let isFocused = false;
@@ -8909,10 +8967,14 @@
8909
8967
  isActive.value = value;
8910
8968
  }
8911
8969
  });
8970
+ const cursorTarget = vue.ref();
8912
8971
  const availableEvents = {
8913
8972
  onClick: e => {
8914
8973
  e.stopPropagation();
8915
8974
  activatorEl.value = e.currentTarget || e.target;
8975
+ if (!isActive.value) {
8976
+ cursorTarget.value = [e.clientX, e.clientY];
8977
+ }
8916
8978
  isActive.value = !isActive.value;
8917
8979
  },
8918
8980
  onMouseenter: e => {
@@ -9006,6 +9068,15 @@
9006
9068
  isActive.value = false;
9007
9069
  }
9008
9070
  });
9071
+ vue.watch(isActive, val => {
9072
+ if (!val) {
9073
+ setTimeout(() => {
9074
+ cursorTarget.value = undefined;
9075
+ });
9076
+ }
9077
+ }, {
9078
+ flush: 'post'
9079
+ });
9009
9080
  const activatorRef = vue.ref();
9010
9081
  vue.watchEffect(() => {
9011
9082
  if (!activatorRef.value) return;
@@ -9013,7 +9084,15 @@
9013
9084
  activatorEl.value = refElement(activatorRef.value);
9014
9085
  });
9015
9086
  });
9016
- const vm = getCurrentInstance('useActivator');
9087
+ const targetRef = vue.ref();
9088
+ const target = vue.computed(() => {
9089
+ if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
9090
+ if (targetRef.value) return refElement(targetRef.value);
9091
+ return getTarget(props.target, vm) || activatorEl.value;
9092
+ });
9093
+ const targetEl = vue.computed(() => {
9094
+ return Array.isArray(target.value) ? undefined : target.value;
9095
+ });
9017
9096
  let scope;
9018
9097
  vue.watch(() => !!props.activator, val => {
9019
9098
  if (val && IN_BROWSER) {
@@ -9037,6 +9116,9 @@
9037
9116
  return {
9038
9117
  activatorEl,
9039
9118
  activatorRef,
9119
+ target,
9120
+ targetEl,
9121
+ targetRef,
9040
9122
  activatorEvents,
9041
9123
  contentEvents,
9042
9124
  scrimEvents
@@ -9078,31 +9160,34 @@
9078
9160
  }
9079
9161
  function getActivator() {
9080
9162
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
9081
- let activator;
9082
- if (selector) {
9083
- if (selector === 'parent') {
9084
- let el = vm?.proxy?.$el?.parentNode;
9085
- while (el.hasAttribute('data-no-activator')) {
9086
- el = el.parentNode;
9087
- }
9088
- activator = el;
9089
- } else if (typeof selector === 'string') {
9090
- // Selector
9091
- activator = document.querySelector(selector);
9092
- } else if ('$el' in selector) {
9093
- // Component (ref)
9094
- activator = selector.$el;
9095
- } else {
9096
- // HTMLElement | Element
9097
- activator = selector;
9098
- }
9099
- }
9163
+ const activator = getTarget(selector, vm);
9100
9164
 
9101
9165
  // The activator should only be a valid element (Ignore comments and text nodes)
9102
- activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null;
9166
+ activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;
9103
9167
  return activatorEl.value;
9104
9168
  }
9105
9169
  }
9170
+ function getTarget(selector, vm) {
9171
+ if (!selector) return;
9172
+ let target;
9173
+ if (selector === 'parent') {
9174
+ let el = vm?.proxy?.$el?.parentNode;
9175
+ while (el.hasAttribute('data-no-activator')) {
9176
+ el = el.parentNode;
9177
+ }
9178
+ target = el;
9179
+ } else if (typeof selector === 'string') {
9180
+ // Selector
9181
+ target = document.querySelector(selector);
9182
+ } else if ('$el' in selector) {
9183
+ // Component (ref)
9184
+ target = selector.$el;
9185
+ } else {
9186
+ // HTMLElement | Element | [x, y]
9187
+ target = selector;
9188
+ }
9189
+ return target;
9190
+ }
9106
9191
 
9107
9192
  // Utilities
9108
9193
 
@@ -9226,10 +9311,30 @@
9226
9311
  ssr: !!ssr
9227
9312
  };
9228
9313
  }
9314
+ const makeDisplayProps = propsFactory({
9315
+ mobileBreakpoint: [Number, String]
9316
+ }, 'display');
9229
9317
  function useDisplay() {
9318
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9319
+ let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
9230
9320
  const display = vue.inject(DisplaySymbol);
9231
9321
  if (!display) throw new Error('Could not find Vuetify display injection');
9232
- return display;
9322
+ const mobile = vue.computed(() => {
9323
+ if (!props.mobileBreakpoint) return display.mobile.value;
9324
+ const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
9325
+ return display.width.value < breakpointValue;
9326
+ });
9327
+ const displayClasses = vue.computed(() => {
9328
+ if (!name) return {};
9329
+ return {
9330
+ [`${name}--mobile`]: mobile.value
9331
+ };
9332
+ });
9333
+ return {
9334
+ ...display,
9335
+ displayClasses,
9336
+ mobile
9337
+ };
9233
9338
  }
9234
9339
 
9235
9340
  // Composables
@@ -9546,6 +9651,9 @@
9546
9651
  const {
9547
9652
  activatorEl,
9548
9653
  activatorRef,
9654
+ target,
9655
+ targetEl,
9656
+ targetRef,
9549
9657
  activatorEvents,
9550
9658
  contentEvents,
9551
9659
  scrimEvents
@@ -9571,13 +9679,13 @@
9571
9679
  } = useLocationStrategies(props, {
9572
9680
  isRtl,
9573
9681
  contentEl,
9574
- activatorEl,
9682
+ target,
9575
9683
  isActive
9576
9684
  });
9577
9685
  useScrollStrategies(props, {
9578
9686
  root,
9579
9687
  contentEl,
9580
- activatorEl,
9688
+ targetEl,
9581
9689
  isActive,
9582
9690
  updateLocation
9583
9691
  });
@@ -9645,7 +9753,8 @@
9645
9753
  useRender(() => vue.createVNode(vue.Fragment, null, [slots.activator?.({
9646
9754
  isActive: isActive.value,
9647
9755
  props: vue.mergeProps({
9648
- ref: activatorRef
9756
+ ref: activatorRef,
9757
+ targetRef
9649
9758
  }, activatorEvents.value, props.activatorProps)
9650
9759
  }), isMounted.value && hasContent.value && vue.createVNode(vue.Teleport, {
9651
9760
  "disabled": !teleportTarget.value,
@@ -9668,7 +9777,7 @@
9668
9777
  "appear": true,
9669
9778
  "persisted": true,
9670
9779
  "transition": props.transition,
9671
- "target": activatorEl.value,
9780
+ "target": target.value,
9672
9781
  "onAfterLeave": () => {
9673
9782
  onAfterLeave();
9674
9783
  emit('afterLeave');
@@ -9689,6 +9798,7 @@
9689
9798
  })]));
9690
9799
  return {
9691
9800
  activatorEl,
9801
+ target,
9692
9802
  animateClick,
9693
9803
  contentEl,
9694
9804
  globalTop,
@@ -9846,10 +9956,11 @@
9846
9956
  }, 40);
9847
9957
  }
9848
9958
  });
9849
- function onFocusIn(e) {
9959
+ async function onFocusIn(e) {
9850
9960
  const before = e.relatedTarget;
9851
9961
  const after = e.target;
9852
- if (before !== after && overlay.value?.contentEl &&
9962
+ await vue.nextTick();
9963
+ if (isActive.value && before !== after && overlay.value?.contentEl &&
9853
9964
  // We're the topmost menu
9854
9965
  overlay.value?.globalTop &&
9855
9966
  // It isn't the document or the menu body
@@ -10185,7 +10296,7 @@
10185
10296
  'v-field--no-label': !label,
10186
10297
  [`v-field--variant-${props.variant}`]: true
10187
10298
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
10188
- "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
10299
+ "style": [backgroundColorStyles.value, props.style],
10189
10300
  "onClick": onClick
10190
10301
  }, attrs), [vue.createVNode("div", {
10191
10302
  "class": "v-field__overlay"
@@ -10209,7 +10320,8 @@
10209
10320
  "ref": floatingLabelRef,
10210
10321
  "class": [textColorClasses.value],
10211
10322
  "floating": true,
10212
- "for": id.value
10323
+ "for": id.value,
10324
+ "style": textColorStyles.value
10213
10325
  }, {
10214
10326
  default: () => [label]
10215
10327
  }), vue.createVNode(VFieldLabel, {
@@ -10245,7 +10357,8 @@
10245
10357
  "key": "append-icon",
10246
10358
  "name": "appendInner"
10247
10359
  }, null)]), vue.createVNode("div", {
10248
- "class": ['v-field__outline', textColorClasses.value]
10360
+ "class": ['v-field__outline', textColorClasses.value],
10361
+ "style": textColorStyles.value
10249
10362
  }, [isOutlined && vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
10250
10363
  "class": "v-field__outline__start"
10251
10364
  }, null), hasLabel.value && vue.createVNode("div", {
@@ -10289,6 +10402,7 @@
10289
10402
  persistentPlaceholder: Boolean,
10290
10403
  persistentCounter: Boolean,
10291
10404
  suffix: String,
10405
+ role: String,
10292
10406
  type: {
10293
10407
  type: String,
10294
10408
  default: 'text'
@@ -10413,7 +10527,7 @@
10413
10527
  "onClick:clear": onClear,
10414
10528
  "onClick:prependInner": props['onClick:prependInner'],
10415
10529
  "onClick:appendInner": props['onClick:appendInner'],
10416
- "role": "textbox"
10530
+ "role": props.role
10417
10531
  }, fieldProps, {
10418
10532
  "id": id.value,
10419
10533
  "active": isActive.value || isDirty.value,
@@ -10452,10 +10566,12 @@
10452
10566
  "class": "v-text-field__prefix"
10453
10567
  }, [vue.createVNode("span", {
10454
10568
  "class": "v-text-field__prefix__text"
10455
- }, [props.prefix])]), vue.createVNode("div", {
10569
+ }, [props.prefix])]), slots.default ? vue.createVNode("div", {
10456
10570
  "class": fieldClass,
10457
10571
  "data-no-activator": ""
10458
- }, [slots.default ? vue.createVNode(vue.Fragment, null, [slots.default(), inputNode]) : vue.cloneVNode(inputNode)]), props.suffix && vue.createVNode("span", {
10572
+ }, [slots.default(), inputNode]) : vue.cloneVNode(inputNode, {
10573
+ class: fieldClass
10574
+ }), props.suffix && vue.createVNode("span", {
10459
10575
  "class": "v-text-field__suffix"
10460
10576
  }, [vue.createVNode("span", {
10461
10577
  "class": "v-text-field__suffix__text"
@@ -10774,6 +10890,14 @@
10774
10890
  const makeSelectProps = propsFactory({
10775
10891
  chips: Boolean,
10776
10892
  closableChips: Boolean,
10893
+ closeText: {
10894
+ type: String,
10895
+ default: '$vuetify.close'
10896
+ },
10897
+ openText: {
10898
+ type: String,
10899
+ default: '$vuetify.open'
10900
+ },
10777
10901
  eager: Boolean,
10778
10902
  hideNoData: Boolean,
10779
10903
  hideSelected: Boolean,
@@ -10803,7 +10927,8 @@
10803
10927
  const makeVSelectProps = propsFactory({
10804
10928
  ...makeSelectProps(),
10805
10929
  ...omit(makeVTextFieldProps({
10806
- modelValue: null
10930
+ modelValue: null,
10931
+ role: 'button'
10807
10932
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
10808
10933
  ...makeTransitionProps({
10809
10934
  transition: {
@@ -10858,6 +10983,7 @@
10858
10983
  });
10859
10984
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
10860
10985
  const isFocused = vue.shallowRef(false);
10986
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
10861
10987
  let keyboardLookupPrefix = '';
10862
10988
  let keyboardLookupLastTime;
10863
10989
  const displayItems = vue.computed(() => {
@@ -10984,7 +11110,9 @@
10984
11110
  "onClick:clear": onClear,
10985
11111
  "onMousedown:control": onMousedownControl,
10986
11112
  "onBlur": onBlur,
10987
- "onKeydown": onKeydown
11113
+ "onKeydown": onKeydown,
11114
+ "aria-label": t(label.value),
11115
+ "title": t(label.value)
10988
11116
  }), {
10989
11117
  ...slots,
10990
11118
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, vue.mergeProps({
@@ -11247,7 +11375,8 @@
11247
11375
  }),
11248
11376
  ...makeSelectProps(),
11249
11377
  ...omit(makeVTextFieldProps({
11250
- modelValue: null
11378
+ modelValue: null,
11379
+ role: 'combobox'
11251
11380
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
11252
11381
  ...makeTransitionProps({
11253
11382
  transition: false
@@ -11284,6 +11413,7 @@
11284
11413
  });
11285
11414
  const selectionIndex = vue.shallowRef(-1);
11286
11415
  const color = vue.computed(() => vTextFieldRef.value?.color);
11416
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
11287
11417
  const {
11288
11418
  items,
11289
11419
  transformIn,
@@ -11631,7 +11761,9 @@
11631
11761
  "class": "v-autocomplete__menu-icon",
11632
11762
  "icon": props.menuIcon,
11633
11763
  "onMousedown": onMousedownMenuIcon,
11634
- "onClick": noop
11764
+ "onClick": noop,
11765
+ "aria-label": t(label.value),
11766
+ "title": t(label.value)
11635
11767
  }, null) : undefined]);
11636
11768
  }
11637
11769
  });
@@ -11786,6 +11918,7 @@
11786
11918
  ...makeComponentProps(),
11787
11919
  ...makeDensityProps(),
11788
11920
  ...makeDimensionProps(),
11921
+ ...makeDisplayProps(),
11789
11922
  ...makeElevationProps(),
11790
11923
  ...makeLocationProps(),
11791
11924
  ...makePositionProps(),
@@ -11807,8 +11940,9 @@
11807
11940
  densityClasses
11808
11941
  } = useDensity(props);
11809
11942
  const {
11943
+ displayClasses,
11810
11944
  mobile
11811
- } = useDisplay();
11945
+ } = useDisplay(props);
11812
11946
  const {
11813
11947
  dimensionStyles
11814
11948
  } = useDimension(props);
@@ -11844,7 +11978,7 @@
11844
11978
  'v-banner--stacked': props.stacked || mobile.value,
11845
11979
  'v-banner--sticky': props.sticky,
11846
11980
  [`v-banner--${props.lines}-line`]: !!props.lines
11847
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11981
+ }, borderClasses.value, densityClasses.value, displayClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11848
11982
  "style": [dimensionStyles.value, locationStyles.value, props.style],
11849
11983
  "role": "banner"
11850
11984
  }, {
@@ -12151,12 +12285,17 @@
12151
12285
  item,
12152
12286
  raw
12153
12287
  } = _ref2;
12154
- return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
12155
- "key": item.title,
12288
+ return vue.createVNode(vue.Fragment, null, [slots.item?.({
12289
+ item,
12290
+ index
12291
+ }) ?? vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
12292
+ "key": index,
12156
12293
  "disabled": index >= array.length - 1
12157
- }, item), {
12294
+ }, typeof item === 'string' ? {
12295
+ title: item
12296
+ } : item), {
12158
12297
  default: slots.title ? () => slots.title?.({
12159
- item: raw,
12298
+ item,
12160
12299
  index
12161
12300
  }) : undefined
12162
12301
  }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
@@ -13494,7 +13633,11 @@
13494
13633
  ...makeRoundedProps(),
13495
13634
  ...makeElevationProps({
13496
13635
  elevation: 2
13497
- })
13636
+ }),
13637
+ ripple: {
13638
+ type: Boolean,
13639
+ default: true
13640
+ }
13498
13641
  }, 'Slider');
13499
13642
  const useSteps = props => {
13500
13643
  const min = vue.computed(() => parseFloat(props.min));
@@ -14101,7 +14244,8 @@
14101
14244
  "position": trackStop.value,
14102
14245
  "elevation": props.elevation,
14103
14246
  "onFocus": focus,
14104
- "onBlur": blur
14247
+ "onBlur": blur,
14248
+ "ripple": props.ripple
14105
14249
  }, {
14106
14250
  'thumb-label': slots['thumb-label']
14107
14251
  })]);
@@ -14132,12 +14276,36 @@
14132
14276
  let {
14133
14277
  emit
14134
14278
  } = _ref;
14279
+ const abortController = new AbortController();
14280
+ vue.onUnmounted(() => abortController.abort());
14281
+ async function openEyeDropper() {
14282
+ if (!SUPPORTS_EYE_DROPPER) return;
14283
+ const eyeDropper = new window.EyeDropper();
14284
+ try {
14285
+ const result = await eyeDropper.open({
14286
+ signal: abortController.signal
14287
+ });
14288
+ const colorHexValue = HexToHSV(result.sRGBHex);
14289
+ emit('update:color', {
14290
+ ...(props.color ?? nullColor),
14291
+ ...colorHexValue
14292
+ });
14293
+ } catch (e) {}
14294
+ }
14135
14295
  useRender(() => vue.createVNode("div", {
14136
14296
  "class": ['v-color-picker-preview', {
14137
14297
  'v-color-picker-preview--hide-alpha': props.hideAlpha
14138
14298
  }, props.class],
14139
14299
  "style": props.style
14140
- }, [vue.createVNode("div", {
14300
+ }, [SUPPORTS_EYE_DROPPER && vue.createVNode("div", {
14301
+ "class": "v-color-picker-preview__eye-dropper",
14302
+ "key": "eyeDropper"
14303
+ }, [vue.createVNode(VBtn, {
14304
+ "onClick": openEyeDropper,
14305
+ "icon": "$eyeDropper",
14306
+ "variant": "plain",
14307
+ "density": "comfortable"
14308
+ }, null)]), vue.createVNode("div", {
14141
14309
  "class": "v-color-picker-preview__dot"
14142
14310
  }, [vue.createVNode("div", {
14143
14311
  "style": {
@@ -14775,7 +14943,8 @@
14775
14943
  returnObject: true
14776
14944
  }),
14777
14945
  ...omit(makeVTextFieldProps({
14778
- modelValue: null
14946
+ modelValue: null,
14947
+ role: 'combobox'
14779
14948
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
14780
14949
  ...makeTransitionProps({
14781
14950
  transition: false
@@ -14814,6 +14983,7 @@
14814
14983
  const selectionIndex = vue.shallowRef(-1);
14815
14984
  let cleared = false;
14816
14985
  const color = vue.computed(() => vTextFieldRef.value?.color);
14986
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
14817
14987
  const {
14818
14988
  items,
14819
14989
  transformIn,
@@ -15189,7 +15359,9 @@
15189
15359
  "class": "v-combobox__menu-icon",
15190
15360
  "icon": props.menuIcon,
15191
15361
  "onMousedown": onMousedownMenuIcon,
15192
- "onClick": noop
15362
+ "onClick": noop,
15363
+ "aria-label": t(label.value),
15364
+ "title": t(label.value)
15193
15365
  }, null) : undefined]);
15194
15366
  }
15195
15367
  });
@@ -16804,6 +16976,7 @@
16804
16976
  sticky: Boolean,
16805
16977
  ...makeBorderProps(),
16806
16978
  ...makeComponentProps(),
16979
+ ...makeDisplayProps(),
16807
16980
  ...makeElevationProps(),
16808
16981
  ...makeLayoutItemProps(),
16809
16982
  ...makeRoundedProps(),
@@ -16842,8 +17015,9 @@
16842
17015
  elevationClasses
16843
17016
  } = useElevation(props);
16844
17017
  const {
17018
+ displayClasses,
16845
17019
  mobile
16846
- } = useDisplay();
17020
+ } = useDisplay(props);
16847
17021
  const {
16848
17022
  roundedClasses
16849
17023
  } = useRounded(props);
@@ -16954,7 +17128,7 @@
16954
17128
  'v-navigation-drawer--temporary': isTemporary.value,
16955
17129
  'v-navigation-drawer--active': isActive.value,
16956
17130
  'v-navigation-drawer--sticky': isSticky.value
16957
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17131
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16958
17132
  "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16959
17133
  }, scopeId, attrs), {
16960
17134
  default: () => [hasImage && vue.createVNode("div", {
@@ -17482,7 +17656,7 @@
17482
17656
  const id = vue.computed(() => props.id || `radio-group-${uid}`);
17483
17657
  const model = useProxiedModel(props, 'modelValue');
17484
17658
  useRender(() => {
17485
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
17659
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
17486
17660
  const [inputProps, _1] = VInput.filterProps(props);
17487
17661
  const [controlProps, _2] = VSelectionControl.filterProps(props);
17488
17662
  const label = slots.label ? slots.label({
@@ -17494,7 +17668,7 @@
17494
17668
  return vue.createVNode(VInput, vue.mergeProps({
17495
17669
  "class": ['v-radio-group', props.class],
17496
17670
  "style": props.style
17497
- }, inputAttrs, inputProps, {
17671
+ }, rootAttrs, inputProps, {
17498
17672
  "modelValue": model.value,
17499
17673
  "onUpdate:modelValue": $event => model.value = $event,
17500
17674
  "id": id.value
@@ -17702,7 +17876,8 @@
17702
17876
  },
17703
17877
  "min": min.value,
17704
17878
  "max": model.value[1],
17705
- "position": trackStart.value
17879
+ "position": trackStart.value,
17880
+ "ripple": props.ripple
17706
17881
  }, {
17707
17882
  'thumb-label': slots['thumb-label']
17708
17883
  }), vue.createVNode(VSliderThumb, {
@@ -17730,7 +17905,8 @@
17730
17905
  },
17731
17906
  "min": model.value[0],
17732
17907
  "max": max.value,
17733
- "position": trackStop.value
17908
+ "position": trackStop.value,
17909
+ "ripple": props.ripple
17734
17910
  }, {
17735
17911
  'thumb-label': slots['thumb-label']
17736
17912
  })]);
@@ -18004,6 +18180,7 @@
18004
18180
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
18005
18181
  },
18006
18182
  ...makeComponentProps(),
18183
+ ...makeDisplayProps(),
18007
18184
  ...makeTagProps(),
18008
18185
  ...makeGroupProps({
18009
18186
  selectedClass: 'v-slide-group-item--active'
@@ -18023,8 +18200,9 @@
18023
18200
  isRtl
18024
18201
  } = useRtl();
18025
18202
  const {
18203
+ displayClasses,
18026
18204
  mobile
18027
- } = useDisplay();
18205
+ } = useDisplay(props);
18028
18206
  const group = useGroup(props, props.symbol);
18029
18207
  const isOverflowing = vue.shallowRef(false);
18030
18208
  const scrollOffset = vue.shallowRef(0);
@@ -18244,7 +18422,7 @@
18244
18422
  'v-slide-group--vertical': !isHorizontal.value,
18245
18423
  'v-slide-group--has-affixes': hasAffixes.value,
18246
18424
  'v-slide-group--is-overflowing': isOverflowing.value
18247
- }, props.class],
18425
+ }, displayClasses.value, props.class],
18248
18426
  "style": props.style,
18249
18427
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
18250
18428
  "onFocus": onFocus
@@ -18471,6 +18649,7 @@
18471
18649
  focus,
18472
18650
  blur
18473
18651
  } = useFocus(props);
18652
+ const control = vue.ref();
18474
18653
  const loaderColor = vue.computed(() => {
18475
18654
  return typeof props.loading === 'string' && props.loading !== '' ? props.loading : props.color;
18476
18655
  });
@@ -18481,16 +18660,15 @@
18481
18660
  indeterminate.value = false;
18482
18661
  }
18483
18662
  }
18663
+ function onTrackClick(e) {
18664
+ e.stopPropagation();
18665
+ e.preventDefault();
18666
+ control.value?.input?.click();
18667
+ }
18484
18668
  useRender(() => {
18485
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
18669
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
18486
18670
  const [inputProps, _1] = VInput.filterProps(props);
18487
18671
  const [controlProps, _2] = VSelectionControl.filterProps(props);
18488
- const control = vue.ref();
18489
- function onClick(e) {
18490
- e.stopPropagation();
18491
- e.preventDefault();
18492
- control.value?.input?.click();
18493
- }
18494
18672
  return vue.createVNode(VInput, vue.mergeProps({
18495
18673
  "class": ['v-switch', {
18496
18674
  'v-switch--inset': props.inset
@@ -18498,7 +18676,7 @@
18498
18676
  'v-switch--indeterminate': indeterminate.value
18499
18677
  }, loaderClasses.value, props.class],
18500
18678
  "style": props.style
18501
- }, inputAttrs, inputProps, {
18679
+ }, rootAttrs, inputProps, {
18502
18680
  "id": id.value,
18503
18681
  "focused": isFocused.value
18504
18682
  }), {
@@ -18528,29 +18706,36 @@
18528
18706
  ...slots,
18529
18707
  default: () => vue.createVNode("div", {
18530
18708
  "class": "v-switch__track",
18531
- "onClick": onClick
18709
+ "onClick": onTrackClick
18532
18710
  }, null),
18533
18711
  input: _ref3 => {
18534
18712
  let {
18535
- textColorClasses,
18536
- textColorStyles
18713
+ inputNode,
18714
+ icon
18537
18715
  } = _ref3;
18538
- return vue.createVNode("div", {
18539
- "class": ['v-switch__thumb', textColorClasses.value],
18540
- "style": textColorStyles.value
18541
- }, [props.loading && vue.createVNode(LoaderSlot, {
18542
- "name": "v-switch",
18543
- "active": true,
18544
- "color": isValid.value === false ? undefined : loaderColor.value
18545
- }, {
18546
- default: slotProps => slots.loader ? slots.loader(slotProps) : vue.createVNode(VProgressCircular, {
18547
- "active": slotProps.isActive,
18548
- "color": slotProps.color,
18549
- "indeterminate": true,
18550
- "size": "16",
18551
- "width": "2"
18552
- }, null)
18553
- })]);
18716
+ return vue.createVNode(vue.Fragment, null, [inputNode, vue.createVNode("div", {
18717
+ "class": ['v-switch__thumb', {
18718
+ 'v-switch__thumb--filled': icon || props.loading
18719
+ }]
18720
+ }, [vue.createVNode(VScaleTransition, null, {
18721
+ default: () => [!props.loading ? icon && vue.createVNode(VIcon, {
18722
+ "key": icon,
18723
+ "icon": icon,
18724
+ "size": "x-small"
18725
+ }, null) : vue.createVNode(LoaderSlot, {
18726
+ "name": "v-switch",
18727
+ "active": true,
18728
+ "color": isValid.value === false ? undefined : loaderColor.value
18729
+ }, {
18730
+ default: slotProps => slots.loader ? slots.loader(slotProps) : vue.createVNode(VProgressCircular, {
18731
+ "active": slotProps.isActive,
18732
+ "color": slotProps.color,
18733
+ "indeterminate": true,
18734
+ "size": "16",
18735
+ "width": "2"
18736
+ }, null)
18737
+ })]
18738
+ })])]);
18554
18739
  }
18555
18740
  });
18556
18741
  }
@@ -19031,8 +19216,7 @@
19031
19216
  "onMousedown": onControlMousedown,
19032
19217
  "onClick:clear": onClear,
19033
19218
  "onClick:prependInner": props['onClick:prependInner'],
19034
- "onClick:appendInner": props['onClick:appendInner'],
19035
- "role": "textbox"
19219
+ "onClick:appendInner": props['onClick:appendInner']
19036
19220
  }, fieldProps, {
19037
19221
  "active": isActive.value || isDirty.value,
19038
19222
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
@@ -20293,7 +20477,7 @@
20293
20477
  date
20294
20478
  };
20295
20479
  }
20296
- const version$1 = "3.3.12";
20480
+ const version$1 = "3.4.0-alpha.0";
20297
20481
  createVuetify$1.version = version$1;
20298
20482
 
20299
20483
  // Vue's inject() can only be used in setup
@@ -20318,7 +20502,7 @@
20318
20502
  ...options
20319
20503
  });
20320
20504
  };
20321
- const version = "3.3.12";
20505
+ const version = "3.4.0-alpha.0";
20322
20506
  createVuetify.version = version;
20323
20507
 
20324
20508
  exports.components = components;