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
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
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
  */
@@ -84,12 +84,14 @@
84
84
  let unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'px';
85
85
  if (str == null || str === '') {
86
86
  return undefined;
87
- } else if (isNaN(+str)) {
87
+ }
88
+ const num = Number(str);
89
+ if (isNaN(num)) {
88
90
  return String(str);
89
- } else if (!isFinite(+str)) {
91
+ } else if (!isFinite(num)) {
90
92
  return undefined;
91
93
  } else {
92
- return `${Number(str)}${unit}`;
94
+ return `${num}${unit}`;
93
95
  }
94
96
  }
95
97
  function isObject(obj) {
@@ -617,16 +619,16 @@
617
619
  let ta, sx, sy, dx, dy;
618
620
  if (tx.startsWith('matrix3d(')) {
619
621
  ta = tx.slice(9, -1).split(/, /);
620
- sx = +ta[0];
621
- sy = +ta[5];
622
- dx = +ta[12];
623
- dy = +ta[13];
622
+ sx = Number(ta[0]);
623
+ sy = Number(ta[5]);
624
+ dx = Number(ta[12]);
625
+ dy = Number(ta[13]);
624
626
  } else if (tx.startsWith('matrix(')) {
625
627
  ta = tx.slice(7, -1).split(/, /);
626
- sx = +ta[0];
627
- sy = +ta[3];
628
- dx = +ta[4];
629
- dy = +ta[5];
628
+ sx = Number(ta[0]);
629
+ sy = Number(ta[3]);
630
+ dx = Number(ta[4]);
631
+ dy = Number(ta[5]);
630
632
  } else {
631
633
  return new Box(rect);
632
634
  }
@@ -2520,7 +2522,7 @@
2520
2522
  const LANG_PREFIX = '$vuetify.';
2521
2523
  const replace = (str, params) => {
2522
2524
  return str.replace(/\{(\d+)\}/g, (match, index) => {
2523
- return String(params[+index]);
2525
+ return String(params[Number(index)]);
2524
2526
  });
2525
2527
  };
2526
2528
  const createTranslateFunction = (current, fallback, messages) => {
@@ -2890,7 +2892,7 @@
2890
2892
  function getHead() {
2891
2893
  return {
2892
2894
  style: [{
2893
- children: styles.value,
2895
+ textContent: styles.value,
2894
2896
  id: 'vuetify-theme-stylesheet',
2895
2897
  nonce: parsedOptions.cspNonce || false
2896
2898
  }]
@@ -5809,7 +5811,10 @@
5809
5811
  type: [Boolean, Object],
5810
5812
  default: true
5811
5813
  },
5812
- text: String,
5814
+ text: {
5815
+ type: [String, Number, Boolean],
5816
+ default: undefined
5817
+ },
5813
5818
  ...makeBorderProps(),
5814
5819
  ...makeComponentProps(),
5815
5820
  ...makeDensityProps(),
@@ -5965,7 +5970,7 @@
5965
5970
  }
5966
5971
  }
5967
5972
  }, {
5968
- default: () => [slots.default?.() ?? props.text]
5973
+ default: () => [slots.default?.() ?? vue.toDisplayString(props.text)]
5969
5974
  })]), !props.icon && hasAppend && vue.createVNode("span", {
5970
5975
  "key": "append",
5971
5976
  "class": "v-btn__append"
@@ -6973,7 +6978,7 @@
6973
6978
  const isPristine = vue.shallowRef(true);
6974
6979
  const isDirty = vue.computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));
6975
6980
  const errorMessages = vue.computed(() => {
6976
- return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, +props.maxErrors)) : internalErrorMessages.value;
6981
+ return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, Number(props.maxErrors))) : internalErrorMessages.value;
6977
6982
  });
