vuetify 3.7.12 → 3.7.14

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 (272) hide show
  1. package/dist/json/attributes.json +2442 -2430
  2. package/dist/json/importMap-labs.json +8 -8
  3. package/dist/json/importMap.json +146 -146
  4. package/dist/json/tags.json +4 -1
  5. package/dist/json/web-types.json +4796 -4506
  6. package/dist/vuetify-labs.css +2781 -2771
  7. package/dist/vuetify-labs.d.ts +427 -163
  8. package/dist/vuetify-labs.esm.js +224 -143
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +223 -142
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +4465 -4469
  13. package/dist/vuetify.d.ts +173 -152
  14. package/dist/vuetify.esm.js +103 -85
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +102 -84
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +1082 -1077
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/blueprints/index.d.mts +1 -1
  22. package/lib/blueprints/md1.d.mts +1 -1
  23. package/lib/blueprints/md2.d.mts +1 -1
  24. package/lib/blueprints/md3.d.mts +1 -1
  25. package/lib/components/VAlert/VAlert.mjs +1 -1
  26. package/lib/components/VAlert/index.d.mts +1 -1
  27. package/lib/components/VAppBar/VAppBar.mjs +1 -1
  28. package/lib/components/VAppBar/VAppBarNavIcon.mjs +1 -1
  29. package/lib/components/VAppBar/VAppBarTitle.mjs +1 -1
  30. package/lib/components/VAppBar/index.d.mts +5 -5
  31. package/lib/components/VAutocomplete/VAutocomplete.mjs +1 -1
  32. package/lib/components/VAutocomplete/index.d.mts +4 -4
  33. package/lib/components/VAvatar/index.d.mts +1 -1
  34. package/lib/components/VBadge/VBadge.mjs +1 -1
  35. package/lib/components/VBadge/index.d.mts +1 -1
  36. package/lib/components/VBanner/VBanner.mjs +1 -1
  37. package/lib/components/VBanner/index.d.mts +1 -1
  38. package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -0
  39. package/lib/components/VBottomNavigation/VBottomNavigation.sass +1 -0
  40. package/lib/components/VBottomNavigation/index.d.mts +1 -1
  41. package/lib/components/VBottomSheet/VBottomSheet.mjs +1 -1
  42. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +1 -1
  43. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +1 -1
  44. package/lib/components/VBreadcrumbs/index.d.mts +5 -5
  45. package/lib/components/VBtn/VBtn.mjs +1 -1
  46. package/lib/components/VBtn/index.d.mts +5 -5
  47. package/lib/components/VBtnGroup/VBtnGroup.mjs +1 -1
  48. package/lib/components/VBtnToggle/VBtnToggle.mjs +1 -1
  49. package/lib/components/VBtnToggle/index.d.mts +1 -1
  50. package/lib/components/VCard/VCard.mjs +1 -1
  51. package/lib/components/VCard/VCardItem.mjs +1 -1
  52. package/lib/components/VCard/VCardSubtitle.mjs +1 -1
  53. package/lib/components/VCard/VCardText.mjs +1 -1
  54. package/lib/components/VCard/index.d.mts +5 -5
  55. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  56. package/lib/components/VCarousel/VCarouselItem.mjs +1 -1
  57. package/lib/components/VCarousel/index.d.mts +1 -1
  58. package/lib/components/VCheckbox/VCheckbox.mjs +1 -1
  59. package/lib/components/VCheckbox/VCheckboxBtn.mjs +1 -1
  60. package/lib/components/VCheckbox/index.d.mts +1 -1
  61. package/lib/components/VChip/VChip.mjs +1 -1
  62. package/lib/components/VChip/index.d.mts +5 -5
  63. package/lib/components/VChipGroup/VChipGroup.mjs +1 -1
  64. package/lib/components/VChipGroup/index.d.mts +1 -1
  65. package/lib/components/VColorPicker/VColorPicker.mjs +1 -1
  66. package/lib/components/VColorPicker/index.d.mts +10 -10
  67. package/lib/components/VCombobox/VCombobox.mjs +1 -1
  68. package/lib/components/VCombobox/index.d.mts +4 -4
  69. package/lib/components/VConfirmEdit/VConfirmEdit.mjs +1 -1
  70. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.browser.mjs +5 -5
  71. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.browser.mjs.map +1 -1
  72. package/lib/components/VConfirmEdit/index.d.mts +1 -1
  73. package/lib/components/VCounter/VCounter.mjs +1 -1
  74. package/lib/components/VDataIterator/index.d.mts +1 -1
  75. package/lib/components/VDataTable/VDataTable.mjs +1 -1
  76. package/lib/components/VDataTable/VDataTableFooter.mjs +1 -1
  77. package/lib/components/VDataTable/VDataTableGroupHeaderRow.mjs +1 -1
  78. package/lib/components/VDataTable/VDataTableHeaders.mjs +1 -1
  79. package/lib/components/VDataTable/VDataTableRow.mjs +1 -1
  80. package/lib/components/VDataTable/VDataTableRows.mjs +1 -1
  81. package/lib/components/VDataTable/VDataTableServer.mjs +1 -1
  82. package/lib/components/VDataTable/VDataTableVirtual.mjs +1 -1
  83. package/lib/components/VDataTable/composables/sort.mjs +12 -8
  84. package/lib/components/VDataTable/composables/sort.mjs.map +1 -1
  85. package/lib/components/VDataTable/index.d.mts +1 -1
  86. package/lib/components/VDatePicker/VDatePicker.mjs +20 -11
  87. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  88. package/lib/components/VDatePicker/VDatePickerControls.mjs +1 -1
  89. package/lib/components/VDatePicker/VDatePickerControls.mjs.map +1 -1
  90. package/lib/components/VDatePicker/VDatePickerMonth.mjs +1 -1
  91. package/lib/components/VDatePicker/VDatePickerMonths.mjs +1 -1
  92. package/lib/components/VDatePicker/VDatePickerYears.mjs +1 -1
  93. package/lib/components/VDatePicker/index.d.mts +28 -16
  94. package/lib/components/VDialog/VDialog.mjs +1 -1
  95. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs +1 -1
  96. package/lib/components/VDialog/index.d.mts +3 -3
  97. package/lib/components/VEmptyState/VEmptyState.mjs +1 -1
  98. package/lib/components/VEmptyState/index.d.mts +1 -1
  99. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +1 -1
  100. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +1 -1
  101. package/lib/components/VExpansionPanel/index.d.mts +1 -1
  102. package/lib/components/VFab/VFab.mjs +1 -1
  103. package/lib/components/VFab/index.d.mts +5 -5
  104. package/lib/components/VField/VField.mjs +1 -1
  105. package/lib/components/VField/VFieldLabel.mjs +1 -1
  106. package/lib/components/VField/index.d.mts +1 -1
  107. package/lib/components/VFileInput/VFileInput.css +0 -1
  108. package/lib/components/VFileInput/VFileInput.mjs +13 -4
  109. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  110. package/lib/components/VFileInput/VFileInput.sass +0 -1
  111. package/lib/components/VFileInput/index.d.mts +4 -4
  112. package/lib/components/VFooter/VFooter.mjs +1 -1
  113. package/lib/components/VGrid/VContainer.mjs +1 -1
  114. package/lib/components/VIcon/index.d.mts +1 -1
  115. package/lib/components/VImg/VImg.mjs +1 -1
  116. package/lib/components/VInfiniteScroll/VInfiniteScroll.mjs +1 -1
  117. package/lib/components/VInput/VInput.mjs +3 -3
  118. package/lib/components/VInput/VInput.mjs.map +1 -1
  119. package/lib/components/VInput/index.d.mts +1 -1
  120. package/lib/components/VItemGroup/index.d.mts +1 -1
  121. package/lib/components/VLazy/VLazy.mjs +1 -1
  122. package/lib/components/VList/VList.mjs +2 -2
  123. package/lib/components/VList/VList.mjs.map +1 -1
  124. package/lib/components/VList/VListChildren.mjs +1 -1
  125. package/lib/components/VList/VListGroup.mjs +1 -1
  126. package/lib/components/VList/VListItem.mjs +3 -2
  127. package/lib/components/VList/VListItem.mjs.map +1 -1
  128. package/lib/components/VList/VListItemAction.mjs +1 -1
  129. package/lib/components/VList/VListItemMedia.mjs +1 -1
  130. package/lib/components/VList/VListItemSubtitle.mjs +1 -1
  131. package/lib/components/VList/index.d.mts +17 -5
  132. package/lib/components/VMenu/VMenu.mjs +1 -1
  133. package/lib/components/VMenu/index.d.mts +3 -3
  134. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +0 -4
  135. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +3 -6
  136. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  137. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +0 -5
  138. package/lib/components/VOtpInput/VOtpInput.mjs +3 -3
  139. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  140. package/lib/components/VOverlay/VOverlay.mjs +1 -1
  141. package/lib/components/VPagination/VPagination.mjs +1 -1
  142. package/lib/components/VPagination/index.d.mts +1 -1
  143. package/lib/components/VParallax/VParallax.mjs +1 -1
  144. package/lib/components/VRadio/VRadio.mjs +1 -1
  145. package/lib/components/VRadio/index.d.mts +1 -1
  146. package/lib/components/VRadioGroup/VRadioGroup.mjs +1 -1
  147. package/lib/components/VRadioGroup/index.d.mts +1 -1
  148. package/lib/components/VRangeSlider/VRangeSlider.mjs +1 -1
  149. package/lib/components/VRating/VRating.mjs +1 -1
  150. package/lib/components/VRating/index.d.mts +1 -1
  151. package/lib/components/VSelect/VSelect.mjs +1 -1
  152. package/lib/components/VSelect/index.d.mts +4 -4
  153. package/lib/components/VSelectionControl/VSelectionControl.mjs +1 -1
  154. package/lib/components/VSelectionControl/index.d.mts +1 -1
  155. package/lib/components/VSelectionControlGroup/index.d.mts +1 -1
  156. package/lib/components/VSheet/VSheet.mjs +1 -1
  157. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs +1 -1
  158. package/lib/components/VSlideGroup/index.d.mts +1 -1
  159. package/lib/components/VSlider/VSlider.mjs +1 -1
  160. package/lib/components/VSlider/VSliderThumb.mjs +1 -1
  161. package/lib/components/VSnackbar/VSnackbar.mjs +1 -1
  162. package/lib/components/VSnackbar/index.d.mts +3 -3
  163. package/lib/components/VSparkline/VBarline.mjs +1 -2
  164. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  165. package/lib/components/VSparkline/VSparkline.mjs +1 -1
  166. package/lib/components/VSparkline/VTrendline.mjs +1 -2
  167. package/lib/components/VSparkline/VTrendline.mjs.map +1 -1
  168. package/lib/components/VSpeedDial/VSpeedDial.mjs +1 -1
  169. package/lib/components/VStepper/VStepper.mjs +3 -3
  170. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  171. package/lib/components/VStepper/VStepperItem.mjs +1 -1
  172. package/lib/components/VStepper/VStepperWindow.mjs +1 -1
  173. package/lib/components/VStepper/VStepperWindowItem.mjs +1 -1
  174. package/lib/components/VStepper/index.d.mts +1 -1
  175. package/lib/components/VSwitch/VSwitch.mjs +1 -1
  176. package/lib/components/VSwitch/index.d.mts +1 -1
  177. package/lib/components/VSystemBar/VSystemBar.mjs +1 -1
  178. package/lib/components/VTabs/VTab.mjs +1 -1
  179. package/lib/components/VTabs/VTabs.mjs +1 -1
  180. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  181. package/lib/components/VTabs/VTabsWindow.mjs +1 -1
  182. package/lib/components/VTabs/VTabsWindowItem.mjs +1 -1
  183. package/lib/components/VTabs/index.d.mts +21 -21
  184. package/lib/components/VTextField/VTextField.mjs +1 -1
  185. package/lib/components/VTextField/index.d.mts +7 -7
  186. package/lib/components/VTextarea/VTextarea.mjs +1 -1
  187. package/lib/components/VTextarea/index.d.mts +4 -4
  188. package/lib/components/VTimeline/VTimeline.mjs +3 -3
  189. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  190. package/lib/components/VTimeline/VTimelineDivider.mjs +1 -1
  191. package/lib/components/VTimeline/VTimelineItem.mjs +1 -1
  192. package/lib/components/VTimeline/index.d.mts +1 -1
  193. package/lib/components/VToolbar/VToolbar.mjs +1 -1
  194. package/lib/components/VTooltip/VTooltip.mjs +1 -1
  195. package/lib/components/VTooltip/index.d.mts +3 -3
  196. package/lib/components/VValidation/index.d.mts +1 -1
  197. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +1 -1
  198. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +1 -1
  199. package/lib/components/VVirtualScroll/index.d.mts +1 -1
  200. package/lib/components/VWindow/VWindow.mjs +1 -1
  201. package/lib/components/VWindow/VWindowItem.mjs +1 -1
  202. package/lib/components/VWindow/index.d.mts +1 -1
  203. package/lib/components/index.d.mts +127 -106
  204. package/lib/components/transitions/dialog-transition.mjs +1 -2
  205. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  206. package/lib/composables/calendar.mjs +4 -1
  207. package/lib/composables/calendar.mjs.map +1 -1
  208. package/lib/composables/date/adapters/vuetify.mjs +9 -21
  209. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  210. package/lib/composables/density.mjs +1 -1
  211. package/lib/composables/density.mjs.map +1 -1
  212. package/lib/composables/icons.mjs +1 -1
  213. package/lib/composables/list-items.mjs +2 -3
  214. package/lib/composables/list-items.mjs.map +1 -1
  215. package/lib/composables/nested/nested.mjs +16 -1
  216. package/lib/composables/nested/nested.mjs.map +1 -1
  217. package/lib/composables/variant.mjs +1 -1
  218. package/lib/entry-bundler.mjs +1 -1
  219. package/lib/framework.mjs +1 -1
  220. package/lib/iconsets/fa-svg.d.mts +1 -1
  221. package/lib/iconsets/fa.d.mts +1 -1
  222. package/lib/iconsets/fa4.d.mts +1 -1
  223. package/lib/iconsets/md.d.mts +1 -1
  224. package/lib/iconsets/mdi-svg.d.mts +1 -1
  225. package/lib/iconsets/mdi.d.mts +1 -1
  226. package/lib/index.d.mts +47 -47
  227. package/lib/labs/VCalendar/VCalendar.mjs +1 -1
  228. package/lib/labs/VCalendar/VCalendarDay.mjs +1 -1
  229. package/lib/labs/VCalendar/index.d.mts +8 -2
  230. package/lib/labs/VDateInput/VDateInput.mjs +4 -3
  231. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  232. package/lib/labs/VDateInput/index.d.mts +256 -3
  233. package/lib/labs/VFileUpload/VFileUpload.mjs +3 -3
  234. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -1
  235. package/lib/labs/VFileUpload/VFileUploadItem.mjs +1 -1
  236. package/lib/labs/VFileUpload/index.d.mts +5 -5
  237. package/lib/labs/VNumberInput/VNumberInput.css +10 -2
  238. package/lib/labs/VNumberInput/VNumberInput.mjs +94 -36
  239. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  240. package/lib/labs/VNumberInput/VNumberInput.sass +12 -2
  241. package/lib/labs/VNumberInput/index.d.mts +59 -32
  242. package/lib/labs/VPicker/VPicker.mjs +1 -1
  243. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs +1 -1
  244. package/lib/labs/VSnackbarQueue/index.d.mts +3 -3
  245. package/lib/labs/VStepperVertical/VStepperVertical.mjs +1 -1
  246. package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs +1 -1
  247. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +1 -1
  248. package/lib/labs/VStepperVertical/index.d.mts +1 -1
  249. package/lib/labs/VTimePicker/VTimePicker.mjs +1 -1
  250. package/lib/labs/VTimePicker/VTimePickerControls.mjs +1 -1
  251. package/lib/labs/VTimePicker/VTimePickerControls.sass +16 -16
  252. package/lib/labs/VTimePicker/_variables.scss +12 -12
  253. package/lib/labs/VTreeview/VTreeview.mjs +7 -3
  254. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  255. package/lib/labs/VTreeview/VTreeviewChildren.mjs +6 -9
  256. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  257. package/lib/labs/VTreeview/VTreeviewGroup.mjs +1 -1
  258. package/lib/labs/VTreeview/VTreeviewItem.css +15 -9
  259. package/lib/labs/VTreeview/VTreeviewItem.mjs +14 -14
  260. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  261. package/lib/labs/VTreeview/VTreeviewItem.sass +16 -10
  262. package/lib/labs/VTreeview/_variables.scss +2 -5
  263. package/lib/labs/VTreeview/index.d.mts +14 -20
  264. package/lib/labs/components.d.mts +365 -122
  265. package/lib/locale/adapters/vue-i18n.mjs +0 -1
  266. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  267. package/lib/locale/ja.mjs +19 -19
  268. package/lib/locale/ja.mjs.map +1 -1
  269. package/lib/styles/tools/_functions.sass +1 -1
  270. package/lib/util/helpers.mjs +3 -9
  271. package/lib/util/helpers.mjs.map +1 -1
  272. package/package.json +17 -16
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.12
2
+ * Vuetify v3.7.14
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -230,10 +230,9 @@
230
230
  // Array of keys
