vuetify 3.7.11 → 3.7.13

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 (270) hide show
  1. package/dist/json/attributes.json +2699 -2703
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +166 -166
  4. package/dist/json/tags.json +3 -4
  5. package/dist/json/web-types.json +5312 -5321
  6. package/dist/vuetify-labs.css +3272 -3266
  7. package/dist/vuetify-labs.d.ts +296 -326
  8. package/dist/vuetify-labs.esm.js +301 -159
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +300 -158
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +2292 -2294
  13. package/dist/vuetify.d.ts +258 -297
  14. package/dist/vuetify.esm.js +177 -99
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +176 -98
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +266 -252
  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 +3 -3
  32. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  33. package/lib/components/VAutocomplete/index.d.mts +29 -51
  34. package/lib/components/VAvatar/index.d.mts +1 -1
  35. package/lib/components/VBadge/VBadge.mjs +1 -1
  36. package/lib/components/VBadge/index.d.mts +1 -1
  37. package/lib/components/VBanner/VBanner.mjs +1 -1
  38. package/lib/components/VBanner/index.d.mts +1 -1
  39. package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -0
  40. package/lib/components/VBottomNavigation/VBottomNavigation.sass +1 -0
  41. package/lib/components/VBottomNavigation/index.d.mts +1 -1
  42. package/lib/components/VBottomSheet/VBottomSheet.mjs +1 -1
  43. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +1 -1
  44. package/lib/components/VBreadcrumbs/VBreadcrumbsItem.mjs +1 -1
  45. package/lib/components/VBreadcrumbs/index.d.mts +5 -5
  46. package/lib/components/VBtn/VBtn.mjs +1 -1
  47. package/lib/components/VBtn/index.d.mts +5 -5
  48. package/lib/components/VBtnGroup/VBtnGroup.mjs +1 -1
  49. package/lib/components/VBtnToggle/VBtnToggle.mjs +1 -1
  50. package/lib/components/VBtnToggle/index.d.mts +1 -1
  51. package/lib/components/VCard/VCard.mjs +1 -1
  52. package/lib/components/VCard/VCardItem.mjs +1 -1
  53. package/lib/components/VCard/VCardSubtitle.mjs +1 -1
  54. package/lib/components/VCard/VCardText.mjs +1 -1
  55. package/lib/components/VCard/index.d.mts +5 -5
  56. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  57. package/lib/components/VCarousel/VCarouselItem.mjs +1 -1
  58. package/lib/components/VCarousel/index.d.mts +1 -1
  59. package/lib/components/VCheckbox/VCheckbox.mjs +1 -1
  60. package/lib/components/VCheckbox/VCheckboxBtn.mjs +1 -1
  61. package/lib/components/VCheckbox/index.d.mts +1 -1
  62. package/lib/components/VChip/VChip.mjs +1 -1
  63. package/lib/components/VChip/index.d.mts +5 -5
  64. package/lib/components/VChipGroup/VChipGroup.mjs +1 -1
  65. package/lib/components/VChipGroup/index.d.mts +1 -1
  66. package/lib/components/VColorPicker/VColorPicker.mjs +1 -1
  67. package/lib/components/VColorPicker/index.d.mts +10 -10
  68. package/lib/components/VCombobox/VCombobox.mjs +4 -4
  69. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  70. package/lib/components/VCombobox/index.d.mts +29 -51
  71. package/lib/components/VConfirmEdit/VConfirmEdit.mjs +1 -1
  72. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.browser.mjs +5 -5
  73. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.browser.mjs.map +1 -1
  74. package/lib/components/VConfirmEdit/index.d.mts +1 -1
  75. package/lib/components/VCounter/VCounter.mjs +1 -1
  76. package/lib/components/VDataIterator/index.d.mts +1 -1
  77. package/lib/components/VDataTable/VDataTable.mjs +1 -1
  78. package/lib/components/VDataTable/VDataTableFooter.mjs +1 -1
  79. package/lib/components/VDataTable/VDataTableGroupHeaderRow.mjs +1 -1
  80. package/lib/components/VDataTable/VDataTableHeaders.mjs +1 -1
  81. package/lib/components/VDataTable/VDataTableRow.mjs +1 -1
  82. package/lib/components/VDataTable/VDataTableRows.mjs +1 -1
  83. package/lib/components/VDataTable/VDataTableServer.mjs +1 -1
  84. package/lib/components/VDataTable/VDataTableVirtual.mjs +1 -1
  85. package/lib/components/VDataTable/composables/sort.mjs +12 -8
  86. package/lib/components/VDataTable/composables/sort.mjs.map +1 -1
  87. package/lib/components/VDataTable/index.d.mts +1 -1
  88. package/lib/components/VDatePicker/VDatePicker.mjs +1 -1
  89. package/lib/components/VDatePicker/VDatePickerControls.mjs +1 -1
  90. package/lib/components/VDatePicker/VDatePickerControls.mjs.map +1 -1
  91. package/lib/components/VDatePicker/VDatePickerMonth.mjs +3 -3
  92. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  93. package/lib/components/VDatePicker/VDatePickerMonths.mjs +1 -1
  94. package/lib/components/VDatePicker/VDatePickerYears.mjs +1 -1
  95. package/lib/components/VDatePicker/index.d.mts +38 -38
  96. package/lib/components/VDialog/VDialog.mjs +1 -1
  97. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs +1 -1
  98. package/lib/components/VDialog/index.d.mts +3 -3
  99. package/lib/components/VEmptyState/VEmptyState.mjs +1 -1
  100. package/lib/components/VEmptyState/index.d.mts +1 -1
  101. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs +1 -1
  102. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +1 -1
  103. package/lib/components/VExpansionPanel/index.d.mts +1 -1
  104. package/lib/components/VFab/VFab.mjs +1 -1
  105. package/lib/components/VFab/index.d.mts +5 -5
  106. package/lib/components/VField/VField.mjs +1 -1
  107. package/lib/components/VField/VFieldLabel.mjs +1 -1
  108. package/lib/components/VField/index.d.mts +1 -1
  109. package/lib/components/VFileInput/VFileInput.mjs +2 -3
  110. package/lib/components/VFileInput/VFileInput.mjs.map +1 -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 +3 -6
  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 +24 -21
  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.css +2 -1
  141. package/lib/components/VOverlay/VOverlay.mjs +1 -1
  142. package/lib/components/VOverlay/VOverlay.sass +2 -1
  143. package/lib/components/VOverlay/_variables.scss +1 -1
  144. package/lib/components/VPagination/VPagination.mjs +1 -1
  145. package/lib/components/VPagination/index.d.mts +1 -1
  146. package/lib/components/VParallax/VParallax.mjs +1 -1
  147. package/lib/components/VRadio/VRadio.mjs +1 -1
  148. package/lib/components/VRadio/index.d.mts +1 -1
  149. package/lib/components/VRadioGroup/VRadioGroup.mjs +1 -1
  150. package/lib/components/VRadioGroup/index.d.mts +1 -1
  151. package/lib/components/VRangeSlider/VRangeSlider.mjs +1 -1
  152. package/lib/components/VRating/VRating.mjs +1 -1
  153. package/lib/components/VRating/index.d.mts +1 -1
  154. package/lib/components/VSelect/VSelect.mjs +5 -5
  155. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  156. package/lib/components/VSelect/index.d.mts +29 -51
  157. package/lib/components/VSelectionControl/VSelectionControl.mjs +1 -1
  158. package/lib/components/VSelectionControl/index.d.mts +1 -1
  159. package/lib/components/VSelectionControlGroup/index.d.mts +1 -1
  160. package/lib/components/VSheet/VSheet.mjs +1 -1
  161. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs +1 -1
  162. package/lib/components/VSlideGroup/index.d.mts +1 -1
  163. package/lib/components/VSlider/VSlider.mjs +1 -1
  164. package/lib/components/VSlider/VSliderThumb.mjs +1 -1
  165. package/lib/components/VSlider/slider.mjs +25 -12
  166. package/lib/components/VSlider/slider.mjs.map +1 -1
  167. package/lib/components/VSnackbar/VSnackbar.mjs +1 -1
  168. package/lib/components/VSnackbar/index.d.mts +3 -3
  169. package/lib/components/VSparkline/VBarline.mjs +1 -2
  170. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  171. package/lib/components/VSparkline/VSparkline.mjs +1 -1
  172. package/lib/components/VSparkline/VTrendline.mjs +1 -2
  173. package/lib/components/VSparkline/VTrendline.mjs.map +1 -1
  174. package/lib/components/VSpeedDial/VSpeedDial.mjs +1 -1
  175. package/lib/components/VStepper/VStepper.mjs +3 -3
  176. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  177. package/lib/components/VStepper/VStepperItem.mjs +1 -1
  178. package/lib/components/VStepper/VStepperWindow.mjs +1 -1
  179. package/lib/components/VStepper/VStepperWindowItem.mjs +1 -1
  180. package/lib/components/VStepper/index.d.mts +1 -1
  181. package/lib/components/VSwitch/VSwitch.mjs +1 -1
  182. package/lib/components/VSwitch/index.d.mts +1 -1
  183. package/lib/components/VSystemBar/VSystemBar.mjs +1 -1
  184. package/lib/components/VTabs/VTab.mjs +1 -1
  185. package/lib/components/VTabs/VTabs.mjs +1 -1
  186. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  187. package/lib/components/VTabs/VTabsWindow.mjs +1 -1
  188. package/lib/components/VTabs/VTabsWindowItem.mjs +1 -1
  189. package/lib/components/VTabs/index.d.mts +21 -21
  190. package/lib/components/VTextField/VTextField.mjs +1 -1
  191. package/lib/components/VTextField/index.d.mts +7 -7
  192. package/lib/components/VTextarea/VTextarea.mjs +1 -1
  193. package/lib/components/VTextarea/index.d.mts +4 -4
  194. package/lib/components/VTimeline/VTimeline.mjs +3 -3
  195. package/lib/components/VTimeline/VTimeline.mjs.map +1 -1
  196. package/lib/components/VTimeline/VTimelineDivider.mjs +1 -1
  197. package/lib/components/VTimeline/VTimelineItem.mjs +1 -1
  198. package/lib/components/VTimeline/index.d.mts +1 -1
  199. package/lib/components/VToolbar/VToolbar.mjs +1 -1
  200. package/lib/components/VTooltip/VTooltip.mjs +1 -1
  201. package/lib/components/VTooltip/index.d.mts +3 -3
  202. package/lib/components/VValidation/index.d.mts +1 -1
  203. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +1 -1
  204. package/lib/components/VVirtualScroll/VVirtualScrollItem.mjs +1 -1
  205. package/lib/components/VVirtualScroll/index.d.mts +1 -1
  206. package/lib/components/VWindow/VWindow.mjs +1 -1
  207. package/lib/components/VWindow/VWindowItem.mjs +1 -1
  208. package/lib/components/VWindow/index.d.mts +1 -1
  209. package/lib/components/index.d.mts +198 -237
  210. package/lib/components/transitions/dialog-transition.mjs +1 -2
  211. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  212. package/lib/composables/calendar.mjs +4 -1
  213. package/lib/composables/calendar.mjs.map +1 -1
  214. package/lib/composables/icons.mjs +1 -1
  215. package/lib/composables/list-items.mjs +69 -17
  216. package/lib/composables/list-items.mjs.map +1 -1
  217. package/lib/composables/nested/nested.mjs +16 -1
  218. package/lib/composables/nested/nested.mjs.map +1 -1
  219. package/lib/composables/nested/selectStrategies.mjs +6 -7
  220. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  221. package/lib/composables/variant.mjs +1 -1
  222. package/lib/directives/ripple/index.mjs +7 -5
  223. package/lib/directives/ripple/index.mjs.map +1 -1
  224. package/lib/entry-bundler.mjs +1 -1
  225. package/lib/framework.mjs +1 -1
  226. package/lib/iconsets/fa-svg.d.mts +1 -1
  227. package/lib/iconsets/fa.d.mts +1 -1
  228. package/lib/iconsets/fa4.d.mts +1 -1
  229. package/lib/iconsets/md.d.mts +1 -1
  230. package/lib/iconsets/mdi-svg.d.mts +1 -1
  231. package/lib/iconsets/mdi.d.mts +1 -1
  232. package/lib/index.d.mts +61 -61
  233. package/lib/labs/VCalendar/VCalendar.mjs +1 -1
  234. package/lib/labs/VCalendar/VCalendarDay.mjs +1 -1
  235. package/lib/labs/VCalendar/index.d.mts +8 -2
  236. package/lib/labs/VDateInput/VDateInput.mjs +21 -10
  237. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  238. package/lib/labs/VDateInput/index.d.mts +19 -19
  239. package/lib/labs/VFileUpload/VFileUpload.mjs +3 -3
  240. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -1
  241. package/lib/labs/VFileUpload/VFileUploadItem.mjs +1 -1
  242. package/lib/labs/VFileUpload/index.d.mts +5 -5
  243. package/lib/labs/VNumberInput/VNumberInput.css +10 -2
  244. package/lib/labs/VNumberInput/VNumberInput.mjs +94 -36
  245. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  246. package/lib/labs/VNumberInput/VNumberInput.sass +12 -2
  247. package/lib/labs/VNumberInput/index.d.mts +59 -32
  248. package/lib/labs/VPicker/VPicker.mjs +1 -1
  249. package/lib/labs/VSnackbarQueue/VSnackbarQueue.mjs +1 -1
  250. package/lib/labs/VSnackbarQueue/index.d.mts +3 -3
  251. package/lib/labs/VStepperVertical/VStepperVertical.mjs +1 -1
  252. package/lib/labs/VStepperVertical/VStepperVerticalActions.mjs +1 -1
  253. package/lib/labs/VStepperVertical/VStepperVerticalItem.mjs +1 -1
  254. package/lib/labs/VStepperVertical/index.d.mts +1 -1
  255. package/lib/labs/VTimePicker/VTimePicker.mjs +1 -1
  256. package/lib/labs/VTimePicker/VTimePickerControls.mjs +1 -1
  257. package/lib/labs/VTreeview/VTreeview.mjs +2 -2
  258. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  259. package/lib/labs/VTreeview/VTreeviewChildren.mjs +2 -8
  260. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  261. package/lib/labs/VTreeview/VTreeviewGroup.mjs +1 -1
  262. package/lib/labs/VTreeview/VTreeviewItem.mjs +10 -12
  263. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  264. package/lib/labs/VTreeview/index.d.mts +12 -36
  265. package/lib/labs/components.d.mts +103 -94
  266. package/lib/locale/adapters/vue-i18n.mjs +0 -1
  267. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  268. package/lib/util/helpers.mjs +6 -9
  269. package/lib/util/helpers.mjs.map +1 -1
  270. package/package.json +17 -16
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.11
2
+ * Vuetify v3.7.13
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'];
@@ -581,6 +575,9 @@
581
575
  const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
