vuetify 3.2.1 → 3.2.2

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 (64) hide show
  1. package/dist/json/attributes.json +775 -639
  2. package/dist/json/importMap.json +16 -16
  3. package/dist/json/tags.json +35 -1
  4. package/dist/json/web-types.json +1657 -1327
  5. package/dist/vuetify-labs.css +131 -125
  6. package/dist/vuetify-labs.d.ts +419 -86
  7. package/dist/vuetify-labs.esm.js +100 -95
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +100 -95
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +53 -47
  12. package/dist/vuetify.d.ts +524 -191
  13. package/dist/vuetify.esm.js +95 -95
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +95 -95
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +46 -48
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAppBar/VAppBar.mjs +7 -11
  21. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  22. package/lib/components/VAppBar/VAppBarNavIcon.mjs +10 -16
  23. package/lib/components/VAppBar/VAppBarNavIcon.mjs.map +1 -1
  24. package/lib/components/VAppBar/index.d.ts +394 -28
  25. package/lib/components/VAutocomplete/VAutocomplete.css +1 -1
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs +10 -2
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  28. package/lib/components/VAutocomplete/VAutocomplete.sass +1 -1
  29. package/lib/components/VBtn/VBtn.mjs +7 -6
  30. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  31. package/lib/components/VCheckbox/VCheckboxBtn.mjs +0 -1
  32. package/lib/components/VCheckbox/VCheckboxBtn.mjs.map +1 -1
  33. package/lib/components/VCombobox/VCombobox.mjs +9 -2
  34. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  35. package/lib/components/VFileInput/VFileInput.mjs +2 -1
  36. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  37. package/lib/components/VIcon/VIcon.mjs +28 -29
  38. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  39. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -8
  40. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  41. package/lib/components/VSelect/VSelect.mjs +9 -2
  42. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  43. package/lib/components/VSheet/VSheet.css +6 -0
  44. package/lib/components/VSheet/_variables.scss +1 -1
  45. package/lib/components/VTextField/VTextField.mjs +1 -1
  46. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  47. package/lib/components/VTextarea/VTextarea.mjs +1 -1
  48. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  49. package/lib/components/VTreeview/_mixins.sass +0 -0
  50. package/lib/components/VTreeview/util/filterTreeItems.mjs +0 -0
  51. package/lib/components/index.d.ts +386 -53
  52. package/lib/composables/icons.mjs +2 -2
  53. package/lib/composables/icons.mjs.map +1 -1
  54. package/lib/composables/scroll.mjs +16 -17
  55. package/lib/composables/scroll.mjs.map +1 -1
  56. package/lib/entry-bundler.mjs +1 -1
  57. package/lib/framework.mjs +1 -1
  58. package/lib/framework.mjs.map +1 -1
  59. package/lib/index.d.ts +5 -5
  60. package/lib/labs/VDataTable/composables/paginate.mjs +6 -1
  61. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  62. package/lib/locale/el.mjs +0 -0
  63. package/lib/locale/index.mjs +0 -0
  64. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.2.1
2
+ * Vuetify v3.2.2
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -3340,14 +3340,13 @@ const makeScrollProps = propsFactory({
3340
3340
  type: String
3341
3341
  },
3342
3342
  scrollThreshold: {
3343
- type: [String, Number]
3343
+ type: [String, Number],
3344
+ default: 300
3344
3345
  }
3345
3346
  }, 'scroll');
