@vuetify/nightly 3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce → 3.6.13-pr-20185.5bf1ff4

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 (204) hide show
  1. package/dist/json/attributes.json +125 -273
  2. package/dist/json/importMap-labs.json +12 -12
  3. package/dist/json/importMap.json +102 -102
  4. package/dist/json/tags.json +5 -42
  5. package/dist/json/web-types.json +239 -610
  6. package/dist/vuetify-labs.css +4045 -3340
  7. package/dist/vuetify-labs.d.ts +368 -697
  8. package/dist/vuetify-labs.esm.js +236 -241
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +236 -241
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +1754 -1049
  13. package/dist/vuetify.d.ts +338 -601
  14. package/dist/vuetify.esm.js +97 -160
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +97 -160
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +1038 -1037
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAlert/VAlert.css +5 -1
  22. package/lib/components/VAppBar/index.d.mts +0 -6
  23. package/lib/components/VAutocomplete/VAutocomplete.css +4 -0
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -15
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.mts +42 -61
  27. package/lib/components/VAvatar/VAvatar.css +2 -7
  28. package/lib/components/VAvatar/VAvatar.mjs +2 -7
  29. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  30. package/lib/components/VAvatar/VAvatar.sass +0 -1
  31. package/lib/components/VAvatar/_variables.scss +0 -13
  32. package/lib/components/VAvatar/index.d.mts +0 -6
  33. package/lib/components/VBadge/VBadge.css +2 -0
  34. package/lib/components/VBanner/VBanner.css +12 -4
  35. package/lib/components/VBottomNavigation/VBottomNavigation.css +11 -3
  36. package/lib/components/VBottomSheet/VBottomSheet.css +2 -0
  37. package/lib/components/VBreadcrumbs/index.d.mts +8 -8
  38. package/lib/components/VBtn/VBtn.css +16 -9
  39. package/lib/components/VBtn/VBtn.mjs +2 -4
  40. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  41. package/lib/components/VBtn/VBtn.sass +4 -4
  42. package/lib/components/VBtn/index.d.mts +0 -6
  43. package/lib/components/VBtnGroup/VBtnGroup.css +12 -4
  44. package/lib/components/VCard/VCard.css +9 -1
  45. package/lib/components/VCarousel/VCarousel.css +2 -0
  46. package/lib/components/VCarousel/index.d.mts +0 -9
  47. package/lib/components/VCheckbox/index.d.mts +6 -6
  48. package/lib/components/VChip/VChip.css +15 -9
  49. package/lib/components/VChip/VChip.sass +1 -1
  50. package/lib/components/VColorPicker/VColorPicker.css +2 -0
  51. package/lib/components/VColorPicker/VColorPicker.sass +4 -4
  52. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -4
  53. package/lib/components/VCombobox/VCombobox.css +4 -0
  54. package/lib/components/VCombobox/VCombobox.mjs +8 -15
  55. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  56. package/lib/components/VCombobox/index.d.mts +42 -61
  57. package/lib/components/VDataTable/composables/options.mjs +1 -1
  58. package/lib/components/VDataTable/composables/options.mjs.map +1 -1
  59. package/lib/components/VDialog/VDialog.css +5 -0
  60. package/lib/components/VDialog/index.d.mts +3 -3
  61. package/lib/components/VDivider/VDivider.css +2 -0
  62. package/lib/components/VExpansionPanel/VExpansionPanel.css +11 -5
  63. package/lib/components/VExpansionPanel/VExpansionPanel.sass +3 -3
  64. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs +2 -7
  65. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  66. package/lib/components/VExpansionPanel/index.d.mts +0 -72
  67. package/lib/components/VFab/index.d.mts +0 -6
  68. package/lib/components/VField/VField.css +13 -1
  69. package/lib/components/VField/VField.sass +5 -8
  70. package/lib/components/VFileInput/index.d.mts +18 -18
  71. package/lib/components/VFooter/VFooter.css +12 -4
  72. package/lib/components/VFooter/VFooter.mjs +20 -14
  73. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  74. package/lib/components/VFooter/index.d.mts +3 -3
  75. package/lib/components/VForm/index.d.mts +9 -9
  76. package/lib/components/VGrid/VContainer.mjs +1 -6
  77. package/lib/components/VGrid/VContainer.mjs.map +1 -1
  78. package/lib/components/VGrid/VGrid.sass +1 -1
  79. package/lib/components/VGrid/_mixins.sass +4 -4
  80. package/lib/components/VGrid/index.d.mts +0 -36
  81. package/lib/components/VImg/VImg.css +6 -9
  82. package/lib/components/VImg/VImg.mjs +0 -2
  83. package/lib/components/VImg/VImg.mjs.map +1 -1
  84. package/lib/components/VImg/VImg.sass +0 -9
  85. package/lib/components/VImg/index.d.mts +0 -9
  86. package/lib/components/VInput/index.d.mts +6 -6
  87. package/lib/components/VKbd/VKbd.css +2 -0
  88. package/lib/components/VList/VList.css +12 -4
  89. package/lib/components/VList/VListItem.css +23 -13
  90. package/lib/components/VList/VListItem.mjs +0 -2
  91. package/lib/components/VList/VListItem.mjs.map +1 -1
  92. package/lib/components/VList/VListItem.sass +2 -2
  93. package/lib/components/VList/index.d.mts +18 -19
  94. package/lib/components/VMain/VMain.css +2 -0
  95. package/lib/components/VMenu/VMenu.css +6 -0
  96. package/lib/components/VMenu/VMenu.mjs +6 -27
  97. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  98. package/lib/components/VMenu/index.d.mts +15 -30
  99. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +9 -3
  100. package/lib/components/VOtpInput/VOtpInput.css +3 -1
  101. package/lib/components/VOtpInput/VOtpInput.sass +1 -2
  102. package/lib/components/VOverflowBtn/VOverflowBtn.sass +1 -1
  103. package/lib/components/VOverlay/VOverlay.mjs +4 -5
  104. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  105. package/lib/components/VOverlay/useActivator.mjs +2 -3
  106. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  107. package/lib/components/VRadioGroup/index.d.mts +6 -6
  108. package/lib/components/VRangeSlider/index.d.mts +6 -6
  109. package/lib/components/VSelect/VSelect.css +4 -0
  110. package/lib/components/VSelect/VSelect.mjs +13 -15
  111. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  112. package/lib/components/VSelect/index.d.mts +42 -61
  113. package/lib/components/VSelect/useScrolling.mjs +3 -3
  114. package/lib/components/VSelect/useScrolling.mjs.map +1 -1
  115. package/lib/components/VSelectionControl/VSelectionControl.css +6 -4
  116. package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
  117. package/lib/components/VSheet/VSheet.css +12 -4
  118. package/lib/components/VSkeletonLoader/VSkeletonLoader.css +6 -4
  119. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs +9 -8
  120. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  121. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -2
  122. package/lib/components/VSlideGroup/VSlideGroup.mjs +1 -3
  123. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  124. package/lib/components/VSlideGroup/index.d.mts +0 -6
  125. package/lib/components/VSlider/VSliderThumb.sass +2 -2
  126. package/lib/components/VSlider/index.d.mts +6 -6
  127. package/lib/components/VSnackbar/VSnackbar.css +2 -0
  128. package/lib/components/VSnackbar/VSnackbar.mjs +4 -4
  129. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  130. package/lib/components/VSnackbar/index.d.mts +3 -3
  131. package/lib/components/VSpeedDial/index.d.mts +13 -28
  132. package/lib/components/VStepper/VStepper.css +8 -2
  133. package/lib/components/VStepper/VStepper.sass +2 -4
  134. package/lib/components/VStepper/VStepperItem.css +4 -1
  135. package/lib/components/VStepper/VStepperItem.sass +1 -1
  136. package/lib/components/VSwitch/VSwitch.css +2 -0
  137. package/lib/components/VSwitch/VSwitch.sass +10 -10
  138. package/lib/components/VSwitch/index.d.mts +6 -6
  139. package/lib/components/VSystemBar/VSystemBar.css +14 -8
  140. package/lib/components/VTable/VTable.css +8 -4
  141. package/lib/components/VTable/VTable.sass +2 -3
  142. package/lib/components/VTabs/index.d.mts +3 -21
  143. package/lib/components/VTextField/index.d.mts +18 -18
  144. package/lib/components/VTextarea/index.d.mts +18 -18
  145. package/lib/components/VTimeline/VTimeline.css +2 -0
  146. package/lib/components/VToolbar/VToolbar.css +21 -7
  147. package/lib/components/VToolbar/VToolbar.sass +1 -2
  148. package/lib/components/VTooltip/index.d.mts +3 -3
  149. package/lib/components/VTreeview/VTreeview.sass +9 -9
  150. package/lib/components/VValidation/index.d.mts +8 -9
  151. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +0 -2
  152. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  153. package/lib/components/VVirtualScroll/index.d.mts +0 -3
  154. package/lib/components/index.d.mts +302 -565
  155. package/lib/composables/nested/nested.mjs +3 -3
  156. package/lib/composables/nested/nested.mjs.map +1 -1
  157. package/lib/composables/nested/openStrategies.mjs +2 -4
  158. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  159. package/lib/composables/nested/selectStrategies.mjs +5 -5
  160. package/lib/composables/nested/selectStrategies.mjs.map +1 -1
  161. package/lib/composables/validation.mjs +6 -8
  162. package/lib/composables/validation.mjs.map +1 -1
  163. package/lib/composables/virtual.mjs +0 -1
  164. package/lib/composables/virtual.mjs.map +1 -1
  165. package/lib/entry-bundler.mjs +1 -1
  166. package/lib/entry-bundler.mjs.map +1 -1
  167. package/lib/framework.mjs +1 -1
  168. package/lib/framework.mjs.map +1 -1
  169. package/lib/index.d.mts +36 -36
  170. package/lib/labs/VDateInput/index.d.mts +6 -6
  171. package/lib/labs/VNumberInput/VNumberInput.mjs +60 -36
  172. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  173. package/lib/labs/VNumberInput/index.d.mts +23 -14
  174. package/lib/labs/VPicker/VPicker.css +6 -2
  175. package/lib/labs/VPicker/VPicker.sass +2 -3
  176. package/lib/labs/VSnackbarQueue/index.d.mts +3 -3
  177. package/lib/labs/VStepperVertical/index.d.mts +0 -36
  178. package/lib/labs/VTreeview/VTreeview.mjs +5 -7
  179. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  180. package/lib/labs/VTreeview/VTreeviewChildren.mjs +10 -33
  181. package/lib/labs/VTreeview/VTreeviewChildren.mjs.map +1 -1
  182. package/lib/labs/VTreeview/VTreeviewItem.css +1 -1
  183. package/lib/labs/VTreeview/VTreeviewItem.mjs +74 -14
  184. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  185. package/lib/labs/VTreeview/VTreeviewItem.sass +5 -2
  186. package/lib/labs/VTreeview/index.d.mts +60 -77
  187. package/lib/labs/components.d.mts +92 -136
  188. package/lib/styles/generic/_colors.scss +9 -3
  189. package/lib/styles/main.css +520 -0
  190. package/lib/styles/tools/_absolute.sass +8 -7
  191. package/lib/styles/tools/_border.sass +4 -3
  192. package/lib/styles/tools/_display.sass +8 -7
  193. package/lib/styles/tools/_elevation.sass +4 -2
  194. package/lib/styles/tools/_index.sass +0 -1
  195. package/lib/styles/tools/_radius.sass +6 -5
  196. package/lib/styles/tools/_rounded.sass +2 -1
  197. package/lib/styles/tools/_theme.sass +3 -2
  198. package/lib/styles/tools/_typography.sass +6 -5
  199. package/lib/styles/tools/_utilities.sass +5 -5
  200. package/lib/styles/utilities/_index.sass +7 -7
  201. package/lib/util/helpers.mjs +0 -5
  202. package/lib/util/helpers.mjs.map +1 -1
  203. package/package.json +1 -1
  204. package/lib/styles/tools/_sheet.sass +0 -14
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce
2
+ * Vuetify v3.6.13-pr-20185.5bf1ff4
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -579,11 +579,6 @@
579
579
  });