582
576
  return isPrintableChar && noModifier;
583
577
  }
578
+ function isPrimitive(value) {
579
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint';
580
+ }
584
581
 
585
582
  // Utilities
586
583
  const block = ['top', 'bottom'];
@@ -878,7 +875,7 @@
878
875
  // WoB should always return negative value.
879
876
 
880
877
  const SAPC = (Ybg ** revBG - Ytxt ** revTXT) * scaleWoB;
881
- 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;
882
879
  }
883
880
  return outputContrast * 100;
884
881
  }
@@ -918,7 +915,7 @@
918
915
  // Types
919
916
 
920
917
  // For converting XYZ to sRGB
921
- 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]];
922
919
 
923
920
  // Forward gamma adjust
924
921
  const srgbForwardTransform = C => C <= 0.0031308 ? C * 12.92 : 1.055 * C ** (1 / 2.4) - 0.055;
@@ -1266,7 +1263,7 @@
1266
1263
  function getCurrentInstance(name, message) {
1267
1264
  const vm = vue.getCurrentInstance();
1268
1265
  if (!vm) {
1269
- 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'}`);
1270
1267
  }
1271
1268
  return vm;
1272
1269
  }
@@ -2819,6 +2816,8 @@
2819
2816
  }
2820
2817
  }
2821
2818
 
