@vuetify/nightly 3.6.13-3.7.0-beta.0.0-pr-20092.a834b18 → 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 +16 -16
  3. package/dist/json/importMap.json +118 -118
  4. package/dist/json/tags.json +5 -42
  5. package/dist/json/web-types.json +239 -610
  6. package/dist/vuetify-labs.css +3046 -2341
  7. package/dist/vuetify-labs.d.ts +368 -697
  8. package/dist/vuetify-labs.esm.js +239 -241
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +239 -241
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +1273 -568
  13. package/dist/vuetify.d.ts +342 -605
  14. package/dist/vuetify.esm.js +100 -160
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +100 -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 +1 -3
  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 +8 -26
  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 +40 -40
  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.a834b18
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
  }));
@@ -8962,7 +8942,7 @@
8962
8942
  function onKeyDown(e) {
8963
8943
  if (e.key === 'Enter' || e.key === ' ') {
8964
8944
  e.preventDefault();
8965
- e.target.dispatchEvent(new MouseEvent('click', e));
8945
+ onClick(e);
8966
8946
  }
8967
8947
  }
8968
8948
  useRender(() => {
@@ -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;
@@ -11214,9 +11185,9 @@
11214
11185
  isActive.value = false;
11215
11186
  overlay.value?.activatorEl?.focus();
11216
11187
  }
11217
- } else if (props.submenu && e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11188
+ } else if (['Enter', ' '].includes(e.key) && props.closeOnContentClick) {
11218
11189
  isActive.value = false;
11219
- overlay.value?.activatorEl?.focus();
11190
+ parent?.closeParents();
11220
11191
  }
11221
11192
  }
11222
11193
  function onActivatorKeydown(e) {
@@ -11225,21 +11196,12 @@
11225
11196
  if (el && isActive.value) {
11226
11197
  if (e.key === 'ArrowDown') {
11227
11198
  e.preventDefault();
11228
- e.stopImmediatePropagation();
11229
11199
  focusChild(el, 'next');
11230
11200
  } else if (e.key === 'ArrowUp') {
11231
11201
  e.preventDefault();
11232
- e.stopImmediatePropagation();
11233
11202
  focusChild(el, 'prev');
11234
- } else if (props.submenu) {
11235
- if (e.key === (isRtl.value ? 'ArrowRight' : 'ArrowLeft')) {
11236
- isActive.value = false;
11237
- } else if (e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight')) {
11238
- e.preventDefault();
11239
- focusChild(el, 'first');
11240
- }
11241
11203
  }
11242
- } else if (props.submenu ? e.key === (isRtl.value ? 'ArrowLeft' : 'ArrowRight') : ['ArrowDown', 'ArrowUp'].includes(e.key)) {
11204
+ } else if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
11243
11205
  isActive.value = true;
11244
11206
  e.preventDefault();
11245
11207
  setTimeout(() => setTimeout(() => onActivatorKeydown(e)));
@@ -11263,7 +11225,6 @@
11263
11225
  "onUpdate:modelValue": $event => isActive.value = $event,
11264
11226
  "absolute": true,
11265
11227
  "activatorProps": activatorProps.value,
11266
- "location": props.location ?? (props.submenu ? 'end' : 'bottom'),
11267
11228
  "onClick:outside": onClickOutside,
11268
11229
  "onKeydown": onKeydown
11269
11230
  }, scopeId), {
@@ -12096,7 +12057,6 @@
12096
12057
  deep: true
12097
12058
  });
12098
12059
  return {
12099
- calculateVisibleItems,
12100
12060
  containerRef,
12101
12061
  markerRef,
12102
12062
  computedItems,
@@ -12160,7 +12120,6 @@
12160
12120
  dimensionStyles
12161
12121
  } = useDimension(props);
12162
12122
  const {
12163
- calculateVisibleItems,
12164
12123
  containerRef,
12165
12124
  markerRef,
12166
12125
  handleScroll,
@@ -12232,7 +12191,6 @@
12232
12191
  }, [children])]);
12233
12192
  });
12234
12193
  return {
12235
- calculateVisibleItems,
12236
12194
  scrollToIndex
12237
12195
  };
12238
12196
  }
@@ -12301,9 +12259,9 @@
12301
12259
  }
12302
12260
  }
