@vuetify/nightly 3.0.0-beta.0 → 3.0.0-beta.2

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 (277) hide show
  1. package/CHANGELOG.md +53 -2
  2. package/dist/json/attributes.json +343 -195
  3. package/dist/json/importMap.json +20 -0
  4. package/dist/json/tags.json +106 -44
  5. package/dist/json/web-types.json +946 -549
  6. package/dist/vuetify.css +1486 -1085
  7. package/dist/vuetify.d.ts +9036 -8077
  8. package/dist/vuetify.esm.js +1511 -944
  9. package/dist/vuetify.esm.js.map +1 -1
  10. package/dist/vuetify.js +1510 -943
  11. package/dist/vuetify.js.map +1 -1
  12. package/dist/vuetify.min.css +3 -3
  13. package/dist/vuetify.min.js +825 -754
  14. package/dist/vuetify.min.js.map +1 -1
  15. package/lib/components/VAlert/VAlert.css +29 -8
  16. package/lib/components/VAlert/VAlert.mjs +31 -17
  17. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  18. package/lib/components/VAlert/VAlert.sass +27 -7
  19. package/lib/components/VAlert/VAlertTitle.mjs +1 -0
  20. package/lib/components/VAlert/VAlertTitle.mjs.map +1 -1
  21. package/lib/components/VAlert/_variables.scss +14 -7
  22. package/lib/components/VApp/VApp.css +1 -0
  23. package/lib/components/VApp/VApp.sass +1 -0
  24. package/lib/components/VAppBar/VAppBar.mjs +7 -3
  25. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  26. package/lib/components/VAppBar/VAppBarTitle.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs +82 -69
  28. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  29. package/lib/components/VAvatar/VAvatar.mjs +15 -14
  30. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  31. package/lib/components/VBanner/VBanner.css +82 -58
  32. package/lib/components/VBanner/VBanner.mjs +39 -43
  33. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  34. package/lib/components/VBanner/VBanner.sass +61 -54
  35. package/lib/components/VBanner/VBannerActions.mjs +34 -2
  36. package/lib/components/VBanner/VBannerActions.mjs.map +1 -1
  37. package/lib/components/VBanner/VBannerAvatar.mjs +20 -0
  38. package/lib/components/VBanner/VBannerAvatar.mjs.map +1 -0
  39. package/lib/components/VBanner/VBannerIcon.mjs +20 -0
  40. package/lib/components/VBanner/VBannerIcon.mjs.map +1 -0
  41. package/lib/components/VBanner/_variables.scss +10 -14
  42. package/lib/components/VBanner/index.mjs +2 -0
  43. package/lib/components/VBanner/index.mjs.map +1 -1
  44. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +2 -0
  45. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  46. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +10 -9
  47. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs.map +1 -1
  48. package/lib/components/VBtn/VBtn.css +20 -1
  49. package/lib/components/VBtn/VBtn.mjs +20 -7
  50. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  51. package/lib/components/VBtn/VBtn.sass +15 -2
  52. package/lib/components/VBtn/_variables.scss +3 -0
  53. package/lib/components/VBtnGroup/VBtnGroup.css +14 -6
  54. package/lib/components/VBtnGroup/VBtnGroup.sass +14 -6
  55. package/lib/components/VCard/VCard.css +13 -11
  56. package/lib/components/VCard/VCard.mjs +5 -2
  57. package/lib/components/VCard/VCard.mjs.map +1 -1
  58. package/lib/components/VCard/VCard.sass +12 -9
  59. package/lib/components/VCard/VCardActions.mjs +1 -2
  60. package/lib/components/VCard/VCardActions.mjs.map +1 -1
  61. package/lib/components/VCard/VCardContent.mjs +3 -0
  62. package/lib/components/VCard/VCardContent.mjs.map +1 -0
  63. package/lib/components/VCard/_variables.scss +11 -5
  64. package/lib/components/VCard/index.mjs +1 -0
  65. package/lib/components/VCard/index.mjs.map +1 -1
  66. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  67. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  68. package/lib/components/VCheckbox/VCheckbox.mjs +2 -2
  69. package/lib/components/VCheckbox/VCheckbox.mjs.map +1 -1
  70. package/lib/components/VChip/VChip.css +3 -0
  71. package/lib/components/VChip/VChip.sass +3 -0
  72. package/lib/components/VChip/_variables.scss +3 -0
  73. package/lib/components/VColorPicker/VColorPickerCanvas.css +1 -1
  74. package/lib/components/VCombobox/VCombobox.mjs +92 -74
  75. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  76. package/lib/components/VDialog/VDialog.css +31 -11
  77. package/lib/components/VDialog/VDialog.mjs +6 -9
  78. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  79. package/lib/components/VDialog/VDialog.sass +27 -10
  80. package/lib/components/VDialog/_variables.scss +3 -6
  81. package/lib/components/VExpansionPanel/VExpansionPanel.css +3 -2
  82. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +6 -2
  83. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  84. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +5 -3
  85. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  86. package/lib/components/VExpansionPanel/VExpansionPanels.mjs +4 -0
  87. package/lib/components/VExpansionPanel/VExpansionPanels.mjs.map +1 -1
  88. package/lib/components/VField/VField.css +1 -1
  89. package/lib/components/VField/VField.mjs +3 -4
  90. package/lib/components/VField/VField.mjs.map +1 -1
  91. package/lib/components/VField/VField.sass +1 -1
  92. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  93. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  94. package/lib/components/VFooter/VFooter.mjs +32 -15
  95. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  96. package/lib/components/VForm/VForm.mjs +25 -11
  97. package/lib/components/VForm/VForm.mjs.map +1 -1
  98. package/lib/components/VIcon/VIcon.css +27 -12
  99. package/lib/components/VIcon/VIcon.mjs +19 -16
  100. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  101. package/lib/components/VIcon/VIcon.sass +27 -16
  102. package/lib/components/VIcon/_variables.scss +1 -0
  103. package/lib/components/VInput/VInput.css +3 -1
  104. package/lib/components/VInput/VInput.mjs +3 -4
  105. package/lib/components/VInput/VInput.mjs.map +1 -1
  106. package/lib/components/VInput/VInput.sass +3 -1
  107. package/lib/components/VInput/_variables.scss +4 -0
  108. package/lib/components/VList/VList.css +7 -6
  109. package/lib/components/VList/VList.mjs +36 -17
  110. package/lib/components/VList/VList.mjs.map +1 -1
  111. package/lib/components/VList/VList.sass +3 -2
  112. package/lib/components/VList/VListChildren.mjs +1 -1
  113. package/lib/components/VList/VListChildren.mjs.map +1 -1
  114. package/lib/components/VList/VListGroup.mjs +28 -10
  115. package/lib/components/VList/VListGroup.mjs.map +1 -1
  116. package/lib/components/VList/VListItem.css +119 -42
  117. package/lib/components/VList/VListItem.mjs +36 -32
  118. package/lib/components/VList/VListItem.mjs.map +1 -1
  119. package/lib/components/VList/VListItem.sass +76 -28
  120. package/lib/components/VList/VListItemAction.mjs +29 -0
  121. package/lib/components/VList/VListItemAction.mjs.map +1 -0
  122. package/lib/components/VList/VListItemAvatar.mjs +10 -16
  123. package/lib/components/VList/VListItemAvatar.mjs.map +1 -1
  124. package/lib/components/VList/VListItemIcon.mjs +23 -0
  125. package/lib/components/VList/VListItemIcon.mjs.map +1 -0
  126. package/lib/components/VList/VListItemMedia.mjs +4 -4
  127. package/lib/components/VList/VListItemMedia.mjs.map +1 -1
  128. package/lib/components/VList/_variables.scss +12 -3
  129. package/lib/components/VList/index.mjs +2 -0
  130. package/lib/components/VList/index.mjs.map +1 -1
  131. package/lib/components/VMenu/VMenu.css +2 -12
  132. package/lib/components/VMenu/VMenu.mjs +61 -31
  133. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  134. package/lib/components/VMenu/VMenu.sass +3 -6
  135. package/lib/components/VMenu/shared.mjs +2 -0
  136. package/lib/components/VMenu/shared.mjs.map +1 -0
  137. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  138. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  139. package/lib/components/VOverlay/VOverlay.css +8 -0
  140. package/lib/components/VOverlay/VOverlay.mjs +16 -15
  141. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  142. package/lib/components/VOverlay/VOverlay.sass +9 -0
  143. package/lib/components/VOverlay/_variables.scss +1 -0
  144. package/lib/components/VOverlay/positionStrategies.mjs +7 -3
  145. package/lib/components/VOverlay/positionStrategies.mjs.map +1 -1
  146. package/lib/components/VOverlay/scrollStrategies.mjs +9 -0
  147. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  148. package/lib/components/VOverlay/useActivator.mjs +50 -14
  149. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  150. package/lib/components/VPagination/VPagination.mjs +10 -12
  151. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  152. package/lib/components/VProgressLinear/VProgressLinear.css +1 -1
  153. package/lib/components/VRadio/VRadio.mjs +1 -2
  154. package/lib/components/VRadio/VRadio.mjs.map +1 -1
  155. package/lib/components/VRadioGroup/VRadioGroup.mjs +2 -2
  156. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  157. package/lib/components/VRangeSlider/VRangeSlider.mjs +5 -2
  158. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  159. package/lib/components/VRating/VRating.css +2 -2
  160. package/lib/components/VRating/VRating.mjs +13 -3
  161. package/lib/components/VRating/VRating.mjs.map +1 -1
  162. package/lib/components/VRating/VRating.sass +2 -2
  163. package/lib/components/VSelect/VSelect.mjs +70 -91
  164. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  165. package/lib/components/VSelectionControl/VSelectionControl.mjs +2 -1
  166. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  167. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +2 -2
  168. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  169. package/lib/components/VSlideGroup/VSlideGroup.css +0 -5
  170. package/lib/components/VSlideGroup/VSlideGroup.mjs +36 -14
  171. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  172. package/lib/components/VSlideGroup/VSlideGroup.sass +0 -4
  173. package/lib/components/VSlideGroup/VSlideGroupItem.mjs +3 -1
  174. package/lib/components/VSlideGroup/VSlideGroupItem.mjs.map +1 -1
  175. package/lib/components/VSlider/VSlider.css +7 -2
  176. package/lib/components/VSlider/VSlider.sass +11 -5
  177. package/lib/components/VSlider/VSliderTrack.css +6 -6
  178. package/lib/components/VSlider/VSliderTrack.mjs +1 -1
  179. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  180. package/lib/components/VSlider/VSliderTrack.sass +7 -7
  181. package/lib/components/VSlider/_variables.scss +5 -2
  182. package/lib/components/VSnackbar/VSnackbar.css +14 -13
  183. package/lib/components/VSnackbar/VSnackbar.mjs +22 -10
  184. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  185. package/lib/components/VSnackbar/VSnackbar.sass +15 -16
  186. package/lib/components/VSnackbar/_variables.scss +0 -4
  187. package/lib/components/VSwitch/VSwitch.mjs +8 -5
  188. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  189. package/lib/components/VSystemBar/VSystemBar.css +0 -5
  190. package/lib/components/VSystemBar/VSystemBar.mjs +31 -14
  191. package/lib/components/VSystemBar/VSystemBar.mjs.map +1 -1
  192. package/lib/components/VSystemBar/VSystemBar.sass +0 -5
  193. package/lib/components/VSystemBar/_variables.scss +0 -3
  194. package/lib/components/VTabs/VTab.mjs +28 -32
  195. package/lib/components/VTabs/VTab.mjs.map +1 -1
  196. package/lib/components/VTabs/VTabs.css +6 -2
  197. package/lib/components/VTabs/VTabs.mjs +7 -8
  198. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  199. package/lib/components/VTabs/VTabs.sass +6 -1
  200. package/lib/components/VTabs/shared.mjs +2 -0
  201. package/lib/components/VTabs/shared.mjs.map +1 -0
  202. package/lib/components/VTextField/VTextField.css +4 -4
  203. package/lib/components/VTextField/VTextField.mjs +5 -9
  204. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  205. package/lib/components/VTextField/VTextField.sass +5 -5
  206. package/lib/components/VTextarea/VTextarea.css +7 -4
  207. package/lib/components/VTextarea/VTextarea.sass +9 -5
  208. package/lib/components/VTimeline/VTimeline.css +187 -48
  209. package/lib/components/VTimeline/VTimeline.mjs +27 -11
  210. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  211. package/lib/components/VTimeline/VTimeline.sass +196 -51
  212. package/lib/components/VTimeline/VTimelineDivider.mjs +2 -1
  213. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  214. package/lib/components/VTimeline/_variables.scss +2 -1
  215. package/lib/components/VToolbar/VToolbar.css +8 -1
  216. package/lib/components/VToolbar/VToolbar.mjs +8 -11
  217. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  218. package/lib/components/VToolbar/VToolbar.sass +2 -1
  219. package/lib/components/VToolbar/VToolbarItems.mjs +0 -1
  220. package/lib/components/VToolbar/VToolbarItems.mjs.map +1 -1
  221. package/lib/components/VToolbar/_variables.scss +13 -1
  222. package/lib/components/VWindow/VWindow.mjs +0 -8
  223. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  224. package/lib/components/index.d.ts +9025 -8077
  225. package/lib/composables/defaults.mjs +2 -2
  226. package/lib/composables/defaults.mjs.map +1 -1
  227. package/lib/composables/form.mjs +18 -5
  228. package/lib/composables/form.mjs.map +1 -1
  229. package/lib/composables/forwardRef.mjs +10 -6
  230. package/lib/composables/forwardRef.mjs.map +1 -1
  231. package/lib/composables/group.mjs +14 -6
  232. package/lib/composables/group.mjs.map +1 -1
  233. package/lib/composables/index.mjs.map +1 -1
  234. package/lib/composables/items.mjs +56 -0
  235. package/lib/composables/items.mjs.map +1 -0
  236. package/lib/composables/layout.mjs +7 -3
  237. package/lib/composables/layout.mjs.map +1 -1
  238. package/lib/composables/loader.mjs.map +1 -1
  239. package/lib/composables/nested/nested.mjs +27 -14
  240. package/lib/composables/nested/nested.mjs.map +1 -1
  241. package/lib/composables/nested/openStrategies.mjs +63 -36
  242. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  243. package/lib/composables/nested/selectStrategies.mjs +163 -122
  244. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  245. package/lib/composables/overlay.mjs +5 -1
  246. package/lib/composables/overlay.mjs.map +1 -1
  247. package/lib/composables/proxiedModel.mjs.map +1 -1
  248. package/lib/composables/resizeObserver.mjs +1 -9
  249. package/lib/composables/resizeObserver.mjs.map +1 -1
  250. package/lib/composables/router.mjs +17 -5
  251. package/lib/composables/router.mjs.map +1 -1
  252. package/lib/composables/selectLink.mjs +19 -0
  253. package/lib/composables/selectLink.mjs.map +1 -0
  254. package/lib/composables/stack.mjs +7 -4
  255. package/lib/composables/stack.mjs.map +1 -1
  256. package/lib/composables/validation.mjs +6 -3
  257. package/lib/composables/validation.mjs.map +1 -1
  258. package/lib/composables/variant.mjs +0 -3
  259. package/lib/composables/variant.mjs.map +1 -1
  260. package/lib/directives/ripple/index.mjs +15 -3
  261. package/lib/directives/ripple/index.mjs.map +1 -1
  262. package/lib/entry-bundler.mjs +1 -1
  263. package/lib/framework.mjs +12 -7
  264. package/lib/framework.mjs.map +1 -1
  265. package/lib/index.d.ts +18 -2
  266. package/lib/locale/ca.mjs +9 -9
  267. package/lib/locale/ca.mjs.map +1 -1
  268. package/lib/styles/generic/_colors.scss +0 -1
  269. package/lib/styles/main.css +400 -392
  270. package/lib/styles/settings/_utilities.scss +54 -26
  271. package/lib/styles/tools/_states.sass +2 -1
  272. package/lib/util/defineComponent.mjs +37 -6
  273. package/lib/util/defineComponent.mjs.map +1 -1
  274. package/lib/util/getCurrentInstance.mjs +1 -1
  275. package/lib/util/getCurrentInstance.mjs.map +1 -1
  276. package/lib/util/helpers.mjs.map +1 -1
  277. package/package.json +31 -29
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.0.0-beta.0
2
+ * Vuetify v3.0.0-beta.2
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { Fragment, ref, computed, unref, provide, inject, defineComponent as defineComponent$1, getCurrentInstance as getCurrentInstance$1, shallowReactive, toRaw, watchEffect, capitalize, camelize, h, watch, readonly, onBeforeUnmount, onDeactivated, onActivated, reactive, onMounted, createVNode, toRefs, mergeProps, Transition, onBeforeMount, nextTick, withDirectives, vShow, resolveDirective, isRef, toRef, resolveDynamicComponent, TransitionGroup, effectScope, onScopeDispose, warn, toHandlers, Teleport, vModelDynamic, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
7
+ import { Fragment, ref, computed, unref, provide, inject, defineComponent as defineComponent$1, getCurrentInstance as getCurrentInstance$1, shallowRef, shallowReactive, toRaw, watchEffect, watch, effectScope, capitalize, camelize, h, readonly, onBeforeUnmount, onDeactivated, onActivated, reactive, onMounted, createVNode, toRefs, mergeProps, Transition, onBeforeMount, nextTick, withDirectives, vShow, resolveDirective, isRef, toRef, resolveDynamicComponent, TransitionGroup, onScopeDispose, warn, toHandlers, Teleport, vModelDynamic, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
8
8
 
9
9
  class Box {
10
10
  constructor(_ref) {
@@ -793,7 +793,7 @@ function provideDefaults(defaults, options) {
793
793
  return properties;
794
794
  }
795
795
 
796
- return mergeDeep(properties, properties.prev);
796
+ return mergeDeep(properties.prev, properties);
797
797
  });
798
798
  provide(DefaultsSymbol, newDefaults);
799
799
  return newDefaults;
@@ -818,16 +818,33 @@ const defineComponent = function defineComponent(options) {
818
818
  }
819
819
 
820
820
  if (options._setup) {
821
+ var _options$props;
822
+
823
+ options.props = (_options$props = options.props) != null ? _options$props : {};
824
+ options.props._as = String;
825
+
821
826
  options.setup = function setup(props, ctx) {
822
827
  const vm = getCurrentInstance$1();
823
828
  const defaults = useDefaults();
824
829
 
830
+ const _subcomponentDefaults = shallowRef();
831
+
825
832
  const _props = shallowReactive({ ...toRaw(props)
826
833
  });
827
834
 
828
835
  watchEffect(() => {
836
+ var _props$_as;
837
+
829
838
  const globalDefaults = defaults.value.global;
830
- const componentDefaults = defaults.value[options.name];
839
+ const componentDefaults = defaults.value[(_props$_as = props._as) != null ? _props$_as : options.name];
840
+
841
+ if (componentDefaults) {
842
+ const subComponents = Object.entries(componentDefaults).filter(_ref => {
843
+ let [key] = _ref;
844
+ return key.startsWith('V');
845
+ });
846
+ if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
847
+ }
831
848
 
832
849
  for (const prop of Object.keys(props)) {
833
850
  let newVal;
@@ -835,9 +852,9 @@ const defineComponent = function defineComponent(options) {
835
852
  if (propIsDefined(vm.vnode, prop)) {
836
853
  newVal = props[prop];
837
854
  } else {
838
- var _ref, _componentDefaults$pr;
855
+ var _ref2, _componentDefaults$pr;
839
856
 
840
- newVal = (_ref = (_componentDefaults$pr = componentDefaults == null ? void 0 : componentDefaults[prop]) != null ? _componentDefaults$pr : globalDefaults == null ? void 0 : globalDefaults[prop]) != null ? _ref : props[prop];
857
+ newVal = (_ref2 = (_componentDefaults$pr = componentDefaults == null ? void 0 : componentDefaults[prop]) != null ? _componentDefaults$pr : globalDefaults == null ? void 0 : globalDefaults[prop]) != null ? _ref2 : props[prop];
841
858
  }
842
859
 
843
860
  if (_props[prop] !== newVal) {
@@ -845,7 +862,21 @@ const defineComponent = function defineComponent(options) {
845
862
  }
846
863
  }
847
864
  });
848
- return options._setup(_props, ctx);
865
+
866
+ const setupBindings = options._setup(_props, ctx);
867
+
868
+ let scope;
869
+ watch(_subcomponentDefaults, (val, oldVal) => {
870
+ if (!val && scope) scope.stop();else if (val && !oldVal) {
871
+ scope = effectScope();
872
+ scope.run(() => {
873
+ provideDefaults(val);
874
+ });
875
+ }
876
+ }, {
877
+ immediate: true
878
+ });
879
+ return setupBindings;
849
880
  };
850
881
  }
851
882
 
@@ -1402,16 +1433,12 @@ function useTheme() {
1402
1433
  function useResizeObserver(callback) {
1403
1434
  const resizeRef = ref();
1404
1435
  const contentRect = ref();
1405
- const contentBoxSize = ref();
1406
- const borderBoxSize = ref();
1407
1436
 
1408
1437
  if (IN_BROWSER) {
1409
1438
  const observer = new ResizeObserver(entries => {
1410
1439
  callback == null ? void 0 : callback(entries, observer);
1411
1440
  if (!entries.length) return;
1412
1441
  contentRect.value = entries[0].contentRect;
1413
- contentBoxSize.value = entries[0].contentBoxSize[0];
1414
- borderBoxSize.value = entries[0].borderBoxSize[0];
1415
1442
  });
1416
1443
  onBeforeUnmount(() => {
1417
1444
  observer.disconnect();
@@ -1420,8 +1447,6 @@ function useResizeObserver(callback) {
1420
1447
  if (oldValue) {
1421
1448
  observer.unobserve(oldValue);
1422
1449
  contentRect.value = undefined;
1423
- contentBoxSize.value = undefined;
1424
- borderBoxSize.value = undefined;
1425
1450
  }
1426
1451
 
1427
1452
  if (newValue) observer.observe(newValue);
@@ -1432,16 +1457,15 @@ function useResizeObserver(callback) {
1432
1457
 
1433
1458
  return {
1434
1459
  resizeRef,
1435
- contentRect: readonly(contentRect),
1436
- contentBoxSize: readonly(contentBoxSize),
1437
- borderBoxSize: readonly(borderBoxSize)
1460
+ contentRect: readonly(contentRect)
1438
1461
  };
1439
1462
  }
1440
1463
 
1441
1464
  // Composables
1442
1465
 
1443
1466
  const VuetifyLayoutKey = Symbol.for('vuetify:layout');
1444
- const ROOT_ZINDEX$1 = 1000;
1467
+ const VuetifyLayoutItemKey = Symbol.for('vuetify:layout-item');
1468
+ const ROOT_ZINDEX = 1000;
1445
1469
  const makeLayoutProps = propsFactory({
1446
1470
  overlaps: {
1447
1471
  type: Array,
@@ -1472,6 +1496,9 @@ function useLayoutItem(options) {
1472
1496
  if (!layout) throw new Error('Could not find injected Vuetify layout');
1473
1497
  const id = (_options$id = options.id) != null ? _options$id : `layout-item-${getUid()}`;
1474
1498
  const vm = getCurrentInstance('useLayoutItem');
1499
+ provide(VuetifyLayoutItemKey, {
1500
+ id
1501
+ });
1475
1502
  const isKeptAlive = ref(false);
1476
1503
  onDeactivated(() => isKeptAlive.value = true);
1477
1504
  onActivated(() => isKeptAlive.value = false);
@@ -1523,7 +1550,7 @@ const generateLayers = (layout, positions, layoutSizes, activeItems) => {
1523
1550
 
1524
1551
  function createLayout(props) {
1525
1552
  const parentLayout = inject(VuetifyLayoutKey, null);
1526
- const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX$1);
1553
+ const rootZIndex = computed(() => parentLayout ? parentLayout.rootZIndex.value - 100 : ROOT_ZINDEX);
1527
1554
  const registered = ref([]);
1528
1555
  const positions = reactive(new Map());
1529
1556
  const layoutSizes = reactive(new Map());
@@ -1634,7 +1661,7 @@ function createLayout(props) {
1634
1661
  layoutSizes.set(id, layoutSize);
1635
1662
  activeItems.set(id, active);
1636
1663
  disableTransitions && disabledTransitions.set(id, disableTransitions);
1637
- const instances = findChildrenWithProvide(VuetifyLayoutKey, rootVm == null ? void 0 : rootVm.vnode);
1664
+ const instances = findChildrenWithProvide(VuetifyLayoutItemKey, rootVm == null ? void 0 : rootVm.vnode);
1638
1665
  const instanceIndex = instances.indexOf(vm);
1639
1666
  if (instanceIndex > -1) registered.value.splice(instanceIndex, 0, id);else registered.value.push(id);
1640
1667
  const index = computed(() => items.value.findIndex(i => i.id === id));
@@ -1647,7 +1674,7 @@ function createLayout(props) {
1647
1674
  [position.value]: 0,
1648
1675
  zIndex: zIndex.value,
1649
1676
  transform: `translate${isHorizontal ? 'X' : 'Y'}(${(active.value ? 0 : -110) * (isOppositeHorizontal || isOppositeVertical ? -1 : 1)}%)`,
1650
- position: absolute.value || rootZIndex.value !== ROOT_ZINDEX$1 ? 'absolute' : 'fixed',
1677
+ position: absolute.value || rootZIndex.value !== ROOT_ZINDEX ? 'absolute' : 'fixed',
1651
1678
  ...(transitionsEnabled.value ? undefined : {
1652
1679
  transition: 'none'
1653
1680
  })
@@ -1663,17 +1690,17 @@ function createLayout(props) {
1663
1690
  }
1664
1691
 
1665
1692
  return { ...styles,
1666
- height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : `${elementSize.value}px`,
1693
+ height: isHorizontal ? `calc(100% - ${item.top}px - ${item.bottom}px)` : elementSize.value ? `${elementSize.value}px` : undefined,
1667
1694
  marginLeft: isOppositeHorizontal ? undefined : `${item.left}px`,
1668
1695
  marginRight: isOppositeHorizontal ? `${item.right}px` : undefined,
1669
1696
  marginTop: position.value !== 'bottom' ? `${item.top}px` : undefined,
1670
1697
  marginBottom: position.value !== 'top' ? `${item.bottom}px` : undefined,
1671
- width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : `${elementSize.value}px`
1698
+ width: !isHorizontal ? `calc(100% - ${item.left}px - ${item.right}px)` : elementSize.value ? `${elementSize.value}px` : undefined
1672
1699
  };
1673
1700
  });
1674
1701
  const layoutItemScrimStyles = computed(() => ({
1675
1702
  zIndex: zIndex.value - 1,
1676
- position: rootZIndex.value === ROOT_ZINDEX$1 ? 'fixed' : 'absolute'
1703
+ position: rootZIndex.value === ROOT_ZINDEX ? 'fixed' : 'absolute'
1677
1704
  }));
1678
1705
  return {
1679
1706
  layoutItemStyles,
@@ -2569,19 +2596,23 @@ function useForwardRef(target) {
2569
2596
 
2570
2597
  getOwnPropertyDescriptor(target, key) {
2571
2598
  const descriptor = Reflect.getOwnPropertyDescriptor(target, key);
2572
- if (descriptor) return descriptor;
2599
+ if (descriptor) return descriptor; // Check each ref's own properties
2573
2600
 
2574
2601
  for (const ref of refs) {
2575
2602
  if (!ref.value) continue;
2576
2603
  const descriptor = Reflect.getOwnPropertyDescriptor(ref.value, key);
2577
2604
  if (descriptor) return descriptor;
2578
- }
2605
+ } // Recursive search up each ref's prototype
2606
+
2579
2607
 
2580
2608
  for (const ref of refs) {
2581
- const obj = ref.value && Object.getPrototypeOf(ref.value);
2582
- if (!obj) continue;
2583
- const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
2584
- if (descriptor) return descriptor;
2609
+ let obj = ref.value && Object.getPrototypeOf(ref.value);
2610
+
2611
+ while (obj) {
2612
+ const descriptor = Reflect.getOwnPropertyDescriptor(obj, key);
2613
+ if (descriptor) return descriptor;
2614
+ obj = Object.getPrototypeOf(obj);
2615
+ }
2585
2616
  }
2586
2617
 
2587
2618
  return undefined;
@@ -2645,24 +2676,20 @@ const VToolbar = genericComponent()({
2645
2676
  backgroundColorClasses,
2646
2677
  backgroundColorStyles
2647
2678
  } = useBackgroundColor(toRef(props, 'color'));
2648
- const contentHeight = computed(() => Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0));
2679
+ const isExtended = computed(() => !!(props.extended || slots.extension));
2680
+ const contentHeight = computed(() => parseInt(Number(props.height) + (props.density === 'prominent' ? Number(props.height) : 0) - (props.density === 'comfortable' ? 8 : 0) - (props.density === 'compact' ? 16 : 0), 10));
2681
+ const extensionHeight = computed(() => isExtended.value ? parseInt(Number(props.extensionHeight) + (props.density === 'prominent' ? Number(props.extensionHeight) : 0) - (props.density === 'comfortable' ? 4 : 0) - (props.density === 'compact' ? 8 : 0), 10) : 0);
2649
2682
  provideDefaults({
2650
2683
  VBtn: {
2651
2684
  flat: true,
2652
2685
  variant: 'text'
2653
- },
2654
- VTextField: {
2655
- hideDetails: true
2656
2686
  }
2657
- }, {
2658
- scoped: true
2659
2687
  });
2660
2688
  useRender(() => {
2661
2689
  var _slots$image, _slots$prepend, _slots$default, _slots$append, _slots$extension;
2662
2690
 
2663
2691
  const hasTitle = !!(props.title || slots.title);
2664
2692
  const hasImage = !!(slots.image || props.image);
2665
- const isExtended = !!(props.extended || slots.extension);
2666
2693
  return createVNode(props.tag, {
2667
2694
  "class": ['v-toolbar', {
2668
2695
  'v-toolbar--absolute': props.absolute,
@@ -2698,16 +2725,17 @@ const VToolbar = genericComponent()({
2698
2725
  text: slots.title
2699
2726
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.append && createVNode("div", {
2700
2727
  "class": "v-toolbar__append"
2701
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots)])]), isExtended && createVNode("div", {
2728
+ }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots)])]), isExtended.value && createVNode("div", {
2702
2729
  "class": "v-toolbar__extension",
2703
2730
  "style": {
2704
- height: convertToUnit(props.extensionHeight)
2731
+ height: convertToUnit(extensionHeight.value)
2705
2732
  }
2706
2733
  }, [(_slots$extension = slots.extension) == null ? void 0 : _slots$extension.call(slots)])]
2707
2734
  });
2708
2735
  });
2709
2736
  return useForwardRef({
2710
- contentHeight
2737
+ contentHeight,
2738
+ extensionHeight
2711
2739
  });
2712
2740
  }
2713
2741
 
@@ -2785,9 +2813,11 @@ const VAppBar = defineComponent({
2785
2813
  const vToolbarRef = ref();
2786
2814
  const isActive = useProxiedModel(props, 'modelValue');
2787
2815
  const height = computed(() => {
2788
- var _vToolbarRef$value;
2816
+ var _vToolbarRef$value$co, _vToolbarRef$value, _vToolbarRef$value$ex, _vToolbarRef$value2;
2789
2817
 
2790
- return (_vToolbarRef$value = vToolbarRef.value) == null ? void 0 : _vToolbarRef$value.contentHeight;
2818
+ const height = (_vToolbarRef$value$co = (_vToolbarRef$value = vToolbarRef.value) == null ? void 0 : _vToolbarRef$value.contentHeight) != null ? _vToolbarRef$value$co : 0;
2819
+ const extensionHeight = (_vToolbarRef$value$ex = (_vToolbarRef$value2 = vToolbarRef.value) == null ? void 0 : _vToolbarRef$value2.extensionHeight) != null ? _vToolbarRef$value$ex : 0;
2820
+ return height + extensionHeight;
2791
2821
  });
2792
2822
  const {
2793
2823
  layoutItemStyles
@@ -2807,7 +2837,9 @@ const VAppBar = defineComponent({
2807
2837
  "class": ['v-app-bar', {
2808
2838
  'v-app-bar--bottom': props.position === 'bottom'
2809
2839
  }],
2810
- "style": layoutItemStyles.value
2840
+ "style": { ...layoutItemStyles.value,
2841
+ height: undefined
2842
+ }
2811
2843
  }, toolbarProps), slots);
2812
2844
  };
2813
2845
  }
@@ -2845,7 +2877,6 @@ function genOverlays(isClickable, name) {
2845
2877
  }
2846
2878
  const makeVariantProps = propsFactory({
2847
2879
  color: String,
2848
- textColor: String,
2849
2880
  variant: {
2850
2881
  type: String,
2851
2882
  default: 'contained',
@@ -2865,12 +2896,10 @@ function useVariant(props) {
2865
2896
  colorStyles
2866
2897
  } = useColor(computed(() => {
2867
2898
  const {
2868
- textColor,
2869
2899
  variant,
2870
2900
  color
2871
2901
  } = unref(props);
2872
2902
  return {
2873
- text: textColor,
2874
2903
  [['contained', 'contained-flat'].includes(variant) ? 'background' : 'text']: color
2875
2904
  };
2876
2905
  }));
@@ -2981,10 +3010,11 @@ function useGroupItem(props, injectKey) {
2981
3010
  const isSelected = computed(() => {
2982
3011
  return group.isSelected(id);
2983
3012
  });
2984
- const selectedClass = computed(() => {
2985
- var _group$selectedClass$;
2986
-
2987
- return isSelected.value && ((_group$selectedClass$ = group.selectedClass.value) != null ? _group$selectedClass$ : props.selectedClass);
3013
+ const selectedClass = computed(() => isSelected.value && [group.selectedClass.value, props.selectedClass]);
3014
+ watch(isSelected, value => {
3015
+ vm.emit('group:selected', {
3016
+ value
3017
+ });
2988
3018
  });
2989
3019
  return {
2990
3020
  id,
@@ -3111,12 +3141,19 @@ function useGroup(props, injectKey) {
3111
3141
  next: () => step(1),
3112
3142
  isSelected: id => selected.value.includes(id),
3113
3143
  selectedClass: computed(() => props.selectedClass),
3114
- items: computed(() => items)
3144
+ items: computed(() => items),
3145
+ getItemIndex: value => getItemIndex(items, value)
3115
3146
  };
3116
3147
  provide(injectKey, state);
3117
3148
  return state;
3118
3149
  }
3119
3150
 
3151
+ function getItemIndex(items, value) {
3152
+ const ids = getIds(items, [value]);
3153
+ if (!ids.length) return -1;
3154
+ return items.findIndex(item => item.id === ids[0]);
3155
+ }
3156
+
3120
3157
  function getIds(items, modelValue) {
3121
3158
  const ids = [];
3122
3159
 
@@ -3344,24 +3381,26 @@ const useIcon = props => {
3344
3381
  };
3345
3382
  };
3346
3383
 
3384
+ const makeVIconProps = propsFactory({
3385
+ color: String,
3386
+ start: Boolean,
3387
+ end: Boolean,
3388
+ icon: {
3389
+ type: [String, Object]
3390
+ },
3391
+ ...makeSizeProps(),
3392
+ ...makeTagProps({
3393
+ tag: 'i'
3394
+ }),
3395
+ ...makeThemeProps()
3396
+ }, 'v-icon');
3347
3397
  const VIcon = defineComponent({
3348
3398
  name: 'VIcon',
3349
- props: {
3350
- color: String,
3351
- left: Boolean,
3352
- right: Boolean,
3353
- icon: {
3354
- type: [String, Object]
3355
- },
3356
- ...makeSizeProps(),
3357
- ...makeTagProps({
3358
- tag: 'i'
3359
- }),
3360
- ...makeThemeProps()
3361
- },
3399
+ props: makeVIconProps(),
3362
3400
 
3363
3401
  setup(props, _ref) {
3364
3402
  let {
3403
+ attrs,
3365
3404
  slots
3366
3405
  } = _ref;
3367
3406
  let slotIcon;
@@ -3394,8 +3433,9 @@ const VIcon = defineComponent({
3394
3433
  "tag": props.tag,
3395
3434
  "icon": iconData.value.icon,
3396
3435
  "class": ['v-icon', 'notranslate', sizeClasses.value, textColorClasses.value, themeClasses.value, {
3397
- 'v-icon--left': props.left,
3398
- 'v-icon--right': props.right
3436
+ 'v-icon--clickable': !!attrs.onClick,
3437
+ 'v-icon--start': props.start,
3438
+ 'v-icon--end': props.end
3399
3439
  }],
3400
3440
  "style": [!sizeClasses.value ? {
3401
3441
  fontSize: convertToUnit(props.size),
@@ -3485,21 +3525,33 @@ const makeRouterProps = propsFactory({
3485
3525
  replace: Boolean,
3486
3526
  to: [String, Object]
3487
3527
  }, 'router');
3528
+ let inTransition = false;
3488
3529
  function useBackButton(cb) {
3489
3530
  const router = useRouter();
3490
3531
  let popped = false;
3491
- let removeGuard;
3532
+ let removeBefore;
3533
+ let removeAfter;
3492
3534
  onMounted(() => {
3493
3535
  window.addEventListener('popstate', onPopstate);
3494
- removeGuard = router == null ? void 0 : router.beforeEach((to, from, next) => {
3495
- setTimeout(() => popped ? cb(next) : next());
3536
+ removeBefore = router == null ? void 0 : router.beforeEach((to, from, next) => {
3537
+ if (!inTransition) {
3538
+ setTimeout(() => popped ? cb(next) : next());
3539
+ } else {
3540
+ popped ? cb(next) : next();
3541
+ }
3542
+
3543
+ inTransition = true;
3544
+ });
3545
+ removeAfter = router == null ? void 0 : router.afterEach(() => {
3546
+ inTransition = false;
3496
3547
  });
3497
3548
  });
3498
3549
  onBeforeUnmount(() => {
3499
- var _removeGuard;
3550
+ var _removeBefore, _removeAfter;
3500
3551
 
3501
3552
  window.removeEventListener('popstate', onPopstate);
3502
- (_removeGuard = removeGuard) == null ? void 0 : _removeGuard();
3553
+ (_removeBefore = removeBefore) == null ? void 0 : _removeBefore();
3554
+ (_removeAfter = removeAfter) == null ? void 0 : _removeAfter();
3503
3555
  });
3504
3556
 
3505
3557
  function onPopstate(e) {
@@ -3511,9 +3563,27 @@ function useBackButton(cb) {
3511
3563
  }
3512
3564
  }
3513
3565
 
3566
+ // Utilities
3567
+
3568
+ function useSelectLink(link, select) {
3569
+ watch(() => {
3570
+ var _link$isExactActive;
3571
+
3572
+ return (_link$isExactActive = link.isExactActive) == null ? void 0 : _link$isExactActive.value;
3573
+ }, isExactActive => {
3574
+ if (link.isLink.value && isExactActive && select) {
3575
+ nextTick(() => {
3576
+ select(true);
3577
+ });
3578
+ }
3579
+ }, {
3580
+ immediate: true
3581
+ });
3582
+ }
3583
+
3514
3584
  // Styles
3515
3585
 
3516
- const rippleStop = Symbol('rippleStop');
3586
+ const stopSymbol = Symbol('rippleStop');
3517
3587
  const DELAY_RIPPLE = 80;
3518
3588
 
3519
3589
  function transform(el, value) {
@@ -3661,9 +3731,9 @@ function isRippleEnabled(value) {
3661
3731
  function rippleShow(e) {
3662
3732
  const value = {};
3663
3733
  const element = e.currentTarget;
3664
- if (!(element != null && element._ripple) || element._ripple.touched || e[rippleStop]) return; // Don't allow the event to trigger ripples on any other elements
3734
+ if (!(element != null && element._ripple) || element._ripple.touched || e[stopSymbol]) return; // Don't allow the event to trigger ripples on any other elements
3665
3735
 
3666
- e[rippleStop] = true;
3736
+ e[stopSymbol] = true;
3667
3737
 
3668
3738
  if (isTouchEvent(e)) {
3669
3739
  element._ripple.touched = true;
@@ -3704,6 +3774,10 @@ function rippleShow(e) {
3704
3774
  }
3705
3775
  }
3706
3776
 
3777
+ function rippleStop(e) {
3778
+ e[stopSymbol] = true;
3779
+ }
3780
+
3707
3781
  function rippleHide(e) {
3708
3782
  const element = e.currentTarget;
3709
3783
  if (!element || !element._ripple) return;
@@ -3784,6 +3858,14 @@ function updateRipple(el, binding, wasEnabled) {
3784
3858
  }
3785
3859
 
3786
3860
  if (enabled && !wasEnabled) {
3861
+ if (modifiers.stop) {
3862
+ el.addEventListener('touchstart', rippleStop, {
3863
+ passive: true
3864
+ });
3865
+ el.addEventListener('mousedown', rippleStop);
3866
+ return;
3867
+ }
3868
+
3787
3869
  el.addEventListener('touchstart', rippleShow, {
3788
3870
  passive: true
3789
3871
  });
@@ -3853,6 +3935,11 @@ const VBtn = defineComponent({
3853
3935
  Ripple
3854
3936
  },
3855
3937
  props: {
3938
+ active: Boolean,
3939
+ symbol: {
3940
+ type: null,
3941
+ default: VBtnToggleSymbol
3942
+ },
3856
3943
  flat: Boolean,
3857
3944
  icon: [Boolean, String],
3858
3945
  prependIcon: String,
@@ -3916,21 +4003,22 @@ const VBtn = defineComponent({
3916
4003
  const {
3917
4004
  sizeClasses
3918
4005
  } = useSize(props);
3919
- const group = useGroupItem(props, VBtnToggleSymbol, false);
4006
+ const group = useGroupItem(props, props.symbol, false);
3920
4007
  const link = useLink(props, attrs);
3921
4008
  const isDisabled = computed(() => (group == null ? void 0 : group.disabled.value) || props.disabled);
3922
4009
  const isElevated = computed(() => {
3923
4010
  return props.variant === 'contained' && !(props.disabled || props.flat || props.border);
3924
4011
  });
4012
+ useSelectLink(link, group == null ? void 0 : group.select);
3925
4013
  return () => {
3926
- var _link$isExactActive, _slots$default;
4014
+ var _slots$default;
3927
4015
 
3928
4016
  const Tag = link.isLink.value ? 'a' : props.tag;
3929
4017
  const hasColor = !group || group.isSelected.value;
3930
4018
  return withDirectives(createVNode(Tag, {
3931
4019
  "type": Tag === 'a' ? undefined : 'button',
3932
4020
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
3933
- 'v-btn--active': (_link$isExactActive = link.isExactActive) == null ? void 0 : _link$isExactActive.value,
4021
+ 'v-btn--active': props.active,
3934
4022
  'v-btn--block': props.block,
3935
4023
  'v-btn--disabled': isDisabled.value,
3936
4024
  'v-btn--elevated': isElevated.value,
@@ -3941,12 +4029,18 @@ const VBtn = defineComponent({
3941
4029
  "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, positionStyles.value],
3942
4030
  "disabled": isDisabled.value || undefined,
3943
4031
  "href": link.href.value,
3944
- "onClick": isDisabled.value || link.navigate || (group == null ? void 0 : group.toggle)
4032
+ "onClick": e => {
4033
+ var _link$navigate;
4034
+
4035
+ if (isDisabled.value) return;
4036
+ (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4037
+ group == null ? void 0 : group.toggle();
4038
+ }
3945
4039
  }, {
3946
4040
  default: () => [genOverlays(true, 'v-btn'), !props.icon && props.prependIcon && createVNode(VIcon, {
3947
4041
  "class": "v-btn__icon",
3948
4042
  "icon": props.prependIcon,
3949
- "left": !props.stacked
4043
+ "start": true
3950
4044
  }, null), typeof props.icon === 'boolean' ? (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots) : createVNode(VIcon, {
3951
4045
  "class": "v-btn__icon",
3952
4046
  "icon": props.icon,
@@ -3954,7 +4048,7 @@ const VBtn = defineComponent({
3954
4048
  }, null), !props.icon && props.appendIcon && createVNode(VIcon, {
3955
4049
  "class": "v-btn__icon",
3956
4050
  "icon": props.appendIcon,
3957
- "right": !props.stacked
4051
+ "end": true
3958
4052
  }, null)]
3959
4053
  }), [[resolveDirective("ripple"), !isDisabled.value && props.ripple, null]]);
3960
4054
  };
@@ -4004,7 +4098,6 @@ const VToolbarItems = defineComponent({
4004
4098
  provideDefaults({
4005
4099
  VBtn: {
4006
4100
  color: toRef(props, 'color'),
4007
- textColor: toRef(props, 'textColor'),
4008
4101
  variant: toRef(props, 'variant')
4009
4102
  }
4010
4103
  });
@@ -4031,6 +4124,7 @@ const VAppBarTitle = defineComponent({ ...VToolbarTitle,
4031
4124
 
4032
4125
  });
4033
4126
 
4127
+ // Utilities
4034
4128
  const VAlertTitle = createSimpleFunctional('v-alert-title');
4035
4129
 
4036
4130
  const allowedTypes = ['success', 'info', 'warning', 'error'];
@@ -4100,7 +4194,6 @@ const VAlert = defineComponent({
4100
4194
 
4101
4195
  return {
4102
4196
  color: (_props$color = props.color) != null ? _props$color : props.type,
4103
- textColor: props.textColor,
4104
4197
  variant: props.variant
4105
4198
  };
4106
4199
  });
@@ -4140,9 +4233,10 @@ const VAlert = defineComponent({
4140
4233
  return () => {
4141
4234
  var _slots$default;
4142
4235
 
4143
- const hasClose = !!(slots.close || props.closable);
4144
4236
  const hasPrepend = !!(slots.prepend || icon.value);
4145
4237
  const hasTitle = !!(slots.title || props.title);
4238
+ const hasText = !!(props.text || slots.text);
4239
+ const hasClose = !!(slots.close || props.closable);
4146
4240
  return isActive.value && createVNode(props.tag, {
4147
4241
  "class": ['v-alert', props.border && {
4148
4242
  'v-alert--border': !!props.border,
@@ -4156,43 +4250,57 @@ const VAlert = defineComponent({
4156
4250
  default: () => [genOverlays(false, 'v-alert'), props.border && createVNode("div", {
4157
4251
  "class": ['v-alert__border', textColorClasses.value],
4158
4252
  "style": textColorStyles.value
4159
- }, null), hasPrepend && createVNode("div", {
4160
- "class": "v-alert__prepend"
4161
- }, [slots.prepend ? slots.prepend() : createVNode(VIcon, {
4162
- "icon": icon.value,
4163
- "size": props.prominent ? 'large' : 'default'
4164
- }, null)]), createVNode("div", {
4253
+ }, null), hasPrepend && createVNode(VDefaultsProvider, {
4254
+ "defaults": {
4255
+ VIcon: {
4256
+ density: props.density,
4257
+ icon: icon.value,
4258
+ size: props.prominent ? 44 : 'default'
4259
+ }
4260
+ }
4261
+ }, {
4262
+ default: () => [createVNode("div", {
4263
+ "class": "v-alert__prepend"
4264
+ }, [slots.prepend ? slots.prepend() : icon.value && createVNode(VIcon, null, null)])]
4265
+ }), createVNode("div", {
4165
4266
  "class": "v-alert__content"
4166
4267
  }, [hasTitle && createVNode(VAlertTitle, null, {
4167
4268
  default: () => [slots.title ? slots.title() : props.title]
4168
- }), slots.text ? slots.text() : props.text, (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]), slots.append && createVNode("div", {
4269
+ }), hasText && (slots.text ? slots.text() : props.text), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]), slots.append && createVNode("div", {
4169
4270
  "class": "v-alert__append"
4170
- }, [slots.append()]), hasClose && createVNode("div", {
4171
- "class": "v-alert__close",
4172
- "onClick": onCloseClick
4173
- }, [slots.close ? slots.close() : createVNode(VIcon, {
4174
- "icon": props.closeIcon,
4175
- "size": "small"
4176
- }, null)])]
4271
+ }, [slots.append()]), hasClose && createVNode(VDefaultsProvider, {
4272
+ "defaults": {
4273
+ VIcon: {
4274
+ icon: props.closeIcon,
4275
+ size: 'small'
4276
+ }
4277
+ }
4278
+ }, {
4279
+ default: () => [createVNode("div", {
4280
+ "class": "v-alert__close",
4281
+ "onClick": onCloseClick
4282
+ }, [slots.close ? slots.close() : createVNode(VIcon, null, null)])]
4283
+ })]
4177
4284
  });
4178
4285
  };
4179
4286
  }
4180
4287
 
4181
4288
  });
4182
4289
 
4290
+ const makeVAvatarProps = propsFactory({
4291
+ color: String,
4292
+ start: Boolean,
4293
+ end: Boolean,
4294
+ icon: String,
4295
+ image: String,
4296
+ ...makeDensityProps(),
4297
+ ...makeRoundedProps(),
4298
+ ...makeSizeProps(),
4299
+ ...makeTagProps()
4300
+ });
4183
4301
  const VAvatar = defineComponent({
4184
4302
  name: 'VAvatar',
4185
- props: {
4186
- color: String,
4187
- left: Boolean,
4188
- right: Boolean,
4189
- icon: String,
4190
- image: String,
4191
- ...makeDensityProps(),
4192
- ...makeRoundedProps(),
4193
- ...makeSizeProps(),
4194
- ...makeTagProps()
4195
- },
4303
+ props: makeVAvatarProps(),
4196
4304
 
4197
4305
  setup(props, _ref) {
4198
4306
  let {
@@ -4217,8 +4325,8 @@ const VAvatar = defineComponent({
4217
4325
 
4218
4326
  return createVNode(props.tag, {
4219
4327
  "class": ['v-avatar', {
4220
- 'v-avatar--left': props.left,
4221
- 'v-avatar--right': props.right
4328
+ 'v-avatar--start': props.start,
4329
+ 'v-avatar--end': props.end
4222
4330
  }, backgroundColorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value],
4223
4331
  "style": [backgroundColorStyles.value, sizeStyles.value]
4224
4332
  }, {
@@ -4847,139 +4955,109 @@ function useList() {
4847
4955
  return inject(ListKey, null);
4848
4956
  }
4849
4957
 
4850
- const singleOpenStrategy = _ref => {
4851
- let {
4852
- id,
4853
- value,
4854
- opened,
4855
- parents
4856
- } = _ref;
4857
-
4858
- if (value) {
4859
- const newOpened = new Set();
4860
- newOpened.add(id);
4861
- let parent = parents.get(id);
4862
-
4863
- while (parent != null) {
4864
- newOpened.add(parent);
4865
- parent = parents.get(parent);
4866
- }
4958
+ const singleOpenStrategy = {
4959
+ open: _ref => {
4960
+ let {
4961
+ id,
4962
+ value,
4963
+ opened,
4964
+ parents
4965
+ } = _ref;
4867
4966
 
4868
- return newOpened;
4869
- } else {
4870
- opened.delete(id);
4871
- return opened;
4872
- }
4873
- };
4874
- const multipleOpenStrategy = _ref2 => {
4875
- let {
4876
- id,
4877
- value,
4878
- opened,
4879
- parents
4880
- } = _ref2;
4967
+ if (value) {
4968
+ const newOpened = new Set();
4969
+ newOpened.add(id);
4970
+ let parent = parents.get(id);
4881
4971
 
4882
- if (value) {
4883
- let parent = parents.get(id);
4884
- opened.add(id);
4972
+ while (parent != null) {
4973
+ newOpened.add(parent);
4974
+ parent = parents.get(parent);
4975
+ }
4885
4976
 
4886
- while (parent != null && parent !== id) {
4887
- opened.add(parent);
4888
- parent = parents.get(parent);
4977
+ return newOpened;
4978
+ } else {
4979
+ opened.delete(id);
4980
+ return opened;
4889
4981
  }
4890
-
4891
- return opened;
4892
- } else {
4893
- opened.delete(id);
4894
- }
4895
-
4896
- return opened;
4982
+ },
4983
+ select: () => null
4897
4984
  };
4898
-
4899
- const independentSelectStrategy = {
4900
- select: _ref => {
4985
+ const multipleOpenStrategy = {
4986
+ open: _ref2 => {
4901
4987
  let {
4902
4988
  id,
4903
4989
  value,
4904
- mandatory,
4905
- selected
4906
- } = _ref;
4907
- selected.set(id, value ? 'on' : mandatory && !Array.from(selected.entries()).find(_ref2 => {
4908
- let [key, value] = _ref2;
4909
- return value === 'on' && key !== id;
4910
- }) ? 'on' : 'off');
4911
- return selected;
4912
- },
4913
- in: (v, children, parents) => {
4914
- let map = new Map();
4990
+ opened,
4991
+ parents
4992
+ } = _ref2;
4915
4993
 
4916
- for (const id of v || []) {
4917
- map = independentSelectStrategy.select({
4918
- id,
4919
- value: true,
4920
- selected: new Map(map),
4921
- children,
4922
- parents
4923
- });
4924
- }
4994
+ if (value) {
4995
+ let parent = parents.get(id);
4996
+ opened.add(id);
4925
4997
 
4926
- return map;
4927
- },
4928
- out: v => {
4929
- const arr = [];
4998
+ while (parent != null && parent !== id) {
4999
+ opened.add(parent);
5000
+ parent = parents.get(parent);
5001
+ }
4930
5002
 
4931
- for (const [key, value] of v.entries()) {
4932
- if (value === 'on') arr.push(key);
5003
+ return opened;
5004
+ } else {
5005
+ opened.delete(id);
4933
5006
  }
4934
5007
 
4935
- return arr;
4936
- }
5008
+ return opened;
5009
+ },
5010
+ select: () => null
4937
5011
  };
4938
- const independentSingleSelectStrategy = {
5012
+ const listOpenStrategy = {
5013
+ open: multipleOpenStrategy.open,
4939
5014
  select: _ref3 => {
4940
5015
  let {
4941
5016
  id,
4942
5017
  value,
4943
- ...rest
5018
+ opened,
5019
+ parents
4944
5020
  } = _ref3;
4945
- return independentSelectStrategy.select({ ...rest,
4946
- id,
4947
- value,
4948
- selected: new Map()
4949
- });
4950
- },
4951
- in: (v, children, parents) => {
4952
- let map = new Map();
5021
+ if (!value) return opened;
5022
+ const path = [];
5023
+ let parent = parents.get(id);
4953
5024
 
4954
- if (v != null && v.length) {
4955
- map = independentSelectStrategy.in(v.slice(0, 1), children, parents);
5025
+ while (parent != null) {
5026
+ path.push(parent);
5027
+ parent = parents.get(parent);
4956
5028
  }
4957
5029
 
4958
- return map;
4959
- },
4960
- out: (v, children, parents) => {
4961
- return independentSelectStrategy.out(v, children, parents);
5030
+ return new Set(path);
4962
5031
  }
4963
5032
  };
4964
- const leafSelectStrategy = function () {
4965
- let single = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
5033
+
5034
+ /* eslint-disable sonarjs/no-identical-functions */
5035
+ const independentSelectStrategy = mandatory => {
4966
5036
  const strategy = {
4967
- select: _ref4 => {
5037
+ select: _ref => {
4968
5038
  let {
4969
5039
  id,
4970
5040
  value,
4971
- selected,
4972
- children
4973
- } = _ref4;
4974
- if (children.has(id)) return selected;
4975
- if (single) return new Map([[id, value ? 'on' : 'off']]);
5041
+ selected
5042
+ } = _ref;
5043
+
5044
+ // When mandatory and we're trying to deselect when id
5045
+ // is the only currently selected item then do nothing
5046
+ if (mandatory && !value) {
5047
+ const on = Array.from(selected.entries()).reduce((arr, _ref2) => {
5048
+ let [key, value] = _ref2;
5049
+ return value === 'on' ? [...arr, key] : arr;
5050
+ }, []);
5051
+ if (on.length === 1 && on[0] === id) return selected;
5052
+ }
5053
+
4976
5054
  selected.set(id, value ? 'on' : 'off');
4977
5055
  return selected;
4978
5056
  },
4979
5057
  in: (v, children, parents) => {
4980
5058
  let map = new Map();
4981
5059
 
4982
- for (const id of v != null ? v : []) {
5060
+ for (const id of v || []) {
4983
5061
  map = strategy.select({
4984
5062
  id,
4985
5063
  value: true,
@@ -4991,66 +5069,164 @@ const leafSelectStrategy = function () {
4991
5069
 
4992
5070
  return map;
4993
5071
  },
4994
- out: independentSelectStrategy.out
5072
+ out: v => {
5073
+ const arr = [];
5074
+
5075
+ for (const [key, value] of v.entries()) {
5076
+ if (value === 'on') arr.push(key);
5077
+ }
5078
+
5079
+ return arr;
5080
+ }
4995
5081
  };
4996
5082
  return strategy;
4997
5083
  };
4998
- const classicSelectStrategy = {
4999
- select: _ref5 => {
5000
- let {
5001
- id,
5002
- value,
5003
- selected,
5004
- children,
5005
- parents
5006
- } = _ref5;
5007
- const items = [id];
5008
-
5009
- while (items.length) {
5010
- const item = items.shift();
5011
- selected.set(item, value ? 'on' : 'off');
5084
+ const independentSingleSelectStrategy = mandatory => {
5085
+ const parentStrategy = independentSelectStrategy(mandatory);
5086
+ const strategy = {
5087
+ select: _ref3 => {
5088
+ let {
5089
+ selected,
5090
+ id,
5091
+ ...rest
5092
+ } = _ref3;
5093
+ const singleSelected = selected.has(id) ? new Map([[id, selected.get(id)]]) : new Map();
5094
+ return parentStrategy.select({ ...rest,
5095
+ id,
5096
+ selected: singleSelected
5097
+ });
5098
+ },
5099
+ in: (v, children, parents) => {
5100
+ let map = new Map();
5012
5101
 
5013
- if (children.has(item)) {
5014
- items.push(...children.get(item));
5102
+ if (v != null && v.length) {
5103
+ map = parentStrategy.in(v.slice(0, 1), children, parents);
5015
5104
  }
5016
- }
5017
-
5018
- let parent = parents.get(id);
5019
5105
 
5020
- while (parent) {
5021
- const childrenIds = children.get(parent);
5022
- const everySelected = childrenIds.every(cid => selected.get(cid) === 'on');
5023
- const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off');
5024
- selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
5025
- parent = parents.get(parent);
5106
+ return map;
5107
+ },
5108
+ out: (v, children, parents) => {
5109
+ return parentStrategy.out(v, children, parents);
5026
5110
  }
5027
-
5028
- return selected;
5029
- },
5030
- in: (v, children, parents) => {
5031
- let map = new Map();
5032
-
5033
- for (const id of v || []) {
5034
- map = classicSelectStrategy.select({
5111
+ };
5112
+ return strategy;
5113
+ };
5114
+ const leafSelectStrategy = mandatory => {
5115
+ const parentStrategy = independentSelectStrategy(mandatory);
5116
+ const strategy = {
5117
+ select: _ref4 => {
5118
+ let {
5035
5119
  id,
5036
- value: true,
5037
- selected: new Map(map),
5120
+ selected,
5038
5121
  children,
5039
- parents
5122
+ ...rest
5123
+ } = _ref4;
5124
+ if (children.has(id)) return selected;
5125
+ return parentStrategy.select({
5126
+ id,
5127
+ selected,
5128
+ children,
5129
+ ...rest
5040
5130
  });
5041
- }
5131
+ },
5132
+ in: parentStrategy.in,
5133
+ out: parentStrategy.out
5134
+ };
5135
+ return strategy;
5136
+ };
5137
+ const leafSingleSelectStrategy = mandatory => {
5138
+ const parentStrategy = independentSingleSelectStrategy(mandatory);
5139
+ const strategy = {
5140
+ select: _ref5 => {
5141
+ let {
5142
+ id,
5143
+ selected,
5144
+ children,
5145
+ ...rest
5146
+ } = _ref5;
5147
+ if (children.has(id)) return selected;
5148
+ return parentStrategy.select({
5149
+ id,
5150
+ selected,
5151
+ children,
5152
+ ...rest
5153
+ });
5154
+ },
5155
+ in: parentStrategy.in,
5156
+ out: parentStrategy.out
5157
+ };
5158
+ return strategy;
5159
+ };
5160
+ const classicSelectStrategy = mandatory => {
5161
+ const strategy = {
5162
+ select: _ref6 => {
5163
+ let {
5164
+ id,
5165
+ value,
5166
+ selected,
5167
+ children,
5168
+ parents
5169
+ } = _ref6;
5170
+ const original = new Map(selected);
5171
+ const items = [id];
5042
5172
 
5043
- return map;
5044
- },
5045
- out: (v, children) => {
5046
- const arr = [];
5173
+ while (items.length) {
5174
+ const item = items.shift();
5175
+ selected.set(item, value ? 'on' : 'off');
5047
5176
 
5048
- for (const [key, value] of v.entries()) {
5049
- if (value === 'on' && !children.has(key)) arr.push(key);
5050
- }
5177
+ if (children.has(item)) {
5178
+ items.push(...children.get(item));
5179
+ }
5180
+ }
5051
5181
 
5052
- return arr;
5053
- }
5182
+ let parent = parents.get(id);
5183
+
5184
+ while (parent) {
5185
+ const childrenIds = children.get(parent);
5186
+ const everySelected = childrenIds.every(cid => selected.get(cid) === 'on');
5187
+ const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off');
5188
+ selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
5189
+ parent = parents.get(parent);
5190
+ } // If mandatory and planned deselect results in no selected
5191
+ // items then we can't do it, so return original state
5192
+
5193
+
5194
+ if (mandatory && !value) {
5195
+ const on = Array.from(selected.entries()).reduce((arr, _ref7) => {
5196
+ let [key, value] = _ref7;
5197
+ return value === 'on' ? [...arr, key] : arr;
5198
+ }, []);
5199
+ if (on.length === 0) return original;
5200
+ }
5201
+
5202
+ return selected;
5203
+ },
5204
+ in: (v, children, parents) => {
5205
+ let map = new Map();
5206
+
5207
+ for (const id of v || []) {
5208
+ map = strategy.select({
5209
+ id,
5210
+ value: true,
5211
+ selected: new Map(map),
5212
+ children,
5213
+ parents
5214
+ });
5215
+ }
5216
+
5217
+ return map;
5218
+ },
5219
+ out: (v, children) => {
5220
+ const arr = [];
5221
+
5222
+ for (const [key, value] of v.entries()) {
5223
+ if (value === 'on' && !children.has(key)) arr.push(key);
5224
+ }
5225
+
5226
+ return arr;
5227
+ }
5228
+ };
5229
+ return strategy;
5054
5230
  };
5055
5231
 
5056
5232
  const VNestedSymbol = Symbol.for('vuetify:nested');
@@ -5085,26 +5261,29 @@ const useNested = props => {
5085
5261
 
5086
5262
  switch (props.selectStrategy) {
5087
5263
  case 'single-leaf':
5088
- return leafSelectStrategy(true);
5264
+ return leafSingleSelectStrategy(props.mandatory);
5089
5265
 
5090
5266
  case 'leaf':
5091
- return leafSelectStrategy();
5267
+ return leafSelectStrategy(props.mandatory);
5092
5268
 
5093
5269
  case 'independent':
5094
- return independentSelectStrategy;
5270
+ return independentSelectStrategy(props.mandatory);
5095
5271
 
5096
5272
  case 'single-independent':
5097
- return independentSingleSelectStrategy;
5273
+ return independentSingleSelectStrategy(props.mandatory);
5098
5274
 
5099
5275
  case 'classic':
5100
5276
  default:
5101
- return classicSelectStrategy;
5277
+ return classicSelectStrategy(props.mandatory);
5102
5278
  }
5103
5279
  });
5104
5280
  const openStrategy = computed(() => {
5105
5281
  if (typeof props.openStrategy === 'function') return props.openStrategy;
5106
5282
 
5107
5283
  switch (props.openStrategy) {
5284
+ case 'list':
5285
+ return listOpenStrategy;
5286
+
5108
5287
  case 'single':
5109
5288
  return singleOpenStrategy;
5110
5289
 
@@ -5175,7 +5354,7 @@ const useNested = props => {
5175
5354
  path: getPath(id),
5176
5355
  event
5177
5356
  });
5178
- const newOpened = openStrategy.value({
5357
+ const newOpened = openStrategy.value.open({
5179
5358
  id,
5180
5359
  value,
5181
5360
  opened: new Set(opened.value),
@@ -5198,10 +5377,19 @@ const useNested = props => {
5198
5377
  selected: new Map(selected.value),
5199
5378
  children: children.value,
5200
5379
  parents: parents.value,
5201
- event,
5202
- mandatory: props.mandatory
5380
+ event
5203
5381
  });
5204
5382
  newSelected && (selected.value = newSelected);
5383
+ const newOpened = openStrategy.value.select({
5384
+ id,
5385
+ value,
5386
+ selected: new Map(selected.value),
5387
+ opened: new Set(opened.value),
5388
+ children: children.value,
5389
+ parents: parents.value,
5390
+ event
5391
+ });
5392
+ newOpened && (opened.value = newOpened);
5205
5393
  },
5206
5394
  children,
5207
5395
  parents
@@ -5225,11 +5413,12 @@ const useNestedItem = (id, isGroup) => {
5225
5413
  select: (selected, e) => parent.root.select(computedId.value, selected, e),
5226
5414
  isSelected: computed(() => parent.root.selected.value.get(computedId.value) === 'on'),
5227
5415
  isIndeterminate: computed(() => parent.root.selected.value.get(computedId.value) === 'indeterminate'),
5228
- isLeaf: computed(() => !parent.root.children.value.get(computedId.value))
5416
+ isLeaf: computed(() => !parent.root.children.value.get(computedId.value)),
5417
+ isGroupActivator: parent.isGroupActivator
5229
5418
  };
5230
- !parent.skipRegister && parent.root.register(computedId.value, parent.id.value, isGroup);
5419
+ !parent.isGroupActivator && parent.root.register(computedId.value, parent.id.value, isGroup);
5231
5420
  onBeforeUnmount(() => {
5232
- !parent.skipRegister && parent.root.unregister(computedId.value);
5421
+ !parent.isGroupActivator && parent.root.unregister(computedId.value);
5233
5422
  });
5234
5423
  isGroup && provide(VNestedSymbol, item);
5235
5424
  return item;
@@ -5237,11 +5426,11 @@ const useNestedItem = (id, isGroup) => {
5237
5426
  const useNestedGroupActivator = () => {
5238
5427
  const parent = inject(VNestedSymbol, emptyNested);
5239
5428
  provide(VNestedSymbol, { ...parent,
5240
- skipRegister: true
5429
+ isGroupActivator: true
5241
5430
  });
5242
5431
  };
5243
5432
 
5244
- const VListGroupActivator = defineComponent$1({
5433
+ const VListGroupActivator = defineComponent({
5245
5434
  name: 'VListGroupActivator',
5246
5435
 
5247
5436
  setup(_, _ref) {
@@ -5260,6 +5449,8 @@ const VListGroupActivator = defineComponent$1({
5260
5449
  const VListGroup = genericComponent()({
5261
5450
  name: 'VListGroup',
5262
5451
  props: {
5452
+ activeColor: String,
5453
+ color: String,
5263
5454
  collapseIcon: {
5264
5455
  type: String,
5265
5456
  default: '$collapse'
@@ -5286,11 +5477,17 @@ const VListGroup = genericComponent()({
5286
5477
  open(!isOpen.value, e);
5287
5478
  };
5288
5479
 
5289
- const activatorProps = computed(() => ({
5290
- onClick,
5291
- appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,
5292
- class: 'v-list-group__header'
5293
- }));
5480
+ const activatorProps = computed(() => {
5481
+ var _props$activeColor;
5482
+
5483
+ return {
5484
+ onClick,
5485
+ active: isOpen.value,
5486
+ appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,
5487
+ class: 'v-list-group__header',
5488
+ color: isOpen.value ? (_props$activeColor = props.activeColor) != null ? _props$activeColor : props.color : undefined
5489
+ };
5490
+ });
5294
5491
  return () => {
5295
5492
  var _slots$default2;
5296
5493
 
@@ -5299,9 +5496,18 @@ const VListGroup = genericComponent()({
5299
5496
  'v-list-group--prepend': list == null ? void 0 : list.hasPrepend.value
5300
5497
  }]
5301
5498
  }, {
5302
- default: () => [slots.activator && createVNode(VListGroupActivator, null, {
5303
- default: () => [slots.activator({
5304
- props: activatorProps.value
5499
+ default: () => [slots.activator && createVNode(VDefaultsProvider, {
5500
+ "defaults": {
5501
+ VListItemIcon: {
5502
+ color: activatorProps.value.color
5503
+ }
5504
+ }
5505
+ }, {
5506
+ default: () => [createVNode(VListGroupActivator, null, {
5507
+ default: () => [slots.activator({
5508
+ props: activatorProps.value,
5509
+ isOpen
5510
+ })]
5305
5511
  })]
5306
5512
  }), createVNode(VExpandTransition, null, {
5307
5513
  default: () => [withDirectives(createVNode("div", {
@@ -5316,30 +5522,42 @@ const VListGroup = genericComponent()({
5316
5522
 
5317
5523
  const VListItemAvatar = defineComponent({
5318
5524
  name: 'VListItemAvatar',
5319
- props: {
5320
- left: Boolean,
5321
- right: Boolean,
5322
- ...makeTagProps()
5323
- },
5525
+ props: makeVAvatarProps(),
5324
5526
 
5325
5527
  setup(props, _ref) {
5326
5528
  let {
5327
5529
  slots
5328
5530
  } = _ref;
5329
- return () => {
5330
- return createVNode(props.tag, {
5331
- "class": ['v-list-item-avatar', {
5332
- 'v-list-item-avatar--start': props.left,
5333
- 'v-list-item-avatar--end': props.right
5334
- }]
5335
- }, slots);
5336
- };
5531
+ return () => createVNode(VAvatar, mergeProps({
5532
+ "class": ['v-list-item-avatar', {
5533
+ 'v-list-item-avatar--start': props.start,
5534
+ 'v-list-item-avatar--end': props.end
5535
+ }]
5536
+ }, props), slots);
5337
5537
  }
5338
5538
 
5339
5539
  });
5340
5540
 
5341
5541
  const VListItemHeader = createSimpleFunctional('v-list-item-header');
5342
5542
 
5543
+ const VListItemIcon = defineComponent({
5544
+ name: 'VListItemIcon',
5545
+ props: makeVIconProps(),
5546
+
5547
+ setup(props, _ref) {
5548
+ let {
5549
+ slots
5550
+ } = _ref;
5551
+ return () => createVNode(VIcon, mergeProps({
5552
+ "class": ['v-list-item-icon', {
5553
+ 'v-list-item-icon--start': props.start,
5554
+ 'v-list-item-icon--end': props.end
5555
+ }]
5556
+ }, props), slots);
5557
+ }
5558
+
5559
+ });
5560
+
5343
5561
  const VListItemSubtitle = createSimpleFunctional('v-list-item-subtitle');
5344
5562
 
5345
5563
  const VListItemTitle = createSimpleFunctional('v-list-item-title');
@@ -5356,12 +5574,14 @@ const VListItem = genericComponent()({
5356
5574
  appendAvatar: String,
5357
5575
  appendIcon: String,
5358
5576
  disabled: Boolean,
5359
- link: Boolean,
5577
+ lines: String,
5578
+ nav: Boolean,
5360
5579
  prependAvatar: String,
5361
5580
  prependIcon: String,
5362
5581
  subtitle: String,
5363
5582
  title: String,
5364
5583
  value: null,
5584
+ link: Boolean,
5365
5585
  ...makeBorderProps(),
5366
5586
  ...makeDensityProps(),
5367
5587
  ...makeDimensionProps(),
@@ -5389,6 +5609,8 @@ const VListItem = genericComponent()({
5389
5609
  const {
5390
5610
  select,
5391
5611
  isSelected,
5612
+ isIndeterminate,
5613
+ isGroupActivator,
5392
5614
  root,
5393
5615
  parent
5394
5616
  } = useNestedItem(id, false);
@@ -5398,13 +5620,12 @@ const VListItem = genericComponent()({
5398
5620
 
5399
5621
  return props.active || ((_link$isExactActive = link.isExactActive) == null ? void 0 : _link$isExactActive.value) || isSelected.value;
5400
5622
  });
5623
+ const roundedProps = computed(() => props.rounded || props.nav);
5401
5624
  const variantProps = computed(() => {
5402
5625
  var _props$activeColor;
5403
5626
 
5404
- const activeColor = (_props$activeColor = props.activeColor) != null ? _props$activeColor : props.color;
5405
5627
  return {
5406
- color: isActive.value ? activeColor : props.color,
5407
- textColor: props.textColor,
5628
+ color: isActive.value ? (_props$activeColor = props.activeColor) != null ? _props$activeColor : props.color : props.color,
5408
5629
  variant: props.variant
5409
5630
  };
5410
5631
  });
@@ -5446,50 +5667,53 @@ const VListItem = genericComponent()({
5446
5667
  } = useElevation(props);
5447
5668
  const {
5448
5669
  roundedClasses
5449
- } = useRounded(props);
5670
+ } = useRounded(roundedProps);
5671
+ const lineClasses = computed(() => props.lines ? `v-list-item--${props.lines}-line` : undefined);
5450
5672
  const slotProps = computed(() => ({
5451
5673
  isActive: isActive.value,
5452
5674
  select,
5453
- isSelected: isSelected.value
5675
+ isSelected: isSelected.value,
5676
+ isIndeterminate: isIndeterminate.value
5454
5677
  }));
5455
5678
  useRender(() => {
5456
- var _slots$default;
5679
+ var _slots$prepend, _slots$default, _slots$append;
5457
5680
 
5458
5681
  const Tag = link.isLink.value ? 'a' : props.tag;
5682
+ const hasColor = !list || isSelected.value || isActive.value;
5459
5683
  const hasTitle = slots.title || props.title;
5460
5684
  const hasSubtitle = slots.subtitle || props.subtitle;
5461
5685
  const hasHeader = !!(hasTitle || hasSubtitle);
5462
5686
  const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
5463
5687
  const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon);
5464
- const isClickable = !props.disabled && (link.isClickable.value || props.link || props.value != null);
5688
+ const isClickable = !props.disabled && (props.link || link.isClickable.value || props.value != null && !!list);
5465
5689
  list == null ? void 0 : list.updateHasPrepend(hasPrepend);
5466
5690
  return withDirectives(createVNode(Tag, {
5467
5691
  "class": ['v-list-item', {
5468
5692
  'v-list-item--active': isActive.value,
5469
5693
  'v-list-item--disabled': props.disabled,
5470
5694
  'v-list-item--link': isClickable,
5695
+ 'v-list-item--nav': props.nav,
5471
5696
  'v-list-item--prepend': !hasPrepend && (list == null ? void 0 : list.hasPrepend.value),
5472
- [`${props.activeClass}`]: isActive.value && props.activeClass
5473
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value, variantClasses.value],
5474
- "style": [colorStyles.value, dimensionStyles.value],
5697
+ [`${props.activeClass}`]: isActive.value
5698
+ }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value],
5699
+ "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value],
5475
5700
  "href": link.href.value,
5476
5701
  "tabindex": isClickable ? 0 : undefined,
5477
5702
  "onClick": isClickable && (e => {
5478
5703
  var _link$navigate;
5479
5704
 
5705
+ if (isGroupActivator) return;
5480
5706
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
5481
- select(!isSelected.value, e);
5707
+ props.value != null && select(!isSelected.value, e);
5482
5708
  })
5483
5709
  }, {
5484
- default: () => [genOverlays(isClickable || isActive.value, 'v-list-item'), hasPrepend && (slots.prepend ? slots.prepend(slotProps.value) : createVNode(VListItemAvatar, {
5485
- "left": true
5486
- }, {
5487
- default: () => [createVNode(VAvatar, {
5488
- "density": props.density,
5489
- "icon": props.prependIcon,
5490
- "image": props.prependAvatar
5491
- }, null)]
5492
- })), hasHeader && createVNode(VListItemHeader, null, {
5710
+ default: () => [genOverlays(isClickable || isActive.value, 'v-list-item'), hasPrepend && createVNode(Fragment, null, [props.prependAvatar && createVNode(VListItemAvatar, {
5711
+ "image": props.prependAvatar,
5712
+ "start": true
5713
+ }, null), props.prependIcon && createVNode(VListItemIcon, {
5714
+ "icon": props.prependIcon,
5715
+ "start": true
5716
+ }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)]), hasHeader && createVNode(VListItemHeader, null, {
5493
5717
  default: () => [hasTitle && createVNode(VListItemTitle, null, {
5494
5718
  default: () => [slots.title ? slots.title({
5495
5719
  title: props.title
@@ -5499,15 +5723,13 @@ const VListItem = genericComponent()({
5499
5723
  subtitle: props.subtitle
5500
5724
  }) : props.subtitle]
5501
5725
  })]
5502
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value), hasAppend && (slots.append ? slots.append(slotProps.value) : createVNode(VListItemAvatar, {
5503
- "right": true
5504
- }, {
5505
- default: () => [createVNode(VAvatar, {
5506
- "density": props.density,
5507
- "icon": props.appendIcon,
5508
- "image": props.appendAvatar
5509
- }, null)]
5510
- }))]
5726
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value), hasAppend && createVNode(Fragment, null, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendAvatar && createVNode(VListItemAvatar, {
5727
+ "image": props.appendAvatar,
5728
+ "end": true
5729
+ }, null), props.appendIcon && createVNode(VListItemIcon, {
5730
+ "icon": props.appendIcon,
5731
+ "end": true
5732
+ }, null)])]
5511
5733
  }), [[resolveDirective("ripple"), isClickable]]);
5512
5734
  });
5513
5735
  }
@@ -5585,7 +5807,7 @@ const VListChildren = genericComponent()({
5585
5807
  } = _ref3;
5586
5808
  return slots.header ? slots.header({ ...itemProps,
5587
5809
  ...activatorProps
5588
- }) : createVNode(VListItem, mergeProps(itemProps, activatorProps), null);
5810
+ }) : createVNode(VListItem, mergeProps(itemProps, activatorProps), slots);
5589
5811
  },
5590
5812
  default: () => createVNode(VListChildren, {
5591
5813
  "items": children
@@ -5629,17 +5851,19 @@ const parseItems$1 = items => {
5629
5851
  const VList = genericComponent()({
5630
5852
  name: 'VList',
5631
5853
  props: {
5632
- color: String,
5854
+ activeColor: String,
5855
+ activeClass: String,
5856
+ bgColor: String,
5633
5857
  disabled: Boolean,
5634
5858
  lines: {
5635
- type: String,
5859
+ type: [Boolean, String],
5636
5860
  default: 'one'
5637
5861
  },
5638
5862
  nav: Boolean,
5639
5863
  items: Array,
5640
5864
  ...makeNestedProps({
5641
5865
  selectStrategy: 'single-leaf',
5642
- openStrategy: 'multiple'
5866
+ openStrategy: 'list'
5643
5867
  }),
5644
5868
  ...makeBorderProps(),
5645
5869
  ...makeDensityProps(),
@@ -5647,7 +5871,10 @@ const VList = genericComponent()({
5647
5871
  ...makeElevationProps(),
5648
5872
  ...makeRoundedProps(),
5649
5873
  ...makeTagProps(),
5650
- ...makeThemeProps()
5874
+ ...makeThemeProps(),
5875
+ ...makeVariantProps({
5876
+ variant: 'text'
5877
+ })
5651
5878
  },
5652
5879
  emits: {
5653
5880
  'update:selected': val => true,
@@ -5667,7 +5894,7 @@ const VList = genericComponent()({
5667
5894
  const {
5668
5895
  backgroundColorClasses,
5669
5896
  backgroundColorStyles
5670
- } = useBackgroundColor(toRef(props, 'color'));
5897
+ } = useBackgroundColor(toRef(props, 'bgColor'));
5671
5898
  const {
5672
5899
  borderClasses
5673
5900
  } = useBorder(props);
@@ -5687,25 +5914,37 @@ const VList = genericComponent()({
5687
5914
  open,
5688
5915
  select
5689
5916
  } = useNested(props);
5917
+ const lineClasses = computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
5918
+ const activeColor = toRef(props, 'activeColor');
5919
+ const color = toRef(props, 'color');
5690
5920
  createList();
5921
+ provideDefaults({
5922
+ VListGroup: {
5923
+ activeColor,
5924
+ color
5925
+ },
5926
+ VListItem: {
5927
+ activeClass: toRef(props, 'activeClass'),
5928
+ activeColor,
5929
+ color,
5930
+ density: toRef(props, 'density'),
5931
+ disabled: toRef(props, 'disabled'),
5932
+ lines: toRef(props, 'lines'),
5933
+ nav: toRef(props, 'nav'),
5934
+ variant: toRef(props, 'variant')
5935
+ }
5936
+ });
5691
5937
  useRender(() => {
5692
5938
  return createVNode(props.tag, {
5693
5939
  "class": ['v-list', {
5694
5940
  'v-list--disabled': props.disabled,
5695
- 'v-list--nav': props.nav,
5696
- [`v-list--${props.lines}-line`]: true
5697
- }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
5941
+ 'v-list--nav': props.nav
5942
+ }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value],
5698
5943
  "style": [backgroundColorStyles.value, dimensionStyles.value]
5699
5944
  }, {
5700
5945
  default: () => [createVNode(VListChildren, {
5701
5946
  "items": items.value
5702
- }, {
5703
- default: slots.default,
5704
- item: slots.item,
5705
- title: slots.title,
5706
- subtitle: slots.subtitle,
5707
- header: slots.header
5708
- })]
5947
+ }, slots)]
5709
5948
  });
5710
5949
  });
5711
5950
  return {
@@ -5718,11 +5957,35 @@ const VList = genericComponent()({
5718
5957
 
5719
5958
  const VListImg = createSimpleFunctional('v-list-img');
5720
5959
 
5960
+ const VListItemAction = defineComponent({
5961
+ name: 'VListItemAction',
5962
+ props: {
5963
+ start: Boolean,
5964
+ end: Boolean,
5965
+ ...makeTagProps()
5966
+ },
5967
+
5968
+ setup(props, _ref) {
5969
+ let {
5970
+ slots
5971
+ } = _ref;
5972
+ return () => {
5973
+ return createVNode(props.tag, {
5974
+ "class": ['v-list-item-action', {
5975
+ 'v-list-item-action--start': props.start,
5976
+ 'v-list-item-action--end': props.end
5977
+ }]
5978
+ }, slots);
5979
+ };
5980
+ }
5981
+
5982
+ });
5983
+
5721
5984
  const VListItemMedia = defineComponent({
5722
5985
  name: 'VListItemMedia',
5723
5986
  props: {
5724
- left: Boolean,
5725
- right: Boolean,
5987
+ start: Boolean,
5988
+ end: Boolean,
5726
5989
  ...makeTagProps()
5727
5990
  },
5728
5991
 
@@ -5733,8 +5996,8 @@ const VListItemMedia = defineComponent({
5733
5996
  return () => {
5734
5997
  return createVNode(props.tag, {
5735
5998
  "class": ['v-list-item-media', {
5736
- 'v-list-item-media--start': props.left,
5737
- 'v-list-item-media--end': props.right
5999
+ 'v-list-item-media--start': props.start,
6000
+ 'v-list-item-media--end': props.end
5738
6001
  }]
5739
6002
  }, slots);
5740
6003
  };
@@ -5777,6 +6040,8 @@ function useDelay(props, cb) {
5777
6040
  };
5778
6041
  }
5779
6042
 
6043
+ const VMenuSymbol = Symbol.for('vuetify:v-menu');
6044
+
5780
6045
  // Utilities
5781
6046
 
5782
6047
  const makeActivatorProps = propsFactory({
@@ -5794,9 +6059,14 @@ const makeActivatorProps = propsFactory({
5794
6059
  type: Boolean,
5795
6060
  default: undefined
5796
6061
  },
6062
+ closeOnContentClick: Boolean,
5797
6063
  ...makeDelayProps()
5798
6064
  });
5799
- function useActivator(props, isActive) {
6065
+ function useActivator(props, _ref) {
6066
+ let {
6067
+ isActive,
6068
+ isTop
6069
+ } = _ref;
5800
6070
  const activatorEl = ref();
5801
6071
  let isHovered = false;
5802
6072
  let isFocused = false;
@@ -5806,7 +6076,7 @@ function useActivator(props, isActive) {
5806
6076
  runOpenDelay,
5807
6077
  runCloseDelay
5808
6078
  } = useDelay(props, value => {
5809
- if (value === (props.openOnHover && isHovered || openOnFocus.value && isFocused)) {
6079
+ if (value === (props.openOnHover && isHovered || openOnFocus.value && isFocused) && !(props.openOnHover && isActive.value && !isTop.value)) {
5810
6080
  isActive.value = value;
5811
6081
  }
5812
6082
  });
@@ -5857,6 +6127,37 @@ function useActivator(props, isActive) {
5857
6127
 
5858
6128
  return events;
5859
6129
  });
6130
+ const contentEvents = computed(() => {
6131
+ const events = {};
6132
+
6133
+ if (props.openOnHover) {
6134
+ events.mouseenter = () => {
6135
+ isHovered = true;
6136
+ runOpenDelay();
6137
+ };
6138
+
6139
+ events.mouseleave = () => {
6140
+ isHovered = false;
6141
+ runCloseDelay();
6142
+ };
6143
+ }
6144
+
6145
+ if (props.closeOnContentClick) {
6146
+ const menu = inject(VMenuSymbol, null);
6147
+
6148
+ events.click = () => {
6149
+ isActive.value = false;
6150
+ menu == null ? void 0 : menu.closeParents();
6151
+ };
6152
+ }
6153
+
6154
+ return events;
6155
+ });
6156
+ watch(isTop, val => {
6157
+ if (val && props.openOnHover && !isHovered) {
6158
+ isActive.value = false;
6159
+ }
6160
+ });
5860
6161
  const activatorRef = ref();
5861
6162
  watchEffect(() => {
5862
6163
  if (!activatorRef.value) return;
@@ -5865,14 +6166,14 @@ function useActivator(props, isActive) {
5865
6166
  activatorEl.value = isComponentInstance(activator) ? activator.$el : activator;
5866
6167
  });
5867
6168
  });
6169
+ const vm = getCurrentInstance('useActivator');
5868
6170
  let scope;
5869
6171
  watch(() => !!props.activator, val => {
5870
6172
  if (val && IN_BROWSER) {
5871
6173
  scope = effectScope();
5872
6174
  scope.run(() => {
5873
- _useActivator(props, {
6175
+ _useActivator(props, vm, {
5874
6176
  activatorEl,
5875
- activatorRef,
5876
6177
  activatorEvents
5877
6178
  });
5878
6179
  });
@@ -5886,15 +6187,16 @@ function useActivator(props, isActive) {
5886
6187
  return {
5887
6188
  activatorEl,
5888
6189
  activatorRef,
5889
- activatorEvents
6190
+ activatorEvents,
6191
+ contentEvents
5890
6192
  };
5891
6193
  }
5892
6194
 
5893
- function _useActivator(props, _ref) {
6195
+ function _useActivator(props, vm, _ref2) {
5894
6196
  let {
5895
6197
  activatorEl,
5896
6198
  activatorEvents
5897
- } = _ref;
6199
+ } = _ref2;
5898
6200
  watch(() => props.activator, (val, oldVal) => {
5899
6201
  if (oldVal && val !== oldVal) {
5900
6202
  const activator = getActivator(oldVal);
@@ -5920,8 +6222,8 @@ function _useActivator(props, _ref) {
5920
6222
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
5921
6223
 
5922
6224
  if (!el) return;
5923
- Object.entries(activatorEvents.value).forEach(_ref2 => {
5924
- let [name, cb] = _ref2;
6225
+ Object.entries(activatorEvents.value).forEach(_ref3 => {
6226
+ let [name, cb] = _ref3;
5925
6227
  el.addEventListener(name, cb);
5926
6228
  });
5927
6229
  Object.keys(_props).forEach(k => {
@@ -5939,8 +6241,8 @@ function _useActivator(props, _ref) {
5939
6241
  let _props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.activatorProps;
5940
6242
 
5941
6243
  if (!el) return;
5942
- Object.entries(activatorEvents.value).forEach(_ref3 => {
5943
- let [name, cb] = _ref3;
6244
+ Object.entries(activatorEvents.value).forEach(_ref4 => {
6245
+ let [name, cb] = _ref4;
5944
6246
  el.removeEventListener(name, cb);
5945
6247
  });
5946
6248
  Object.keys(_props).forEach(k => {
@@ -5948,8 +6250,6 @@ function _useActivator(props, _ref) {
5948
6250
  });
5949
6251
  }
5950
6252
 
5951
- const vm = getCurrentInstance('useActivator');
5952
-
5953
6253
  function getActivator() {
5954
6254
  var _activator;
5955
6255
 
@@ -6186,6 +6486,8 @@ function connectedPositionStrategy(data, props, contentStyles) {
6186
6486
 
6187
6487
 
6188
6488
  function updatePosition() {
6489
+ var _props$maxWidth;
6490
+
6189
6491
  observe = false;
6190
6492
  requestAnimationFrame(() => {
6191
6493
  requestAnimationFrame(() => observe = true);
@@ -6226,13 +6528,15 @@ function connectedPositionStrategy(data, props, contentStyles) {
6226
6528
  el.scrollTo(...position);
6227
6529
  });
6228
6530
  }
6229
- const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height);
6531
+ const contentHeight = Math.min(configuredMaxHeight.value, contentBox.height); // Regard undefined maxWidth as maximally occupying whole remaining space by default
6532
+
6533
+ const maxFreeSpaceWidth = props.maxWidth === undefined ? Number.MAX_VALUE : parseInt((_props$maxWidth = props.maxWidth) != null ? _props$maxWidth : 0, 10);
6230
6534
  const viewportMargin = 12;
6231
6535
  const freeSpace = {
6232
6536
  top: targetBox.top - viewportMargin,
6233
6537
  bottom: viewportHeight - targetBox.bottom - viewportMargin,
6234
- left: targetBox.left - viewportMargin,
6235
- right: viewportWidth - targetBox.right - viewportMargin
6538
+ left: Math.min(targetBox.left - viewportMargin, maxFreeSpaceWidth),
6539
+ right: Math.min(viewportWidth - targetBox.right - viewportMargin, maxFreeSpaceWidth)
6236
6540
  };
6237
6541
  const fitsY = preferredAnchor.value.side === 'bottom' && contentHeight <= freeSpace.bottom || preferredAnchor.value.side === 'top' && contentHeight <= freeSpace.top;
6238
6542
  const anchor = fitsY ? preferredAnchor.value : preferredAnchor.value.side === 'bottom' && freeSpace.top > freeSpace.bottom || preferredAnchor.value.side === 'top' && freeSpace.bottom > freeSpace.top ? oppositeAnchor(preferredAnchor.value) : preferredAnchor.value;
@@ -6304,6 +6608,7 @@ function run() {
6304
6608
  // Utilities
6305
6609
 
6306
6610
  const scrollStrategies = {
6611
+ none: null,
6307
6612
  close: closeScrollStrategy,
6308
6613
  block: blockScrollStrategy,
6309
6614
  reposition: repositionScrollStrategy
@@ -6360,13 +6665,21 @@ function blockScrollStrategy(data) {
6360
6665
  }
6361
6666
 
6362
6667
  scrollElements.forEach((el, i) => {
6668
+ el.style.setProperty('--v-body-scroll-x', convertToUnit(-el.scrollLeft));
6669
+ el.style.setProperty('--v-body-scroll-y', convertToUnit(-el.scrollTop));
6363
6670
  el.style.setProperty('--v-scrollbar-offset', convertToUnit(scrollbarWidth));
6364
6671
  el.classList.add('v-overlay-scroll-blocked');
6365
6672
  });
6366
6673
  onScopeDispose(() => {
6367
6674
  scrollElements.forEach((el, i) => {
6675
+ const x = parseFloat(el.style.getPropertyValue('--v-body-scroll-x'));
6676
+ const y = parseFloat(el.style.getPropertyValue('--v-body-scroll-y'));
6677
+ el.style.removeProperty('--v-body-scroll-x');
6678
+ el.style.removeProperty('--v-body-scroll-y');
6368
6679
  el.style.removeProperty('--v-scrollbar-offset');
6369
6680
  el.classList.remove('v-overlay-scroll-blocked');
6681
+ el.scrollLeft = -x;
6682
+ el.scrollTop = -y;
6370
6683
  });
6371
6684
 
6372
6685
  if (scrollableParent) {
@@ -6496,39 +6809,14 @@ function useStack(isActive) {
6496
6809
  }, {
6497
6810
  immediate: true
6498
6811
  });
6499
- const isTop = computed(() => {
6500
- return toRaw(stack.value[stack.value.length - 1]) === vm;
6501
- });
6502
- return {
6503
- isTop
6504
- };
6505
- }
6506
-
6507
- // Utilities
6812
+ const isTop = ref(true);
6813
+ watchEffect(() => {
6814
+ const _isTop = toRaw(stack.value[stack.value.length - 1]) === vm;
6508
6815
 
6509
- const VuetifyOverlayKey = Symbol.for('vuetify:overlay');
6510
- const ROOT_ZINDEX = 2000;
6511
- function useOverlay(isActive) {
6512
- const {
6513
- zIndex,
6514
- overlays
6515
- } = inject(VuetifyOverlayKey, {
6516
- zIndex: ref(ROOT_ZINDEX),
6517
- overlays: ref([])
6816
+ setTimeout(() => isTop.value = _isTop);
6518
6817
  });
6519
- const id = getUid();
6520
- watch(isActive, value => {
6521
- if (value) {
6522
- overlays.value.push(id);
6523
- } else {
6524
- overlays.value = overlays.value.filter(x => x !== id);
6525
- }
6526
- }, {
6527
- immediate: true
6528
- });
6529
- const overlayZIndex = computed(() => zIndex.value + overlays.value.indexOf(id) + 1);
6530
6818
  return {
6531
- overlayZIndex
6819
+ isTop: readonly(isTop)
6532
6820
  };
6533
6821
  }
6534
6822
 
@@ -6702,17 +6990,21 @@ const VOverlay = genericComponent()({
6702
6990
  const scrimColor = useBackgroundColor(computed(() => {
6703
6991
  return typeof props.scrim === 'string' ? props.scrim : null;
6704
6992
  }));
6993
+ const {
6994
+ isTop
6995
+ } = useStack(isActive);
6705
6996
  const {
6706
6997
  activatorEl,
6707
6998
  activatorRef,
6708
- activatorEvents
6709
- } = useActivator(props, isActive);
6999
+ activatorEvents,
7000
+ contentEvents
7001
+ } = useActivator(props, {
7002
+ isActive,
7003
+ isTop
7004
+ });
6710
7005
  const {
6711
7006
  dimensionStyles
6712
7007
  } = useDimension(props);
6713
- const {
6714
- isTop
6715
- } = useStack(isActive);
6716
7008
  const root = ref();
6717
7009
  const contentEl = ref();
6718
7010
  const {
@@ -6793,9 +7085,6 @@ const VOverlay = genericComponent()({
6793
7085
  });
6794
7086
  }
6795
7087
 
6796
- const {
6797
- overlayZIndex
6798
- } = useOverlay(isActive);
6799
7088
  useRender(() => {
6800
7089
  var _slots$activator, _slots$default;
6801
7090
 
@@ -6815,8 +7104,7 @@ const VOverlay = genericComponent()({
6815
7104
  'v-overlay--contained': props.contained
6816
7105
  }, themeClasses.value, rtlClasses.value],
6817
7106
  "style": {
6818
- top: convertToUnit(top.value),
6819
- zIndex: overlayZIndex.value
7107
+ top: convertToUnit(top.value)
6820
7108
  },
6821
7109
  "ref": root
6822
7110
  }, attrs), [createVNode(Scrim, {
@@ -6832,11 +7120,11 @@ const VOverlay = genericComponent()({
6832
7120
  emit('afterLeave');
6833
7121
  }
6834
7122
  }, {
6835
- default: () => [withDirectives(createVNode("div", {
7123
+ default: () => [withDirectives(createVNode("div", mergeProps({
6836
7124
  "ref": contentEl,
6837
7125
  "class": ['v-overlay__content', props.contentClass],
6838
7126
  "style": [dimensionStyles.value, contentStyles.value]
6839
- }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
7127
+ }, toHandlers(contentEvents.value)), [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
6840
7128
  isActive
6841
7129
  })]), [[vShow, isActive.value], [resolveDirective("click-outside"), {
6842
7130
  handler: onClickOutside,
@@ -6849,7 +7137,9 @@ const VOverlay = genericComponent()({
6849
7137
  return {
6850
7138
  animateClick,
6851
7139
  contentEl,
6852
- activatorEl
7140
+ activatorEl,
7141
+ isTop,
7142
+ updatePosition
6853
7143
  };
6854
7144
  }
6855
7145
 
@@ -6860,15 +7150,7 @@ const VMenu = genericComponent()({
6860
7150
  inheritAttrs: false,
6861
7151
  props: {
6862
7152
  // TODO
6863
- // closeOnClick: {
6864
- // type: Boolean,
6865
- // default: true,
6866
- // },
6867
- // closeOnContentClick: {
6868
- // type: Boolean,
6869
- // default: true,
6870
- // },
6871
- disableKeys: Boolean,
7153
+ // disableKeys: Boolean,
6872
7154
  modelValue: Boolean,
6873
7155
  id: String,
6874
7156
  ...makeTransitionProps({
@@ -6889,26 +7171,62 @@ const VMenu = genericComponent()({
6889
7171
  const isActive = useProxiedModel(props, 'modelValue');
6890
7172
  const uid = getUid();
6891
7173
  const id = computed(() => props.id || `v-menu-${uid}`);
6892
- return () => {
6893
- return createVNode(VOverlay, mergeProps({
6894
- "modelValue": isActive.value,
6895
- "onUpdate:modelValue": $event => isActive.value = $event,
6896
- "class": ['v-menu'],
6897
- "transition": props.transition,
6898
- "absolute": true,
6899
- "positionStrategy": "connected",
6900
- "scrollStrategy": "reposition",
6901
- "scrim": false,
6902
- "activatorProps": {
6903
- 'aria-haspopup': 'menu',
6904
- 'aria-expanded': String(isActive.value),
6905
- 'aria-owns': id.value
6906
- }
6907
- }, attrs), {
6908
- default: slots.default,
6909
- activator: slots.activator
6910
- });
6911
- };
7174
+ const overlay = ref();
7175
+ const parent = inject(VMenuSymbol, null);
7176
+ let openChildren = 0;
7177
+ provide(VMenuSymbol, {
7178
+ register() {
7179
+ ++openChildren;
7180
+ },
7181
+
7182
+ unregister() {
7183
+ --openChildren;
7184
+ },
7185
+
7186
+ closeParents() {
7187
+ setTimeout(() => {
7188
+ if (!openChildren) {
7189
+ isActive.value = false;
7190
+ parent == null ? void 0 : parent.closeParents();
7191
+ }
7192
+ }, 40);
7193
+ }
7194
+
7195
+ });
7196
+ watch(isActive, val => {
7197
+ val ? parent == null ? void 0 : parent.register() : parent == null ? void 0 : parent.unregister();
7198
+ });
7199
+
7200
+ function onClickOutside() {
7201
+ parent == null ? void 0 : parent.closeParents();
7202
+ }
7203
+
7204
+ useRender(() => createVNode(VOverlay, mergeProps({
7205
+ "ref": overlay,
7206
+ "modelValue": isActive.value,
7207
+ "onUpdate:modelValue": $event => isActive.value = $event,
7208
+ "class": ['v-menu'],
7209
+ "transition": props.transition,
7210
+ "absolute": true,
7211
+ "closeOnContentClick": true,
7212
+ "positionStrategy": "connected",
7213
+ "scrollStrategy": "reposition",
7214
+ "scrim": false,
7215
+ "openDelay": "300",
7216
+ "closeDelay": "250",
7217
+ "activatorProps": {
7218
+ 'aria-haspopup': 'menu',
7219
+ 'aria-expanded': String(isActive.value),
7220
+ 'aria-owns': id.value
7221
+ },
7222
+ "onClick:outside": onClickOutside
7223
+ }, attrs), {
7224
+ default: slots.default,
7225
+ activator: slots.activator
7226
+ }));
7227
+ return useForwardRef({
7228
+ id
7229
+ }, overlay);
6912
7230
  }
6913
7231
 
6914
7232
  });
@@ -6982,7 +7300,6 @@ function createForm(props) {
6982
7300
  const results = [];
6983
7301
  let valid = true;
6984
7302
  errorMessages.value = [];
6985
- model.value = null;
6986
7303
  isValidating.value = true;
6987
7304
 
6988
7305
  for (const item of items.value) {
@@ -7000,7 +7317,6 @@ function createForm(props) {
7000
7317
  }
7001
7318
 
7002
7319
  errorMessages.value = results;
7003
- model.value = valid;
7004
7320
  isValidating.value = false;
7005
7321
  return {
7006
7322
  valid,
@@ -7019,8 +7335,21 @@ function createForm(props) {
7019
7335
  model.value = null;
7020
7336
  }
7021
7337
 
7338
+ watch(items, () => {
7339
+ let valid = null;
7340
+
7341
+ if (items.value.some(item => item.isValid === false)) {
7342
+ valid = false;
7343
+ } else if (items.value.every(item => item.isValid === true)) {
7344
+ valid = true;
7345
+ }
7346
+
7347
+ model.value = valid;
7348
+ }, {
7349
+ deep: true
7350
+ });
7022
7351
  provide(FormKey, {
7023
- register: (id, validate, reset, resetValidation) => {
7352
+ register: (id, validate, reset, resetValidation, isValid) => {
7024
7353
  if (items.value.some(item => item.id === id)) {
7025
7354
  consoleWarn(`Duplicate input name "${id}"`);
7026
7355
  }
@@ -7029,7 +7358,9 @@ function createForm(props) {
7029
7358
  id,
7030
7359
  validate,
7031
7360
  reset,
7032
- resetValidation
7361
+ resetValidation,
7362
+ isValid: isValid // TODO: Better way to type this unwrapping?
7363
+
7033
7364
  });
7034
7365
  },
7035
7366
  unregister: id => {
@@ -7084,7 +7415,7 @@ function useValidation(props) {
7084
7415
  const form = useForm();
7085
7416
  const internalErrorMessages = ref([]);
7086
7417
  const isPristine = ref(true);
7087
- const isDirty = computed(() => wrapInArray(model.value || []).length > 0);
7418
+ const isDirty = computed(() => wrapInArray(model.value === '' ? null : model.value).length > 0);
7088
7419
  const isDisabled = computed(() => !!(props.disabled || form != null && form.isDisabled.value));
7089
7420
  const isReadonly = computed(() => !!(props.readonly || form != null && form.isReadonly.value));
7090
7421
  const errorMessages = computed(() => {
@@ -7109,11 +7440,14 @@ function useValidation(props) {
7109
7440
  return (_props$name = props.name) != null ? _props$name : getUid();
7110
7441
  });
7111
7442
  onBeforeMount(() => {
7112
- form == null ? void 0 : form.register(uid.value, validate, reset, resetValidation);
7443
+ form == null ? void 0 : form.register(uid.value, validate, reset, resetValidation, isValid);
7113
7444
  });
7114
7445
  onBeforeUnmount(() => {
7115
7446
  form == null ? void 0 : form.unregister(uid.value);
7116
7447
  });
7448
+ watch(model, () => {
7449
+ if (model.value != null) validate();
7450
+ });
7117
7451
 
7118
7452
  function reset() {
7119
7453
  resetValidation();
@@ -7190,13 +7524,12 @@ const VInput = genericComponent()({
7190
7524
  props: { ...makeVInputProps()
7191
7525
  },
7192
7526
  emits: {
7193
- 'click:prepend': e => true,
7194
- 'click:append': e => true,
7195
7527
  'update:modelValue': val => true
7196
7528
  },
7197
7529
 
7198
7530
  setup(props, _ref) {
7199
7531
  let {
7532
+ attrs,
7200
7533
  slots,
7201
7534
  emit
7202
7535
  } = _ref;
@@ -7242,14 +7575,14 @@ const VInput = genericComponent()({
7242
7575
  }, [hasPrepend && createVNode("div", {
7243
7576
  "class": "v-input__prepend"
7244
7577
  }, [slots == null ? void 0 : (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value), props.prependIcon && createVNode(VIcon, {
7245
- "onClick": e => emit('click:prepend', e),
7578
+ "onClick": attrs['onClick:prepend'],
7246
7579
  "icon": props.prependIcon
7247
7580
  }, null)]), slots.default && createVNode("div", {
7248
7581
  "class": "v-input__control"
7249
7582
  }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode("div", {
7250
7583
  "class": "v-input__append"
7251
7584
  }, [slots == null ? void 0 : (_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && createVNode(VIcon, {
7252
- "onClick": e => emit('click:append', e),
7585
+ "onClick": attrs['onClick:append'],
7253
7586
  "icon": props.appendIcon
7254
7587
  }, null)]), hasDetails && createVNode("div", {
7255
7588
  "class": "v-input__details"
@@ -7599,8 +7932,6 @@ const VField = genericComponent()({
7599
7932
  },
7600
7933
  emits: {
7601
7934
  'click:clear': e => true,
7602
- 'click:prepend-inner': e => true,
7603
- 'click:append-inner': e => true,
7604
7935
  'click:control': e => true,
7605
7936
  'update:focused': focused => true,
7606
7937
  'update:modelValue': val => true
@@ -7715,6 +8046,7 @@ const VField = genericComponent()({
7715
8046
  'v-field--prepended': hasPrepend,
7716
8047
  'v-field--reverse': props.reverse,
7717
8048
  'v-field--single-line': props.singleLine,
8049
+ 'v-field--has-label': !!label,
7718
8050
  [`v-field--variant-${props.variant}`]: true
7719
8051
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value],
7720
8052
  "style": [backgroundColorStyles.value, textColorStyles.value],
@@ -7730,7 +8062,7 @@ const VField = genericComponent()({
7730
8062
  }), hasPrepend && createVNode("div", {
7731
8063
  "class": "v-field__prepend-inner"
7732
8064
  }, [props.prependInnerIcon && createVNode(VIcon, {
7733
- "onClick": e => emit('click:prepend-inner', e),
8065
+ "onClick": attrs['onClick:prependInner'],
7734
8066
  "icon": props.prependInnerIcon
7735
8067
  }, null), slots == null ? void 0 : (_slots$prependInner = slots.prependInner) == null ? void 0 : _slots$prependInner.call(slots, slotProps.value)]), createVNode("div", {
7736
8068
  "class": "v-field__field"
@@ -7762,7 +8094,7 @@ const VField = genericComponent()({
7762
8094
  }), hasAppend && createVNode("div", {
7763
8095
  "class": "v-field__append-inner"
7764
8096
  }, [slots == null ? void 0 : (_slots$appendInner = slots.appendInner) == null ? void 0 : _slots$appendInner.call(slots, slotProps.value), props.appendInnerIcon && createVNode(VIcon, {
7765
- "onClick": e => emit('click:append-inner', e),
8097
+ "onClick": attrs['onClick:appendInner'],
7766
8098
  "icon": props.appendInnerIcon
7767
8099
  }, null)]), createVNode("div", {
7768
8100
  "class": ['v-field__outline', textColorClasses.value]
@@ -7862,13 +8194,9 @@ const VTextField = genericComponent()({
7862
8194
  ...makeVFieldProps()
7863
8195
  },
7864
8196
  emits: {
7865
- 'click:append': e => true,
7866
- 'click:append-inner': e => true,
7867
8197
  'click:clear': e => true,
7868
8198
  'click:control': e => true,
7869
8199
  'click:input': e => true,
7870
- 'click:prepend': e => true,
7871
- 'click:prepend-inner': e => true,
7872
8200
  'update:modelValue': val => true
7873
8201
  },
7874
8202
 
@@ -7943,13 +8271,12 @@ const VTextField = genericComponent()({
7943
8271
  "modelValue": model.value,
7944
8272
  "onUpdate:modelValue": $event => model.value = $event,
7945
8273
  "class": ['v-text-field', {
7946
- 'v-text-field--persistent-placeholder': props.persistentPlaceholder,
7947
8274
  'v-text-field--prefixed': props.prefix,
7948
8275
  'v-text-field--suffixed': props.suffix,
7949
8276
  'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
7950
8277
  }],
7951
- "onClick:prepend": e => emit('click:prepend', e),
7952
- "onClick:append": e => emit('click:append', e)
8278
+ "onClick:prepend": attrs['onClick:prepend'],
8279
+ "onClick:append": attrs['onClick:append']
7953
8280
  }, rootAttrs, inputProps, {
7954
8281
  "messages": messages.value
7955
8282
  }), { ...slots,
@@ -7968,8 +8295,8 @@ const VTextField = genericComponent()({
7968
8295
  },
7969
8296
  "onClick:control": onControlClick,
7970
8297
  "onClick:clear": onClear,
7971
- "onClick:prependInner": e => emit('click:prepend-inner', e),
7972
- "onClick:appendInner": e => emit('click:append-inner', e),
8298
+ "onClick:prependInner": attrs['onClick:prependInner'],
8299
+ "onClick:appendInner": attrs['onClick:prependInner'],
7973
8300
  "role": "textbox"
7974
8301
  }, fieldProps, {
7975
8302
  "active": isActive.value || isDirty.value,
@@ -7997,6 +8324,7 @@ const VTextField = genericComponent()({
7997
8324
  "autofocus": props.autofocus,
7998
8325
  "readonly": isReadonly.value,
7999
8326
  "disabled": isDisabled.value,
8327
+ "name": props.name,
8000
8328
  "placeholder": props.placeholder,
8001
8329
  "size": 1,
8002
8330
  "type": props.type,
@@ -8024,6 +8352,60 @@ const VTextField = genericComponent()({
8024
8352
 
8025
8353
  });
8026
8354
 
8355
+ // Utilities
8356
+
8357
+ // Composables
8358
+ const makeItemsProps = propsFactory({
8359
+ items: {
8360
+ type: Array,
8361
+ default: () => []
8362
+ },
8363
+ itemTitle: {
8364
+ type: [String, Array, Function],
8365
+ default: 'title'
8366
+ },
8367
+ itemValue: {
8368
+ type: [String, Array, Function],
8369
+ default: 'value'
8370
+ },
8371
+ itemChildren: {
8372
+ type: String,
8373
+ default: 'children'
8374
+ },
8375
+ itemProps: {
8376
+ type: Function,
8377
+ default: item => ({})
8378
+ }
8379
+ }, 'item');
8380
+ function transformItem(props, item) {
8381
+ var _props$itemProps;
8382
+
8383
+ const title = getPropertyFromItem(item, props.itemTitle, item);
8384
+ const value = getPropertyFromItem(item, props.itemValue, title);
8385
+ const children = getObjectValueByPath(item, props.itemChildren);
8386
+ return {
8387
+ title,
8388
+ value,
8389
+ children: Array.isArray(children) ? transformItems(props, children) : undefined,
8390
+ ...((_props$itemProps = props.itemProps) == null ? void 0 : _props$itemProps.call(props, item))
8391
+ };
8392
+ }
8393
+ function transformItems(props, items) {
8394
+ const array = [];
8395
+
8396
+ for (const item of items) {
8397
+ array.push(transformItem(props, item));
8398
+ }
8399
+
8400
+ return array;
8401
+ }
8402
+ function useItems(props) {
8403
+ const items = computed(() => transformItems(props, props.items));
8404
+ return {
8405
+ items
8406
+ };
8407
+ }
8408
+
8027
8409
  const LocaleAdapterSymbol = Symbol.for('vuetify:locale-adapter');
8028
8410
  const VuetifyLocaleSymbol = Symbol.for('vuetify:locale');
8029
8411
  function provideLocale(props) {
@@ -8158,24 +8540,12 @@ function createDefaultLocaleAdapter(options) {
8158
8540
  };
8159
8541
  }
8160
8542
 
8161
- function genItem(item) {
8162
- var _ref;
8163
-
8164
- return {
8165
- title: String((_ref = typeof item === 'object' ? item.title : item) != null ? _ref : ''),
8166
- value: typeof item === 'object' ? item.value : item
8167
- };
8168
- }
8169
8543
  const makeSelectProps = propsFactory({
8170
8544
  chips: Boolean,
8171
8545
  closableChips: Boolean,
8172
8546
  eager: Boolean,
8173
8547
  hideNoData: Boolean,
8174
8548
  hideSelected: Boolean,
8175
- items: {
8176
- type: Array,
8177
- default: () => []
8178
- },
8179
8549
  menuIcon: {
8180
8550
  type: String,
8181
8551
  default: '$dropdown'
@@ -8189,7 +8559,8 @@ const makeSelectProps = propsFactory({
8189
8559
  type: String,
8190
8560
  default: '$vuetify.noDataText'
8191
8561
  },
8192
- openOnClear: Boolean
8562
+ openOnClear: Boolean,
8563
+ ...makeItemsProps()
8193
8564
  }, 'select');
8194
8565
  const VSelect = genericComponent()({
8195
8566
  name: 'VSelect',
@@ -8202,36 +8573,21 @@ const VSelect = genericComponent()({
8202
8573
  'update:modelValue': val => true
8203
8574
  },
8204
8575
 
8205
- setup(props, _ref2) {
8576
+ setup(props, _ref) {
8206
8577
  let {
8207
8578
  slots
8208
- } = _ref2;
8579
+ } = _ref;
8209
8580
  const {
8210
8581
  t
8211
8582
  } = useLocale();
8212
8583
  const vTextFieldRef = ref();
8213
8584
  const activator = ref();
8214
8585
  const menu = ref(false);
8215
- const items = computed(() => props.items.map(genItem));
8586
+ const {
8587
+ items
8588
+ } = useItems(props);
8216
8589
  const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v), v => props.multiple ? v : v[0]);
8217
- const selections = computed(() => {
8218
- const array = [];
8219
- let index = 0;
8220
-
8221
- for (const unwrapped of model.value) {
8222
- const item = genItem(unwrapped);
8223
- const found = array.find(selection => selection.value === item.value);
8224
-
8225
- if (found == null) {
8226
- array.push({ ...item,
8227
- index
8228
- });
8229
- index++;
8230
- }
8231
- }
8232
-
8233
- return array;
8234
- });
8590
+ const selections = computed(() => items.value.filter(item => model.value.includes(item.value)));
8235
8591
  const selected = computed(() => selections.value.map(selection => selection.value));
8236
8592
 
8237
8593
  function onClear(e) {
@@ -8259,12 +8615,14 @@ const VSelect = genericComponent()({
8259
8615
 
8260
8616
  function select(item) {
8261
8617
  if (props.multiple) {
8262
- const index = selections.value.findIndex(selection => selection.value === item.value);
8618
+ const index = selected.value.findIndex(selection => selection === item.value);
8263
8619
 
8264
8620
  if (index === -1) {
8265
- model.value.push(item.value);
8621
+ model.value = [...model.value, item.value];
8266
8622
  } else {
8267
- model.value = selected.value.filter(selection => selection !== item.value);
8623
+ const value = [...model.value];
8624
+ value.splice(index, 1);
8625
+ model.value = value;
8268
8626
  }
8269
8627
  } else {
8270
8628
  model.value = [item.value];
@@ -8293,62 +8651,64 @@ const VSelect = genericComponent()({
8293
8651
  "modelValue": model.value.join(', '),
8294
8652
  "onKeydown": onKeydown
8295
8653
  }, { ...slots,
8296
- default: () => createVNode(Fragment, null, [activator.value && createVNode(VMenu, {
8297
- "modelValue": menu.value,
8298
- "onUpdate:modelValue": $event => menu.value = $event,
8299
- "activator": activator.value,
8300
- "contentClass": "v-select__content",
8301
- "eager": props.eager,
8302
- "openOnClick": false,
8303
- "transition": props.transition
8304
- }, {
8305
- default: () => [createVNode(VList, {
8306
- "selected": selected.value,
8307
- "selectStrategy": props.multiple ? 'independent' : 'single-independent'
8654
+ default: () => {
8655
+ var _slots$noData, _slots$noData2;
8656
+
8657
+ return createVNode(Fragment, null, [activator.value && createVNode(VMenu, {
8658
+ "modelValue": menu.value,
8659
+ "onUpdate:modelValue": $event => menu.value = $event,
8660
+ "activator": activator.value,
8661
+ "contentClass": "v-select__content",
8662
+ "eager": props.eager,
8663
+ "openOnClick": false,
8664
+ "transition": props.transition
8308
8665
  }, {
8309
- default: () => [!items.value.length && !props.hideNoData && createVNode(VListItem, {
8310
- "title": t(props.noDataText)
8311
- }, null), items.value.map(item => createVNode(VListItem, {
8312
- "title": item.title,
8313
- "value": item.value,
8314
- "onMousedown": e => e.preventDefault(),
8315
- "onClick": () => select(item)
8316
- }, null))]
8317
- })]
8318
- }), selections.value.map((selection, index) => {
8319
- function onChipClose(e) {
8320
- e.stopPropagation();
8321
- e.preventDefault();
8322
- select(selection);
8323
- }
8666
+ default: () => [createVNode(VList, {
8667
+ "selected": selected.value,
8668
+ "selectStrategy": props.multiple ? 'independent' : 'single-independent'
8669
+ }, {
8670
+ default: () => [!items.value.length && !props.hideNoData && ((_slots$noData = (_slots$noData2 = slots['no-data']) == null ? void 0 : _slots$noData2.call(slots)) != null ? _slots$noData : createVNode(VListItem, {
8671
+ "title": t(props.noDataText)
8672
+ }, null)), items.value.map(item => createVNode(VListItem, mergeProps(item, {
8673
+ "onMousedown": e => e.preventDefault(),
8674
+ "onClick": () => select(item)
8675
+ }), null))]
8676
+ })]
8677
+ }), selections.value.map((selection, index) => {
8678
+ function onChipClose(e) {
8679
+ e.stopPropagation();
8680
+ e.preventDefault();
8681
+ select(selection);
8682
+ }
8324
8683
 
8325
- const slotProps = {
8326
- 'onClick:close': onChipClose,
8327
- modelValue: true
8328
- };
8329
- return createVNode("div", {
8330
- "class": "v-select__selection"
8331
- }, [hasChips && createVNode(VDefaultsProvider, {
8332
- "defaults": {
8333
- VChip: {
8334
- closable: props.closableChips,
8335
- size: 'small',
8336
- text: selection.title
8684
+ const slotProps = {
8685
+ 'onClick:close': onChipClose,
8686
+ modelValue: true
8687
+ };
8688
+ return createVNode("div", {
8689
+ "class": "v-select__selection"
8690
+ }, [hasChips && createVNode(VDefaultsProvider, {
8691
+ "defaults": {
8692
+ VChip: {
8693
+ closable: props.closableChips,
8694
+ size: 'small',
8695
+ text: selection.title
8696
+ }
8337
8697
  }
8338
- }
8339
- }, {
8340
- default: () => [slots.chip ? slots.chip({
8341
- props: slotProps,
8698
+ }, {
8699
+ default: () => [slots.chip ? slots.chip({
8700
+ props: slotProps,
8701
+ selection
8702
+ }) : createVNode(VChip, slotProps, null)]
8703
+ }), !hasChips && (slots.selection ? slots.selection({
8342
8704
  selection
8343
- }) : createVNode(VChip, slotProps, null)]
8344
- }), !hasChips && (slots.selection ? slots.selection({
8345
- selection
8346
- }) : createVNode("span", {
8347
- "class": "v-select__selection-text"
8348
- }, [selection.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
8349
- "class": "v-select__selection-comma"
8350
- }, [createTextVNode(",")])]))]);
8351
- })])
8705
+ }) : createVNode("span", {
8706
+ "class": "v-select__selection-text"
8707
+ }, [selection.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
8708
+ "class": "v-select__selection-comma"
8709
+ }, [createTextVNode(",")])]))]);
8710
+ })]);
8711
+ }
8352
8712
  });
8353
8713
  });
8354
8714
  return useForwardRef({}, vTextFieldRef);
@@ -8481,7 +8841,9 @@ const VAutocomplete = genericComponent()({
8481
8841
  const isFocused = ref(false);
8482
8842
  const isPristine = ref(true);
8483
8843
  const menu = ref(false);
8484
- const items = computed(() => props.items.map(genItem));
8844
+ const {
8845
+ items
8846
+ } = useItems(props);
8485
8847
  const search = useProxiedModel(props, 'search', '');
8486
8848
  const model = useProxiedModel(props, 'modelValue', [], v => wrapInArray(v || []), v => props.multiple ? v : v[0]);
8487
8849
  const {
@@ -8492,7 +8854,7 @@ const VAutocomplete = genericComponent()({
8492
8854
  let index = 0;
8493
8855
 
8494
8856
  for (const unwrapped of model.value) {
8495
- const item = genItem(unwrapped);
8857
+ const item = transformItem(props, unwrapped);
8496
8858
  const found = array.find(selection => selection.value === item.value);
8497
8859
 
8498
8860
  if (found == null) {
@@ -8536,6 +8898,10 @@ const VAutocomplete = genericComponent()({
8536
8898
  }
8537
8899
  }
8538
8900
 
8901
+ function onInput(e) {
8902
+ search.value = e.target.value;
8903
+ }
8904
+
8539
8905
  function onAfterLeave() {
8540
8906
  if (isFocused.value) isPristine.value = true;
8541
8907
  }
@@ -8544,12 +8910,14 @@ const VAutocomplete = genericComponent()({
8544
8910
 
8545
8911
  function select(item) {
8546
8912
  if (props.multiple) {
8547
- const index = selections.value.findIndex(selection => selection.value === item.value);
8913
+ const index = selected.value.findIndex(selection => selection === item.value);
8548
8914
 
8549
8915
  if (index === -1) {
8550
- model.value.push(item.value);
8916
+ model.value = [...model.value, item.value];
8551
8917
  } else {
8552
- model.value = selected.value.filter(selection => selection !== item.value);
8918
+ const value = [...model.value];
8919
+ value.splice(index, 1);
8920
+ model.value = value;
8553
8921
  }
8554
8922
  } else {
8555
8923
  model.value = [item.value];
@@ -8587,7 +8955,7 @@ const VAutocomplete = genericComponent()({
8587
8955
  return createVNode(VTextField, {
8588
8956
  "ref": vTextFieldRef,
8589
8957
  "modelValue": search.value,
8590
- "onUpdate:modelValue": $event => search.value = $event,
8958
+ "onInput": onInput,
8591
8959
  "class": ['v-autocomplete', {
8592
8960
  'v-autocomplete--active-menu': menu.value,
8593
8961
  'v-autocomplete--chips': !!props.chips,
@@ -8602,74 +8970,78 @@ const VAutocomplete = genericComponent()({
8602
8970
  "onBlur": () => isFocused.value = false,
8603
8971
  "onKeydown": onKeydown
8604
8972
  }, { ...slots,
8605
- default: () => createVNode(Fragment, null, [activator.value && createVNode(VMenu, {
8606
- "modelValue": menu.value,
8607
- "onUpdate:modelValue": $event => menu.value = $event,
8608
- "activator": activator.value,
8609
- "contentClass": "v-autocomplete__content",
8610
- "eager": props.eager,
8611
- "openOnClick": false,
8612
- "transition": props.transition,
8613
- "onAfterLeave": onAfterLeave
8614
- }, {
8615
- default: () => [createVNode(VList, {
8616
- "selected": selected.value,
8617
- "selectStrategy": props.multiple ? 'independent' : 'single-independent'
8973
+ default: () => {
8974
+ var _slots$noData, _slots$noData2;
8975
+
8976
+ return createVNode(Fragment, null, [activator.value && createVNode(VMenu, {
8977
+ "modelValue": menu.value,
8978
+ "onUpdate:modelValue": $event => menu.value = $event,
8979
+ "activator": activator.value,
8980
+ "contentClass": "v-autocomplete__content",
8981
+ "eager": props.eager,
8982
+ "openOnClick": false,
8983
+ "transition": props.transition,
8984
+ "onAfterLeave": onAfterLeave
8618
8985
  }, {
8619
- default: () => [!filteredItems.value.length && !props.hideNoData && createVNode(VListItem, {
8620
- "title": t(props.noDataText)
8621
- }, null), filteredItems.value.map(_ref2 => {
8622
- let {
8623
- item,
8624
- matches
8625
- } = _ref2;
8626
- return createVNode(VListItem, {
8627
- "value": item.value,
8628
- "onMousedown": e => e.preventDefault(),
8629
- "onClick": () => select(item)
8630
- }, {
8631
- title: () => {
8632
- var _search$value$length, _search$value;
8633
-
8634
- return isPristine.value ? item.title : highlightResult$1(item.title, matches.title, (_search$value$length = (_search$value = search.value) == null ? void 0 : _search$value.length) != null ? _search$value$length : 0);
8635
- }
8636
- });
8986
+ default: () => [createVNode(VList, {
8987
+ "selected": selected.value,
8988
+ "selectStrategy": props.multiple ? 'independent' : 'single-independent'
8989
+ }, {
8990
+ default: () => [!filteredItems.value.length && !props.hideNoData && ((_slots$noData = (_slots$noData2 = slots['no-data']) == null ? void 0 : _slots$noData2.call(slots)) != null ? _slots$noData : createVNode(VListItem, {
8991
+ "title": t(props.noDataText)
8992
+ }, null)), filteredItems.value.map(_ref2 => {
8993
+ let {
8994
+ item,
8995
+ matches
8996
+ } = _ref2;
8997
+ return createVNode(VListItem, {
8998
+ "value": item.value,
8999
+ "onMousedown": e => e.preventDefault(),
9000
+ "onClick": () => select(item)
9001
+ }, {
9002
+ title: () => {
9003
+ var _search$value$length, _search$value;
9004
+
9005
+ return isPristine.value ? item.title : highlightResult$1(item.title, matches.title, (_search$value$length = (_search$value = search.value) == null ? void 0 : _search$value.length) != null ? _search$value$length : 0);
9006
+ }
9007
+ });
9008
+ })]
8637
9009
  })]
8638
- })]
8639
- }), selections.value.map((selection, index) => {
8640
- function onChipClose(e) {
8641
- e.stopPropagation();
8642
- e.preventDefault();
8643
- select(selection);
8644
- }
9010
+ }), selections.value.map((selection, index) => {
9011
+ function onChipClose(e) {
9012
+ e.stopPropagation();
9013
+ e.preventDefault();
9014
+ select(selection);
9015
+ }
8645
9016
 
8646
- const slotProps = {
8647
- 'onClick:close': onChipClose,
8648
- modelValue: true
8649
- };
8650
- return createVNode("div", {
8651
- "class": "v-autocomplete__selection"
8652
- }, [hasChips && createVNode(VDefaultsProvider, {
8653
- "defaults": {
8654
- VChip: {
8655
- closable: props.closableChips,
8656
- size: 'small',
8657
- text: selection.title
9017
+ const slotProps = {
9018
+ 'onClick:close': onChipClose,
9019
+ modelValue: true
9020
+ };
9021
+ return createVNode("div", {
9022
+ "class": "v-autocomplete__selection"
9023
+ }, [hasChips && createVNode(VDefaultsProvider, {
9024
+ "defaults": {
9025
+ VChip: {
9026
+ closable: props.closableChips,
9027
+ size: 'small',
9028
+ text: selection.title
9029
+ }
8658
9030
  }
8659
- }
8660
- }, {
8661
- default: () => [slots.chip ? slots.chip({
8662
- props: slotProps,
9031
+ }, {
9032
+ default: () => [slots.chip ? slots.chip({
9033
+ props: slotProps,
9034
+ selection
9035
+ }) : createVNode(VChip, slotProps, null)]
9036
+ }), !hasChips && (slots.selection ? slots.selection({
8663
9037
  selection
8664
- }) : createVNode(VChip, slotProps, null)]
8665
- }), !hasChips && (slots.selection ? slots.selection({
8666
- selection
8667
- }) : createVNode("span", {
8668
- "class": "v-autocomplete__selection-text"
8669
- }, [selection.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
8670
- "class": "v-autocomplete__selection-comma"
8671
- }, [createTextVNode(",")])]))]);
8672
- })])
9038
+ }) : createVNode("span", {
9039
+ "class": "v-autocomplete__selection-text"
9040
+ }, [selection.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
9041
+ "class": "v-autocomplete__selection-comma"
9042
+ }, [createTextVNode(",")])]))]);
9043
+ })]);
9044
+ }
8673
9045
  });
8674
9046
  });
8675
9047
  return useForwardRef({
@@ -8804,7 +9176,65 @@ const VBadge = defineComponent({
8804
9176
 
8805
9177
  });
8806
9178
 
8807
- const VBannerActions = createSimpleFunctional('v-banner-actions');
9179
+ const VBannerActions = defineComponent({
9180
+ name: 'VBannerActions',
9181
+ props: {
9182
+ color: String,
9183
+ density: String
9184
+ },
9185
+
9186
+ setup(props, _ref) {
9187
+ let {
9188
+ slots
9189
+ } = _ref;
9190
+ provideDefaults({
9191
+ VBtn: {
9192
+ color: props.color,
9193
+ density: props.density,
9194
+ variant: 'text'
9195
+ }
9196
+ });
9197
+ useRender(() => {
9198
+ var _slots$default;
9199
+
9200
+ return createVNode("div", {
9201
+ "class": "v-banner-actions"
9202
+ }, [slots == null ? void 0 : (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]);
9203
+ });
9204
+ return {};
9205
+ }
9206
+
9207
+ });
9208
+
9209
+ const VBannerAvatar = defineComponent({
9210
+ name: 'VBannerAvatar',
9211
+ props: makeVAvatarProps(),
9212
+
9213
+ setup(props, _ref) {
9214
+ let {
9215
+ slots
9216
+ } = _ref;
9217
+ return () => createVNode(VAvatar, mergeProps({
9218
+ "class": "v-banner-avatar"
9219
+ }, props), slots);
9220
+ }
9221
+
9222
+ });
9223
+
9224
+ const VBannerIcon = defineComponent({
9225
+ name: 'VBannerIcon',
9226
+ props: makeVAvatarProps(),
9227
+
9228
+ setup(props, _ref) {
9229
+ let {
9230
+ slots
9231
+ } = _ref;
9232
+ return () => createVNode(VAvatar, mergeProps({
9233
+ "class": "v-banner-icon"
9234
+ }, props), slots);
9235
+ }
9236
+
9237
+ });
8808
9238
 
8809
9239
  const VBannerText = createSimpleFunctional('v-banner-text');
8810
9240
 
@@ -8944,6 +9374,7 @@ const VBanner = defineComponent({
8944
9374
  color: String,
8945
9375
  icon: String,
8946
9376
  lines: String,
9377
+ stacked: Boolean,
8947
9378
  sticky: Boolean,
8948
9379
  text: String,
8949
9380
  ...makeBorderProps(),
@@ -8960,21 +9391,18 @@ const VBanner = defineComponent({
8960
9391
  let {
8961
9392
  slots
8962
9393
  } = _ref;
8963
- const {
8964
- themeClasses
8965
- } = provideTheme(props);
8966
9394
  const {
8967
9395
  borderClasses
8968
9396
  } = useBorder(props);
8969
9397
  const {
8970
9398
  densityClasses
8971
9399
  } = useDensity(props);
8972
- const {
8973
- dimensionStyles
8974
- } = useDimension(props);
8975
9400
  const {
8976
9401
  mobile
8977
9402
  } = useDisplay();
9403
+ const {
9404
+ dimensionStyles
9405
+ } = useDimension(props);
8978
9406
  const {
8979
9407
  elevationClasses
8980
9408
  } = useElevation(props);
@@ -8985,50 +9413,46 @@ const VBanner = defineComponent({
8985
9413
  const {
8986
9414
  roundedClasses
8987
9415
  } = useRounded(props);
9416
+ const {
9417
+ themeClasses
9418
+ } = provideTheme(props);
9419
+ const color = toRef(props, 'color');
9420
+ const density = toRef(props, 'density');
9421
+ provideDefaults({
9422
+ VBannerActions: {
9423
+ color,
9424
+ density
9425
+ },
9426
+ VBannerAvatar: {
9427
+ density,
9428
+ image: toRef(props, 'avatar')
9429
+ },
9430
+ VBannerIcon: {
9431
+ color,
9432
+ density,
9433
+ icon: toRef(props, 'icon')
9434
+ }
9435
+ });
8988
9436
  useRender(() => {
8989
9437
  var _slots$default;
8990
9438
 
8991
- const hasAvatar = !!(props.avatar || props.icon || slots.avatar || slots.icon);
8992
9439
  const hasText = !!(props.text || slots.text);
8993
- const hasContent = hasAvatar || hasText || slots.default;
9440
+ const hasPrepend = !!(slots.prepend || props.avatar || props.icon);
8994
9441
  return createVNode(props.tag, {
8995
9442
  "class": ['v-banner', {
8996
- 'v-banner--mobile': mobile.value,
9443
+ 'v-banner--stacked': props.stacked || mobile.value,
8997
9444
  'v-banner--sticky': props.sticky,
8998
- [`v-banner--${props.lines}-line`]: true
9445
+ [`v-banner--${props.lines}-line`]: !!props.lines
8999
9446
  }, borderClasses.value, densityClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value, themeClasses.value],
9000
9447
  "style": [dimensionStyles.value, positionStyles.value],
9001
9448
  "role": "banner"
9002
9449
  }, {
9003
- default: () => [hasContent && createVNode("div", {
9004
- "class": "v-banner__content"
9005
- }, [hasAvatar && createVNode(VDefaultsProvider, {
9006
- "defaults": {
9007
- VAvatar: {
9008
- color: props.color,
9009
- density: props.density,
9010
- icon: props.icon,
9011
- image: props.avatar
9012
- }
9013
- }
9014
- }, {
9015
- default: () => [createVNode("div", {
9016
- "class": "v-banner__avatar"
9017
- }, [slots.avatar ? slots.avatar() : createVNode(VAvatar, null, null)])]
9018
- }), hasText && createVNode(VBannerText, null, {
9450
+ default: () => [hasPrepend && createVNode(Fragment, null, [slots.prepend ? createVNode("div", {
9451
+ "class": "v-banner__prepend"
9452
+ }, [slots.prepend()]) : props.avatar ? createVNode(VBannerAvatar, null, null) : props.icon ? createVNode(VBannerIcon, null, null) : undefined]), hasText && createVNode(VBannerText, null, {
9019
9453
  default: () => [slots.text ? slots.text() : props.text]
9020
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]), slots.actions && createVNode(VDefaultsProvider, {
9021
- "defaults": {
9022
- VBtn: {
9023
- color: props.color,
9024
- density: props.density,
9025
- variant: 'text'
9026
- }
9027
- }
9028
- }, {
9029
- default: () => [createVNode(VBannerActions, null, {
9030
- default: slots.actions
9031
- })]
9454
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.actions && createVNode(VBannerActions, null, {
9455
+ default: () => [slots.actions()]
9032
9456
  })]
9033
9457
  });
9034
9458
  });
@@ -9158,30 +9582,31 @@ const VBreadcrumbsItem = defineComponent({
9158
9582
  slots,
9159
9583
  attrs
9160
9584
  } = _ref;
9161
- const {
9162
- isExactActive,
9163
- isLink,
9164
- navigate
9165
- } = useLink(props, attrs);
9166
- const isActive = computed(() => props.active || (isExactActive == null ? void 0 : isExactActive.value));
9585
+ const link = useLink(props, attrs);
9586
+ const isActive = computed(() => {
9587
+ var _link$isExactActive;
9588
+
9589
+ return props.active || ((_link$isExactActive = link.isExactActive) == null ? void 0 : _link$isExactActive.value);
9590
+ });
9167
9591
  const color = computed(() => isActive.value ? props.activeColor : props.color);
9168
9592
  const {
9169
9593
  textColorClasses,
9170
9594
  textColorStyles
9171
9595
  } = useTextColor(color);
9172
9596
  useRender(() => {
9173
- const Tag = isLink.value ? 'a' : props.tag;
9597
+ const Tag = link.isLink.value ? 'a' : props.tag;
9174
9598
  const hasText = !!(slots.default || props.text);
9175
9599
  return createVNode(Tag, {
9176
9600
  "class": ['v-breadcrumbs-item', {
9177
9601
  'v-breadcrumbs-item--active': isActive.value,
9178
9602
  'v-breadcrumbs-item--disabled': props.disabled,
9179
- 'v-breadcrumbs-item--link': isLink.value,
9603
+ 'v-breadcrumbs-item--link': link.isLink.value,
9180
9604
  [`${props.activeClass}`]: isActive.value && props.activeClass
9181
9605
  }, textColorClasses.value],
9182
9606
  "style": [textColorStyles.value],
9607
+ "href": link.href.value,
9183
9608
  "aria-current": isActive.value ? 'page' : undefined,
9184
- "onClick": isActive.value && navigate
9609
+ "onClick": link.navigate
9185
9610
  }, {
9186
9611
  default: hasText ? () => {
9187
9612
  var _slots$default, _slots$default2;
@@ -9201,6 +9626,7 @@ const VBreadcrumbs = defineComponent({
9201
9626
  name: 'VBreadcrumbs',
9202
9627
  props: {
9203
9628
  activeClass: String,
9629
+ activeColor: String,
9204
9630
  bgColor: String,
9205
9631
  color: String,
9206
9632
  disabled: Boolean,
@@ -9237,6 +9663,7 @@ const VBreadcrumbs = defineComponent({
9237
9663
  provideDefaults({
9238
9664
  VBreadcrumbsItem: {
9239
9665
  activeClass: toRef(props, 'activeClass'),
9666
+ activeColor: toRef(props, 'activeColor'),
9240
9667
  color: toRef(props, 'color'),
9241
9668
  disabled: toRef(props, 'disabled')
9242
9669
  }
@@ -9282,7 +9709,7 @@ const VBreadcrumbs = defineComponent({
9282
9709
 
9283
9710
  });
9284
9711
 
9285
- const VCardActions = defineComponent$1({
9712
+ const VCardActions = defineComponent({
9286
9713
  name: 'VCardActions',
9287
9714
 
9288
9715
  setup(_, _ref) {
@@ -9308,6 +9735,8 @@ const VCardActions = defineComponent$1({
9308
9735
 
9309
9736
  const VCardAvatar = createSimpleFunctional('v-card-avatar');
9310
9737
 
9738
+ const VCardContent = createSimpleFunctional('v-card-content');
9739
+
9311
9740
  const VCardHeader = createSimpleFunctional('v-card-header');
9312
9741
 
9313
9742
  const VCardHeaderText = createSimpleFunctional('v-card-header-text');
@@ -9387,7 +9816,7 @@ const VCard = defineComponent({
9387
9816
  } = useRounded(props);
9388
9817
  const link = useLink(props, attrs);
9389
9818
  return () => {
9390
- var _slots$image, _slots$media, _slots$default;
9819
+ var _slots$image, _slots$media, _slots$headerText, _slots$default;
9391
9820
 
9392
9821
  const Tag = link.isLink.value ? 'a' : props.tag;
9393
9822
  const hasTitle = !!(slots.title || props.title);
@@ -9441,7 +9870,7 @@ const VCard = defineComponent({
9441
9870
  default: () => [slots.title ? slots.title() : props.title]
9442
9871
  }), hasSubtitle && createVNode(VCardSubtitle, null, {
9443
9872
  default: () => [slots.subtitle ? slots.subtitle() : props.subtitle]
9444
- })]
9873
+ }), (_slots$headerText = slots.headerText) == null ? void 0 : _slots$headerText.call(slots)]
9445
9874
  }), hasAppend && createVNode(VDefaultsProvider, {
9446
9875
  "defaults": {
9447
9876
  VAvatar: {
@@ -9457,6 +9886,8 @@ const VCard = defineComponent({
9457
9886
  })]
9458
9887
  }), hasText && createVNode(VCardText, null, {
9459
9888
  default: () => [slots.text ? slots.text() : props.text]
9889
+ }), slots.content && createVNode(VCardContent, null, {
9890
+ default: slots.content
9460
9891
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.actions && createVNode(VCardActions, null, {
9461
9892
  default: slots.actions
9462
9893
  })]
@@ -9698,13 +10129,6 @@ const VWindow = genericComponent()({
9698
10129
  canMoveForward.value && group.next();
9699
10130
  }
9700
10131
 
9701
- provideDefaults({
9702
- VBtn: {
9703
- variant: 'text'
9704
- }
9705
- }, {
9706
- scoped: true
9707
- });
9708
10132
  const arrows = computed(() => {
9709
10133
  const arrows = [];
9710
10134
  const prevProps = {
@@ -10006,7 +10430,7 @@ const VCarousel = defineComponent({
10006
10430
  })]), props.progress && createVNode(VProgressLinear, {
10007
10431
  "class": "v-carousel__progress",
10008
10432
  "color": typeof props.progress === 'string' ? props.progress : undefined,
10009
- "modelValue": (+model.value + 1) / group.items.value.length * 100
10433
+ "modelValue": (group.getItemIndex(model.value) + 1) / group.items.value.length * 100
10010
10434
  }, null)]);
10011
10435
  },
10012
10436
  prev: slots.prev,
@@ -10039,7 +10463,7 @@ const VCarouselItem = defineComponent({
10039
10463
  });
10040
10464
 
10041
10465
  const VSelectionControlGroupSymbol = Symbol.for('vuetify:selection-control-group');
10042
- const VSelectionControlGroup = defineComponent$1({
10466
+ const VSelectionControlGroup = defineComponent({
10043
10467
  name: 'VSelectionControlGroup',
10044
10468
  props: {
10045
10469
  disabled: Boolean,
@@ -10140,6 +10564,7 @@ function useSelectionControl(props) {
10140
10564
  },
10141
10565
 
10142
10566
  set(val) {
10567
+ if (props.readonly) return;
10143
10568
  const currentValue = val ? trueValue.value : falseValue.value;
10144
10569
  let newVal = currentValue;
10145
10570
 
@@ -10254,7 +10679,7 @@ const VSelectionControl = genericComponent()({
10254
10679
  "id": id.value,
10255
10680
  "onBlur": onBlur,
10256
10681
  "onFocus": onFocus,
10257
- "readonly": props.readonly,
10682
+ "aria-readonly": props.readonly,
10258
10683
  "type": type,
10259
10684
  "value": trueValue.value,
10260
10685
  "name": (_group$name$value = group == null ? void 0 : group.name.value) != null ? _group$name$value : props.name,
@@ -10347,7 +10772,7 @@ const VCheckbox = defineComponent({
10347
10772
  "aria-checked": indeterminate.value ? 'mixed' : undefined,
10348
10773
  "disabled": isDisabled.value,
10349
10774
  "readonly": isReadonly.value
10350
- }, controlAttrs), null);
10775
+ }, controlAttrs), slots);
10351
10776
  }
10352
10777
  });
10353
10778
  });
@@ -10913,7 +11338,7 @@ const VSliderTrack = defineComponent({
10913
11338
  return ticks.map((tick, index) => {
10914
11339
  var _slots$tickLabel, _slots$tickLabel2;
10915
11340
 
10916
- const directionProperty = vertical.value ? 'inset-block-end' : 'margin-inline-start';
11341
+ const directionProperty = vertical.value ? 'bottom' : 'margin-inline-start';
10917
11342
  return createVNode("div", {
10918
11343
  "key": tick.value,
10919
11344
  "class": ['v-slider-track__tick', {
@@ -12116,11 +12541,13 @@ const VCombobox = genericComponent()({
12116
12541
  })
12117
12542
  },
12118
12543
  emits: {
12119
- 'update:modelValue': val => true
12544
+ 'update:modelValue': val => true,
12545
+ 'update:searchInput': val => true
12120
12546
  },
12121
12547
 
12122
12548
  setup(props, _ref) {
12123
12549
  let {
12550
+ emit,
12124
12551
  slots
12125
12552
  } = _ref;
12126
12553
  const {
@@ -12137,7 +12564,9 @@ const VCombobox = genericComponent()({
12137
12564
 
12138
12565
  return (_vTextFieldRef$value = vTextFieldRef.value) == null ? void 0 : _vTextFieldRef$value.color;
12139
12566
  });
12140
- const items = computed(() => props.items.map(genItem));
12567
+ const {
12568
+ items
12569
+ } = useItems(props);
12141
12570
  const {
12142
12571
  textColorClasses,
12143
12572
  textColorStyles
@@ -12147,7 +12576,7 @@ const VCombobox = genericComponent()({
12147
12576
  const _search = ref('');
12148
12577
 
12149
12578
  const search = computed({
12150
- get: () => props.multiple ? _search.value : genItem(model.value[0]).value,
12579
+ get: () => props.multiple ? _search.value : transformItem(props, model.value[0]).value,
12151
12580
  set: val => {
12152
12581
  var _props$delimiters;
12153
12582
 
@@ -12176,6 +12605,9 @@ const VCombobox = genericComponent()({
12176
12605
  isPristine.value = !val;
12177
12606
  }
12178
12607
  });
12608
+ watch(_search, value => {
12609
+ emit('update:searchInput', value);
12610
+ });
12179
12611
  const {
12180
12612
  filteredItems
12181
12613
  } = useFilter(props, items, computed(() => isPristine.value ? undefined : search.value));
@@ -12184,7 +12616,7 @@ const VCombobox = genericComponent()({
12184
12616
  let index = 0;
12185
12617
 
12186
12618
  for (const unwrapped of model.value) {
12187
- const item = genItem(unwrapped);
12619
+ const item = transformItem(props, unwrapped);
12188
12620
  const found = array.find(selection => selection.value === item.value);
12189
12621
 
12190
12622
  if (found == null) {
@@ -12278,18 +12710,24 @@ const VCombobox = genericComponent()({
12278
12710
  }
12279
12711
  }
12280
12712
 
12713
+ function onInput(e) {
12714
+ search.value = e.target.value;
12715
+ }
12716
+
12281
12717
  function onAfterLeave() {
12282
12718
  if (isFocused.value) isPristine.value = true;
12283
12719
  }
12284
12720
 
12285
12721
  function select(item) {
12286
12722
  if (props.multiple) {
12287
- const index = selections.value.findIndex(selection => selection.value === item.value);
12723
+ const index = selected.value.findIndex(selection => selection === item.value);
12288
12724
 
12289
12725
  if (index === -1) {
12290
- model.value.push(item.value);
12726
+ model.value = [...model.value, item.value];
12291
12727
  } else {
12292
- model.value = selected.value.filter(selection => selection !== item.value);
12728
+ const value = [...model.value];
12729
+ value.splice(index, 1);
12730
+ model.value = value;
12293
12731
  }
12294
12732
 
12295
12733
  search.value = '';
@@ -12315,7 +12753,7 @@ const VCombobox = genericComponent()({
12315
12753
  } else {
12316
12754
  menu.value = false;
12317
12755
  if (!props.multiple || !search.value) return;
12318
- model.value.push(search.value);
12756
+ model.value = [...model.value, search.value];
12319
12757
  search.value = '';
12320
12758
  }
12321
12759
  });
@@ -12324,7 +12762,7 @@ const VCombobox = genericComponent()({
12324
12762
  return createVNode(VTextField, {
12325
12763
  "ref": vTextFieldRef,
12326
12764
  "modelValue": search.value,
12327
- "onUpdate:modelValue": $event => search.value = $event,
12765
+ "onInput": onInput,
12328
12766
  "class": ['v-combobox', {
12329
12767
  'v-combobox--active-menu': menu.value,
12330
12768
  'v-combobox--chips': !!props.chips,
@@ -12340,75 +12778,79 @@ const VCombobox = genericComponent()({
12340
12778
  "onBlur": () => isFocused.value = false,
12341
12779
  "onKeydown": onKeydown
12342
12780
  }, { ...slots,
12343
- default: () => createVNode(Fragment, null, [activator.value && createVNode(VMenu, {
12344
- "modelValue": menu.value,
12345
- "onUpdate:modelValue": $event => menu.value = $event,
12346
- "activator": activator.value,
12347
- "contentClass": "v-combobox__content",
12348
- "eager": props.eager,
12349
- "openOnClick": false,
12350
- "transition": props.transition,
12351
- "onAfterLeave": onAfterLeave
12352
- }, {
12353
- default: () => [createVNode(VList, {
12354
- "selected": selected.value,
12355
- "selectStrategy": props.multiple ? 'independent' : 'single-independent'
12781
+ default: () => {
12782
+ var _slots$noData, _slots$noData2;
12783
+
12784
+ return createVNode(Fragment, null, [activator.value && createVNode(VMenu, {
12785
+ "modelValue": menu.value,
12786
+ "onUpdate:modelValue": $event => menu.value = $event,
12787
+ "activator": activator.value,
12788
+ "contentClass": "v-combobox__content",
12789
+ "eager": props.eager,
12790
+ "openOnClick": false,
12791
+ "transition": props.transition,
12792
+ "onAfterLeave": onAfterLeave
12356
12793
  }, {
12357
- default: () => [!filteredItems.value.length && !props.hideNoData && createVNode(VListItem, {
12358
- "title": t(props.noDataText)
12359
- }, null), filteredItems.value.map(_ref2 => {
12360
- let {
12361
- item,
12362
- matches
12363
- } = _ref2;
12364
- return createVNode(VListItem, {
12365
- "value": item.value,
12366
- "onMousedown": e => e.preventDefault(),
12367
- "onClick": () => select(item)
12368
- }, {
12369
- title: () => {
12370
- var _search$value$length, _search$value;
12371
-
12372
- return isPristine.value ? item.title : highlightResult(item.title, matches.title, (_search$value$length = (_search$value = search.value) == null ? void 0 : _search$value.length) != null ? _search$value$length : 0);
12373
- }
12374
- });
12794
+ default: () => [createVNode(VList, {
12795
+ "selected": selected.value,
12796
+ "selectStrategy": props.multiple ? 'independent' : 'single-independent'
12797
+ }, {
12798
+ default: () => [!filteredItems.value.length && !props.hideNoData && ((_slots$noData = (_slots$noData2 = slots['no-data']) == null ? void 0 : _slots$noData2.call(slots)) != null ? _slots$noData : createVNode(VListItem, {
12799
+ "title": t(props.noDataText)
12800
+ }, null)), filteredItems.value.map(_ref2 => {
12801
+ let {
12802
+ item,
12803
+ matches
12804
+ } = _ref2;
12805
+ return createVNode(VListItem, {
12806
+ "value": item.value,
12807
+ "onMousedown": e => e.preventDefault(),
12808
+ "onClick": () => select(item)
12809
+ }, {
12810
+ title: () => {
12811
+ var _search$value$length, _search$value;
12812
+
12813
+ return isPristine.value ? item.title : highlightResult(item.title, matches.title, (_search$value$length = (_search$value = search.value) == null ? void 0 : _search$value.length) != null ? _search$value$length : 0);
12814
+ }
12815
+ });
12816
+ })]
12375
12817
  })]
12376
- })]
12377
- }), selections.value.map((selection, index) => {
12378
- function onChipClose(e) {
12379
- e.stopPropagation();
12380
- e.preventDefault();
12381
- select(selection);
12382
- }
12818
+ }), selections.value.map((selection, index) => {
12819
+ function onChipClose(e) {
12820
+ e.stopPropagation();
12821
+ e.preventDefault();
12822
+ select(selection);
12823
+ }
12383
12824
 
12384
- const slotProps = {
12385
- 'onClick:close': onChipClose,
12386
- modelValue: true
12387
- };
12388
- return createVNode("div", {
12389
- "class": ['v-combobox__selection', selection.selected && ['v-combobox__selection--selected', textColorClasses.value]],
12390
- "style": selection.selected ? textColorStyles.value : {}
12391
- }, [hasChips && createVNode(VDefaultsProvider, {
12392
- "defaults": {
12393
- VChip: {
12394
- closable: props.closableChips,
12395
- size: 'small',
12396
- text: selection.title
12825
+ const slotProps = {
12826
+ 'onClick:close': onChipClose,
12827
+ modelValue: true
12828
+ };
12829
+ return createVNode("div", {
12830
+ "class": ['v-combobox__selection', selection.selected && ['v-combobox__selection--selected', textColorClasses.value]],
12831
+ "style": selection.selected ? textColorStyles.value : {}
12832
+ }, [hasChips && createVNode(VDefaultsProvider, {
12833
+ "defaults": {
12834
+ VChip: {
12835
+ closable: props.closableChips,
12836
+ size: 'small',
12837
+ text: selection.title
12838
+ }
12397
12839
  }
12398
- }
12399
- }, {
12400
- default: () => [slots.chip ? slots.chip({
12401
- props: slotProps,
12840
+ }, {
12841
+ default: () => [slots.chip ? slots.chip({
12842
+ props: slotProps,
12843
+ selection
12844
+ }) : createVNode(VChip, slotProps, null)]
12845
+ }), !hasChips && (slots.selection ? slots.selection({
12402
12846
  selection
12403
- }) : createVNode(VChip, slotProps, null)]
12404
- }), !hasChips && (slots.selection ? slots.selection({
12405
- selection
12406
- }) : createVNode("span", {
12407
- "class": "v-combobox__selection-text"
12408
- }, [selection.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
12409
- "class": "v-combobox__selection-comma"
12410
- }, [createTextVNode(",")])]))]);
12411
- })])
12847
+ }) : createVNode("span", {
12848
+ "class": "v-combobox__selection-text"
12849
+ }, [selection.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
12850
+ "class": "v-combobox__selection-comma"
12851
+ }, [createTextVNode(",")])]))]);
12852
+ })]);
12853
+ }
12412
12854
  });
12413
12855
  });
12414
12856
  return useForwardRef({
@@ -12464,19 +12906,15 @@ const VDialog = genericComponent()({
12464
12906
  const overlay = ref();
12465
12907
 
12466
12908
  function onFocusin(e) {
12467
- var _overlay$value;
12909
+ var _overlay$value, _overlay$value2;
12468
12910
 
12469
12911
  const before = e.relatedTarget;
12470
12912
  const after = e.target;
12471
12913
 
12472
- if (before !== after && (_overlay$value = overlay.value) != null && _overlay$value.contentEl && // It isn't the document or the dialog body
12914
+ if (before !== after && (_overlay$value = overlay.value) != null && _overlay$value.contentEl && // We're the topmost dialog
12915
+ (_overlay$value2 = overlay.value) != null && _overlay$value2.isTop && // It isn't the document or the dialog body
12473
12916
  ![document, overlay.value.contentEl].includes(after) && // It isn't inside the dialog body
12474
- !overlay.value.contentEl.contains(after) // We're the topmost dialog
12475
- // TODO: this.activeZIndex >= this.getMaxZIndex() &&
12476
- // It isn't inside a dependent element (like a menu)
12477
- // TODO: !this.getOpenDependentElements().some(el => el.contains(target))
12478
- // So we must have focused something outside the dialog and its children
12479
- ) {
12917
+ !overlay.value.contentEl.contains(after)) {
12480
12918
  const focusable = [...overlay.value.contentEl.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])')].filter(el => !el.hasAttribute('disabled'));
12481
12919
  if (!focusable.length) return;
12482
12920
  const firstElement = focusable[0];
@@ -12520,7 +12958,8 @@ const VDialog = genericComponent()({
12520
12958
  "modelValue": isActive.value,
12521
12959
  "onUpdate:modelValue": $event => isActive.value = $event,
12522
12960
  "class": ['v-dialog', {
12523
- 'v-dialog--fullscreen': props.fullscreen
12961
+ 'v-dialog--fullscreen': props.fullscreen,
12962
+ 'v-dialog--scrollable': props.scrollable
12524
12963
  }],
12525
12964
  "style": dimensionStyles.value,
12526
12965
  "transition": props.transition,
@@ -12551,6 +12990,7 @@ const VExpansionPanels = defineComponent({
12551
12990
  default: 'default',
12552
12991
  validator: v => allowedVariants.includes(v)
12553
12992
  },
12993
+ readonly: Boolean,
12554
12994
  ...makeGroupProps(),
12555
12995
  ...makeTagProps(),
12556
12996
  ...makeThemeProps()
@@ -12571,6 +13011,9 @@ const VExpansionPanels = defineComponent({
12571
13011
  provideDefaults({
12572
13012
  VExpansionPanel: {
12573
13013
  color: toRef(props, 'color')
13014
+ },
13015
+ VExpansionPanelTitle: {
13016
+ readonly: toRef(props, 'readonly')
12574
13017
  }
12575
13018
  });
12576
13019
  useRender(() => createVNode(props.tag, {
@@ -12595,7 +13038,8 @@ const makeVExpansionPanelTitleProps = propsFactory({
12595
13038
  ripple: {
12596
13039
  type: [Boolean, Object],
12597
13040
  default: false
12598
- }
13041
+ },
13042
+ readonly: Boolean
12599
13043
  });
12600
13044
  const VExpansionPanelTitle = defineComponent({
12601
13045
  name: 'VExpansionPanelTitle',
@@ -12619,7 +13063,8 @@ const VExpansionPanelTitle = defineComponent({
12619
13063
  collapseIcon: props.collapseIcon,
12620
13064
  disabled: expansionPanel.disabled.value,
12621
13065
  expanded: expansionPanel.isSelected.value,
12622
- expandIcon: props.expandIcon
13066
+ expandIcon: props.expandIcon,
13067
+ readonly: props.readonly
12623
13068
  }));
12624
13069
  useRender(() => {
12625
13070
  var _slots$default;
@@ -12633,7 +13078,7 @@ const VExpansionPanelTitle = defineComponent({
12633
13078
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
12634
13079
  "disabled": expansionPanel.disabled.value,
12635
13080
  "aria-expanded": expansionPanel.isSelected.value,
12636
- "onClick": expansionPanel.toggle
13081
+ "onClick": !props.readonly ? expansionPanel.toggle : undefined
12637
13082
  }, [createVNode("div", {
12638
13083
  "class": "v-expansion-panel-title__overlay"
12639
13084
  }, null), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value), !props.hideActions && createVNode("div", {
@@ -12710,13 +13155,17 @@ const VExpansionPanel = defineComponent({
12710
13155
  roundedClasses
12711
13156
  } = useRounded(props);
12712
13157
  const isDisabled = computed(() => (groupItem == null ? void 0 : groupItem.disabled.value) || props.disabled);
13158
+ const selectedIndices = computed(() => groupItem.group.items.value.reduce((arr, item, index) => {
13159
+ if (groupItem.group.selected.value.includes(item.id)) arr.push(index);
13160
+ return arr;
13161
+ }, []));
12713
13162
  const isBeforeSelected = computed(() => {
12714
13163
  const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id);
12715
- return !groupItem.isSelected.value && groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === 1);
13164
+ return !groupItem.isSelected.value && selectedIndices.value.some(selectedIndex => selectedIndex - index === 1);
12716
13165
  });
12717
13166
  const isAfterSelected = computed(() => {
12718
13167
  const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id);
12719
- return !groupItem.isSelected.value && groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === -1);
13168
+ return !groupItem.isSelected.value && selectedIndices.value.some(selectedIndex => selectedIndex - index === -1);
12720
13169
  });
12721
13170
  provide(VExpansionPanelSymbol, groupItem);
12722
13171
  useRender(() => {
@@ -12884,7 +13333,7 @@ const VFileInput = defineComponent({
12884
13333
  }
12885
13334
 
12886
13335
  useRender(() => {
12887
- const hasCounter = !!(slots.counter || props.counter || counterValue.value);
13336
+ const hasCounter = !!(slots.counter || props.counter);
12888
13337
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
12889
13338
  const [{
12890
13339
  modelValue: _,
@@ -12962,6 +13411,7 @@ const VFileInput = defineComponent({
12962
13411
  });
12963
13412
  },
12964
13413
  details: hasCounter ? () => createVNode(Fragment, null, [createVNode("span", null, null), createVNode(VCounter, {
13414
+ "active": !!model.value.length,
12965
13415
  "value": counterValue.value
12966
13416
  }, slots.counter)]) : undefined
12967
13417
  });
@@ -12974,11 +13424,15 @@ const VFileInput = defineComponent({
12974
13424
  const VFooter = defineComponent({
12975
13425
  name: 'VFooter',
12976
13426
  props: {
13427
+ app: Boolean,
12977
13428
  color: String,
13429
+ height: {
13430
+ type: [Number, String],
13431
+ default: 'auto'
13432
+ },
12978
13433
  ...makeBorderProps(),
12979
- ...makeDimensionProps(),
12980
13434
  ...makeElevationProps(),
12981
- ...makePositionProps(),
13435
+ ...makeLayoutItemProps(),
12982
13436
  ...makeRoundedProps(),
12983
13437
  ...makeTagProps({
12984
13438
  tag: 'footer'
@@ -13000,22 +13454,35 @@ const VFooter = defineComponent({
13000
13454
  const {
13001
13455
  borderClasses
13002
13456
  } = useBorder(props);
13003
- const {
13004
- dimensionStyles
13005
- } = useDimension(props);
13006
13457
  const {
13007
13458
  elevationClasses
13008
13459
  } = useElevation(props);
13009
13460
  const {
13010
- positionClasses,
13011
- positionStyles
13012
- } = usePosition(props);
13461
+ roundedClasses
13462
+ } = useRounded(props);
13463
+ const autoHeight = ref(32);
13464
+ const {
13465
+ resizeRef
13466
+ } = useResizeObserver(entries => {
13467
+ if (!entries.length) return;
13468
+ autoHeight.value = entries[0].target.clientHeight;
13469
+ });
13470
+ const height = computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10));
13013
13471
  const {
13014
- roundedClasses
13015
- } = useRounded(props);
13472
+ layoutItemStyles
13473
+ } = useLayoutItem({
13474
+ id: props.name,
13475
+ priority: computed(() => parseInt(props.priority, 10)),
13476
+ position: computed(() => 'bottom'),
13477
+ layoutSize: height,
13478
+ elementSize: computed(() => props.height === 'auto' ? undefined : height.value),
13479
+ active: computed(() => props.app),
13480
+ absolute: toRef(props, 'absolute')
13481
+ });
13016
13482
  return () => createVNode(props.tag, {
13017
- "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
13018
- "style": [backgroundColorStyles, dimensionStyles.value, positionStyles.value]
13483
+ "ref": resizeRef,
13484
+ "class": ['v-footer', themeClasses.value, backgroundColorClasses.value, borderClasses.value, elevationClasses.value, roundedClasses.value],
13485
+ "style": [backgroundColorStyles, props.app ? layoutItemStyles.value : undefined]
13019
13486
  }, slots);
13020
13487
  }
13021
13488
 
@@ -13043,17 +13510,29 @@ const VForm = defineComponent({
13043
13510
  form.reset();
13044
13511
  }
13045
13512
 
13046
- function onSubmit(e) {
13047
- e.preventDefault();
13048
- form.validate().then(_ref2 => {
13049
- let {
13050
- valid
13051
- } = _ref2;
13513
+ function onSubmit(_e) {
13514
+ const e = _e;
13515
+ const ready = form.validate();
13516
+ e.then = ready.then.bind(ready);
13517
+ e.catch = ready.catch.bind(ready);
13518
+ e.finally = ready.finally.bind(ready);
13519
+ emit('submit', e);
13052
13520
 
13053
- if (valid) {
13054
- emit('submit', e);
13055
- }
13056
- });
13521
+ if (!e.defaultPrevented) {
13522
+ ready.then(_ref2 => {
13523
+ let {
13524
+ valid
13525
+ } = _ref2;
13526
+
13527
+ if (valid) {
13528
+ var _formRef$value;
13529
+
13530
+ (_formRef$value = formRef.value) == null ? void 0 : _formRef$value.submit();
13531
+ }
13532
+ });
13533
+ }
13534
+
13535
+ e.preventDefault();
13057
13536
  }
13058
13537
 
13059
13538
  useRender(() => {
@@ -13067,7 +13546,7 @@ const VForm = defineComponent({
13067
13546
  "onSubmit": onSubmit
13068
13547
  }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, form)]);
13069
13548
  });
13070
- return form;
13549
+ return useForwardRef(form, formRef);
13071
13550
  }
13072
13551
 
13073
13552
  });
@@ -14026,7 +14505,7 @@ const VNavigationDrawer = defineComponent({
14026
14505
  roundedClasses
14027
14506
  } = useRounded(props);
14028
14507
  const router = useRouter();
14029
- const isActive = useProxiedModel(props, 'modelValue');
14508
+ const isActive = useProxiedModel(props, 'modelValue', null, v => !!v);
14030
14509
  const isHovering = ref(false);
14031
14510
  const width = computed(() => {
14032
14511
  return props.rail && props.expandOnHover && isHovering.value ? Number(props.width) : Number(props.rail ? props.railWidth : props.width);
@@ -14315,27 +14794,25 @@ const VPagination = defineComponent({
14315
14794
  });
14316
14795
  const range = computed(() => {
14317
14796
  if (length.value <= 0) return [];
14797
+ if (totalVisible.value <= 2) return [page.value];
14318
14798
 
14319
- if (totalVisible.value <= 3) {
14320
- return [Math.min(Math.max(start.value, page.value), start.value + length.value)];
14321
- }
14322
-
14323
- if (props.length <= totalVisible.value) {
14799
+ if (length.value <= totalVisible.value) {
14324
14800
  return createRange(length.value, start.value);
14325
14801
  }
14326
14802
 
14327
- const middle = Math.ceil(totalVisible.value / 2);
14328
- const left = middle;
14803
+ const even = totalVisible.value % 2 === 0;
14804
+ const middle = even ? totalVisible.value / 2 : Math.floor(totalVisible.value / 2);
14805
+ const left = even ? middle : middle + 1;
14329
14806
  const right = length.value - middle;
14330
14807
 
14331
- if (page.value < left) {
14332
- return [...createRange(Math.max(1, totalVisible.value - 2), start.value), props.ellipsis, length.value];
14333
- } else if (page.value > right) {
14334
- const rangeLength = totalVisible.value - 2;
14808
+ if (left - page.value >= 0) {
14809
+ return [...createRange(Math.max(1, totalVisible.value - 1), start.value), props.ellipsis, length.value];
14810
+ } else if (page.value - right >= 0) {
14811
+ const rangeLength = totalVisible.value - 1;
14335
14812
  const rangeStart = length.value - rangeLength + start.value;
14336
14813
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart)];
14337
14814
  } else {
14338
- const rangeLength = Math.max(1, totalVisible.value - 4);
14815
+ const rangeLength = Math.max(1, totalVisible.value - 3);
14339
14816
  const rangeStart = rangeLength === 1 ? page.value : page.value - Math.ceil(rangeLength / 2) + start.value;
14340
14817
  return [start.value, props.ellipsis, ...createRange(rangeLength, rangeStart), props.ellipsis, length.value];
14341
14818
  }
@@ -14678,7 +15155,7 @@ const VProgressCircular = defineComponent({
14678
15155
 
14679
15156
  });
14680
15157
 
14681
- const VRadio = defineComponent$1({
15158
+ const VRadio = defineComponent({
14682
15159
  name: 'VRadio',
14683
15160
  props: {
14684
15161
  falseIcon: {
@@ -14706,7 +15183,7 @@ const VRadio = defineComponent$1({
14706
15183
 
14707
15184
  });
14708
15185
 
14709
- const VRadioGroup = defineComponent$1({
15186
+ const VRadioGroup = defineComponent({
14710
15187
  name: 'VRadioGroup',
14711
15188
  inheritAttrs: false,
14712
15189
  props: {
@@ -14775,7 +15252,7 @@ const VRadioGroup = defineComponent$1({
14775
15252
 
14776
15253
  });
14777
15254
 
14778
- const VRangeSlider = defineComponent$1({
15255
+ const VRangeSlider = defineComponent({
14779
15256
  name: 'VRangeSlider',
14780
15257
  props: { ...makeFocusProps(),
14781
15258
  ...makeVInputProps(),
@@ -15162,6 +15639,12 @@ const VRating = genericComponent()({
15162
15639
  }, null)]);
15163
15640
  }
15164
15641
 
15642
+ function createLabel(labelProps) {
15643
+ if (slots['item-label']) return slots['item-label'](labelProps);
15644
+ if (labelProps.label) return createVNode("span", null, [labelProps.label]);
15645
+ return createVNode("span", null, [createTextVNode("\xA0")]);
15646
+ }
15647
+
15165
15648
  return () => {
15166
15649
  var _props$itemLabels;
15167
15650
 
@@ -15181,11 +15664,11 @@ const VRating = genericComponent()({
15181
15664
 
15182
15665
  return createVNode("div", {
15183
15666
  "class": "v-rating__wrapper"
15184
- }, [!hasLabels ? undefined : slots['item-label'] ? slots['item-label']({
15667
+ }, [hasLabels && props.itemLabelPosition === 'top' ? createLabel({
15185
15668
  value,
15186
15669
  index: i,
15187
15670
  label: (_props$itemLabels2 = props.itemLabels) == null ? void 0 : _props$itemLabels2[i]
15188
- }) : (_props$itemLabels3 = props.itemLabels) != null && _props$itemLabels3[i] ? createVNode("span", null, [props.itemLabels[i]]) : createVNode("span", null, [createTextVNode("\xA0")]), createVNode("div", {
15671
+ }) : undefined, createVNode("div", {
15189
15672
  "class": ['v-rating__item', {
15190
15673
  'v-rating__item--focused': Math.ceil(focusIndex.value) === value
15191
15674
  }]
@@ -15198,7 +15681,11 @@ const VRating = genericComponent()({
15198
15681
  }, null)]) : createVNode(VRatingItem, {
15199
15682
  "value": value,
15200
15683
  "index": i
15201
- }, null)])]);
15684
+ }, null)]), hasLabels && props.itemLabelPosition === 'bottom' ? createLabel({
15685
+ value,
15686
+ index: i,
15687
+ label: (_props$itemLabels3 = props.itemLabels) == null ? void 0 : _props$itemLabels3[i]
15688
+ }) : undefined]);
15202
15689
  })]
15203
15690
  });
15204
15691
  };
@@ -15264,10 +15751,6 @@ const VSlideGroupSymbol = Symbol.for('vuetify:v-slide-group');
15264
15751
  const VSlideGroup = defineComponent({
15265
15752
  name: 'VSlideGroup',
15266
15753
  props: {
15267
- activeClass: {
15268
- type: String,
15269
- default: 'v-slide-item--active'
15270
- },
15271
15754
  centerActive: Boolean,
15272
15755
  direction: {
15273
15756
  type: String,
@@ -15290,7 +15773,9 @@ const VSlideGroup = defineComponent({
15290
15773
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
15291
15774
  },
15292
15775
  ...makeTagProps(),
15293
- ...makeGroupProps()
15776
+ ...makeGroupProps({
15777
+ selectedClass: 'v-slide-group-item--active'
15778
+ })
15294
15779
  },
15295
15780
  emits: {
15296
15781
  'update:modelValue': value => true
@@ -15316,21 +15801,31 @@ const VSlideGroup = defineComponent({
15316
15801
  resizeRef: containerRef,
15317
15802
  contentRect: containerRect
15318
15803
  } = useResizeObserver();
15319
- const contentRef = ref();
15804
+ const {
15805
+ resizeRef: contentRef,
15806
+ contentRect
15807
+ } = useResizeObserver();
15320
15808
  watchEffect(() => {
15321
- if (!containerRect.value || !contentRef.value) return;
15809
+ if (!containerRect.value || !contentRect.value) return;
15322
15810
  const sizeProperty = isHorizontal.value ? 'width' : 'height';
15323
15811
  containerSize.value = containerRect.value[sizeProperty];
15324
- contentSize.value = contentRef.value.getBoundingClientRect()[sizeProperty];
15812
+ contentSize.value = contentRect.value[sizeProperty];
15325
15813
  isOverflowing.value = containerSize.value + 1 < contentSize.value;
15326
15814
  });
15327
- watch(group.selected, selected => {
15328
- if (!selected.length || !contentRef.value) return;
15329
- const index = group.items.value.findIndex(item => item.id === selected[selected.length - 1]); // TODO: Is this too naive? Should we store element references in group composable?
15815
+ const firstSelectedIndex = computed(() => {
15816
+ if (!group.selected.value.length) return -1;
15817
+ return group.items.value.findIndex(item => item.id === group.selected.value[0]);
15818
+ });
15819
+ const lastSelectedIndex = computed(() => {
15820
+ if (!group.selected.value.length) return -1;
15821
+ return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1]);
15822
+ });
15823
+ watch(group.selected, () => {
15824
+ if (firstSelectedIndex.value < 0 || !contentRef.value) return; // TODO: Is this too naive? Should we store element references in group composable?
15330
15825
 
15331
- const selectedElement = contentRef.value.children[index];
15826
+ const selectedElement = contentRef.value.children[lastSelectedIndex.value];
15332
15827
 
15333
- if (index === 0 || !isOverflowing.value) {
15828
+ if (firstSelectedIndex.value === 0 || !isOverflowing.value) {
15334
15829
  scrollOffset.value = 0;
15335
15830
  } else if (props.centerActive) {
15336
15831
  scrollOffset.value = calculateCenteredOffset({
@@ -15351,6 +15846,20 @@ const VSlideGroup = defineComponent({
15351
15846
  });
15352
15847
  }
15353
15848
  });
15849
+ let firstOverflow = true;
15850
+ watch(isOverflowing, () => {
15851
+ if (!firstOverflow || !contentRef.value || firstSelectedIndex.value < 0) return;
15852
+ firstOverflow = false; // TODO: Is this too naive? Should we store element references in group composable?
15853
+
15854
+ const selectedElement = contentRef.value.children[firstSelectedIndex.value];
15855
+ scrollOffset.value = calculateCenteredOffset({
15856
+ selectedElement,
15857
+ containerSize: containerSize.value,
15858
+ contentSize: contentSize.value,
15859
+ isRtl: isRtl.value,
15860
+ isHorizontal: isHorizontal.value
15861
+ });
15862
+ });
15354
15863
  const disableTransition = ref(false);
15355
15864
  let startTouch = 0;
15356
15865
  let startOffset = 0;
@@ -15498,7 +16007,7 @@ const VSlideGroup = defineComponent({
15498
16007
  // Always show arrows on desktop
15499
16008
 
15500
16009
  case 'desktop':
15501
- return mobile.value;
16010
+ return !mobile.value;
15502
16011
  // Show arrows on mobile when overflowing.
15503
16012
  // This matches the default 2.2 behavior
15504
16013
 
@@ -15597,7 +16106,9 @@ const VSlideGroupItem = defineComponent({
15597
16106
 
15598
16107
  return (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
15599
16108
  isSelected: slideGroupItem.isSelected.value,
15600
- select: slideGroupItem.select
16109
+ select: slideGroupItem.select,
16110
+ toggle: slideGroupItem.toggle,
16111
+ selectedClass: slideGroupItem.selectedClass.value
15601
16112
  });
15602
16113
  };
15603
16114
  }
@@ -15621,6 +16132,7 @@ const VSnackbar = defineComponent({
15621
16132
  vertical: Boolean,
15622
16133
  modelValue: Boolean,
15623
16134
  ...makePositionProps(),
16135
+ ...makeRoundedProps(),
15624
16136
  ...makeVariantProps(),
15625
16137
  ...makeTransitionProps({
15626
16138
  transition: 'v-snackbar-transition'
@@ -15644,6 +16156,9 @@ const VSnackbar = defineComponent({
15644
16156
  colorStyles,
15645
16157
  variantClasses
15646
16158
  } = useVariant(props);
16159
+ const {
16160
+ roundedClasses
16161
+ } = useRounded(props);
15647
16162
  watch(isActive, startTimeout);
15648
16163
  watch(() => props.timeout, startTimeout);
15649
16164
  onMounted(() => {
@@ -15667,7 +16182,9 @@ const VSnackbar = defineComponent({
15667
16182
  useRender(() => {
15668
16183
  var _slots$default, _slots$actions;
15669
16184
 
15670
- return createVNode("div", {
16185
+ return createVNode(VOverlay, {
16186
+ "modelValue": isActive.value,
16187
+ "onUpdate:modelValue": $event => isActive.value = $event,
15671
16188
  "class": ['v-snackbar', {
15672
16189
  'v-snackbar--active': isActive.value,
15673
16190
  'v-snackbar--bottom': props.bottom || !props.top,
@@ -15678,12 +16195,15 @@ const VSnackbar = defineComponent({
15678
16195
  'v-snackbar--top': props.top,
15679
16196
  'v-snackbar--vertical': props.vertical
15680
16197
  }, positionClasses.value],
15681
- "style": [colorStyles.value, positionStyles.value]
15682
- }, [createVNode(MaybeTransition, {
16198
+ "style": [colorStyles.value, positionStyles.value],
16199
+ "persistent": true,
16200
+ "noClickAnimation": true,
16201
+ "scrim": false,
16202
+ "scrollStrategy": "none",
15683
16203
  "transition": props.transition
15684
16204
  }, {
15685
- default: () => [withDirectives(createVNode("div", {
15686
- "class": ['v-snackbar__wrapper', colorClasses.value, variantClasses.value],
16205
+ default: () => [createVNode("div", {
16206
+ "class": ['v-snackbar__wrapper', colorClasses.value, roundedClasses.value, variantClasses.value],
15687
16207
  "onPointerenter": onPointerenter,
15688
16208
  "onPointerleave": startTimeout
15689
16209
  }, [genOverlays(false, 'v-snackbar'), slots.default && createVNode("div", {
@@ -15701,21 +16221,25 @@ const VSnackbar = defineComponent({
15701
16221
  default: () => [createVNode("div", {
15702
16222
  "class": "v-snackbar__actions"
15703
16223
  }, [(_slots$actions = slots.actions) == null ? void 0 : _slots$actions.call(slots)])]
15704
- })]), [[vShow, isActive.value]])]
15705
- })]);
16224
+ })])],
16225
+ activator: slots.activator
16226
+ });
15706
16227
  });
15707
16228
  }
15708
16229
 
15709
16230
  });
15710
16231
 
15711
- const VSwitch = defineComponent$1({
16232
+ const VSwitch = defineComponent({
15712
16233
  name: 'VSwitch',
15713
16234
  inheritAttrs: false,
15714
16235
  props: {
15715
16236
  indeterminate: Boolean,
15716
16237
  inset: Boolean,
15717
16238
  flat: Boolean,
15718
- ...makeLoaderProps(),
16239
+ loading: {
16240
+ type: [Boolean, String],
16241
+ default: false
16242
+ },
15719
16243
  ...makeVInputProps(),
15720
16244
  ...makeSelectionControlProps()
15721
16245
  },
@@ -15775,7 +16299,7 @@ const VSwitch = defineComponent$1({
15775
16299
  "aria-checked": indeterminate.value ? 'mixed' : undefined,
15776
16300
  "disabled": isDisabled.value,
15777
16301
  "readonly": isReadonly.value
15778
- }, controlAttrs), {
16302
+ }, controlAttrs), { ...slots,
15779
16303
  default: () => createVNode("div", {
15780
16304
  "class": "v-switch__track",
15781
16305
  "onClick": onClick
@@ -15813,10 +16337,10 @@ const VSystemBar = defineComponent({
15813
16337
  name: 'VSystemBar',
15814
16338
  props: {
15815
16339
  color: String,
16340
+ height: [Number, String],
15816
16341
  window: Boolean,
15817
- ...makeDimensionProps(),
15818
16342
  ...makeElevationProps(),
15819
- ...makePositionProps(),
16343
+ ...makeLayoutItemProps(),
15820
16344
  ...makeRoundedProps(),
15821
16345
  ...makeTagProps(),
15822
16346
  ...makeThemeProps()
@@ -15833,29 +16357,48 @@ const VSystemBar = defineComponent({
15833
16357
  backgroundColorClasses,
15834
16358
  backgroundColorStyles
15835
16359
  } = useBackgroundColor(toRef(props, 'color'));
15836
- const {
15837
- dimensionStyles
15838
- } = useDimension(props);
15839
16360
  const {
15840
16361
  elevationClasses
15841
16362
  } = useElevation(props);
15842
- const {
15843
- positionClasses,
15844
- positionStyles
15845
- } = usePosition(props);
15846
16363
  const {
15847
16364
  roundedClasses
15848
16365
  } = useRounded(props);
16366
+ const height = computed(() => {
16367
+ var _props$height;
16368
+
16369
+ return ((_props$height = props.height) != null ? _props$height : props.window) ? 32 : 24;
16370
+ });
16371
+ const {
16372
+ layoutItemStyles
16373
+ } = useLayoutItem({
16374
+ id: props.name,
16375
+ priority: computed(() => parseInt(props.priority, 10)),
16376
+ position: ref('top'),
16377
+ layoutSize: height,
16378
+ elementSize: height,
16379
+ active: computed(() => true),
16380
+ absolute: toRef(props, 'absolute')
16381
+ });
16382
+ provideDefaults({
16383
+ VBtn: {
16384
+ variant: 'text',
16385
+ density: 'compact'
16386
+ }
16387
+ }, {
16388
+ scoped: true
16389
+ });
15849
16390
  return () => createVNode(props.tag, {
15850
16391
  "class": ['v-system-bar', {
15851
16392
  'v-system-bar--window': props.window
15852
- }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, positionClasses.value, roundedClasses.value],
15853
- "style": [backgroundColorStyles.value, dimensionStyles.value, positionStyles.value]
16393
+ }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value, roundedClasses.value],
16394
+ "style": [backgroundColorStyles.value, layoutItemStyles.value]
15854
16395
  }, slots);
15855
16396
  }
15856
16397
 
15857
16398
  });
15858
16399
 
16400
+ const VTabsSymbol = Symbol.for('vuetify:v-tabs');
16401
+
15859
16402
  const VTab = defineComponent({
15860
16403
  name: 'VTab',
15861
16404
  props: {
@@ -15889,31 +16432,22 @@ const VTab = defineComponent({
15889
16432
  slots,
15890
16433
  attrs
15891
16434
  } = _ref;
15892
- const {
15893
- isSelected,
15894
- select,
15895
- selectedClass
15896
- } = useGroupItem(props, VTabsSymbol);
15897
16435
  const {
15898
16436
  textColorClasses: sliderColorClasses,
15899
16437
  textColorStyles: sliderColorStyles
15900
16438
  } = useTextColor(props, 'sliderColor');
15901
16439
  const isHorizontal = computed(() => props.direction === 'horizontal');
15902
- provideDefaults({
15903
- VBtn: {
15904
- block: toRef(props, 'fixed'),
15905
- maxWidth: computed(() => props.fixed ? 300 : undefined),
15906
- color: computed(() => isSelected.value ? props.color : undefined),
15907
- variant: 'text',
15908
- rounded: 0
15909
- }
15910
- }, {
15911
- scoped: true
15912
- });
16440
+ const isSelected = ref(false);
15913
16441
  const rootEl = ref();
15914
16442
  const sliderEl = ref();
15915
- watch(isSelected, isSelected => {
15916
- if (isSelected) {
16443
+
16444
+ function updateSlider(_ref2) {
16445
+ let {
16446
+ value
16447
+ } = _ref2;
16448
+ isSelected.value = value;
16449
+
16450
+ if (value) {
15917
16451
  var _rootEl$value, _rootEl$value$$el$par;
15918
16452
 
15919
16453
  const prevEl = (_rootEl$value = rootEl.value) == null ? void 0 : (_rootEl$value$$el$par = _rootEl$value.$el.parentElement) == null ? void 0 : _rootEl$value$$el$par.querySelector('.v-tab--selected .v-tab__slider');
@@ -15943,17 +16477,25 @@ const VTab = defineComponent({
15943
16477
  easing: standardEasing
15944
16478
  });
15945
16479
  }
15946
- });
16480
+ }
16481
+
15947
16482
  useRender(() => {
15948
- const [btnProps] = pick(props, ['href', 'to', 'replace', 'icon', 'stacked', 'prependIcon', 'appendIcon', 'ripple', 'theme', 'disabled']);
16483
+ const [btnProps] = pick(props, ['href', 'to', 'replace', 'icon', 'stacked', 'prependIcon', 'appendIcon', 'ripple', 'theme', 'disabled', 'selectedClass', 'value', 'color']);
15949
16484
  return createVNode(VBtn, mergeProps({
16485
+ "_as": "VTab",
16486
+ "symbol": VTabsSymbol,
15950
16487
  "ref": rootEl,
15951
- "class": ['v-tab', selectedClass.value],
16488
+ "class": ['v-tab'],
15952
16489
  "tabindex": isSelected.value ? 0 : -1,
15953
16490
  "role": "tab",
15954
16491
  "aria-selected": String(isSelected.value),
15955
- "onClick": () => !props.disabled && select(!isSelected.value)
15956
- }, btnProps, attrs), {
16492
+ "block": props.fixed,
16493
+ "maxWidth": props.fixed ? 300 : undefined,
16494
+ "variant": "text",
16495
+ "rounded": 0
16496
+ }, btnProps, attrs, {
16497
+ "onGroup:selected": updateSlider
16498
+ }), {
15957
16499
  default: () => [slots.default ? slots.default() : props.title, !props.hideSlider && createVNode("div", {
15958
16500
  "ref": sliderEl,
15959
16501
  "class": ['v-tab__slider', sliderColorClasses.value],
@@ -15961,9 +16503,7 @@ const VTab = defineComponent({
15961
16503
  }, null)]
15962
16504
  });
15963
16505
  });
15964
- return {
15965
- isSelected
15966
- };
16506
+ return {};
15967
16507
  }
15968
16508
 
15969
16509
  });
@@ -15979,7 +16519,6 @@ function parseItems(items) {
15979
16519
  });
15980
16520
  }
15981
16521
 
15982
- const VTabsSymbol = Symbol.for('vuetify:v-tabs');
15983
16522
  const VTabs = defineComponent({
15984
16523
  name: 'VTabs',
15985
16524
  props: {
@@ -16004,7 +16543,7 @@ const VTabs = defineComponent({
16004
16543
  },
16005
16544
  hideSlider: Boolean,
16006
16545
  optional: Boolean,
16007
- right: Boolean,
16546
+ end: Boolean,
16008
16547
  sliderColor: String,
16009
16548
  modelValue: null,
16010
16549
  ...makeDensityProps(),
@@ -16043,7 +16582,7 @@ const VTabs = defineComponent({
16043
16582
  'v-tabs--centered': props.centered,
16044
16583
  'v-tabs--fixed-tabs': props.fixedTabs,
16045
16584
  'v-tabs--grow': props.grow,
16046
- 'v-tabs--right': props.right,
16585
+ 'v-tabs--end': props.end,
16047
16586
  'v-tabs--stacked': props.stacked
16048
16587
  }, densityClasses.value, backgroundColorClasses.value],
16049
16588
  "style": backgroundColorStyles.value,
@@ -16357,7 +16896,96 @@ const VThemeProvider = defineComponent({
16357
16896
 
16358
16897
  const VTimelineSymbol = Symbol.for('vuetify:timeline');
16359
16898
 
16360
- const VTimelineDivider = defineComponent$1({
16899
+ const VTimeline = defineComponent({
16900
+ name: 'VTimeline',
16901
+ props: {
16902
+ align: {
16903
+ type: String,
16904
+ default: 'center',
16905
+ validator: v => ['center', 'start'].includes(v)
16906
+ },
16907
+ direction: {
16908
+ type: String,
16909
+ default: 'vertical',
16910
+ validator: v => ['vertical', 'horizontal'].includes(v)
16911
+ },
16912
+ side: {
16913
+ type: String,
16914
+ validator: v => v == null || ['start', 'end'].includes(v)
16915
+ },
16916
+ lineInset: {
16917
+ type: [String, Number],
16918
+ default: 0
16919
+ },
16920
+ lineThickness: {
16921
+ type: [String, Number],
16922
+ default: 2
16923
+ },
16924
+ lineColor: String,
16925
+ truncateLine: {
16926
+ type: String,
16927
+ validator: v => ['start', 'end', 'both'].includes(v)
16928
+ },
16929
+ ...makeDensityProps(),
16930
+ ...makeTagProps(),
16931
+ ...makeThemeProps()
16932
+ },
16933
+
16934
+ setup(props, _ref) {
16935
+ let {
16936
+ slots
16937
+ } = _ref;
16938
+ const {
16939
+ themeClasses
16940
+ } = provideTheme(props);
16941
+ const {
16942
+ densityClasses
16943
+ } = useDensity(props);
16944
+ provide(VTimelineSymbol, {
16945
+ density: toRef(props, 'density'),
16946
+ lineColor: toRef(props, 'lineColor')
16947
+ });
16948
+ const sideClass = computed(() => {
16949
+ const side = props.side ? props.side : props.density !== 'default' ? 'end' : null;
16950
+ return side && `v-timeline--side-${side}`;
16951
+ });
16952
+ const truncateClasses = computed(() => {
16953
+ const classes = ['v-timeline--truncate-line-start', 'v-timeline--truncate-line-end'];
16954
+
16955
+ switch (props.truncateLine) {
16956
+ case 'both':
16957
+ return classes;
16958
+
16959
+ case 'start':
16960
+ return classes[0];
16961
+
16962
+ case 'end':
16963
+ return classes[1];
16964
+
16965
+ default:
16966
+ return null;
16967
+ }
16968
+ });
16969
+ return () => {
16970
+ var _slots$default;
16971
+
16972
+ return createVNode(props.tag, {
16973
+ "class": ['v-timeline', `v-timeline--${props.direction}`, `v-timeline--align-${props.align}`, !props.lineInset && truncateClasses.value, {
16974
+ 'v-timeline--inset-line': !!props.lineInset
16975
+ }, themeClasses.value, densityClasses.value, sideClass.value],
16976
+ "style": {
16977
+ '--v-timeline-line-thickness': convertToUnit(props.lineThickness),
16978
+ '--v-timeline-line-inset': convertToUnit(props.lineInset)
16979
+ }
16980
+ }, {
16981
+ default: () => [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]
16982
+ });
16983
+ };
16984
+ }
16985
+
16986
+ });
16987
+
16988
+ const VTimelineDivider = defineComponent({
16361
16989
  name: 'VTimelineDivider',
16362
16990
  props: {
16363
16991
  hideDot: Boolean,
@@ -16492,77 +17120,6 @@ const VTimelineItem = defineComponent({
16492
17120
 
16493
17121
  });
16494
17122
 
16495
- const VTimeline = defineComponent({
16496
- name: 'VTimeline',
16497
- props: {
16498
- direction: {
16499
- type: String,
16500
- default: 'vertical',
16501
- validator: v => ['vertical', 'horizontal'].includes(v)
16502
- },
16503
- side: {
16504
- type: String,
16505
- validator: v => v == null || ['start', 'end'].includes(v)
16506
- },
16507
- lineInset: {
16508
- type: [String, Number],
16509
- default: 0
16510
- },
16511
- lineThickness: {
16512
- type: [String, Number],
16513
- default: 2
16514
- },
16515
- lineColor: String,
16516
- truncateLine: {
16517
- type: String,
16518
- default: 'start',
16519
- validator: v => ['none', 'start', 'end', 'both'].includes(v)
16520
- },
16521
- ...makeDensityProps(),
16522
- ...makeTagProps(),
16523
- ...makeThemeProps()
16524
- },
16525
-
16526
- setup(props, _ref) {
16527
- let {
16528
- slots
16529
- } = _ref;
16530
- const {
16531
- themeClasses
16532
- } = provideTheme(props);
16533
- const {
16534
- densityClasses
16535
- } = useDensity(props);
16536
- provide(VTimelineSymbol, {
16537
- density: toRef(props, 'density'),
16538
- lineColor: toRef(props, 'lineColor')
16539
- });
16540
- const sideClass = computed(() => {
16541
- const side = props.side ? props.side : props.density !== 'default' ? 'end' : null;
16542
- return side && `v-timeline--side-${side}`;
16543
- });
16544
- return () => {
16545
- var _slots$default;
16546
-
16547
- return createVNode(props.tag, {
16548
- "class": ['v-timeline', `v-timeline--${props.direction}`, {
16549
- 'v-timeline--inset-line': !!props.lineInset,
16550
- 'v-timeline--truncate-line-end': props.truncateLine === 'end' || props.truncateLine === 'both'
16551
- }, themeClasses.value, densityClasses.value, sideClass.value],
16552
- "style": {
16553
- '--v-timeline-line-thickness': convertToUnit(props.lineThickness),
16554
- '--v-timeline-line-inset': convertToUnit(props.lineInset)
16555
- }
16556
- }, {
16557
- default: () => [(props.truncateLine === 'none' || props.truncateLine === 'end') && createVNode(VTimelineItem, {
16558
- "hideDot": true
16559
- }, null), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]
16560
- });
16561
- };
16562
- }
16563
-
16564
- });
16565
-
16566
17123
  const VTooltip = genericComponent()({
16567
17124
  name: 'VTooltip',
16568
17125
  inheritAttrs: false,
@@ -16680,6 +17237,8 @@ var components = /*#__PURE__*/Object.freeze({
16680
17237
  VBadge: VBadge,
16681
17238
  VBanner: VBanner,
16682
17239
  VBannerActions: VBannerActions,
17240
+ VBannerAvatar: VBannerAvatar,
17241
+ VBannerIcon: VBannerIcon,
16683
17242
  VBannerText: VBannerText,
16684
17243
  VBottomNavigation: VBottomNavigation,
16685
17244
  VBreadcrumbs: VBreadcrumbs,
@@ -16691,6 +17250,7 @@ var components = /*#__PURE__*/Object.freeze({
16691
17250
  VCard: VCard,
16692
17251
  VCardActions: VCardActions,
16693
17252
  VCardAvatar: VCardAvatar,
17253
+ VCardContent: VCardContent,
16694
17254
  VCardHeader: VCardHeader,
16695
17255
  VCardHeaderText: VCardHeaderText,
16696
17256
  VCardImg: VCardImg,
@@ -16741,8 +17301,10 @@ var components = /*#__PURE__*/Object.freeze({
16741
17301
  VListSubheader: VListSubheader,
16742
17302
  VListImg: VListImg,
16743
17303
  VListItem: VListItem,
17304
+ VListItemAction: VListItemAction,
16744
17305
  VListItemAvatar: VListItemAvatar,
16745
17306
  VListItemHeader: VListItemHeader,
17307
+ VListItemIcon: VListItemIcon,
16746
17308
  VListItemMedia: VListItemMedia,
16747
17309
  VListItemSubtitle: VListItemSubtitle,
16748
17310
  VListItemTitle: VListItemTitle,
@@ -17012,19 +17574,24 @@ const createVuetify$1 = function () {
17012
17574
 
17013
17575
  const install = app => {
17014
17576
  const {
17577
+ aliases: aliases$1 = {},
17015
17578
  components = {},
17016
17579
  directives = {},
17017
17580
  icons = {}
17018
17581
  } = options;
17019
17582
 
17020
17583
  for (const key in directives) {
17021
- const directive = directives[key];
17022
- app.directive(key, directive);
17584
+ app.directive(key, directives[key]);
17023
17585
  }
17024
17586
 
17025
17587
  for (const key in components) {
17026
- const component = components[key];
17027
- app.component(key, component);
17588
+ app.component(key, components[key]);
17589
+ }
17590
+
17591
+ for (const key in aliases$1) {
17592
+ app.component(key, defineComponent({ ...aliases$1[key],
17593
+ name: key
17594
+ }));
17028
17595
  }
17029
17596
 
17030
17597
  app.provide(DefaultsSymbol, createDefaults(options.defaults));
@@ -17035,7 +17602,7 @@ const createVuetify$1 = function () {
17035
17602
  sets: { ...defaultSets,
17036
17603
  mdi
17037
17604
  },
17038
- aliases
17605
+ aliases: aliases
17039
17606
  }, icons));
17040
17607
  const {
17041
17608
  adapter,
@@ -17085,7 +17652,7 @@ const createVuetify = function () {
17085
17652
  ...options
17086
17653
  });
17087
17654
  };
17088
- const version = "3.0.0-beta.0";
17655
+ const version = "3.0.0-beta.2";
17089
17656
 
17090
17657
  export { components, createVuetify, directives, provideRtl, useDisplay, useLayout, useRtl, useTheme, version };
17091
17658
  //# sourceMappingURL=vuetify.esm.js.map