2819
+ // Utilities
2820
+
2822
2821
  // Types
2823
2822
 
2824
2823
  const makeVDialogTransitionProps = propsFactory({
@@ -4721,7 +4720,6 @@
4721
4720
  const isIntersecting = vue.shallowRef(false);
4722
4721
  if (SUPPORTS_INTERSECTION) {
4723
4722
  const observer = new IntersectionObserver(entries => {
4724
- callback?.(entries, observer);
4725
4723
  isIntersecting.value = !!entries.find(entry => entry.isIntersecting);
4726
4724
  }, options);
4727
4725
  vue.onBeforeUnmount(() => {
@@ -5349,11 +5347,13 @@
5349
5347
  animation.classList.add('v-ripple__animation--visible');
5350
5348
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
5351
5349
  animation.dataset.activated = String(performance.now());
5352
- setTimeout(() => {
5353
- animation.classList.remove('v-ripple__animation--enter');
5354
- animation.classList.add('v-ripple__animation--in');
5355
- transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5356
- }, 0);
5350
+ requestAnimationFrame(() => {
5351
+ requestAnimationFrame(() => {
5352
+ animation.classList.remove('v-ripple__animation--enter');
5353
+ animation.classList.add('v-ripple__animation--in');
5354
+ transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
5355
+ });
5356
+ });
5357
5357
  },
5358
5358
  hide(el) {
5359
5359
  if (!el?._ripple?.enabled) return;
@@ -6891,7 +6891,7 @@
6891
6891
  'onClick:append': EventProp(),
6892
6892
  ...makeComponentProps(),
6893
6893
  ...makeDensityProps(),
6894
- ...only(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
6894
+ ...pick(makeDimensionProps(), ['maxWidth', 'minWidth', 'width']),
6895
6895
  ...makeThemeProps(),
6896
6896
  ...makeValidationProps()
6897
6897
  }, 'VInput');
@@ -8348,12 +8348,12 @@
8348
8348
  return selected;
8349
8349
  },
8350
8350
  in: (v, children, parents) => {
8351
- let map = new Map();
8351
+ const map = new Map();
8352
8352
  for (const id of v || []) {
8353
- map = strategy.select({
8353
+ strategy.select({
8354
8354
  id,
8355
8355
  value: true,
8356
- selected: new Map(map),
8356
+ selected: map,
8357
8357
  children,
8358
8358
  parents
8359
8359
  });
@@ -8388,11 +8388,10 @@
8388
8388
  });
8389
8389
  },
8390
8390
  in: (v, children, parents) => {
8391
- let map = new Map();
8392
8391
  if (v?.length) {
8393
- map = parentStrategy.in(v.slice(0, 1), children, parents);
8392
+ return parentStrategy.in(v.slice(0, 1), children, parents);
8394
8393
  }
8395
- return map;
8394
+ return new Map();
8396
8395
  },
8397
8396
  out: (v, children, parents) => {
8398
8397
  return parentStrategy.out(v, children, parents);
@@ -8495,7 +8494,7 @@
8495
8494
  map = strategy.select({
8496
8495
  id,
8497
8496
  value: true,
8498
- selected: new Map(map),
8497
+ selected: map,
8499
8498
  children,
8500
8499
  parents
8501
8500
  });
@@ -8720,7 +8719,22 @@
8720
8719
  parents: parents.value,
8721
8720
  event
8722
8721
  });
8723
- 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
+ }
8724
8738
  },
8725
8739
  children,
8726
8740
  parents,
@@ -9167,7 +9181,8 @@
9167
9181
  list,
9168
9182
  select,
9169
9183
  root,
9170
- id: uid
9184
+ id: uid,
9185
+ link
9171
9186
  };
9172
9187
  }
9173
9188
  });
@@ -9379,10 +9394,7 @@
9379
9394
  default: 'props'
9380
9395
  },
9381
9396
  returnObject: Boolean,
9382
- valueComparator: {
9383
- type: Function,
9384
- default: deepEqual
9385
- }
9397
+ valueComparator: Function
9386
9398
  }, 'list-items');
9387
9399
  function transformItem$3(props, item) {
9388
9400
  const title = getPropertyFromItem(item, props.itemTitle, item);
@@ -9403,29 +9415,84 @@
9403
9415
  };
9404
9416
  }
9405
9417
  function transformItems$3(props, items) {
9418
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9406
9419
  const array = [];
9407
9420
  for (const item of items) {
9408
- array.push(transformItem$3(props, item));
9421
+ array.push(transformItem$3(_props, item));
9409
9422
  }
9410
9423
  return array;
9411
9424
  }