12303
12261
  return {
12304
- onScrollPassive: onListScroll,
12305
- onKeydown: onListKeydown
12306
- }; // typescript doesn't know about vue's event merging
12262
+ onListScroll,
12263
+ onListKeydown
12264
+ };
12307
12265
  }
12308
12266
 
12309
12267
  // Types
@@ -12378,7 +12336,7 @@
12378
12336
  const menu = vue.computed({
12379
12337
  get: () => _menu.value,
12380
12338
  set: v => {
12381
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12339
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12382
12340
  _menu.value = v;
12383
12341
  }
12384
12342
  });
@@ -12417,7 +12375,10 @@
12417
12375
  };
12418
12376
  });
12419
12377
  const listRef = vue.ref();
12420
- const listEvents = useScrolling(listRef, vTextFieldRef);
12378
+ const {
12379
+ onListScroll,
12380
+ onListKeydown
12381
+ } = useScrolling(listRef, vTextFieldRef);
12421
12382
  function onClear(e) {
12422
12383
  if (props.openOnClear) {
12423
12384
  menu.value = true;
@@ -12427,11 +12388,6 @@
12427
12388
  if (menuDisabled.value) return;
12428
12389
  menu.value = !menu.value;
12429
12390
  }
12430
- function onListKeydown(e) {
12431
- if (checkPrintable(e)) {
12432
- onKeydown(e);
12433
- }
12434
- }
12435
12391
  function onKeydown(e) {
12436
12392
  if (!e.key || props.readonly || form?.isReadonly.value) return;
12437
12393
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
@@ -12452,6 +12408,11 @@
12452
12408
  // html select hotkeys
12453
12409
  const KEYBOARD_LOOKUP_THRESHOLD = 1000; // milliseconds
12454
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
+ }
12455
12416
  if (props.multiple || !checkPrintable(e)) return;
12456
12417
  const now = performance.now();
12457
12418
  if (now - keyboardLookupLastTime > KEYBOARD_LOOKUP_THRESHOLD) {
@@ -12496,11 +12457,6 @@
12496
12457
  menu.value = false;
12497
12458
  }
12498
12459
  }
12499
- function onAfterEnter() {
12500
- if (props.eager) {
12501
- vVirtualScrollRef.value?.calculateVisibleItems();
12502
- }
12503
- }
12504
12460
  function onAfterLeave() {
12505
12461
  if (isFocused.value) {
12506
12462
  vTextFieldRef.value?.focus();
@@ -12579,7 +12535,6 @@
12579
12535
  "openOnClick": false,
12580
12536
  "closeOnContentClick": false,
12581
12537
  "transition": props.transition,
12582
- "onAfterEnter": onAfterEnter,
12583
12538
  "onAfterLeave": onAfterLeave
12584
12539
  }, computedMenuProps.value), {
12585
12540
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -12589,10 +12544,11 @@
12589
12544
  "onMousedown": e => e.preventDefault(),
12590
12545
  "onKeydown": onListKeydown,
12591
12546
  "onFocusin": onFocusin,
12547
+ "onScrollPassive": onListScroll,
12592
12548
  "tabindex": "-1",
12593
12549
  "aria-live": "polite",
12594
12550
  "color": props.itemColor ?? props.color
12595
- }, listEvents, props.listProps), {
12551
+ }, props.listProps), {
12596
12552
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
12597
12553
  "title": t(props.noDataText)
12598
12554
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -12887,7 +12843,7 @@
12887
12843
  const menu = vue.computed({
12888
12844
  get: () => _menu.value,
12889
12845
  set: v => {
12890
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
12846
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
12891
12847
  _menu.value = v;
12892
12848
  }
12893
12849
  });
@@ -12931,7 +12887,10 @@
12931
12887
  });
12932
12888
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
12933
12889
  const listRef = vue.ref();
12934
- const listEvents = useScrolling(listRef, vTextFieldRef);
12890
+ const {
12891
+ onListScroll,
12892
+ onListKeydown
12893
+ } = useScrolling(listRef, vTextFieldRef);
12935
12894
  function onClear(e) {
12936
12895
  if (props.openOnClear) {
12937
12896
  menu.value = true;
@@ -12950,11 +12909,6 @@
12950
12909
  }
12951
12910
  menu.value = !menu.value;
12952
12911
  }