580
580
  return fn;
581
581
  }
582
- function checkPrintable(e) {
583
- const isPrintableChar = e.key.length === 1;
584
- const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
585
- return isPrintableChar && noModifier;
586
- }
587
582
 
588
583
  // Utilities
589
584
  const block = ['top', 'bottom'];
@@ -3257,7 +3252,6 @@
3257
3252
  // not intended for public use, this is passed in by vuetify-loader
3258
3253
 
3259
3254
  const makeVImgProps = propsFactory({
3260
- absolute: Boolean,
3261
3255
  alt: String,
3262
3256
  cover: Boolean,
3263
3257
  color: String,
@@ -3514,7 +3508,6 @@
3514
3508
  const responsiveProps = VResponsive.filterProps(props);
3515
3509
  return vue.withDirectives(vue.createVNode(VResponsive, vue.mergeProps({
3516
3510
  "class": ['v-img', {
3517
- 'v-img--absolute': props.absolute,
3518
3511
  'v-img--booting': !isBooted.value
3519
3512
  }, backgroundColorClasses.value, roundedClasses.value, props.class],
3520
3513
  "style": [{
@@ -5522,7 +5515,6 @@
5522
5515
  type: Boolean,
5523
5516
  default: undefined
5524
5517
  },
5525
- activeColor: String,
5526
5518
  baseColor: String,
5527
5519
  symbol: {
5528
5520
  type: null,
@@ -5614,11 +5606,10 @@
5614
5606
  }
5615
5607
  return group?.isSelected.value;
5616
5608
  });
5617
- const color = vue.computed(() => isActive.value ? props.activeColor ?? props.color : props.color);
5618
5609
  const variantProps = vue.computed(() => {
5619
5610
  const showColor = group?.isSelected.value && (!link.isLink.value || link.isActive?.value) || !group || link.isActive?.value;
5620
5611
  return {
5621
- color: showColor ? color.value ?? props.baseColor : props.baseColor,
5612
+ color: showColor ? props.color ?? props.baseColor : props.baseColor,
5622
5613
  variant: props.variant
5623
5614
  };
5624
5615
  });
@@ -5720,7 +5711,7 @@
5720
5711
  "indeterminate": true,
5721
5712
  "width": "2"
5722
5713
  }, null)])]
5723
- }), [[Ripple, !isDisabled.value && !!props.ripple, '', {
5714
+ }), [[Ripple, !isDisabled.value && props.ripple, '', {
5724
5715
  center: !!props.icon
5725
5716
  }]]);
5726
5717
  });
@@ -5959,7 +5950,6 @@
5959
5950
  icon: IconValue,
5960
5951
  image: String,
5961
5952
  text: String,
5962
- ...makeBorderProps(),
5963
5953
  ...makeComponentProps(),
5964
5954
  ...makeDensityProps(),
5965
5955
  ...makeRoundedProps(),
@@ -5980,9 +5970,6 @@
5980
5970
  const {
5981
5971
  themeClasses
5982
5972
  } = provideTheme(props);