9412
9425
  function useItems(props) {
9413
9426
  const items = vue.computed(() => transformItems$3(props, props.items));
9414
9427
  const hasNullItem = vue.computed(() => items.value.some(item => item.value === null));
9428
+ const itemsMap = vue.shallowRef(new Map());
9429
+ const keylessItems = vue.shallowRef([]);
9430
+ vue.watchEffect(() => {
9431
+ const _items = items.value;
9432
+ const map = new Map();
9433
+ const keyless = [];
9434
+ for (let i = 0; i < _items.length; i++) {
9435
+ const item = _items[i];
9436
+ if (isPrimitive(item.value) || item.value === null) {
9437
+ let values = map.get(item.value);
9438
+ if (!values) {
9439
+ values = [];
9440
+ map.set(item.value, values);
9441
+ }
9442
+ values.push(item);
9443
+ } else {
9444
+ keyless.push(item);
9445
+ }
9446
+ }
9447
+ itemsMap.value = map;
9448
+ keylessItems.value = keyless;
9449
+ });
9415
9450
  function transformIn(value) {
9416
- if (!hasNullItem.value) {
9451
+ // Cache unrefed values outside the loop,
9452
+ // proxy getters can be slow when you call them a billion times
9453
+ const _items = itemsMap.value;
9454
+ const _allItems = items.value;
9455
+ const _keylessItems = keylessItems.value;
9456
+ const _hasNullItem = hasNullItem.value;
9457
+ const _returnObject = props.returnObject;
9458
+ const hasValueComparator = !!props.valueComparator;
9459
+ const valueComparator = props.valueComparator || deepEqual;
9460
+ const _props = pick(props, ['itemTitle', 'itemValue', 'itemChildren', 'itemProps', 'returnObject', 'valueComparator']);
9461
+ const returnValue = [];
9462
+ main: for (const v of value) {
9417
9463
  // When the model value is null, return an InternalItem
9418
9464
  // based on null only if null is one of the items
9419
- value = value.filter(v => v !== null);
9420
- }
9421
- return value.map(v => {
9422
- if (props.returnObject && typeof v === 'string') {
9423
- // String model value means value is a custom input value from combobox
9424
- // Don't look up existing items if the model value is a string
9425
- return transformItem$3(props, v);
9465
+ if (!_hasNullItem && v === null) continue;
9466
+
9467
+ // String model value means value is a custom input value from combobox
9468
+ // Don't look up existing items if the model value is a string
9469
+ if (_returnObject && typeof v === 'string') {
9470
+ returnValue.push(transformItem$3(_props, v));
9471
+ continue;
9426
9472
  }
9427
- return items.value.find(item => props.valueComparator(v, item.value)) || transformItem$3(props, v);
9428
- });
9473
+
9474
+ // Fast path, items with primitive values and no
9475
+ // custom valueComparator can use a constant-time
9476
+ // map lookup instead of searching the items array
9477
+ const fastItems = _items.get(v);
9478
+
9479
+ // Slow path, always use valueComparator.
9480
+ // This is O(n^2) so we really don't want to
9481
+ // do it for more than a couple hundred items.
9482
+ if (hasValueComparator || !fastItems) {
9483
+ for (const item of hasValueComparator ? _allItems : _keylessItems) {
9484
+ if (valueComparator(v, item.value)) {
9485
+ returnValue.push(item);
9486
+ continue main;
9487
+ }
9488
+ }
9489
+ // Not an existing item, construct it from the model (#4000)
9490
+ returnValue.push(transformItem$3(_props, v));
9491
+ continue;
9492
+ }
9493
+ returnValue.push(...fastItems);
9494
+ }
9495
+ return returnValue;
9429
9496
  }
9430
9497
  function transformOut(value) {
9431
9498
  return props.returnObject ? value.map(_ref => {
@@ -9449,9 +9516,6 @@
9449
9516
 
9450
9517
  // Types
9451
9518
 
9452
- function isPrimitive(value) {
9453
- return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
9454
- }
9455
9519
  function transformItem$2(props, item) {
9456
9520
  const type = getPropertyFromItem(item, props.itemType, 'item');
9457
9521
  const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
@@ -9641,7 +9705,7 @@
9641
9705
  'v-list--slim': props.slim
9642
9706
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
9643
9707
  "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
9644
- "tabindex": props.disabled || isFocused.value ? -1 : 0,
9708
+ "tabindex": props.disabled ? -1 : 0,
9645
9709
  "role": "listbox",
9646
9710
  "aria-activedescendant": undefined,
9647
9711
  "onFocusin": onFocusin,
@@ -12500,7 +12564,7 @@
12500
12564
  let keyboardLookupLastTime;
12501
12565
  const displayItems = vue.computed(() => {
12502
12566
  if (props.hideSelected) {
12503
- return items.value.filter(item => !model.value.some(s => props.valueComparator(s, item)));
12567
+ return items.value.filter(item => !model.value.some(s => (props.valueComparator || deepEqual)(s, item)));
12504
12568
  }
12505
12569
  return items.value;
12506
12570
  });
@@ -12572,7 +12636,7 @@
12572
12636
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
12573
12637
  if (item.props.disabled) return;
12574
12638
  if (props.multiple) {
12575
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
12639
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
12576
12640
  const add = set == null ? !~index : set;
12577
12641
  if (~index) {
12578
12642
  const value = add ? [...model.value, item] : [...model.value];
@@ -12619,7 +12683,7 @@
12619
12683
  }
12620
12684
  vue.watch(menu, () => {
12621
12685
  if (!props.hideSelected && menu.value && model.value.length) {
12622
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
12686
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
12623
12687
  IN_BROWSER && window.requestAnimationFrame(() => {
12624
12688
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
12625
12689
  });
@@ -13151,7 +13215,7 @@
13151
13215
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
13152
13216
  if (!item || item.props.disabled) return;
13153
13217
  if (props.multiple) {
13154
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
13218
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
13155
13219
  const add = set == null ? !~index : set;
13156
13220
  if (~index) {
13157
13221
  const value = add ? [...model.value, item] : [...model.value];
@@ -15540,6 +15604,8 @@
15540
15604
  const trackContainerRef = vue.ref();
15541
15605
  const activeThumbRef = vue.ref();
15542
15606
  function parseMouseMove(e) {
15607
+ const el = trackContainerRef.value?.$el;
15608
+ if (!el) return;
15543
15609
  const vertical = props.direction === 'vertical';
15544
15610
  const start = vertical ? 'top' : 'left';
15545
15611
  const length = vertical ? 'height' : 'width';
@@ -15547,7 +15613,7 @@
15547
15613
  const {
15548
15614
  [start]: trackStart,
15549
15615
  [length]: trackLength
15550
- } = trackContainerRef.value?.$el.getBoundingClientRect();
15616
+ } = el.getBoundingClientRect();
15551
15617
  const clickOffset = getPosition(e, position);
15552
15618
 
15553
15619
  // It is possible for left to be NaN, force to number
@@ -15556,13 +15622,17 @@
15556
15622
  return roundValue(min.value + clickPos * (max.value - min.value));
15557
15623
  }
15558
15624
  const handleStop = e => {
15559
- onSliderEnd({
15560
- value: parseMouseMove(e)
15561
- });
15625
+ const value = parseMouseMove(e);
15626
+ if (value != null) {
15627
+ onSliderEnd({
15628
+ value
15629
+ });
15630
+ }
15562
15631
  mousePressed.value = false;
15563
15632
  startOffset.value = 0;
15564
15633
  };
15565
15634
  const handleStart = e => {
15635
+ const value = parseMouseMove(e);
15566
15636
  activeThumbRef.value = getActiveThumb(e);
15567
15637
  if (!activeThumbRef.value) return;
15568
15638
  mousePressed.value = true;
@@ -15570,13 +15640,17 @@
15570
15640
  startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
15571
15641
  } else {
15572
15642
  startOffset.value = 0;
15573
- onSliderMove({
15574
- value: parseMouseMove(e)
15643
+ if (value != null) {
15644
+ onSliderMove({
15645
+ value
15646
+ });
15647
+ }
15648
+ }
15649
+ if (value != null) {
15650
+ onSliderStart({
15651
+ value
15575
15652
  });
15576
15653
  }
15577
- onSliderStart({
15578
- value: parseMouseMove(e)
15579
- });
15580
15654
  vue.nextTick(() => activeThumbRef.value?.focus());
15581
15655
  };
15582
15656
  const moveListenerOptions = {
@@ -15584,9 +15658,12 @@
15584
15658
  capture: true
15585
15659
  };
15586
15660
  function onMouseMove(e) {
15587
- onSliderMove({
15588
- value: parseMouseMove(e)
15589
- });
15661
+ const value = parseMouseMove(e);
15662
+ if (value != null) {
15663
+ onSliderMove({
15664
+ value
15665
+ });
15666
+ }
15590
15667
  }
15591
15668
  function onSliderMouseUp(e) {
15592
15669
  e.stopPropagation();
@@ -17025,7 +17102,7 @@
17025
17102
  let set = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
17026
17103
  if (!item || item.props.disabled) return;
17027
17104
  if (props.multiple) {
17028
- const index = model.value.findIndex(selection => props.valueComparator(selection.value, item.value));
17105
+ const index = model.value.findIndex(selection => (props.valueComparator || deepEqual)(selection.value, item.value));
17029
17106
  const add = set == null ? !~index : set;
17030
17107
  if (~index) {
17031
17108
  const value = add ? [...model.value, item] : [...model.value];
@@ -17085,7 +17162,7 @@
17085
17162
  });
17086
17163
  vue.watch(menu, () => {
17087
17164
  if (!props.hideSelected && menu.value && model.value.length) {
17088
- const index = displayItems.value.findIndex(item => model.value.some(s => props.valueComparator(s.value, item.value)));
17165
+ const index = displayItems.value.findIndex(item => model.value.some(s => (props.valueComparator || deepEqual)(s.value, item.value)));
17089
17166
  IN_BROWSER && window.requestAnimationFrame(() => {
17090
17167
  index >= 0 && vVirtualScrollRef.value?.scrollToIndex(index);
17091
17168
  });
@@ -18302,13 +18379,7 @@
18302
18379
  return [...new Set(arr)];
18303
18380
  }
18304
18381
  return dive({
18305
- type: 'group',
18306
- items,
18307
- id: 'dummy',
18308
- key: 'dummy',
18309
- value: 'dummy',
18310
- depth: 0
18311
- });
18382
+ items});
18312
18383
  }
18313
18384
 
18314
18385
  // onBeforeMount(() => {
@@ -18752,15 +18823,19 @@
18752
18823
  })) ?? [];
18753
18824
  const item = newSortBy.find(x => x.key === column.key);
18754
18825
  if (!item) {
18755
- if (multiSort.value) newSortBy = [...newSortBy, {
18756
- key: column.key,
18757
- order: 'asc'
18758
- }];else newSortBy = [{
18759
- key: column.key,
18760
- order: 'asc'
18761
- }];
18826
+ if (multiSort.value) {
18827
+ newSortBy.push({
18828
+ key: column.key,
18829
+ order: 'asc'
18830
+ });
18831
+ } else {
18832
+ newSortBy = [{
18833
+ key: column.key,
18834
+ order: 'asc'
18835
+ }];
18836
+ }
18762
18837
  } else if (item.order === 'desc') {
18763
- if (mustSort.value) {
18838
+ if (mustSort.value && newSortBy.length === 1) {
18764
18839
  item.order = 'asc';
18765
18840
  } else {
18766
18841
  newSortBy = newSortBy.filter(x => x.key !== column.key);
@@ -21385,7 +21460,7 @@
21385
21460
  },
21386
21461
  disabled: {
21387
21462
  type: [Boolean, String, Array],
21388
- default: false
21463
+ default: null
21389
21464
  },
21390
21465
  nextIcon: {
21391
21466
  type: IconValue,
@@ -21567,7 +21642,10 @@
21567
21642
  // Composables
21568
21643
  const makeCalendarProps = propsFactory({
21569
21644
  allowedDates: [Array, Function],
21570
- disabled: Boolean,
21645
+ disabled: {
21646
+ type: Boolean,
21647
+ default: null
21648
+ },
21571
21649
  displayValue: null,
21572
21650
  modelValue: Array,
21573
21651
  month: [Number, String],
@@ -21719,7 +21797,7 @@
21719
21797
  type: String,
21720
21798
  default: 'picker-reverse-transition'
21721
21799
  },
21722
- ...makeCalendarProps()
21800
+ ...omit(makeCalendarProps(), ['displayValue'])
21723
21801
  }, 'VDatePickerMonth');
21724
21802
  const VDatePickerMonth = genericComponent()({
21725
21803
  name: 'VDatePickerMonth',
@@ -22996,8 +23074,7 @@
22996
23074
  const fieldProps = filterFieldProps(props);
22997
23075
  return vue.createVNode(VInput, vue.mergeProps({
22998
23076
  "ref": vInputRef,
22999
- "modelValue": model.value,
23000
- "onUpdate:modelValue": $event => model.value = $event,
23077
+ "modelValue": props.multiple ? model.value : model.value[0],
23001
23078
  "class": ['v-file-input', {
23002
23079
  'v-file-input--chips': !!props.chips,
23003
23080
  'v-file-input--hide': props.hideInput,
@@ -23836,7 +23913,7 @@
23836
23913
  /** @see https://android.googlesource.com/platform/frameworks/native/+/master/libs/input/VelocityTracker.cpp */
23837
23914
  function kineticEnergyToVelocity(work) {
23838
23915
  const sqrt2 = 1.41421356237;
23839
- return (work < 0 ? -1.0 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
23916
+ return (work < 0 ? -1 : 1.0) * Math.sqrt(Math.abs(work)) * sqrt2;
23840
23917
  }
23841
23918
 
23842
23919
  /**
@@ -24218,7 +24295,6 @@
24218
24295
  const size = isTemporary.value ? 0 : props.rail && props.expandOnHover ? Number(props.railWidth) : width.value;
24219
24296
  return isDragging.value ? size * dragProgress.value : size;
24220
24297
  });
24221
- const elementSize = vue.computed(() => ['top', 'bottom'].includes(props.location) ? 0 : width.value);
24222
24298
  const {
24223
24299
  layoutItemStyles,
24224
24300
  layoutItemScrimStyles
@@ -24227,7 +24303,7 @@
24227
24303
  order: vue.computed(() => parseInt(props.order, 10)),
24228
24304
  position: location,
24229
24305
  layoutSize,
24230
- elementSize,
24306
+ elementSize: width,
24231
24307
  active: vue.computed(() => isActive.value || isDragging.value),
24232
24308
  disableTransitions: vue.computed(() => isDragging.value),
24233
24309
  absolute: vue.computed(() =>
@@ -24273,9 +24349,7 @@
24273
24349
  'v-navigation-drawer--active': isActive.value,
24274
24350
  'v-navigation-drawer--sticky': isSticky.value
24275
24351
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, displayClasses.value, elevationClasses.value, roundedClasses.value, props.class],
24276
- "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style, ['top', 'bottom'].includes(location.value) ? {
24277
- height: 'auto'
24278
- } : {}]
24352
+ "style": [backgroundColorStyles.value, layoutItemStyles.value, ssrBootStyles.value, stickyStyles.value, props.style]
24279
24353
  }, scopeId, attrs), {
24280
24354
  default: () => [hasImage && vue.createVNode("div", {
24281
24355
  "key": "image",
@@ -24362,7 +24436,7 @@
24362
24436
  },
24363
24437
  ...makeDimensionProps(),
24364
24438
  ...makeFocusProps(),
24365
- ...only(makeVFieldProps({
24439
+ ...pick(makeVFieldProps({
24366
24440
  variant: 'outlined'
24367
24441
  }), ['baseColor', 'bgColor', 'class', 'color', 'disabled', 'error', 'loading', 'rounded', 'style', 'theme', 'variant'])
24368
24442
  }, 'VOtpInput');
@@ -25595,6 +25669,8 @@
25595
25669
  }
25596
25670
  }, 'Line');
25597
25671
 
25672
+ // Utilities
25673
+
25598
25674
  // Types
25599
25675
 
25600
25676
  const makeVBarlineProps = propsFactory({
@@ -25792,6 +25868,8 @@
25792
25868
  };
25793
25869
  }
25794
25870
 
25871
+ // Utilities
25872
+
25795
25873
  // Types
25796
25874
 
25797
25875
  const makeVTrendlineProps = propsFactory({
@@ -26346,7 +26424,7 @@
26346
26424
  selectedClass: 'v-stepper-item--selected'
26347
26425
  }),
26348
26426
  ...makeVSheetProps(),
26349
- ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
26427
+ ...pick(makeVStepperActionsProps(), ['prevText', 'nextText'])
26350
26428
  }, 'VStepper');
26351
26429
  const VStepper = genericComponent()({
26352
26430
  name: 'VStepper',
@@ -27428,7 +27506,7 @@
27428
27506
  type: String,
27429
27507
  validator: v => ['start', 'end', 'both'].includes(v)
27430
27508
  },
27431
- ...only(makeVTimelineItemProps({
27509
+ ...pick(makeVTimelineItemProps({
27432
27510
  lineInset: 0
27433
27511
  }), ['dotColor', 'fillDot', 'hideOpposite', 'iconColor', 'lineInset', 'size']),
27434
27512
  ...makeComponentProps(),
@@ -27734,6 +27812,10 @@
27734
27812
  ...makeVCalendarIntervalProps()
27735
27813
  },
27736
27814
  setup(props, _ref) {
27815
+ let {
27816
+ emit,
27817
+ slots
27818
+ } = _ref;
27737
27819
  const adapter = useDate();
27738
27820
  const interval = vue.computed(() => {
27739
27821
  const start = adapter.addMinutes(adapter.startOfDay(props.day.date), props.intervalDuration * (props.index + props.intervalStart));
@@ -28128,7 +28210,7 @@
28128
28210
  ...omit(makeVDatePickerProps({
28129
28211
  weeksInMonth: 'dynamic',
28130
28212
  hideHeader: true
28131
- }), ['active', 'location'])
28213
+ }), ['active', 'location', 'rounded'])
28132
28214
  }, 'VDateInput');
28133
28215
  const VDateInput = genericComponent()({
28134
28216
  name: 'VDateInput',
@@ -28149,8 +28231,9 @@
28149
28231
  focus,
28150
28232
  blur
28151
28233
  } = useFocus(props);
28152
- const model = useProxiedModel(props, 'modelValue', props.multiple ? [] : null);
28234
+ const model = useProxiedModel(props, 'modelValue', props.multiple ? [] : null, val => Array.isArray(val) ? val.map(item => adapter.toJsDate(item)) : val ? adapter.toJsDate(val) : val, val => Array.isArray(val) ? val.map(item => adapter.date(item)) : val ? adapter.date(val) : val);
28153
28235
  const menu = vue.shallowRef(false);
28236
+ const vDateInputRef = vue.ref();
28154
28237
  const display = vue.computed(() => {
28155
28238
  const value = wrapInArray(model.value);
28156
28239
  if (!value.length) return null;
@@ -28172,7 +28255,7 @@
28172
28255
  return;
28173
28256
  }
28174
28257
  const target = e.target;
28175
- model.value = adapter.date(target.value);
28258
+ model.value = target.value;
28176
28259
  }
28177
28260
  function onClick(e) {
28178
28261
  e.preventDefault();
@@ -28182,11 +28265,17 @@
28182
28265
  function onSave() {
28183
28266
  menu.value = false;
28184
28267
  }
28268
+ function onUpdateModel(value) {
28269
+ if (value != null) return;
28270
+ model.value = null;
28271
+ }
28185
28272
  useRender(() => {
28186
28273
  const confirmEditProps = VConfirmEdit.filterProps(props);
28187
- const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location']));
28274
+ const datePickerProps = VDatePicker.filterProps(omit(props, ['active', 'location', 'rounded']));
28188
28275
  const textFieldProps = VTextField.filterProps(props);
28189
- return vue.createVNode(VTextField, vue.mergeProps(textFieldProps, {
28276
+ return vue.createVNode(VTextField, vue.mergeProps({
28277
+ "ref": vDateInputRef
28278
+ }, textFieldProps, {
28190
28279
  "class": props.class,
28191
28280
  "style": props.style,
28192
28281
  "modelValue": display.value,
@@ -28195,9 +28284,11 @@
28195
28284
  "onFocus": focus,
28196
28285
  "onBlur": blur,
28197
28286
  "onClick:control": isInteractive.value ? onClick : undefined,
28198
- "onClick:prepend": isInteractive.value ? onClick : undefined
28287
+ "onClick:prepend": isInteractive.value ? onClick : undefined,
28288
+ "onUpdate:modelValue": onUpdateModel
28199
28289
  }), {
28200
- default: () => [vue.createVNode(VMenu, {
28290
+ ...slots,
28291
+ default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, {
28201
28292
  "modelValue": menu.value,
28202
28293
  "onUpdate:modelValue": $event => menu.value = $event,
28203
28294
  "activator": "parent",
@@ -28240,9 +28331,10 @@
28240
28331
  });
28241
28332
  }
28242
28333
  })]
28243
- }), slots.default?.()]
28334
+ }), slots.default?.()])
28244
28335
  });
28245
28336
  });
28337
+ return forwardRefs({}, vDateInputRef);
28246
28338
  }
28247
28339
  });
28248
28340
 
@@ -28374,7 +28466,7 @@
28374
28466
  name: String,
28375
28467
  ...makeDelayProps(),
28376
28468
  ...makeDensityProps(),
28377
- ...only(makeVDividerProps({
28469
+ ...pick(makeVDividerProps({
28378
28470
  length: 150
28379
28471
  }), ['length', 'thickness', 'opacity']),
28380
28472
  ...makeVSheetProps()
@@ -28584,7 +28676,11 @@
28584
28676
  type: Number,
28585
28677
  default: 1
28586
28678
  },
28587
- ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon'])
28679
+ precision: {
28680
+ type: Number,
28681
+ default: 0
28682
+ },
28683
+ ...omit(makeVTextFieldProps({}), ['modelValue'])
28588
28684
  }, 'VNumberInput');
28589
28685
  const VNumberInput = genericComponent()({
28590
28686
  name: 'VNumberInput',
@@ -28598,27 +28694,37 @@
28598
28694
  let {
28599
28695
  slots
28600
28696
  } = _ref;
28601
- const _model = useProxiedModel(props, 'modelValue');
28602
- const model = vue.computed({
28603
- get: () => _model.value,
28604
- // model.value could be empty string from VTextField
28605
- // but _model.value should be eventually kept in type Number | null
28697
+ const vTextFieldRef = vue.ref();
28698
+ const form = useForm(props);
28699
+ const controlsDisabled = vue.computed(() => form.isDisabled.value || form.isReadonly.value);
28700
+ const isFocused = vue.ref(false);
28701
+ function correctPrecision(val) {
28702
+ let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
28703
+ const fixed = precision == null ? String(val) : val.toFixed(precision);
28704
+ return isFocused.value ? Number(fixed).toString() // trim zeros
28705
+ : fixed;
28706
+ }
28707
+ const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(+val, props.min, props.max));
28708
+ const _inputText = vue.shallowRef(null);
28709
+ vue.watchEffect(() => {
28710
+ if (isFocused.value && !controlsDisabled.value) ; else if (model.value == null || controlsDisabled.value) {
28711
+ _inputText.value = model.value && !isNaN(model.value) ? String(model.value) : null;
28712
+ } else if (!isNaN(model.value)) {
28713
+ _inputText.value = correctPrecision(model.value);
28714
+ }
28715
+ });
28716
+ const inputText = vue.computed({
28717
+ get: () => _inputText.value,
28606
28718
  set(val) {
28607
28719
  if (val === null || val === '') {
28608
- _model.value = null;
28609
- return;
28610
- }
28611
- const value = Number(val);
28612
- if (!isNaN(value) && value <= props.max && value >= props.min) {
28613
- _model.value = value;
28720
+ model.value = null;
28721
+ _inputText.value = null;
28722
+ } else if (!isNaN(+val) && +val <= props.max && +val >= props.min) {
28723
+ model.value = +val;
28724
+ _inputText.value = val;
28614
28725
  }
28615
28726
  }
28616
28727
  });
28617
- const vTextFieldRef = vue.ref();
28618
- const stepDecimals = vue.computed(() => getDecimals(props.step));
28619
- const modelDecimals = vue.computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0);
28620
- const form = useForm(props);
28621
- const controlsDisabled = vue.computed(() => form.isDisabled.value || form.isReadonly.value);
28622
28728
  const canIncrease = vue.computed(() => {
28623
28729
  if (controlsDisabled.value) return false;
28624
28730
  return (model.value ?? 0) + props.step <= props.max;
@@ -28640,23 +28746,29 @@
28640
28746
  const decrementSlotProps = vue.computed(() => ({
28641
28747
  click: onClickDown
28642
28748
  }));
28749
+ vue.watch(() => props.precision, () => formatInputValue());
28643
28750
  vue.onMounted(() => {
28644
- if (!controlsDisabled.value) {
28645
- clampModel();
28646
- }
28751
+ clampModel();
28647
28752
  });
28753
+ function inferPrecision(value) {
28754
+ if (value == null) return 0;
28755
+ const str = value.toString();
28756
+ const idx = str.indexOf('.');
28757
+ return ~idx ? str.length - idx : 0;
28758
+ }
28648
28759
  function toggleUpDown() {
28649
28760
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
28650
28761
  if (controlsDisabled.value) return;
28651
28762
  if (model.value == null) {
28652
- model.value = clamp(0, props.min, props.max);
28763
+ inputText.value = correctPrecision(clamp(0, props.min, props.max));
28653
28764
  return;
28654
28765
  }
28655
- const decimals = Math.max(modelDecimals.value, stepDecimals.value);
28766
+ let inferredPrecision = Math.max(inferPrecision(model.value), inferPrecision(props.step));
28767
+ if (props.precision != null) inferredPrecision = Math.max(inferredPrecision, props.precision);
28656
28768
  if (increment) {
28657
- if (canIncrease.value) model.value = +(model.value + props.step).toFixed(decimals);
28769
+ if (canIncrease.value) inputText.value = correctPrecision(model.value + props.step, inferredPrecision);
28658
28770
  } else {
28659
- if (canDecrease.value) model.value = +(model.value - props.step).toFixed(decimals);
28771
+ if (canDecrease.value) inputText.value = correctPrecision(model.value - props.step, inferredPrecision);
28660
28772
  }
28661
28773
  }
28662
28774
  function onClickUp(e) {
@@ -28679,6 +28791,16 @@
28679
28791
  if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
28680
28792
  e.preventDefault();
28681
28793
  }
28794
+ if (props.precision == null) return;
28795
+
28796
+ // Ignore decimal digits above precision limit
28797
+ if (potentialNewInputVal.split('.')[1]?.length > props.precision) {
28798
+ e.preventDefault();
28799
+ }
28800
+ // Ignore decimal separator when precision = 0
28801
+ if (props.precision === 0 && potentialNewInputVal.includes('.')) {
28802
+ e.preventDefault();
28803
+ }
28682
28804
  }
28683
28805
  async function onKeydown(e) {
28684
28806
  if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
@@ -28698,13 +28820,38 @@
28698
28820
  e.stopPropagation();
28699
28821
  }
28700
28822
  function clampModel() {
28823
+ if (controlsDisabled.value) return;
28701
28824
  if (!vTextFieldRef.value) return;
28702
- const inputText = vTextFieldRef.value.value;
28703
- if (inputText && !isNaN(+inputText)) {
28704
- model.value = clamp(+inputText, props.min, props.max);
28825
+ const actualText = vTextFieldRef.value.value;
28826
+ if (actualText && !isNaN(+actualText)) {
28827
+ inputText.value = correctPrecision(clamp(+actualText, props.min, props.max));
28705
28828
  } else {
28706
- model.value = null;
28829
+ inputText.value = null;
28830
+ }
28831
+ }
28832
+ function formatInputValue() {
28833
+ if (controlsDisabled.value) return;
28834
+ if (model.value === null || isNaN(model.value)) {
28835
+ inputText.value = null;
28836
+ return;
28707
28837
  }
28838
+ inputText.value = props.precision == null ? String(model.value) : model.value.toFixed(props.precision);
28839
+ }
28840
+ function trimDecimalZeros() {
28841
+ if (controlsDisabled.value) return;
28842
+ if (model.value === null || isNaN(model.value)) {
28843
+ inputText.value = null;
28844
+ return;
28845
+ }
28846
+ inputText.value = model.value.toString();
28847
+ }
28848
+ function onFocus() {
28849
+ isFocused.value = true;
28850
+ trimDecimalZeros();
28851
+ }
28852
+ function onBlur() {
28853
+ isFocused.value = false;
28854
+ clampModel();
28708
28855
  }
28709
28856
  useRender(() => {
28710
28857
  const {
@@ -28783,20 +28930,21 @@
28783
28930
  "class": "v-number-input__control"
28784
28931
  }, [vue.createVNode(VDivider, {
28785
28932
  "vertical": true
28786
- }, null), incrementControlNode()]) : props.reverse ? undefined : vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]);
28933
+ }, null), incrementControlNode()]) : props.reverse || controlVariant.value === 'hidden' ? undefined : vue.createVNode(vue.Fragment, null, [dividerNode(), controlNode()]);
28787
28934
  const hasAppendInner = slots['append-inner'] || appendInnerControl;
28788
28935
  const prependInnerControl = controlVariant.value === 'split' ? vue.createVNode("div", {
28789
28936
  "class": "v-number-input__control"
28790
28937
  }, [decrementControlNode(), vue.createVNode(VDivider, {
28791
28938
  "vertical": true
28792
- }, null)]) : props.reverse ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28939
+ }, null)]) : props.reverse && controlVariant.value !== 'hidden' ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28793
28940
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
28794
28941
  return vue.createVNode(VTextField, vue.mergeProps({
28795
28942
  "ref": vTextFieldRef,
28796
- "modelValue": model.value,
28797
- "onUpdate:modelValue": $event => model.value = $event,
28943
+ "modelValue": inputText.value,
28944
+ "onUpdate:modelValue": $event => inputText.value = $event,
28798
28945
  "onBeforeinput": onBeforeinput,
28799
- "onChange": clampModel,
28946
+ "onFocus": onFocus,
28947
+ "onBlur": onBlur,
28800
28948
  "onKeydown": onKeydown,
28801
28949
  "class": ['v-number-input', {
28802
28950
  'v-number-input--default': controlVariant.value === 'default',
@@ -29682,7 +29830,7 @@
29682
29830
  const rangeHours24 = createRange(24);
29683
29831
  const rangeHours12am = createRange(12);
29684
29832
  const rangeHours12pm = rangeHours12am.map(v => v + 12);
29685
- const range60 = createRange(60);
29833
+ createRange(60);
29686
29834
  const selectingNames = {
29687
29835
  1: 'hour',
29688
29836
  2: 'minute',
@@ -29832,11 +29980,11 @@
29832
29980
  period.value = inputHour.value == null || inputHour.value < 12 ? 'am' : 'pm';
29833
29981
  }
29834
29982
  function firstAllowed(type, value) {
29835
- const allowedFn = type === 'hour' ? isAllowedHourCb.value : type === 'minute' ? isAllowedMinuteCb.value : isAllowedSecondCb.value;
29983
+ const allowedFn = isAllowedHourCb.value ;
29836
29984
  if (!allowedFn) return value;
29837
29985
 
29838
29986
  // TODO: clean up (Note from V2 code)
29839
- const range = type === 'minute' ? range60 : type === 'second' ? range60 : isAmPm.value ? value < 12 ? rangeHours12am : rangeHours12pm : rangeHours24;
29987
+ const range = isAmPm.value ? value < 12 ? rangeHours12am : rangeHours12pm : rangeHours24;
29840
29988
  const first = range.find(v => allowedFn((v + value) % range.length + range[0]));
29841
29989
  return ((first || 0) + value) % range.length + range[0];
29842
29990
  }
@@ -29989,22 +30137,21 @@
29989
30137
  props: makeVTreeviewItemProps(),
29990
30138
  setup(props, _ref) {
29991
30139
  let {
29992
- attrs,
29993
- slots,
29994
- emit
30140
+ slots
29995
30141
  } = _ref;
29996
- const link = useLink(props, attrs);
30142
+ const visibleIds = vue.inject(VTreeviewSymbol, {
30143
+ visibleIds: vue.ref()
30144
+ }).visibleIds;
29997
30145
  const vListItemRef = vue.ref();
29998
30146
  const isActivatableGroupActivator = vue.computed(() => vListItemRef.value?.root.activatable.value && vListItemRef.value?.isGroupActivator);
29999
- const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!vListItemRef.value?.list || isActivatableGroupActivator.value));
30147
+ const vListItemRefIsClickable = vue.computed(() => vListItemRef.value?.link.isClickable.value || props.value != null && !!vListItemRef.value?.list);
30148
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || vListItemRefIsClickable.value || isActivatableGroupActivator.value));
30149
+ const isFiltered = vue.computed(() => visibleIds.value && !visibleIds.value.has(vue.toRaw(vListItemRef.value?.id)));
30000
30150
  function activateGroupActivator(e) {
30001
30151
  if (isClickable.value && isActivatableGroupActivator.value) {
30002
30152
  vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e);
30003
30153
  }
30004
30154
  }
30005
- const visibleIds = vue.inject(VTreeviewSymbol, {
30006
- visibleIds: vue.ref()
30007
- }).visibleIds;
30008
30155
  useRender(() => {
30009
30156
  const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
30010
30157
  const hasPrepend = slots.prepend || props.toggleIcon;
@@ -30014,7 +30161,7 @@
30014
30161
  "active": vListItemRef.value?.isActivated,
30015
30162
  "class": ['v-treeview-item', {
30016
30163
  'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
30017
- 'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(vue.toRaw(vListItemRef.value?.id))
30164
+ 'v-treeview-item--filtered': isFiltered.value
30018
30165
  }, props.class],
30019
30166
  "ripple": false,
30020
30167
  "onClick": props.onClick ?? activateGroupActivator
@@ -30098,11 +30245,6 @@
30098
30245
  }
30099
30246
  }
30100
30247
  return () => slots.default?.() ?? props.items?.map(item => {
30101
- if (item.type === 'divider') {
30102
- return slots.divider?.({
30103
- props: item.props
30104
- }) ?? vue.createVNode(VDivider, item.props, null);
30105
- }
30106
30248
  const {
30107
30249
  children,
30108
30250
  props: itemProps
@@ -30201,7 +30343,7 @@
30201
30343
  collapseIcon: '$treeviewCollapse',
30202
30344
  expandIcon: '$treeviewExpand',
30203
30345
  slim: true
30204
- }), ['nav', 'openStrategy']),
30346
+ }), ['itemType', 'nav', 'openStrategy']),
30205
30347
  modelValue: {
30206
30348
  type: Array,
30207
30349
  default: () => []
@@ -30821,7 +30963,7 @@
30821
30963
  goTo
30822
30964
  };
30823
30965
  }
30824
- const version$1 = "3.7.11";
30966
+ const version$1 = "3.7.13";
30825
30967
  createVuetify$1.version = version$1;
30826
30968
 
30827
30969
  // Vue's inject() can only be used in setup
@@ -31074,7 +31216,7 @@
31074
31216
 
31075
31217
  /* eslint-disable local-rules/sort-imports */
31076
31218
 
31077
- const version = "3.7.11";
31219
+ const version = "3.7.13";
31078
31220
 
31079
31221
  /* eslint-disable local-rules/sort-imports */
31080
31222