12953
- function onListKeydown(e) {
12954
- if (checkPrintable(e)) {
12955
- vTextFieldRef.value?.focus();
12956
- }
12957
- }
12958
12912
  function onKeydown(e) {
12959
12913
  if (props.readonly || form?.isReadonly.value) return;
12960
12914
  const selectionStart = vTextFieldRef.value.selectionStart;
@@ -13019,11 +12973,6 @@
13019
12973
  }
13020
12974
  }
13021
12975
  }
13022
- function onAfterEnter() {
13023
- if (props.eager) {
13024
- vVirtualScrollRef.value?.calculateVisibleItems();
13025
- }
13026
- }
13027
12976
  function onAfterLeave() {
13028
12977
  if (isFocused.value) {
13029
12978
  isPristine.value = true;
@@ -13152,7 +13101,6 @@
13152
13101
  "openOnClick": false,
13153
13102
  "closeOnContentClick": false,
13154
13103
  "transition": props.transition,
13155
- "onAfterEnter": onAfterEnter,
13156
13104
  "onAfterLeave": onAfterLeave
13157
13105
  }, props.menuProps), {
13158
13106
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -13163,10 +13111,11 @@
13163
13111
  "onKeydown": onListKeydown,
13164
13112
  "onFocusin": onFocusin,
13165
13113
  "onFocusout": onFocusout,
13114
+ "onScrollPassive": onListScroll,
13166
13115
  "tabindex": "-1",
13167
13116
  "aria-live": "polite",
13168
13117
  "color": props.itemColor ?? props.color
13169
- }, listEvents, props.listProps), {
13118
+ }, props.listProps), {
13170
13119
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
13171
13120
  "title": t(props.noDataText)
13172
13121
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -16727,7 +16676,7 @@
16727
16676
  const menu = vue.computed({
16728
16677
  get: () => _menu.value,
16729
16678
  set: v => {
16730
- if (_menu.value && !v && vMenuRef.value?.ΨopenChildren.size) return;
16679
+ if (_menu.value && !v && vMenuRef.value?.ΨopenChildren) return;
16731
16680
  _menu.value = v;
16732
16681
  }
16733
16682
  });
@@ -16810,7 +16759,10 @@
16810
16759
  });
16811
16760
  const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
16812
16761
  const listRef = vue.ref();
16813
- const listEvents = useScrolling(listRef, vTextFieldRef);
16762
+ const {
16763
+ onListScroll,
16764
+ onListKeydown
16765
+ } = useScrolling(listRef, vTextFieldRef);
16814
16766
  function onClear(e) {
16815
16767
  cleared = true;
16816
16768
  if (props.openOnClear) {
@@ -16829,11 +16781,6 @@
16829
16781
  }
16830
16782
  menu.value = !menu.value;
16831
16783
  }
16832
- function onListKeydown(e) {
16833
- if (checkPrintable(e)) {
16834
- vTextFieldRef.value?.focus();
16835
- }
16836
- }
16837
16784
  // eslint-disable-next-line complexity
16838
16785
  function onKeydown(e) {
16839
16786
  if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
@@ -16898,11 +16845,6 @@
16898
16845
  }
16899
16846
  }
16900
16847
  }
16901
- function onAfterEnter() {
16902
- if (props.eager) {
16903
- vVirtualScrollRef.value?.calculateVisibleItems();
16904
- }
16905
- }
16906
16848
  function onAfterLeave() {
16907
16849
  if (isFocused.value) {
16908
16850
  isPristine.value = true;
@@ -17027,7 +16969,6 @@
17027
16969
  "openOnClick": false,
17028
16970
  "closeOnContentClick": false,
17029
16971
  "transition": props.transition,
17030
- "onAfterEnter": onAfterEnter,
17031
16972
  "onAfterLeave": onAfterLeave
17032
16973
  }, props.menuProps), {
17033
16974
  default: () => [hasList && vue.createVNode(VList, vue.mergeProps({
@@ -17038,10 +16979,11 @@
17038
16979
  "onKeydown": onListKeydown,
17039
16980
  "onFocusin": onFocusin,
17040
16981
  "onFocusout": onFocusout,
16982
+ "onScrollPassive": onListScroll,
17041
16983
  "tabindex": "-1",
17042
16984
  "aria-live": "polite",
17043
16985
  "color": props.itemColor ?? props.color
17044
- }, listEvents, props.listProps), {
16986
+ }, props.listProps), {
17045
16987
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
17046
16988
  "title": t(props.noDataText)
17047
16989
  }, null)), vue.createVNode(VVirtualScroll, {
@@ -18305,7 +18247,7 @@
18305
18247
  if (deepEqual(oldOptions, options.value)) return;
18306
18248
 
18307
18249
  // Reset page when searching
18308
- if (oldOptions && oldOptions.search !== options.value.search) {
18250
+ if (oldOptions?.search != null && oldOptions.search !== options.value.search) {
18309
18251
  page.value = 1;
18310
18252
  }
18311
18253
  vm.emit('update:options', options.value);
@@ -20985,7 +20927,6 @@
20985
20927
  default: false
20986
20928
  },
20987
20929
  ...makeComponentProps(),
20988
- ...makeDimensionProps(),
20989
20930
  ...makeTagProps()
20990
20931
  }, 'VContainer');
