vuetify 3.7.15 → 3.7.17

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 (124) hide show
  1. package/dist/json/attributes.json +3529 -3525
  2. package/dist/json/importMap-labs.json +12 -12
  3. package/dist/json/importMap.json +164 -164
  4. package/dist/json/tags.json +3 -2
  5. package/dist/json/web-types.json +6568 -6536
  6. package/dist/vuetify-labs.css +3153 -3152
  7. package/dist/vuetify-labs.d.ts +438 -200
  8. package/dist/vuetify-labs.esm.js +165 -141
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +164 -140
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +3426 -3425
  13. package/dist/vuetify.d.ts +387 -207
  14. package/dist/vuetify.esm.js +110 -83
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +109 -82
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +471 -470
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAppBar/index.d.mts +15 -6
  22. package/lib/components/VAutocomplete/index.d.mts +23 -8
  23. package/lib/components/VBadge/VBadge.mjs +2 -2
  24. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  25. package/lib/components/VBtn/VBtn.mjs +6 -3
  26. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  27. package/lib/components/VBtn/index.d.mts +15 -6
  28. package/lib/components/VCard/VCard.mjs +12 -3
  29. package/lib/components/VCard/VCard.mjs.map +1 -1
  30. package/lib/components/VCard/VCardItem.mjs +11 -4
  31. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  32. package/lib/components/VCard/index.d.mts +75 -30
  33. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  34. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  35. package/lib/components/VChip/VChip.mjs +6 -3
  36. package/lib/components/VChip/VChip.mjs.map +1 -1
  37. package/lib/components/VChip/index.d.mts +15 -6
  38. package/lib/components/VCombobox/index.d.mts +23 -8
  39. package/lib/components/VDataIterator/index.d.mts +2 -2
  40. package/lib/components/VDataTable/composables/headers.mjs +3 -1
  41. package/lib/components/VDataTable/composables/headers.mjs.map +1 -1
  42. package/lib/components/VDataTable/composables/paginate.mjs +2 -2
  43. package/lib/components/VDataTable/composables/paginate.mjs.map +1 -1
  44. package/lib/components/VDataTable/index.d.mts +34 -34
  45. package/lib/components/VDataTable/types.mjs.map +1 -1
  46. package/lib/components/VDatePicker/VDatePickerControls.mjs +5 -5
  47. package/lib/components/VDatePicker/VDatePickerControls.mjs.map +1 -1
  48. package/lib/components/VDatePicker/VDatePickerMonth.mjs +12 -21
  49. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  50. package/lib/components/VDatePicker/index.d.mts +3 -3
  51. package/lib/components/VDialog/__test__/VDialog.spec.browser.mjs +50 -0
  52. package/lib/components/VDialog/__test__/VDialog.spec.browser.mjs.map +1 -0
  53. package/lib/components/VDialog/index.d.mts +21 -6
  54. package/lib/components/VFab/index.d.mts +15 -6
  55. package/lib/components/VField/VField.mjs +1 -6
  56. package/lib/components/VField/VField.mjs.map +1 -1
  57. package/lib/components/VFileInput/VFileInput.mjs +2 -2
  58. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  59. package/lib/components/VList/VListItem.mjs +11 -5
  60. package/lib/components/VList/VListItem.mjs.map +1 -1
  61. package/lib/components/VList/index.d.mts +32 -14
  62. package/lib/components/VMenu/index.d.mts +21 -6
  63. package/lib/components/VOverlay/VOverlay.mjs +10 -1
  64. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  65. package/lib/components/VOverlay/index.d.mts +6 -0
  66. package/lib/components/VPagination/VPagination.mjs +3 -3
  67. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  68. package/lib/components/VParallax/VParallax.mjs +1 -1
  69. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  70. package/lib/components/VRating/VRating.mjs +1 -1
  71. package/lib/components/VRating/VRating.mjs.map +1 -1
  72. package/lib/components/VSelect/index.d.mts +23 -8
  73. package/lib/components/VSlider/slider.mjs +1 -1
  74. package/lib/components/VSlider/slider.mjs.map +1 -1
  75. package/lib/components/VSnackbar/index.d.mts +21 -6
  76. package/lib/components/VSparkline/VBarline.mjs +1 -1
  77. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  78. package/lib/components/VTabs/index.d.mts +39 -24
  79. package/lib/components/VTextField/VTextField.mjs +2 -2
  80. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  81. package/lib/components/VTextarea/VTextarea.mjs +4 -4
  82. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  83. package/lib/components/VToolbar/VToolbar.css +1 -0
  84. package/lib/components/VToolbar/VToolbar.sass +1 -0
  85. package/lib/components/VTooltip/index.d.mts +21 -6
  86. package/lib/components/index.d.mts +333 -153
  87. package/lib/composables/stack.mjs +2 -2
  88. package/lib/composables/stack.mjs.map +1 -1
  89. package/lib/composables/theme.mjs +1 -1
  90. package/lib/composables/theme.mjs.map +1 -1
  91. package/lib/composables/validation.mjs +2 -2
  92. package/lib/composables/validation.mjs.map +1 -1
  93. package/lib/entry-bundler.mjs +1 -1
  94. package/lib/framework.mjs +1 -1
  95. package/lib/index.d.mts +54 -54
  96. package/lib/labs/VDateInput/VDateInput.mjs +4 -3
  97. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  98. package/lib/labs/VDateInput/index.d.mts +10 -10
  99. package/lib/labs/VFileUpload/VFileUpload.mjs +3 -2
  100. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -1
  101. package/lib/labs/VFileUpload/index.d.mts +32 -14
  102. package/lib/labs/VNumberInput/VNumberInput.mjs +5 -5
  103. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  104. package/lib/labs/VSnackbarQueue/index.d.mts +21 -6
  105. package/lib/labs/VTimePicker/VTimePicker.mjs +30 -31
  106. package/lib/labs/VTimePicker/VTimePicker.mjs.map +1 -1
  107. package/lib/labs/VTimePicker/VTimePickerControls.mjs +14 -13
  108. package/lib/labs/VTimePicker/VTimePickerControls.mjs.map +1 -1
  109. package/lib/labs/VTimePicker/index.d.mts +35 -13
  110. package/lib/labs/VTimePicker/shared.mjs +2 -0
  111. package/lib/labs/VTimePicker/shared.mjs.map +1 -0
  112. package/lib/labs/VTreeview/index.d.mts +32 -14
  113. package/lib/labs/components.d.mts +128 -55
  114. package/lib/locale/adapters/vuetify.mjs +1 -1
  115. package/lib/locale/adapters/vuetify.mjs.map +1 -1
  116. package/lib/util/animation.mjs +8 -8
  117. package/lib/util/animation.mjs.map +1 -1
  118. package/lib/util/helpers.mjs +6 -4
  119. package/lib/util/helpers.mjs.map +1 -1
  120. package/package.json +2 -2
  121. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs +0 -39
  122. package/lib/components/VDialog/__test__/VDialog.spec.cy.mjs.map +0 -1
  123. package/lib/labs/VTimePicker/SelectingTimes.mjs +0 -10
  124. package/lib/labs/VTimePicker/SelectingTimes.mjs.map +0 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.7.15