5983
- const {
5984
- borderClasses
5985
- } = useBorder(props);
5986
5973
  const {
5987
5974
  colorClasses,
5988
5975
  colorStyles,
@@ -6002,7 +5989,7 @@
6002
5989
  "class": ['v-avatar', {
6003
5990
  'v-avatar--start': props.start,
6004
5991
  'v-avatar--end': props.end
6005
- }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5992
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6006
5993
  "style": [colorStyles.value, sizeStyles.value, props.style]
6007
5994
  }, {
6008
5995
  default: () => [!slots.default ? props.image ? vue.createVNode(VImg, {
@@ -6018,7 +6005,7 @@
6018
6005
  "defaults": {
6019
6006
  VImg: {
6020
6007
  cover: true,
6021
- image: props.image
6008
+ src: props.image
6022
6009
  },
6023
6010
  VIcon: {
6024
6011
  icon: props.icon
@@ -6702,14 +6689,12 @@
6702
6689
  const validateOn = vue.computed(() => {
6703
6690
  let value = (props.validateOn ?? form?.validateOn.value) || 'input';
6704
6691
  if (value === 'lazy') value = 'input lazy';
6705
- if (value === 'eager') value = 'input eager';
6706
6692
  const set = new Set(value?.split(' ') ?? []);
6707
6693
  return {
6694
+ blur: set.has('blur') || set.has('input'),
6708
6695
  input: set.has('input'),
6709
- blur: set.has('blur') || set.has('input') || set.has('invalid-input'),
6710
- invalidInput: set.has('invalid-input'),
6711
- lazy: set.has('lazy'),
6712
- eager: set.has('eager')
6696
+ submit: set.has('submit'),
6697
+ lazy: set.has('lazy')
6713
6698
  };
6714
6699
  });
6715
6700
  const isValid = vue.computed(() => {
@@ -6746,11 +6731,11 @@
6746
6731
  });
6747
6732
  vue.onMounted(async () => {
6748
6733
  if (!validateOn.value.lazy) {
6749
- await validate(!validateOn.value.eager);
6734
+ await validate(true);
6750
6735
  }
6751
6736
  form?.update(uid.value, isValid.value, errorMessages.value);
6752
6737
  });
6753
- useToggleScope(() => validateOn.value.input || validateOn.value.invalidInput && isValid.value === false, () => {
6738
+ useToggleScope(() => validateOn.value.input, () => {
6754
6739
  vue.watch(validationModel, () => {
6755
6740
  if (validationModel.value != null) {
6756
6741
  validate();
@@ -6778,7 +6763,7 @@
6778
6763
  async function resetValidation() {
6779
6764
  isPristine.value = true;
6780
6765
  if (!validateOn.value.lazy) {
6781
- await validate(!validateOn.value.eager);
6766
+ await validate(true);
6782
6767
  } else {
6783
6768
  internalErrorMessages.value = [];
6784
6769
  }
@@ -7718,9 +7703,7 @@
7718
7703
  selected: group.selected,
7719
7704
  scrollTo,
7720
7705
  scrollOffset,
7721
- focus,
7722
- hasPrev,
7723
- hasNext
7706
+ focus
7724
7707
  };
7725
7708
  }
7726
7709
  });
@@ -8190,7 +8173,6 @@
8190
8173
  return strategy;
8191
8174
  };
8192
8175
 
8193
- // Utilities
8194
8176
  const singleOpenStrategy = {
8195
8177
  open: _ref => {
8196
8178
  let {
@@ -8224,11 +8206,11 @@
8224
8206
  parents
8225
8207
  } = _ref2;
8226
8208
  if (value) {
8227
- let parent = vue.toRaw(parents.get(id));
8209
+ let parent = parents.get(id);
8228
8210
  opened.add(id);
8229
8211
  while (parent != null && parent !== id) {
8230
8212
  opened.add(parent);
8231
- parent = vue.toRaw(parents.get(parent));
8213
+ parent = parents.get(parent);
8232
8214
  }
8233
8215
  return opened;
8234
8216
  } else {
@@ -8399,18 +8381,18 @@
8399
8381
  const items = [id];
8400
8382
  while (items.length) {
8401
8383
  const item = items.shift();
8402
- selected.set(vue.toRaw(item), value ? 'on' : 'off');
8384
+ selected.set(item, value ? 'on' : 'off');
8403
8385
  if (children.has(item)) {
8404
8386
  items.push(...children.get(item));
8405
8387
  }
8406
8388
  }
8407
- let parent = vue.toRaw(parents.get(id));
8389
+ let parent = parents.get(id);
8408
8390
  while (parent) {
8409
8391
  const childrenIds = children.get(parent);
8410
- const everySelected = childrenIds.every(cid => selected.get(vue.toRaw(cid)) === 'on');
8411
- const noneSelected = childrenIds.every(cid => !selected.has(vue.toRaw(cid)) || selected.get(vue.toRaw(cid)) === 'off');
8392
+ const everySelected = childrenIds.every(cid => selected.get(cid) === 'on');
8393
+ const noneSelected = childrenIds.every(cid => !selected.has(cid) || selected.get(cid) === 'off');
8412
8394
  selected.set(parent, everySelected ? 'on' : noneSelected ? 'off' : 'indeterminate');
8413
- parent = vue.toRaw(parents.get(parent));
8395
+ parent = parents.get(parent);
8414
8396
  }
8415
8397
 
8416
8398
  // If mandatory and planned deselect results in no selected
@@ -8488,7 +8470,7 @@
8488
8470
  let isUnmounted = false;
8489
8471
  const children = vue.ref(new Map());
8490
8472
  const parents = vue.ref(new Map());
8491
- const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(vue.toRaw(v)), v => [...v.values()]);
8473
+ const opened = useProxiedModel(props, 'opened', props.opened, v => new Set(v), v => [...v.values()]);
8492
8474
  const activeStrategy = vue.computed(() => {
8493
8475
  if (typeof props.activeStrategy === 'object') return props.activeStrategy;
8494
8476
  if (typeof props.activeStrategy === 'function') return props.activeStrategy(props.mandatory);
@@ -8661,9 +8643,9 @@
8661
8643
  const item = {
8662
8644
  ...parent,
8663
8645
  id: computedId,
8664
- open: (open, e) => parent.root.open(vue.toRaw(computedId.value), open, e),
8646
+ open: (open, e) => parent.root.open(computedId.value, open, e),
8665
8647
  openOnSelect: (open, e) => parent.root.openOnSelect(computedId.value, open, e),
8666
- isOpen: vue.computed(() => parent.root.opened.value.has(vue.toRaw(computedId.value))),
8648
+ isOpen: vue.computed(() => parent.root.opened.value.has(computedId.value)),
8667
8649
  parent: vue.computed(() => parent.root.parents.value.get(computedId.value)),
8668
8650
  activate: (activated, e) => parent.root.activate(computedId.value, activated, e),
8669
8651
  isActivated: vue.computed(() => parent.root.activated.value.has(vue.toRaw(computedId.value))),
@@ -8887,7 +8869,6 @@
8887
8869
  activate,
8888
8870
  isActivated,
8889
8871
  select,
8890
- isOpen,
8891
8872
  isSelected,
8892
8873
  isIndeterminate,
8893
8874
  isGroupActivator,
@@ -8942,7 +8923,6 @@
8942
8923
  const slotProps = vue.computed(() => ({
8943
8924
  isActive: isActive.value,
8944
8925
  select,
8945
- isOpen: isOpen.value,
8946
8926
  isSelected: isSelected.value,
8947
8927
  isIndeterminate: isIndeterminate.value
8948
8928
  }));
@@ -10285,8 +10265,7 @@
10285
10265
  function useActivator(props, _ref) {
10286
10266
  let {
10287
10267
  isActive,
10288
- isTop,
10289
- contentEl
10268
+ isTop
10290
10269
  } = _ref;
10291
10270
  const vm = getCurrentInstance('useActivator');
10292
10271
  const activatorEl = vue.ref();
@@ -10403,7 +10382,7 @@
10403
10382
  return events;
10404
10383
  });
10405
10384
  vue.watch(isTop, val => {
10406
- if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered)) && !contentEl.value?.contains(document.activeElement)) {
10385
+ if (val && (props.openOnHover && !isHovered && (!openOnFocus.value || !isFocused) || openOnFocus.value && !isFocused && (!props.openOnHover || !isHovered))) {
10407
10386
  isActive.value = false;
10408
10387
  }
10409
10388
  });
@@ -10809,9 +10788,6 @@
10809
10788
  attrs,
10810
10789
  emit
10811
10790
  } = _ref;
10812
- const root = vue.ref();
10813
- const scrimEl = vue.ref();
10814
- const contentEl = vue.ref();
10815
10791
  const model = useProxiedModel(props, 'modelValue');
10816
10792
  const isActive = vue.computed({
10817
10793
  get: () => model.value,
@@ -10849,8 +10825,7 @@
10849
10825
  scrimEvents
10850
10826
  } = useActivator(props, {
10851
10827
  isActive,
10852
- isTop: localTop,
10853
- contentEl
10828
+ isTop: localTop
10854
10829
  });
10855
10830
  const {
10856
10831
  teleportTarget
@@ -10871,6 +10846,9 @@
10871
10846
  vue.watch(() => props.disabled, v => {
10872
10847
  if (v) isActive.value = false;
10873
10848
  });
10849
+ const root = vue.ref();
10850
+ const scrimEl = vue.ref();
10851
+ const contentEl = vue.ref();
10874
10852
  const {
10875
10853
  contentStyles,
10876
10854
  updateLocation
@@ -11121,12 +11099,10 @@
11121
11099
  // TODO
11122
11100
  // disableKeys: Boolean,
11123
11101
  id: String,
11124
- submenu: Boolean,
11125
11102
  ...omit(makeVOverlayProps({
11126
11103
  closeDelay: 250,
11127
11104
  closeOnContentClick: true,
11128
11105
  locationStrategy: 'connected',
11129
- location: undefined,
11130
11106
  openDelay: 300,
11131
11107
  scrim: false,
11132
11108
  scrollStrategy: 'reposition',
@@ -11149,32 +11125,27 @@
11149
11125
  const {
11150
11126
  scopeId
11151
11127
  } = useScopeId();
11152
- const {
11153
- isRtl
11154
- } = useRtl();
11155
11128
  const uid = getUid();
11156
11129
  const id = vue.computed(() => props.id || `v-menu-${uid}`);
11157
11130
  const overlay = vue.ref();
11158
11131
  const parent = vue.inject(VMenuSymbol, null);
11159
- const openChildren = vue.shallowRef(new Set());
11132
+ const openChildren = vue.shallowRef(0);
11160
11133
  vue.provide(VMenuSymbol, {
11161
11134
  register() {
11162
- openChildren.value.add(uid);
11135
+ ++openChildren.value;
11163
11136
  },
11164
11137
  unregister() {
11165
- openChildren.value.delete(uid);
11138
+ --openChildren.value;
11166
11139
  },
11167
11140
  closeParents(e) {
11168
11141
  setTimeout(() => {
11169
- if (!openChildren.value.size && !props.persistent && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
11142
+ if (!openChildren.value && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
11170
11143
  isActive.value = false;
11171
11144
  parent?.closeParents();
11172
11145
  }
11173
11146
  }, 40);
11174
11147
  }
11175
11148
  });
11176
- vue.onBeforeUnmount(() => parent?.unregister());
11177
- vue.onDeactivated(() => isActive.value = false);
11178
11149
  async function onFocusIn(e) {
11179
11150
  const before = e.relatedTarget;
11180
11151
  const after = e.target;
@@ -11217,9 +11188,6 @@
11217
11188
  } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11218
11189
  isActive.value = false;
11219
11190
  parent?.closeParents();
11220
- } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11221
- isActive.value = false;
11222
- overlay.value?.activatorEl?.focus();
11223
11191
  }
11224
11192
  }
11225
11193
  function onActivatorKeydown(e) {
@@ -11228,21 +11196,12 @@
11228
11196
  if (el && isActive.value) {
11229
11197
  if (e.key === 'ArrowDown') {
11230
11198
  e.preventDefault();
11231
- e.stopImmediatePropagation();
11232
11199
  focusChild(el, 'next');
11233
11200
  } else if (e.key === 'ArrowUp') {
11234
11201
  e.preventDefault();
11235
- e.stopImmediatePropagation();
11236
11202
  focusChild(el, 'prev');
11237
- } else if (props.submenu) {
11238
- if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11239
- isActive.value = false;
11240
- } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {
11241
- e.preventDefault();
11242
- focusChild(el, 'first');
11243
- }
11244
11203
  }
11245
- } else if (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : ['ArrowDown', 'ArrowUp'].includes(e.key)) {
11204
+ } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
11246
11205
  isActive.value = true;
11247
11206
  e.preventDefault();
11248
11207
  setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
@@ -11266,7 +11225,6 @@
11266
11225
  "onUpdate:modelValue": $event => isActive.value = $event,
11267
11226
  "absolute": true,
11268
11227
  "activatorProps": activatorProps.value,
11269
- "location": props.location ?? (props.submenu ? 'end' : 'bottom'),
11270
11228
  "onClick:outside": onClickOutside,
11271
11229
  "onKeydown": onKeydown
11272
11230
  }, scopeId), {
@@ -12099,7 +12057,6 @@
12099
12057
  deep: true
12100
12058
  });
12101
12059
  return {
12102
- calculateVisibleItems,
12103
12060
  containerRef,
12104
12061
  markerRef,
12105
12062
  computedItems,
@@ -12163,7 +12120,6 @@
12163
12120
  dimensionStyles
12164
12121
  } = useDimension(props);
12165
12122
  const {
12166
- calculateVisibleItems,
12167
12123
  containerRef,
12168
12124
  markerRef,
12169
12125
  handleScroll,
@@ -12235,7 +12191,6 @@
12235
12191
  }, [children])]);
12236
12192
  });
12237
12193
  return {
12238
- calculateVisibleItems,
12239
12194
  scrollToIndex
12240
12195
  };
12241
12196
  }
@@ -12304,9 +12259,9 @@
12304
12259
  }
12305
12260
  }
12306
12261
  return {
12307
- onScrollPassive: onListScroll,
12308
- onKeydown: onListKeydown
12309
- }; // typescript doesn't know about vue's event merging
12262
+ onListScroll,
12263
+ onListKeydown
12264
+ };
12310
12265
  }
12311
12266
 
12312
12267
  // Types
@@ -12381,7 +12336,7 @@
12381
12336
  const menu = vue.computed({
12382
12337
  get: () => _menu.value,
12383
12338
  set: v => {
12384
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12339
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12385
12340
  _menu.value = v;
12386
12341
  }
12387
12342
  });
@@ -12420,7 +12375,10 @@
12420
12375
  };
12421
12376
  });