6978
6983
  const validateOn = vue.computed(() => {
6979
6984
  let value = (props.validateOn ?? form.validateOn?.value) || 'input';
@@ -7064,7 +7069,7 @@
7064
7069
  const results = [];
7065
7070
  isValidating.value = true;
7066
7071
  for (const rule of props.rules) {
7067
- if (results.length >= +(props.maxErrors ?? 1)) {
7072
+ if (results.length >= Number(props.maxErrors ?? 1)) {
7068
7073
  break;
7069
7074
  }
7070
7075
  const handler = typeof rule === 'function' ? rule : () => rule;
@@ -8125,7 +8130,10 @@
8125
8130
  type: [Boolean, Object],
8126
8131
  default: true
8127
8132
  },
8128
- text: String,
8133
+ text: {
8134
+ type: [String, Number, Boolean],
8135
+ default: undefined
8136
+ },
8129
8137
  modelValue: {
8130
8138
  type: Boolean,
8131
8139
  default: true
@@ -8294,7 +8302,7 @@
8294
8302
  toggle: group?.toggle,
8295
8303
  value: group?.value.value,
8296
8304
  disabled: props.disabled
8297
- }) ?? props.text]), hasAppend && vue.createVNode("div", {
8305
+ }) ?? vue.toDisplayString(props.text)]), hasAppend && vue.createVNode("div", {
8298
8306
  "key": "append",
8299
8307
  "class": "v-chip__append"
8300
8308
  }, [!slots.append ? vue.createVNode(vue.Fragment, null, [props.appendIcon && vue.createVNode(VIcon, {
@@ -9173,8 +9181,14 @@
9173
9181
  default: true
9174
9182
  },
9175
9183
  slim: Boolean,
9176
- subtitle: [String, Number],
9177
- title: [String, Number],
9184
+ subtitle: {
9185
+ type: [String, Number, Boolean],
9186
+ default: undefined
9187
+ },
9188
+ title: {
9189
+ type: [String, Number, Boolean],
9190
+ default: undefined
9191
+ },
9178
9192
  value: null,
9179
9193
  onClick: EventProp(),
9180
9194
  onClickOnce: EventProp(),
@@ -9367,13 +9381,13 @@
9367
9381
  }, {
9368
9382
  default: () => [slots.title?.({
9369
9383
  title: props.title
9370
- }) ?? props.title]
9384
+ }) ?? vue.toDisplayString(props.title)]
9371
9385
  }), hasSubtitle && vue.createVNode(VListItemSubtitle, {
9372
9386
  "key": "subtitle"
9373
9387
  }, {
9374
9388
  default: () => [slots.subtitle?.({
9375
9389
  subtitle: props.subtitle
9376
- }) ?? props.subtitle]
9390
+ }) ?? vue.toDisplayString(props.subtitle)]
9377
9391
  }), slots.default?.(slotProps.value)]), hasAppend && vue.createVNode("div", {
9378
9392
  "key": "append",
9379
9393
  "class": "v-list-item__append"
@@ -10974,10 +10988,10 @@
10974
10988
  activeChildren: new Set()
10975
10989
  });
10976
10990
  vue.provide(StackSymbol, stack);
10977
- const _zIndex = vue.shallowRef(+zIndex.value);
10991
+ const _zIndex = vue.shallowRef(Number(zIndex.value));
10978
10992
  useToggleScope(isActive, () => {
10979
10993
  const lastZIndex = globalStack.at(-1)?.[1];
10980
- _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
10994
+ _zIndex.value = lastZIndex ? lastZIndex + 10 : Number(zIndex.value);
10981
10995
  if (createStackEntry) {
10982
10996
  globalStack.push([vm.uid, _zIndex.value]);
10983
10997
  }
@@ -11186,6 +11200,7 @@
11186
11200
  emits: {
11187
11201
  'click:outside': e => true,
11188
11202
  'update:modelValue': value => true,
11203
+ keydown: e => true,
11189
11204
  afterEnter: () => true,
11190
11205
  afterLeave: () => true
11191
11206
  },
@@ -11298,6 +11313,9 @@
11298
11313
  });