20991
20932
  const VContainer = genericComponent()({
@@ -20998,14 +20939,11 @@
20998
20939
  const {
20999
20940
  rtlClasses
21000
20941
  } = useRtl();
21001
- const {
21002
- dimensionStyles
21003
- } = useDimension(props);
21004
20942
  useRender(() => vue.createVNode(props.tag, {
21005
20943
  "class": ['v-container', {
21006
20944
  'v-container--fluid': props.fluid
21007
20945
  }, rtlClasses.value, props.class],
21008
- "style": [dimensionStyles.value, props.style]
20946
+ "style": props.style
21009
20947
  }, slots));
21010
20948
  return {};
21011
20949
  }
@@ -22427,8 +22365,7 @@
22427
22365
  default: false
22428
22366
  },
22429
22367
  readonly: Boolean,
22430
- ...makeComponentProps(),
22431
- ...makeDimensionProps()
22368
+ ...makeComponentProps()
22432
22369
  }, 'VExpansionPanelTitle');
22433
22370
  const VExpansionPanelTitle = genericComponent()({
22434
22371
  name: 'VExpansionPanelTitle',
@@ -22446,9 +22383,6 @@
22446
22383
  backgroundColorClasses,
22447
22384
  backgroundColorStyles
22448
22385
  } = useBackgroundColor(props, 'color');
22449
- const {
22450
- dimensionStyles
22451
- } = useDimension(props);
22452
22386
  const slotProps = vue.computed(() => ({
22453
22387
  collapseIcon: props.collapseIcon,
22454
22388
  disabled: expansionPanel.disabled.value,
@@ -22463,7 +22397,7 @@
22463
22397
  'v-expansion-panel-title--focusable': props.focusable,
22464
22398
  'v-expansion-panel-title--static': props.static
22465
22399
  }, backgroundColorClasses.value, props.class],
22466
- "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
22400
+ "style": [backgroundColorStyles.value, props.style],
22467
22401
  "type": "button",
22468
22402
  "tabindex": expansionPanel.disabled.value ? -1 : undefined,
22469
22403
  "disabled": expansionPanel.disabled.value,
@@ -22985,6 +22919,8 @@
22985
22919
  let {
22986
22920
  slots
22987
22921
  } = _ref;
22922
+ const layoutItemStyles = vue.ref();
22923
+ const layoutIsReady = vue.shallowRef();
22988
22924
  const {
22989
22925
  themeClasses
22990
22926
  } = provideTheme(props);
@@ -23009,17 +22945,20 @@
23009
22945
  autoHeight.value = entries[0].target.clientHeight;
23010
22946
  });
23011
22947
  const height = vue.computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10));
23012
- const {
23013
- layoutItemStyles,
23014
- layoutIsReady
23015
- } = useLayoutItem({
23016
- id: props.name,
23017
- order: vue.computed(() => parseInt(props.order, 10)),
23018
- position: vue.computed(() => 'bottom'),
23019
- layoutSize: height,
23020
- elementSize: vue.computed(() => props.height === 'auto' ? undefined : height.value),
23021
- active: vue.computed(() => props.app),
23022
- 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
+ });
23023
22962
  });
23024
22963
  useRender(() => vue.createVNode(props.tag, {
23025
22964
  "ref": resizeRef,
@@ -23028,7 +22967,7 @@
23028
22967
  height: convertToUnit(props.height)
23029
22968
  }, props.style]
23030
22969
  }, slots));
