vuetify 3.2.4 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +2503 -2151
  3. package/dist/json/importMap-labs.json +12 -4
  4. package/dist/json/importMap.json +28 -28
  5. package/dist/json/tags.json +107 -9
  6. package/dist/json/web-types.json +10785 -7110
  7. package/dist/vuetify-labs.css +263 -153
  8. package/dist/vuetify-labs.d.ts +35870 -16257
  9. package/dist/vuetify-labs.esm.js +1466 -934
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +1465 -933
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +246 -168
  14. package/dist/vuetify.d.ts +27883 -14061
  15. package/dist/vuetify.esm.js +477 -300
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +476 -299
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +811 -806
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/blueprints/{index.d.ts → index.d.mts} +5 -1
  23. package/lib/blueprints/{md1.d.ts → md1.d.mts} +5 -1
  24. package/lib/blueprints/{md2.d.ts → md2.d.mts} +5 -1
  25. package/lib/blueprints/{md3.d.ts → md3.d.mts} +5 -1
  26. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  27. package/lib/components/VAlert/{index.d.ts → index.d.mts} +284 -69
  28. package/lib/components/VApp/{index.d.ts → index.d.mts} +80 -19
  29. package/lib/components/VAppBar/{index.d.ts → index.d.mts} +391 -119
  30. package/lib/components/VAutocomplete/VAutocomplete.css +15 -9
  31. package/lib/components/VAutocomplete/VAutocomplete.mjs +82 -34
  32. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  33. package/lib/components/VAutocomplete/VAutocomplete.sass +15 -11
  34. package/lib/components/VAutocomplete/index.d.mts +2048 -0
  35. package/lib/components/VAvatar/{index.d.ts → index.d.mts} +85 -30
  36. package/lib/components/VBadge/_variables.scss +1 -1
  37. package/lib/components/VBadge/{index.d.ts → index.d.mts} +105 -42
  38. package/lib/components/VBanner/{index.d.ts → index.d.mts} +282 -63
  39. package/lib/components/VBottomNavigation/{index.d.ts → index.d.mts} +93 -45
  40. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +1 -1
  41. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  42. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +1 -1
  43. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  44. package/lib/components/VBreadcrumbs/{index.d.ts → index.d.mts} +348 -212
  45. package/lib/components/VBtn/{index.d.ts → index.d.mts} +139 -53
  46. package/lib/components/VBtnGroup/{index.d.ts → index.d.mts} +84 -27
  47. package/lib/components/VBtnToggle/{index.d.ts → index.d.mts} +88 -35
  48. package/lib/components/VCalendar/util/props.mjs.map +1 -1
  49. package/lib/components/VCard/VCard.mjs.map +1 -1
  50. package/lib/components/VCard/{index.d.ts → index.d.mts} +957 -419
  51. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  52. package/lib/components/VCarousel/{index.d.ts → index.d.mts} +616 -111
  53. package/lib/components/VCheckbox/VCheckboxBtn.mjs +3 -3
  54. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  55. package/lib/components/VCheckbox/{index.d.ts → index.d.mts} +408 -141
  56. package/lib/components/VChip/VChip.css +4 -2
  57. package/lib/components/VChip/VChip.mjs.map +1 -1
  58. package/lib/components/VChip/VChip.sass +3 -2
  59. package/lib/components/VChip/{index.d.ts → index.d.mts} +376 -85
  60. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  61. package/lib/components/VChipGroup/index.d.mts +470 -0
  62. package/lib/components/VCode/{index.d.ts → index.d.mts} +78 -17
  63. package/lib/components/VColorPicker/VColorPicker.mjs +9 -4
  64. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  65. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  66. package/lib/components/VColorPicker/VColorPickerSwatches.mjs +5 -4
  67. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  68. package/lib/components/VColorPicker/{index.d.ts → index.d.mts} +241 -109
  69. package/lib/components/VColorPicker/util/index.mjs +2 -22
  70. package/lib/components/VColorPicker/util/index.mjs.map +1 -1
  71. package/lib/components/VCombobox/VCombobox.css +15 -9
  72. package/lib/components/VCombobox/VCombobox.mjs +82 -37
  73. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  74. package/lib/components/VCombobox/VCombobox.sass +15 -11
  75. package/lib/components/VCombobox/index.d.mts +2060 -0
  76. package/lib/components/VCounter/VCounter.mjs.map +1 -1
  77. package/lib/components/VCounter/{index.d.ts → index.d.mts} +105 -45
  78. package/lib/components/VDefaultsProvider/{index.d.ts → index.d.mts} +82 -20
  79. package/lib/components/VDialog/{index.d.ts → index.d.mts} +571 -305
  80. package/lib/components/VDivider/{index.d.ts → index.d.mts} +81 -21
  81. package/lib/components/VExpansionPanel/{index.d.ts → index.d.mts} +374 -110
  82. package/lib/components/VField/VField.css +49 -16
  83. package/lib/components/VField/VField.mjs +12 -2
  84. package/lib/components/VField/VField.mjs.map +1 -1
  85. package/lib/components/VField/VField.sass +40 -11
  86. package/lib/components/VField/_variables.scss +8 -2
  87. package/lib/components/VField/index.d.mts +682 -0
  88. package/lib/components/VFileInput/VFileInput.css +3 -0
  89. package/lib/components/VFileInput/VFileInput.mjs +7 -1
  90. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  91. package/lib/components/VFileInput/VFileInput.sass +6 -1
  92. package/lib/components/VFileInput/{index.d.ts → index.d.mts} +1033 -399
  93. package/lib/components/VFooter/{index.d.ts → index.d.mts} +85 -29
  94. package/lib/components/VForm/VForm.mjs.map +1 -1
  95. package/lib/components/VForm/index.d.mts +993 -0
  96. package/lib/components/VGrid/{index.d.ts → index.d.mts} +334 -100
  97. package/lib/components/VHover/VHover.mjs.map +1 -1
  98. package/lib/components/VHover/{index.d.ts → index.d.mts} +120 -37
  99. package/lib/components/VIcon/{index.d.ts → index.d.mts} +322 -81
  100. package/lib/components/VImg/VImg.css +2 -4
  101. package/lib/components/VImg/VImg.mjs +25 -24
  102. package/lib/components/VImg/VImg.mjs.map +1 -1
  103. package/lib/components/VImg/VImg.sass +4 -3
  104. package/lib/components/VImg/{index.d.ts → index.d.mts} +177 -40
  105. package/lib/components/VInput/VInput.css +10 -4
  106. package/lib/components/VInput/VInput.mjs +9 -3
  107. package/lib/components/VInput/VInput.mjs.map +1 -1
  108. package/lib/components/VInput/VInput.sass +7 -2
  109. package/lib/components/VInput/_variables.scss +1 -0
  110. package/lib/components/VInput/{index.d.ts → index.d.mts} +237 -93
  111. package/lib/components/VItemGroup/VItem.mjs +1 -1
  112. package/lib/components/VItemGroup/VItem.mjs.map +1 -1
  113. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  114. package/lib/components/VItemGroup/index.d.mts +781 -0
  115. package/lib/components/VKbd/{index.d.ts → index.d.mts} +78 -17
  116. package/lib/components/VLabel/{index.d.ts → index.d.mts} +79 -18
  117. package/lib/components/VLayout/{index.d.ts → index.d.mts} +161 -42
  118. package/lib/components/VLazy/{index.d.ts → index.d.mts} +82 -27
  119. package/lib/components/VList/VList.mjs +6 -1
  120. package/lib/components/VList/VList.mjs.map +1 -1
  121. package/lib/components/VList/VListChildren.mjs +4 -8
  122. package/lib/components/VList/VListChildren.mjs.map +1 -1
  123. package/lib/components/VList/VListGroup.mjs +3 -0
  124. package/lib/components/VList/VListGroup.mjs.map +1 -1
  125. package/lib/components/VList/VListItem.mjs +11 -6
  126. package/lib/components/VList/VListItem.mjs.map +1 -1
  127. package/lib/components/VList/{index.d.ts → index.d.mts} +1245 -619
  128. package/lib/components/VLocaleProvider/{index.d.ts → index.d.mts} +80 -19
  129. package/lib/components/VMain/{index.d.ts → index.d.mts} +79 -19
  130. package/lib/components/VMenu/{index.d.ts → index.d.mts} +567 -299
  131. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  132. package/lib/components/VMessages/{index.d.ts → index.d.mts} +87 -34
  133. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +2 -0
  134. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  135. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +2 -0
  136. package/lib/components/VNavigationDrawer/{index.d.ts → index.d.mts} +139 -57
  137. package/lib/components/VOverlay/{index.d.ts → index.d.mts} +159 -75
  138. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  139. package/lib/components/VPagination/{index.d.ts → index.d.mts} +229 -125
  140. package/lib/components/VParallax/{index.d.ts → index.d.mts} +118 -18
  141. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  142. package/lib/components/VProgressCircular/{index.d.ts → index.d.mts} +148 -45
  143. package/lib/components/VProgressLinear/{index.d.ts → index.d.mts} +119 -52
  144. package/lib/components/VRadio/{index.d.ts → index.d.mts} +139 -40
  145. package/lib/components/VRadioGroup/{index.d.ts → index.d.mts} +265 -93
  146. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -4
  147. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  148. package/lib/components/VRangeSlider/{index.d.ts → index.d.mts} +313 -132
  149. package/lib/components/VRating/{index.d.ts → index.d.mts} +108 -49
  150. package/lib/components/VResponsive/VResponsive.css +13 -5
  151. package/lib/components/VResponsive/VResponsive.mjs +4 -1
  152. package/lib/components/VResponsive/VResponsive.mjs.map +1 -1
  153. package/lib/components/VResponsive/VResponsive.sass +12 -4
  154. package/lib/components/VResponsive/{index.d.ts → index.d.mts} +99 -16
  155. package/lib/components/VSelect/VSelect.css +15 -9
  156. package/lib/components/VSelect/VSelect.mjs +23 -18
  157. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  158. package/lib/components/VSelect/VSelect.sass +14 -11
  159. package/lib/components/VSelect/index.d.mts +1986 -0
  160. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  161. package/lib/components/VSelectionControl/index.d.mts +403 -0
  162. package/lib/components/VSelectionControlGroup/{index.d.ts → index.d.mts} +90 -38
  163. package/lib/components/VSheet/{index.d.ts → index.d.mts} +81 -21
  164. package/lib/components/VSlideGroup/{index.d.ts → index.d.mts} +236 -61
  165. package/lib/components/VSlider/VSlider.mjs +2 -2
  166. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  167. package/lib/components/VSlider/VSliderThumb.mjs +1 -1
  168. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  169. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  170. package/lib/components/VSlider/{index.d.ts → index.d.mts} +308 -126
  171. package/lib/components/VSlider/slider.mjs +8 -2
  172. package/lib/components/VSlider/slider.mjs.map +1 -1
  173. package/lib/components/VSnackbar/{index.d.ts → index.d.mts} +566 -297
  174. package/lib/components/VSwitch/VSwitch.css +3 -3
  175. package/lib/components/VSwitch/VSwitch.sass +4 -3
  176. package/lib/components/VSwitch/{index.d.ts → index.d.mts} +284 -101
  177. package/lib/components/VSystemBar/{index.d.ts → index.d.mts} +84 -27
  178. package/lib/components/VTable/{index.d.ts → index.d.mts} +122 -26
  179. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  180. package/lib/components/VTabs/{index.d.ts → index.d.mts} +203 -113
  181. package/lib/components/VTextField/VTextField.css +9 -1
  182. package/lib/components/VTextField/VTextField.mjs +4 -2
  183. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  184. package/lib/components/VTextField/VTextField.sass +8 -1
  185. package/lib/components/VTextField/index.d.mts +2735 -0
  186. package/lib/components/VTextarea/VTextarea.mjs +13 -4
  187. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  188. package/lib/components/VTextarea/{index.d.ts → index.d.mts} +933 -393
  189. package/lib/components/VThemeProvider/{index.d.ts → index.d.mts} +80 -20
  190. package/lib/components/VTimeline/{index.d.ts → index.d.mts} +201 -62
  191. package/lib/components/VToolbar/{index.d.ts → index.d.mts} +325 -73
  192. package/lib/components/VTooltip/{index.d.ts → index.d.mts} +568 -297
  193. package/lib/components/VValidation/VValidation.mjs.map +1 -1
  194. package/lib/components/VValidation/index.d.mts +634 -0
  195. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  196. package/lib/components/VVirtualScroll/index.d.mts +229 -0
  197. package/lib/components/VWindow/{index.d.ts → index.d.mts} +271 -68
  198. package/lib/components/{index.d.ts → index.d.mts} +27847 -14031
  199. package/lib/components/index.mjs +2 -3
  200. package/lib/components/index.mjs.map +1 -1
  201. package/lib/components/transitions/{index.d.ts → index.d.mts} +1330 -355
  202. package/lib/composables/display.mjs +6 -6
  203. package/lib/composables/display.mjs.map +1 -1
  204. package/lib/composables/filter.mjs +5 -4
  205. package/lib/composables/filter.mjs.map +1 -1
  206. package/lib/composables/form.mjs +2 -3
  207. package/lib/composables/form.mjs.map +1 -1
  208. package/lib/composables/forwardRefs.mjs.map +1 -1
  209. package/lib/composables/group.mjs +13 -13
  210. package/lib/composables/group.mjs.map +1 -1
  211. package/lib/composables/icons.mjs.map +1 -1
  212. package/lib/composables/{items.mjs → list-items.mjs} +9 -6
  213. package/lib/composables/list-items.mjs.map +1 -0
  214. package/lib/composables/nested/nested.mjs.map +1 -1
  215. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  216. package/lib/composables/scroll.mjs +2 -2
  217. package/lib/composables/scroll.mjs.map +1 -1
  218. package/lib/composables/validation.mjs +44 -16
  219. package/lib/composables/validation.mjs.map +1 -1
  220. package/lib/entry-bundler.mjs +1 -1
  221. package/lib/framework.mjs +1 -1
  222. package/lib/framework.mjs.map +1 -1
  223. package/lib/{index.d.ts → index.d.mts} +16 -10
  224. package/lib/labs/VBottomSheet/VBottomSheet.css +33 -0
  225. package/lib/labs/VBottomSheet/VBottomSheet.mjs +40 -0
  226. package/lib/labs/VBottomSheet/VBottomSheet.mjs.map +1 -0
  227. package/lib/labs/VBottomSheet/VBottomSheet.sass +37 -0
  228. package/lib/labs/VBottomSheet/_variables.scss +5 -0
  229. package/lib/labs/VBottomSheet/index.d.mts +871 -0
  230. package/lib/labs/VBottomSheet/index.mjs +2 -0
  231. package/lib/labs/VBottomSheet/index.mjs.map +1 -0
  232. package/lib/labs/VDataIterator/VDataIterator.mjs +160 -0
  233. package/lib/labs/VDataIterator/VDataIterator.mjs.map +1 -0
  234. package/lib/labs/VDataIterator/composables/items.mjs +37 -0
  235. package/lib/labs/VDataIterator/composables/items.mjs.map +1 -0
  236. package/lib/labs/VDataIterator/index.d.mts +704 -0
  237. package/lib/labs/VDataIterator/index.mjs +2 -0
  238. package/lib/labs/VDataIterator/index.mjs.map +1 -0
  239. package/lib/labs/VDataTable/VDataTable.mjs +58 -20
  240. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  241. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  242. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -1
  243. package/lib/labs/VDataTable/VDataTableHeaders.mjs +17 -10
  244. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  245. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  246. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  247. package/lib/labs/VDataTable/VDataTableServer.mjs +50 -14
  248. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  249. package/lib/labs/VDataTable/VDataTableVirtual.mjs +50 -13
  250. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  251. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -1
  252. package/lib/labs/VDataTable/composables/group.mjs +8 -6
  253. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  254. package/lib/labs/VDataTable/composables/headers.mjs +2 -3
  255. package/lib/labs/VDataTable/composables/headers.mjs.map +1 -1
  256. package/lib/labs/VDataTable/composables/items.mjs +31 -32
  257. package/lib/labs/VDataTable/composables/items.mjs.map +1 -1
  258. package/lib/labs/VDataTable/composables/paginate.mjs +14 -2
  259. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  260. package/lib/labs/VDataTable/composables/select.mjs +3 -3
  261. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  262. package/lib/labs/VDataTable/composables/sort.mjs +17 -17
  263. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  264. package/lib/labs/VDataTable/composables/virtual.mjs.map +1 -1
  265. package/lib/labs/VDataTable/index.d.mts +9681 -0
  266. package/lib/labs/VDataTable/index.mjs +1 -1
  267. package/lib/labs/VDataTable/index.mjs.map +1 -1
  268. package/lib/labs/VDataTable/types.mjs.map +1 -1
  269. package/lib/labs/VInfiniteScroll/VInfiniteScroll.mjs.map +1 -1
  270. package/lib/labs/VInfiniteScroll/{index.d.ts → index.d.mts} +161 -54
  271. package/lib/labs/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  272. package/lib/labs/VSkeletonLoader/{index.d.ts → index.d.mts} +92 -31
  273. package/lib/labs/components.d.mts +11806 -0
  274. package/lib/labs/components.mjs +2 -0
  275. package/lib/labs/components.mjs.map +1 -1
  276. package/lib/labs/date/date.mjs.map +1 -1
  277. package/lib/labs/date/index.d.mts +70 -0
  278. package/lib/labs/date/index.mjs +1 -1
  279. package/lib/labs/date/index.mjs.map +1 -1
  280. package/lib/styles/settings/_variables.scss +3 -3
  281. package/lib/util/colorUtils.mjs +68 -3
  282. package/lib/util/colorUtils.mjs.map +1 -1
  283. package/lib/util/console.mjs +12 -81
  284. package/lib/util/console.mjs.map +1 -1
  285. package/lib/util/defineComponent.mjs.map +1 -1
  286. package/lib/util/helpers.mjs +4 -18
  287. package/lib/util/helpers.mjs.map +1 -1
  288. package/lib/util/propsFactory.mjs +2 -0
  289. package/lib/util/propsFactory.mjs.map +1 -1
  290. package/package.json +13 -9
  291. package/lib/components/VAutocomplete/index.d.ts +0 -2050
  292. package/lib/components/VBottomSheet/VBottomSheet.mjs +0 -29
  293. package/lib/components/VBottomSheet/VBottomSheet.mjs.map +0 -1
  294. package/lib/components/VBottomSheet/VBottomSheet.sass +0 -23
  295. package/lib/components/VBottomSheet/_variables.scss +0 -3
  296. package/lib/components/VBottomSheet/index.mjs +0 -4
  297. package/lib/components/VBottomSheet/index.mjs.map +0 -1
  298. package/lib/components/VChipGroup/index.d.ts +0 -280
  299. package/lib/components/VCombobox/index.d.ts +0 -2086
  300. package/lib/components/VData/VData.mjs +0 -374
  301. package/lib/components/VData/VData.mjs.map +0 -1
  302. package/lib/components/VData/index.mjs +0 -4
  303. package/lib/components/VData/index.mjs.map +0 -1
  304. package/lib/components/VDataIterator/VDataFooter.mjs +0 -194
  305. package/lib/components/VDataIterator/VDataFooter.mjs.map +0 -1
  306. package/lib/components/VDataIterator/VDataFooter.sass +0 -71
  307. package/lib/components/VDataIterator/VDataIterator.mjs +0 -316
  308. package/lib/components/VDataIterator/VDataIterator.mjs.map +0 -1
  309. package/lib/components/VDataIterator/_variables.scss +0 -13
  310. package/lib/components/VDataIterator/index.mjs +0 -10
  311. package/lib/components/VDataIterator/index.mjs.map +0 -1
  312. package/lib/components/VField/index.d.ts +0 -563
  313. package/lib/components/VForm/index.d.ts +0 -284
  314. package/lib/components/VItemGroup/index.d.ts +0 -396
  315. package/lib/components/VSelect/index.d.ts +0 -1981
  316. package/lib/components/VSelectionControl/index.d.ts +0 -387
  317. package/lib/components/VTextField/index.d.ts +0 -2061
  318. package/lib/components/VValidation/index.d.ts +0 -243
  319. package/lib/components/VVirtualScroll/index.d.ts +0 -197
  320. package/lib/composables/items.mjs.map +0 -1
  321. package/lib/labs/VDataTable/index.d.ts +0 -5415
  322. package/lib/labs/components.d.ts +0 -5945
  323. package/lib/labs/date/index.d.ts +0 -38
  324. /package/lib/components/VNoSsr/{index.d.ts → index.d.mts} +0 -0
  325. /package/lib/directives/{index.d.ts → index.d.mts} +0 -0
  326. /package/lib/iconsets/{fa-svg.d.ts → fa-svg.d.mts} +0 -0
  327. /package/lib/iconsets/{fa.d.ts → fa.d.mts} +0 -0
  328. /package/lib/iconsets/{fa4.d.ts → fa4.d.mts} +0 -0
  329. /package/lib/iconsets/{md.d.ts → md.d.mts} +0 -0
  330. /package/lib/iconsets/{mdi-svg.d.ts → mdi-svg.d.mts} +0 -0
  331. /package/lib/iconsets/{mdi.d.ts → mdi.d.mts} +0 -0
  332. /package/lib/labs/date/adapters/{vuetify.d.ts → vuetify.d.mts} +0 -0
  333. /package/lib/locale/adapters/{vue-i18n.d.ts → vue-i18n.d.mts} +0 -0
  334. /package/lib/locale/adapters/{vuetify.d.ts → vuetify.d.mts} +0 -0
  335. /package/lib/locale/{index.d.ts → index.d.mts} +0 -0
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.2.4
2
+ * Vuetify v3.3.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -171,6 +171,9 @@
171
171
  function keys(o) {
172
172
  return Object.keys(o);
173
173
  }
