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,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
@@ -233,14 +242,22 @@
233
242
  include.forEach(prop => clone[prop] = obj[prop]);
234
243
  return clone;
235
244
  }
245
+ const onRE = /^on[^a-z]/;
246
+ const isOn = key => onRE.test(key);
247
+ 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'];
236
248
 
237
249
  /**
238
250
  * Filter attributes that should be applied to
239
- * the root element of a an input component. Remaining
251
+ * the root element of an input component. Remaining
240
252
  * attributes should be passed to the <input> element inside.
241
253
  */
242
254
  function filterInputAttrs(attrs) {
243
- return pick(attrs, ['class', 'style', 'id', /^data-/]);
255
+ const [events, props] = pick(attrs, [onRE]);
256
+ const inputEvents = omit(events, bubblingEvents);
257
+ const [rootAttrs, inputAttrs] = pick(props, ['class', 'style', 'id', /^data-/]);
258
+ Object.assign(rootAttrs, events);
259
+ Object.assign(inputAttrs, inputEvents);
260
+ return [rootAttrs, inputAttrs];
244
261
  }
245
262
  function wrapInArray(v) {
246
263
  return v == null ? [] : Array.isArray(v) ? v : [v];
@@ -393,8 +410,6 @@
393
410
  function includes(arr, val) {
394
411
  return arr.includes(val);
395
412
  }
396
- const onRE = /^on[^a-z]/;
397
- const isOn = key => onRE.test(key);
398
413
  function eventName(propName) {
399
414
  return propName[2].toLowerCase() + propName.slice(3);
400
415
  }
@@ -554,6 +569,18 @@
554
569
  }
555
570
  };
556
571
  }
572
+ function getTargetBox(target) {
573
+ if (Array.isArray(target)) {
574
+ return new Box({
575
+ x: target[0],
576
+ y: target[1],
577
+ width: 0,
578
+ height: 0
579
+ });
580
+ } else {
581
+ return target.getBoundingClientRect();
582
+ }
583
+ }
557
584
 
558
585
  // Utilities
559
586
 
@@ -1025,34 +1052,6 @@
1025
1052
 
1026
1053
  // Types
1027
1054
 
1028
- function useToggleScope(source, fn) {
1029
- let scope;
1030
- function start() {
1031
- scope = vue.effectScope();
1032
- scope.run(() => fn.length ? fn(() => {
1033
- scope?.stop();
1034
- start();
1035
- }) : fn());
1036
- }
1037
- vue.watch(source, active => {
1038
- if (active && !scope) {
1039
- start();
1040
- } else if (!active) {
1041
- scope?.stop();
1042
- scope = undefined;
1043
- }
1044
- }, {
1045
- immediate: true
1046
- });
1047
- vue.onScopeDispose(() => {
1048
- scope?.stop();
1049
- });
1050
- }
1051
-
1052
- // Composables
1053
-
1054
- // Types
1055
-
1056
1055
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
1057
1056
  function createDefaults(options) {
1058
1057
  return vue.ref(options);
@@ -1071,6 +1070,7 @@
1071
1070
  const scoped = vue.unref(options?.scoped);
1072
1071
  const reset = vue.unref(options?.reset);
1073
1072
  const root = vue.unref(options?.root);
1073
+ if (providedDefaults.value == null && !(scoped || reset || root)) return injectedDefaults.value;
1074
1074
  let properties = mergeDeep(providedDefaults.value, {
1075
1075
  prev: injectedDefaults.value
1076
1076
  });
@@ -1126,16 +1126,16 @@
1126
1126
  let [key] = _ref;
1127
1127
  return key.startsWith(key[0].toUpperCase());
1128
1128
  });
1129
- if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1129
+ _subcomponentDefaults.value = subComponents.length ? Object.fromEntries(subComponents) : undefined;
1130
+ } else {
1131
+ _subcomponentDefaults.value = undefined;
1130
1132
  }
1131
1133
  });
1132
1134
  function provideSubDefaults() {
1133
- // If subcomponent defaults are provided, override any
1134
- // subcomponents provided by the component's setup function.
1135
- // This uses injectSelf so must be done after the original setup to work.
1136
- useToggleScope(_subcomponentDefaults, () => {
1137
- provideDefaults(mergeDeep(injectSelf(DefaultsSymbol)?.value ?? {}, _subcomponentDefaults.value));
1138
- });
1135
+ const injected = injectSelf(DefaultsSymbol, vm);
1136
+ vue.provide(DefaultsSymbol, vue.computed(() => {
1137
+ return _subcomponentDefaults.value ? mergeDeep(injected?.value ?? {}, _subcomponentDefaults.value) : injected?.value;
1138
+ }));
1139
1139
  }