11299
11314
  function onKeydown(e) {
11300
11315
  if (e.key === 'Escape' && globalTop.value) {
11316
+ if (!contentEl.value?.contains(document.activeElement)) {
11317
+ emit('keydown', e);
11318
+ }
11301
11319
  if (!props.persistent) {
11302
11320
  isActive.value = false;
11303
11321
  if (contentEl.value?.contains(document.activeElement)) {
@@ -11306,6 +11324,10 @@
11306
11324
  } else animateClick();
11307
11325
  }
11308
11326
  }
11327
+ function onKeydownSelf(e) {
11328
+ if (e.key === 'Escape' && !globalTop.value) return;
11329
+ emit('keydown', e);
11330
+ }
11309
11331
  const router = useRouter();
11310
11332
  useToggleScope(() => props.closeOnBack, () => {
11311
11333
  useBackButton(router, next => {
@@ -11368,7 +11390,8 @@
11368
11390
  '--v-overlay-opacity': props.opacity,
11369
11391
  top: convertToUnit(top.value)
11370
11392
  }, props.style],
11371
- "ref": root
11393
+ "ref": root,
11394
+ "onKeydown": onKeydownSelf
11372
11395
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
11373
11396
  "color": scrimColor,
11374
11397
  "modelValue": isActive.value && !!props.scrim,
@@ -12039,11 +12062,6 @@
12039
12062
  };
12040
12063
  }
12041
12064
  });
12042
- // TODO: this is kinda slow, might be better to implicitly inherit props instead
12043
- function filterFieldProps(attrs) {
12044
- const keys = Object.keys(VField.props).filter(k => !isOn(k) && k !== 'class' && k !== 'style');
12045
- return pick(attrs, keys);
12046
- }
12047
12065
 
12048
12066
  // Types
12049
12067
 
@@ -12151,7 +12169,7 @@
12151
12169
  modelValue: _,
12152
12170
  ...inputProps
12153
12171
  } = VInput.filterProps(props);