174
+ function has(obj, key) {
175
+ return key.every(k => obj.hasOwnProperty(k));
176
+ }
174
177
  function pick(obj, paths, exclude) {
175
178
  const found = Object.create(null);
176
179
  const rest = Object.create(null);
@@ -386,6 +389,7 @@
386
389
  if (_el) _el.focus();else focusChild(el, location === 'next' ? 'first' : 'last');
387
390
  }
388
391
  }
392
+ function noop() {}
389
393
 
390
394
  const block = ['top', 'bottom'];
391
395
  const inline = ['start', 'end', 'left', 'right'];
@@ -538,79 +542,16 @@
538
542
  }
539
543
 
540
544
  /* eslint-disable no-console */
541
- // import Vuetify from '../framework'
542
-
543
- function createMessage(message, vm, parent) {
544
- // if (Vuetify.config.silent) return
545
545
 
546
- if (parent) {
547
- vm = {
548
- __isVue: true,
549
- $parent: parent,
550
- $options: vm
551
- };
552
- }
553
- if (vm) {
554
- // Only show each message once per instance
555
- vm.$_alreadyWarned = vm.$_alreadyWarned || [];
556
- if (vm.$_alreadyWarned.includes(message)) return;
557
- vm.$_alreadyWarned.push(message);
558
- }
559
- return `[Vuetify] ${message}` + (vm ? generateComponentTrace(vm) : '');
546
+ function consoleWarn(message) {
547
+ vue.warn(`Vuetify: ${message}`);
560
548
  }
561
- function consoleWarn(message, vm, parent) {
562
- const newMessage = createMessage(message, vm, parent);
563
- newMessage != null && console.warn(newMessage);
549
+ function consoleError(message) {
550
+ vue.warn(`Vuetify error: ${message}`);
564
551
  }
565
- function consoleError(message, vm, parent) {
566
- const newMessage = createMessage(message, vm, parent);
567
- newMessage != null && console.error(newMessage);
568
- }
569
-
570
- /**
571
- * Shamelessly stolen from vuejs/vue/blob/dev/src/core/util/debug.js
572
- */
573
-
574
- const classifyRE = /(?:^|[-_])(\w)/g;
575
- const classify = str => str.replace(classifyRE, c => c.toUpperCase()).replace(/[-_]/g, '');
576
- function formatComponentName(vm, includeFile) {
577
- if (vm.$root === vm) {
578
- return '<Root>';
579
- }
580
- const options = typeof vm === 'function' && vm.cid != null ? vm.options : vm.__isVue ? vm.$options || vm.constructor.options : vm || {};
581
- let name = options.name || options._componentTag;
582
- const file = options.__file;
583
- if (!name && file) {
584
- const match = file.match(/([^/\\]+)\.vue$/);
585
- name = match?.[1];
586
- }
587
- return (name ? `<${classify(name)}>` : `<Anonymous>`) + (file && includeFile !== false ? ` at ${file}` : '');
588
- }
589
- function generateComponentTrace(vm) {
590
- if (vm.__isVue && vm.$parent) {
591
- const tree = [];
592
- let currentRecursiveSequence = 0;
593
- while (vm) {
594
- if (tree.length > 0) {
595
- const last = tree[tree.length - 1];
596
- if (last.constructor === vm.constructor) {
597
- currentRecursiveSequence++;
598
- vm = vm.$parent;
599
- continue;
600
- } else if (currentRecursiveSequence > 0) {
601
- tree[tree.length - 1] = [last, currentRecursiveSequence];
602
- currentRecursiveSequence = 0;
603
- }
604
- }
605
- tree.push(vm);
606
- vm = vm.$parent;
607
- }
608
- return '\n\nfound in\n\n' + tree.map((vm, i) => `${i === 0 ? '---> ' : ' '.repeat(5 + i * 2)}${Array.isArray(vm)
609
- // eslint-disable-next-line sonarjs/no-nested-template-literals
610
- ? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)` : formatComponentName(vm)}`).join('\n');
611
- } else {
612
- return `\n\n(found in ${formatComponentName(vm)})`;
613
- }
552
+ function deprecate(original, replacement) {
553
+ replacement = Array.isArray(replacement) ? replacement.slice(0, -1).map(s => `'${s}'`).join(', ') + ` or '${replacement.at(-1)}'` : `'${replacement}'`;
554
+ vue.warn(`[Vuetify UPGRADE] '${original}' is deprecated, use ${replacement} instead.`);
614
555
  }
615
556
 
616
557
  // For converting XYZ to sRGB
@@ -684,7 +625,46 @@
684
625
  function isCssColor(color) {
685
626
  return !!color && /^(#|var\(--|(rgb|hsl)a?\()/.test(color);
686
627
  }
687
- function parseColor$1(color) {
628
+ const cssColorRe = /^(?<fn>(?:rgb|hsl)a?)\((?<values>.+)\)/;
629
+ const mappers = {
630
+ rgb: (r, g, b, a) => ({
631
+ r,
632
+ g,
633
+ b,
634
+ a
635
+ }),
636
+ rgba: (r, g, b, a) => ({
637
+ r,
638
+ g,
639
+ b,
640
+ a
641
+ }),
642
+ hsl: (h, s, l, a) => HSLtoRGB({
643
+ h,
644
+ s,
645
+ l,
646
+ a
647
+ }),
648
+ hsla: (h, s, l, a) => HSLtoRGB({
649
+ h,
650
+ s,
651
+ l,
652
+ a
653
+ }),
654
+ hsv: (h, s, v, a) => HSVtoRGB({
655
+ h,
656
+ s,
657
+ v,
658
+ a
659
+ }),
660
+ hsva: (h, s, v, a) => HSVtoRGB({
661
+ h,
662
+ s,
663
+ v,
664
+ a
665
+ })
666
+ };
667
+ function parseColor(color) {
688
668
  if (typeof color === 'number') {
689
669
  if (isNaN(color) || color < 0 || color > 0xFFFFFF) {
690
670
  // int can't have opacity
@@ -695,6 +675,22 @@
695
675
  g: (color & 0xFF00) >> 8,
696
676
  b: color & 0xFF
697
677
  };
678
+ } else if (typeof color === 'string' && cssColorRe.test(color)) {
679
+ const {
680
+ groups
681
+ } = color.match(cssColorRe);
682
+ const {
683
+ fn,
684
+ values
685
+ } = groups;
686
+ const realValues = values.split(/,\s*/).map(v => {
687
+ if (v.endsWith('%') && ['hsl', 'hsla', 'hsv', 'hsva'].includes(fn)) {
688
+ return parseFloat(v) / 100;
689
+ } else {
690
+ return parseFloat(v);
691
+ }
692
+ });
693
+ return mappers[fn](...realValues);
698
694
  } else if (typeof color === 'string') {
699
695
  let hex = color.startsWith('#') ? color.slice(1) : color;
700
696
  if ([3, 4].includes(hex.length)) {
@@ -707,9 +703,16 @@
707
703
  consoleWarn(`'${color}' is not a valid hex(a) color`);
708
704
  }
709
705
  return HexToRGB(hex);
710
- } else {
711
- throw new TypeError(`Colors can only be numbers or strings, recieved ${color == null ? color : color.constructor.name} instead`);
706
+ } else if (typeof color === 'object') {
707
+ if (has(color, ['r', 'g', 'b'])) {
708
+ return color;
709
+ } else if (has(color, ['h', 's', 'l'])) {
710
+ return HSVtoRGB(HSLtoHSV(color));
711
+ } else if (has(color, ['h', 's', 'v'])) {
712
+ return HSVtoRGB(color);
713
+ }
712
714
  }
715
+ throw new TypeError(`Invalid color: ${color == null ? color : String(color) || color.constructor.name}\nExpected #hex, #hexa, rgb(), rgba(), hsl(), hsla(), object or number`);
713
716
  }
714
717
 
715
718
  /** Converts HSVA to RGBA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */
@@ -732,6 +735,9 @@
732
735
  a
733
736
  };
734
737
  }
738
+ function HSLtoRGB(hsla) {
739
+ return HSVtoRGB(HSLtoHSV(hsla));
740
+ }
735
741
 
736
742
  /** Converts RGBA to HSVA. Based on formula from https://en.wikipedia.org/wiki/HSL_and_HSV */
737
743
  function RGBtoHSV(rgba) {
@@ -870,7 +876,7 @@
870
876
  * @see https://www.w3.org/TR/WCAG20/#relativeluminancedef
871
877
  */
872
878
  function getLuma(color) {
873
- const rgb = parseColor$1(color);
879
+ const rgb = parseColor(color);
874
880
  return toXYZ$1(rgb)[1];
875
881
  }
876
882
 
@@ -886,6 +892,8 @@
886
892
  return (light + 0.05) / (dark + 0.05);
887
893
  }
888
894
 
895
+ // eslint-disable-line vue/prefer-import-from-vue
896
+
889
897
  /**
890
898
  * Creates a factory function for props definitions.
891
899
  * This is used to define props in a composable then override
@@ -1166,6 +1174,7 @@
1166
1174
  const acceleratedEasing = 'cubic-bezier(0.4, 0, 1, 1)'; // Leaving
1167
1175
 
1168
1176
  // Utilities
1177
+
1169
1178
  function getCurrentInstance(name, message) {
1170
1179
  const vm = vue.getCurrentInstance();
1171
1180
  if (!vm) {
@@ -1730,7 +1739,7 @@
1730
1739
  for (const variation of ['lighten', 'darken']) {
1731
1740
  const fn = variation === 'lighten' ? lighten : darken;
1732
1741
  for (const amount of createRange(parsedOptions.variations[variation], 1)) {
1733
- theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor$1(color), amount));
1742
+ theme.colors[`${name}-${variation}-${amount}`] = RGBtoHex(fn(parseColor(color), amount));
1734
1743
  }
1735
1744
  }
1736
1745
  }
@@ -1738,9 +1747,9 @@
1738
1747
  for (const color of Object.keys(theme.colors)) {
1739
1748
  if (/^on-[a-z]/.test(color) || theme.colors[`on-${color}`]) continue;
1740
1749
  const onColor = `on-${color}`;
1741
- const colorVal = parseColor$1(theme.colors[color]);
1742
- const blackContrast = Math.abs(APCAcontrast(parseColor$1(0), colorVal));
1743
- const whiteContrast = Math.abs(APCAcontrast(parseColor$1(0xffffff), colorVal));
1750
+ const colorVal = parseColor(theme.colors[color]);
1751
+ const blackContrast = Math.abs(APCAcontrast(parseColor(0), colorVal));
1752
+ const whiteContrast = Math.abs(APCAcontrast(parseColor(0xffffff), colorVal));
1744
1753
 
1745
1754
  // TODO: warn about poor color selections
1746
1755
  // const contrastAsText = Math.abs(APCAcontrast(colorVal, colorToInt(theme.colors.background)))
@@ -1872,14 +1881,14 @@
1872
1881
  const darkOverlay = theme.dark ? 1 : 2;
1873
1882
  const variables = [];
1874
1883
  for (const [key, value] of Object.entries(theme.colors)) {
1875
- const rgb = parseColor$1(value);
1884
+ const rgb = parseColor(value);
1876
1885
  variables.push(`--v-theme-${key}: ${rgb.r},${rgb.g},${rgb.b}`);
1877
1886
  if (!key.startsWith('on-')) {
1878
1887
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
1879
1888
  }
1880
1889
  }
1881
1890
  for (const [key, value] of Object.entries(theme.variables)) {
1882
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1891
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor(value) : undefined;
1883
1892
  const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1884
1893
  variables.push(`--v-${key}: ${rgb ?? value}`);
1885
1894
  }
@@ -2660,6 +2669,7 @@
2660
2669
  const makeVResponsiveProps = propsFactory({
2661
2670
  aspectRatio: [String, Number],
2662
2671
  contentClass: String,
2672
+ inline: Boolean,
2663
2673
  ...makeComponentProps(),
2664
2674
  ...makeDimensionProps()
2665
2675
  }, 'v-responsive');
@@ -2677,7 +2687,9 @@
2677
2687
  dimensionStyles
2678
2688
  } = useDimension(props);
2679
2689
  useRender(() => vue.createVNode("div", {
2680
- "class": ['v-responsive', props.class],
2690
+ "class": ['v-responsive', {
2691
+ 'v-responsive--inline': props.inline
2692
+ }, props.class],
2681
2693
  "style": [dimensionStyles.value, props.style]
2682
2694
  }, [vue.createVNode("div", {
2683
2695
  "class": "v-responsive__sizer",
@@ -2771,7 +2783,6 @@
2771
2783
  // Types
2772
2784
 
2773
2785
  const makeVImgProps = propsFactory({
2774
- aspectRatio: [String, Number],
2775
2786
  alt: String,
2776
2787
  cover: Boolean,
2777
2788
  eager: Boolean,
@@ -2793,7 +2804,7 @@
2793
2804
  default: ''
2794
2805
  },
2795
2806
  srcset: String,
2796
- width: [String, Number],
2807
+ ...makeVResponsiveProps(),
2797
2808
  ...makeComponentProps(),
2798
2809
  ...makeTransitionProps()
2799
2810
  }, 'v-img');
@@ -2985,25 +2996,27 @@
2985
2996
  }
2986
2997
  });
2987
2998
  }
2988
- useRender(() => vue.withDirectives(vue.createVNode(VResponsive, {
2989
- "class": ['v-img', {
2990
- 'v-img--booting': !isBooted.value
2991
- }, props.class],
2992
- "style": [{
2993
- width: convertToUnit(props.width === 'auto' ? naturalWidth.value : props.width)
2994
- }, props.style],
2995
- "aspectRatio": aspectRatio.value,
2996
- "aria-label": props.alt,
2997
- "role": props.alt ? 'img' : undefined
2998
- }, {
2999
- additional: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(__image, null, null), vue.createVNode(__preloadImage, null, null), vue.createVNode(__gradient, null, null), vue.createVNode(__placeholder, null, null), vue.createVNode(__error, null, null)]),
3000
- default: slots.default
3001
- }), [[vue.resolveDirective("intersect"), {
3002
- handler: init,
3003
- options: props.options
3004
- }, null, {
3005
- once: true
3006
- }]]));
2999
+ useRender(() => {
3000
+ const [responsiveProps] = VResponsive.filterProps(props);
3001
+ return vue.withDirectives(vue.createVNode(VResponsive, vue.mergeProps({
3002
+ "class": ['v-img', {
3003
+ 'v-img--booting': !isBooted.value
3004
+ }, props.class],
3005
+ "style": props.style
3006
+ }, responsiveProps, {
3007
+ "aspectRatio": aspectRatio.value,
3008
+ "aria-label": props.alt,
3009
+ "role": props.alt ? 'img' : undefined
3010
+ }), {
3011
+ additional: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(__image, null, null), vue.createVNode(__preloadImage, null, null), vue.createVNode(__gradient, null, null), vue.createVNode(__placeholder, null, null), vue.createVNode(__error, null, null)]),
3012
+ default: slots.default
3013
+ }), [[vue.resolveDirective("intersect"), {
3014
+ handler: init,
3015
+ options: props.options
3016
+ }, null, {
3017
+ once: true
3018
+ }]]);
3019
+ });
3007
3020
  return {
3008
3021
  currentSrc,
3009
3022
  image,
@@ -3398,7 +3411,7 @@
3398
3411
  vue.watch(() => props.scrollTarget, scrollTarget => {
3399
3412
  const newTarget = scrollTarget ? document.querySelector(scrollTarget) : window;
3400
3413
  if (!newTarget) {
3401
- consoleWarn(`Unable to locate element with identifier ${scrollTarget}`, vue.getCurrentInstance());
3414
+ consoleWarn(`Unable to locate element with identifier ${scrollTarget}`);
3402
3415
  return;
3403
3416
  }
3404
3417
  if (newTarget === target.value) return;
@@ -3880,26 +3893,26 @@
3880
3893
  }
3881
3894
  function getIds(items, modelValue) {
3882
3895
  const ids = [];
3883
- for (let i = 0; i < items.length; i++) {
3884
- const item = items[i];
3885
- if (item.value != null) {
3886
- if (modelValue.find(value => deepEqual(value, item.value)) != null) {
3887
- ids.push(item.id);
3888
- }
3889
- } else if (modelValue.includes(i)) {
3896
+ modelValue.forEach(value => {
3897
+ const item = items.find(item => deepEqual(value, item.value));
3898
+ const itemByIndex = items[value];
3899
+ if (item?.value != null) {
3890
3900
  ids.push(item.id);
3901
+ } else if (itemByIndex != null) {
3902
+ ids.push(itemByIndex.id);
3891
3903
  }
3892
- }
3904
+ });
3893
3905
  return ids;
3894
3906
  }
3895
3907
  function getValues(items, ids) {
3896
3908
  const values = [];
3897
- for (let i = 0; i < items.length; i++) {
3898
- const item = items[i];
3899
- if (ids.includes(item.id)) {
3900
- values.push(item.value != null ? item.value : i);
3909
+ ids.forEach(id => {
3910
+ const itemIndex = items.findIndex(item => item.id === id);
3911
+ if (~itemIndex) {
3912
+ const item = items[itemIndex];
3913
+ values.push(item.value != null ? item.value : itemIndex);
3901
3914
  }
3902
- }
3915
+ });
3903
3916
  return values;
3904
3917
  }
3905
3918
 
@@ -5569,10 +5582,17 @@
5569
5582
  default: '$clear'
5570
5583
  },
5571
5584
  active: Boolean,
5585
+ centerAffix: {
5586
+ type: Boolean,
5587
+ default: undefined
5588
+ },
5572
5589
  color: String,
5573
5590
  baseColor: String,
5574
5591
  dirty: Boolean,
5575
- disabled: Boolean,
5592
+ disabled: {
5593
+ type: Boolean,
5594
+ default: null
5595
+ },
5576
5596
  error: Boolean,
5577
5597
  flat: Boolean,
5578
5598
  label: String,
@@ -5640,6 +5660,7 @@
5640
5660
  const labelRef = vue.ref();
5641
5661
  const floatingLabelRef = vue.ref();
5642
5662
  const controlRef = vue.ref();
5663
+ const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
5643
5664
  const {
5644
5665
  backgroundColorClasses,
5645
5666
  backgroundColorStyles
@@ -5705,6 +5726,7 @@
5705
5726
  const hasClear = !!(props.clearable || slots.clear);
5706
5727
  const hasAppend = !!(slots['append-inner'] || props.appendInnerIcon || hasClear);
5707
5728
  const label = slots.label ? slots.label({
5729
+ ...slotProps.value,
5708
5730
  label: props.label,
5709
5731
  props: {
5710
5732
  for: id.value
@@ -5714,6 +5736,7 @@
5714
5736
  "class": ['v-field', {
5715
5737
  'v-field--active': isActive.value,
5716
5738
  'v-field--appended': hasAppend,
5739
+ 'v-field--center-affix': props.centerAffix ?? !isPlainOrUnderlined.value,
5717
5740
  'v-field--disabled': props.disabled,
5718
5741
  'v-field--dirty': props.dirty,
5719
5742
  'v-field--error': props.error,
@@ -5799,7 +5822,7 @@
5799
5822
  default: () => [label]
5800
5823
  })]), vue.createVNode("div", {
5801
5824
  "class": "v-field__outline__end"
5802
- }, null)]), ['plain', 'underlined'].includes(props.variant) && hasLabel.value && vue.createVNode(VFieldLabel, {
5825
+ }, null)]), isPlainOrUnderlined.value && hasLabel.value && vue.createVNode(VFieldLabel, {
5803
5826
  "ref": floatingLabelRef,
5804
5827
  "floating": true,
5805
5828
  "for": id.value
@@ -5917,12 +5940,9 @@
5917
5940
  }
5918
5941
  function reset() {
5919
5942
  items.value.forEach(item => item.reset());
5920
- model.value = null;
5921
5943
  }
5922
5944
  function resetValidation() {
5923
5945
  items.value.forEach(item => item.resetValidation());
5924
- errors.value = [];
5925
- model.value = null;
5926
5946
  }
5927
5947
  vue.watch(items, () => {
5928
5948
  let valid = 0;
@@ -5976,6 +5996,7 @@
5976
5996
  isDisabled,
5977
5997
  isReadonly,
5978
5998
  isValidating,
5999
+ isValid: model,
5979
6000
  items,
5980
6001
  validateOn: vue.toRef(props, 'validateOn')
5981
6002
  });
@@ -5984,6 +6005,7 @@
5984
6005
  isDisabled,
5985
6006
  isReadonly,
5986
6007
  isValidating,
6008
+ isValid: model,
5987
6009
  items,
5988
6010
  validate,
5989
6011
  reset,
@@ -5999,7 +6021,10 @@
5999
6021
  // Types
6000
6022
 
6001
6023
  const makeValidationProps = propsFactory({
6002
- disabled: Boolean,
6024
+ disabled: {
6025
+ type: Boolean,
6026
+ default: null
6027
+ },
6003
6028
  error: Boolean,
6004
6029
  errorMessages: {
6005
6030
  type: [Array, String],
@@ -6011,7 +6036,10 @@
6011
6036
  },
6012
6037
  name: String,
6013
6038
  label: String,
6014
- readonly: Boolean,
6039
+ readonly: {
6040
+ type: Boolean,
6041
+ default: null
6042
+ },
6015
6043
  rules: {
6016
6044
  type: Array,
6017
6045
  default: () => []
@@ -6030,15 +6058,30 @@
6030
6058
  const internalErrorMessages = vue.ref([]);
6031
6059
  const isPristine = vue.shallowRef(true);
6032
6060
  const isDirty = vue.computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));
6033
- const isDisabled = vue.computed(() => !!(props.disabled || form?.isDisabled.value));
6034
- const isReadonly = vue.computed(() => !!(props.readonly || form?.isReadonly.value));
6061
+ const isDisabled = vue.computed(() => !!(props.disabled ?? form?.isDisabled.value));
6062
+ const isReadonly = vue.computed(() => !!(props.readonly ?? form?.isReadonly.value));
6035
6063
  const errorMessages = vue.computed(() => {
6036
6064
  return props.errorMessages.length ? wrapInArray(props.errorMessages).slice(0, Math.max(0, +props.maxErrors)) : internalErrorMessages.value;
6037
6065
  });
6066
+ const validateOn = vue.computed(() => {
6067
+ let value = (props.validateOn ?? form?.validateOn.value) || 'input';
6068
+ if (value === 'lazy') value = 'input lazy';
6069
+ const set = new Set(value?.split(' ') ?? []);
6070
+ return {
6071
+ blur: set.has('blur') || set.has('input'),
6072
+ input: set.has('input'),
6073
+ submit: set.has('submit'),
6074
+ lazy: set.has('lazy')
6075
+ };
6076
+ });
6038
6077
  const isValid = vue.computed(() => {
6039
- if (props.error || errorMessages.value.length) return false;
6078
+ if (props.error || props.errorMessages.length) return false;
6040
6079
  if (!props.rules.length) return true;
6041
- return isPristine.value ? null : true;
6080
+ if (isPristine.value) {
6081
+ return internalErrorMessages.value.length || validateOn.value.lazy ? null : true;
6082
+ } else {
6083
+ return !internalErrorMessages.value.length;
6084
+ }
6042
6085
  });
6043
6086
  const isValidating = vue.shallowRef(false);
6044
6087
  const validationClasses = vue.computed(() => {
@@ -6061,11 +6104,13 @@
6061
6104
  vue.onBeforeUnmount(() => {
6062
6105
  form?.unregister(uid.value);
6063
6106
  });
6064
- const validateOn = vue.computed(() => props.validateOn || form?.validateOn.value || 'input');
6065
-
6066
- // Set initial valid state, for inputs that might not have rules
6067
- vue.onMounted(() => form?.update(uid.value, isValid.value, errorMessages.value));
6068
- useToggleScope(() => validateOn.value === 'input', () => {
6107
+ vue.onMounted(async () => {
6108
+ if (!validateOn.value.lazy) {
6109
+ await validate(true);
6110
+ }
6111
+ form?.update(uid.value, isValid.value, errorMessages.value);
6112
+ });
6113
+ useToggleScope(() => validateOn.value.input, () => {
6069
6114
  vue.watch(validationModel, () => {
6070
6115
  if (validationModel.value != null) {
6071
6116
  validate();
@@ -6077,7 +6122,7 @@
6077
6122
  }
6078
6123
  });
6079
6124
  });
6080
- useToggleScope(() => validateOn.value === 'blur', () => {
6125
+ useToggleScope(() => validateOn.value.blur, () => {
6081
6126
  vue.watch(() => props.focused, val => {
6082
6127
  if (!val) validate();
6083
6128
  });
@@ -6086,14 +6131,19 @@
6086
6131
  form?.update(uid.value, isValid.value, errorMessages.value);
6087
6132
  });
6088
6133
  function reset() {
6089
- resetValidation();
6090
6134
  model.value = null;
6135
+ vue.nextTick(resetValidation);
6091
6136
  }
6092
6137
  function resetValidation() {
6093
6138
  isPristine.value = true;
6094
- internalErrorMessages.value = [];
6139
+ if (!validateOn.value.lazy) {
6140
+ validate(true);
6141
+ } else {
6142
+ internalErrorMessages.value = [];
6143
+ }
6095
6144
  }
6096
6145
  async function validate() {
6146
+ let silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
6097
6147
  const results = [];
6098
6148
  isValidating.value = true;
6099
6149
  for (const rule of props.rules) {
@@ -6112,7 +6162,7 @@
6112
6162
  }
6113
6163
  internalErrorMessages.value = results;
6114
6164
  isValidating.value = false;
6115
- isPristine.value = false;
6165
+ isPristine.value = silent;
6116
6166
  return internalErrorMessages.value;
6117
6167
  }
6118
6168
  return {
@@ -6133,6 +6183,10 @@
6133
6183
  const makeVInputProps = propsFactory({
6134
6184
  id: String,
6135
6185
  appendIcon: IconValue,
6186
+ centerAffix: {
6187
+ type: Boolean,
6188
+ default: true
6189
+ },
6136
6190
  prependIcon: IconValue,
6137
6191
  hideDetails: [Boolean, String],
6138
6192
  hint: String,
@@ -6202,7 +6256,7 @@
6202
6256
  validate
6203
6257
  }));
6204
6258
  const messages = vue.computed(() => {
6205
- if (errorMessages.value.length > 0) {
6259
+ if (!isPristine.value && errorMessages.value.length > 0) {
6206
6260
  return errorMessages.value;
6207
6261
  } else if (props.hint && (props.persistentHint || props.focused)) {
6208
6262
  return props.hint;
@@ -6216,7 +6270,9 @@
6216
6270
  const hasMessages = messages.value.length > 0;
6217
6271
  const hasDetails = !props.hideDetails || props.hideDetails === 'auto' && (hasMessages || !!slots.details);
6218
6272
  return vue.createVNode("div", {
6219
- "class": ['v-input', `v-input--${props.direction}`, densityClasses.value, validationClasses.value, props.class],
6273
+ "class": ['v-input', `v-input--${props.direction}`, {
6274
+ 'v-input--center-affix': props.centerAffix
6275
+ }, densityClasses.value, validationClasses.value, props.class],
6220
6276
  "style": props.style
6221
6277
  }, [hasPrepend && vue.createVNode("div", {
6222
6278
  "key": "prepend",
@@ -6423,6 +6479,7 @@
6423
6479
  if (!props.counter || typeof props.counter !== 'number' && typeof props.counter !== 'string') return undefined;
6424
6480
  return props.counter;
6425
6481
  });
6482
+ const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
6426
6483
  function onIntersect(isIntersecting, entries) {
6427
6484
  if (!props.autofocus || !isIntersecting) return;
6428
6485
  entries[0].target?.focus?.();
@@ -6482,10 +6539,11 @@
6482
6539
  "class": ['v-text-field', {
6483
6540
  'v-text-field--prefixed': props.prefix,
6484
6541
  'v-text-field--suffixed': props.suffix,
6485
- 'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
6542
+ 'v-text-field--plain-underlined': ['plain', 'underlined'].includes(props.variant)
6486
6543
  }, props.class],
6487
6544
  "style": props.style
6488
6545
  }, rootAttrs, inputProps, {
6546
+ "centerAffix": !isPlainOrUnderlined.value,
6489
6547
  "focused": isFocused.value
6490
6548
  }), {
6491
6549
  ...slots,
@@ -6855,10 +6913,10 @@
6855
6913
  }
6856
6914
  }
6857
6915
  const falseIcon = vue.computed(() => {
6858
- return props.indeterminate ? props.indeterminateIcon : props.falseIcon;
6916
+ return indeterminate.value ? props.indeterminateIcon : props.falseIcon;
6859
6917
  });
6860
6918
  const trueIcon = vue.computed(() => {
6861
- return props.indeterminate ? props.indeterminateIcon : props.trueIcon;
6919
+ return indeterminate.value ? props.indeterminateIcon : props.trueIcon;
6862
6920
  });
6863
6921
  useRender(() => vue.createVNode(VSelectionControl, vue.mergeProps(props, {
6864
6922
  "modelValue": model.value,
@@ -6868,7 +6926,7 @@
6868
6926
  "type": "checkbox",
6869
6927
  "falseIcon": falseIcon.value,
6870
6928
  "trueIcon": trueIcon.value,
6871
- "aria-checked": props.indeterminate ? 'mixed' : undefined
6929
+ "aria-checked": indeterminate.value ? 'mixed' : undefined
6872
6930
  }), slots));
6873
6931
  return {};
6874
6932
  }
@@ -7828,7 +7886,9 @@
7828
7886
  }
7829
7887
  });
7830
7888
  const makeVListGroupProps = propsFactory({
7889
+ /* @deprecated */
7831
7890
  activeColor: String,
7891
+ baseColor: String,
7832
7892
  color: String,
7833
7893
  collapseIcon: {
7834
7894
  type: IconValue,
@@ -7877,6 +7937,7 @@
7877
7937
  VListItem: {
7878
7938
  active: isOpen.value,
7879
7939
  activeColor: props.activeColor,
7940
+ baseColor: props.baseColor,
7880
7941
  color: props.color,
7881
7942
  prependIcon: props.prependIcon || props.subgroup && toggleIcon.value,
7882
7943
  appendIcon: props.appendIcon || !props.subgroup && toggleIcon.value,
@@ -7931,9 +7992,11 @@
7931
7992
  default: undefined
7932
7993
  },
7933
7994
  activeClass: String,
7995
+ /* @deprecated */
7934
7996
  activeColor: String,
7935
7997
  appendAvatar: String,
7936
7998
  appendIcon: IconValue,
7999
+ baseColor: String,
7937
8000
  disabled: Boolean,
7938
8001
  lines: String,
7939
8002
  link: {
@@ -7996,8 +8059,9 @@
7996
8059
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
7997
8060
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!list));
7998
8061
  const roundedProps = vue.computed(() => props.rounded || props.nav);
8062
+ const color = vue.computed(() => props.color ?? props.activeColor);
7999
8063
  const variantProps = vue.computed(() => ({
8000
- color: isActive.value ? props.activeColor ?? props.color : props.color,
8064
+ color: isActive.value ? color.value ?? props.baseColor : props.baseColor,
8001
8065
  variant: props.variant
8002
8066
  }));
8003
8067
  vue.watch(() => link.isActive?.value, val => {
@@ -8054,7 +8118,6 @@
8054
8118
  }
8055
8119
  useRender(() => {
8056
8120
  const Tag = isLink.value ? 'a' : props.tag;
8057
- const hasColor = !list || isSelected.value || isActive.value;
8058
8121
  const hasTitle = slots.title || props.title;
8059
8122
  const hasSubtitle = slots.subtitle || props.subtitle;
8060
8123
  const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
@@ -8062,6 +8125,9 @@
8062
8125
  const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
8063
8126
  const hasPrepend = !!(hasPrependMedia || slots.prepend);
8064
8127
  list?.updateHasPrepend(hasPrepend);
8128
+ if (props.activeColor) {
8129
+ deprecate('active-color', ['color', 'base-color']);
8130
+ }
8065
8131
  return vue.withDirectives(vue.createVNode(Tag, {
8066
8132
  "class": ['v-list-item', {
8067
8133
  'v-list-item--active': isActive.value,
@@ -8070,10 +8136,10 @@
8070
8136
  'v-list-item--nav': props.nav,
8071
8137
  'v-list-item--prepend': !hasPrepend && list?.hasPrepend.value,
8072
8138
  [`${props.activeClass}`]: props.activeClass && isActive.value
8073
- }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8074
- "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, props.style],
8139
+ }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
8140
+ "style": [colorStyles.value, dimensionStyles.value, props.style],
8075
8141
  "href": link.href.value,
8076
- "tabindex": isClickable.value ? 0 : undefined,
8142
+ "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
8077
8143
  "onClick": onClick,
8078
8144
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
8079
8145
  }, {
@@ -8224,9 +8290,7 @@
8224
8290
  if (type === 'subheader') {
8225
8291
  return slots.subheader?.({
8226
8292
  props: itemProps
8227
- }) ?? vue.createVNode(VListSubheader, itemProps, {
8228
- default: slots.subheader
8229
- });
8293
+ }) ?? vue.createVNode(VListSubheader, itemProps, null);
8230
8294
  }
8231
8295
  const slotsWithItem = {
8232
8296
  subtitle: slots.subtitle ? slotProps => slots.subtitle?.({
@@ -8241,10 +8305,6 @@
8241
8305
  ...slotProps,
8242
8306
  item
8243
8307
  }) : undefined,
8244
- default: slots.default ? slotProps => slots.default?.({
8245
- ...slotProps,
8246
- item
8247
- }) : undefined,
8248
8308
  title: slots.title ? slotProps => slots.title?.({
8249
8309
  ...slotProps,
8250
8310
  item
@@ -8268,7 +8328,9 @@
8268
8328
  default: () => vue.createVNode(VListChildren, {
8269
8329
  "items": children
8270
8330
  }, slots)
8271
- }) : slots.item ? slots.item(itemProps) : vue.createVNode(VListItem, itemProps, slotsWithItem);
8331
+ }) : slots.item ? slots.item({
8332
+ props: itemProps
8333
+ }) : vue.createVNode(VListItem, itemProps, slotsWithItem);
8272
8334
  });
8273
8335
  }
8274
8336
  });