12422
12377
  const listRef = vue.ref();
12423
- const listEvents = useScrolling(listRef, vTextFieldRef);
12378
+ const {
12379
+ onListScroll,
12380
+ onListKeydown
12381
+ } = useScrolling(listRef, vTextFieldRef);
12424
12382
  function onClear(e) {
12425
12383
  if (props.openOnClear) {
12426
12384
  menu.value = true;
@@ -12430,11 +12388,6 @@
12430
12388
  if (menuDisabled.value) return;
12431
12389
  menu.value = !menu.value;
12432
12390
  }
12433
- function onListKeydown(e) {
12434
- if (checkPrintable(e)) {
12435
- onKeydown(e);
12436
- }
12437
- }
12438
12391
  function onKeydown(e) {
12439
12392
  if (!e.key || props.readonly || form?.isReadonly.value) return;
12440
12393
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
@@ -12455,6 +12408,11 @@
12455
12408
  // html select hotkeys
12456
12409
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12457
12410
 
12411
+ function checkPrintable(e) {
12412
+ const isPrintableChar = e.key.length === 1;
12413
+ const noModifier = !e.ctrlKey && !e.metaKey && !e.altKey;
12414
+ return isPrintableChar && noModifier;
12415
+ }
12458
12416
  if (props.multiple || !checkPrintable(e)) return;
12459
12417
  const now = performance.now();
12460
12418
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
@@ -12499,11 +12457,6 @@
12499
12457
  menu.value = false;
12500
12458
  }
12501
12459
  }
