@vuetify/nightly 3.7.15-master.2025-03-06 → 3.7.15-master.2025-03-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 (98) hide show
  1. package/CHANGELOG.md +33 -3
  2. package/dist/json/attributes.json +3107 -3103
  3. package/dist/json/importMap-labs.json +24 -24
  4. package/dist/json/importMap.json +164 -164
  5. package/dist/json/tags.json +3 -2
  6. package/dist/json/web-types.json +5945 -5924
  7. package/dist/vuetify-labs.css +3283 -3283
  8. package/dist/vuetify-labs.d.ts +314 -142
  9. package/dist/vuetify-labs.esm.js +144 -126
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +143 -125
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +3835 -3835
  14. package/dist/vuetify.d.ts +264 -150
  15. package/dist/vuetify.esm.js +90 -69
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +89 -68
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +221 -219
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAppBar/index.d.mts +15 -6
  23. package/lib/components/VAutocomplete/index.d.mts +2 -2
  24. package/lib/components/VBadge/VBadge.mjs +2 -2
  25. package/lib/components/VBadge/VBadge.mjs.map +1 -1
  26. package/lib/components/VBtn/VBtn.mjs +6 -3
  27. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  28. package/lib/components/VBtn/index.d.mts +15 -6
  29. package/lib/components/VCard/VCard.mjs +12 -3
  30. package/lib/components/VCard/VCard.mjs.map +1 -1
  31. package/lib/components/VCard/VCardItem.mjs +11 -4
  32. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  33. package/lib/components/VCard/index.d.mts +75 -30
  34. package/lib/components/VCarousel/VCarousel.mjs +1 -1
  35. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  36. package/lib/components/VChip/VChip.mjs +6 -3
  37. package/lib/components/VChip/VChip.mjs.map +1 -1
  38. package/lib/components/VChip/index.d.mts +15 -6
  39. package/lib/components/VCombobox/index.d.mts +2 -2
  40. package/lib/components/VDataTable/composables/headers.mjs +2 -2
  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/VDatePicker/VDatePickerMonth.mjs +12 -21
  45. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  46. package/lib/components/VDatePicker/index.d.mts +3 -3
  47. package/lib/components/VFab/index.d.mts +15 -6
  48. package/lib/components/VList/VListItem.mjs +11 -5
  49. package/lib/components/VList/VListItem.mjs.map +1 -1
  50. package/lib/components/VList/index.d.mts +32 -14
  51. package/lib/components/VPagination/VPagination.mjs +3 -3
  52. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  53. package/lib/components/VParallax/VParallax.mjs +1 -1
  54. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  55. package/lib/components/VRating/VRating.mjs +1 -1
  56. package/lib/components/VRating/VRating.mjs.map +1 -1
  57. package/lib/components/VSelect/index.d.mts +2 -2
  58. package/lib/components/VSlider/slider.mjs +1 -1
  59. package/lib/components/VSlider/slider.mjs.map +1 -1
  60. package/lib/components/VSparkline/VBarline.mjs +1 -1
  61. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  62. package/lib/components/VTabs/index.d.mts +39 -24
  63. package/lib/components/VTextarea/VTextarea.mjs +2 -2
  64. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  65. package/lib/components/index.d.mts +209 -95
  66. package/lib/composables/stack.mjs +2 -2
  67. package/lib/composables/stack.mjs.map +1 -1
  68. package/lib/composables/validation.mjs +2 -2
  69. package/lib/composables/validation.mjs.map +1 -1
  70. package/lib/entry-bundler.mjs +1 -1
  71. package/lib/framework.mjs +1 -1
  72. package/lib/index.d.mts +55 -55
  73. package/lib/labs/VDateInput/VDateInput.mjs +3 -2
  74. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  75. package/lib/labs/VDateInput/index.d.mts +10 -10
  76. package/lib/labs/VFileUpload/VFileUpload.mjs +3 -2
  77. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -1
  78. package/lib/labs/VFileUpload/index.d.mts +32 -14
  79. package/lib/labs/VNumberInput/VNumberInput.mjs +5 -5
  80. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  81. package/lib/labs/VTimePicker/VTimePicker.mjs +30 -31
  82. package/lib/labs/VTimePicker/VTimePicker.mjs.map +1 -1
  83. package/lib/labs/VTimePicker/VTimePickerControls.mjs +14 -13
  84. package/lib/labs/VTimePicker/VTimePickerControls.mjs.map +1 -1
  85. package/lib/labs/VTimePicker/index.d.mts +35 -13
  86. package/lib/labs/VTimePicker/shared.mjs +2 -0
  87. package/lib/labs/VTimePicker/shared.mjs.map +1 -0
  88. package/lib/labs/VTreeview/index.d.mts +32 -14
  89. package/lib/labs/components.d.mts +107 -49
  90. package/lib/locale/adapters/vuetify.mjs +1 -1
  91. package/lib/locale/adapters/vuetify.mjs.map +1 -1
  92. package/lib/util/animation.mjs +8 -8
  93. package/lib/util/animation.mjs.map +1 -1
  94. package/lib/util/helpers.mjs +6 -4
  95. package/lib/util/helpers.mjs.map +1 -1
  96. package/package.json +1 -1
  97. package/lib/labs/VTimePicker/SelectingTimes.mjs +0 -10
  98. package/lib/labs/VTimePicker/SelectingTimes.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.15-master.2025-03-06