231
231
  function pick(obj, paths) {
232
232
  const found = {};
233
- const keys = new Set(Object.keys(obj));
234
- for (const path of paths) {
235
- if (keys.has(path)) {
236
- found[path] = obj[path];
233
+ for (const key of paths) {
234
+ if (Object.hasOwn(obj, key)) {
235
+ found[key] = obj[key];
237
236
  }
238
237
  }
239
238
  return found;
@@ -247,7 +246,7 @@
247
246
  const found = Object.create(null);
248
247
  const rest = Object.create(null);
249
248
  for (const key in obj) {
250
- if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && !exclude?.some(path => path === key)) {
249
+ if (paths.some(path => path instanceof RegExp ? path.test(key) : path === key) && true) {
251
250
  found[key] = obj[key];
252
251
  } else {
253
252
  rest[key] = obj[key];
@@ -262,11 +261,6 @@
262
261
  exclude.forEach(prop => delete clone[prop]);
263
262
  return clone;
264
263
  }
265
- function only(obj, include) {
266
- const clone = {};
267
- include.forEach(prop => clone[prop] = obj[prop]);
268
- return clone;
269
- }
270
264
  const onRE = /^on[^a-z]/;
271
265
  const isOn = key => onRE.test(key);
272
266
  const bubblingEvents = ['onAfterscriptexecute', 'onAnimationcancel', 'onAnimationend', 'onAnimationiteration', 'onAnimationstart', 'onAuxclick', 'onBeforeinput', 'onBeforescriptexecute', 'onChange', 'onClick', 'onCompositionend', 'onCompositionstart', 'onCompositionupdate', 'onContextmenu', 'onCopy', 'onCut', 'onDblclick', 'onFocusin', 'onFocusout', 'onFullscreenchange', 'onFullscreenerror', 'onGesturechange', 'onGestureend', 'onGesturestart', 'onGotpointercapture', 'onInput', 'onKeydown', 'onKeypress', 'onKeyup', 'onLostpointercapture', 'onMousedown', 'onMousemove', 'onMouseout', 'onMouseover', 'onMouseup', 'onMousewheel', 'onPaste', 'onPointercancel', 'onPointerdown', 'onPointerenter', 'onPointerleave', 'onPointermove', 'onPointerout', 'onPointerover', 'onPointerup', 'onReset', 'onSelect', 'onSubmit', 'onTouchcancel', 'onTouchend', 'onTouchmove', 'onTouchstart', 'onTransitioncancel', 'onTransitionend', 'onTransitionrun', 'onTransitionstart', 'onWheel'];
@@ -881,7 +875,7 @@
881
875
  // WoB should always return negative value.
882
876
 
883
877
  const SAPC = (Ybg ** revBG - Ytxt ** revTXT) * scaleWoB;
884
- outputContrast = SAPC > -loClip ? 0.0 : SAPC > -loConThresh ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
878
+ outputContrast = SAPC > -1e-3 ? 0.0 : SAPC > -0.078 ? SAPC - SAPC * loConFactor * loConOffset : SAPC + loConOffset;
885
879
  }
886
880
  return outputContrast * 100;
887
881
  }
@@ -921,7 +915,7 @@
921
915
  // Types
922
916
 
923
917
  // For converting XYZ to sRGB
924
- const srgbForwardMatrix = [[3.2406, -1.5372, -0.4986], [-0.9689, 1.8758, 0.0415], [0.0557, -0.2040, 1.0570]];
918
+ const srgbForwardMatrix = [[3.2406, -1.5372, -0.4986], [-0.9689, 1.8758, 0.0415], [0.0557, -0.204, 1.0570]];
925
919
 
926
920
  // Forward gamma adjust
927
921
  const srgbForwardTransform = C => C <= 0.0031308 ? C * 12.92 : 1.055 * C ** (1 / 2.4) - 0.055;
@@ -1269,7 +1263,7 @@
1269
1263
  function getCurrentInstance(name, message) {
1270
1264
  const vm = vue.getCurrentInstance();
1271
1265
  if (!vm) {
1272
- throw new Error(`[Vuetify] ${name} ${message || 'must be called from inside a setup function'}`);
1266
+ throw new Error(`[Vuetify] ${name} ${'must be called from inside a setup function'}`);
1273
1267
  }
1274
1268
  return vm;
1275
1269
  }
@@ -2822,6 +2816,8 @@
2822
2816
  }
2823
2817
  }