12502
- function onAfterEnter() {
12503
- if (props.eager) {
12504
- vVirtualScrollRef.value?.calculateVisibleItems();
12505
- }
12506
- }
12507
12460
  function onAfterLeave() {
12508
12461
  if (isFocused.value) {
12509
12462
  vTextFieldRef.value?.focus();
@@ -12582,7 +12535,6 @@
12582
12535
  "openOnClick": false,
12583
12536
  "closeOnContentClick": false,
12584
12537
  "transition": props.transition,
12585
- "onAfterEnter": onAfterEnter,
12586
12538
  "onAfterLeave": onAfterLeave
12587
12539
  }, computedMenuProps.value), {
12588
12540
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -12592,10 +12544,11 @@
12592
12544
  "onMousedown": e => e.preventDefault(),
12593
12545
  "onKeydown": onListKeydown,
12594
12546
  "onFocusin": onFocusin,
12547
+ "onScrollPassive": onListScroll,
12595
12548
  "tabindex": "-1",
12596
12549
  "aria-live": "polite",
12597
12550
  "color": props.itemColor ?? props.color
12598
- }, listEvents, props.listProps), {
12551
+ }, props.listProps), {
12599
12552
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
12600
12553
  "title": t(props.noDataText)
12601
12554
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -12890,7 +12843,7 @@
12890
12843
  const menu = vue.computed({
12891
12844
  get: () => _menu.value,
12892
12845
  set: v => {
12893
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12846
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12894
12847
  _menu.value = v;
12895
12848
  }
12896
12849
  });
@@ -12934,7 +12887,10 @@
12934
12887
  });
12935
12888
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
12936
12889
  const listRef = vue.ref();
12937
- const listEvents = useScrolling(listRef, vTextFieldRef);
12890
+ const {
12891
+ onListScroll,
12892
+ onListKeydown
12893
+ } = useScrolling(listRef, vTextFieldRef);
12938
12894
  function onClear(e) {
12939
12895
  if (props.openOnClear) {
12940
12896
  menu.value = true;
@@ -12953,11 +12909,6 @@
12953
12909
  }
12954
12910
  menu.value = !menu.value;
12955
12911
  }
12956
- function onListKeydown(e) {
12957
- if (checkPrintable(e)) {
12958
- vTextFieldRef.value?.focus();
12959
- }
12960
- }
12961
12912
  function onKeydown(e) {
12962
12913
  if (props.readonly || form?.isReadonly.value) return;
12963
12914
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -13022,11 +12973,6 @@
13022
12973
  }
13023
12974
  }
13024
12975
  }
13025
- function onAfterEnter() {
13026
- if (props.eager) {
13027
- vVirtualScrollRef.value?.calculateVisibleItems();
13028
- }
13029
- }
13030
12976
  function onAfterLeave() {
13031
12977
  if (isFocused.value) {
13032
12978
  isPristine.value = true;
@@ -13155,7 +13101,6 @@
13155
13101
  "openOnClick": false,
13156
13102
  "closeOnContentClick": false,
13157
13103
  "transition": props.transition,
13158
- "onAfterEnter": onAfterEnter,
13159
13104
  "onAfterLeave": onAfterLeave
13160
13105
  }, props.menuProps), {
13161
13106
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -13166,10 +13111,11 @@
13166
13111
  "onKeydown": onListKeydown,
13167
13112
  "onFocusin": onFocusin,
13168
13113
  "onFocusout": onFocusout,
13114
+ "onScrollPassive": onListScroll,
13169
13115
  "tabindex": "-1",
13170
13116
  "aria-live": "polite",
13171
13117
  "color": props.itemColor ?? props.color
13172
- }, listEvents, props.listProps), {
13118
+ }, props.listProps), {
13173
13119
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
13174
13120
  "title": t(props.noDataText)
13175
13121
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -16730,7 +16676,7 @@
16730
16676
  const menu = vue.computed({
16731
16677
  get: () => _menu.value,
16732
16678
  set: v => {
16733
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
16679
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
16734
16680
  _menu.value = v;
16735
16681
  }
16736
16682
  });
@@ -16813,7 +16759,10 @@
16813
16759
  });
16814
16760
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
16815
16761
  const listRef = vue.ref();
16816
- const listEvents = useScrolling(listRef, vTextFieldRef);
16762
+ const {
16763
+ onListScroll,
16764
+ onListKeydown
16765
+ } = useScrolling(listRef, vTextFieldRef);
16817
16766
  function onClear(e) {
16818
16767
  cleared = true;
16819
16768
  if (props.openOnClear) {
@@ -16832,11 +16781,6 @@
16832
16781
  }
16833
16782
  menu.value = !menu.value;
16834
16783
  }
16835
- function onListKeydown(e) {
16836
- if (checkPrintable(e)) {
16837
- vTextFieldRef.value?.focus();
16838
- }
16839
- }
16840
16784
  // eslint-disable-next-line complexity
16841
16785
  function onKeydown(e) {
16842
16786
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
@@ -16901,11 +16845,6 @@
16901
16845
  }
16902
16846
  }
16903
16847
  }
16904
- function onAfterEnter() {
16905
- if (props.eager) {
16906
- vVirtualScrollRef.value?.calculateVisibleItems();
16907
- }
16908
- }
16909
16848
  function onAfterLeave() {
16910
16849
  if (isFocused.value) {
16911
16850
  isPristine.value = true;
@@ -17030,7 +16969,6 @@
17030
16969
  "openOnClick": false,
17031
16970
  "closeOnContentClick": false,
17032
16971
  "transition": props.transition,
17033
- "onAfterEnter": onAfterEnter,
17034
16972
  "onAfterLeave": onAfterLeave
17035
16973
  }, props.menuProps), {
17036
16974
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -17041,10 +16979,11 @@
17041
16979
  "onKeydown": onListKeydown,
17042
16980
  "onFocusin": onFocusin,
17043
16981
  "onFocusout": onFocusout,
16982
+ "onScrollPassive": onListScroll,
17044
16983
  "tabindex": "-1",
17045
16984
  "aria-live": "polite",
17046
16985
  "color": props.itemColor ?? props.color
17047
- }, listEvents, props.listProps), {
16986
+ }, props.listProps), {
17048
16987
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
17049
16988
  "title": t(props.noDataText)
17050
16989
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -18308,7 +18247,7 @@
18308
18247
  if (deepEqual(oldOptions, options.value)) return;
18309
18248
 
18310
18249
  // Reset page when searching
18311
- if (oldOptions && oldOptions.search !== options.value.search) {
18250
+ if (oldOptions?.search != null && oldOptions.search !== options.value.search) {
18312
18251
  page.value = 1;
18313
18252
  }
18314
18253
  vm.emit('update:options', options.value);
@@ -20988,7 +20927,6 @@
20988
20927
  default: false
20989
20928
  },
20990
20929
  ...makeComponentProps(),
20991
- ...makeDimensionProps(),
20992
20930
  ...makeTagProps()
20993
20931
  }, 'VContainer');
20994
20932
  const VContainer = genericComponent()({
@@ -21001,14 +20939,11 @@
21001
20939
  const {
21002
20940
  rtlClasses
21003
20941
  } = useRtl();
21004
- const {
21005
- dimensionStyles
21006
- } = useDimension(props);
21007
20942
  useRender(() => vue.createVNode(props.tag, {
21008
20943
  "class": ['v-container', {
21009
20944
  'v-container--fluid': props.fluid
21010
20945
  }, rtlClasses.value, props.class],
21011
- "style": [dimensionStyles.value, props.style]
20946
+ "style": props.style
21012
20947
  }, slots));
21013
20948
  return {};
21014
20949
  }
@@ -22430,8 +22365,7 @@
22430
22365
  default: false
22431
22366
  },
22432
22367
  readonly: Boolean,
22433
- ...makeComponentProps(),
22434
- ...makeDimensionProps()
22368
+ ...makeComponentProps()
22435
22369
  }, 'VExpansionPanelTitle');