2
+ * Vuetify v3.7.15-master.2025-03-08
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -155,12 +155,14 @@
155
155
  let unit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'px';
156
156
  if (str == null || str === '') {
157
157
  return undefined;
158
- } else if (isNaN(+str)) {
158
+ }
159
+ const num = Number(str);
160
+ if (isNaN(num)) {
159
161
  return String(str);
160
- } else if (!isFinite(+str)) {
162
+ } else if (!isFinite(num)) {
161
163
  return undefined;
162
164
  } else {
163
- return `${Number(str)}${unit}`;
165
+ return `${num}${unit}`;
164
166
  }
165
167
  }
166
168
  function isObject(obj) {
@@ -694,16 +696,16 @@
694
696
  let ta, sx, sy, dx, dy;
695
697
  if (tx.startsWith('matrix3d(')) {
696
698
  ta = tx.slice(9, -1).split(/, /);
697
- sx = +ta[0];
698
- sy = +ta[5];
699
- dx = +ta[12];
700
- dy = +ta[13];
699
+ sx = Number(ta[0]);
700
+ sy = Number(ta[5]);
701
+ dx = Number(ta[12]);
702
+ dy = Number(ta[13]);
701
703
  } else if (tx.startsWith('matrix(')) {
702
704
  ta = tx.slice(7, -1).split(/, /);
703
- sx = +ta[0];
704
- sy = +ta[3];
705
- dx = +ta[4];
706
- dy = +ta[5];
705
+ sx = Number(ta[0]);
706
+ sy = Number(ta[3]);
707
+ dx = Number(ta[4]);
708
+ dy = Number(ta[5]);
707
709
  } else {
708
710
  return new Box(rect);
709
711
  }
@@ -2079,7 +2081,7 @@
2079
2081
  const LANG_PREFIX = '$vuetify.';
2080
2082
  const replace = (str, params) => {
2081
2083
  return str.replace(/\{(\d+)\}/g, (match, index) => {
2082
- return String(params[+index]);
2084
+ return String(params[Number(index)]);
2083
2085
  });
2084
2086
  };
2085
2087
  const createTranslateFunction = (current, fallback, messages) => {
@@ -5576,7 +5578,10 @@
5576
5578
  type: [Boolean, Object],
5577
5579
  default: true
5578
5580
  },
5579
- text: String,
5581
+ text: {
5582
+ type: [String, Number, Boolean],
5583
+ default: undefined
5584
+ },
5580
5585
  ...makeBorderProps(),
5581
5586
  ...makeComponentProps(),
5582
5587
  ...makeDensityProps(),
@@ -5732,7 +5737,7 @@
5732
5737
  }
5733
5738
  }
5734
5739
  }, {
5735
- default: () => [slots.default?.() ?? props.text]
5740
+ default: () => [slots.default?.() ?? vue.toDisplayString(props.text)]
5736
5741
  })]), !props.icon && hasAppend && vue.createVNode("span", {
5737
5742
  "key": "append",
5738
5743
  "class": "v-btn__append"
@@ -6740,7 +6745,7 @@
6740
6745
  const isPristine = vue.shallowRef(true);
6741
6746
  const isDirty = vue.computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));
6742
6747
  const errorMessages = vue.computed(() => {
6743
- return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, +props.maxErrors)) : internalErrorMessages.value;
6748
+ return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, Number(props.maxErrors))) : internalErrorMessages.value;
6744
6749
  });