23031
- return props.app ? layoutIsReady : {};
22970
+ return props.app ? layoutIsReady.value : {};
23032
22971
  }
23033
22972
  });
23034
22973
 
@@ -25169,16 +25108,17 @@
25169
25108
  const items = vue.computed(() => genStructure(wrapInArray(props.type).join(',')));
25170
25109
  useRender(() => {
25171
25110
  const isLoading = !slots.default || props.loading;
25172
- 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({
25173
25117
  "class": ['v-skeleton-loader', {
25174
25118
  'v-skeleton-loader--boilerplate': props.boilerplate
25175
25119
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
25176
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
25177
- "aria-busy": !props.boilerplate ? isLoading : undefined,
25178
- "aria-live": !props.boilerplate ? 'polite' : undefined,
25179
- "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
25180
- "role": !props.boilerplate ? 'alert' : undefined
25181
- }, [isLoading ? items.value : slots.default?.()]);
25120
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}]
25121
+ }, loadingProps), [isLoading ? items.value : slots.default?.()]);
25182
25122
  });
25183
25123
  return {};
25184
25124
  }
@@ -25211,14 +25151,14 @@
25211
25151
  // Types
25212
25152
 
25213
25153
  function useCountdown(milliseconds) {
25214
- const time = vue.shallowRef(milliseconds);
25154
+ const time = vue.shallowRef(milliseconds());
25215
25155
  let timer = -1;
25216
25156
  function clear() {
25217
25157
  clearInterval(timer);
25218
25158
  }
25219
25159
  function reset() {
25220
25160
  clear();
25221
- vue.nextTick(() => time.value = milliseconds);
25161
+ vue.nextTick(() => time.value = milliseconds());
25222
25162
  }
25223
25163
  function start(el) {
25224
25164
  const style = el ? getComputedStyle(el) : {
@@ -25230,7 +25170,7 @@
25230
25170
  const startTime = performance.now();
25231
25171
  timer = window.setInterval(() => {
25232
25172
  const elapsed = performance.now() - startTime + interval;
25233
- time.value = Math.max(milliseconds - elapsed, 0);
25173
+ time.value = Math.max(milliseconds() - elapsed, 0);
25234
25174
  if (time.value <= 0) clear();
25235
25175
  }, interval);
25236
25176
  }
@@ -25290,7 +25230,7 @@
25290
25230
  const {
25291
25231
  roundedClasses
25292
25232
  } = useRounded(props);
25293
- const countdown = useCountdown(Number(props.timeout));
25233
+ const countdown = useCountdown(() => Number(props.timeout));
25294
25234
  const overlay = vue.ref();
25295
25235
  const timerRef = vue.ref();
25296
25236
  const isHovering = vue.shallowRef(false);
@@ -28110,19 +28050,23 @@
28110
28050
  },
28111
28051
  inset: Boolean,
28112
28052
  hideInput: Boolean,
28053
+ modelValue: {
28054
+ type: Number,
28055
+ default: null
28056
+ },
28113
28057
  min: {
28114
28058
  type: Number,
28115
- default: -Infinity
28059
+ default: Number.MIN_SAFE_INTEGER
28116
28060
  },
28117
28061
  max: {
28118
28062
  type: Number,
28119
- default: Infinity
28063
+ default: Number.MAX_SAFE_INTEGER
28120
28064
  },
28121
28065
  step: {
28122
28066
  type: Number,
28123
28067
  default: 1
28124
28068
  },
28125
- ...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon'])
28069
+ ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon'])
28126
28070
  }, 'VNumberInput');