12154
- const fieldProps = filterFieldProps(props);
12172
+ const fieldProps = VField.filterProps(props);
12155
12173
  return vue.createVNode(VInput, vue.mergeProps({
12156
12174
  "ref": vInputRef,
12157
12175
  "modelValue": model.value,
@@ -13759,11 +13777,11 @@
13759
13777
  locationStyles
13760
13778
  } = useLocation(props, true, side => {
13761
13779
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
13762
- return base + (['top', 'bottom'].includes(side) ? +(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? +(props.offsetX ?? 0) : 0);
13780
+ return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
13763
13781
  });
13764
13782
  useRender(() => {
13765
13783
  const value = Number(props.content);
13766
- const content = !props.max || isNaN(value) ? props.content : value <= +props.max ? value : `${props.max}+`;
13784
+ const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
13767
13785
  const [badgeAttrs, attrs] = pickWithRest(ctx.attrs, ['aria-atomic', 'aria-label', 'aria-live', 'role', 'title']);
13768
13786
  return vue.createVNode(props.tag, vue.mergeProps({
13769
13787
  "class": ['v-badge', {
@@ -14462,8 +14480,14 @@
14462
14480
  appendIcon: IconValue,
14463
14481
  prependAvatar: String,
14464
14482
  prependIcon: IconValue,
14465
- subtitle: [String, Number],
14466
- title: [String, Number],
14483
+ subtitle: {
14484
+ type: [String, Number, Boolean],
14485
+ default: undefined
14486
+ },
14487
+ title: {
14488
+ type: [String, Number, Boolean],
14489
+ default: undefined
14490
+ },
14467
14491
  ...makeComponentProps(),
14468
14492
  ...makeDensityProps()
14469
14493
  }, 'VCardItem');
@@ -14513,11 +14537,11 @@
14513
14537
  }, [hasTitle && vue.createVNode(VCardTitle, {
14514
14538
  "key": "title"
14515
14539
  }, {
14516
- default: () => [slots.title?.() ?? props.title]
14540
+ default: () => [slots.title?.() ?? vue.toDisplayString(props.title)]
14517
14541
  }), hasSubtitle && vue.createVNode(VCardSubtitle, {
14518
14542
  "key": "subtitle"
14519
14543
  }, {
14520
- default: () => [slots.subtitle?.() ?? props.subtitle]
14544
+ default: () => [slots.subtitle?.() ?? vue.toDisplayString(props.subtitle)]
14521
14545
  }), slots.default?.()]), hasAppend && vue.createVNode("div", {
14522
14546
  "key": "append",
14523
14547
  "class": "v-card-item__append"
@@ -14589,9 +14613,18 @@
14589
14613
  type: [Boolean, Object],
14590
14614
  default: true
14591
14615
  },
14592
- subtitle: [String, Number],
14593
- text: [String, Number],
14594
- title: [String, Number],
14616
+ subtitle: {
14617
+ type: [String, Number, Boolean],
14618
+ default: undefined
14619
+ },
14620
+ text: {
14621
+ type: [String, Number, Boolean],
14622
+ default: undefined
14623
+ },
14624
+ title: {
14625
+ type: [String, Number, Boolean],
14626
+ default: undefined
14627
+ },
14595
14628
  ...makeBorderProps(),
14596
14629
  ...makeComponentProps(),
14597
14630
  ...makeDensityProps(),
@@ -15060,7 +15093,7 @@
15060
15093
  vue.onMounted(startTimeout);
15061
15094
  function startTimeout() {
15062
15095
  if (!props.cycle || !windowRef.value) return;
15063
- slideTimeout = window.setTimeout(windowRef.value.group.next, +props.interval > 0 ? +props.interval : 6000);
15096
+ slideTimeout = window.setTimeout(windowRef.value.group.next, Number(props.interval) > 0 ? Number(props.interval) : 6000);
15064
15097
  }
15065
15098
  function restartTimeout() {
15066
15099
  window.clearTimeout(slideTimeout);
@@ -15786,7 +15819,7 @@
15786
15819
  const useSteps = props => {
15787
15820
  const min = vue.computed(() => parseFloat(props.min));
15788
15821
  const max = vue.computed(() => parseFloat(props.max));
15789
- const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
15822
+ const step = vue.computed(() => Number(props.step) > 0 ? parseFloat(props.step) : 0);
15790
15823
  const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
15791
15824
  function roundValue(value) {
15792
15825
  value = parseFloat(value);
@@ -18741,8 +18774,8 @@
18741
18774
  }, 'DataTable-paginate');
18742
18775
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18743
18776
  function createPagination(props) {
18744
- const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18745
- const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18777
+ const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1));
18778
+ const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10));
18746
18779
  return {
18747
18780
  page,
18748
18781
  itemsPerPage
@@ -19531,7 +19564,7 @@
19531
19564
  const minButtons = props.showFirstLastPage ? 5 : 3;
19532
19565
  return Math.max(0, Math.floor(
19533
19566
  // Round to two decimal places to avoid floating point errors
19534
- +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
19567
+ Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))));
19535
19568
  }
19536
19569
  const range = vue.computed(() => {
19537
19570
  if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
@@ -19602,7 +19635,7 @@
19602
19635
  ref,
19603
19636
  ellipsis: false,
19604
19637
  icon: true,
19605
- disabled: !!props.disabled || +props.length < 2,
19638
+ disabled: !!props.disabled || Number(props.length) < 2,
19606
19639
  color: isActive ? props.activeColor : props.color,
19607
19640
  'aria-current': isActive,
19608
19641
  'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
@@ -19651,7 +19684,7 @@
19651
19684
  refs.value[currentIndex]?.$el.focus();
19652
19685
  }
19653
19686
  function onKeydown(e) {
19654
- if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
19687
+ if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {
19655
19688
  page.value = page.value - 1;
19656
19689
  vue.nextTick(updateFocus);
19657
19690
  } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
@@ -19984,8 +20017,10 @@
19984
20017
  } else {
19985
20018
  if (!seenFixed) {
19986
20019
  item.lastFixed = true;
19987
- } else if (isNaN(+item.width)) {
20020
+ } else if (isNaN(Number(item.width))) {
19988
20021
  consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
20022
+ } else {
20023
+ item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);
19989
20024
  }
19990
20025
  seenFixed = true;
19991
20026
  }
@@ -21748,30 +21783,30 @@
21748
21783
  "class": ['v-date-picker-controls']
21749
21784
  }, [vue.createVNode(VBtn, {
21750
21785
  "class": "v-date-picker-controls__month-btn",
21786
+ "data-testid": "month-btn",
21751
21787
  "disabled": disableMonth.value,
21752
21788
  "text": props.text,
21753
21789
  "variant": "text",
21754
21790
  "rounded": true,
21755
21791
  "onClick": onClickMonth
21756
21792
  }, null), vue.createVNode(VBtn, {
21757
- "key": "mode-btn",
21758
21793
  "class": "v-date-picker-controls__mode-btn",
21794
+ "data-testid": "year-btn",
21759
21795
  "disabled": disableYear.value,
21760
21796
  "density": "comfortable",
21761
21797
  "icon": props.modeIcon,
21762
21798
  "variant": "text",
21763
21799
  "onClick": onClickYear
21764
- }, null), vue.createVNode(VSpacer, {
21765
- "key": "mode-spacer"
21766
- }, null), vue.createVNode("div", {
21767
- "key": "month-buttons",
21800
+ }, null), vue.createVNode(VSpacer, null, null), vue.createVNode("div", {
21768
21801
  "class": "v-date-picker-controls__month"
21769
21802
  }, [vue.createVNode(VBtn, {
21803
+ "data-testid": "prev-month",
21770
21804
  "disabled": disablePrev.value,
21771
21805
  "icon": props.prevIcon,
21772
21806
  "variant": "text",
21773
21807
  "onClick": onClickPrev
21774
21808
  }, null), vue.createVNode(VBtn, {
21809
+ "data-testid": "next-month",
21775
21810
  "disabled": disableNext.value,
21776
21811
  "icon": props.nextIcon,
21777
21812
  "variant": "text",
@@ -22118,7 +22153,7 @@
22118
22153
  model.value = [value];
22119
22154
  }
22120
22155
  }
22121
- return () => vue.createVNode("div", {
22156
+ useRender(() => vue.createVNode("div", {
22122
22157
  "class": "v-date-picker-month"
22123
22158
  }, [props.showWeek && vue.createVNode("div", {
22124
22159
  "key": "weeks",
@@ -22140,6 +22175,13 @@
22140
22175
  }, [weekDay])), daysInMonth.value.map((item, i) => {
22141
22176
  const slotProps = {
22142
22177
  props: {
22178
+ class: 'v-date-picker-month__day-btn',
22179
+ color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
22180
+ disabled: item.isDisabled,
22181
+ icon: true,
22182
+ ripple: false,
22183
+ text: item.localized,
22184
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
22143
22185
  onClick: () => onClick(item.date)
22144
22186
  },
22145
22187
  item,
@@ -22157,24 +22199,9 @@
22157
22199
  'v-date-picker-month__day--week-start': item.isWeekStart
22158
22200
  }],
22159
22201
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
22160
- }, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
22161
- "defaults": {
22162
- VBtn: {
22163
- class: 'v-date-picker-month__day-btn',
22164
- color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
22165
- disabled: item.isDisabled,
22166
- icon: true,
22167
- ripple: false,
22168
- text: item.localized,
22169
- variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
22170
- onClick: () => onClick(item.date)
22171
- }
22172
- }
22173
- }, {
22174
- default: () => [slots.day?.(slotProps) ?? vue.createVNode(VBtn, slotProps.props, null)]
22175
- })]);
22202
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? vue.createVNode(VBtn, slotProps.props, null))]);
22176
22203
  })])]