6745
6750
  const validateOn = vue.computed(() => {
6746
6751
  let value = (props.validateOn ?? form.validateOn?.value) || 'input';
@@ -6831,7 +6836,7 @@
6831
6836
  const results = [];
6832
6837
  isValidating.value = true;
6833
6838
  for (const rule of props.rules) {
6834
- if (results.length >= +(props.maxErrors ?? 1)) {
6839
+ if (results.length >= Number(props.maxErrors ?? 1)) {
6835
6840
  break;
6836
6841
  }
6837
6842
  const handler = typeof rule === 'function' ? rule : () => rule;
@@ -7892,7 +7897,10 @@
7892
7897
  type: [Boolean, Object],
7893
7898
  default: true
7894
7899
  },
7895
- text: String,
7900
+ text: {
7901
+ type: [String, Number, Boolean],
7902
+ default: undefined
7903
+ },
7896
7904
  modelValue: {
7897
7905
  type: Boolean,
7898
7906
  default: true
@@ -8061,7 +8069,7 @@
8061
8069
  toggle: group?.toggle,
8062
8070
  value: group?.value.value,
8063
8071
  disabled: props.disabled
8064
- }) ?? props.text]), hasAppend && vue.createVNode("div", {
8072
+ }) ?? vue.toDisplayString(props.text)]), hasAppend && vue.createVNode("div", {
8065
8073
  "key": "append",
8066
8074
  "class": "v-chip__append"
8067
8075
  }, [!slots.append ? vue.createVNode(vue.Fragment, null, [props.appendIcon && vue.createVNode(VIcon, {
@@ -8940,8 +8948,14 @@
8940
8948
  default: true
8941
8949
  },
8942
8950
  slim: Boolean,
8943
- subtitle: [String, Number],
8944
- title: [String, Number],
8951
+ subtitle: {
8952
+ type: [String, Number, Boolean],
8953
+ default: undefined
8954
+ },
8955
+ title: {
8956
+ type: [String, Number, Boolean],
8957
+ default: undefined
8958
+ },
8945
8959
  value: null,
8946
8960
  onClick: EventProp(),
8947
8961
  onClickOnce: EventProp(),
@@ -9134,13 +9148,13 @@
9134
9148
  }, {
9135
9149
  default: () => [slots.title?.({
9136
9150
  title: props.title
9137
- }) ?? props.title]
9151
+ }) ?? vue.toDisplayString(props.title)]
9138
9152
  }), hasSubtitle && vue.createVNode(VListItemSubtitle, {
9139
9153
  "key": "subtitle"
9140
9154
  }, {
9141
9155
  default: () => [slots.subtitle?.({
9142
9156
  subtitle: props.subtitle
9143
- }) ?? props.subtitle]
9157
+ }) ?? vue.toDisplayString(props.subtitle)]
9144
9158
  }), slots.default?.(slotProps.value)]), hasAppend && vue.createVNode("div", {
9145
9159
  "key": "append",
9146
9160
  "class": "v-list-item__append"
@@ -10741,10 +10755,10 @@
10741
10755
  activeChildren: new Set()
10742
10756
  });
10743
10757
  vue.provide(StackSymbol, stack);