22436
22370
  const VExpansionPanelTitle = genericComponent()({
22437
22371
  name: 'VExpansionPanelTitle',
@@ -22449,9 +22383,6 @@
22449
22383
  backgroundColorClasses,
22450
22384
  backgroundColorStyles
22451
22385
  } = useBackgroundColor(props, 'color');
22452
- const {
22453
- dimensionStyles
22454
- } = useDimension(props);
22455
22386
  const slotProps = vue.computed(() => ({
22456
22387
  collapseIcon: props.collapseIcon,
22457
22388
  disabled: expansionPanel.disabled.value,
@@ -22466,7 +22397,7 @@
22466
22397
  'v-expansion-panel-title--focusable': props.focusable,
22467
22398
  'v-expansion-panel-title--static': props.static
22468
22399
  }, backgroundColorClasses.value, props.class],
22469
- "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
22400
+ "style": [backgroundColorStyles.value, props.style],
22470
22401
  "type": "button",
22471
22402
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
22472
22403
  "disabled": expansionPanel.disabled.value,
@@ -22988,6 +22919,8 @@
22988
22919
  let {
22989
22920
  slots
22990
22921
  } = _ref;
22922
+ const layoutItemStyles = vue.ref();
22923
+ const layoutIsReady = vue.shallowRef();
22991
22924
  const {
22992
22925
  themeClasses
22993
22926
  } = provideTheme(props);
@@ -23012,17 +22945,20 @@
23012
22945
  autoHeight.value = entries[0].target.clientHeight;
23013
22946
  });
23014
22947
  const height = vue.computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10));
23015
- const {
23016
- layoutItemStyles,
23017
- layoutIsReady
23018
- } = useLayoutItem({
23019
- id: props.name,
23020
- order: vue.computed(() => parseInt(props.order, 10)),
23021
- position: vue.computed(() => 'bottom'),
23022
- layoutSize: height,
23023
- elementSize: vue.computed(() => props.height === 'auto' ? undefined : height.value),
23024
- active: vue.computed(() => props.app),
23025
- absolute: vue.toRef(props, 'absolute')
22948
+ useToggleScope(() => props.app, () => {
22949
+ const layout = useLayoutItem({
22950
+ id: props.name,
22951
+ order: vue.computed(() => parseInt(props.order, 10)),
22952
+ position: vue.computed(() => 'bottom'),
22953
+ layoutSize: height,
22954
+ elementSize: vue.computed(() => props.height === 'auto' ? undefined : height.value),
22955
+ active: vue.computed(() => props.app),
22956
+ absolute: vue.toRef(props, 'absolute')
22957
+ });
22958
+ vue.watchEffect(() => {
22959
+ layoutItemStyles.value = layout.layoutItemStyles.value;
22960
+ layoutIsReady.value = layout.layoutIsReady;
22961
+ });
23026
22962
  });
23027
22963
  useRender(() => vue.createVNode(props.tag, {
23028
22964
  "ref": resizeRef,
@@ -23031,7 +22967,7 @@
23031
22967
  height: convertToUnit(props.height)
23032
22968
  }, props.style]
23033
22969
  }, slots));
23034
- return props.app ? layoutIsReady : {};
22970
+ return props.app ? layoutIsReady.value : {};
23035
22971
  }
23036
22972
  });
23037
22973
 
@@ -25172,16 +25108,17 @@
25172
25108
  const items = vue.computed(() => genStructure(wrapInArray(props.type).join(',')));
25173
25109
  useRender(() => {
25174
25110
  const isLoading = !slots.default || props.loading;
25175
- return vue.createVNode("div", {
25111
+ const loadingProps = props.boilerplate || !isLoading ? {} : {
25112
+ ariaLive: 'polite',
25113
+ ariaLabel: t(props.loadingText),
25114
+ role: 'alert'
25115
+ };
25116
+ return vue.createVNode("div", vue.mergeProps({
25176
25117
  "class": ['v-skeleton-loader', {
25177
25118
  'v-skeleton-loader--boilerplate': props.boilerplate
25178
25119
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
25179
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
25180
- "aria-busy": !props.boilerplate ? isLoading : undefined,
25181
- "aria-live": !props.boilerplate ? 'polite' : undefined,
25182
- "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
25183
- "role": !props.boilerplate ? 'alert' : undefined
25184
- }, [isLoading ? items.value : slots.default?.()]);
25120
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}]
25121
+ }, loadingProps), [isLoading ? items.value : slots.default?.()]);
25185
25122
  });
25186
25123
  return {};
25187
25124
  }
@@ -25214,14 +25151,14 @@
25214
25151
  // Types
25215
25152
 
25216
25153
  function useCountdown(milliseconds) {
25217
- const time = vue.shallowRef(milliseconds);
25154
+ const time = vue.shallowRef(milliseconds());
25218
25155
  let timer = -1;
25219
25156
  function clear() {
25220
25157
  clearInterval(timer);
25221
25158
  }
25222
25159
  function reset() {
25223
25160
  clear();
25224
- vue.nextTick(() => time.value = milliseconds);
25161
+ vue.nextTick(() => time.value = milliseconds());
25225
25162
  }
25226
25163
  function start(el) {
25227
25164
  const style = el ? getComputedStyle(el) : {
@@ -25233,7 +25170,7 @@
25233
25170
  const startTime = performance.now();
25234
25171
  timer = window.setInterval(() => {
25235
25172
  const elapsed = performance.now() - startTime + interval;
25236
- time.value = Math.max(milliseconds - elapsed, 0);
25173
+ time.value = Math.max(milliseconds() - elapsed, 0);
25237
25174
  if (time.value <= 0) clear();
25238
25175
  }, interval);
25239
25176
  }
@@ -25293,7 +25230,7 @@
25293
25230
  const {
25294
25231
  roundedClasses
25295
25232
  } = useRounded(props);
25296
- const countdown = useCountdown(Number(props.timeout));
25233
+ const countdown = useCountdown(() => Number(props.timeout));
25297
25234
  const overlay = vue.ref();
25298
25235
  const timerRef = vue.ref();
25299
25236
  const isHovering = vue.shallowRef(false);
@@ -28113,19 +28050,23 @@
28113
28050
  },
28114
28051
  inset: Boolean,
28115
28052
  hideInput: Boolean,
28053
+ modelValue: {
28054
+ type: Number,
28055
+ default: null
28056
+ },
28116
28057
  min: {
28117
28058
  type: Number,
28118
- default: -Infinity
28059
+ default: Number.MIN_SAFE_INTEGER
28119
28060
  },
28120
28061
  max: {
28121
28062
  type: Number,
28122
- default: Infinity
28063
+ default: Number.MAX_SAFE_INTEGER
28123
28064
  },
28124
28065
  step: {
28125
28066
  type: Number,
28126
28067
  default: 1
28127
28068
  },
28128
- ...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon'])
28069
+ ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon'])
28129
28070
  }, 'VNumberInput');