@@ -8300,7 +8362,7 @@
8300
8362
  default: 'props'
8301
8363
  },
8302
8364
  returnObject: Boolean
8303
- }, 'item');
8365
+ }, 'list-items');
8304
8366
  function transformItem$1(props, item) {
8305
8367
  const title = getPropertyFromItem(item, props.itemTitle, item);
8306
8368
  const value = props.returnObject ? item : getPropertyFromItem(item, props.itemValue, title);
@@ -8328,20 +8390,23 @@
8328
8390
  }
8329
8391
  function useItems(props) {
8330
8392
  const items = vue.computed(() => transformItems$1(props, props.items));
8393
+ return useTransformItems(items, value => transformItem$1(props, value));
8394
+ }
8395
+ function useTransformItems(items, transform) {
8331
8396
  function transformIn(value) {
8332
8397
  return value.map(v => {
8333
8398
  const existingItem = items.value.find(item => deepEqual(v, item.value));
8334
8399
  // Nullish existingItem means value is a custom input value from combobox
8335
- // In this case, use transformItem to create an InternalItem based on value
8336
- return existingItem ?? transformItem$1(props, v);
8400
+ // In this case, use transformItem to create an { value: unknown } based on value
8401
+ return existingItem ?? transform(v);
8337
8402
  });
8338
8403
  }
8339
8404
  function transformOut(value) {
8340
8405
  return value.map(_ref => {
8341
8406
  let {
8342
- props
8407
+ value
8343
8408
  } = _ref;
8344
- return props.value;
8409
+ return value;
8345
8410
  });
8346
8411
  }
8347
8412
  return {
@@ -8390,6 +8455,8 @@
8390
8455
  };
8391
8456
  }