10744
- const _zIndex = vue.shallowRef(+zIndex.value);
10758
+ const _zIndex = vue.shallowRef(Number(zIndex.value));
10745
10759
  useToggleScope(isActive, () => {
10746
10760
  const lastZIndex = globalStack.at(-1)?.[1];
10747
- _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
10761
+ _zIndex.value = lastZIndex ? lastZIndex + 10 : Number(zIndex.value);
10748
10762
  if (createStackEntry) {
10749
10763
  globalStack.push([vm.uid, _zIndex.value]);
10750
10764
  }
@@ -13526,11 +13540,11 @@
13526
13540
  locationStyles
13527
13541
  } = useLocation(props, true, side => {
13528
13542
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
13529
- return base + (['top', 'bottom'].includes(side) ? +(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? +(props.offsetX ?? 0) : 0);
13543
+ return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
13530
13544
  });
13531
13545
  useRender(() => {
13532
13546
  const value = Number(props.content);
13533
- const content = !props.max || isNaN(value) ? props.content : value <= +props.max ? value : `${props.max}+`;
13547
+ const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
13534
13548
  const [badgeAttrs, attrs] = pickWithRest(ctx.attrs, ['aria-atomic', 'aria-label', 'aria-live', 'role', 'title']);
13535
13549
  return vue.createVNode(props.tag, vue.mergeProps({
13536
13550
  "class": ['v-badge', {
@@ -14229,8 +14243,14 @@
14229
14243
  appendIcon: IconValue,
14230
14244
  prependAvatar: String,
14231
14245
  prependIcon: IconValue,
14232
- subtitle: [String, Number],
14233
- title: [String, Number],
14246
+ subtitle: {
14247
+ type: [String, Number, Boolean],
14248
+ default: undefined
14249
+ },
14250
+ title: {
14251
+ type: [String, Number, Boolean],
14252
+ default: undefined
14253
+ },
14234
14254
  ...makeComponentProps(),
14235
14255
  ...makeDensityProps()
14236
14256
  }, 'VCardItem');
@@ -14280,11 +14300,11 @@
14280
14300
  }, [hasTitle && vue.createVNode(VCardTitle, {
14281
14301
  "key": "title"
14282
14302
  }, {
14283
- default: () => [slots.title?.() ?? props.title]
14303
+ default: () => [slots.title?.() ?? vue.toDisplayString(props.title)]
14284
14304
  }), hasSubtitle && vue.createVNode(VCardSubtitle, {
14285
14305
  "key": "subtitle"
14286
14306
  }, {
14287
- default: () => [slots.subtitle?.() ?? props.subtitle]
14307
+ default: () => [slots.subtitle?.() ?? vue.toDisplayString(props.subtitle)]
14288
14308
  }), slots.default?.()]), hasAppend && vue.createVNode("div", {
14289
14309
  "key": "append",
14290
14310
  "class": "v-card-item__append"
@@ -14356,9 +14376,18 @@
14356
14376
  type: [Boolean, Object],
14357
14377
  default: true
14358
14378
  },
14359
- subtitle: [String, Number],
14360
- text: [String, Number],
14361
- title: [String, Number],
14379
+ subtitle: {
14380
+ type: [String, Number, Boolean],
14381
+ default: undefined
14382
+ },
14383
+ text: {
14384
+ type: [String, Number, Boolean],
14385
+ default: undefined
14386
+ },
14387
+ title: {
14388
+ type: [String, Number, Boolean],
14389
+ default: undefined
14390
+ },
14362
14391
  ...makeBorderProps(),
14363
14392
  ...makeComponentProps(),
14364
14393
  ...makeDensityProps(),
@@ -14827,7 +14856,7 @@
14827
14856
  vue.onMounted(startTimeout);
14828
14857
  function startTimeout() {
14829
14858
  if (!props.cycle || !windowRef.value) return;
14830
- slideTimeout = window.setTimeout(windowRef.value.group.next, +props.interval > 0 ? +props.interval : 6000);
14859
+ slideTimeout = window.setTimeout(windowRef.value.group.next, Number(props.interval) > 0 ? Number(props.interval) : 6000);
14831
14860
  }
14832
14861
  function restartTimeout() {
14833
14862
  window.clearTimeout(slideTimeout);
@@ -15553,7 +15582,7 @@
15553
15582
  const useSteps = props => {
15554
15583
  const min = vue.computed(() => parseFloat(props.min));
15555
15584
  const max = vue.computed(() => parseFloat(props.max));
15556
- const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
15585
+ const step = vue.computed(() => Number(props.step) > 0 ? parseFloat(props.step) : 0);
15557
15586
  const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
15558
15587
  function roundValue(value) {
15559
15588
  value = parseFloat(value);
@@ -18508,8 +18537,8 @@
18508
18537
  }, 'DataTable-paginate');
18509
18538
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18510
18539
  function createPagination(props) {
18511
- const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18512
- const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18540
+ const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1));
18541
+ const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10));
18513
18542
  return {
18514
18543
  page,
18515
18544
  itemsPerPage
@@ -19298,7 +19327,7 @@
19298
19327
  const minButtons = props.showFirstLastPage ? 5 : 3;
19299
19328
  return Math.max(0, Math.floor(
19300
19329
  // Round to two decimal places to avoid floating point errors
19301
- +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
19330
+ Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))));
19302
19331
  }
19303
19332
  const range = vue.computed(() => {
19304
19333
  if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
@@ -19369,7 +19398,7 @@
19369
19398
  ref,
19370
19399
  ellipsis: false,
19371
19400
  icon: true,
19372
- disabled: !!props.disabled || +props.length < 2,
19401
+ disabled: !!props.disabled || Number(props.length) < 2,
19373
19402
  color: isActive ? props.activeColor : props.color,
19374
19403
  'aria-current': isActive,
19375
19404
  'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
@@ -19418,7 +19447,7 @@
19418
19447
  refs.value[currentIndex]?.$el.focus();
19419
19448
  }
19420
19449
  function onKeydown(e) {
19421
- if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
19450
+ if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {
19422
19451
  page.value = page.value - 1;
19423
19452
  vue.nextTick(updateFocus);
19424
19453
  } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
@@ -19751,10 +19780,10 @@
19751
19780
  } else {
19752
19781
  if (!seenFixed) {
19753
19782
  item.lastFixed = true;
19754
- } else if (isNaN(+item.width)) {
19783
+ } else if (isNaN(Number(item.width))) {
19755
19784
  consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
19756
19785
  } else {
19757
- item.minWidth = Math.max(+item.width || 0, +item.minWidth || 0);
19786
+ item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);
19758
19787
  }
19759
19788
  seenFixed = true;
19760
19789
  }
@@ -21887,7 +21916,7 @@
21887
21916
  model.value = [value];
21888
21917
  }
21889
21918
  }
21890
- return () => vue.createVNode("div", {
21919
+ useRender(() => vue.createVNode("div", {
21891
21920
  "class": "v-date-picker-month"
21892
21921
  }, [props.showWeek && vue.createVNode("div", {
21893
21922
  "key": "weeks",
@@ -21909,6 +21938,13 @@
21909
21938
  }, [weekDay])), daysInMonth.value.map((item, i) => {
21910
21939
  const slotProps = {
21911
21940
  props: {
21941
+ class: 'v-date-picker-month__day-btn',
21942
+ color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
21943
+ disabled: item.isDisabled,
21944
+ icon: true,
21945
+ ripple: false,
21946
+ text: item.localized,
21947
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
21912
21948
  onClick: () => onClick(item.date)
21913
21949
  },
21914
21950
  item,
@@ -21926,24 +21962,9 @@
21926
21962
  'v-date-picker-month__day--week-start': item.isWeekStart
21927
21963
  }],
21928
21964
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
21929
- }, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
21930
- "defaults": {
21931
- VBtn: {
21932
- class: 'v-date-picker-month__day-btn',
21933
- color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
21934
- disabled: item.isDisabled,
21935
- icon: true,
21936
- ripple: false,
21937
- text: item.localized,
21938
- variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
21939
- onClick: () => onClick(item.date)
21940
- }
21941
- }
21942
- }, {
21943
- default: () => [slots.day?.(slotProps) ?? vue.createVNode(VBtn, slotProps.props, null)]
21944
- })]);
21965
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? vue.createVNode(VBtn, slotProps.props, null))]);
21945
21966
  })])]