1140
1140
  return {
1141
1141
  props: _props,
@@ -1317,9 +1317,10 @@
1317
1317
  // Types
1318
1318
 
1319
1319
  function injectSelf(key) {
1320
+ let vm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstance('injectSelf');
1320
1321
  const {
1321
1322
  provides
1322
- } = getCurrentInstance('injectSelf');
1323
+ } = vm;
1323
1324
  if (provides && key in provides) {
1324
1325
  // TS doesn't allow symbol as index type
1325
1326
  return provides[key];
@@ -1657,6 +1658,7 @@
1657
1658
 
1658
1659
  var en = {
1659
1660
  badge: 'Badge',
1661
+ open: 'Open',
1660
1662
  close: 'Close',
1661
1663
  dataIterator: {
1662
1664
  noResultsText: 'No matching records found',
@@ -1795,6 +1797,34 @@
1795
1797
  zhHant: false
1796
1798
  };
1797
1799
 
1800
+ // Utilities
1801
+
1802
+ // Types
1803
+
1804
+ function useToggleScope(source, fn) {
1805
+ let scope;
1806
+ function start() {
1807
+ scope = vue.effectScope();
1808
+ scope.run(() => fn.length ? fn(() => {
1809
+ scope?.stop();
1810
+ start();
1811
+ }) : fn());
1812
+ }
1813
+ vue.watch(source, active => {
1814
+ if (active && !scope) {
1815
+ start();
1816
+ } else if (!active) {
1817
+ scope?.stop();
1818
+ scope = undefined;
1819
+ }
1820
+ }, {
1821
+ immediate: true
1822
+ });
1823
+ vue.onScopeDispose(() => {
1824
+ scope?.stop();
1825
+ });
1826
+ }
1827
+
1798
1828
  // Composables
1799
1829
 
1800
1830
  // Types
@@ -2107,9 +2137,9 @@
2107
2137
  surface: '#FFFFFF',
2108
2138
  'surface-variant': '#424242',
2109
2139
  'on-surface-variant': '#EEEEEE',
2110
- primary: '#6200EE',
2111
- 'primary-darken-1': '#3700B3',
2112
- secondary: '#03DAC6',
2140
+ primary: '#1867C0',
2141
+ 'primary-darken-1': '#1F5592',
2142
+ secondary: '#48A9A6',
2113
2143
  'secondary-darken-1': '#018786',
2114
2144
  error: '#B00020',
2115
2145
  info: '#2196F3',
@@ -2142,10 +2172,10 @@
2142
2172
  surface: '#212121',
2143
2173
  'surface-variant': '#BDBDBD',
2144
2174
  'on-surface-variant': '#424242',
2145
- primary: '#BB86FC',
2146
- 'primary-darken-1': '#3700B3',
2147
- secondary: '#03DAC5',
2148
- 'secondary-darken-1': '#03DAC5',
2175
+ primary: '#2196F3',
2176
+ 'primary-darken-1': '#277CC1',
2177
+ secondary: '#54B6B2',
2178
+ 'secondary-darken-1': '#48A9A6',
2149
2179
  error: '#CF6679',
2150
2180
  info: '#2196F3',
2151
2181
  success: '#4CAF50',
@@ -2630,7 +2660,7 @@
2630
2660
  // Types
2631
2661
 
2632
2662
  const makeVDialogTransitionProps = propsFactory({
2633
- target: Object
2663
+ target: [Object, Array]
2634
2664
  }, 'v-dialog-transition');
2635
2665
  const VDialogTransition = genericComponent()({
2636
2666
  name: 'VDialogTransition',
@@ -2732,7 +2762,7 @@
2732
2762
  return els && [...els];
2733
2763
  }
2734
2764
  function getDimensions(target, el) {
2735
- const targetBox = target.getBoundingClientRect();
2765
+ const targetBox = getTargetBox(target);
2736
2766
  const elBox = nullifyTransforms(el);
2737
2767
  const [originX, originY] = getComputedStyle(el).transformOrigin.split(' ').map(v => parseFloat(v));
2738
2768
  const [anchorSide, anchorOffset] = getComputedStyle(el).getPropertyValue('--v-overlay-anchor-origin').split(' ');
@@ -2978,6 +3008,10 @@
2978
3008
  const makeVImgProps = propsFactory({
2979
3009
  alt: String,
2980
3010
  cover: Boolean,
3011
+ draggable: {
3012
+ type: [Boolean, String],
3013
+ default: undefined
3014
+ },
2981
3015
  eager: Boolean,
2982
3016
  gradient: String,
2983
3017
  lazySrc: String,
@@ -2996,6 +3030,8 @@
2996
3030
  type: [String, Object],
2997
3031
  default: ''
2998
3032
  },
3033
+ crossorigin: String,
3034
+ referrerpolicy: String,
2999
3035
  srcset: String,
3000
3036
  ...makeVResponsiveProps(),
3001
3037
  ...makeComponentProps(),
@@ -3120,6 +3156,9 @@
3120
3156
  "src": normalisedSrc.value.src,
3121
3157
  "srcset": normalisedSrc.value.srcset,
3122
3158
  "alt": props.alt,
3159
+ "crossorigin": props.crossorigin,
3160
+ "referrerpolicy": props.referrerpolicy,
3161
+ "draggable": props.draggable,
3123
3162
  "sizes": props.sizes,
3124
3163
  "ref": image,
3125
3164
  "onLoad": onLoad,
@@ -3141,7 +3180,10 @@
3141
3180
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && vue.createVNode("img", {
3142
3181
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
3143
3182
  "src": normalisedSrc.value.lazySrc,
3144
- "alt": props.alt
3183
+ "alt": props.alt,
3184
+ "crossorigin": props.crossorigin,
3185
+ "referrerpolicy": props.referrerpolicy,
3186
+ "draggable": props.draggable
3145
3187
  }, null)]
3146
3188
  });
3147
3189
  const __placeholder = () => {
@@ -4160,7 +4202,8 @@
4160
4202
  file: 'mdi-paperclip',
4161
4203
  plus: 'mdi-plus',
4162
4204
  minus: 'mdi-minus',
4163
- calendar: 'mdi-calendar'
4205
+ calendar: 'mdi-calendar',
4206
+ eyeDropper: 'mdi-eyedropper'
4164
4207
  };
4165
4208
  const mdi = {
4166
4209
  // Not using mergeProps here, functional components merge props by default (?)
@@ -5750,6 +5793,7 @@
5750
5793
 
5751
5794
  const makeVSelectionControlProps = propsFactory({
5752
5795
  label: String,
5796
+ baseColor: String,
5753
5797
  trueValue: null,
5754
5798
  falseValue: null,
5755
5799
  value: null,
@@ -5788,7 +5832,8 @@
5788
5832
  textColorClasses,
5789
5833
  textColorStyles
5790
5834
  } = useTextColor(vue.computed(() => {
5791
- return model.value && !props.error && !props.disabled ? props.color : undefined;
5835
+ if (props.error || props.disabled) return undefined;
5836
+ return model.value ? props.color : props.baseColor;
5792
5837
  }));
5793
5838
  const icon = vue.computed(() => model.value ? props.trueIcon : props.falseIcon);
5794
5839
  return {
@@ -5860,6 +5905,20 @@
5860
5905
  }
5861
5906
  }) : props.label;
5862
5907
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
5908
+ const inputNode = vue.createVNode("input", vue.mergeProps({
5909
+ "ref": input,
5910
+ "checked": model.value,
5911
+ "disabled": !!(props.readonly || props.disabled),
5912
+ "id": id.value,
5913
+ "onBlur": onBlur,
5914
+ "onFocus": onFocus,
5915
+ "onInput": onInput,
5916
+ "aria-disabled": !!(props.readonly || props.disabled),
5917
+ "type": props.type,
5918
+ "value": trueValue.value,
5919
+ "name": props.name,
5920
+ "aria-checked": props.type === 'checkbox' ? model.value : undefined
5921
+ }, inputAttrs), null);
5863
5922
  return vue.createVNode("div", vue.mergeProps({
5864
5923
  "class": ['v-selection-control', {
5865
5924
  'v-selection-control--dirty': model.value,
@@ -5876,34 +5935,24 @@
5876
5935
  "style": textColorStyles.value
5877
5936
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
5878
5937
  "class": ['v-selection-control__input']
5879
- }, [icon.value && vue.createVNode(VIcon, {
5880
- "key": "icon",
5881
- "icon": icon.value
5882
- }, null), vue.createVNode("input", vue.mergeProps({
5883
- "ref": input,
5884
- "checked": model.value,
5885
- "disabled": !!(props.readonly || props.disabled),
5886
- "id": id.value,
5887
- "onBlur": onBlur,
5888
- "onFocus": onFocus,
5889
- "onInput": onInput,
5890
- "aria-disabled": !!(props.readonly || props.disabled),
5891
- "type": props.type,
5892
- "value": trueValue.value,
5893
- "name": props.name,
5894
- "aria-checked": props.type === 'checkbox' ? model.value : undefined
5895
- }, inputAttrs), null), slots.input?.({
5938
+ }, [slots.input?.({
5896
5939
  model,
5897
5940
  textColorClasses,
5898
5941
  textColorStyles,
5942
+ inputNode,
5943
+ icon: icon.value,
5899
5944
  props: {
5900
5945
  onFocus,
5901
5946
  onBlur,
5902
5947
  id: id.value
5903
5948
  }
5904
- })]), [[vue.resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && vue.createVNode(VLabel, {
5949
+ }) ?? vue.createVNode(vue.Fragment, null, [icon.value && vue.createVNode(VIcon, {
5950
+ "key": "icon",
5951
+ "icon": icon.value
5952
+ }, null), inputNode])]), [[vue.resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && vue.createVNode(VLabel, {
5905
5953
  "for": id.value,
5906
- "clickable": true
5954
+ "clickable": true,
5955
+ "onClick": e => e.stopPropagation()
5907
5956
  }, {
5908
5957
  default: () => [label]
5909
5958
  })]);
@@ -5952,16 +6001,19 @@
5952
6001
  const trueIcon = vue.computed(() => {
5953
6002
  return indeterminate.value ? props.indeterminateIcon : props.trueIcon;
5954
6003
  });
5955
- useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
5956
- "modelValue": model.value,
5957
- "onUpdate:modelValue": [$event => model.value = $event, onChange],
5958
- "class": ['v-checkbox-btn', props.class],
5959
- "style": props.style,
5960
- "type": "checkbox",
5961
- "falseIcon": falseIcon.value,
5962
- "trueIcon": trueIcon.value,
5963
- "aria-checked": indeterminate.value ? 'mixed' : undefined
5964
- }), slots));
6004
+ useRender(() => {
6005
+ const controlProps = omit(VSelectionControl.filterProps(props)[0], ['modelValue']);
6006
+ return vue.createVNode(VSelectionControl, vue.mergeProps(controlProps, {
6007
+ "modelValue": model.value,
6008
+ "onUpdate:modelValue": [$event => model.value = $event, onChange],
6009
+ "class": ['v-checkbox-btn', props.class],
6010
+ "style": props.style,
6011
+ "type": "checkbox",
6012
+ "falseIcon": falseIcon.value,
6013
+ "trueIcon": trueIcon.value,
6014
+ "aria-checked": indeterminate.value ? 'mixed' : undefined
6015
+ }), slots);
6016
+ });
5965
6017
  return {};
5966
6018
  }
5967
6019
  });
@@ -6525,12 +6577,12 @@
6525
6577
  const uid = getUid();
6526
6578
  const id = vue.computed(() => props.id || `checkbox-${uid}`);
6527
6579
  useRender(() => {
6528
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
6580
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
6529
6581
  const [inputProps, _1] = VInput.filterProps(props);
6530
6582
  const [checkboxProps, _2] = VCheckboxBtn.filterProps(props);
6531
6583
  return vue.createVNode(VInput, vue.mergeProps({
6532
6584
  "class": ['v-checkbox', props.class]
6533
- }, inputAttrs, inputProps, {
6585
+ }, rootAttrs, inputProps, {
6534
6586
  "modelValue": model.value,
6535
6587
  "onUpdate:modelValue": $event => model.value = $event,
6536
6588
  "id": id.value,
@@ -6568,6 +6620,7 @@
6568
6620
  end: Boolean,
6569
6621
  icon: IconValue,
6570
6622
  image: String,
6623
+ text: String,
6571
6624
  ...makeComponentProps(),
6572
6625
  ...makeDensityProps(),
6573
6626
  ...makeRoundedProps(),
@@ -6618,7 +6671,7 @@
6618
6671
  }, null) : props.icon ? vue.createVNode(VIcon, {
6619
6672
  "key": "icon",
6620
6673
  "icon": props.icon
6621
- }, null) : slots.default?.(), genOverlays(false, 'v-avatar')]
6674
+ }, null) : slots.default?.() ?? props.text, genOverlays(false, 'v-avatar')]
6622
6675
  }));