8392
8457
  const makeVListProps = propsFactory({
8458
+ baseColor: String,
8459
+ /* @deprecated */
8393
8460
  activeColor: String,
8394
8461
  activeClass: String,
8395
8462
  bgColor: String,
@@ -8464,16 +8531,19 @@
8464
8531
  } = useNested(props);
8465
8532
  const lineClasses = vue.computed(() => props.lines ? `v-list--${props.lines}-line` : undefined);
8466
8533
  const activeColor = vue.toRef(props, 'activeColor');
8534
+ const baseColor = vue.toRef(props, 'baseColor');
8467
8535
  const color = vue.toRef(props, 'color');
8468
8536
  createList();
8469
8537
  provideDefaults({
8470
8538
  VListGroup: {
8471
8539
  activeColor,
8540
+ baseColor,
8472
8541
  color
8473
8542
  },
8474
8543
  VListItem: {
8475
8544
  activeClass: vue.toRef(props, 'activeClass'),
8476
8545
  activeColor,
8546
+ baseColor,
8477
8547
  color,
8478
8548
  density: vue.toRef(props, 'density'),
8479
8549
  disabled: vue.toRef(props, 'disabled'),
@@ -9498,14 +9568,14 @@
9498
9568
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultDisplayOptions;
9499
9569
  return mergeDeep(defaultDisplayOptions, options);
9500
9570
  };
9501
- function getClientWidth(isHydrate) {
9502
- return IN_BROWSER && !isHydrate ? window.innerWidth : 0;
9571
+ function getClientWidth(ssr) {
9572
+ return IN_BROWSER && !ssr ? window.innerWidth : typeof ssr === 'object' && ssr.clientWidth || 0;
9503
9573
  }
9504
- function getClientHeight(isHydrate) {
9505
- return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
9574
+ function getClientHeight(ssr) {
9575
+ return IN_BROWSER && !ssr ? window.innerHeight : typeof ssr === 'object' && ssr.clientHeight || 0;
9506
9576
  }
9507
- function getPlatform(isHydrate) {
9508
- const userAgent = IN_BROWSER && !isHydrate ? window.navigator.userAgent : 'ssr';
9577
+ function getPlatform(ssr) {
9578
+ const userAgent = IN_BROWSER && !ssr ? window.navigator.userAgent : 'ssr';
9509
9579
  function match(regexp) {
9510
9580
  return Boolean(userAgent.match(regexp));
9511
9581
  }
@@ -10329,10 +10399,10 @@
10329
10399
  'v-select--active-menu': menu.value,
10330
10400
  'v-select--chips': !!props.chips,
10331
10401
  [`v-select--${props.multiple ? 'multiple' : 'single'}`]: true,
10332
- 'v-select--selected': model.value.length
10402
+ 'v-select--selected': model.value.length,
10403
+ 'v-select--selection-slot': !!slots.selection
10333
10404
  }, props.class],
10334
10405
  "style": props.style,
10335
- "appendInnerIcon": props.menuIcon,
10336
10406
  "readonly": true,
10337
10407
  "placeholder": placeholder,
10338
10408
  "onClick:clear": onClear,
@@ -10364,25 +10434,21 @@
10364
10434
  default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
10365
10435
  "title": t(props.noDataText)
10366
10436
  }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
10367
- if (slots.item) {
10368
- return slots.item?.({
10369
- item,
10370
- index,
10371
- props: vue.mergeProps(item.props, {
10372
- onClick: () => select(item)
10373
- })
10374
- });
10375
- }
10376
- return vue.createVNode(VListItem, vue.mergeProps({
10377
- "key": index
10378
- }, item.props, {
10379
- "onClick": () => select(item)
10380
- }), {
10437
+ const itemProps = vue.mergeProps(item.props, {
10438
+ key: index,
10439
+ onClick: () => select(item)
10440
+ });
10441
+ return slots.item?.({
10442
+ item,
10443
+ index,
10444
+ props: itemProps
10445
+ }) ?? vue.createVNode(VListItem, itemProps, {
10381
10446
  prepend: _ref2 => {
10382
10447
  let {
10383
10448
  isSelected
10384
10449
  } = _ref2;
10385
10450
  return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10451
+ "key": item.value,
10386
10452
  "modelValue": isSelected,
10387
10453
  "ripple": false,
10388
10454
  "tabindex": "-1"
@@ -10439,7 +10505,16 @@
10439
10505
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10440
10506
  "class": "v-select__selection-comma"
10441
10507
  }, [vue.createTextVNode(",")])])]);
10442
- })])
10508
+ })]),
10509
+ 'append-inner': function () {
10510
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
10511
+ args[_key] = arguments[_key];
10512
+ }
10513
+ return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? vue.createVNode(VIcon, {
10514
+ "class": "v-select__menu-icon",
10515
+ "icon": props.menuIcon
10516
+ }, null) : undefined]);
10517
+ }
10443
10518
  });