21946
- })]);
21967
+ })]));
21947
21968
  }
21948
21969
  });
21949
21970
 
@@ -24700,7 +24721,7 @@
24700
24721
  vue.watch(displayHeight, onScroll);
24701
24722
  vue.watch(() => contentRect.value?.height, onScroll);
24702
24723
  const scale = vue.computed(() => {
24703
- return 1 - clamp(+props.scale);
24724
+ return 1 - clamp(Number(props.scale));
24704
24725
  });
24705
24726
  let frame = -1;
24706
24727
  function onScroll() {
@@ -25121,7 +25142,7 @@
25121
25142
  themeClasses
25122
25143
  } = provideTheme(props);
25123
25144
  const rating = useProxiedModel(props, 'modelValue');
25124
- const normalizedValue = vue.computed(() => clamp(parseFloat(rating.value), 0, +props.length));
25145
+ const normalizedValue = vue.computed(() => clamp(parseFloat(rating.value), 0, Number(props.length)));
25125
25146
  const range = vue.computed(() => createRange(Number(props.length), 1));
25126
25147
  const increments = vue.computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
25127
25148
  const hoverIndex = vue.shallowRef(-1);
@@ -25732,7 +25753,7 @@
25732
25753
  const height = Math.abs(gridY * value);
25733
25754
  return {
25734
25755
  x: minX + index * gridX,
25735
- y: horizonY - height + +(value < 0) * height,
25756
+ y: horizonY - height + Number(value < 0) * height,
25736
25757
  height,
25737
25758
  value
25738
25759
  };
@@ -27170,10 +27191,10 @@
27170
27191
  }
27171
27192
  }
27172
27193
  const sizerRef = vue.ref();
27173
- const rows = vue.ref(+props.rows);
27194
+ const rows = vue.ref(Number(props.rows));
27174
27195
  const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
27175
27196
  vue.watchEffect(() => {
27176
- if (!props.autoGrow) rows.value = +props.rows;
27197
+ if (!props.autoGrow) rows.value = Number(props.rows);
27177
27198
  });
27178
27199
  function calculateInputHeight() {
27179
27200
  if (!props.autoGrow) return;
@@ -28220,8 +28241,8 @@
28220
28241
  prependIcon: '$calendar'
28221
28242
  }),
28222
28243
  ...omit(makeVDatePickerProps({
28223
- weeksInMonth: 'dynamic',
28224
- hideHeader: true
28244
+ hideHeader: true,
28245
+ showAdjacentMonths: true
28225
28246
  }), ['active', 'location', 'rounded'])
28226
28247
  }, 'VDateInput');