6623
6676
  return {};
6624
6677
  }
@@ -7670,7 +7723,6 @@
7670
7723
  "style": [colorStyles.value, dimensionStyles.value, props.style],
7671
7724
  "href": link.href.value,
7672
7725
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
7673
- "title": props.title,
7674
7726
  "onClick": onClick,
7675
7727
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7676
7728
  }, {
@@ -7703,7 +7755,9 @@
7703
7755
  }
7704
7756
  }, {
7705
7757
  default: () => [slots.prepend?.(slotProps.value)]
7706
- })]), vue.createVNode("div", {
7758
+ }), vue.createVNode("div", {
7759
+ "class": "v-list-item__spacer"
7760
+ }, null)]), vue.createVNode("div", {
7707
7761
  "class": "v-list-item__content",
7708
7762
  "data-no-activator": ""
7709
7763
  }, [hasTitle && vue.createVNode(VListItemTitle, {
@@ -7747,7 +7801,9 @@
7747
7801
  }
7748
7802
  }, {
7749
7803
  default: () => [slots.append?.(slotProps.value)]
7750
- })])]
7804
+ }), vue.createVNode("div", {
7805
+ "class": "v-list-item__spacer"
7806
+ }, null)])]
7751
7807
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7752
7808
  });
7753
7809
  return {};
@@ -8396,7 +8452,7 @@
8396
8452
  return contentBox;
8397
8453
  }
