@vuetify/nightly 3.7.0-beta.1-dev.2024-07-30 → 3.7.0-beta.1-dev.2024-08-08

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 (123) hide show
  1. package/dist/json/attributes.json +13 -5
  2. package/dist/json/importMap-labs.json +18 -18
  3. package/dist/json/importMap.json +160 -160
  4. package/dist/json/tags.json +2 -0
  5. package/dist/json/web-types.json +45 -13
  6. package/dist/vuetify-labs.css +3716 -2993
  7. package/dist/vuetify-labs.d.ts +50 -11
  8. package/dist/vuetify-labs.esm.js +113 -69
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +113 -69
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +1406 -683
  13. package/dist/vuetify.d.ts +60 -60
  14. package/dist/vuetify.esm.js +35 -29
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +35 -29
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +13 -12
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAlert/VAlert.css +5 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.css +4 -0
  23. package/lib/components/VAvatar/VAvatar.css +8 -4
  24. package/lib/components/VAvatar/VAvatar.mjs +1 -1
  25. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  26. package/lib/components/VBadge/VBadge.css +2 -0
  27. package/lib/components/VBanner/VBanner.css +12 -4
  28. package/lib/components/VBottomNavigation/VBottomNavigation.css +11 -3
  29. package/lib/components/VBottomSheet/VBottomSheet.css +2 -0
  30. package/lib/components/VBtn/VBtn.css +16 -9
  31. package/lib/components/VBtn/VBtn.mjs +1 -1
  32. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  33. package/lib/components/VBtn/VBtn.sass +4 -4
  34. package/lib/components/VBtnGroup/VBtnGroup.css +12 -4
  35. package/lib/components/VCard/VCard.css +9 -1
  36. package/lib/components/VCarousel/VCarousel.css +2 -0
  37. package/lib/components/VChip/VChip.css +15 -9
  38. package/lib/components/VChip/VChip.sass +1 -1
  39. package/lib/components/VColorPicker/VColorPicker.css +2 -0
  40. package/lib/components/VColorPicker/VColorPicker.sass +4 -4
  41. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -4
  42. package/lib/components/VCombobox/VCombobox.css +4 -0
  43. package/lib/components/VDialog/VDialog.css +5 -0
  44. package/lib/components/VDivider/VDivider.css +2 -0
  45. package/lib/components/VExpansionPanel/VExpansionPanel.css +11 -5
  46. package/lib/components/VExpansionPanel/VExpansionPanel.sass +3 -3
  47. package/lib/components/VField/VField.css +13 -1
  48. package/lib/components/VField/VField.sass +5 -8
  49. package/lib/components/VFooter/VFooter.css +12 -4
  50. package/lib/components/VFooter/VFooter.mjs +20 -14
  51. package/lib/components/VFooter/VFooter.mjs.map +1 -1
  52. package/lib/components/VFooter/index.d.mts +3 -3
  53. package/lib/components/VGrid/VGrid.sass +1 -1
  54. package/lib/components/VGrid/_mixins.sass +4 -4
  55. package/lib/components/VImg/VImg.css +6 -0
  56. package/lib/components/VKbd/VKbd.css +2 -0
  57. package/lib/components/VList/VList.css +12 -4
  58. package/lib/components/VList/VListItem.css +21 -11
  59. package/lib/components/VList/VListItem.sass +1 -1
  60. package/lib/components/VMain/VMain.css +2 -0
  61. package/lib/components/VMenu/VMenu.css +6 -0
  62. package/lib/components/VMenu/VMenu.mjs +1 -1
  63. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  64. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +9 -3
  65. package/lib/components/VOtpInput/VOtpInput.css +3 -1
  66. package/lib/components/VOtpInput/VOtpInput.sass +1 -2
  67. package/lib/components/VOverflowBtn/VOverflowBtn.sass +1 -1
  68. package/lib/components/VSelect/VSelect.css +4 -0
  69. package/lib/components/VSelectionControl/VSelectionControl.css +6 -4
  70. package/lib/components/VSelectionControl/VSelectionControl.sass +1 -1
  71. package/lib/components/VSheet/VSheet.css +12 -4
  72. package/lib/components/VSkeletonLoader/VSkeletonLoader.css +6 -4
  73. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs +9 -8
  74. package/lib/components/VSkeletonLoader/VSkeletonLoader.mjs.map +1 -1
  75. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -2
  76. package/lib/components/VSlider/VSliderThumb.sass +2 -2
  77. package/lib/components/VSnackbar/VSnackbar.css +2 -0
  78. package/lib/components/VSnackbar/VSnackbar.mjs +4 -4
  79. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  80. package/lib/components/VStepper/VStepper.css +8 -2
  81. package/lib/components/VStepper/VStepper.sass +2 -4
  82. package/lib/components/VStepper/VStepperItem.css +4 -1
  83. package/lib/components/VStepper/VStepperItem.sass +1 -1
  84. package/lib/components/VSwitch/VSwitch.css +2 -0
  85. package/lib/components/VSwitch/VSwitch.sass +10 -10
  86. package/lib/components/VSystemBar/VSystemBar.css +14 -8
  87. package/lib/components/VTable/VTable.css +8 -4
  88. package/lib/components/VTable/VTable.sass +2 -3
  89. package/lib/components/VTimeline/VTimeline.css +2 -0
  90. package/lib/components/VToolbar/VToolbar.css +21 -7
  91. package/lib/components/VToolbar/VToolbar.sass +1 -2
  92. package/lib/components/VTreeview/VTreeview.sass +9 -9
  93. package/lib/components/index.d.mts +3 -3
  94. package/lib/entry-bundler.mjs +1 -1
  95. package/lib/framework.mjs +1 -1
  96. package/lib/index.d.mts +57 -57
  97. package/lib/labs/VNumberInput/VNumberInput.mjs +60 -36
  98. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  99. package/lib/labs/VNumberInput/index.d.mts +17 -8
  100. package/lib/labs/VPicker/VPicker.css +6 -2
  101. package/lib/labs/VPicker/VPicker.sass +2 -3
  102. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs +4 -3
  103. package/lib/labs/VPullToRefresh/VPullToRefresh.mjs.map +1 -1
  104. package/lib/labs/VPullToRefresh/index.d.mts +9 -0
  105. package/lib/labs/VTreeview/VTreeview.mjs +15 -2
  106. package/lib/labs/VTreeview/VTreeview.mjs.map +1 -1
  107. package/lib/labs/VTreeview/index.d.mts +21 -0
  108. package/lib/labs/components.d.mts +47 -8
  109. package/lib/styles/generic/_colors.scss +9 -3
  110. package/lib/styles/main.css +520 -0
  111. package/lib/styles/tools/_absolute.sass +8 -7
  112. package/lib/styles/tools/_border.sass +4 -3
  113. package/lib/styles/tools/_display.sass +8 -7
  114. package/lib/styles/tools/_elevation.sass +4 -2
  115. package/lib/styles/tools/_index.sass +0 -1
  116. package/lib/styles/tools/_radius.sass +6 -5
  117. package/lib/styles/tools/_rounded.sass +2 -1
  118. package/lib/styles/tools/_theme.sass +3 -2
  119. package/lib/styles/tools/_typography.sass +6 -5
  120. package/lib/styles/tools/_utilities.sass +5 -5
  121. package/lib/styles/utilities/_index.sass +7 -7
  122. package/package.json +1 -1
  123. package/lib/styles/tools/_sheet.sass +0 -14
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.0-beta.1-dev.2024-07-30
2
+ * Vuetify v3.7.0-beta.1-dev.2024-08-08
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -5716,7 +5716,7 @@ const VBtn = genericComponent()({
5716
5716
  "indeterminate": true,
5717
5717
  "width": "2"
5718
5718
  }, null)])]