28130
28071
  const VNumberInput = genericComponent()({
28131
28072
  name: 'VNumberInput',
@@ -28137,30 +28078,27 @@
28137
28078
  },
28138
28079
  setup(props, _ref) {
28139
28080
  let {
28140
- attrs,
28141
- emit,
28142
28081
  slots
28143
28082
  } = _ref;
28144
- const model = useProxiedModel(props, 'modelValue');
28083
+ const _model = useProxiedModel(props, 'modelValue');
28084
+ const model = vue.computed({
28085
+ get: () => _model.value,
28086
+ set(val) {
28087
+ if (typeof val !== 'string') _model.value = val;
28088
+ }
28089
+ });
28090
+ const vTextFieldRef = vue.ref();
28145
28091
  const stepDecimals = vue.computed(() => getDecimals(props.step));
28146
- const modelDecimals = vue.computed(() => model.value != null ? getDecimals(model.value) : 0);
28092
+ const modelDecimals = vue.computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0);
28147
28093
  const form = useForm();
28148
28094
  const controlsDisabled = vue.computed(() => props.disabled || props.readonly || form?.isReadonly.value);
28149
28095
  const canIncrease = vue.computed(() => {
28150
28096
  if (controlsDisabled.value) return false;
28151
- if (model.value == null) return true;
28152
- return model.value + props.step <= props.max;
28097
+ return (model.value ?? 0) + props.step <= props.max;
28153
28098
  });
28154
28099
  const canDecrease = vue.computed(() => {
28155
28100
  if (controlsDisabled.value) return false;
28156
- if (model.value == null) return true;
28157
- return model.value - props.step >= props.min;
28158
- });
28159
- vue.watchEffect(() => {
28160
- if (controlsDisabled.value) return;
28161
- if (model.value != null && (model.value < props.min || model.value > props.max)) {
28162
- model.value = clamp(model.value, props.min, props.max);
28163
- }
28101
+ return (model.value ?? 0) - props.step >= props.min;
28164
28102
  });
28165
28103
  const controlVariant = vue.computed(() => {
28166
28104
  return props.hideInput ? 'stacked' : props.controlVariant;
@@ -28175,11 +28113,16 @@
28175
28113
  const decrementSlotProps = vue.computed(() => ({
28176
28114
  click: onClickDown
28177
28115
  }));
28116
+ vue.onMounted(() => {
28117
+ if (!props.readonly && !props.disabled) {
28118
+ clampModel();
28119
+ }
28120
+ });
28178
28121
  function toggleUpDown() {
28179
28122
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
28180
28123
  if (controlsDisabled.value) return;
28181
28124
  if (model.value == null) {
28182
- model.value = 0;
28125
+ model.value = clamp(0, props.min, props.max);
28183
28126
  return;
28184
28127
  }
28185
28128
  const decimals = Math.max(modelDecimals.value, stepDecimals.value);
@@ -28197,30 +28140,45 @@
28197
28140
  e.stopPropagation();
28198
28141
  toggleUpDown(false);
28199
28142
  }
28200
- function onKeydown(e) {
28201
- if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
28202
- if (['ArrowDown'].includes(e.key)) {
28143
+ function onBeforeinput(e) {
28144
+ if (!e.data) return;
28145
+ const existingTxt = e.target?.value;
28146
+ const selectionStart = e.target?.selectionStart;
28147
+ const selectionEnd = e.target?.selectionEnd;
28148
+ const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
28149
+ // Only numbers, "-", "." are allowed
28150
+ // AND "-", "." are allowed only once
28151
+ // AND "-" is only allowed at the start
28152
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
28203
28153
  e.preventDefault();
28204
- toggleUpDown(false);
28205
- return;
28206
28154
  }
28207
- if (['ArrowUp'].includes(e.key)) {
28208
- e.preventDefault();
28209
- toggleUpDown();
28210
- return;
28211
- }
28212
-
28213
- // Only numbers, +, - & . are allowed
28214
- if (!/^[0-9\-+.]+$/.test(e.key)) {
28155
+ }
28156
+ async function onKeydown(e) {
28157
+ if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
28158
+ if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
28215
28159
  e.preventDefault();
28160
+ clampModel();
28161
+ // _model is controlled, so need to wait until props['modelValue'] is updated
28162
+ await vue.nextTick();
28163
+ if (e.key === 'ArrowDown') {
28164
+ toggleUpDown(false);
28165
+ } else {
28166
+ toggleUpDown();
28167
+ }
28216
28168
  }
28217
28169
  }
28218
- function onModelUpdate(v) {
28219
- model.value = v ? +v : undefined;
28220
- }
28221
28170
  function onControlMousedown(e) {
28222
28171
  e.stopPropagation();
28223
28172
  }
28173
+ function clampModel() {
28174
+ if (!vTextFieldRef.value) return;
28175
+ const inputText = vTextFieldRef.value.value;
28176
+ if (inputText && !isNaN(+inputText)) {
28177
+ model.value = clamp(+inputText, props.min, props.max);
28178
+ } else {
28179
+ model.value = null;
28180
+ }
28181
+ }
28224
28182
  useRender(() => {
28225
28183
  const {
28226
28184
  modelValue: _,
@@ -28305,8 +28263,11 @@
28305
28263
  }, null)]) : props.reverse ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28306
28264
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
28307
28265
  return vue.createVNode(VTextField, vue.mergeProps({
28266
+ "ref": vTextFieldRef,
28308
28267
  "modelValue": model.value,
28309
- "onUpdate:modelValue": onModelUpdate,
28268
+ "onUpdate:modelValue": $event => model.value = $event,
28269
+ "onBeforeinput": onBeforeinput,
28270
+ "onChange": clampModel,
28310
28271
  "onKeydown": onKeydown,
28311
28272
  "class": ['v-number-input', {
28312
28273
  'v-number-input--default': controlVariant.value === 'default',
@@ -29503,7 +29464,6 @@
29503
29464
 
29504
29465
  const makeVTreeviewItemProps = propsFactory({
29505
29466
  loading: Boolean,
29506
- onToggleExpand: EventProp(),
29507
29467
  toggleIcon: IconValue,
29508
29468
  ...makeVListItemProps({
29509
29469
  slim: true
@@ -29524,12 +29484,24 @@
29524
29484
  const {
29525
29485
  activate,
29526
29486
  isActivated,
29487
+ select,
29488
+ isSelected,
29489
+ isIndeterminate,
29527
29490
  isGroupActivator,
29528
29491
  root,
29529
29492
  id
29530
29493
  } = useNestedItem(rawId, false);
29531
29494
  const isActivatableGroupActivator = vue.computed(() => root.activatable.value && isGroupActivator);
29532
- const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!vListItemRef.value?.list || isActivatableGroupActivator.value));
29495
+ const {
29496
+ densityClasses
29497
+ } = useDensity(props, 'v-list-item');
29498
+ const slotProps = vue.computed(() => ({
29499
+ isActive: isActivated.value,
29500
+ select,
29501
+ isSelected: isSelected.value,
29502
+ isIndeterminate: isIndeterminate.value
29503
+ }));
29504
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || props.value != null && !!vListItemRef.value?.list));
29533
29505
  function activateItem(e) {
29534
29506
  if (!isClickable.value || !isActivatableGroupActivator.value && isGroupActivator) return;
29535
29507
  if (root.activatable.value) {
@@ -29540,20 +29512,68 @@
29540
29512
  }
29541
29513
  }
29542
29514
  }
29515
+ function onKeyDown(e) {
29516
+ if (e.key === 'Enter' || e.key === ' ') {
29517
+ e.preventDefault();
29518
+ activateItem(e);
29519
+ }
29520
+ }
29543
29521
  const visibleIds = vue.inject(VTreeviewSymbol, {
29544
29522
  visibleIds: vue.ref()
29545
29523
  }).visibleIds;
29546
29524
  useRender(() => {
29547
- const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
29525
+ const hasTitle = slots.title || props.title != null;
29526
+ const hasSubtitle = slots.subtitle || props.subtitle != null;
29527
+ const listItemProps = VListItem.filterProps(props);
29548
29528
  const hasPrepend = slots.prepend || props.toggleIcon;
29549
- return vue.createVNode(VListItem, vue.mergeProps(listItemProps, {
29550
- "active": isActivated.value,
29529
+ return isActivatableGroupActivator.value ? vue.withDirectives(vue.createVNode("div", {
29530
+ "class": ['v-list-item', 'v-list-item--one-line', 'v-treeview-item', 'v-treeview-item--activetable-group-activator', {
29531
+ 'v-list-item--active': isActivated.value || isSelected.value,
29532
+ 'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(id.value)
29533
+ }, densityClasses.value, props.class],
29534
+ "onClick": activateItem
29535
+ }, [vue.createVNode(vue.Fragment, null, [genOverlays(isActivated.value || isSelected.value, 'v-list-item'), props.toggleIcon && vue.createVNode(VListItemAction, {
29536
+ "start": false
29537
+ }, {
29538
+ default: () => [vue.createVNode(VBtn, {
29539
+ "density": "compact",
29540
+ "icon": props.toggleIcon,
29541
+ "loading": props.loading,
29542
+ "variant": "text",
29543
+ "onClick": props.onClick
29544
+ }, {
29545
+ loader() {
29546
+ return vue.createVNode(VProgressCircular, {
29547
+ "indeterminate": "disable-shrink",
29548
+ "size": "20",
29549
+ "width": "2"
29550
+ }, null);
29551
+ }
29552
+ })]
29553
+ })]), vue.createVNode("div", {
29554
+ "class": "v-list-item__content",
29555
+ "data-no-activator": ""
29556
+ }, [hasTitle && vue.createVNode(VListItemTitle, {
29557
+ "key": "title"
29558
+ }, {
29559
+ default: () => [slots.title?.({
29560
+ title: props.title
29561
+ }) ?? props.title]
29562
+ }), hasSubtitle && vue.createVNode(VListItemSubtitle, {
29563
+ "key": "subtitle"
29564
+ }, {
29565
+ default: () => [slots.subtitle?.({
29566
+ subtitle: props.subtitle
29567
+ }) ?? props.subtitle]
29568
+ }), slots.default?.(slotProps.value)])]), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]) : vue.createVNode(VListItem, vue.mergeProps({
29569
+ "ref": vListItemRef
29570
+ }, listItemProps, {
29551
29571
  "class": ['v-treeview-item', {
29552
- 'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
29553
29572
  'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(id.value)
29554
29573
  }, props.class],
29555
- "ripple": false,
29556
- "onClick": props.onClick ?? activateItem
29574
+ "value": id.value,
29575
+ "onClick": activateItem,
29576
+ "onKeydown": isClickable.value && onKeyDown
29557
29577
  }), {
29558
29578
  ...slots,
29559
29579
  prepend: hasPrepend ? slotProps => {
@@ -29564,8 +29584,7 @@
29564
29584
  "density": "compact",
29565
29585
  "icon": props.toggleIcon,
29566
29586
  "loading": props.loading,
29567
- "variant": "text",
29568
- "onClick": props.onToggleExpand
29587
+ "variant": "text"
29569
29588
  }, {
29570
29589
  loader() {
29571
29590
  return vue.createVNode(VProgressCircular, {
@@ -29592,19 +29611,7 @@
29592
29611
  default: '$loading'
29593
29612
  },
29594
29613
  items: Array,
29595
- openOnClick: {
29596
- type: Boolean,
29597
- default: undefined
29598
- },
29599
- indeterminateIcon: {
29600
- type: IconValue,
29601
- default: '$checkboxIndeterminate'
29602
- },
29603
- falseIcon: IconValue,
29604
- trueIcon: IconValue,
29605
- returnObject: Boolean,
29606
29614
  selectable: Boolean,
29607
- selectedColor: String,
29608
29615
  selectStrategy: [String, Function, Object]
29609
29616
  }, 'VTreeviewChildren');
29610
29617
  const VTreeviewChildren = genericComponent()({
@@ -29616,7 +29623,6 @@
29616
29623
  slots
29617
29624
  } = _ref;
29618
29625
  const isLoading = vue.shallowRef(null);
29619
- const isClickOnOpen = vue.computed(() => props.openOnClick != null ? props.openOnClick : props.selectable);
29620
29626
  function checkChildren(item) {
29621
29627
  return new Promise(resolve => {
29622
29628
  if (!props.items?.length || !props.loadChildren) return resolve();
@@ -29647,11 +29653,7 @@
29647
29653
  "key": item.value,
29648
29654
  "modelValue": slotProps.isSelected,
29649
29655
  "loading": loading,
29650
- "color": props.selectedColor,
29651
29656
  "indeterminate": slotProps.isIndeterminate,
29652
- "indeterminateIcon": props.indeterminateIcon,
29653
- "falseIcon": props.falseIcon,
29654
- "trueIcon": props.trueIcon,
29655
29657
  "onClick": vue.withModifiers(() => selectItem(slotProps.select, slotProps.isSelected), ['stop']),
29656
29658
  "onKeydown": e => {
29657
29659
  if (!['Enter', 'Space'].includes(e.key)) return;
@@ -29673,9 +29675,9 @@
29673
29675
  };
29674
29676
  const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
29675
29677
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
29676
- return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps(treeviewGroupProps, {
29677
- "value": props.returnObject ? item : treeviewGroupProps?.value
29678
- }), {
29678
+ return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps({
29679
+ "value": itemProps?.value
29680
+ }, treeviewGroupProps), {
29679
29681
  activator: _ref3 => {
29680
29682
  let {
29681
29683
  props: activatorProps
@@ -29683,24 +29685,19 @@
29683
29685
  const listItemProps = {
29684
29686
  ...itemProps,
29685
29687
  ...activatorProps,
29686
- value: itemProps?.value,
29687
- onToggleExpand: activatorProps.onClick,
29688
- onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : undefined
29688
+ value: itemProps?.value
29689
29689
  };
29690
29690
  return vue.createVNode(VTreeviewItem, vue.mergeProps(listItemProps, {
29691
- "value": props.returnObject ? vue.toRaw(item) : itemProps.value,
29692
- "loading": loading
29691
+ "loading": loading,
29692
+ "onClick": () => checkChildren(item)
29693
29693
  }), slotsWithItem);
29694
29694
  },
29695
29695
  default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
29696
- "items": children,
29697
- "returnObject": props.returnObject
29696
+ "items": children
29698
29697
  }), slots)
29699
29698
  }) : slots.item?.({
29700
29699
  props: itemProps
29701
- }) ?? vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
29702
- "value": props.returnObject ? vue.toRaw(item) : itemProps.value
29703
- }), slotsWithItem);
29700
+ }) ?? vue.createVNode(VTreeviewItem, itemProps, slotsWithItem);
29704
29701
  });
29705
29702
  }
29706
29703
  });
@@ -29724,7 +29721,7 @@
29724
29721
  collapseIcon: '$treeviewCollapse',
29725
29722
  expandIcon: '$treeviewExpand',
29726
29723
  slim: true
29727
- }), ['nav', 'openStrategy'])
29724
+ }), ['nav'])
29728
29725
  }, 'VTreeview');