10444
10519
  });
10445
10520
  return forwardRefs({
@@ -10451,6 +10526,8 @@
10451
10526
  });
10452
10527
 
10453
10528
  /* eslint-disable max-statements */
10529
+ /* eslint-disable no-labels */
10530
+
10454
10531
 
10455
10532
  // Types
10456
10533
 
@@ -10520,23 +10597,24 @@
10520
10597
  const strQuery = vue.computed(() => typeof query?.value !== 'string' && typeof query?.value !== 'number' ? '' : String(query.value));
10521
10598
  const filteredItems = vue.ref([]);
10522
10599
  const filteredMatches = vue.ref(new Map());
10600
+ const transformedItems = vue.computed(() => options?.transform ? vue.unref(items).map(options?.transform) : vue.unref(items));
10523
10601
  vue.watchEffect(() => {
10524
10602
  filteredItems.value = [];
10525
10603
  filteredMatches.value = new Map();
10526
- const transformedItems = vue.unref(items);
10527
- const results = filterItems(transformedItems, strQuery.value, {
10604
+ const results = filterItems(transformedItems.value, strQuery.value, {
10528
10605
  customKeyFilter: props.customKeyFilter,
10529
10606
  default: props.customFilter,
10530
- filterKeys: vue.unref(options?.filterKeys) ?? props.filterKeys,
10607
+ filterKeys: props.filterKeys,
10531
10608
  filterMode: props.filterMode,
10532
10609
  noFilter: props.noFilter
10533
10610
  });
10611
+ const originalItems = vue.unref(items);
10534
10612
  results.forEach(_ref => {
10535
10613
  let {
10536
10614
  index,
10537
10615
  matches
10538
10616
  } = _ref;
10539
- const item = transformedItems[index];
10617
+ const item = originalItems[index];
10540
10618
  filteredItems.value.push(item);
10541
10619
  filteredMatches.value.set(item.value, matches);
10542
10620
  });
@@ -10565,8 +10643,9 @@
10565
10643
  }, [text.substr(matches + length)])]) : text;