28227
28248
  const VDateInput = genericComponent()({
@@ -28305,6 +28326,7 @@
28305
28326
  "onUpdate:modelValue": $event => menu.value = $event,
28306
28327
  "activator": "parent",
28307
28328
  "min-width": "0",
28329
+ "eager": isFocused.value,
28308
28330
  "location": props.location,
28309
28331
  "closeOnContentClick": false,
28310
28332
  "openOnClick": false
@@ -28544,8 +28566,9 @@
28544
28566
  inputRef.value?.click();
28545
28567
  }
28546
28568
  function onClickRemove(index) {
28547
- model.value = model.value.filter((_, i) => i !== index);
28548
- if (model.value.length > 0 || !inputRef.value) return;
28569
+ const newValue = model.value.filter((_, i) => i !== index);
28570
+ model.value = newValue;
28571
+ if (newValue.length > 0 || !inputRef.value) return;
28549
28572
  inputRef.value.value = '';
28550
28573
  }
28551
28574
  useRender(() => {
@@ -28756,7 +28779,7 @@
28756
28779
  return isFocused.value ? Number(fixed).toString() // trim zeros
28757
28780
  : fixed;
28758
28781
  }
28759
- const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(+val, props.min, props.max));
28782
+ const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
28760
28783
  const _inputText = vue.shallowRef(null);
28761
28784
  vue.watchEffect(() => {
28762
28785
  if (isFocused.value && !controlsDisabled.value) ; else if (model.value == null) {
@@ -28771,8 +28794,8 @@
28771
28794
  if (val === null || val === '') {
28772
28795
  model.value = null;
28773
28796
  _inputText.value = null;
28774
- } else if (!isNaN(+val) && +val <= props.max && +val >= props.min) {
28775
- model.value = +val;
28797
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
28798
+ model.value = Number(val);
28776
28799
  _inputText.value = val;
28777
28800
  }
28778
28801
  }
@@ -28896,8 +28919,8 @@
28896
28919
  if (controlsDisabled.value) return;
28897
28920
  if (!vTextFieldRef.value) return;
28898
28921
  const actualText = vTextFieldRef.value.value;
28899
- if (actualText && !isNaN(+actualText)) {
28900
- inputText.value = correctPrecision(clamp(+actualText, props.min, props.max));
28922
+ if (actualText && !isNaN(Number(actualText))) {
28923
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
28901
28924
  } else {
28902
28925
  inputText.value = null;
28903
28926
  }
@@ -29771,14 +29794,7 @@
29771
29794
  }
29772
29795
  });
29773
29796
 
29774
- // @ts-nocheck
29775
- /* eslint-disable */
29776
- var SelectingTimes = /*#__PURE__*/function (SelectingTimes) {
29777
- SelectingTimes[SelectingTimes["Hour"] = 1] = "Hour";
29778
- SelectingTimes[SelectingTimes["Minute"] = 2] = "Minute";
29779
- SelectingTimes[SelectingTimes["Second"] = 3] = "Second";
29780
- return SelectingTimes;
29781
- }(SelectingTimes || {});
29797
+ // Types
29782
29798
 
29783
29799
  const makeVTimePickerControlsProps = propsFactory({
29784
29800
  ampm: Boolean,
@@ -29792,15 +29808,15 @@
29792
29808
  period: String,
29793
29809
  readonly: Boolean,
29794
29810
  useSeconds: Boolean,
29795
- selecting: Number,
29796
- value: Number
29811
+ value: Number,
29812
+ viewMode: String
29797
29813
  }, 'VTimePickerControls');
29798
29814
  const VTimePickerControls = genericComponent()({
29799
29815
  name: 'VTimePickerControls',
29800
29816
  props: makeVTimePickerControlsProps(),
29801
29817
  emits: {
29802
29818
  'update:period': data => true,
29803
- 'update:selecting': data => true
29819
+ 'update:viewMode': data => true
29804
29820
  },
29805
29821
  setup(props, _ref) {
29806
29822
  let {
@@ -29823,8 +29839,8 @@
29823
29839
  'v-time-picker-controls__time--with-seconds': props.useSeconds
29824
29840
  }
29825
29841
  }, [vue.createVNode(VBtn, {
29826
- "active": props.selecting === 1,
29827
- "color": props.selecting === 1 ? props.color : undefined,
29842
+ "active": props.viewMode === 'hour',
29843
+ "color": props.viewMode === 'hour' ? props.color : undefined,
29828
29844
  "disabled": props.disabled,
29829
29845
  "variant": "tonal",
29830
29846
  "class": {
@@ -29833,24 +29849,24 @@
29833
29849
  'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29834
29850
  },
29835
29851
  "text": props.hour == null ? '--' : pad(`${hour}`),
29836
- "onClick": () => emit('update:selecting', SelectingTimes.Hour)
29852
+ "onClick": () => emit('update:viewMode', 'hour')
29837
29853
  }, null), vue.createVNode("span", {
29838
29854
  "class": ['v-time-picker-controls__time__separator', {
29839
29855
  'v-time-picker-controls--with-seconds__time__separator': props.useSeconds
29840
29856
  }]
29841
29857
  }, [vue.createTextVNode(":")]), vue.createVNode(VBtn, {
29842
- "active": props.selecting === 2,
29843
- "color": props.selecting === 2 ? props.color : undefined,
29858
+ "active": props.viewMode === 'minute',
29859
+ "color": props.viewMode === 'minute' ? props.color : undefined,
29844
29860
  "class": {
29845
29861
  'v-time-picker-controls__time__btn': true,
29846
- 'v-time-picker-controls__time__btn__active': props.selecting === 2,
29862
+ 'v-time-picker-controls__time__btn__active': props.viewMode === 'minute',
29847
29863
  'v-time-picker-controls__time--with-ampm__btn': props.ampm,
29848
29864
  'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29849
29865
  },
29850
29866
  "disabled": props.disabled,
29851
29867
  "variant": "tonal",
29852
29868
  "text": props.minute == null ? '--' : pad(props.minute),
29853
- "onClick": () => emit('update:selecting', SelectingTimes.Minute)
29869
+ "onClick": () => emit('update:viewMode', 'minute')
29854
29870
  }, null), props.useSeconds && vue.createVNode("span", {
29855
29871
  "class": ['v-time-picker-controls__time__separator', {
29856
29872
  'v-time-picker-controls--with-seconds__time__separator': props.useSeconds
@@ -29858,11 +29874,13 @@
29858
29874
  "key": "secondsDivider"
29859
29875
  }, [vue.createTextVNode(":")]), props.useSeconds && vue.createVNode(VBtn, {
29860
29876
  "key": "secondsVal",
29877
+ "active": props.viewMode === 'second',
29878
+ "color": props.viewMode === 'second' ? props.color : undefined,
29861
29879
  "variant": "tonal",
29862
- "onClick": () => emit('update:selecting', SelectingTimes.Second),
29880
+ "onClick": () => emit('update:viewMode', 'second'),
29863
29881
  "class": {
29864
29882
  'v-time-picker-controls__time__btn': true,
29865
- 'v-time-picker-controls__time__btn__active': props.selecting === 3,
29883
+ 'v-time-picker-controls__time__btn__active': props.viewMode === 'second',
29866
29884
  'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29867
29885
  },
29868
29886
  "disabled": props.disabled,
@@ -29907,11 +29925,6 @@
29907
29925
  const rangeHours12am = createRange(12);
29908
29926
  const rangeHours12pm = rangeHours12am.map(v => v + 12);
29909
29927
  createRange(60);
29910
- const selectingNames = {
29911
- 1: 'hour',
29912
- 2: 'minute',
29913
- 3: 'second'
29914
- };
29915
29928
  const makeVTimePickerProps = propsFactory({
29916
29929
  allowedHours: [Function, Array],
29917
29930
  allowedMinutes: [Function, Array],
@@ -29924,6 +29937,10 @@
29924
29937
  },
29925
29938
  max: String,
29926
29939
  min: String,
29940
+ viewMode: {
29941
+ type: String,
29942
+ default: 'hour'
29943
+ },
29927
29944
  modelValue: null,
29928
29945
  readonly: Boolean,
29929
29946
  scrollable: Boolean,
@@ -29940,7 +29957,8 @@
29940
29957
  'update:minute': val => true,
29941
29958
  'update:period': val => true,
29942
29959
  'update:second': val => true,
29943
- 'update:modelValue': val => true
29960
+ 'update:modelValue': val => true,
29961
+ 'update:viewMode': val => true
29944
29962
  },
29945
29963
  setup(props, _ref) {
29946
29964
  let {
@@ -29957,7 +29975,7 @@
29957
29975
  const lazyInputMinute = vue.ref(null);
29958
29976
  const lazyInputSecond = vue.ref(null);
29959
29977
  const period = vue.ref('am');
29960
- const selecting = vue.ref(SelectingTimes.Hour);
29978
+ const viewMode = useProxiedModel(props, 'viewMode', 'hour');
29961
29979
  const controlsRef = vue.ref(null);
29962
29980
  const clockRef = vue.ref(null);
29963
29981
  const isAllowedHourCb = vue.computed(() => {
@@ -29971,7 +29989,7 @@
29971
29989
  const minHour = props.min ? Number(props.min.split(':')[0]) : 0;
29972
29990
  const maxHour = props.max ? Number(props.max.split(':')[0]) : 23;
29973
29991
  return val => {
29974
- return val >= minHour * 1 && val <= maxHour * 1 && (!cb || cb(val));
29992
+ return val >= Number(minHour) && val <= Number(maxHour) && (!cb || cb(val));
29975
29993
  };
29976
29994
  });
29977
29995
  const isAllowedMinuteCb = vue.computed(() => {
@@ -29987,8 +30005,8 @@
29987
30005
  }
29988
30006
  const [minHour, minMinute] = props.min ? props.min.split(':').map(Number) : [0, 0];
29989
30007
  const [maxHour, maxMinute] = props.max ? props.max.split(':').map(Number) : [23, 59];
29990
- const minTime = minHour * 60 + minMinute * 1;
29991
- const maxTime = maxHour * 60 + maxMinute * 1;
30008
+ const minTime = minHour * 60 + Number(minMinute);
30009
+ const maxTime = maxHour * 60 + Number(maxMinute);
29992
30010
  return val => {
29993
30011
  const time = 60 * inputHour.value + val;
29994
30012
  return time >= minTime && time <= maxTime && isHourAllowed && (!cb || cb(val));
@@ -30008,8 +30026,8 @@
30008
30026
  }
30009
30027
  const [minHour, minMinute, minSecond] = props.min ? props.min.split(':').map(Number) : [0, 0, 0];
30010
30028
  const [maxHour, maxMinute, maxSecond] = props.max ? props.max.split(':').map(Number) : [23, 59, 59];
30011
- const minTime = minHour * 3600 + minMinute * 60 + (minSecond || 0) * 1;
30012
- const maxTime = maxHour * 3600 + maxMinute * 60 + (maxSecond || 0) * 1;
30029
+ const minTime = minHour * 3600 + minMinute * 60 + Number(minSecond || 0);
30030
+ const maxTime = maxHour * 3600 + maxMinute * 60 + Number(maxSecond || 0);
30013
30031
  return val => {
30014
30032
  const time = 3600 * inputHour.value + 60 * inputMinute.value + val;
30015
30033
  return time >= minTime && time <= maxTime && isMinuteAllowed && (!cb || cb(val));
@@ -30075,16 +30093,16 @@
30075
30093
  return true;
30076
30094
  }
30077
30095
  function onInput(value) {
30078
- if (selecting.value === SelectingTimes.Hour) {
30096
+ if (viewMode.value === 'hour') {
30079
30097
  inputHour.value = isAmPm.value ? convert12to24(value, period.value) : value;
30080
- } else if (selecting.value === SelectingTimes.Minute) {
30098
+ } else if (viewMode.value === 'minute') {
30081
30099
  inputMinute.value = value;
30082
30100
  } else {
30083
30101
  inputSecond.value = value;
30084
30102
  }
30085
30103
  }
30086
30104
  function onChange(value) {
30087
- switch (selectingNames[selecting.value]) {
30105
+ switch (viewMode.value || 'hour') {
30088
30106
  case 'hour':
30089
30107
  emit('update:hour', value);
30090
30108
  break;
@@ -30096,10 +30114,10 @@
30096
30114
  break;
30097
30115
  }
30098
30116
  const emitChange = inputHour.value !== null && inputMinute.value !== null && (props.useSeconds ? inputSecond.value !== null : true);
30099
- if (selecting.value === SelectingTimes.Hour) {
30100
- selecting.value = SelectingTimes.Minute;
30101
- } else if (props.useSeconds && selecting.value === SelectingTimes.Minute) {
30102
- selecting.value = SelectingTimes.Second;
30117
+ if (viewMode.value === 'hour') {
30118
+ viewMode.value = 'minute';
30119
+ } else if (props.useSeconds && viewMode.value === 'minute') {
30120
+ viewMode.value = 'second';
30103
30121
  }
30104
30122
  if (inputHour.value === lazyInputHour.value && inputMinute.value === lazyInputMinute.value && (!props.useSeconds || inputSecond.value === lazyInputSecond.value)) return;
30105
30123
  const time = genValue();
@@ -30128,20 +30146,20 @@
30128
30146
  "minute": inputMinute.value,
30129
30147
  "period": period.value,
30130
30148
  "second": inputSecond.value,
30131
- "selecting": selecting.value,
30149
+ "viewMode": viewMode.value,
30132
30150
  "onUpdate:period": val => setPeriod(val),
30133
- "onUpdate:selecting": value => selecting.value = value,
30151
+ "onUpdate:viewMode": value => viewMode.value = value,
30134
30152
  "ref": controlsRef
30135
30153
  }), null),
30136
30154
  default: () => vue.createVNode(VTimePickerClock, vue.mergeProps(timePickerClockProps, {
30137
- "allowedValues": selecting.value === SelectingTimes.Hour ? isAllowedHourCb.value : selecting.value === SelectingTimes.Minute ? isAllowedMinuteCb.value : isAllowedSecondCb.value,
30138
- "double": selecting.value === SelectingTimes.Hour && !isAmPm.value,
30139
- "format": selecting.value === SelectingTimes.Hour ? isAmPm.value ? convert24to12 : val => val : val => pad(val, 2),
30140
- "max": selecting.value === SelectingTimes.Hour ? isAmPm.value && period.value === 'am' ? 11 : 23 : 59,
30141
- "min": selecting.value === SelectingTimes.Hour && isAmPm.value && period.value === 'pm' ? 12 : 0,
30155
+ "allowedValues": viewMode.value === 'hour' ? isAllowedHourCb.value : viewMode.value === 'minute' ? isAllowedMinuteCb.value : isAllowedSecondCb.value,
30156
+ "double": viewMode.value === 'hour' && !isAmPm.value,
30157
+ "format": viewMode.value === 'hour' ? isAmPm.value ? convert24to12 : val => val : val => pad(val, 2),
30158
+ "max": viewMode.value === 'hour' ? isAmPm.value && period.value === 'am' ? 11 : 23 : 59,
30159
+ "min": viewMode.value === 'hour' && isAmPm.value && period.value === 'pm' ? 12 : 0,
30142
30160
  "size": 20,
30143
- "step": selecting.value === SelectingTimes.Hour ? 1 : 5,
30144
- "modelValue": selecting.value === SelectingTimes.Hour ? inputHour.value : selecting.value === SelectingTimes.Minute ? inputMinute.value : inputSecond.value,
30161
+ "step": viewMode.value === 'hour' ? 1 : 5,
30162
+ "modelValue": viewMode.value === 'hour' ? inputHour.value : viewMode.value === 'minute' ? inputMinute.value : inputSecond.value,
30145
30163
  "onChange": onChange,
30146
30164
  "onInput": onInput,
30147
30165
  "ref": clockRef
@@ -31054,7 +31072,7 @@
31054
31072
  goTo
31055
31073
  };
31056
31074
  }
31057
- const version$1 = "3.7.15-master.2025-03-06";
31075
+ const version$1 = "3.7.15-master.2025-03-08";
31058
31076
  createVuetify$1.version = version$1;
31059
31077
 
31060
31078
  // Vue's inject() can only be used in setup
@@ -31307,7 +31325,7 @@
31307
31325
 
31308
31326
  /* eslint-disable local-rules/sort-imports */
31309
31327
 
31310
- const version = "3.7.15-master.2025-03-06";
31328
+ const version = "3.7.15-master.2025-03-08";
31311
31329
 
31312
31330
  /* eslint-disable local-rules/sort-imports */
31313
31331