29729
29726
  const VTreeview = genericComponent()({
29730
29727
  name: 'VTreeview',
@@ -29783,11 +29780,11 @@
29783
29780
  }
29784
29781
  return arr;
29785
29782
  }
29786
- function openAll(items) {
29783
+ function openAll(item) {
29787
29784
  let ids = [];
29788
- for (const i of items) {
29785
+ for (const i of item) {
29789
29786
  if (!i.children) continue;
29790
- ids.push(props.returnObject ? vue.toRaw(i.raw) : i.value);
29787
+ ids.push(i.value);
29791
29788
  if (i.children) {
29792
29789
  ids = ids.concat(openAll(i.children));
29793
29790
  }
@@ -29823,7 +29820,6 @@
29823
29820
  "ref": vListRef
29824
29821
  }, listProps, {
29825
29822
  "class": ['v-treeview', props.class],
29826
- "open-strategy": "multiple",
29827
29823
  "style": props.style,
29828
29824
  "opened": opened.value,
29829
29825
  "activated": activated.value,
@@ -29832,7 +29828,6 @@
29832
29828
  "onUpdate:selected": $event => selected.value = $event
29833
29829
  }), {
29834
29830
  default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
29835
- "returnObject": props.returnObject,
29836
29831
  "items": items.value
29837
29832
  }), slots)]
29838
29833
  });
@@ -30338,7 +30333,7 @@
30338
30333
  goTo
30339
30334
  };
30340
30335
  }
30341
- const version$1 = "3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce";
30336
+ const version$1 = "3.6.13-pr-20185.5bf1ff4";
30342
30337
  createVuetify$1.version = version$1;
30343
30338
 
30344
30339
  // Vue's inject() can only be used in setup
@@ -30591,7 +30586,7 @@
30591
30586
 
30592
30587
  /* eslint-disable local-rules/sort-imports */
30593
30588
 
30594
- const version = "3.6.13-3.7.0-beta.0.0-pr-20092.dc840ce";
30589
+ const version = "3.6.13-pr-20185.5bf1ff4";
30595
30590
 
30596
30591
  /* eslint-disable local-rules/sort-imports */
30597
30592