10566
10644
  }
10567
10645
  const makeVAutocompleteProps = propsFactory({
10568
- // TODO: implement post keyboard support
10569
- // autoSelectFirst: Boolean,
10646
+ autoSelectFirst: {
10647
+ type: [Boolean, String]
10648
+ },
10570
10649
  search: String,
10571
10650
  ...makeFilterProps({
10572
10651
  filterKeys: ['title']
@@ -10598,6 +10677,7 @@
10598
10677
  const vTextFieldRef = vue.ref();
10599
10678
  const isFocused = vue.shallowRef(false);
10600
10679
  const isPristine = vue.shallowRef(true);
10680
+ const listHasFocus = vue.ref(false);
10601
10681
  const vMenuRef = vue.ref();
10602
10682
  const _menu = useProxiedModel(props, 'menu');
10603
10683
  const menu = vue.computed({
@@ -10641,6 +10721,10 @@
10641
10721
  });
10642
10722
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
10643
10723
  const selection = vue.computed(() => selections.value[selectionIndex.value]);
10724
+ const highlightFirst = vue.computed(() => {
10725
+ const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
10726
+ return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
10727
+ });
10644
10728
  const listRef = vue.ref();
10645
10729
  function onClear(e) {
10646
10730
  if (props.openOnClear) {
@@ -10652,6 +10736,13 @@
10652
10736
  if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
10653
10737
  menu.value = true;
10654
10738
  }
10739
+ function onMousedownMenuIcon(e) {
10740
+ if (isFocused.value) {
10741
+ e.preventDefault();
10742
+ e.stopPropagation();
10743
+ }
10744
+ menu.value = !menu.value;
10745
+ }
10655
10746
  function onKeydown(e) {
10656
10747
  if (props.readonly || form?.isReadonly.value) return;
10657
10748
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -10666,10 +10757,16 @@
10666
10757
  menu.value = false;
10667
10758
  }
10668
10759
  if (['Enter', 'Escape', 'Tab'].includes(e.key)) {
10760
+ if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key)) {
10761
+ select(filteredItems.value[0]);
10762
+ }
10669
10763
  isPristine.value = true;
10670
10764
  }
10671
10765
  if (e.key === 'ArrowDown') {
10672
10766
  listRef.value?.focus('next');
10767
+ if (highlightFirst.value) {
10768
+ listRef.value?.focus('next');
10769
+ }
10673
10770
  } else if (e.key === 'ArrowUp') {
10674
10771
  listRef.value?.focus('prev');
10675
10772
  }
@@ -10717,6 +10814,12 @@
10717
10814
  }
10718
10815
  function onFocusin(e) {
10719
10816
  isFocused.value = true;
10817
+ setTimeout(() => {
10818
+ listHasFocus.value = true;
10819
+ });
10820
+ }
10821
+ function onFocusout(e) {
10822
+ listHasFocus.value = false;
10720
10823
  }
10721
10824
  const isSelecting = vue.shallowRef(false);
10722
10825
  function select(item) {
@@ -10738,14 +10841,22 @@
10738
10841
  vue.nextTick(() => isSelecting.value = false);
10739
10842
  }
10740
10843
  }
10741
- vue.watch(isFocused, val => {
10844
+ vue.watch(isFocused, (val, oldVal) => {
10845
+ if (val === oldVal) return;
10742
10846
  if (val) {
10743
10847
  isSelecting.value = true;
10744
10848
  search.value = props.multiple ? '' : String(selections.value.at(-1)?.props.title ?? '');
10745
10849
  isPristine.value = true;
10746
10850
  vue.nextTick(() => isSelecting.value = false);
10747
10851
  } else {
10748
- if (!props.multiple && !search.value) model.value = [];
10852
+ if (!props.multiple && !search.value) model.value = [];else if (highlightFirst.value && !listHasFocus.value && !selections.value.some(_ref2 => {
10853
+ let {
10854
+ value
10855
+ } = _ref2;
10856
+ return value === displayItems.value[0].value;
10857
+ })) {
10858
+ select(displayItems.value[0]);
10859
+ }
10749
10860
  menu.value = false;
10750
10861
  search.value = '';
10751
10862
  selectionIndex.value = -1;
@@ -10776,10 +10887,10 @@
10776
10887
  "class": ['v-autocomplete', `v-autocomplete--${props.multiple ? 'multiple' : 'single'}`, {
10777
10888
  'v-autocomplete--active-menu': menu.value,
10778
10889
  'v-autocomplete--chips': !!props.chips,
10890
+ 'v-autocomplete--selection-slot': !!slots.selection,
10779
10891
  'v-autocomplete--selecting-index': selectionIndex.value > -1
10780
10892
  }, props.class],
10781
10893
  "style": props.style,
10782
- "appendInnerIcon": props.menuIcon,
10783
10894
  "readonly": props.readonly,
10784
10895
  "placeholder": isDirty ? undefined : props.placeholder,
10785
10896
  "onClick:clear": onClear,
@@ -10805,36 +10916,40 @@
10805
10916
  "selected": selected.value,
10806
10917
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
10807
10918
  "onMousedown": e => e.preventDefault(),
10808
- "onFocusin": onFocusin
10919
+ "onFocusin": onFocusin,
10920
+ "onFocusout": onFocusout
10809
10921
  }, {
10810
10922
  default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
10811
10923
  "title": t(props.noDataText)
10812
- }, null)), slots['prepend-item']?.(), displayItems.value.map(item => slots.item?.({
10813
- item,
10814
- props: vue.mergeProps(item.props, {
10924
+ }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
10925
+ const itemProps = vue.mergeProps(item.props, {
10926
+ key: index,
10927
+ active: highlightFirst.value && index === 0 ? true : undefined,
10815
10928
  onClick: () => select(item)
10816
- })
10817
- }) ?? vue.createVNode(VListItem, vue.mergeProps({
10818
- "key": item.value
10819
- }, item.props, {
10820
- "onClick": () => select(item)
10821
- }), {
10822
- prepend: _ref2 => {
10823
- let {
10824
- isSelected
10825
- } = _ref2;
10826
- return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10827
- "modelValue": isSelected,
10828
- "ripple": false,
10829
- "tabindex": "-1"
10830
- }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
10831
- "icon": item.props.prependIcon
10832
- }, null)]);
10833
- },
10834
- title: () => {
10835
- return isPristine.value ? item.title : highlightResult$1(item.title, getMatches(item)?.title, search.value?.length ?? 0);
10836
- }
10837
- })), slots['append-item']?.()]
10929
+ });
10930
+ return slots.item?.({
10931
+ item,
10932
+ index,
10933
+ props: itemProps
10934
+ }) ?? vue.createVNode(VListItem, itemProps, {
10935
+ prepend: _ref3 => {
10936
+ let {
10937
+ isSelected
10938
+ } = _ref3;
10939
+ return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10940
+ "key": item.value,
10941
+ "modelValue": isSelected,
10942
+ "ripple": false,
10943
+ "tabindex": "-1"
10944
+ }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
10945
+ "icon": item.props.prependIcon
10946
+ }, null)]);
10947
+ },
10948
+ title: () => {
10949
+ return isPristine.value ? item.title : highlightResult$1(item.title, getMatches(item)?.title, search.value?.length ?? 0);
10950
+ }
10951
+ });
10952
+ }), slots['append-item']?.()]
10838
10953
  })]