28127
28071
  const VNumberInput = genericComponent()({
28128
28072
  name: 'VNumberInput',
@@ -28134,30 +28078,27 @@
28134
28078
  },
28135
28079
  setup(props, _ref) {
28136
28080
  let {
28137
- attrs,
28138
- emit,
28139
28081
  slots
28140
28082
  } = _ref;
28141
- 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();
28142
28091
  const stepDecimals = vue.computed(() => getDecimals(props.step));
28143
- const modelDecimals = vue.computed(() => model.value != null ? getDecimals(model.value) : 0);
28092
+ const modelDecimals = vue.computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0);
28144
28093
  const form = useForm();
28145
28094
  const controlsDisabled = vue.computed(() => props.disabled || props.readonly || form?.isReadonly.value);
28146
28095
  const canIncrease = vue.computed(() => {
28147
28096
  if (controlsDisabled.value) return false;
28148
- if (model.value == null) return true;
28149
- return model.value + props.step <= props.max;
28097
+ return (model.value ?? 0) + props.step <= props.max;
28150
28098
  });
28151
28099
  const canDecrease = vue.computed(() => {
28152
28100
  if (controlsDisabled.value) return false;
28153
- if (model.value == null) return true;
28154
- return model.value - props.step >= props.min;
28155
- });
28156
- vue.watchEffect(() => {
28157
- if (controlsDisabled.value) return;
28158
- if (model.value != null && (model.value < props.min || model.value > props.max)) {
28159
- model.value = clamp(model.value, props.min, props.max);
28160
- }
28101
+ return (model.value ?? 0) - props.step >= props.min;
28161
28102
  });
28162
28103
  const controlVariant = vue.computed(() => {
28163
28104
  return props.hideInput ? 'stacked' : props.controlVariant;
@@ -28172,11 +28113,16 @@
28172
28113
  const decrementSlotProps = vue.computed(() => ({
28173
28114
  click: onClickDown
28174
28115
  }));
28116
+ vue.onMounted(() => {
28117
+ if (!props.readonly && !props.disabled) {
28118
+ clampModel();
28119
+ }
28120
+ });
28175
28121
  function toggleUpDown() {
28176
28122
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
28177
28123
  if (controlsDisabled.value) return;
28178
28124
  if (model.value == null) {
28179
- model.value = 0;
28125
+ model.value = clamp(0, props.min, props.max);
28180
28126
  return;
28181
28127
  }
28182
28128
  const decimals = Math.max(modelDecimals.value, stepDecimals.value);
@@ -28194,30 +28140,45 @@
28194
28140
  e.stopPropagation();
28195
28141
  toggleUpDown(false);
28196
28142
  }
28197
- function onKeydown(e) {
28198
- if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
28199
- 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)) {
28200
28153
  e.preventDefault();
28201
- toggleUpDown(false);
28202
- return;
28203
28154
  }
28204
- if (['ArrowUp'].includes(e.key)) {
28205
- e.preventDefault();
28206
- toggleUpDown();
28207
- return;
28208
- }
28209
-
28210
- // Only numbers, +, - & . are allowed
28211
- 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)) {
28212
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
+ }
28213
28168
  }
28214
28169
  }
28215
- function onModelUpdate(v) {
28216
- model.value = v ? +v : undefined;
28217
- }
28218
28170
  function onControlMousedown(e) {
28219
28171
  e.stopPropagation();
28220
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
+ }
28221
28182
  useRender(() => {
28222
28183
  const {
28223
28184
  modelValue: _,
@@ -28302,8 +28263,11 @@
28302
28263
  }, null)]) : props.reverse ? vue.createVNode(vue.Fragment, null, [controlNode(), dividerNode()]) : undefined;