5719
- }), [[Ripple, !isDisabled.value && !!props.ripple, '', {
5719
+ }), [[Ripple, !isDisabled.value && props.ripple, '', {
5720
5720
  center: !!props.icon
5721
5721
  }]]);
5722
5722
  });
@@ -6014,7 +6014,7 @@ const VAvatar = genericComponent()({
6014
6014
  "defaults": {
6015
6015
  VImg: {
6016
6016
  cover: true,
6017
- image: props.image
6017
+ src: props.image
6018
6018
  },
6019
6019
  VIcon: {
6020
6020
  icon: props.icon
@@ -11156,7 +11156,7 @@ const VMenu = genericComponent()({
11156
11156
  },
11157
11157
  closeParents(e) {
11158
11158
  setTimeout(() => {
11159
- if (!openChildren.value.size && !props.persistent && (e == null || e && !isClickInsideElement(e, overlay.value.contentEl))) {
11159
+ if (!openChildren.value.size && !props.persistent && (e == null || overlay.value?.contentEl && !isClickInsideElement(e, overlay.value.contentEl))) {
11160
11160
  isActive.value = false;
11161
11161
  parent?.closeParents();
11162
11162
  }
@@ -22975,6 +22975,8 @@ const VFooter = genericComponent()({
22975
22975
  let {
22976
22976
  slots
22977
22977
  } = _ref;
22978
+ const layoutItemStyles = ref();
22979
+ const layoutIsReady = shallowRef();
22978
22980
  const {
22979
22981
  themeClasses
22980
22982
  } = provideTheme(props);
@@ -22999,17 +23001,20 @@ const VFooter = genericComponent()({
22999
23001
  autoHeight.value = entries[0].target.clientHeight;
23000
23002
  });
23001
23003
  const height = computed(() => props.height === 'auto' ? autoHeight.value : parseInt(props.height, 10));
23002
- const {
23003
- layoutItemStyles,
23004
- layoutIsReady
23005
- } = useLayoutItem({
23006
- id: props.name,
23007
- order: computed(() => parseInt(props.order, 10)),
23008
- position: computed(() => 'bottom'),
23009
- layoutSize: height,
23010
- elementSize: computed(() => props.height === 'auto' ? undefined : height.value),
23011
- active: computed(() => props.app),
23012
- absolute: toRef(props, 'absolute')
23004
+ useToggleScope(() => props.app, () => {
23005
+ const layout = useLayoutItem({
23006
+ id: props.name,
23007
+ order: computed(() => parseInt(props.order, 10)),
23008
+ position: computed(() => 'bottom'),
23009
+ layoutSize: height,
23010
+ elementSize: computed(() => props.height === 'auto' ? undefined : height.value),
23011
+ active: computed(() => props.app),
23012
+ absolute: toRef(props, 'absolute')
23013
+ });
23014
+ watchEffect(() => {
23015
+ layoutItemStyles.value = layout.layoutItemStyles.value;
23016
+ layoutIsReady.value = layout.layoutIsReady;
23017
+ });
23013
23018
  });
23014
23019
  useRender(() => createVNode(props.tag, {
23015
23020
  "ref": resizeRef,
@@ -23018,7 +23023,7 @@ const VFooter = genericComponent()({
23018
23023
  height: convertToUnit(props.height)
23019
23024
  }, props.style]
23020
23025
  }, slots));
23021
- return props.app ? layoutIsReady : {};
23026
+ return props.app ? layoutIsReady.value : {};
23022
23027
  }
23023
23028
  });
23024
23029
 
@@ -25159,16 +25164,17 @@ const VSkeletonLoader = genericComponent()({
25159
25164
  const items = computed(() => genStructure(wrapInArray(props.type).join(',')));
25160
25165
  useRender(() => {
25161
25166
  const isLoading = !slots.default || props.loading;
25162
- return createVNode("div", {
25167
+ const loadingProps = props.boilerplate || !isLoading ? {} : {
25168
+ ariaLive: 'polite',
25169
+ ariaLabel: t(props.loadingText),
25170
+ role: 'alert'
25171
+ };
25172
+ return createVNode("div", mergeProps({
25163
25173
  "class": ['v-skeleton-loader', {
25164
25174
  'v-skeleton-loader--boilerplate': props.boilerplate
25165
25175
  }, themeClasses.value, backgroundColorClasses.value, elevationClasses.value],
25166
- "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}],
25167
- "aria-busy": !props.boilerplate ? isLoading : undefined,
25168
- "aria-live": !props.boilerplate ? 'polite' : undefined,
25169
- "aria-label": !props.boilerplate ? t(props.loadingText) : undefined,
25170
- "role": !props.boilerplate ? 'alert' : undefined
25171
- }, [isLoading ? items.value : slots.default?.()]);
25176
+ "style": [backgroundColorStyles.value, isLoading ? dimensionStyles.value : {}]
25177
+ }, loadingProps), [isLoading ? items.value : slots.default?.()]);
25172
25178
  });
25173
25179
  return {};
25174
25180
  }
@@ -25201,14 +25207,14 @@ const VSlideGroupItem = genericComponent()({
25201
25207
  // Types
25202
25208
 
25203
25209
  function useCountdown(milliseconds) {
25204
- const time = shallowRef(milliseconds);
25210
+ const time = shallowRef(milliseconds());
25205
25211
  let timer = -1;
25206
25212
  function clear() {
25207
25213
  clearInterval(timer);
25208
25214
  }
25209
25215
  function reset() {
25210
25216
  clear();
25211
- nextTick(() => time.value = milliseconds);
25217
+ nextTick(() => time.value = milliseconds());
25212
25218
  }
25213
25219
  function start(el) {
25214
25220
  const style = el ? getComputedStyle(el) : {
@@ -25220,7 +25226,7 @@ function useCountdown(milliseconds) {
25220
25226
  const startTime = performance.now();
25221
25227
  timer = window.setInterval(() => {
25222
25228
  const elapsed = performance.now() - startTime + interval;
25223
- time.value = Math.max(milliseconds - elapsed, 0);
25229
+ time.value = Math.max(milliseconds() - elapsed, 0);
25224
25230
  if (time.value <= 0) clear();
25225
25231
  }, interval);
25226
25232
  }
@@ -25280,7 +25286,7 @@ const VSnackbar = genericComponent()({
25280
25286
  const {
25281
25287
  roundedClasses
25282
25288
  } = useRounded(props);
25283
- const countdown = useCountdown(Number(props.timeout));
25289
+ const countdown = useCountdown(() => Number(props.timeout));
25284
25290
  const overlay = ref();
25285
25291
  const timerRef = ref();
25286
25292
  const isHovering = shallowRef(false);
@@ -28100,19 +28106,23 @@ const makeVNumberInputProps = propsFactory({
28100
28106
  },
28101
28107
  inset: Boolean,
28102
28108
  hideInput: Boolean,
28109
+ modelValue: {
28110
+ type: Number,
28111
+ default: null
28112
+ },
28103
28113
  min: {
28104
28114
  type: Number,
28105
- default: -Infinity
28115
+ default: Number.MIN_SAFE_INTEGER
28106
28116
  },
28107
28117
  max: {
28108
28118
  type: Number,
28109
- default: Infinity
28119
+ default: Number.MAX_SAFE_INTEGER
28110
28120
  },
28111
28121
  step: {
28112
28122
  type: Number,
28113
28123
  default: 1
28114
28124
  },
28115
- ...omit(makeVTextFieldProps(), ['appendInnerIcon', 'prependInnerIcon'])
28125
+ ...omit(makeVTextFieldProps({}), ['appendInnerIcon', 'modelValue', 'prependInnerIcon'])
28116
28126
  }, 'VNumberInput');
28117
28127
  const VNumberInput = genericComponent()({
28118
28128
  name: 'VNumberInput',
@@ -28124,30 +28134,27 @@ const VNumberInput = genericComponent()({
28124
28134
  },
28125
28135
  setup(props, _ref) {
28126
28136
  let {
28127
- attrs,
28128
- emit,
28129
28137
  slots
28130
28138
  } = _ref;
28131
- const model = useProxiedModel(props, 'modelValue');
28139
+ const _model = useProxiedModel(props, 'modelValue');
28140
+ const model = computed({
28141
+ get: () => _model.value,
28142
+ set(val) {
28143
+ if (typeof val !== 'string') _model.value = val;
28144
+ }
28145
+ });
28146
+ const vTextFieldRef = ref();
28132
28147
  const stepDecimals = computed(() => getDecimals(props.step));
28133
- const modelDecimals = computed(() => model.value != null ? getDecimals(model.value) : 0);
28148
+ const modelDecimals = computed(() => typeof model.value === 'number' ? getDecimals(model.value) : 0);
28134
28149
  const form = useForm();
28135
28150
  const controlsDisabled = computed(() => props.disabled || props.readonly || form?.isReadonly.value);
28136
28151
  const canIncrease = computed(() => {
28137
28152
  if (controlsDisabled.value) return false;
28138
- if (model.value == null) return true;
28139
- return model.value + props.step <= props.max;
28153
+ return (model.value ?? 0) + props.step <= props.max;
28140
28154
  });
28141
28155
  const canDecrease = computed(() => {
28142
28156
  if (controlsDisabled.value) return false;
28143
- if (model.value == null) return true;
28144
- return model.value - props.step >= props.min;
28145
- });
28146
- watchEffect(() => {
28147
- if (controlsDisabled.value) return;
28148
- if (model.value != null && (model.value < props.min || model.value > props.max)) {
28149
- model.value = clamp(model.value, props.min, props.max);
28150
- }
28157
+ return (model.value ?? 0) - props.step >= props.min;
28151
28158
  });
28152
28159
  const controlVariant = computed(() => {
28153
28160
  return props.hideInput ? 'stacked' : props.controlVariant;
@@ -28162,11 +28169,16 @@ const VNumberInput = genericComponent()({
28162
28169
  const decrementSlotProps = computed(() => ({
28163
28170
  click: onClickDown
28164
28171
  }));
28172
+ onMounted(() => {
28173
+ if (!props.readonly && !props.disabled) {
28174
+ clampModel();
28175
+ }
28176
+ });
28165
28177
  function toggleUpDown() {
28166
28178
  let increment = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
28167
28179
  if (controlsDisabled.value) return;
28168
28180
  if (model.value == null) {
28169
- model.value = 0;
28181
+ model.value = clamp(0, props.min, props.max);
28170
28182
  return;
28171
28183
  }
28172
28184
  const decimals = Math.max(modelDecimals.value, stepDecimals.value);
@@ -28184,30 +28196,45 @@ const VNumberInput = genericComponent()({
28184
28196
  e.stopPropagation();
28185
28197
  toggleUpDown(false);
28186
28198
  }
28187
- function onKeydown(e) {
28188
- if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
28189
- if (['ArrowDown'].includes(e.key)) {
28190
- e.preventDefault();
28191
- toggleUpDown(false);
28192
- return;
28193
- }
28194
- if (['ArrowUp'].includes(e.key)) {
28199
+ function onBeforeinput(e) {
28200
+ if (!e.data) return;
28201
+ const existingTxt = e.target?.value;
28202
+ const selectionStart = e.target?.selectionStart;
28203
+ const selectionEnd = e.target?.selectionEnd;
28204
+ const potentialNewInputVal = existingTxt ? existingTxt.slice(0, selectionStart) + e.data + existingTxt.slice(selectionEnd) : e.data;
28205
+ // Only numbers, "-", "." are allowed
28206
+ // AND "-", "." are allowed only once
28207
+ // AND "-" is only allowed at the start
28208
+ if (!/^-?(\d+(\.\d*)?|(\.\d+)|\d*|\.)$/.test(potentialNewInputVal)) {
28195
28209
  e.preventDefault();
28196
- toggleUpDown();
28197
- return;
28198
28210
  }
28199
-
28200
- // Only numbers, +, - & . are allowed
28201
- if (!/^[0-9\-+.]+$/.test(e.key)) {
28211
+ }
28212
+ async function onKeydown(e) {
28213
+ if (['Enter', 'ArrowLeft', 'ArrowRight', 'Backspace', 'Delete', 'Tab'].includes(e.key) || e.ctrlKey) return;
28214
+ if (['ArrowDown', 'ArrowUp'].includes(e.key)) {
28202
28215
  e.preventDefault();
28216
+ clampModel();
28217
+ // _model is controlled, so need to wait until props['modelValue'] is updated
28218
+ await nextTick();
28219
+ if (e.key === 'ArrowDown') {
28220
+ toggleUpDown(false);
28221
+ } else {
28222
+ toggleUpDown();
28223
+ }
28203
28224
  }
28204
28225
  }
28205
- function onModelUpdate(v) {
28206
- model.value = v ? +v : undefined;
28207
- }
28208
28226
  function onControlMousedown(e) {
28209
28227
  e.stopPropagation();
28210
28228
  }
28229
+ function clampModel() {
28230
+ if (!vTextFieldRef.value) return;
28231
+ const inputText = vTextFieldRef.value.value;
28232
+ if (inputText && !isNaN(+inputText)) {
28233
+ model.value = clamp(+inputText, props.min, props.max);
28234
+ } else {
28235
+ model.value = null;
28236
+ }
28237
+ }
28211
28238
  useRender(() => {
28212
28239
  const {
28213
28240
  modelValue: _,
@@ -28292,8 +28319,11 @@ const VNumberInput = genericComponent()({
28292
28319
  }, null)]) : props.reverse ? createVNode(Fragment, null, [controlNode(), dividerNode()]) : undefined;
28293
28320
  const hasPrependInner = slots['prepend-inner'] || prependInnerControl;
28294
28321
  return createVNode(VTextField, mergeProps({
28322
+ "ref": vTextFieldRef,
28295
28323
  "modelValue": model.value,
28296
- "onUpdate:modelValue": onModelUpdate,
28324
+ "onUpdate:modelValue": $event => model.value = $event,
28325
+ "onBeforeinput": onBeforeinput,
28326
+ "onChange": clampModel,
28297
28327
  "onKeydown": onKeydown,
28298
28328
  "class": ['v-number-input', {
28299
28329
  'v-number-input--default': controlVariant.value === 'default',
@@ -28587,6 +28617,7 @@ const VStepperVertical = genericComponent()({
28587
28617
  const VPullToRefresh = genericComponent()({
28588
28618
  name: 'VPullToRefresh',
28589
28619
  props: {
28620
+ disabled: Boolean,
28590
28621
  pullDownThreshold: {
28591
28622
  type: Number,
28592
28623
  default: 64
@@ -28610,19 +28641,19 @@ const VPullToRefresh = genericComponent()({
28610
28641
  const canRefresh = computed(() => touchDiff.value >= props.pullDownThreshold && !refreshing.value);
28611
28642
  const topOffset = computed(() => clamp(touchDiff.value, 0, props.pullDownThreshold));
28612
28643
  function onTouchstart(e) {
28613
- if (refreshing.value) return;
28644
+ if (refreshing.value || props.disabled) return;
28614
28645
  touching.value = true;
28615
28646
  touchstartY = 'clientY' in e ? e.clientY : e.touches[0].clientY;
28616
28647
  }
28617
28648
  function onTouchmove(e) {
28618
- if (refreshing.value || !touching.value) return;
28649
+ if (refreshing.value || !touching.value || props.disabled) return;
28619
28650
  const touchY = 'clientY' in e ? e.clientY : e.touches[0].clientY;
28620
28651
  if (scrollParents.length && !scrollParents[0].scrollTop) {
28621
28652
  touchDiff.value = touchY - touchstartY;
28622
28653
  }
28623
28654
  }
28624
28655
  function onTouchend(e) {
28625
- if (refreshing.value) return;
28656
+ if (refreshing.value || props.disabled) return;
28626
28657
  touching.value = false;
28627
28658
  if (canRefresh.value) {
28628
28659
  function done() {
@@ -29711,7 +29742,11 @@ const makeVTreeviewProps = propsFactory({
29711
29742
  collapseIcon: '$treeviewCollapse',
29712
29743
  expandIcon: '$treeviewExpand',
29713
29744
  slim: true
29714
- }), ['nav', 'openStrategy'])
29745
+ }), ['nav', 'openStrategy']),
29746
+ modelValue: {
29747
+ type: Array,
29748
+ default: () => []
29749
+ }
29715
29750
  }, 'VTreeview');
29716
29751
  const VTreeview = genericComponent()({
29717
29752
  name: 'VTreeview',
@@ -29720,6 +29755,7 @@ const VTreeview = genericComponent()({
29720
29755
  'update:opened': val => true,
29721
29756
  'update:activated': val => true,
29722
29757
  'update:selected': val => true,
29758
+ 'update:modelValue': val => true,
29723
29759
  'click:open': value => true,
29724
29760
  'click:select': value => true
29725
29761
  },
@@ -29734,7 +29770,15 @@ const VTreeview = genericComponent()({
29734
29770
  const baseColor = toRef(props, 'baseColor');
29735
29771
  const color = toRef(props, 'color');
29736
29772
  const activated = useProxiedModel(props, 'activated');
29737
- const selected = useProxiedModel(props, 'selected');
29773
+ const model = useProxiedModel(props, 'modelValue');
29774
+ const _selected = useProxiedModel(props, 'selected', props.modelValue);
29775
+ const selected = computed({
29776
+ get: () => _selected.value,
29777
+ set(val) {
29778
+ _selected.value = val;
29779
+ model.value = val;
29780
+ }
29781
+ });
29738
29782
  const vListRef = ref();
29739
29783
  const opened = computed(() => props.openAll ? openAll(items.value) : props.opened);
29740
29784
  const flatItems = computed(() => flatten(items.value));
@@ -30325,7 +30369,7 @@ function createVuetify$1() {
30325
30369
  goTo
30326
30370
  };
30327
30371
  }
30328
- const version$1 = "3.7.0-beta.1-dev.2024-07-30";
30372
+ const version$1 = "3.7.0-beta.1-dev.2024-08-08";
30329
30373
  createVuetify$1.version = version$1;
30330
30374
 
30331
30375
  // Vue's inject() can only be used in setup
@@ -30578,7 +30622,7 @@ var index = /*#__PURE__*/Object.freeze({
30578
30622
 
30579
30623
  /* eslint-disable local-rules/sort-imports */
30580
30624
 
30581
- const version = "3.7.0-beta.1-dev.2024-07-30";
30625
+ const version = "3.7.0-beta.1-dev.2024-08-08";
30582
30626
 
30583
30627
  /* eslint-disable local-rules/sort-imports */
30584
30628