10839
10954
  }), selections.value.map((item, index) => {
10840
10955
  function onChipClose(e) {
@@ -10883,7 +10998,18 @@
10883
10998
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10884
10999
  "class": "v-autocomplete__selection-comma"
10885
11000
  }, [vue.createTextVNode(",")])])]);
10886
- })])
11001
+ })]),
11002
+ 'append-inner': function () {
11003
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
11004
+ args[_key] = arguments[_key];
11005
+ }
11006
+ return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), props.menuIcon ? vue.createVNode(VIcon, {
11007
+ "class": "v-autocomplete__menu-icon",
11008
+ "icon": props.menuIcon,
11009
+ "onMousedown": onMousedownMenuIcon,
11010
+ "onClick": noop
11011
+ }, null) : undefined]);
11012
+ }
10887
11013
  });
10888
11014
  });
10889
11015
  return forwardRefs({
@@ -11244,7 +11370,7 @@
11244
11370
  const makeVBreadcrumbsDividerProps = propsFactory({
11245
11371
  divider: [Number, String],
11246
11372
  ...makeComponentProps()
11247
- }, 'v-breacrumbs-divider');
11373
+ }, 'v-breadcrumbs-divider');
11248
11374
  const VBreadcrumbsDivider = genericComponent()({
11249
11375
  name: 'VBreadcrumbsDivider',
11250
11376
  props: makeVBreadcrumbsDividerProps(),
@@ -11332,7 +11458,7 @@
11332
11458
  ...makeTagProps({
11333
11459
  tag: 'ul'
11334
11460
  })
11335
- }, 'v-breacrumbs');
11461
+ }, 'v-breadcrumbs');
11336
11462
  const VBreadcrumbs = genericComponent()({
11337
11463
  name: 'VBreadcrumbs',
11338
11464
  props: makeVBreadcrumbsProps(),
@@ -11681,6 +11807,7 @@
11681
11807
  });
11682
11808
 
11683
11809
  // Types
11810
+
11684
11811
  const handleGesture = wrapper => {
11685
11812
  const {
11686
11813
  touchstartX,
@@ -12461,27 +12588,6 @@
12461
12588
 
12462
12589
  // Types
12463
12590
 
12464
- function has(obj, key) {
12465
- return key.every(k => obj.hasOwnProperty(k));
12466
- }
12467
- function parseColor(color) {
12468
- if (!color) return null;
12469
- let hsva = null;
12470
- if (typeof color === 'string') {
12471
- const hex = parseHex(color);
12472
- hsva = HexToHSV(hex);
12473
- }
12474
- if (typeof color === 'object') {
12475
- if (has(color, ['r', 'g', 'b'])) {
12476
- hsva = RGBtoHSV(color);
12477
- } else if (has(color, ['h', 's', 'l'])) {
12478
- hsva = HSLtoHSV(color);
12479
- } else if (has(color, ['h', 's', 'v'])) {
12480
- hsva = color;
12481
- }
12482
- }
12483
- return hsva;
12484
- }
12485
12591
  function stripAlpha(color, stripAlpha) {
12486
12592
  if (stripAlpha) {
12487
12593
  const {
@@ -12730,6 +12836,7 @@
12730
12836
  });
12731
12837
 
12732
12838
  /* eslint-disable max-statements */
12839
+ // Composables
12733
12840
 
12734
12841
  // Types
12735
12842
 
@@ -12744,9 +12851,15 @@
12744
12851
  if ('touches' in e && e.touches.length) return e.touches[0][position];else if ('changedTouches' in e && e.changedTouches.length) return e.changedTouches[0][position];else return e[position];
12745
12852
  }
12746
12853
  const makeSliderProps = propsFactory({
12747
- disabled: Boolean,
12854
+ disabled: {
12855
+ type: Boolean,
12856
+ default: null
12857
+ },
12748
12858
  error: Boolean,
12749
- readonly: Boolean,
12859
+ readonly: {
12860
+ type: Boolean,
12861
+ default: null
12862
+ },
12750
12863
  max: {
12751
12864
  type: [Number, String],
12752
12865
  default: 100
@@ -13124,7 +13237,7 @@
13124
13237
  "aria-valuemin": props.min,
13125
13238
  "aria-valuemax": props.max,
13126
13239
  "aria-valuenow": props.modelValue,
13127
- "aria-readonly": readonly.value,
13240
+ "aria-readonly": !!readonly.value,
13128
13241
  "aria-orientation": direction.value,
13129
13242
  "onKeydown": !readonly.value ? onKeydown : undefined
13130
13243
  }, [vue.createVNode("div", {
@@ -13376,8 +13489,8 @@
13376
13489
  }, [vue.createVNode("input", {
13377
13490
  "id": id.value,
13378
13491
  "name": props.name || id.value,
13379
- "disabled": props.disabled,
13380
- "readonly": props.readonly,
13492
+ "disabled": !!props.disabled,
13493
+ "readonly": !!props.readonly,
13381
13494
  "tabindex": "-1",
13382
13495
  "value": model.value
13383
13496
  }, null), vue.createVNode(VSliderTrack, {
@@ -13832,13 +13945,15 @@
13832
13945
  }, [vue.createVNode("div", null, [props.swatches.map(swatch => vue.createVNode("div", {
13833
13946
  "class": "v-color-picker-swatches__swatch"
13834
13947
  }, [swatch.map(color => {
13835
- const hsva = parseColor(color);
13948
+ const rgba = parseColor(color);
13949
+ const hsva = RGBtoHSV(rgba);
13950
+ const background = RGBtoCSS(rgba);
13836
13951
  return vue.createVNode("div", {
13837
13952
  "class": "v-color-picker-swatches__color",
13838
13953
  "onClick": () => hsva && emit('update:color', hsva)
13839
13954
  }, [vue.createVNode("div", {
13840
13955
  "style": {
13841
- background: color
13956
+ background
13842
13957
  }
13843
13958
  }, [props.color && deepEqual(props.color, hsva) ? vue.createVNode(VIcon, {
13844
13959
  "size": "x-small",
@@ -13899,8 +14014,13 @@
13899
14014
  const mode = useProxiedModel(props, 'mode');
13900
14015
  const lastPickedColor = vue.ref(null);
13901
14016
  const currentColor = useProxiedModel(props, 'modelValue', undefined, v => {
13902
- let c = parseColor(v);
13903
- if (!c) return null;
14017
+ let c;
14018
+ try {
14019
+ c = RGBtoHSV(parseColor(v));
14020
+ } catch (err) {
14021
+ consoleWarn(err);
14022
+ return null;
14023
+ }
13904
14024
  if (lastPickedColor.value) {
13905
14025
  c = {
13906
14026
  ...c,
@@ -13999,8 +14119,9 @@
13999
14119
  }, [text.substr(matches + length)])]) : text;
14000
14120
  }
14001
14121
  const makeVComboboxProps = propsFactory({
14002
- // TODO: implement post keyboard support
14003
- // autoSelectFirst: Boolean,
14122
+ autoSelectFirst: {
14123
+ type: [Boolean, String]
14124
+ },
14004
14125
  delimiters: Array,
14005
14126
  ...makeFilterProps({
14006
14127
  filterKeys: ['title']
@@ -14036,6 +14157,7 @@
14036
14157
  const vTextFieldRef = vue.ref();
14037
14158
  const isFocused = vue.shallowRef(false);
14038
14159
  const isPristine = vue.shallowRef(true);
14160
+ const listHasFocus = vue.ref(false);
14039
14161
  const vMenuRef = vue.ref();
14040
14162
  const _menu = useProxiedModel(props, 'menu');
14041
14163
  const menu = vue.computed({
@@ -14118,6 +14240,10 @@
14118
14240
  });
14119
14241
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
14120
14242
  const selection = vue.computed(() => selections.value[selectionIndex.value]);
14243
+ const highlightFirst = vue.computed(() => {
14244
+ const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
14245
+ return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
14246
+ });
14121
14247
  const listRef = vue.ref();
14122
14248
  function onClear(e) {
14123
14249
  cleared = true;
@@ -14129,6 +14255,13 @@
14129
14255
  if (props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value) return;
14130
14256
  menu.value = true;
14131
14257
  }
14258
+ function onMousedownMenuIcon(e) {
14259
+ if (isFocused.value) {
14260
+ e.preventDefault();
14261
+ e.stopPropagation();
14262
+ }
14263
+ menu.value = !menu.value;
14264
+ }
14132
14265
  function onKeydown(e) {
14133
14266
  if (props.readonly || form?.isReadonly.value) return;
14134
14267
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -14143,6 +14276,9 @@
14143
14276
  menu.value = false;
14144
14277
  }
14145
14278
  if (['Enter', 'Escape', 'Tab'].includes(e.key)) {
14279
+ if (highlightFirst.value && ['Enter', 'Tab'].includes(e.key)) {
14280
+ select(filteredItems.value[0]);
14281
+ }
14146
14282
  isPristine.value = true;
14147
14283
  }
14148
14284
  if (e.key === 'ArrowDown') {
@@ -14217,17 +14353,31 @@
14217
14353
  }
14218
14354
  function onFocusin(e) {
14219
14355
  isFocused.value = true;
14356
+ setTimeout(() => {
14357
+ listHasFocus.value = true;
14358
+ });
14359
+ }
14360
+ function onFocusout(e) {
14361
+ listHasFocus.value = false;
14220
14362
  }
14221
14363
  vue.watch(filteredItems, val => {
14222
14364
  if (!val.length && props.hideNoData) menu.value = false;
14223
14365
  });
14224
- vue.watch(isFocused, val => {
14225
- if (val) return;
14366
+ vue.watch(isFocused, (val, oldVal) => {
14367
+ if (val || val === oldVal) return;
14226
14368
  selectionIndex.value = -1;
14227
14369
  menu.value = false;
14228
- if (!props.multiple || !search.value) return;
14229
- model.value = [...model.value, transformItem$1(props, search.value)];
14230
- search.value = '';
14370
+ if (highlightFirst.value && !listHasFocus.value && !selections.value.some(_ref2 => {
14371
+ let {
14372
+ value
14373
+ } = _ref2;
14374
+ return value === displayItems.value[0].value;
14375
+ })) {
14376
+ select(displayItems.value[0]);
14377
+ } else if (props.multiple && search.value) {
14378
+ model.value = [...model.value, transformItem$1(props, search.value)];
14379
+ search.value = '';
14380
+ }
14231
14381
  });
14232
14382
  useRender(() => {
14233
14383
  const hasChips = !!(props.chips || slots.chip);
@@ -14248,11 +14398,11 @@
14248
14398
  "class": ['v-combobox', {
14249
14399
  'v-combobox--active-menu': menu.value,
14250
14400
  'v-combobox--chips': !!props.chips,
14401
+ 'v-combobox--selection-slot': !!slots.selection,
14251
14402
  'v-combobox--selecting-index': selectionIndex.value > -1,
14252
14403
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
14253
14404
  }, props.class],
14254
14405
  "style": props.style,
14255
- "appendInnerIcon": props.items.length ? props.menuIcon : undefined,
14256
14406
  "readonly": props.readonly,
14257
14407
  "placeholder": isDirty ? undefined : props.placeholder,
14258
14408
  "onClick:clear": onClear,
@@ -14278,36 +14428,40 @@
14278
14428
  "selected": selected.value,
14279
14429
  "selectStrategy": props.multiple ? 'independent' : 'single-independent',
14280
14430
  "onMousedown": e => e.preventDefault(),
14281
- "onFocusin": onFocusin
14431
+ "onFocusin": onFocusin,
14432
+ "onFocusout": onFocusout
14282
14433
  }, {
14283
14434
  default: () => [!displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
14284
14435
  "title": t(props.noDataText)
14285
- }, null)), slots['prepend-item']?.(), displayItems.value.map(item => slots.item?.({
14286
- item,
14287
- props: vue.mergeProps(item.props, {
14436
+ }, null)), slots['prepend-item']?.(), displayItems.value.map((item, index) => {
14437
+ const itemProps = vue.mergeProps(item.props, {
14438
+ key: index,
14439
+ active: highlightFirst.value && index === 0 ? true : undefined,
14288
14440
  onClick: () => select(item)
14289
- })
14290
- }) ?? vue.createVNode(VListItem, vue.mergeProps({
14291
- "key": item.value
14292
- }, item.props, {
14293
- "onClick": () => select(item)
14294
- }), {
14295
- prepend: _ref2 => {
14296
- let {
14297
- isSelected
14298
- } = _ref2;
14299
- return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
14300
- "modelValue": isSelected,
14301
- "ripple": false,
14302
- "tabindex": "-1"
14303
- }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
14304
- "icon": item.props.prependIcon
14305
- }, null)]);
14306
- },
14307
- title: () => {
14308
- return isPristine.value ? item.title : highlightResult(item.title, getMatches(item)?.title, search.value?.length ?? 0);
14309
- }
14310
- })), slots['append-item']?.()]
14441
+ });
14442
+ return slots.item?.({
14443
+ item,
14444
+ index,
14445
+ props: itemProps
14446
+ }) ?? vue.createVNode(VListItem, itemProps, {
14447
+ prepend: _ref3 => {
14448
+ let {
14449
+ isSelected
14450
+ } = _ref3;
14451
+ return vue.createVNode(vue.Fragment, null, [props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
14452
+ "key": item.value,
14453
+ "modelValue": isSelected,
14454
+ "ripple": false,
14455
+ "tabindex": "-1"
14456
+ }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
14457
+ "icon": item.props.prependIcon
14458
+ }, null)]);
14459
+ },
14460
+ title: () => {
14461
+ return isPristine.value ? item.title : highlightResult(item.title, getMatches(item)?.title, search.value?.length ?? 0);
14462
+ }
14463
+ });
14464
+ }), slots['append-item']?.()]
14311
14465
  })]
14312
14466
  }), selections.value.map((item, index) => {
14313
14467
  function onChipClose(e) {
@@ -14356,7 +14510,18 @@
14356
14510
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
14357
14511
  "class": "v-combobox__selection-comma"
14358
14512
  }, [vue.createTextVNode(",")])])]);
14359
- })])
14513
+ })]),
14514
+ 'append-inner': function () {
14515
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
14516
+ args[_key] = arguments[_key];
14517
+ }
14518
+ return vue.createVNode(vue.Fragment, null, [slots['append-inner']?.(...args), (!props.hideNoData || props.items.length) && props.menuIcon ? vue.createVNode(VIcon, {
14519
+ "class": "v-combobox__menu-icon",
14520
+ "icon": props.menuIcon,
14521
+ "onMousedown": onMousedownMenuIcon,
14522
+ "onClick": noop
14523
+ }, null) : undefined]);
14524
+ }
14360
14525
  });