2824
2818
 
2819
+ // Utilities
2820
+
2825
2821
  // Types
2826
2822
 
2827
2823
  const makeVDialogTransitionProps = propsFactory({
@@ -4016,7 +4012,7 @@
4016
4012
 
4017
4013
  const allowedDensities = [null, 'default', 'comfortable', 'compact'];
4018
4014
 
4019
- // typeof allowedDensities[number] evalutes to any
4015
+ // typeof allowedDensities[number] evaluates to any
4020
4016
  // when generating api types for whatever reason.
4021
4017
 
4022
4018
  // Composables
@@ -4724,7 +4720,6 @@
4724
4720
  const isIntersecting = vue.shallowRef(false);
4725
4721
  if (SUPPORTS_INTERSECTION) {
4726
4722
  const observer = new IntersectionObserver(entries => {
4727
- callback?.(entries, observer);
4728
4723
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4729
4724
  }, options);
4730
4725
  vue.onBeforeUnmount(() => {
@@ -6896,7 +6891,7 @@
6896
6891
  'onClick:append': EventProp(),
6897
6892
  ...makeComponentProps(),
6898
6893
  ...makeDensityProps(),
6899
- ...only(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
6894
+ ...pick(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
6900
6895
  ...makeThemeProps(),
6901
6896
  ...makeValidationProps()
6902
6897
  }, 'VInput');
@@ -8724,7 +8719,22 @@
8724
8719
  parents: parents.value,
8725
8720
  event
8726
8721
  });
8727
- newActivated && (activated.value = newActivated);
8722
+ if (newActivated.size !== activated.value.size) {
8723
+ activated.value = newActivated;
8724
+ } else {
8725
+ for (const value of newActivated) {
8726
+ if (!activated.value.has(value)) {
8727
+ activated.value = newActivated;
8728
+ return;
8729
+ }
8730
+ }
8731
+ for (const value of activated.value) {
8732
+ if (!newActivated.has(value)) {
8733
+ activated.value = newActivated;
8734
+ return;
8735
+ }
8736
+ }
8737
+ }
8728
8738
  },
8729
8739
  children,
8730
8740
  parents,
@@ -9171,7 +9181,8 @@
9171
9181
  list,
9172
9182
  select,
9173
9183
  root,
9174
- id: uid
9184
+ id: uid,
9185
+ link
9175
9186
  };
9176
9187
  }