2
+ * Vuetify v3.7.17
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { shallowRef, reactive, computed, watchEffect, toRefs, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onMounted, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, toDisplayString, vModelText, resolveComponent, render } from 'vue';
7
+ import { shallowRef, reactive, computed, watchEffect, toRefs, capitalize, unref, Fragment, isVNode, Comment, warn, getCurrentInstance as getCurrentInstance$1, ref, provide, inject as inject$1, defineComponent as defineComponent$1, h, camelize, createVNode, mergeProps, onBeforeUnmount, watch, readonly, onMounted, onDeactivated, onActivated, onScopeDispose, effectScope, toRaw, TransitionGroup, Transition, isRef, toRef, onBeforeMount, nextTick, withDirectives, resolveDirective, vShow, onUpdated, Text, resolveDynamicComponent, toDisplayString, markRaw, Teleport, cloneVNode, createTextVNode, onUnmounted, onBeforeUpdate, withModifiers, vModelText, resolveComponent, render } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -80,12 +80,14 @@ function convertToUnit(str) {
80
80
  let unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'px';
81
81
  if (str == null || str === '') {
82
82
  return undefined;
83
- } else if (isNaN(+str)) {
83
+ }
84
+ const num = Number(str);
85
+ if (isNaN(num)) {
84
86
  return String(str);
85
- } else if (!isFinite(+str)) {
87
+ } else if (!isFinite(num)) {
86
88
  return undefined;
87
89
  } else {
88
- return `${Number(str)}${unit}`;
90
+ return `${num}${unit}`;
89
91
  }
90
92
  }