14361
14526
  });
14362
14527
  return forwardRefs({
@@ -14787,6 +14952,7 @@
14787
14952
  const vFieldRef = vue.ref();
14788
14953
  const inputRef = vue.ref();
14789
14954
  const isActive = vue.computed(() => isFocused.value || props.active);
14955
+ const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
14790
14956
  function onFocus() {
14791
14957
  if (inputRef.value !== document.activeElement) {
14792
14958
  inputRef.value?.focus();
@@ -14830,10 +14996,15 @@
14830
14996
  "ref": vInputRef,
14831
14997
  "modelValue": model.value,
14832
14998
  "onUpdate:modelValue": $event => model.value = $event,
14833
- "class": ['v-file-input', props.class],
14999
+ "class": ['v-file-input', {
15000
+ 'v-file-input--chips': !!props.chips,
15001
+ 'v-file-input--selection-slot': !!slots.selection,
15002
+ 'v-text-field--plain-underlined': isPlainOrUnderlined.value
15003
+ }, props.class],
14834
15004
  "style": props.style,
14835
15005
  "onClick:prepend": onClickPrepend
14836
15006
  }, rootAttrs, inputProps, {
15007
+ "centerAffix": !isPlainOrUnderlined.value,
14837
15008
  "focused": isFocused.value
14838
15009
  }), {
14839
15010
  ...slots,
@@ -15385,9 +15556,6 @@
15385
15556
  });
15386
15557
 
15387
15558
  // Composables
15388
-
15389
- // Types
15390
-
15391
15559
  const VItem = genericComponent()({
15392
15560
  name: 'VItem',
15393
15561
  props: makeGroupItemProps(),
@@ -16804,15 +16972,15 @@
16804
16972
  }, [vue.createVNode("input", {
16805
16973
  "id": `${id.value}_start`,
16806
16974
  "name": props.name || id.value,
16807
- "disabled": props.disabled,
16808
- "readonly": props.readonly,
16975
+ "disabled": !!props.disabled,
16976
+ "readonly": !!props.readonly,
16809
16977
  "tabindex": "-1",
16810
16978
  "value": model.value[0]
16811
16979
  }, null), vue.createVNode("input", {
16812
16980
  "id": `${id.value}_stop`,
16813
16981
  "name": props.name || id.value,
16814
- "disabled": props.disabled,
16815
- "readonly": props.readonly,
16982
+ "disabled": !!props.disabled,
16983
+ "readonly": !!props.readonly,
16816
16984
  "tabindex": "-1",
16817
16985
  "value": model.value[1]
16818
16986
  }, null), vue.createVNode(VSliderTrack, {
@@ -18089,6 +18257,11 @@
18089
18257
  }
18090
18258
  }
18091
18259
  const sizerRef = vue.ref();
18260
+ const rows = vue.ref(+props.rows);
18261
+ const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
18262
+ vue.watchEffect(() => {
18263
+ if (!props.autoGrow) rows.value = +props.rows;
18264
+ });
18092
18265
  function calculateInputHeight() {
18093
18266
  if (!props.autoGrow) return;
18094
18267
  vue.nextTick(() => {
@@ -18100,7 +18273,9 @@
18100
18273
  const lineHeight = parseFloat(style.lineHeight);
18101
18274
  const minHeight = Math.max(parseFloat(props.rows) * lineHeight + padding, parseFloat(fieldStyle.getPropertyValue('--v-input-control-height')));
18102
18275
  const maxHeight = parseFloat(props.maxRows) * lineHeight + padding || Infinity;
18103
- controlHeight.value = convertToUnit(clamp(height ?? 0, minHeight, maxHeight));
18276
+ const newHeight = clamp(height ?? 0, minHeight, maxHeight);
18277
+ rows.value = Math.floor((newHeight - padding) / lineHeight);
18278
+ controlHeight.value = convertToUnit(newHeight);
18104
18279
  });
18105
18280
  }
18106
18281
  vue.onMounted(calculateInputHeight);
@@ -18140,10 +18315,11 @@
18140
18315
  'v-text-field--suffixed': props.suffix,
18141
18316
  'v-textarea--auto-grow': props.autoGrow,
18142
18317
  'v-textarea--no-resize': props.noResize || props.autoGrow,
18143
- 'v-text-field--flush-details': ['plain', 'underlined'].includes(props.variant)
18318
+ 'v-text-field--plain-underlined': isPlainOrUnderlined.value
18144
18319
  }, props.class],
18145
18320
  "style": props.style
18146
18321
  }, rootAttrs, inputProps, {
18322
+ "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
18147
18323
  "focused": isFocused.value
18148
18324
  }), {
18149
18325
  ...slots,
@@ -18167,6 +18343,7 @@
18167
18343
  "role": "textbox"
18168
18344
  }, fieldProps, {
18169
18345
  "active": isActive.value || isDirty.value,
18346
+ "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
18170
18347
  "dirty": isDirty.value || props.dirty,
18171
18348
  "disabled": isDisabled.value,
18172
18349
  "focused": isFocused.value,
@@ -19547,7 +19724,7 @@
19547
19724
  date
19548
19725
  };
19549
19726
  }
19550
- const version$1 = "3.2.4";
19727
+ const version$1 = "3.3.0";
19551
19728
  createVuetify$1.version = version$1;
19552
19729
 
19553
19730
  // Vue's inject() can only be used in setup
@@ -19567,7 +19744,7 @@
19567
19744
  ...options
19568
19745
  });
19569
19746
  };
19570
- const version = "3.2.4";
19747
+ const version = "3.3.0";
19571
19748
  createVuetify.version = version;
19572
19749
 
19573
19750
  exports.components = components;