28303
28264
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
28304
28265
  return vue.createVNode(VTextField, vue.mergeProps({
28266
+ "ref": vTextFieldRef,
28305
28267
  "modelValue": model.value,
28306
- "onUpdate:modelValue": onModelUpdate,
28268
+ "onUpdate:modelValue": $event => model.value = $event,
28269
+ "onBeforeinput": onBeforeinput,
28270
+ "onChange": clampModel,
28307
28271
  "onKeydown": onKeydown,
28308
28272
  "class": ['v-number-input', {
28309
28273
  'v-number-input--default': controlVariant.value === 'default',
@@ -29500,7 +29464,6 @@
29500
29464
 
29501
29465
  const makeVTreeviewItemProps = propsFactory({
29502
29466
  loading: Boolean,
29503
- onToggleExpand: EventProp(),
29504
29467
  toggleIcon: IconValue,
29505
29468
  ...makeVListItemProps({
29506
29469
  slim: true
@@ -29521,12 +29484,24 @@
29521
29484
  const {
29522
29485
  activate,
29523
29486
  isActivated,
29487
+ select,
29488
+ isSelected,
29489
+ isIndeterminate,
29524
29490
  isGroupActivator,
29525
29491
  root,
29526
29492
  id
29527
29493
  } = useNestedItem(rawId, false);
29528
29494
  const isActivatableGroupActivator = vue.computed(() => root.activatable.value && isGroupActivator);
29529
- 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));
29530
29505
  function activateItem(e) {
29531
29506
  if (!isClickable.value || !isActivatableGroupActivator.value && isGroupActivator) return;
29532
29507
  if (root.activatable.value) {
@@ -29537,20 +29512,68 @@
29537
29512
  }
29538
29513
  }
29539
29514
  }
29515
+ function onKeyDown(e) {
29516
+ if (e.key === 'Enter' || e.key === ' ') {
29517
+ e.preventDefault();
29518
+ activateItem(e);
29519
+ }
29520
+ }
29540
29521
  const visibleIds = vue.inject(VTreeviewSymbol, {
29541
29522
  visibleIds: vue.ref()
29542
29523
  }).visibleIds;
29543
29524
  useRender(() => {
29544
- 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);
29545
29528
  const hasPrepend = slots.prepend || props.toggleIcon;
29546
- return vue.createVNode(VListItem, vue.mergeProps(listItemProps, {
29547
- "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, {
29548
29571
  "class": ['v-treeview-item', {
29549
- 'v-treeview-item--activatable-group-activator': isActivatableGroupActivator.value,
29550
29572
  'v-treeview-item--filtered': visibleIds.value && !visibleIds.value.has(id.value)
29551
29573
  }, props.class],
29552
- "ripple": false,
29553
- "onClick": props.onClick ?? activateItem
29574
+ "value": id.value,
29575
+ "onClick": activateItem,
29576
+ "onKeydown": isClickable.value && onKeyDown
29554
29577
  }), {
29555
29578
  ...slots,
29556
29579
  prepend: hasPrepend ? slotProps => {
@@ -29561,8 +29584,7 @@
29561
29584
  "density": "compact",
29562
29585
  "icon": props.toggleIcon,
29563
29586
  "loading": props.loading,
29564
- "variant": "text",
29565
- "onClick": props.onToggleExpand
29587
+ "variant": "text"
29566
29588
  }, {
29567
29589
  loader() {
29568
29590
  return vue.createVNode(VProgressCircular, {
@@ -29589,19 +29611,7 @@
29589
29611
  default: '$loading'
29590
29612
  },
29591
29613
  items: Array,
29592
- openOnClick: {
29593
- type: Boolean,
29594
- default: undefined
29595
- },
29596
- indeterminateIcon: {
29597
- type: IconValue,
29598
- default: '$checkboxIndeterminate'
29599
- },
29600
- falseIcon: IconValue,
29601
- trueIcon: IconValue,
29602
- returnObject: Boolean,
29603
29614
  selectable: Boolean,
29604
- selectedColor: String,
29605
29615
  selectStrategy: [String, Function, Object]
29606
29616
  }, 'VTreeviewChildren');
29607
29617
  const VTreeviewChildren = genericComponent()({
@@ -29613,7 +29623,6 @@
29613
29623
  slots
29614
29624
  } = _ref;
29615
29625
  const isLoading = vue.shallowRef(null);
29616
- const isClickOnOpen = vue.computed(() => props.openOnClick != null ? props.openOnClick : props.selectable);
29617
29626
  function checkChildren(item) {
29618
29627
  return new Promise(resolve => {
29619
29628
  if (!props.items?.length || !props.loadChildren) return resolve();
@@ -29644,11 +29653,7 @@
29644
29653
  "key": item.value,
29645
29654
  "modelValue": slotProps.isSelected,
29646
29655
  "loading": loading,
29647
- "color": props.selectedColor,
29648
29656
  "indeterminate": slotProps.isIndeterminate,
29649
- "indeterminateIcon": props.indeterminateIcon,
29650
- "falseIcon": props.falseIcon,
29651
- "trueIcon": props.trueIcon,
29652
29657
  "onClick": vue.withModifiers(() => selectItem(slotProps.select, slotProps.isSelected), ['stop']),
29653
29658
  "onKeydown": e => {
29654
29659
  if (!['Enter', 'Space'].includes(e.key)) return;
@@ -29670,9 +29675,9 @@
29670
29675
  };
29671
29676
  const treeviewGroupProps = VTreeviewGroup.filterProps(itemProps);
29672
29677
  const treeviewChildrenProps = VTreeviewChildren.filterProps(props);
29673
- return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps(treeviewGroupProps, {
29674
- "value": props.returnObject ? item : treeviewGroupProps?.value
29675
- }), {
29678
+ return children ? vue.createVNode(VTreeviewGroup, vue.mergeProps({
29679
+ "value": itemProps?.value
29680
+ }, treeviewGroupProps), {
29676
29681
  activator: _ref3 => {
29677
29682
  let {
29678
29683
  props: activatorProps
@@ -29680,24 +29685,19 @@
29680
29685
  const listItemProps = {
29681
29686
  ...itemProps,
29682
29687
  ...activatorProps,
29683
- value: itemProps?.value,
29684
- onToggleExpand: activatorProps.onClick,
29685
- onClick: isClickOnOpen.value ? [() => checkChildren(item), activatorProps.onClick] : undefined
29688
+ value: itemProps?.value
29686
29689
  };
29687
29690
  return vue.createVNode(VTreeviewItem, vue.mergeProps(listItemProps, {
29688
- "value": props.returnObject ? vue.toRaw(item) : itemProps.value,
29689
- "loading": loading
29691
+ "loading": loading,
29692
+ "onClick": () => checkChildren(item)
29690
29693
  }), slotsWithItem);
29691
29694
  },
29692
29695
  default: () => vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
29693
- "items": children,
29694
- "returnObject": props.returnObject
29696
+ "items": children
29695
29697
  }), slots)
29696
29698
  }) : slots.item?.({
29697
29699
  props: itemProps
29698
- }) ?? vue.createVNode(VTreeviewItem, vue.mergeProps(itemProps, {
29699
- "value": props.returnObject ? vue.toRaw(item) : itemProps.value
29700
- }), slotsWithItem);
29700
+ }) ?? vue.createVNode(VTreeviewItem, itemProps, slotsWithItem);
29701
29701
  });
29702
29702
  }
29703
29703
  });
@@ -29721,7 +29721,7 @@
29721
29721
  collapseIcon: '$treeviewCollapse',
29722
29722
  expandIcon: '$treeviewExpand',
29723
29723
  slim: true
29724
- }), ['nav', 'openStrategy'])
29724
+ }), ['nav'])
29725
29725
  }, 'VTreeview');