91
93
  function isObject(obj) {
@@ -613,16 +615,16 @@ function nullifyTransforms(el) {
613
615
  let ta, sx, sy, dx, dy;
614
616
  if (tx.startsWith('matrix3d(')) {
615
617
  ta = tx.slice(9, -1).split(/, /);
616
- sx = +ta[0];
617
- sy = +ta[5];
618
- dx = +ta[12];
619
- dy = +ta[13];
618
+ sx = Number(ta[0]);
619
+ sy = Number(ta[5]);
620
+ dx = Number(ta[12]);
621
+ dy = Number(ta[13]);
620
622
  } else if (tx.startsWith('matrix(')) {
621
623
  ta = tx.slice(7, -1).split(/, /);
622
- sx = +ta[0];
623
- sy = +ta[3];
624
- dx = +ta[4];
625
- dy = +ta[5];
624
+ sx = Number(ta[0]);
625
+ sy = Number(ta[3]);
626
+ dx = Number(ta[4]);
627
+ dy = Number(ta[5]);
626
628
  } else {
627
629
  return new Box(rect);
628
630
  }
@@ -2516,7 +2518,7 @@ var en = {
2516
2518
  const LANG_PREFIX = '$vuetify.';
2517
2519
  const replace = (str, params) => {
2518
2520
  return str.replace(/\{(\d+)\}/g, (match, index) => {
2519
- return String(params[+index]);
2521
+ return String(params[Number(index)]);
2520
2522
  });
2521
2523
  };
2522
2524
  const createTranslateFunction = (current, fallback, messages) => {
@@ -2886,7 +2888,7 @@ function createTheme(options) {
2886
2888
  function getHead() {
2887
2889
  return {
2888
2890
  style: [{
2889
- children: styles.value,
2891
+ textContent: styles.value,
2890
2892
  id: 'vuetify-theme-stylesheet',
2891
2893
  nonce: parsedOptions.cspNonce || false
2892
2894
  }]
@@ -5805,7 +5807,10 @@ const makeVBtnProps = propsFactory({
5805
5807
  type: [Boolean, Object],
5806
5808
  default: true
5807
5809
  },
5808
- text: String,
5810
+ text: {
5811
+ type: [String, Number, Boolean],
5812
+ default: undefined
5813
+ },
5809
5814
  ...makeBorderProps(),
5810
5815
  ...makeComponentProps(),
5811
5816
  ...makeDensityProps(),
@@ -5961,7 +5966,7 @@ const VBtn = genericComponent()({
5961
5966
  }
5962
5967
  }
5963
5968
  }, {
5964
- default: () => [slots.default?.() ?? props.text]
5969
+ default: () => [slots.default?.() ?? toDisplayString(props.text)]
5965
5970
  })]), !props.icon && hasAppend && createVNode("span", {
5966
5971
  "key": "append",
5967
5972
  "class": "v-btn__append"
@@ -6969,7 +6974,7 @@ function useValidation(props) {
6969
6974
  const isPristine = shallowRef(true);
6970
6975
  const isDirty = computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));
6971
6976
  const errorMessages = computed(() => {
6972
- return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, +props.maxErrors)) : internalErrorMessages.value;
6977
+ return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, Number(props.maxErrors))) : internalErrorMessages.value;
6973
6978
  });
6974
6979
  const validateOn = computed(() => {
6975
6980
  let value = (props.validateOn ?? form.validateOn?.value) || 'input';
@@ -7060,7 +7065,7 @@ function useValidation(props) {
7060
7065
  const results = [];
7061
7066
  isValidating.value = true;
7062
7067
  for (const rule of props.rules) {
7063
- if (results.length >= +(props.maxErrors ?? 1)) {
7068
+ if (results.length >= Number(props.maxErrors ?? 1)) {
7064
7069
  break;
7065
7070
  }
7066
7071
  const handler = typeof rule === 'function' ? rule : () => rule;
@@ -8121,7 +8126,10 @@ const makeVChipProps = propsFactory({
8121
8126
  type: [Boolean, Object],
8122
8127
  default: true
8123
8128
  },
8124
- text: String,
8129
+ text: {
8130
+ type: [String, Number, Boolean],
8131
+ default: undefined
8132
+ },
8125
8133
  modelValue: {
8126
8134
  type: Boolean,
8127
8135
  default: true
@@ -8290,7 +8298,7 @@ const VChip = genericComponent()({
8290
8298
  toggle: group?.toggle,
8291
8299
  value: group?.value.value,
8292
8300
  disabled: props.disabled
8293
- }) ?? props.text]), hasAppend && createVNode("div", {
8301
+ }) ?? toDisplayString(props.text)]), hasAppend && createVNode("div", {
8294
8302
  "key": "append",
8295
8303
  "class": "v-chip__append"
8296
8304
  }, [!slots.append ? createVNode(Fragment, null, [props.appendIcon && createVNode(VIcon, {
@@ -9169,8 +9177,14 @@ const makeVListItemProps = propsFactory({
9169
9177
  default: true
9170
9178
  },
9171
9179
  slim: Boolean,
9172
- subtitle: [String, Number],
9173
- title: [String, Number],
9180
+ subtitle: {
9181
+ type: [String, Number, Boolean],
9182
+ default: undefined
9183
+ },
9184
+ title: {
9185
+ type: [String, Number, Boolean],
9186
+ default: undefined
9187
+ },
9174
9188
  value: null,
9175
9189
  onClick: EventProp(),
9176
9190
  onClickOnce: EventProp(),
@@ -9363,13 +9377,13 @@ const VListItem = genericComponent()({
9363
9377
  }, {
9364
9378
  default: () => [slots.title?.({
9365
9379
  title: props.title
9366
- }) ?? props.title]
9380
+ }) ?? toDisplayString(props.title)]
9367
9381
  }), hasSubtitle && createVNode(VListItemSubtitle, {
9368
9382
  "key": "subtitle"
9369
9383
  }, {
9370
9384
  default: () => [slots.subtitle?.({
9371
9385
  subtitle: props.subtitle
9372
- }) ?? props.subtitle]
9386
+ }) ?? toDisplayString(props.subtitle)]
9373
9387
  }), slots.default?.(slotProps.value)]), hasAppend && createVNode("div", {
9374
9388
  "key": "append",
9375
9389
  "class": "v-list-item__append"
@@ -10970,10 +10984,10 @@ function useStack(isActive, zIndex, disableGlobalStack) {
10970
10984
  activeChildren: new Set()
10971
10985
  });
10972
10986
  provide(StackSymbol, stack);
10973
- const _zIndex = shallowRef(+zIndex.value);
10987
+ const _zIndex = shallowRef(Number(zIndex.value));
10974
10988
  useToggleScope(isActive, () => {
10975
10989
  const lastZIndex = globalStack.at(-1)?.[1];
10976
- _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
10990
+ _zIndex.value = lastZIndex ? lastZIndex + 10 : Number(zIndex.value);
10977
10991
  if (createStackEntry) {
10978
10992
  globalStack.push([vm.uid, _zIndex.value]);
10979
10993
  }
@@ -11182,6 +11196,7 @@ const VOverlay = genericComponent()({
11182
11196
  emits: {
11183
11197
  'click:outside': e => true,
11184
11198
  'update:modelValue': value => true,
11199
+ keydown: e => true,
11185
11200
  afterEnter: () => true,
11186
11201
  afterLeave: () => true
11187
11202
  },
@@ -11294,6 +11309,9 @@ const VOverlay = genericComponent()({
11294
11309
  });
11295
11310
  function onKeydown(e) {
11296
11311
  if (e.key === 'Escape' && globalTop.value) {
11312
+ if (!contentEl.value?.contains(document.activeElement)) {
11313
+ emit('keydown', e);
11314
+ }
11297
11315
  if (!props.persistent) {
11298
11316
  isActive.value = false;
11299
11317
  if (contentEl.value?.contains(document.activeElement)) {
@@ -11302,6 +11320,10 @@ const VOverlay = genericComponent()({
11302
11320
  } else animateClick();
11303
11321
  }
11304
11322
  }
11323
+ function onKeydownSelf(e) {
11324
+ if (e.key === 'Escape' && !globalTop.value) return;
11325
+ emit('keydown', e);
11326
+ }
11305
11327
  const router = useRouter();
11306
11328
  useToggleScope(() => props.closeOnBack, () => {
11307
11329
  useBackButton(router, next => {
@@ -11364,7 +11386,8 @@ const VOverlay = genericComponent()({
11364
11386
  '--v-overlay-opacity': props.opacity,
11365
11387
  top: convertToUnit(top.value)
11366
11388
  }, props.style],
11367
- "ref": root
11389
+ "ref": root,
11390
+ "onKeydown": onKeydownSelf
11368
11391
  }, scopeId, attrs), [createVNode(Scrim, mergeProps({
11369
11392
  "color": scrimColor,
11370
11393
  "modelValue": isActive.value && !!props.scrim,
@@ -12035,11 +12058,6 @@ const VField = genericComponent()({
12035
12058
  };
12036
12059
  }
12037
12060
  });
12038
- // TODO: this is kinda slow, might be better to implicitly inherit props instead
12039
- function filterFieldProps(attrs) {
12040
- const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
12041
- return pick(attrs, keys);
12042
- }
12043
12061
 
12044
12062
  // Types
12045
12063
 
@@ -12147,7 +12165,7 @@ const VTextField = genericComponent()({
12147
12165
  modelValue: _,
12148
12166
  ...inputProps
12149
12167
  } = VInput.filterProps(props);
12150
- const fieldProps = filterFieldProps(props);
12168
+ const fieldProps = VField.filterProps(props);
12151
12169
  return createVNode(VInput, mergeProps({
12152
12170
  "ref": vInputRef,
12153
12171
  "modelValue": model.value,
@@ -13755,11 +13773,11 @@ const VBadge = genericComponent()({
13755
13773
  locationStyles
13756
13774
  } = useLocation(props, true, side => {
13757
13775
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
13758
- return base + (['top', 'bottom'].includes(side) ? +(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? +(props.offsetX ?? 0) : 0);
13776
+ return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
13759
13777
  });
13760
13778
  useRender(() => {
13761
13779
  const value = Number(props.content);
13762
- const content = !props.max || isNaN(value) ? props.content : value <= +props.max ? value : `${props.max}+`;
13780
+ const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
13763
13781
  const [badgeAttrs, attrs] = pickWithRest(ctx.attrs, ['aria-atomic', 'aria-label', 'aria-live', 'role', 'title']);
13764
13782
  return createVNode(props.tag, mergeProps({
13765
13783
  "class": ['v-badge', {
@@ -14458,8 +14476,14 @@ const makeCardItemProps = propsFactory({
14458
14476
  appendIcon: IconValue,
14459
14477
  prependAvatar: String,
14460
14478
  prependIcon: IconValue,
14461
- subtitle: [String, Number],
14462
- title: [String, Number],
14479
+ subtitle: {
14480
+ type: [String, Number, Boolean],
14481
+ default: undefined
14482
+ },
14483
+ title: {
14484
+ type: [String, Number, Boolean],
14485
+ default: undefined
14486
+ },
14463
14487
  ...makeComponentProps(),
14464
14488
  ...makeDensityProps()
14465
14489
  }, 'VCardItem');
@@ -14509,11 +14533,11 @@ const VCardItem = genericComponent()({
14509
14533
  }, [hasTitle && createVNode(VCardTitle, {
14510
14534
  "key": "title"
14511
14535
  }, {
14512
- default: () => [slots.title?.() ?? props.title]
14536
+ default: () => [slots.title?.() ?? toDisplayString(props.title)]
14513
14537
  }), hasSubtitle && createVNode(VCardSubtitle, {
14514
14538
  "key": "subtitle"
14515
14539
  }, {
14516
- default: () => [slots.subtitle?.() ?? props.subtitle]
14540
+ default: () => [slots.subtitle?.() ?? toDisplayString(props.subtitle)]
14517
14541
  }), slots.default?.()]), hasAppend && createVNode("div", {
14518
14542
  "key": "append",
14519
14543
  "class": "v-card-item__append"
@@ -14585,9 +14609,18 @@ const makeVCardProps = propsFactory({
14585
14609
  type: [Boolean, Object],
14586
14610
  default: true
14587
14611
  },
14588
- subtitle: [String, Number],
14589
- text: [String, Number],
14590
- title: [String, Number],
14612
+ subtitle: {
14613
+ type: [String, Number, Boolean],
14614
+ default: undefined
14615
+ },
14616
+ text: {
14617
+ type: [String, Number, Boolean],
14618
+ default: undefined
14619
+ },
14620
+ title: {
14621
+ type: [String, Number, Boolean],
14622
+ default: undefined
14623
+ },
14591
14624
  ...makeBorderProps(),
14592
14625
  ...makeComponentProps(),
14593
14626
  ...makeDensityProps(),
@@ -15056,7 +15089,7 @@ const VCarousel = genericComponent()({
15056
15089
  onMounted(startTimeout);
15057
15090
  function startTimeout() {
15058
15091
  if (!props.cycle || !windowRef.value) return;
15059
- slideTimeout = window.setTimeout(windowRef.value.group.next, +props.interval > 0 ? +props.interval : 6000);
15092
+ slideTimeout = window.setTimeout(windowRef.value.group.next, Number(props.interval) > 0 ? Number(props.interval) : 6000);
15060
15093
  }
15061
15094
  function restartTimeout() {
15062
15095
  window.clearTimeout(slideTimeout);
@@ -15782,7 +15815,7 @@ const makeSliderProps = propsFactory({
15782
15815
  const useSteps = props => {
15783
15816
  const min = computed(() => parseFloat(props.min));
15784
15817
  const max = computed(() => parseFloat(props.max));
15785
- const step = computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
15818
+ const step = computed(() => Number(props.step) > 0 ? parseFloat(props.step) : 0);
15786
15819
  const decimals = computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
15787
15820
  function roundValue(value) {
15788
15821
  value = parseFloat(value);
@@ -18737,8 +18770,8 @@ const makeDataTablePaginateProps = propsFactory({
18737
18770
  }, 'DataTable-paginate');
18738
18771
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18739
18772
  function createPagination(props) {
18740
- const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18741
- const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18773
+ const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1));
18774
+ const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10));
18742
18775
  return {
18743
18776
  page,
18744
18777
  itemsPerPage
@@ -19527,7 +19560,7 @@ const VPagination = genericComponent()({
19527
19560
  const minButtons = props.showFirstLastPage ? 5 : 3;
19528
19561
  return Math.max(0, Math.floor(
19529
19562
  // Round to two decimal places to avoid floating point errors
19530
- +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
19563
+ Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))));
19531
19564
  }
19532
19565
  const range = computed(() => {
19533
19566
  if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
@@ -19598,7 +19631,7 @@ const VPagination = genericComponent()({
19598
19631
  ref,
19599
19632
  ellipsis: false,
19600
19633
  icon: true,
19601
- disabled: !!props.disabled || +props.length < 2,
19634
+ disabled: !!props.disabled || Number(props.length) < 2,
19602
19635
  color: isActive ? props.activeColor : props.color,
19603
19636
  'aria-current': isActive,
19604
19637
  'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
@@ -19647,7 +19680,7 @@ const VPagination = genericComponent()({
19647
19680
  refs.value[currentIndex]?.$el.focus();
19648
19681
  }
19649
19682
  function onKeydown(e) {
19650
- if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
19683
+ if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {
19651
19684
  page.value = page.value - 1;
19652
19685
  nextTick(updateFocus);
19653
19686
  } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
@@ -19980,8 +20013,10 @@ function parseFixedColumns(items) {
19980
20013
  } else {
19981
20014
  if (!seenFixed) {
19982
20015
  item.lastFixed = true;
19983
- } else if (isNaN(+item.width)) {
20016
+ } else if (isNaN(Number(item.width))) {
19984
20017
  consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
20018
+ } else {
20019
+ item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);
19985
20020
  }
19986
20021
  seenFixed = true;
19987
20022
  }
@@ -21744,30 +21779,30 @@ const VDatePickerControls = genericComponent()({
21744
21779
  "class": ['v-date-picker-controls']
21745
21780
  }, [createVNode(VBtn, {
21746
21781
  "class": "v-date-picker-controls__month-btn",
21782
+ "data-testid": "month-btn",
21747
21783
  "disabled": disableMonth.value,
21748
21784
  "text": props.text,
21749
21785
  "variant": "text",
21750
21786
  "rounded": true,
21751
21787
  "onClick": onClickMonth
21752
21788
  }, null), createVNode(VBtn, {
21753
- "key": "mode-btn",
21754
21789
  "class": "v-date-picker-controls__mode-btn",
21790
+ "data-testid": "year-btn",
21755
21791
  "disabled": disableYear.value,
21756
21792
  "density": "comfortable",
21757
21793
  "icon": props.modeIcon,
21758
21794
  "variant": "text",
21759
21795
  "onClick": onClickYear
21760
- }, null), createVNode(VSpacer, {
21761
- "key": "mode-spacer"
21762
- }, null), createVNode("div", {
21763
- "key": "month-buttons",
21796
+ }, null), createVNode(VSpacer, null, null), createVNode("div", {
21764
21797
  "class": "v-date-picker-controls__month"
21765
21798
  }, [createVNode(VBtn, {
21799
+ "data-testid": "prev-month",
21766
21800
  "disabled": disablePrev.value,
21767
21801
  "icon": props.prevIcon,
21768
21802
  "variant": "text",
21769
21803
  "onClick": onClickPrev
21770
21804
  }, null), createVNode(VBtn, {
21805
+ "data-testid": "next-month",
21771
21806
  "disabled": disableNext.value,
21772
21807
  "icon": props.nextIcon,
21773
21808
  "variant": "text",
@@ -22114,7 +22149,7 @@ const VDatePickerMonth = genericComponent()({
22114
22149
  model.value = [value];
22115
22150
  }
22116
22151
  }
22117
- return () => createVNode("div", {
22152
+ useRender(() => createVNode("div", {
22118
22153
  "class": "v-date-picker-month"
22119
22154
  }, [props.showWeek && createVNode("div", {
22120
22155
  "key": "weeks",
@@ -22136,6 +22171,13 @@ const VDatePickerMonth = genericComponent()({
22136
22171
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22137
22172
  const slotProps = {
22138
22173
  props: {
22174
+ class: 'v-date-picker-month__day-btn',
22175
+ color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
22176
+ disabled: item.isDisabled,
22177
+ icon: true,
22178
+ ripple: false,
22179
+ text: item.localized,
22180
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
22139
22181
  onClick: () => onClick(item.date)
22140
22182
  },
22141
22183
  item,
@@ -22153,24 +22195,9 @@ const VDatePickerMonth = genericComponent()({
22153
22195
  'v-date-picker-month__day--week-start': item.isWeekStart
22154
22196
  }],
22155
22197
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
22156
- }, [(props.showAdjacentMonths || !item.isAdjacent) && createVNode(VDefaultsProvider, {
22157
- "defaults": {
22158
- VBtn: {
22159
- class: 'v-date-picker-month__day-btn',
22160
- color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
22161
- disabled: item.isDisabled,
22162
- icon: true,
22163
- ripple: false,
22164
- text: item.localized,
22165
- variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
22166
- onClick: () => onClick(item.date)
22167
- }
22168
- }
22169
- }, {
22170
- default: () => [slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, null)]
22171
- })]);
22198
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? createVNode(VBtn, slotProps.props, null))]);
22172
22199
  })])]
22173
- })]);
22200
+ })]));
22174
22201
  }
22175
22202
  });
22176
22203
 
@@ -23308,7 +23335,7 @@ const VFileInput = genericComponent()({
23308
23335
  modelValue: _,
23309
23336
  ...inputProps
23310
23337
  } = VInput.filterProps(props);
23311
- const fieldProps = filterFieldProps(props);
23338
+ const fieldProps = VField.filterProps(props);
23312
23339
  return createVNode(VInput, mergeProps({
23313
23340
  "ref": vInputRef,
23314
23341
  "modelValue": props.multiple ? model.value : model.value[0],
@@ -24927,7 +24954,7 @@ const VParallax = genericComponent()({
24927
24954
  watch(displayHeight, onScroll);
24928
24955
  watch(() => contentRect.value?.height, onScroll);
24929
24956
  const scale = computed(() => {
24930
- return 1 - clamp(+props.scale);
24957
+ return 1 - clamp(Number(props.scale));
24931
24958
  });
24932
24959
  let frame = -1;
24933
24960
  function onScroll() {
@@ -25348,7 +25375,7 @@ const VRating = genericComponent()({
25348
25375
  themeClasses
25349
25376
  } = provideTheme(props);
25350
25377
  const rating = useProxiedModel(props, 'modelValue');
25351
- const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, +props.length));
25378
+ const normalizedValue = computed(() => clamp(parseFloat(rating.value), 0, Number(props.length)));
25352
25379
  const range = computed(() => createRange(Number(props.length), 1));
25353
25380
  const increments = computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
25354
25381
  const hoverIndex = shallowRef(-1);
@@ -25959,7 +25986,7 @@ const VBarline = genericComponent()({
25959
25986
  const height = Math.abs(gridY * value);
25960
25987
  return {
25961
25988
  x: minX + index * gridX,
25962
- y: horizonY - height + +(value < 0) * height,
25989
+ y: horizonY - height + Number(value < 0) * height,
25963
25990
  height,
25964
25991
  value
25965
25992
  };
@@ -27397,10 +27424,10 @@ const VTextarea = genericComponent()({
27397
27424
  }
27398
27425
  }
27399
27426
  const sizerRef = ref();
27400
- const rows = ref(+props.rows);
27427
+ const rows = ref(Number(props.rows));
27401
27428
  const isPlainOrUnderlined = computed(() => ['plain', 'underlined'].includes(props.variant));
27402
27429
  watchEffect(() => {
27403
- if (!props.autoGrow) rows.value = +props.rows;
27430
+ if (!props.autoGrow) rows.value = Number(props.rows);
27404
27431
  });
27405
27432
  function calculateInputHeight() {
27406
27433
  if (!props.autoGrow) return;
@@ -27443,7 +27470,7 @@ const VTextarea = genericComponent()({
27443
27470
  modelValue: _,
27444
27471
  ...inputProps
27445
27472
  } = VInput.filterProps(props);
27446
- const fieldProps = filterFieldProps(props);
27473
+ const fieldProps = VField.filterProps(props);
27447
27474
  return createVNode(VInput, mergeProps({
27448
27475
  "ref": vInputRef,
27449
27476
  "modelValue": model.value,
@@ -28417,7 +28444,7 @@ function createVuetify$1() {
28417
28444
  goTo
28418
28445
  };
28419
28446
  }
28420
- const version$1 = "3.7.15";
28447
+ const version$1 = "3.7.17";
28421
28448
  createVuetify$1.version = version$1;
28422
28449
 
28423
28450
  // Vue's inject() can only be used in setup
@@ -28442,7 +28469,7 @@ const createVuetify = function () {
28442
28469
  ...options
28443
28470
  });
28444
28471
  };
28445
- const version = "3.7.15";
28472
+ const version = "3.7.17";
28446
28473
  createVuetify.version = version;
28447
28474
 
28448
28475
  export { index as blueprints, components, createVuetify, directives, useDate, useDefaults, useDisplay, useGoTo, useLayout, useLocale, useRtl, useTheme, version };