9177
9188
  });
@@ -9439,7 +9450,6 @@
9439
9450
  function transformIn(value) {
9440
9451
  // Cache unrefed values outside the loop,
9441
9452
  // proxy getters can be slow when you call them a billion times
9442
- const _value = vue.toRaw(value);
9443
9453
  const _items = itemsMap.value;
9444
9454
  const _allItems = items.value;
9445
9455
  const _keylessItems = keylessItems.value;
@@ -9449,7 +9459,7 @@
9449
9459
  const valueComparator = props.valueComparator || deepEqual;
9450
9460
  const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9451
9461
  const returnValue = [];
9452
- main: for (const v of _value) {
9462
+ main: for (const v of value) {
9453
9463
  // When the model value is null, return an InternalItem
9454
9464
  // based on null only if null is one of the items
9455
9465
  if (!_hasNullItem && v === null) continue;
@@ -9695,7 +9705,7 @@
9695
9705
  'v-list--slim': props.slim
9696
9706
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
9697
9707
  "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
9698
- "tabindex": props.disabled || isFocused.value ? -1 : 0,
9708
+ "tabindex": props.disabled ? -1 : 0,
9699
9709
  "role": "listbox",
9700
9710
  "aria-activedescendant": undefined,
9701
9711
  "onFocusin": onFocusin,
@@ -17707,16 +17717,13 @@
17707
17717
  case 'fullTime':
17708
17718
  options = {
17709
17719
  hour: 'numeric',
17710
- minute: 'numeric',
17711
- second: 'numeric',
17712
- hour12: true
17720
+ minute: 'numeric'
17713
17721
  };
17714
17722
  break;
17715
17723
  case 'fullTime12h':
17716
17724
  options = {
17717
17725
  hour: 'numeric',
17718
17726
  minute: 'numeric',
17719
- second: 'numeric',
17720
17727
  hour12: true
17721
17728
  };
17722
17729
  break;
@@ -17724,40 +17731,35 @@
17724
17731
  options = {
17725
17732
  hour: 'numeric',
17726
17733
  minute: 'numeric',
17727
- second: 'numeric',
17728
17734
  hour12: false
17729
17735
  };
17730
17736
  break;
17731
17737
  case 'fullDateTime':
17732
17738
  options = {
17733
17739
  year: 'numeric',
17734
- month: 'long',
17740
+ month: 'short',
17735
17741
  day: 'numeric',
17736
17742
  hour: 'numeric',
17737
- minute: 'numeric',
17738
- second: 'numeric',
17739
- hour12: true
17743
+ minute: 'numeric'
17740
17744
  };
17741
17745
  break;
17742
17746
  case 'fullDateTime12h':
17743
17747
  options = {
17744
17748
  year: 'numeric',
17745
- month: 'long',
17749
+ month: 'short',
17746
17750
  day: 'numeric',
17747
17751
  hour: 'numeric',
17748
17752
  minute: 'numeric',
17749
- second: 'numeric',
17750
17753
  hour12: true
17751
17754
  };
17752
17755
  break;
17753
17756
  case 'fullDateTime24h':
17754
17757
  options = {
17755
17758
  year: 'numeric',
17756
- month: 'long',
17759
+ month: 'short',
17757
17760
  day: 'numeric',
17758
17761
  hour: 'numeric',
17759
17762
  minute: 'numeric',
17760
- second: 'numeric',
17761
17763
  hour12: false
17762
17764
  };
17763
17765
  break;
@@ -17774,11 +17776,9 @@
17774
17776
  month: '2-digit',
17775
17777
  day: '2-digit',
17776
17778
  hour: 'numeric',
17777
- minute: 'numeric',
17778
- second: 'numeric',
17779
- hour12: false
17779
+ minute: 'numeric'
17780
17780
  };
17781
- break;
17781
+ return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ');
17782
17782
  case 'keyboardDateTime12h':
17783
17783
  options = {
17784
17784
  year: 'numeric',
@@ -17786,10 +17786,9 @@
17786
17786
  day: '2-digit',
17787
17787
  hour: 'numeric',
17788
17788
  minute: 'numeric',
17789
- second: 'numeric',
17790
17789
  hour12: true
17791
17790
  };
17792
- break;
17791
+ return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ');
17793
17792
  case 'keyboardDateTime24h':
17794
17793
  options = {
17795
17794
  year: 'numeric',
@@ -17797,10 +17796,9 @@
17797
17796
  day: '2-digit',
17798
17797
  hour: 'numeric',
17799
17798
  minute: 'numeric',
17800
- second: 'numeric',
17801
17799
  hour12: false
17802
17800
  };
17803
- break;
17801
+ return new Intl.DateTimeFormat(locale, options).format(newDate).replace(/, /g, ' ');
17804
17802
  default:
17805
17803
  options = customFormat ?? {
17806
17804
  timeZone: 'UTC',
@@ -18369,13 +18367,7 @@
18369
18367
  return [...new Set(arr)];
18370
18368
  }
18371
18369
  return dive({
18372
- type: 'group',
18373
- items,
18374
- id: 'dummy',
18375
- key: 'dummy',
18376
- value: 'dummy',
18377
- depth: 0
18378
- });
18370
+ items});
18379
18371
  }