8398
8454
  function connectedLocationStrategy(data, props, contentStyles) {
8399
- const activatorFixed = isFixedPosition(data.activatorEl.value);
8455
+ const activatorFixed = Array.isArray(data.target.value) || isFixedPosition(data.target.value);
8400
8456
  if (activatorFixed) {
8401
8457
  Object.assign(contentStyles.value, {
8402
8458
  position: 'fixed',
@@ -8445,11 +8501,11 @@
8445
8501
  const observer = new ResizeObserver(() => {
8446
8502
  if (observe) updateLocation();
8447
8503
  });
8448
- vue.watch([data.activatorEl, data.contentEl], (_ref, _ref2) => {
8449
- let [newActivatorEl, newContentEl] = _ref;
8450
- let [oldActivatorEl, oldContentEl] = _ref2;
8451
- if (oldActivatorEl) observer.unobserve(oldActivatorEl);
8452
- if (newActivatorEl) observer.observe(newActivatorEl);
8504
+ vue.watch([data.target, data.contentEl], (_ref, _ref2) => {
8505
+ let [newTarget, newContentEl] = _ref;
8506
+ let [oldTarget, oldContentEl] = _ref2;
8507
+ if (oldTarget && !Array.isArray(oldTarget)) observer.unobserve(oldTarget);
8508
+ if (newTarget && !Array.isArray(newTarget)) observer.observe(newTarget);
8453
8509
  if (oldContentEl) observer.unobserve(oldContentEl);
8454
8510
  if (newContentEl) observer.observe(newContentEl);
8455
8511
  }, {
@@ -8465,8 +8521,8 @@
8465
8521
  requestAnimationFrame(() => {
8466
8522
  requestAnimationFrame(() => observe = true);
8467
8523
  });
8468
- if (!data.activatorEl.value || !data.contentEl.value) return;
8469
- const targetBox = data.activatorEl.value.getBoundingClientRect();
8524
+ if (!data.target.value || !data.contentEl.value) return;
8525
+ const targetBox = getTargetBox(data.target.value);
8470
8526
  const contentBox = getIntrinsicSize(data.contentEl.value, data.isRtl.value);
8471
8527
  const scrollParents = getScrollParents(data.contentEl.value);
8472
8528
  const viewportMargin = 12;
@@ -8753,11 +8809,11 @@
8753
8809
  function onScroll(e) {
8754
8810
  data.isActive.value = false;
8755
8811
  }
8756
- bindScroll(data.activatorEl.value ?? data.contentEl.value, onScroll);
8812
+ bindScroll(data.targetEl.value ?? data.contentEl.value, onScroll);
8757
8813
  }
8758
8814
  function blockScrollStrategy(data, props) {
8759
8815
  const offsetParent = data.root.value?.offsetParent;
8760
- 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'));
8816
+ 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'));
8761
8817
  const scrollbarWidth = window.innerWidth - document.documentElement.offsetWidth;
8762
8818
  const scrollableParent = (el => hasScrollbar(el) && el)(offsetParent || document.documentElement);
8763
8819
  if (scrollableParent) {
@@ -8801,7 +8857,7 @@
8801
8857
  }
8802
8858
  ric = (typeof requestIdleCallback === 'undefined' ? cb => cb() : requestIdleCallback)(() => {
8803
8859
  scope.run(() => {
8804
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
8860
+ bindScroll(data.targetEl.value ?? data.contentEl.value, e => {
8805
8861
  if (slow) {
8806
8862
  // If the position calculation is slow,
8807
8863
  // defer updates until scrolling is finished.
@@ -8882,6 +8938,7 @@
8882
8938
  // Types
8883
8939
 
8884
8940
  const makeActivatorProps = propsFactory({
8941
+ target: [String, Object],
8885
8942
  activator: [String, Object],
8886
8943
  activatorProps: {
8887
8944
  type: Object,
@@ -8904,6 +8961,7 @@
8904
8961
  isActive,
8905
8962
  isTop
8906
8963
  } = _ref;
8964
+ const vm = getCurrentInstance('useActivator');
8907
8965
  const activatorEl = vue.ref();
8908
8966
  let isHovered = false;
8909
8967
  let isFocused = false;
@@ -8921,10 +8979,14 @@
8921
8979
  isActive.value = value;
8922
8980
  }
8923
8981
  });
8982
+ const cursorTarget = vue.ref();
8924
8983
  const availableEvents = {
8925
8984
  onClick: e => {
8926
8985
  e.stopPropagation();
8927
8986
  activatorEl.value = e.currentTarget || e.target;
8987
+ if (!isActive.value) {
8988
+ cursorTarget.value = [e.clientX, e.clientY];
8989
+ }
8928
8990
  isActive.value = !isActive.value;
8929
8991
  },
8930
8992
  onMouseenter: e => {
@@ -9018,6 +9080,15 @@
9018
9080
  isActive.value = false;
9019
9081
  }
9020
9082
  });
9083
+ vue.watch(isActive, val => {
9084
+ if (!val) {
9085
+ setTimeout(() => {
9086
+ cursorTarget.value = undefined;
9087
+ });
9088
+ }
9089
+ }, {
9090
+ flush: 'post'
9091
+ });
9021
9092
  const activatorRef = vue.ref();
9022
9093
  vue.watchEffect(() => {
9023
9094
  if (!activatorRef.value) return;
@@ -9025,7 +9096,15 @@
9025
9096
  activatorEl.value = refElement(activatorRef.value);
9026
9097
  });
9027
9098
  });
9028
- const vm = getCurrentInstance('useActivator');
9099
+ const targetRef = vue.ref();
9100
+ const target = vue.computed(() => {
9101
+ if (props.target === 'cursor' && cursorTarget.value) return cursorTarget.value;
9102
+ if (targetRef.value) return refElement(targetRef.value);
9103
+ return getTarget(props.target, vm) || activatorEl.value;
9104
+ });
9105
+ const targetEl = vue.computed(() => {
9106
+ return Array.isArray(target.value) ? undefined : target.value;
9107
+ });
9029
9108
  let scope;
9030
9109
  vue.watch(() => !!props.activator, val => {
9031
9110
  if (val && IN_BROWSER) {
@@ -9049,6 +9128,9 @@
9049
9128
  return {
9050
9129
  activatorEl,
9051
9130
  activatorRef,
9131
+ target,
9132
+ targetEl,
9133
+ targetRef,
9052
9134
  activatorEvents,
9053
9135
  contentEvents,
9054
9136
  scrimEvents
@@ -9090,31 +9172,34 @@
9090
9172
  }
9091
9173
  function getActivator() {
9092
9174
  let selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.activator;
9093
- let activator;
9094
- if (selector) {
9095
- if (selector === 'parent') {
9096
- let el = vm?.proxy?.$el?.parentNode;
9097
- while (el.hasAttribute('data-no-activator')) {
9098
- el = el.parentNode;
9099
- }
9100
- activator = el;
9101
- } else if (typeof selector === 'string') {
9102
- // Selector
9103
- activator = document.querySelector(selector);
9104
- } else if ('$el' in selector) {
9105
- // Component (ref)
9106
- activator = selector.$el;
9107
- } else {
9108
- // HTMLElement | Element
9109
- activator = selector;
9110
- }
9111
- }
9175
+ const activator = getTarget(selector, vm);
9112
9176
 
9113
9177
  // The activator should only be a valid element (Ignore comments and text nodes)
9114
- activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : null;
9178
+ activatorEl.value = activator?.nodeType === Node.ELEMENT_NODE ? activator : undefined;
9115
9179
  return activatorEl.value;
9116
9180
  }
9117
9181
  }
9182
+ function getTarget(selector, vm) {
9183
+ if (!selector) return;
9184
+ let target;
9185
+ if (selector === 'parent') {
9186
+ let el = vm?.proxy?.$el?.parentNode;
9187
+ while (el.hasAttribute('data-no-activator')) {
9188
+ el = el.parentNode;
9189
+ }
9190
+ target = el;
9191
+ } else if (typeof selector === 'string') {
9192
+ // Selector
9193
+ target = document.querySelector(selector);
9194
+ } else if ('$el' in selector) {
9195
+ // Component (ref)
9196
+ target = selector.$el;
9197
+ } else {
9198
+ // HTMLElement | Element | [x, y]
9199
+ target = selector;
9200
+ }
9201
+ return target;
9202
+ }
9118
9203
 
9119
9204
  // Utilities
9120
9205
 
@@ -9238,10 +9323,30 @@
9238
9323
  ssr: !!ssr
9239
9324
  };
9240
9325
  }
9326
+ const makeDisplayProps = propsFactory({
9327
+ mobileBreakpoint: [Number, String]
9328
+ }, 'display');
9241
9329
  function useDisplay() {
9330
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
9331
+ let name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : getCurrentInstanceName();
9242
9332
  const display = vue.inject(DisplaySymbol);
9243
9333
  if (!display) throw new Error('Could not find Vuetify display injection');
9244
- return display;
9334
+ const mobile = vue.computed(() => {
9335
+ if (!props.mobileBreakpoint) return display.mobile.value;
9336
+ const breakpointValue = typeof props.mobileBreakpoint === 'number' ? props.mobileBreakpoint : display.thresholds.value[props.mobileBreakpoint];
9337
+ return display.width.value < breakpointValue;
9338
+ });
9339
+ const displayClasses = vue.computed(() => {
9340
+ if (!name) return {};
9341
+ return {
9342
+ [`${name}--mobile`]: mobile.value
9343
+ };
9344
+ });
9345
+ return {
9346
+ ...display,
9347
+ displayClasses,
9348
+ mobile
9349
+ };
9245
9350
  }
9246
9351
 
9247
9352
  // Composables
@@ -9558,6 +9663,9 @@
9558
9663
  const {
9559
9664
  activatorEl,
9560
9665
  activatorRef,
9666
+ target,
9667
+ targetEl,
9668
+ targetRef,
9561
9669
  activatorEvents,
9562
9670
  contentEvents,
9563
9671
  scrimEvents
@@ -9583,13 +9691,13 @@
9583
9691
  } = useLocationStrategies(props, {
9584
9692
  isRtl,
9585
9693
  contentEl,
9586
- activatorEl,
9694
+ target,
9587
9695
  isActive
9588
9696
  });
9589
9697
  useScrollStrategies(props, {
9590
9698
  root,
9591
9699
  contentEl,
9592
- activatorEl,
9700
+ targetEl,
9593
9701
  isActive,
9594
9702
  updateLocation
9595
9703
  });
@@ -9657,7 +9765,8 @@
9657
9765
  useRender(() => vue.createVNode(vue.Fragment, null, [slots.activator?.({
9658
9766
  isActive: isActive.value,
9659
9767
  props: vue.mergeProps({
9660
- ref: activatorRef
9768
+ ref: activatorRef,
9769
+ targetRef
9661
9770
  }, activatorEvents.value, props.activatorProps)
9662
9771
  }), isMounted.value && hasContent.value && vue.createVNode(vue.Teleport, {
9663
9772
  "disabled": !teleportTarget.value,
@@ -9680,7 +9789,7 @@
9680
9789
  "appear": true,
9681
9790
  "persisted": true,
9682
9791
  "transition": props.transition,
9683
- "target": activatorEl.value,
9792
+ "target": target.value,
9684
9793
  "onAfterLeave": () => {
9685
9794
  onAfterLeave();
9686
9795
  emit('afterLeave');
@@ -9701,6 +9810,7 @@
9701
9810
  })]));
9702
9811
  return {
9703
9812
  activatorEl,
9813
+ target,
9704
9814
  animateClick,
9705
9815
  contentEl,
9706
9816
  globalTop,
@@ -9858,10 +9968,11 @@
9858
9968
  }, 40);
9859
9969
  }
9860
9970
  });
9861
- function onFocusIn(e) {
9971
+ async function onFocusIn(e) {
9862
9972
  const before = e.relatedTarget;
9863
9973
  const after = e.target;
9864
- if (before !== after && overlay.value?.contentEl &&
9974
+ await vue.nextTick();
9975
+ if (isActive.value && before !== after && overlay.value?.contentEl &&
9865
9976
  // We're the topmost menu
9866
9977
  overlay.value?.globalTop &&
9867
9978
  // It isn't the document or the menu body
@@ -10197,7 +10308,7 @@
10197
10308
  'v-field--no-label': !label,
10198
10309
  [`v-field--variant-${props.variant}`]: true
10199
10310
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
10200
- "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
10311
+ "style": [backgroundColorStyles.value, props.style],
10201
10312
  "onClick": onClick
10202
10313
  }, attrs), [vue.createVNode("div", {
10203
10314
  "class": "v-field__overlay"
@@ -10221,7 +10332,8 @@
10221
10332
  "ref": floatingLabelRef,
10222
10333
  "class": [textColorClasses.value],
10223
10334
  "floating": true,
10224
- "for": id.value
10335
+ "for": id.value,
10336
+ "style": textColorStyles.value
10225
10337
  }, {
10226
10338
  default: () => [label]
10227
10339
  }), vue.createVNode(VFieldLabel, {
@@ -10257,7 +10369,8 @@
10257
10369
  "key": "append-icon",
10258
10370
  "name": "appendInner"
10259
10371
  }, null)]), vue.createVNode("div", {
10260
- "class": ['v-field__outline', textColorClasses.value]
10372
+ "class": ['v-field__outline', textColorClasses.value],
10373
+ "style": textColorStyles.value
10261
10374
  }, [isOutlined && vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
10262
10375
  "class": "v-field__outline__start"
10263
10376
  }, null), hasLabel.value && vue.createVNode("div", {
@@ -10301,6 +10414,7 @@
10301
10414
  persistentPlaceholder: Boolean,
10302
10415
  persistentCounter: Boolean,
10303
10416
  suffix: String,
10417
+ role: String,
10304
10418
  type: {
10305
10419
  type: String,
10306
10420
  default: 'text'
@@ -10425,7 +10539,7 @@
10425
10539
  "onClick:clear": onClear,
10426
10540
  "onClick:prependInner": props['onClick:prependInner'],
10427
10541
  "onClick:appendInner": props['onClick:appendInner'],
10428
- "role": "textbox"
10542
+ "role": props.role
10429
10543
  }, fieldProps, {
10430
10544
  "id": id.value,
10431
10545
  "active": isActive.value || isDirty.value,
@@ -10464,10 +10578,12 @@
10464
10578
  "class": "v-text-field__prefix"
10465
10579
  }, [vue.createVNode("span", {
10466
10580
  "class": "v-text-field__prefix__text"
10467
- }, [props.prefix])]), vue.createVNode("div", {
10581
+ }, [props.prefix])]), slots.default ? vue.createVNode("div", {
10468
10582
  "class": fieldClass,
10469
10583
  "data-no-activator": ""
10470
- }, [slots.default ? vue.createVNode(vue.Fragment, null, [slots.default(), inputNode]) : vue.cloneVNode(inputNode)]), props.suffix && vue.createVNode("span", {
10584
+ }, [slots.default(), inputNode]) : vue.cloneVNode(inputNode, {
10585
+ class: fieldClass
10586
+ }), props.suffix && vue.createVNode("span", {
10471
10587
  "class": "v-text-field__suffix"
10472
10588
  }, [vue.createVNode("span", {
10473
10589
  "class": "v-text-field__suffix__text"
@@ -10786,6 +10902,14 @@
10786
10902
  const makeSelectProps = propsFactory({
10787
10903
  chips: Boolean,
10788
10904
  closableChips: Boolean,
10905
+ closeText: {
10906
+ type: String,
10907
+ default: '$vuetify.close'
10908
+ },
10909
+ openText: {
10910
+ type: String,
10911
+ default: '$vuetify.open'
10912
+ },
10789
10913
  eager: Boolean,
10790
10914
  hideNoData: Boolean,
10791
10915
  hideSelected: Boolean,
@@ -10815,7 +10939,8 @@
10815
10939
  const makeVSelectProps = propsFactory({
10816
10940
  ...makeSelectProps(),
10817
10941
  ...omit(makeVTextFieldProps({
10818
- modelValue: null
10942
+ modelValue: null,
10943
+ role: 'button'
10819
10944
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
10820
10945
  ...makeTransitionProps({
10821
10946
  transition: {
@@ -10870,6 +10995,7 @@
10870
10995
  });
10871
10996
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
10872
10997
  const isFocused = vue.shallowRef(false);
10998
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
10873
10999
  let keyboardLookupPrefix = '';
10874
11000
  let keyboardLookupLastTime;
10875
11001
  const displayItems = vue.computed(() => {
@@ -10996,7 +11122,9 @@
10996
11122
  "onClick:clear": onClear,
10997
11123
  "onMousedown:control": onMousedownControl,
10998
11124
  "onBlur": onBlur,
10999
- "onKeydown": onKeydown
11125
+ "onKeydown": onKeydown,
11126
+ "aria-label": t(label.value),
11127
+ "title": t(label.value)
11000
11128
  }), {
11001
11129
  ...slots,
11002
11130
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, vue.mergeProps({
@@ -11259,7 +11387,8 @@
11259
11387
  }),
11260
11388
  ...makeSelectProps(),
11261
11389
  ...omit(makeVTextFieldProps({
11262
- modelValue: null
11390
+ modelValue: null,
11391
+ role: 'combobox'
11263
11392
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
11264
11393
  ...makeTransitionProps({
11265
11394
  transition: false
@@ -11296,6 +11425,7 @@
11296
11425
  });
11297
11426
  const selectionIndex = vue.shallowRef(-1);
11298
11427
  const color = vue.computed(() => vTextFieldRef.value?.color);
11428
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
11299
11429
  const {
11300
11430
  items,
11301
11431
  transformIn,
@@ -11643,7 +11773,9 @@
11643
11773
  "class": "v-autocomplete__menu-icon",
11644
11774
  "icon": props.menuIcon,
11645
11775
  "onMousedown": onMousedownMenuIcon,
11646
- "onClick": noop
11776
+ "onClick": noop,
11777
+ "aria-label": t(label.value),
11778
+ "title": t(label.value)
11647
11779
  }, null) : undefined]);
11648
11780
  }
11649
11781
  });
@@ -11798,6 +11930,7 @@
11798
11930
  ...makeComponentProps(),
11799
11931
  ...makeDensityProps(),
11800
11932
  ...makeDimensionProps(),
11933
+ ...makeDisplayProps(),
11801
11934
  ...makeElevationProps(),
11802
11935
  ...makeLocationProps(),
11803
11936
  ...makePositionProps(),
@@ -11819,8 +11952,9 @@
11819
11952
  densityClasses
11820
11953
  } = useDensity(props);
11821
11954
  const {
11955
+ displayClasses,
11822
11956
  mobile
11823
- } = useDisplay();
11957
+ } = useDisplay(props);
11824
11958
  const {
11825
11959
  dimensionStyles
11826
11960
  } = useDimension(props);
@@ -11856,7 +11990,7 @@
11856
11990
  'v-banner--stacked': props.stacked || mobile.value,
11857
11991
  'v-banner--sticky': props.sticky,
11858
11992
  [`v-banner--${props.lines}-line`]: !!props.lines
11859
- }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11993
+ }, borderClasses.value, densityClasses.value, displayClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value, props.class],
11860
11994
  "style": [dimensionStyles.value, locationStyles.value, props.style],
11861
11995
  "role": "banner"
11862
11996
  }, {
@@ -12163,12 +12297,17 @@
12163
12297
  item,
12164
12298
  raw
12165
12299
  } = _ref2;
12166
- return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
12167
- "key": item.title,
12300
+ return vue.createVNode(vue.Fragment, null, [slots.item?.({
12301
+ item,
12302
+ index
12303
+ }) ?? vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
12304
+ "key": index,
12168
12305
  "disabled": index >= array.length - 1
12169
- }, item), {
12306
+ }, typeof item === 'string' ? {
12307
+ title: item
12308
+ } : item), {
12170
12309
  default: slots.title ? () => slots.title?.({
12171
- item: raw,
12310
+ item,
12172
12311
  index
12173
12312
  }) : undefined
12174
12313
  }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
@@ -13506,7 +13645,11 @@
13506
13645
  ...makeRoundedProps(),
13507
13646
  ...makeElevationProps({
13508
13647
  elevation: 2
13509
- })
13648
+ }),
13649
+ ripple: {
13650
+ type: Boolean,
13651
+ default: true
13652
+ }
13510
13653
  }, 'Slider');
13511
13654
  const useSteps = props => {
13512
13655
  const min = vue.computed(() => parseFloat(props.min));
@@ -14113,7 +14256,8 @@
14113
14256
  "position": trackStop.value,
14114
14257
  "elevation": props.elevation,
14115
14258
  "onFocus": focus,
14116
- "onBlur": blur
14259
+ "onBlur": blur,
14260
+ "ripple": props.ripple
14117
14261
  }, {
14118
14262
  'thumb-label': slots['thumb-label']
14119
14263
  })]);
@@ -14144,12 +14288,36 @@
14144
14288
  let {
14145
14289
  emit
14146
14290
  } = _ref;
14291
+ const abortController = new AbortController();
14292
+ vue.onUnmounted(() => abortController.abort());
14293
+ async function openEyeDropper() {
14294
+ if (!SUPPORTS_EYE_DROPPER) return;
14295
+ const eyeDropper = new window.EyeDropper();
14296
+ try {
14297
+ const result = await eyeDropper.open({
14298
+ signal: abortController.signal
14299
+ });
14300
+ const colorHexValue = HexToHSV(result.sRGBHex);
14301
+ emit('update:color', {
14302
+ ...(props.color ?? nullColor),
14303
+ ...colorHexValue
14304
+ });
14305
+ } catch (e) {}
14306
+ }
14147
14307
  useRender(() => vue.createVNode("div", {
14148
14308
  "class": ['v-color-picker-preview', {
14149
14309
  'v-color-picker-preview--hide-alpha': props.hideAlpha
14150
14310
  }, props.class],
14151
14311
  "style": props.style
14152
- }, [vue.createVNode("div", {
14312
+ }, [SUPPORTS_EYE_DROPPER && vue.createVNode("div", {
14313
+ "class": "v-color-picker-preview__eye-dropper",
14314
+ "key": "eyeDropper"
14315
+ }, [vue.createVNode(VBtn, {
14316
+ "onClick": openEyeDropper,
14317
+ "icon": "$eyeDropper",
14318
+ "variant": "plain",
14319
+ "density": "comfortable"
14320
+ }, null)]), vue.createVNode("div", {
14153
14321
  "class": "v-color-picker-preview__dot"
14154
14322
  }, [vue.createVNode("div", {
14155
14323
  "style": {
@@ -14787,7 +14955,8 @@
14787
14955
  returnObject: true
14788
14956
  }),
14789
14957
  ...omit(makeVTextFieldProps({
14790
- modelValue: null
14958
+ modelValue: null,
14959
+ role: 'combobox'
14791
14960
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
14792
14961
  ...makeTransitionProps({
14793
14962
  transition: false
@@ -14826,6 +14995,7 @@
14826
14995
  const selectionIndex = vue.shallowRef(-1);
14827
14996
  let cleared = false;
14828
14997
  const color = vue.computed(() => vTextFieldRef.value?.color);
14998
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
14829
14999
  const {
14830
15000
  items,
14831
15001
  transformIn,
@@ -15201,7 +15371,9 @@
15201
15371
  "class": "v-combobox__menu-icon",
15202
15372
  "icon": props.menuIcon,
15203
15373
  "onMousedown": onMousedownMenuIcon,
15204
- "onClick": noop
15374
+ "onClick": noop,
15375
+ "aria-label": t(label.value),
15376
+ "title": t(label.value)
15205
15377
  }, null) : undefined]);
15206
15378
  }
15207
15379
  });
@@ -16816,6 +16988,7 @@
16816
16988
  sticky: Boolean,
16817
16989
  ...makeBorderProps(),
16818
16990
  ...makeComponentProps(),
16991
+ ...makeDisplayProps(),
16819
16992
  ...makeElevationProps(),
16820
16993
  ...makeLayoutItemProps(),
16821
16994
  ...makeRoundedProps(),
@@ -16854,8 +17027,9 @@
16854
17027
  elevationClasses
16855
17028
  } = useElevation(props);
16856
17029
  const {
17030
+ displayClasses,
16857
17031
  mobile
16858
- } = useDisplay();
17032
+ } = useDisplay(props);
16859
17033
  const {
16860
17034
  roundedClasses
16861
17035
  } = useRounded(props);
@@ -16966,7 +17140,7 @@
16966
17140
  'v-navigation-drawer--temporary': isTemporary.value,
16967
17141
  'v-navigation-drawer--active': isActive.value,
16968
17142
  'v-navigation-drawer--sticky': isSticky.value
16969
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value, props.class],
17143
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
16970
17144
  "style": [backgroundColorStyles.value, layoutItemStyles.value, dragStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
16971
17145
  }, scopeId, attrs), {
16972
17146
  default: () => [hasImage && vue.createVNode("div", {
@@ -17494,7 +17668,7 @@
17494
17668
  const id = vue.computed(() => props.id || `radio-group-${uid}`);
17495
17669
  const model = useProxiedModel(props, 'modelValue');
17496
17670
  useRender(() => {
17497
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
17671
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
17498
17672
  const [inputProps, _1] = VInput.filterProps(props);
17499
17673
  const [controlProps, _2] = VSelectionControl.filterProps(props);
17500
17674
  const label = slots.label ? slots.label({
@@ -17506,7 +17680,7 @@
17506
17680
  return vue.createVNode(VInput, vue.mergeProps({
17507
17681
  "class": ['v-radio-group', props.class],
17508
17682
  "style": props.style
17509
- }, inputAttrs, inputProps, {
17683
+ }, rootAttrs, inputProps, {
17510
17684
  "modelValue": model.value,
17511
17685
  "onUpdate:modelValue": $event => model.value = $event,
17512
17686
  "id": id.value
@@ -17714,7 +17888,8 @@
17714
17888
  },
17715
17889
  "min": min.value,
17716
17890
  "max": model.value[1],
17717
- "position": trackStart.value
17891
+ "position": trackStart.value,
17892
+ "ripple": props.ripple
17718
17893
  }, {
17719
17894
  'thumb-label': slots['thumb-label']
17720
17895
  }), vue.createVNode(VSliderThumb, {
@@ -17742,7 +17917,8 @@
17742
17917
  },
17743
17918
  "min": model.value[0],
17744
17919
  "max": max.value,
17745
- "position": trackStop.value
17920
+ "position": trackStop.value,
17921
+ "ripple": props.ripple
17746
17922
  }, {
17747
17923
  'thumb-label': slots['thumb-label']
17748
17924
  })]);
@@ -18016,6 +18192,7 @@
18016
18192
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
18017
18193
  },
18018
18194
  ...makeComponentProps(),
18195
+ ...makeDisplayProps(),
18019
18196
  ...makeTagProps(),
18020
18197
  ...makeGroupProps({
18021
18198
  selectedClass: 'v-slide-group-item--active'
@@ -18035,8 +18212,9 @@
18035
18212
  isRtl
18036
18213
  } = useRtl();
18037
18214
  const {
18215
+ displayClasses,
18038
18216
  mobile
18039
- } = useDisplay();
18217
+ } = useDisplay(props);
18040
18218
  const group = useGroup(props, props.symbol);
18041
18219
  const isOverflowing = vue.shallowRef(false);
18042
18220
  const scrollOffset = vue.shallowRef(0);
@@ -18256,7 +18434,7 @@
18256
18434
  'v-slide-group--vertical': !isHorizontal.value,
18257
18435
  'v-slide-group--has-affixes': hasAffixes.value,
18258
18436
  'v-slide-group--is-overflowing': isOverflowing.value
18259
- }, props.class],
18437
+ }, displayClasses.value, props.class],
18260
18438
  "style": props.style,
18261
18439
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
18262
18440
  "onFocus": onFocus
@@ -18483,6 +18661,7 @@
18483
18661
  focus,
18484
18662
  blur
18485
18663
  } = useFocus(props);
18664
+ const control = vue.ref();
18486
18665
  const loaderColor = vue.computed(() => {
18487
18666
  return typeof props.loading === 'string' && props.loading !== '' ? props.loading : props.color;
18488
18667
  });
@@ -18493,16 +18672,15 @@
18493
18672
  indeterminate.value = false;
18494
18673
  }
18495
18674
  }
18675
+ function onTrackClick(e) {
18676
+ e.stopPropagation();
18677
+ e.preventDefault();
18678
+ control.value?.input?.click();
18679
+ }
18496
18680
  useRender(() => {
18497
- const [inputAttrs, controlAttrs] = filterInputAttrs(attrs);
18681
+ const [rootAttrs, controlAttrs] = filterInputAttrs(attrs);
18498
18682
  const [inputProps, _1] = VInput.filterProps(props);
18499
18683
  const [controlProps, _2] = VSelectionControl.filterProps(props);
18500
- const control = vue.ref();
18501
- function onClick(e) {
18502
- e.stopPropagation();
18503
- e.preventDefault();
18504
- control.value?.input?.click();
18505
- }
18506
18684
  return vue.createVNode(VInput, vue.mergeProps({
18507
18685
  "class": ['v-switch', {
18508
18686
  'v-switch--inset': props.inset
@@ -18510,7 +18688,7 @@
18510
18688
  'v-switch--indeterminate': indeterminate.value
18511
18689
  }, loaderClasses.value, props.class],
18512
18690
  "style": props.style
18513
- }, inputAttrs, inputProps, {
18691
+ }, rootAttrs, inputProps, {
18514
18692
  "id": id.value,
18515
18693
  "focused": isFocused.value
18516
18694
  }), {
@@ -18540,29 +18718,36 @@
18540
18718
  ...slots,
18541
18719
  default: () => vue.createVNode("div", {
18542
18720
  "class": "v-switch__track",
18543
- "onClick": onClick
18721
+ "onClick": onTrackClick
18544
18722
  }, null),
18545
18723
  input: _ref3 => {
18546
18724
  let {
18547
- textColorClasses,
18548
- textColorStyles
18725
+ inputNode,
18726
+ icon
18549
18727
  } = _ref3;
18550
- return vue.createVNode("div", {
18551
- "class": ['v-switch__thumb', textColorClasses.value],
18552
- "style": textColorStyles.value
18553
- }, [props.loading && vue.createVNode(LoaderSlot, {
18554
- "name": "v-switch",
18555
- "active": true,
18556
- "color": isValid.value === false ? undefined : loaderColor.value
18557
- }, {
18558
- default: slotProps => slots.loader ? slots.loader(slotProps) : vue.createVNode(VProgressCircular, {
18559
- "active": slotProps.isActive,
18560
- "color": slotProps.color,
18561
- "indeterminate": true,
18562
- "size": "16",
18563
- "width": "2"
18564
- }, null)
18565
- })]);
18728
+ return vue.createVNode(vue.Fragment, null, [inputNode, vue.createVNode("div", {
18729
+ "class": ['v-switch__thumb', {
18730
+ 'v-switch__thumb--filled': icon || props.loading
18731
+ }]
18732
+ }, [vue.createVNode(VScaleTransition, null, {
18733
+ default: () => [!props.loading ? icon && vue.createVNode(VIcon, {
18734
+ "key": icon,
18735
+ "icon": icon,
18736
+ "size": "x-small"
18737
+ }, null) : vue.createVNode(LoaderSlot, {
18738
+ "name": "v-switch",
18739
+ "active": true,
18740
+ "color": isValid.value === false ? undefined : loaderColor.value
18741
+ }, {
18742
+ default: slotProps => slots.loader ? slots.loader(slotProps) : vue.createVNode(VProgressCircular, {
18743
+ "active": slotProps.isActive,
18744
+ "color": slotProps.color,
18745
+ "indeterminate": true,
18746
+ "size": "16",
18747
+ "width": "2"
18748
+ }, null)
18749
+ })]
18750
+ })])]);
18566
18751
  }
18567
18752
  });
18568
18753
  }
@@ -19043,8 +19228,7 @@
19043
19228
  "onMousedown": onControlMousedown,
19044
19229
  "onClick:clear": onClear,
19045
19230
  "onClick:prependInner": props['onClick:prependInner'],
19046
- "onClick:appendInner": props['onClick:appendInner'],
19047
- "role": "textbox"
19231
+ "onClick:appendInner": props['onClick:appendInner']
19048
19232
  }, fieldProps, {
19049
19233
  "active": isActive.value || isDirty.value,
19050
19234
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
@@ -24396,7 +24580,7 @@
24396
24580
  date
24397
24581
  };
24398
24582
  }
24399
- const version$1 = "3.3.12";
24583
+ const version$1 = "3.4.0-alpha.0";
24400
24584
  createVuetify$1.version = version$1;
24401
24585
 
24402
24586
  // Vue's inject() can only be used in setup
@@ -24410,7 +24594,7 @@
24410
24594
 
24411
24595
  /* eslint-disable local-rules/sort-imports */
24412
24596
 
24413
- const version = "3.3.12";
24597
+ const version = "3.4.0-alpha.0";
24414
24598
 
24415
24599
  /* eslint-disable local-rules/sort-imports */
24416
24600