22177
- })]);
22204
+ })]));
22178
22205
  }
22179
22206
  });
22180
22207
 
@@ -23312,7 +23339,7 @@
23312
23339
  modelValue: _,
23313
23340
  ...inputProps
23314
23341
  } = VInput.filterProps(props);
23315
- const fieldProps = filterFieldProps(props);
23342
+ const fieldProps = VField.filterProps(props);
23316
23343
  return vue.createVNode(VInput, vue.mergeProps({
23317
23344
  "ref": vInputRef,
23318
23345
  "modelValue": props.multiple ? model.value : model.value[0],
@@ -24931,7 +24958,7 @@
24931
24958
  vue.watch(displayHeight, onScroll);
24932
24959
  vue.watch(() => contentRect.value?.height, onScroll);
24933
24960
  const scale = vue.computed(() => {
24934
- return 1 - clamp(+props.scale);
24961
+ return 1 - clamp(Number(props.scale));
24935
24962
  });
24936
24963
  let frame = -1;
24937
24964
  function onScroll() {
@@ -25352,7 +25379,7 @@
25352
25379
  themeClasses
25353
25380
  } = provideTheme(props);
25354
25381
  const rating = useProxiedModel(props, 'modelValue');
25355
- const normalizedValue = vue.computed(() => clamp(parseFloat(rating.value), 0, +props.length));
25382
+ const normalizedValue = vue.computed(() => clamp(parseFloat(rating.value), 0, Number(props.length)));
25356
25383
  const range = vue.computed(() => createRange(Number(props.length), 1));
25357
25384
  const increments = vue.computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
25358
25385
  const hoverIndex = vue.shallowRef(-1);
@@ -25963,7 +25990,7 @@
25963
25990
  const height = Math.abs(gridY * value);
25964
25991
  return {
25965
25992
  x: minX + index * gridX,
25966
- y: horizonY - height + +(value < 0) * height,
25993
+ y: horizonY - height + Number(value < 0) * height,
25967
25994
  height,
25968
25995
  value
25969
25996
  };
@@ -27401,10 +27428,10 @@
27401
27428
  }
27402
27429
  }
27403
27430
  const sizerRef = vue.ref();
27404
- const rows = vue.ref(+props.rows);
27431
+ const rows = vue.ref(Number(props.rows));
27405
27432
  const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
27406
27433
  vue.watchEffect(() => {
27407
- if (!props.autoGrow) rows.value = +props.rows;
27434
+ if (!props.autoGrow) rows.value = Number(props.rows);
27408
27435
  });
27409
27436
  function calculateInputHeight() {
27410
27437
  if (!props.autoGrow) return;
@@ -27447,7 +27474,7 @@
27447
27474
  modelValue: _,
27448
27475
  ...inputProps
27449
27476
  } = VInput.filterProps(props);
27450
- const fieldProps = filterFieldProps(props);
27477
+ const fieldProps = VField.filterProps(props);
27451
27478
  return vue.createVNode(VInput, vue.mergeProps({
27452
27479
  "ref": vInputRef,
27453
27480
  "modelValue": model.value,
@@ -28421,7 +28448,7 @@
28421
28448
  goTo
28422
28449
  };
28423
28450
  }
28424
- const version$1 = "3.7.15";
28451
+ const version$1 = "3.7.17";
28425
28452
  createVuetify$1.version = version$1;
28426
28453
 
28427
28454
  // Vue's inject() can only be used in setup
@@ -28446,7 +28473,7 @@
28446
28473
  ...options
28447
28474
  });
28448
28475
  };
28449
- const version = "3.7.15";
28476
+ const version = "3.7.17";
28450
28477
  createVuetify.version = version;
28451
28478
 
28452
28479
  exports.blueprints = index;