3346
3347
  function useScroll(props) {
3347
3348
  let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3348
3349
  const {
3349
- thresholdMetCallback,
3350
- scrollThreshold,
3351
3350
  canScroll
3352
3351
  } = args;
3353
3352
  let previousScroll = 0;
@@ -3357,8 +3356,16 @@ function useScroll(props) {
3357
3356
  const currentThreshold = ref(0);
3358
3357
  const isScrollActive = ref(false);
3359
3358
  const isScrollingUp = ref(false);
3360
- const computedScrollThreshold = computed(() => {
3361
- return Number(props.scrollThreshold ?? scrollThreshold ?? 300);
3359
+ const scrollThreshold = computed(() => {
3360
+ return Number(props.scrollThreshold);
3361
+ });
3362
+
3363
+ /**
3364
+ * 1: at top
3365
+ * 0: at threshold
3366
+ */
3367
+ const scrollRatio = computed(() => {
3368
+ return clamp((scrollThreshold.value - currentScroll.value) / scrollThreshold.value || 0);
3362
3369
  });
3363
3370
  const onScroll = () => {
3364
3371
  const targetEl = target.value;
@@ -3366,7 +3373,7 @@ function useScroll(props) {
3366
3373
  previousScroll = currentScroll.value;
3367
3374
  currentScroll.value = 'window' in targetEl ? targetEl.pageYOffset : targetEl.scrollTop;
3368
3375
  isScrollingUp.value = currentScroll.value < previousScroll;
3369
- currentThreshold.value = Math.abs(currentScroll.value - computedScrollThreshold.value);
3376
+ currentThreshold.value = Math.abs(currentScroll.value - scrollThreshold.value);
3370
3377
  };
3371
3378
  watch(isScrollingUp, () => {
3372
3379
  savedScroll.value = savedScroll.value || currentScroll.value;
@@ -3394,15 +3401,6 @@ function useScroll(props) {
3394
3401
  onBeforeUnmount(() => {
3395
3402
  target.value?.removeEventListener('scroll', onScroll);
3396
3403
  });
3397
- thresholdMetCallback && watch(() => Math.abs(currentScroll.value - savedScroll.value) > computedScrollThreshold.value, thresholdMet => {
3398
- thresholdMet && thresholdMetCallback({
3399
- currentThreshold: currentThreshold.value,
3400
- isScrollingUp: isScrollingUp.value,
3401
- savedScroll
3402
- });
3403
- }, {
3404
- immediate: true
3405
- });
3406
3404
 
3407
3405
  // Do we need this? If yes - seems that
3408
3406
  // there's no need to expose onScroll
@@ -3410,10 +3408,11 @@ function useScroll(props) {
3410
3408
  immediate: true
3411
3409
  });
3412
3410
  return {
3413
- computedScrollThreshold,
3411
+ scrollThreshold,
3414
3412
  currentScroll,
3415
3413
  currentThreshold,
3416
3414
  isScrollActive,
3415
+ scrollRatio,
3417
3416
  // required only for testing
3418
3417
  // probably can be removed
3419
3418
  // later (2 chars chlng)
@@ -3496,15 +3495,14 @@ const VAppBar = genericComponent()({
3496
3495
  });
3497
3496
  const {
3498
3497
  currentScroll,
3499
- currentThreshold,
3500
- computedScrollThreshold,
3501
- isScrollingUp
3498
+ scrollThreshold,
3499
+ isScrollingUp,
3500
+ scrollRatio
3502
3501
  } = useScroll(props, {
3503
3502
  canScroll
3504
3503
  });
3505
- const isCollapsed = computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? currentScroll.value < 1 : currentScroll.value > 0));
3506
- const isFlat = computed(() => props.flat || scrollBehavior.value.elevate && currentScroll.value === (scrollBehavior.value.inverted ? 1 : 0));
3507
- const scrollRatio = computed(() => Math.min((currentThreshold.value - currentScroll.value) / currentThreshold.value || 1, 1));
3504
+ const isCollapsed = computed(() => props.collapse || scrollBehavior.value.collapse && (scrollBehavior.value.inverted ? scrollRatio.value > 0 : scrollRatio.value === 0));
3505
+ const isFlat = computed(() => props.flat || scrollBehavior.value.elevate && (scrollBehavior.value.inverted ? currentScroll.value > 0 : currentScroll.value === 0));
3508
3506
  const opacity = computed(() => scrollBehavior.value.fadeImage ? scrollBehavior.value.inverted ? 1 - scrollRatio.value : scrollRatio.value : undefined);
3509
3507
  const height = computed(() => {
3510
3508
  if (scrollBehavior.value.hide && scrollBehavior.value.inverted) return 0;
@@ -3513,15 +3511,12 @@ const VAppBar = genericComponent()({
3513
3511
  return height + extensionHeight;
3514
3512
  });
3515
3513
  function setActive() {
3516
- const val = currentScroll.value;
3517
3514
  if (scrollBehavior.value.hide) {
3518
3515
  if (scrollBehavior.value.inverted) {
3519
- isActive.value = val > computedScrollThreshold.value;
3516
+ isActive.value = currentScroll.value > scrollThreshold.value;
3520
3517
  } else {
3521
- isActive.value = isScrollingUp.value || val < computedScrollThreshold.value;
3518
+ isActive.value = isScrollingUp.value || currentScroll.value < scrollThreshold.value;
3522
3519
  }
3523
- } else if (scrollBehavior.value.inverted) {
3524
- isActive.value = currentScroll.value === 0;
3525
3520
  } else {
3526
3521
  isActive.value = true;
3527
3522
  }
@@ -4097,7 +4092,7 @@ const useIcon = props => {
4097
4092
  const icons = inject$1(IconSymbol);
4098
4093
  if (!icons) throw new Error('Missing Vuetify Icons provide!');
4099
4094
  const iconData = computed(() => {
4100
- const iconAlias = isRef(props) ? props.value : props.icon;
4095
+ const iconAlias = unref(props);
4101
4096
  if (!iconAlias) return {
4102
4097
  component: VComponentIcon
4103
4098
  };
@@ -4164,8 +4159,6 @@ function useSize(props) {
4164
4159
  });
4165
4160
  }
4166
4161
 
4167
- // Types
4168
-
4169
4162
  const makeVIconProps = propsFactory({
4170
4163
  color: String,
4171
4164
  start: Boolean,
@@ -4186,20 +4179,13 @@ const VIcon = genericComponent()({
4186
4179
  attrs,
4187
4180
  slots
4188
4181
  } = _ref;
4189
- let slotIcon;
4190
- if (slots.default) {
4191
- slotIcon = computed(() => {
4192
- const slot = slots.default?.();
4193
- if (!slot) return;
4194
- return slot.filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4195
- });
4196
- }
4182
+ const slotIcon = ref();
4197
4183
  const {
4198
4184
  themeClasses
4199
4185
  } = provideTheme(props);
4200
4186
  const {
4201
4187
  iconData
4202
- } = useIcon(slotIcon || props);
4188
+ } = useIcon(computed(() => slotIcon.value || props.icon));
4203
4189
  const {
4204
4190
  sizeClasses
4205
4191
  } = useSize(props);
@@ -4207,24 +4193,30 @@ const VIcon = genericComponent()({
4207
4193
  textColorClasses,
4208
4194
  textColorStyles
4209
4195
  } = useTextColor(toRef(props, 'color'));
4210
- useRender(() => createVNode(iconData.value.component, {
4211
- "tag": props.tag,
4212
- "icon": iconData.value.icon,
4213
- "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
4214
- 'v-icon--clickable': !!attrs.onClick,
4215
- 'v-icon--start': props.start,
4216
- 'v-icon--end': props.end
4217
- }, props.class],
4218
- "style": [!sizeClasses.value ? {
4219
- fontSize: convertToUnit(props.size),
4220
- height: convertToUnit(props.size),
4221
- width: convertToUnit(props.size)
4222
- } : undefined, textColorStyles.value, props.style],
4223
- "role": attrs.onClick ? 'button' : undefined,
4224
- "aria-hidden": !attrs.onClick
4225
- }, {
4226
- default: () => [slots.default?.()]
4227
- }));
4196
+ useRender(() => {
4197
+ const slotValue = slots.default?.();
4198
+ if (slotValue) {
4199
+ slotIcon.value = slotValue.filter(node => node.type === Text && node.children && typeof node.children === 'string')[0]?.children;
4200
+ }
4201
+ return createVNode(iconData.value.component, {
4202
+ "tag": props.tag,
4203
+ "icon": iconData.value.icon,
4204
+ "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
4205
+ 'v-icon--clickable': !!attrs.onClick,
4206
+ 'v-icon--start': props.start,
4207
+ 'v-icon--end': props.end
4208
+ }, props.class],
4209
+ "style": [!sizeClasses.value ? {
4210
+ fontSize: convertToUnit(props.size),
4211
+ height: convertToUnit(props.size),
4212
+ width: convertToUnit(props.size)
4213
+ } : undefined, textColorStyles.value, props.style],
4214
+ "role": attrs.onClick ? 'button' : undefined,
4215
+ "aria-hidden": !attrs.onClick
4216
+ }, {
4217
+ default: () => [slotValue]
4218
+ });
4219
+ });
4228
4220
  return {};
4229
4221
  }
4230
4222
  });
@@ -5061,7 +5053,7 @@ const makeVBtnProps = propsFactory({
5061
5053
  ...makeVariantProps({
5062
5054
  variant: 'elevated'
5063
5055
  })
5064
- }, 'VBtn');
5056
+ }, 'v-btn');
5065
5057
  const VBtn = genericComponent()({
5066
5058
  name: 'VBtn',
5067
5059
  directives: {
@@ -5131,6 +5123,11 @@ const VBtn = genericComponent()({
5131
5123
  if (props.value === undefined) return undefined;
5132
5124
  return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
5133
5125
  });
5126
+ function onClick(e) {
5127
+ if (isDisabled.value) return;
5128
+ link.navigate?.(e);
5129
+ group?.toggle();
5130
+ }
5134
5131
  useSelectLink(link, group?.select);
5135
5132
  useRender(() => {
5136
5133
  const Tag = link.isLink.value ? 'a' : props.tag;
@@ -5153,11 +5150,7 @@ const VBtn = genericComponent()({
5153
5150
  "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5154
5151
  "disabled": isDisabled.value || undefined,
5155
5152
  "href": link.href.value,
5156
- "onClick": e => {
5157
- if (isDisabled.value) return;
5158
- link.navigate?.(e);
5159
- group?.toggle();
5160
- },
5153
+ "onClick": onClick,
5161
5154
  "value": valueAttr.value
5162
5155
  }, {
5163
5156
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode("span", {
@@ -5223,22 +5216,17 @@ const VBtn = genericComponent()({
5223
5216
 
5224
5217
  const VAppBarNavIcon = genericComponent()({
5225
5218
  name: 'VAppBarNavIcon',
5226
- props: {
5227
- icon: {
5228
- type: IconValue,
5229
- default: '$menu'
5230
- },
5231
- ...makeComponentProps()
5232
- },
5219
+ props: makeVBtnProps({
5220
+ icon: '$menu',
5221
+ variant: 'text'
5222
+ }),
5233
5223
  setup(props, _ref) {
5234
5224
  let {
5235
5225
  slots
5236
5226
  } = _ref;
5237
- useRender(() => createVNode(VBtn, {
5238
- "class": ['v-app-bar-nav-icon', props.class],
5239
- "icon": props.icon,
5240
- "style": props.style
5241
- }, slots));
5227
+ useRender(() => createVNode(VBtn, mergeProps(props, {
5228
+ "class": ['v-app-bar-nav-icon']
5229
+ }), slots));
5242
5230
  return {};
5243
5231
  }
5244
5232
  });
@@ -6441,7 +6429,7 @@ const VTextField = genericComponent()({
6441
6429
  const vInputRef = ref();
6442
6430
  const vFieldRef = ref();
6443
6431
  const inputRef = ref();
6444
- const isActive = computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value);
6432
+ const isActive = computed(() => activeTypes.includes(props.type) || props.persistentPlaceholder || isFocused.value || props.active);
6445
6433
  function onFocus() {
6446
6434
  if (inputRef.value !== document.activeElement) {
6447
6435
  inputRef.value?.focus();
@@ -6877,7 +6865,6 @@ const VCheckboxBtn = genericComponent()({
6877
6865
  "class": ['v-checkbox-btn', props.class],
6878
6866
  "style": props.style,
6879
6867
  "type": "checkbox",
6880
- "inline": true,
6881
6868
  "falseIcon": falseIcon.value,
6882
6869
  "trueIcon": trueIcon.value,
6883
6870
  "aria-checked": props.indeterminate ? 'mixed' : undefined
@@ -10376,11 +10363,13 @@ const VSelect = genericComponent()({
10376
10363
  let {
10377
10364
  isSelected
10378
10365
  } = _ref2;
10379
- return props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
10366
+ return createVNode(Fragment, null, [props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
10380
10367
  "modelValue": isSelected,
10381
10368
  "ripple": false,
10382
10369
  "tabindex": "-1"
10383
- }, null) : undefined;
10370
+ }, null) : undefined, item.props.prependIcon && createVNode(VIcon, {
10371
+ "icon": item.props.prependIcon
10372
+ }, null)]);
10384
10373
  }
10385
10374
  });
10386
10375
  }), slots['append-item']?.()]
@@ -10393,6 +10382,10 @@ const VSelect = genericComponent()({
10393
10382
  }
10394
10383
  const slotProps = {
10395
10384
  'onClick:close': onChipClose,
10385
+ onMousedown(e) {
10386
+ e.preventDefault();
10387
+ e.stopPropagation();
10388
+ },
10396
10389
  modelValue: true,
10397
10390
  'onUpdate:modelValue': undefined
10398
10391
  };
@@ -10736,6 +10729,7 @@ const VAutocomplete = genericComponent()({
10736
10729
  isPristine.value = true;
10737
10730
  nextTick(() => isSelecting.value = false);
10738
10731
  } else {
10732
+ if (!props.multiple && !search.value) model.value = [];
10739
10733
  menu.value = false;
10740
10734
  search.value = '';
10741
10735
  }
@@ -10815,11 +10809,13 @@ const VAutocomplete = genericComponent()({
10815
10809
  let {
10816
10810
  isSelected
10817
10811
  } = _ref2;
10818
- return props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
10812
+ return createVNode(Fragment, null, [props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
10819
10813
  "modelValue": isSelected,
10820
10814
  "ripple": false,
10821
10815
  "tabindex": "-1"
10822
- }, null) : undefined;
10816
+ }, null) : undefined, item.props.prependIcon && createVNode(VIcon, {
10817
+ "icon": item.props.prependIcon
10818
+ }, null)]);
10823
10819
  },
10824
10820
  title: () => {
10825
10821
  return isPristine.value ? item.title : highlightResult$1(item.title, getMatches(item)?.title, search.value?.length ?? 0);
@@ -10834,6 +10830,10 @@ const VAutocomplete = genericComponent()({
10834
10830
  }
10835
10831
  const slotProps = {
10836
10832
  'onClick:close': onChipClose,
10833
+ onMousedown(e) {
10834
+ e.preventDefault();
10835
+ e.stopPropagation();
10836
+ },
10837
10837
  modelValue: true,
10838
10838
  'onUpdate:modelValue': undefined
10839
10839
  };
@@ -14260,11 +14260,13 @@ const VCombobox = genericComponent()({
14260
14260
  let {
14261
14261
  isSelected
14262
14262
  } = _ref2;
14263
- return props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
14263
+ return createVNode(Fragment, null, [props.multiple && !props.hideSelected ? createVNode(VCheckboxBtn, {
14264
14264
  "modelValue": isSelected,
14265
14265
  "ripple": false,
14266
14266
  "tabindex": "-1"
14267
- }, null) : undefined;
14267
+ }, null) : undefined, item.props.prependIcon && createVNode(VIcon, {
14268
+ "icon": item.props.prependIcon
14269
+ }, null)]);
14268
14270
  },
14269
14271
  title: () => {
14270
14272
  return isPristine.value ? item.title : highlightResult(item.title, getMatches(item)?.title, search.value?.length ?? 0);
@@ -14279,6 +14281,10 @@ const VCombobox = genericComponent()({
14279
14281
  }
14280
14282
  const slotProps = {
14281
14283
  'onClick:close': onChipClose,
14284
+ onMousedown(e) {
14285
+ e.preventDefault();
14286
+ e.stopPropagation();
14287
+ },
14282
14288
  modelValue: true,
14283
14289
  'onUpdate:modelValue': undefined
14284
14290
  };
@@ -14742,6 +14748,7 @@ const VFileInput = genericComponent()({
14742
14748
  const vInputRef = ref();
14743
14749
  const vFieldRef = ref();
14744
14750
  const inputRef = ref();
14751
+ const isActive = computed(() => isFocused.value || props.active);
14745
14752
  function onFocus() {
14746
14753
  if (inputRef.value !== document.activeElement) {
14747
14754
  inputRef.value?.focus();
@@ -14810,7 +14817,7 @@ const VFileInput = genericComponent()({
14810
14817
  "onClick:appendInner": props['onClick:appendInner']
14811
14818
  }, fieldProps, {
14812
14819
  "id": id.value,
14813
- "active": isDirty.value || isFocused.value,
14820
+ "active": isActive.value || isDirty.value,
14814
14821
  "dirty": isDirty.value,
14815
14822
  "disabled": isDisabled.value,
14816
14823
  "focused": isFocused.value,
@@ -15976,7 +15983,6 @@ const VNavigationDrawer = genericComponent()({
15976
15983
  });
15977
15984
  const {
15978
15985
  layoutItemStyles,
15979
- layoutRect,
15980
15986
  layoutItemScrimStyles
15981
15987
  } = useLayoutItem({
15982
15988
  id: props.name,
@@ -16006,12 +16012,6 @@ const VNavigationDrawer = genericComponent()({
16006
16012
  opacity: dragProgress.value * 0.2,
16007
16013
  transition: 'none'
16008
16014
  } : undefined),
16009
- ...(layoutRect.value ? {
16010
- left: convertToUnit(layoutRect.value.left),
16011
- right: convertToUnit(layoutRect.value.right),
16012
- top: convertToUnit(layoutRect.value.top),
16013
- bottom: convertToUnit(layoutRect.value.bottom)
16014
- } : undefined),
16015
16015
  ...layoutItemScrimStyles.value
16016
16016
  }));
16017
16017
  provideDefaults({
@@ -17975,7 +17975,7 @@ const VTextarea = genericComponent()({
17975
17975
  const vFieldRef = ref();
17976
17976
  const controlHeight = ref('');
17977
17977
  const textareaRef = ref();
17978
- const isActive = computed(() => isFocused.value || props.persistentPlaceholder);
17978
+ const isActive = computed(() => props.persistentPlaceholder || isFocused.value || props.active);
17979
17979
  function onFocus() {
17980
17980
  if (textareaRef.value !== document.activeElement) {
17981
17981
  textareaRef.value?.focus();
@@ -19666,6 +19666,11 @@ function providePagination(options) {
19666
19666
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
19667
19667
  return Math.ceil(itemsLength.value / itemsPerPage.value);
19668
19668
  });
19669
+ watchEffect(() => {
19670
+ if (page.value > pageCount.value) {
19671
+ page.value = pageCount.value;
19672
+ }
19673
+ });
19669
19674
  function setItemsPerPage(value) {
19670
19675
  itemsPerPage.value = value;
19671
19676
  page.value = 1;
@@ -21541,7 +21546,7 @@ function createVuetify$1() {
21541
21546
  date
21542
21547
  };
21543
21548
  }
21544
- const version$1 = "3.2.1";
21549
+ const version$1 = "3.2.2";
21545
21550
  createVuetify$1.version = version$1;
21546
21551
 
21547
21552
  // Vue's inject() can only be used in setup
@@ -21553,7 +21558,7 @@ function inject(key) {
21553
21558
  }
21554
21559
  }
21555
21560
 
21556
- const version = "3.2.1";
21561
+ const version = "3.2.2";
21557
21562
 
21558
21563
  const createVuetify = function () {
21559
21564
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};