18380
18372
 
18381
18373
  // onBeforeMount(() => {
@@ -18819,15 +18811,19 @@
18819
18811
  })) ?? [];
18820
18812
  const item = newSortBy.find(x => x.key === column.key);
18821
18813
  if (!item) {
18822
- if (multiSort.value) newSortBy = [...newSortBy, {
18823
- key: column.key,
18824
- order: 'asc'
18825
- }];else newSortBy = [{
18826
- key: column.key,
18827
- order: 'asc'
18828
- }];
18814
+ if (multiSort.value) {
18815
+ newSortBy.push({
18816
+ key: column.key,
18817
+ order: 'asc'
18818
+ });
18819
+ } else {
18820
+ newSortBy = [{
18821
+ key: column.key,
18822
+ order: 'asc'
18823
+ }];
18824
+ }
18829
18825
  } else if (item.order === 'desc') {
18830
- if (mustSort.value) {
18826
+ if (mustSort.value && newSortBy.length === 1) {
18831
18827
  item.order = 'asc';
18832
18828
  } else {
18833
18829
  newSortBy = newSortBy.filter(x => x.key !== column.key);
@@ -21452,7 +21448,7 @@
21452
21448
  },
21453
21449
  disabled: {
21454
21450
  type: [Boolean, String, Array],
21455
- default: false
21451
+ default: null
21456
21452
  },
21457
21453
  nextIcon: {
21458
21454
  type: IconValue,
@@ -21634,7 +21630,10 @@
21634
21630
  // Composables
21635
21631
  const makeCalendarProps = propsFactory({
21636
21632
  allowedDates: [Array, Function],
21637
- disabled: Boolean,
21633
+ disabled: {
21634
+ type: Boolean,
21635
+ default: null
21636
+ },
21638
21637
  displayValue: null,
21639
21638
  modelValue: Array,
21640
21639
  month: [Number, String],
@@ -22238,9 +22237,26 @@
22238
22237
  const model = useProxiedModel(props, 'modelValue', undefined, v => wrapInArray(v), v => props.multiple ? v : v[0]);
22239
22238
  const viewMode = useProxiedModel(props, 'viewMode');
22240
22239
  // const inputMode = useProxiedModel(props, 'inputMode')
22240
+
22241
+ const minDate = vue.computed(() => {
22242
+ const date = adapter.date(props.min);
22243
+ return props.min && adapter.isValid(date) ? date : null;
22244
+ });
22245
+ const maxDate = vue.computed(() => {
22246
+ const date = adapter.date(props.max);
22247
+ return props.max && adapter.isValid(date) ? date : null;
22248
+ });
22241
22249
  const internal = vue.computed(() => {
22242
- const value = adapter.date(model.value?.[0]);
22243
- return value && adapter.isValid(value) ? value : adapter.date();
22250
+ const today = adapter.date();
22251
+ let value = today;
22252
+ if (model.value?.[0]) {
22253
+ value = adapter.date(model.value[0]);
22254
+ } else if (minDate.value && adapter.isBefore(today, minDate.value)) {
22255
+ value = minDate.value;
22256
+ } else if (maxDate.value && adapter.isAfter(today, maxDate.value)) {
22257
+ value = maxDate.value;
22258
+ }
22259
+ return value && adapter.isValid(value) ? value : today;
22244
22260
  });
22245
22261
  const month = vue.ref(Number(props.month ?? adapter.getMonth(adapter.startOfMonth(internal.value))));
22246
22262
  const year = vue.ref(Number(props.year ?? adapter.getYear(adapter.startOfYear(adapter.setMonth(internal.value, month.value)))));
@@ -22260,14 +22276,6 @@
22260
22276
  });
22261
22277
  // const headerIcon = computed(() => props.inputMode === 'calendar' ? props.keyboardIcon : props.calendarIcon)
22262
22278
  const headerTransition = vue.computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
22263
- const minDate = vue.computed(() => {
22264
- const date = adapter.date(props.min);
22265
- return props.min && adapter.isValid(date) ? date : null;
22266
- });
22267
- const maxDate = vue.computed(() => {
22268
- const date = adapter.date(props.max);
22269
- return props.max && adapter.isValid(date) ? date : null;
22270
- });
22271
22279
  const disabled = vue.computed(() => {
22272
22280
  if (props.disabled) return true;
22273
22281
  const targets = [];
@@ -23046,6 +23054,14 @@
23046
23054
  callEvent(props['onClick:clear'], e);
23047
23055
  });
23048
23056
  }
23057
+ function onDragover(e) {
23058
+ e.preventDefault();
23059
+ }
23060
+ function onDrop(e) {
23061
+ e.preventDefault();
23062
+ if (!e.dataTransfer) return;
23063
+ model.value = [...(e.dataTransfer.files ?? [])];
23064
+ }
23049
23065
  vue.watch(model, newValue => {
23050
23066
  const hasModelReset = !Array.isArray(newValue) || !newValue.length;
23051
23067
  if (hasModelReset && inputRef.value) {
@@ -23063,8 +23079,7 @@
23063
23079
  const fieldProps = filterFieldProps(props);
23064
23080
  return vue.createVNode(VInput, vue.mergeProps({
23065
23081
  "ref": vInputRef,
23066
- "modelValue": model.value,
23067
- "onUpdate:modelValue": $event => model.value = $event,
23082
+ "modelValue": props.multiple ? model.value : model.value[0],
23068
23083
  "class": ['v-file-input', {
23069
23084
  'v-file-input--chips': !!props.chips,
23070
23085
  'v-file-input--hide': props.hideInput,
@@ -23099,7 +23114,9 @@
23099
23114
  "dirty": isDirty.value || props.dirty,
23100
23115
  "disabled": isDisabled.value,
23101
23116
  "focused": isFocused.value,
23102
- "error": isValid.value === false
23117
+ "error": isValid.value === false,
23118
+ "onDragover": onDragover,
23119
+ "onDrop": onDrop
23103
23120
  }), {
23104
23121
  ...slots,
23105
23122
  default: _ref4 => {
@@ -23903,7 +23920,7 @@
23903
23920
  /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
23904
23921
  function kineticEnergyToVelocity(work) {
23905
23922
  const sqrt2 = 1.41421356237;
23906
- return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
23923
+ return (work < 0 ? -1 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
23907
23924
  }
23908
23925
 
23909
23926
  /**
@@ -24285,7 +24302,6 @@
24285
24302
  const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;
24286
24303
  return isDragging.value ? size * dragProgress.value : size;
24287
24304
  });
24288
- const elementSize = vue.computed(() => ['top', 'bottom'].includes(props.location) ? 0 : width.value);
24289
24305
  const {
24290
24306
  layoutItemStyles,
24291
24307
  layoutItemScrimStyles
@@ -24294,7 +24310,7 @@
24294
24310
  order: vue.computed(() => parseInt(props.order, 10)),
24295
24311
  position: location,
24296
24312
  layoutSize,
24297
- elementSize,
24313
+ elementSize: width,
24298
24314
  active: vue.computed(() => isActive.value || isDragging.value),
24299
24315
  disableTransitions: vue.computed(() => isDragging.value),
24300
24316
  absolute: vue.computed(() =>
@@ -24340,9 +24356,7 @@
24340
24356
  'v-navigation-drawer--active': isActive.value,
24341
24357
  'v-navigation-drawer--sticky': isSticky.value
24342
24358
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
24343
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style, ['top', 'bottom'].includes(location.value) ? {
24344
- height: 'auto'
24345
- } : {}]
24359
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
24346
24360
  }, scopeId, attrs), {
24347
24361
  default: () => [hasImage && vue.createVNode("div", {
24348
24362
  "key": "image",
@@ -24429,7 +24443,7 @@
24429
24443
  },
24430
24444
  ...makeDimensionProps(),
24431
24445
  ...makeFocusProps(),
24432
- ...only(makeVFieldProps({
24446
+ ...pick(makeVFieldProps({
24433
24447
  variant: 'outlined'
24434
24448
  }), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'rounded', 'style', 'theme', 'variant'])
24435
24449
  }, 'VOtpInput');
@@ -25662,6 +25676,8 @@
25662
25676
  }
25663
25677
  }, 'Line');
25664
25678
 
25679
+ // Utilities
25680
+
25665
25681
  // Types
25666
25682
 
25667
25683
  const makeVBarlineProps = propsFactory({
@@ -25859,6 +25875,8 @@
25859
25875
  };
25860
25876
  }
25861
25877
 
25878
+ // Utilities
25879
+
25862
25880
  // Types
25863
25881
 
25864
25882
  const makeVTrendlineProps = propsFactory({
@@ -26413,7 +26431,7 @@
26413
26431
  selectedClass: 'v-stepper-item--selected'
26414
26432
  }),
26415
26433
  ...makeVSheetProps(),
26416
- ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
26434
+ ...pick(makeVStepperActionsProps(), ['prevText', 'nextText'])
26417
26435
  }, 'VStepper');
26418
26436
  const VStepper = genericComponent()({
26419
26437
  name: 'VStepper',
@@ -27495,7 +27513,7 @@
27495
27513
  type: String,
27496
27514
  validator: v => ['start', 'end', 'both'].includes(v)
27497
27515
  },
27498
- ...only(makeVTimelineItemProps({
27516
+ ...pick(makeVTimelineItemProps({
27499
27517
  lineInset: 0
27500
27518
  }), ['dotColor', 'fillDot', 'hideOpposite', 'iconColor', 'lineInset', 'size']),
27501
27519
  ...makeComponentProps(),
@@ -27801,6 +27819,10 @@
27801
27819
  ...makeVCalendarIntervalProps()
27802
27820
  },
27803
27821
  setup(props, _ref) {
27822
+ let {
27823
+ emit,
27824
+ slots
27825
+ } = _ref;
27804
27826
  const adapter = useDate();
27805
27827
  const interval = vue.computed(() => {
27806
27828
  const start = adapter.addMinutes(adapter.startOfDay(props.day.date), props.intervalDuration * (props.index + props.intervalStart));
@@ -28272,7 +28294,8 @@
28272
28294
  "onClick:prepend": isInteractive.value ? onClick : undefined,
28273
28295
  "onUpdate:modelValue": onUpdateModel
28274
28296
  }), {
28275
- default: () => [vue.createVNode(VMenu, {
28297
+ ...slots,
28298
+ default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, {
28276
28299
  "modelValue": menu.value,
28277
28300
  "onUpdate:modelValue": $event => menu.value = $event,
28278
28301
  "activator": "parent",
@@ -28315,7 +28338,7 @@
28315
28338
  });
28316
28339
  }
28317
28340
  })]
28318
- }), slots.default?.()]
28341
+ }), slots.default?.()])
28319
28342
  });
28320
28343
  });
28321
28344
  return forwardRefs({}, vDateInputRef);
@@ -28450,7 +28473,7 @@
28450
28473
  name: String,
28451
28474
  ...makeDelayProps(),
28452
28475
  ...makeDensityProps(),
28453
- ...only(makeVDividerProps({
28476
+ ...pick(makeVDividerProps({
28454
28477
  length: 150
28455
28478
  }), ['length', 'thickness', 'opacity']),
28456
28479
  ...makeVSheetProps()
@@ -28660,7 +28683,11 @@
28660
28683
  type: Number,
28661
28684
  default: 1
28662
28685
  },
28663
- ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon'])
28686
+ precision: {
28687
+ type: Number,
28688
+ default: 0
28689
+ },
28690
+ ...omit(makeVTextFieldProps({}), ['modelValue'])
28664
28691
  }, 'VNumberInput');
28665
28692
  const VNumberInput = genericComponent()({
28666
28693
  name: 'VNumberInput',
@@ -28674,27 +28701,37 @@
28674
28701
  let {
28675
28702
  slots
28676
28703
  } = _ref;
28677
- const _model = useProxiedModel(props, 'modelValue');
28678
- const model = vue.computed({
28679
- get: () => _model.value,
28680
- // model.value could be empty string from VTextField
28681
- // but _model.value should be eventually kept in type Number | null
28704
+ const vTextFieldRef = vue.ref();
28705
+ const form = useForm(props);
28706
+ const controlsDisabled = vue.computed(() => form.isDisabled.value || form.isReadonly.value);
28707
+ const isFocused = vue.ref(false);
28708
+ function correctPrecision(val) {
28709
+ let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
28710
+ const fixed = precision == null ? String(val) : val.toFixed(precision);
28711
+ return isFocused.value ? Number(fixed).toString() // trim zeros
28712
+ : fixed;
28713
+ }
28714
+ const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(+val, props.min, props.max));
28715
+ const _inputText = vue.shallowRef(null);
28716
+ vue.watchEffect(() => {
28717
+ if (isFocused.value && !controlsDisabled.value) ; else if (model.value == null) {
28718
+ _inputText.value = null;
28719
+ } else if (!isNaN(model.value)) {
28720
+ _inputText.value = correctPrecision(model.value);
28721
+ }
28722
+ });
28723
+ const inputText = vue.computed({
28724
+ get: () => _inputText.value,
28682
28725
  set(val) {
28683
28726
  if (val === null || val === '') {
28684
- _model.value = null;
28685
- return;
28686
- }
28687
- const value = Number(val);
28688
- if (!isNaN(value) && value <= props.max && value >= props.min) {
28689
- _model.value = value;
28727
+ model.value = null;
28728
+ _inputText.value = null;
28729
+ } else if (!isNaN(+val) && +val <= props.max && +val >= props.min) {
28730
+ model.value = +val;
28731
+ _inputText.value = val;
28690
28732
  }
28691
28733
  }
28692
28734
  });
28693
- const vTextFieldRef = vue.ref();
28694
- const stepDecimals = vue.computed(() => getDecimals(props.step));
28695
- const modelDecimals = vue.computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0);
28696
- const form = useForm(props);
28697
- const controlsDisabled = vue.computed(() => form.isDisabled.value || form.isReadonly.value);
28698
28735
  const canIncrease = vue.computed(() => {
28699
28736
  if (controlsDisabled.value) return false;
28700
28737
  return (model.value ?? 0) + props.step <= props.max;
@@ -28716,23 +28753,29 @@
28716
28753
  const decrementSlotProps = vue.computed(() => ({
28717
28754
  click: onClickDown
28718
28755
  }));
28756
+ vue.watch(() => props.precision, () => formatInputValue());
28719
28757
  vue.onMounted(() => {
28720
- if (!controlsDisabled.value) {
28721
- clampModel();
28722
- }
28758
+ clampModel();
28723
28759
  });
28760
+ function inferPrecision(value) {
28761
+ if (value == null) return 0;
28762
+ const str = value.toString();
28763
+ const idx = str.indexOf('.');
28764
+ return ~idx ? str.length - idx : 0;
28765
+ }
28724
28766
  function toggleUpDown() {
28725
28767
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
28726
28768
  if (controlsDisabled.value) return;
28727
28769
  if (model.value == null) {
28728
- model.value = clamp(0, props.min, props.max);
28770
+ inputText.value = correctPrecision(clamp(0, props.min, props.max));
28729
28771
  return;
28730
28772
  }
28731
- const decimals = Math.max(modelDecimals.value, stepDecimals.value);
28773
+ let inferredPrecision = Math.max(inferPrecision(model.value), inferPrecision(props.step));
28774
+ if (props.precision != null) inferredPrecision = Math.max(inferredPrecision, props.precision);
28732
28775
  if (increment) {
28733
- if (canIncrease.value) model.value = +(model.value + props.step).toFixed(decimals);
28776
+ if (canIncrease.value) inputText.value = correctPrecision(model.value + props.step, inferredPrecision);
28734
28777
  } else {
28735
- if (canDecrease.value) model.value = +(model.value - props.step).toFixed(decimals);
28778
+ if (canDecrease.value) inputText.value = correctPrecision(model.value - props.step, inferredPrecision);
28736
28779
  }
28737
28780
  }
28738
28781
  function onClickUp(e) {
@@ -28755,6 +28798,16 @@
28755
28798
  if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
28756
28799
  e.preventDefault();
28757
28800
  }
28801
+ if (props.precision == null) return;
28802
+
28803
+ // Ignore decimal digits above precision limit
28804
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
28805
+ e.preventDefault();
28806
+ }
28807
+ // Ignore decimal separator when precision = 0
28808
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
28809
+ e.preventDefault();
28810
+ }
28758
28811
  }
28759
28812
  async function onKeydown(e) {
28760
28813
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
@@ -28774,13 +28827,38 @@
28774
28827
  e.stopPropagation();
28775
28828
  }
28776
28829
  function clampModel() {
28830
+ if (controlsDisabled.value) return;
28777
28831
  if (!vTextFieldRef.value) return;
28778
- const inputText = vTextFieldRef.value.value;
28779
- if (inputText && !isNaN(+inputText)) {
28780
- model.value = clamp(+inputText, props.min, props.max);
28832
+ const actualText = vTextFieldRef.value.value;
28833
+ if (actualText && !isNaN(+actualText)) {
28834
+ inputText.value = correctPrecision(clamp(+actualText, props.min, props.max));
28781
28835
  } else {
28782
- model.value = null;
28836
+ inputText.value = null;
28837
+ }
28838
+ }
28839
+ function formatInputValue() {
28840
+ if (controlsDisabled.value) return;
28841
+ if (model.value === null || isNaN(model.value)) {
28842
+ inputText.value = null;
28843
+ return;
28844
+ }
28845
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
28846
+ }
28847
+ function trimDecimalZeros() {
28848
+ if (controlsDisabled.value) return;
28849
+ if (model.value === null || isNaN(model.value)) {
28850
+ inputText.value = null;
28851
+ return;
28783
28852
  }
28853
+ inputText.value = model.value.toString();
28854
+ }
28855
+ function onFocus() {
28856
+ isFocused.value = true;
28857
+ trimDecimalZeros();
28858
+ }
28859
+ function onBlur() {
28860
+ isFocused.value = false;
28861
+ clampModel();
28784
28862
  }
28785
28863
  useRender(() => {
28786
28864
  const {
@@ -28859,20 +28937,21 @@
28859
28937
  "class": "v-number-input__control"
28860
28938
  }, [vue.createVNode(VDivider, {
28861
28939
  "vertical": true
28862
- }, null), incrementControlNode()]) : props.reverse ? undefined : vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]);
28940
+ }, null), incrementControlNode()]) : props.reverse || controlVariant.value === 'hidden' ? undefined : vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]);
28863
28941
  const hasAppendInner = slots['append-inner'] || appendInnerControl;
28864
28942
  const prependInnerControl = controlVariant.value === 'split' ? vue.createVNode("div", {
28865
28943
  "class": "v-number-input__control"
28866
28944
  }, [decrementControlNode(), vue.createVNode(VDivider, {
28867
28945
  "vertical": true
28868
- }, null)]) : props.reverse ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28946
+ }, null)]) : props.reverse && controlVariant.value !== 'hidden' ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28869
28947
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
28870
28948
  return vue.createVNode(VTextField, vue.mergeProps({
28871
28949
  "ref": vTextFieldRef,
28872
- "modelValue": model.value,
28873
- "onUpdate:modelValue": $event => model.value = $event,
28950
+ "modelValue": inputText.value,
28951
+ "onUpdate:modelValue": $event => inputText.value = $event,
28874
28952
  "onBeforeinput": onBeforeinput,
28875
- "onChange": clampModel,
28953
+ "onFocus": onFocus,
28954
+ "onBlur": onBlur,
28876
28955
  "onKeydown": onKeydown,
28877
28956
  "class": ['v-number-input', {
28878
28957
  'v-number-input--default': controlVariant.value === 'default',
@@ -29758,7 +29837,7 @@
29758
29837
  const rangeHours24 = createRange(24);
29759
29838
  const rangeHours12am = createRange(12);
29760
29839
  const rangeHours12pm = rangeHours12am.map(v => v + 12);
29761
- const range60 = createRange(60);
29840
+ createRange(60);
29762
29841
  const selectingNames = {
29763
29842
  1: 'hour',
29764
29843
  2: 'minute',
@@ -29908,11 +29987,11 @@
29908
29987
  period.value = inputHour.value == null || inputHour.value < 12 ? 'am' : 'pm';
29909
29988
  }
29910
29989
  function firstAllowed(type, value) {
29911
- const allowedFn = type === 'hour' ? isAllowedHourCb.value : type === 'minute' ? isAllowedMinuteCb.value : isAllowedSecondCb.value;
29990
+ const allowedFn = isAllowedHourCb.value ;
29912
29991
  if (!allowedFn) return value;
29913
29992
 
29914
29993
  // TODO: clean up (Note from V2 code)
29915
- const range = type === 'minute' ? range60 : type === 'second' ? range60 : isAmPm.value ? value < 12 ? rangeHours12am : rangeHours12pm : rangeHours24;
29994
+ const range = isAmPm.value ? value < 12 ? rangeHours12am : rangeHours12pm : rangeHours24;
29916
29995
  const first = range.find(v => allowedFn((v + value) % range.length + range[0]));
29917
29996
  return ((first || 0) + value) % range.length + range[0];
29918
29997
  }
@@ -30065,22 +30144,21 @@
30065
30144
  props: makeVTreeviewItemProps(),
30066
30145
  setup(props, _ref) {
30067
30146
  let {
30068
- attrs,
30069
- slots,
30070
- emit
30147
+ slots
30071
30148
  } = _ref;
30072
- const link = useLink(props, attrs);
30149
+ const visibleIds = vue.inject(VTreeviewSymbol, {
30150
+ visibleIds: vue.ref()
30151
+ }).visibleIds;
30073
30152
  const vListItemRef = vue.ref();
30074
30153
  const isActivatableGroupActivator = vue.computed(() => vListItemRef.value?.root.activatable.value && vListItemRef.value?.isGroupActivator);
30075
- const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!vListItemRef.value?.list || isActivatableGroupActivator.value));
30154
+ const vListItemRefIsClickable = vue.computed(() => vListItemRef.value?.link.isClickable.value || props.value != null && !!vListItemRef.value?.list);
30155
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || vListItemRefIsClickable.value || isActivatableGroupActivator.value));
30156
+ const isFiltered = vue.computed(() => visibleIds.value && !visibleIds.value.has(vue.toRaw(vListItemRef.value?.id)));
30076
30157
  function activateGroupActivator(e) {
30077
30158
  if (isClickable.value && isActivatableGroupActivator.value) {
30078
30159
  vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e);
30079
30160
  }
30080
30161
  }
30081
- const visibleIds = vue.inject(VTreeviewSymbol, {
30082
- visibleIds: vue.ref()
30083
- }).visibleIds;
30084
30162
  useRender(() => {
30085
30163
  const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
30086
30164
  const hasPrepend = slots.prepend || props.toggleIcon;
@@ -30090,7 +30168,7 @@
30090
30168
  "active": vListItemRef.value?.isActivated,
30091
30169
  "class": ['v-treeview-item', {
30092
30170
  'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
30093
- 'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(vue.toRaw(vListItemRef.value?.id))
30171
+ 'v-treeview-item--filtered': isFiltered.value
30094
30172
  }, props.class],
30095
30173
  "ripple": false,
30096
30174
  "onClick": props.onClick ?? activateGroupActivator
@@ -30100,7 +30178,7 @@
30100
30178
  return vue.createVNode(vue.Fragment, null, [vue.createVNode(VListItemAction, {
30101
30179
  "start": false
30102
30180
  }, {
30103
- default: () => [props.toggleIcon && vue.createVNode(VBtn, {
30181
+ default: () => [props.toggleIcon ? vue.createVNode(VBtn, {
30104
30182
  "density": "compact",
30105
30183
  "icon": props.toggleIcon,
30106
30184
  "loading": props.loading,
@@ -30114,7 +30192,9 @@
30114
30192
  "width": "2"
30115
30193
  }, null);
30116
30194
  }
30117
- })]
30195
+ }) : vue.createVNode("div", {
30196
+ "class": "v-treeview-item__level"
30197
+ }, null)]
30118
30198
  }), slots.prepend?.(slotProps)]);
30119
30199
  } : undefined
30120
30200
  });
@@ -30146,7 +30226,8 @@
30146
30226
  returnObject: Boolean,
30147
30227
  selectable: Boolean,
30148
30228
  selectedColor: String,
30149
- selectStrategy: [String, Function, Object]
30229
+ selectStrategy: [String, Function, Object],
30230
+ ...makeDensityProps()
30150
30231
  }, 'VTreeviewChildren');
30151
30232
  const VTreeviewChildren = genericComponent()({
30152
30233
  name: 'VTreeviewChildren',
@@ -30174,11 +30255,6 @@
30174
30255
  }
30175
30256
  }
30176
30257
  return () => slots.default?.() ?? props.items?.map(item => {
30177
- if (item.type === 'divider') {
30178
- return slots.divider?.({
30179
- props: item.props
30180
- }) ?? vue.createVNode(VDivider, item.props, null);
30181
- }
30182
30258
  const {
30183
30259
  children,
30184
30260
  props: itemProps
@@ -30191,6 +30267,7 @@
30191
30267
  "disabled": props.disabled,
30192
30268
  "loading": loading,
30193
30269
  "color": props.selectedColor,
30270
+ "density": props.density,
30194
30271
  "indeterminate": slotProps.isIndeterminate,
30195
30272
  "indeterminateIcon": props.indeterminateIcon,
30196
30273
  "falseIcon": props.falseIcon,
@@ -30267,6 +30344,7 @@
30267
30344
  return flat;
30268
30345
  }
30269
30346
  const makeVTreeviewProps = propsFactory({
30347
+ fluid: Boolean,
30270
30348
  openAll: Boolean,
30271
30349
  search: String,
30272
30350
  ...makeFilterProps({
@@ -30277,7 +30355,7 @@
30277
30355
  collapseIcon: '$treeviewCollapse',
30278
30356
  expandIcon: '$treeviewExpand',
30279
30357
  slim: true
30280
- }), ['nav', 'openStrategy']),
30358
+ }), ['itemType', 'nav', 'openStrategy']),
30281
30359
  modelValue: {
30282
30360
  type: Array,
30283
30361
  default: () => []
@@ -30380,7 +30458,9 @@
30380
30458
  return vue.createVNode(VList, vue.mergeProps({
30381
30459
  "ref": vListRef
30382
30460
  }, listProps, {
30383
- "class": ['v-treeview', props.class],
30461
+ "class": ['v-treeview', {
30462
+ 'v-treeview--fluid': props.fluid
30463
+ }, props.class],
30384
30464
  "open-strategy": "multiple",
30385
30465
  "style": props.style,
30386
30466
  "opened": opened.value,
@@ -30390,6 +30470,7 @@
30390
30470
  "onUpdate:selected": $event => selected.value = $event
30391
30471
  }), {
30392
30472
  default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
30473
+ "density": props.density,
30393
30474
  "returnObject": props.returnObject,
30394
30475
  "items": items.value
30395
30476
  }), slots)]
@@ -30897,7 +30978,7 @@
30897
30978
  goTo
30898
30979
  };
30899
30980
  }
30900
- const version$1 = "3.7.12";
30981
+ const version$1 = "3.7.14";
30901
30982
  createVuetify$1.version = version$1;
30902
30983
 
30903
30984
  // Vue's inject() can only be used in setup
@@ -31150,7 +31231,7 @@
31150
31231
 
31151
31232
  /* eslint-disable local-rules/sort-imports */
31152
31233
 
31153
- const version = "3.7.12";
31234
+ const version = "3.7.14";
31154
31235
 
31155
31236
  /* eslint-disable local-rules/sort-imports */
31156
31237