29726
29726
  const VTreeview = genericComponent()({
29727
29727
  name: 'VTreeview',
@@ -29780,11 +29780,11 @@
29780
29780
  }
29781
29781
  return arr;
29782
29782
  }
29783
- function openAll(items) {
29783
+ function openAll(item) {
29784
29784
  let ids = [];
29785
- for (const i of items) {
29785
+ for (const i of item) {
29786
29786
  if (!i.children) continue;
29787
- ids.push(props.returnObject ? vue.toRaw(i.raw) : i.value);
29787
+ ids.push(i.value);
29788
29788
  if (i.children) {
29789
29789
  ids = ids.concat(openAll(i.children));
29790
29790
  }
@@ -29820,7 +29820,6 @@
29820
29820
  "ref": vListRef
29821
29821
  }, listProps, {
29822
29822
  "class": ['v-treeview', props.class],
29823
- "open-strategy": "multiple",
29824
29823
  "style": props.style,
29825
29824
  "opened": opened.value,
29826
29825
  "activated": activated.value,
@@ -29829,7 +29828,6 @@
29829
29828
  "onUpdate:selected": $event => selected.value = $event
29830
29829
  }), {
29831
29830
  default: () => [vue.createVNode(VTreeviewChildren, vue.mergeProps(treeviewChildrenProps, {
29832
- "returnObject": props.returnObject,
29833
29831
  "items": items.value
29834
29832
  }), slots)]
29835
29833
  });
@@ -30335,7 +30333,7 @@
30335
30333
  goTo
30336
30334
  };
30337
30335
  }
30338
- const version$1 = "3.6.13-3.7.0-beta.0.0-pr-20092.a834b18";
30336
+ const version$1 = "3.6.13-pr-20185.5bf1ff4";
30339
30337
  createVuetify$1.version = version$1;
30340
30338
 
30341
30339
  // Vue's inject() can only be used in setup
@@ -30588,7 +30586,7 @@
30588
30586
 
30589
30587
  /* eslint-disable local-rules/sort-imports */
30590
30588
 
30591
- const version = "3.6.13-3.7.0-beta.0.0-pr-20092.a834b18";
30589
+ const version = "3.6.13-pr-20185.5bf1ff4";
30592
30590
 
30593
30591
  /* eslint-disable local-rules/sort-imports */
30594
30592