vuetify 3.7.14 → 3.7.16

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 (198) hide show
  1. package/dist/json/attributes.json +3550 -3550
  2. package/dist/json/importMap-labs.json +28 -28
  3. package/dist/json/importMap.json +162 -162
  4. package/dist/json/tags.json +3 -3
  5. package/dist/json/web-types.json +6475 -6452
  6. package/dist/vuetify-labs.css +5395 -5391
  7. package/dist/vuetify-labs.d.ts +453 -215
  8. package/dist/vuetify-labs.esm.js +254 -151
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +253 -150
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +3635 -3635
  13. package/dist/vuetify.d.ts +389 -209
  14. package/dist/vuetify.esm.js +105 -70
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +104 -69
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +229 -227
  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/VDatePickerMonth.mjs +12 -21
  47. package/lib/components/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  48. package/lib/components/VDatePicker/index.d.mts +3 -3
  49. package/lib/components/VDialog/index.d.mts +21 -6
  50. package/lib/components/VFab/index.d.mts +15 -6
  51. package/lib/components/VList/VListItem.mjs +13 -5
  52. package/lib/components/VList/VListItem.mjs.map +1 -1
  53. package/lib/components/VList/index.d.mts +32 -14
  54. package/lib/components/VMenu/index.d.mts +21 -6
  55. package/lib/components/VOtpInput/VOtpInput.mjs +1 -1
  56. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  57. package/lib/components/VOverlay/VOverlay.mjs +10 -1
  58. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  59. package/lib/components/VOverlay/index.d.mts +6 -0
  60. package/lib/components/VPagination/VPagination.mjs +3 -3
  61. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  62. package/lib/components/VParallax/VParallax.mjs +1 -1
  63. package/lib/components/VParallax/VParallax.mjs.map +1 -1
  64. package/lib/components/VRating/VRating.mjs +1 -1
  65. package/lib/components/VRating/VRating.mjs.map +1 -1
  66. package/lib/components/VSelect/index.d.mts +23 -8
  67. package/lib/components/VSlider/slider.mjs +2 -1
  68. package/lib/components/VSlider/slider.mjs.map +1 -1
  69. package/lib/components/VSnackbar/index.d.mts +21 -6
  70. package/lib/components/VSparkline/VBarline.mjs +1 -1
  71. package/lib/components/VSparkline/VBarline.mjs.map +1 -1
  72. package/lib/components/VTabs/index.d.mts +39 -24
  73. package/lib/components/VTextarea/VTextarea.mjs +2 -2
  74. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  75. package/lib/components/VTooltip/index.d.mts +21 -6
  76. package/lib/components/index.d.mts +333 -153
  77. package/lib/composables/stack.mjs +2 -2
  78. package/lib/composables/stack.mjs.map +1 -1
  79. package/lib/composables/validation.mjs +2 -2
  80. package/lib/composables/validation.mjs.map +1 -1
  81. package/lib/entry-bundler.mjs +1 -1
  82. package/lib/framework.mjs +1 -1
  83. package/lib/index.d.mts +56 -56
  84. package/lib/labs/VDateInput/VDateInput.mjs +5 -4
  85. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  86. package/lib/labs/VDateInput/index.d.mts +10 -10
  87. package/lib/labs/VFileUpload/VFileUpload.css +5 -1
  88. package/lib/labs/VFileUpload/VFileUpload.mjs +3 -2
  89. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -1
  90. package/lib/labs/VFileUpload/VFileUpload.sass +4 -0
  91. package/lib/labs/VFileUpload/_variables.scss +1 -1
  92. package/lib/labs/VFileUpload/index.d.mts +32 -14
  93. package/lib/labs/VNumberInput/VNumberInput.mjs +60 -24
  94. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  95. package/lib/labs/VNumberInput/hold.mjs +31 -0
  96. package/lib/labs/VNumberInput/hold.mjs.map +1 -0
  97. package/lib/labs/VNumberInput/index.d.mts +1 -7
  98. package/lib/labs/VSnackbarQueue/index.d.mts +21 -6
  99. package/lib/labs/VTimePicker/VTimePicker.mjs +30 -31
  100. package/lib/labs/VTimePicker/VTimePicker.mjs.map +1 -1
  101. package/lib/labs/VTimePicker/VTimePickerControls.mjs +14 -13
  102. package/lib/labs/VTimePicker/VTimePickerControls.mjs.map +1 -1
  103. package/lib/labs/VTimePicker/index.d.mts +35 -13
  104. package/lib/labs/VTimePicker/shared.mjs +2 -0
  105. package/lib/labs/VTimePicker/shared.mjs.map +1 -0
  106. package/lib/labs/VTreeview/VTreeviewItem.mjs +11 -4
  107. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  108. package/lib/labs/VTreeview/index.d.mts +46 -22
  109. package/lib/labs/components.d.mts +143 -70
  110. package/lib/locale/adapters/vuetify.mjs +1 -1
  111. package/lib/locale/adapters/vuetify.mjs.map +1 -1
  112. package/lib/locale/af.mjs +42 -42
  113. package/lib/locale/af.mjs.map +1 -1
  114. package/lib/locale/az.mjs +7 -7
  115. package/lib/locale/az.mjs.map +1 -1
  116. package/lib/locale/bg.mjs +7 -7
  117. package/lib/locale/bg.mjs.map +1 -1
  118. package/lib/locale/ca.mjs +25 -25
  119. package/lib/locale/ca.mjs.map +1 -1
  120. package/lib/locale/ckb.mjs +29 -29
  121. package/lib/locale/ckb.mjs.map +1 -1
  122. package/lib/locale/cs.mjs +13 -13
  123. package/lib/locale/cs.mjs.map +1 -1
  124. package/lib/locale/da.mjs +22 -22
  125. package/lib/locale/da.mjs.map +1 -1
  126. package/lib/locale/el.mjs +41 -41
  127. package/lib/locale/el.mjs.map +1 -1
  128. package/lib/locale/es.mjs +26 -26
  129. package/lib/locale/es.mjs.map +1 -1
  130. package/lib/locale/et.mjs +29 -29
  131. package/lib/locale/et.mjs.map +1 -1
  132. package/lib/locale/fa.mjs +5 -5
  133. package/lib/locale/fa.mjs.map +1 -1
  134. package/lib/locale/fi.mjs +22 -22
  135. package/lib/locale/fi.mjs.map +1 -1
  136. package/lib/locale/fr.mjs +6 -6
  137. package/lib/locale/fr.mjs.map +1 -1
  138. package/lib/locale/he.mjs +29 -29
  139. package/lib/locale/he.mjs.map +1 -1
  140. package/lib/locale/hr.mjs +28 -28
  141. package/lib/locale/hr.mjs.map +1 -1
  142. package/lib/locale/hu.mjs +10 -10
  143. package/lib/locale/hu.mjs.map +1 -1
  144. package/lib/locale/id.mjs +30 -30
  145. package/lib/locale/id.mjs.map +1 -1
  146. package/lib/locale/it.mjs +7 -7
  147. package/lib/locale/it.mjs.map +1 -1
  148. package/lib/locale/ja.mjs +9 -9
  149. package/lib/locale/ja.mjs.map +1 -1
  150. package/lib/locale/km.mjs +6 -6
  151. package/lib/locale/km.mjs.map +1 -1
  152. package/lib/locale/ko.mjs +27 -27
  153. package/lib/locale/ko.mjs.map +1 -1
  154. package/lib/locale/lt.mjs +5 -5
  155. package/lib/locale/lt.mjs.map +1 -1
  156. package/lib/locale/lv.mjs +33 -33
  157. package/lib/locale/lv.mjs.map +1 -1
  158. package/lib/locale/nl.mjs +10 -10
  159. package/lib/locale/nl.mjs.map +1 -1
  160. package/lib/locale/no.mjs +11 -11
  161. package/lib/locale/no.mjs.map +1 -1
  162. package/lib/locale/pl.mjs +7 -7
  163. package/lib/locale/pl.mjs.map +1 -1
  164. package/lib/locale/pt.mjs +11 -11
  165. package/lib/locale/pt.mjs.map +1 -1
  166. package/lib/locale/ro.mjs +9 -9
  167. package/lib/locale/ro.mjs.map +1 -1
  168. package/lib/locale/ru.mjs +6 -6
  169. package/lib/locale/ru.mjs.map +1 -1
  170. package/lib/locale/sk.mjs +5 -5
  171. package/lib/locale/sk.mjs.map +1 -1
  172. package/lib/locale/sl.mjs +4 -4
  173. package/lib/locale/sl.mjs.map +1 -1
  174. package/lib/locale/sr-Cyrl.mjs +30 -30
  175. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  176. package/lib/locale/sr-Latn.mjs +28 -28
  177. package/lib/locale/sr-Latn.mjs.map +1 -1
  178. package/lib/locale/sv.mjs +17 -17
  179. package/lib/locale/sv.mjs.map +1 -1
  180. package/lib/locale/th.mjs +30 -30
  181. package/lib/locale/th.mjs.map +1 -1
  182. package/lib/locale/tr.mjs +31 -31
  183. package/lib/locale/tr.mjs.map +1 -1
  184. package/lib/locale/uk.mjs +29 -29
  185. package/lib/locale/uk.mjs.map +1 -1
  186. package/lib/locale/vi.mjs +28 -28
  187. package/lib/locale/vi.mjs.map +1 -1
  188. package/lib/locale/zh-Hans.mjs +31 -31
  189. package/lib/locale/zh-Hans.mjs.map +1 -1
  190. package/lib/locale/zh-Hant.mjs +31 -31
  191. package/lib/locale/zh-Hant.mjs.map +1 -1
  192. package/lib/util/animation.mjs +8 -8
  193. package/lib/util/animation.mjs.map +1 -1
  194. package/lib/util/helpers.mjs +6 -4
  195. package/lib/util/helpers.mjs.map +1 -1
  196. package/package.json +7 -2
  197. package/lib/labs/VTimePicker/SelectingTimes.mjs +0 -10
  198. package/lib/labs/VTimePicker/SelectingTimes.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.14
2
+ * Vuetify v3.7.16
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(),
@@ -9060,6 +9074,8 @@
9060
9074
  }
9061
9075
  }
9062
9076
  function onKeyDown(e) {
9077
+ const target = e.target;
9078
+ if (['INPUT', 'TEXTAREA'].includes(target.tagName)) return;
9063
9079
  if (e.key === 'Enter' || e.key === ' ') {
9064
9080
  e.preventDefault();
9065
9081
  e.target.dispatchEvent(new MouseEvent('click', e));
@@ -9132,13 +9148,13 @@
9132
9148
  }, {
9133
9149
  default: () => [slots.title?.({
9134
9150
  title: props.title
9135
- }) ?? props.title]
9151
+ }) ?? vue.toDisplayString(props.title)]
9136
9152
  }), hasSubtitle && vue.createVNode(VListItemSubtitle, {
9137
9153
  "key": "subtitle"
9138
9154
  }, {
9139
9155
  default: () => [slots.subtitle?.({
9140
9156
  subtitle: props.subtitle
9141
- }) ?? props.subtitle]
9157
+ }) ?? vue.toDisplayString(props.subtitle)]
9142
9158
  }), slots.default?.(slotProps.value)]), hasAppend && vue.createVNode("div", {
9143
9159
  "key": "append",
9144
9160
  "class": "v-list-item__append"
@@ -10739,10 +10755,10 @@
10739
10755
  activeChildren: new Set()
10740
10756
  });
10741
10757
  vue.provide(StackSymbol, stack);
10742
- const _zIndex = vue.shallowRef(+zIndex.value);
10758
+ const _zIndex = vue.shallowRef(Number(zIndex.value));
10743
10759
  useToggleScope(isActive, () => {
10744
10760
  const lastZIndex = globalStack.at(-1)?.[1];
10745
- _zIndex.value = lastZIndex ? lastZIndex + 10 : +zIndex.value;
10761
+ _zIndex.value = lastZIndex ? lastZIndex + 10 : Number(zIndex.value);
10746
10762
  if (createStackEntry) {
10747
10763
  globalStack.push([vm.uid, _zIndex.value]);
10748
10764
  }
@@ -10951,6 +10967,7 @@
10951
10967
  emits: {
10952
10968
  'click:outside': e => true,
10953
10969
  'update:modelValue': value => true,
10970
+ keydown: e => true,
10954
10971
  afterEnter: () => true,
10955
10972
  afterLeave: () => true
10956
10973
  },
@@ -11063,6 +11080,9 @@
11063
11080
  });
11064
11081
  function onKeydown(e) {
11065
11082
  if (e.key === 'Escape' && globalTop.value) {
11083
+ if (!contentEl.value?.contains(document.activeElement)) {
11084
+ emit('keydown', e);
11085
+ }
11066
11086
  if (!props.persistent) {
11067
11087
  isActive.value = false;
11068
11088
  if (contentEl.value?.contains(document.activeElement)) {
@@ -11071,6 +11091,10 @@
11071
11091
  } else animateClick();
11072
11092
  }
11073
11093
  }
11094
+ function onKeydownSelf(e) {
11095
+ if (e.key === 'Escape' && !globalTop.value) return;
11096
+ emit('keydown', e);
11097
+ }
11074
11098
  const router = useRouter();
11075
11099
  useToggleScope(() => props.closeOnBack, () => {
11076
11100
  useBackButton(router, next => {
@@ -11133,7 +11157,8 @@
11133
11157
  '--v-overlay-opacity': props.opacity,
11134
11158
  top: convertToUnit(top.value)
11135
11159
  }, props.style],
11136
- "ref": root
11160
+ "ref": root,
11161
+ "onKeydown": onKeydownSelf
11137
11162
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
11138
11163
  "color": scrimColor,
11139
11164
  "modelValue": isActive.value && !!props.scrim,
@@ -13524,11 +13549,11 @@
13524
13549
  locationStyles
13525
13550
  } = useLocation(props, true, side => {
13526
13551
  const base = props.floating ? props.dot ? 2 : 4 : props.dot ? 8 : 12;
13527
- return base + (['top', 'bottom'].includes(side) ? +(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? +(props.offsetX ?? 0) : 0);
13552
+ return base + (['top', 'bottom'].includes(side) ? Number(props.offsetY ?? 0) : ['left', 'right'].includes(side) ? Number(props.offsetX ?? 0) : 0);
13528
13553
  });
13529
13554
  useRender(() => {
13530
13555
  const value = Number(props.content);
13531
- const content = !props.max || isNaN(value) ? props.content : value <= +props.max ? value : `${props.max}+`;
13556
+ const content = !props.max || isNaN(value) ? props.content : value <= Number(props.max) ? value : `${props.max}+`;
13532
13557
  const [badgeAttrs, attrs] = pickWithRest(ctx.attrs, ['aria-atomic', 'aria-label', 'aria-live', 'role', 'title']);
13533
13558
  return vue.createVNode(props.tag, vue.mergeProps({
13534
13559
  "class": ['v-badge', {
@@ -14227,8 +14252,14 @@
14227
14252
  appendIcon: IconValue,
14228
14253
  prependAvatar: String,
14229
14254
  prependIcon: IconValue,
14230
- subtitle: [String, Number],
14231
- title: [String, Number],
14255
+ subtitle: {
14256
+ type: [String, Number, Boolean],
14257
+ default: undefined
14258
+ },
14259
+ title: {
14260
+ type: [String, Number, Boolean],
14261
+ default: undefined
14262
+ },
14232
14263
  ...makeComponentProps(),
14233
14264
  ...makeDensityProps()
14234
14265
  }, 'VCardItem');
@@ -14278,11 +14309,11 @@
14278
14309
  }, [hasTitle && vue.createVNode(VCardTitle, {
14279
14310
  "key": "title"
14280
14311
  }, {
14281
- default: () => [slots.title?.() ?? props.title]
14312
+ default: () => [slots.title?.() ?? vue.toDisplayString(props.title)]
14282
14313
  }), hasSubtitle && vue.createVNode(VCardSubtitle, {
14283
14314
  "key": "subtitle"
14284
14315
  }, {
14285
- default: () => [slots.subtitle?.() ?? props.subtitle]
14316
+ default: () => [slots.subtitle?.() ?? vue.toDisplayString(props.subtitle)]
14286
14317
  }), slots.default?.()]), hasAppend && vue.createVNode("div", {
14287
14318
  "key": "append",
14288
14319
  "class": "v-card-item__append"
@@ -14354,9 +14385,18 @@
14354
14385
  type: [Boolean, Object],
14355
14386
  default: true
14356
14387
  },
14357
- subtitle: [String, Number],
14358
- text: [String, Number],
14359
- title: [String, Number],
14388
+ subtitle: {
14389
+ type: [String, Number, Boolean],
14390
+ default: undefined
14391
+ },
14392
+ text: {
14393
+ type: [String, Number, Boolean],
14394
+ default: undefined
14395
+ },
14396
+ title: {
14397
+ type: [String, Number, Boolean],
14398
+ default: undefined
14399
+ },
14360
14400
  ...makeBorderProps(),
14361
14401
  ...makeComponentProps(),
14362
14402
  ...makeDensityProps(),
@@ -14825,7 +14865,7 @@
14825
14865
  vue.onMounted(startTimeout);
14826
14866
  function startTimeout() {
14827
14867
  if (!props.cycle || !windowRef.value) return;
14828
- slideTimeout = window.setTimeout(windowRef.value.group.next, +props.interval > 0 ? +props.interval : 6000);
14868
+ slideTimeout = window.setTimeout(windowRef.value.group.next, Number(props.interval) > 0 ? Number(props.interval) : 6000);
14829
14869
  }
14830
14870
  function restartTimeout() {
14831
14871
  window.clearTimeout(slideTimeout);
@@ -15551,7 +15591,7 @@
15551
15591
  const useSteps = props => {
15552
15592
  const min = vue.computed(() => parseFloat(props.min));
15553
15593
  const max = vue.computed(() => parseFloat(props.max));
15554
- const step = vue.computed(() => +props.step > 0 ? parseFloat(props.step) : 0);
15594
+ const step = vue.computed(() => Number(props.step) > 0 ? parseFloat(props.step) : 0);
15555
15595
  const decimals = vue.computed(() => Math.max(getDecimals(step.value), getDecimals(min.value)));
15556
15596
  function roundValue(value) {
15557
15597
  value = parseFloat(value);
@@ -15685,6 +15725,7 @@
15685
15725
  });
15686
15726
  }
15687
15727
  function onSliderMousedown(e) {
15728
+ if (e.button !== 0) return;
15688
15729
  e.preventDefault();
15689
15730
  handleStart(e);
15690
15731
  window.addEventListener('mousemove', onMouseMove, moveListenerOptions);
@@ -18505,8 +18546,8 @@
18505
18546
  }, 'DataTable-paginate');
18506
18547
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18507
18548
  function createPagination(props) {
18508
- const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18509
- const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18549
+ const page = useProxiedModel(props, 'page', undefined, value => Number(value ?? 1));
18550
+ const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => Number(value ?? 10));
18510
18551
  return {
18511
18552
  page,
18512
18553
  itemsPerPage
@@ -19295,7 +19336,7 @@
19295
19336
  const minButtons = props.showFirstLastPage ? 5 : 3;
19296
19337
  return Math.max(0, Math.floor(
19297
19338
  // Round to two decimal places to avoid floating point errors
19298
- +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
19339
+ Number(((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2))));
19299
19340
  }
19300
19341
  const range = vue.computed(() => {
19301
19342
  if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
@@ -19366,7 +19407,7 @@
19366
19407
  ref,
19367
19408
  ellipsis: false,
19368
19409
  icon: true,
19369
- disabled: !!props.disabled || +props.length < 2,
19410
+ disabled: !!props.disabled || Number(props.length) < 2,
19370
19411
  color: isActive ? props.activeColor : props.color,
19371
19412
  'aria-current': isActive,
19372
19413
  'aria-label': t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
@@ -19415,7 +19456,7 @@
19415
19456
  refs.value[currentIndex]?.$el.focus();
19416
19457
  }
19417
19458
  function onKeydown(e) {
19418
- if (e.key === keyValues.left && !props.disabled && page.value > +props.start) {
19459
+ if (e.key === keyValues.left && !props.disabled && page.value > Number(props.start)) {
19419
19460
  page.value = page.value - 1;
19420
19461
  vue.nextTick(updateFocus);
19421
19462
  } else if (e.key === keyValues.right && !props.disabled && page.value < start.value + length.value - 1) {
@@ -19748,8 +19789,10 @@
19748
19789
  } else {
19749
19790
  if (!seenFixed) {
19750
19791
  item.lastFixed = true;
19751
- } else if (isNaN(+item.width)) {
19792
+ } else if (isNaN(Number(item.width))) {
19752
19793
  consoleError(`Multiple fixed columns should have a static width (key: ${item.key})`);
19794
+ } else {
19795
+ item.minWidth = Math.max(Number(item.width) || 0, Number(item.minWidth) || 0);
19753
19796
  }
19754
19797
  seenFixed = true;
19755
19798
  }
@@ -21882,7 +21925,7 @@
21882
21925
  model.value = [value];
21883
21926
  }
21884
21927
  }
21885
- return () => vue.createVNode("div", {
21928
+ useRender(() => vue.createVNode("div", {
21886
21929
  "class": "v-date-picker-month"
21887
21930
  }, [props.showWeek && vue.createVNode("div", {
21888
21931
  "key": "weeks",
@@ -21904,6 +21947,13 @@
21904
21947
  }, [weekDay])), daysInMonth.value.map((item, i) => {
21905
21948
  const slotProps = {
21906
21949
  props: {
21950
+ class: 'v-date-picker-month__day-btn',
21951
+ color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
21952
+ disabled: item.isDisabled,
21953
+ icon: true,
21954
+ ripple: false,
21955
+ text: item.localized,
21956
+ variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
21907
21957
  onClick: () => onClick(item.date)
21908
21958
  },
21909
21959
  item,
@@ -21921,24 +21971,9 @@
21921
21971
  'v-date-picker-month__day--week-start': item.isWeekStart
21922
21972
  }],
21923
21973
  "data-v-date": !item.isDisabled ? item.isoDate : undefined
21924
- }, [(props.showAdjacentMonths || !item.isAdjacent) && vue.createVNode(VDefaultsProvider, {
21925
- "defaults": {
21926
- VBtn: {
21927
- class: 'v-date-picker-month__day-btn',
21928
- color: (item.isSelected || item.isToday) && !item.isDisabled ? props.color : undefined,
21929
- disabled: item.isDisabled,
21930
- icon: true,
21931
- ripple: false,
21932
- text: item.localized,
21933
- variant: item.isDisabled ? item.isToday ? 'outlined' : 'text' : item.isToday && !item.isSelected ? 'outlined' : 'flat',
21934
- onClick: () => onClick(item.date)
21935
- }
21936
- }
21937
- }, {
21938
- default: () => [slots.day?.(slotProps) ?? vue.createVNode(VBtn, slotProps.props, null)]
21939
- })]);
21974
+ }, [(props.showAdjacentMonths || !item.isAdjacent) && (slots.day?.(slotProps) ?? vue.createVNode(VBtn, slotProps.props, null))]);
21940
21975
  })])]
21941
- })]);
21976
+ })]));
21942
21977
  }
21943
21978
  });
21944
21979
 
@@ -24599,7 +24634,7 @@
24599
24634
  "disabled": props.disabled,
24600
24635
  "inputmode": props.type === 'number' ? 'numeric' : 'text',
24601
24636
  "min": props.type === 'number' ? 0 : undefined,
24602
- "maxlength": "1",
24637
+ "maxlength": i === 0 ? length.value : '1',
24603
24638
  "placeholder": props.placeholder,
24604
24639
  "type": props.type === 'number' ? 'text' : props.type,
24605
24640
  "value": model.value[i],
@@ -24695,7 +24730,7 @@
24695
24730
  vue.watch(displayHeight, onScroll);
24696
24731
  vue.watch(() => contentRect.value?.height, onScroll);
24697
24732
  const scale = vue.computed(() => {
24698
- return 1 - clamp(+props.scale);
24733
+ return 1 - clamp(Number(props.scale));
24699
24734
  });
24700
24735
  let frame = -1;
24701
24736
  function onScroll() {
@@ -25116,7 +25151,7 @@
25116
25151
  themeClasses
25117
25152
  } = provideTheme(props);
25118
25153
  const rating = useProxiedModel(props, 'modelValue');
25119
- const normalizedValue = vue.computed(() => clamp(parseFloat(rating.value), 0, +props.length));
25154
+ const normalizedValue = vue.computed(() => clamp(parseFloat(rating.value), 0, Number(props.length)));
25120
25155
  const range = vue.computed(() => createRange(Number(props.length), 1));
25121
25156
  const increments = vue.computed(() => range.value.flatMap(v => props.halfIncrements ? [v - 0.5, v] : [v]));
25122
25157
  const hoverIndex = vue.shallowRef(-1);
@@ -25727,7 +25762,7 @@
25727
25762
  const height = Math.abs(gridY * value);
25728
25763
  return {
25729
25764
  x: minX + index * gridX,
25730
- y: horizonY - height + +(value < 0) * height,
25765
+ y: horizonY - height + Number(value < 0) * height,
25731
25766
  height,
25732
25767
  value
25733
25768
  };
@@ -27165,10 +27200,10 @@
27165
27200
  }
27166
27201
  }
27167
27202
  const sizerRef = vue.ref();
27168
- const rows = vue.ref(+props.rows);
27203
+ const rows = vue.ref(Number(props.rows));
27169
27204
  const isPlainOrUnderlined = vue.computed(() => ['plain', 'underlined'].includes(props.variant));
27170
27205
  vue.watchEffect(() => {
27171
- if (!props.autoGrow) rows.value = +props.rows;
27206
+ if (!props.autoGrow) rows.value = Number(props.rows);
27172
27207
  });
27173
27208
  function calculateInputHeight() {
27174
27209
  if (!props.autoGrow) return;
@@ -28215,8 +28250,8 @@
28215
28250
  prependIcon: '$calendar'
28216
28251
  }),
28217
28252
  ...omit(makeVDatePickerProps({
28218
- weeksInMonth: 'dynamic',
28219
- hideHeader: true
28253
+ hideHeader: true,
28254
+ showAdjacentMonths: true
28220
28255
  }), ['active', 'location', 'rounded'])
28221
28256
  }, 'VDateInput');
28222
28257
  const VDateInput = genericComponent()({
@@ -28250,9 +28285,9 @@
28250
28285
  if (props.multiple === 'range') {
28251
28286
  const start = value[0];
28252
28287
  const end = value[value.length - 1];
28253
- return adapter.isValid(start) && adapter.isValid(end) ? `${adapter.format(start, 'keyboardDate')} - ${adapter.format(end, 'keyboardDate')}` : '';
28288
+ return adapter.isValid(start) && adapter.isValid(end) ? `${adapter.format(adapter.date(start), 'keyboardDate')} - ${adapter.format(adapter.date(end), 'keyboardDate')}` : '';
28254
28289
  }
28255
- return adapter.isValid(model.value) ? adapter.format(model.value, 'keyboardDate') : '';
28290
+ return adapter.isValid(model.value) ? adapter.format(adapter.date(model.value), 'keyboardDate') : '';
28256
28291
  });
28257
28292
  const isInteractive = vue.computed(() => !props.disabled && !props.readonly);
28258
28293
  function onKeydown(e) {
@@ -28300,6 +28335,7 @@
28300
28335
  "onUpdate:modelValue": $event => menu.value = $event,
28301
28336
  "activator": "parent",
28302
28337
  "min-width": "0",
28338
+ "eager": isFocused.value,
28303
28339
  "location": props.location,
28304
28340
  "closeOnContentClick": false,
28305
28341
  "openOnClick": false
@@ -28539,8 +28575,9 @@
28539
28575
  inputRef.value?.click();
28540
28576
  }
28541
28577
  function onClickRemove(index) {
28542
- model.value = model.value.filter((_, i) => i !== index);
28543
- if (model.value.length > 0 || !inputRef.value) return;
28578
+ const newValue = model.value.filter((_, i) => i !== index);
28579
+ model.value = newValue;
28580
+ if (newValue.length > 0 || !inputRef.value) return;
28544
28581
  inputRef.value.value = '';
28545
28582
  }
28546
28583
  useRender(() => {
@@ -28658,6 +28695,36 @@
28658
28695
  }
28659
28696
  });
28660
28697
 
28698
+ // Utilities
28699
+ const HOLD_REPEAT = 50;
28700
+ const HOLD_DELAY = 500;
28701
+ function useHold(_ref) {
28702
+ let {
28703
+ toggleUpDown
28704
+ } = _ref;
28705
+ let timeout = -1;
28706
+ let interval = -1;
28707
+ vue.onScopeDispose(holdStop);
28708
+ function holdStart(value) {
28709
+ holdStop();
28710
+ tick(value);
28711
+ timeout = window.setTimeout(() => {
28712
+ interval = window.setInterval(() => tick(value), HOLD_REPEAT);
28713
+ }, HOLD_DELAY);
28714
+ }
28715
+ function holdStop() {
28716
+ window.clearTimeout(timeout);
28717
+ window.clearInterval(interval);
28718
+ }
28719
+ function tick(value) {
28720
+ toggleUpDown(value === 'up');
28721
+ }
28722
+ return {
28723
+ holdStart,
28724
+ holdStop
28725
+ };
28726
+ }
28727
+
28661
28728
  // Types
28662
28729
 
28663
28730
  const makeVNumberInputProps = propsFactory({
@@ -28687,7 +28754,7 @@
28687
28754
  type: Number,
28688
28755
  default: 0
28689
28756
  },
28690
- ...omit(makeVTextFieldProps({}), ['modelValue'])
28757
+ ...omit(makeVTextFieldProps(), ['modelValue', 'validationValue'])
28691
28758
  }, 'VNumberInput');
28692
28759
  const VNumberInput = genericComponent()({
28693
28760
  name: 'VNumberInput',
@@ -28702,16 +28769,26 @@
28702
28769
  slots
28703
28770
  } = _ref;
28704
28771
  const vTextFieldRef = vue.ref();
28772
+ const {
28773
+ holdStart,
28774
+ holdStop
28775
+ } = useHold({
28776
+ toggleUpDown
28777
+ });
28705
28778
  const form = useForm(props);
28706
28779
  const controlsDisabled = vue.computed(() => form.isDisabled.value || form.isReadonly.value);
28707
- const isFocused = vue.ref(false);
28780
+ const {
28781
+ isFocused,
28782
+ focus,
28783
+ blur
28784
+ } = useFocus(props);
28708
28785
  function correctPrecision(val) {
28709
28786
  let precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : props.precision;
28710
28787
  const fixed = precision == null ? String(val) : val.toFixed(precision);
28711
28788
  return isFocused.value ? Number(fixed).toString() // trim zeros
28712
28789
  : fixed;
28713
28790
  }
28714
- const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(+val, props.min, props.max));
28791
+ const model = useProxiedModel(props, 'modelValue', null, val => val ?? null, val => val == null ? val ?? null : clamp(Number(val), props.min, props.max));
28715
28792
  const _inputText = vue.shallowRef(null);
28716
28793
  vue.watchEffect(() => {
28717
28794
  if (isFocused.value && !controlsDisabled.value) ; else if (model.value == null) {
@@ -28726,8 +28803,8 @@
28726
28803
  if (val === null || val === '') {
28727
28804
  model.value = null;
28728
28805
  _inputText.value = null;
28729
- } else if (!isNaN(+val) && +val <= props.max && +val >= props.min) {
28730
- model.value = +val;
28806
+ } else if (!isNaN(Number(val)) && Number(val) <= props.max && Number(val) >= props.min) {
28807
+ model.value = Number(val);
28731
28808
  _inputText.value = val;
28732
28809
  }
28733
28810
  }
@@ -28748,10 +28825,18 @@
28748
28825
  const controlNodeSize = vue.computed(() => controlVariant.value === 'split' ? 'default' : 'small');
28749
28826
  const controlNodeDefaultHeight = vue.computed(() => controlVariant.value === 'stacked' ? 'auto' : '100%');
28750
28827
  const incrementSlotProps = vue.computed(() => ({
28751
- click: onClickUp
28828
+ props: {
28829
+ onClick: onControlClick,
28830
+ onPointerup: onControlMouseup,
28831
+ onPointerdown: onUpControlMousedown
28832
+ }
28752
28833
  }));
28753
28834
  const decrementSlotProps = vue.computed(() => ({
28754
- click: onClickDown
28835
+ props: {
28836
+ onClick: onControlClick,
28837
+ onPointerup: onControlMouseup,
28838
+ onPointerdown: onDownControlMousedown
28839
+ }
28755
28840
  }));
28756
28841
  vue.watch(() => props.precision, () => formatInputValue());
28757
28842
  vue.onMounted(() => {
@@ -28778,14 +28863,6 @@
28778
28863
  if (canDecrease.value) inputText.value = correctPrecision(model.value - props.step, inferredPrecision);
28779
28864
  }
28780
28865
  }
28781
- function onClickUp(e) {
28782
- e.stopPropagation();
28783
- toggleUpDown();
28784
- }
28785
- function onClickDown(e) {
28786
- e.stopPropagation();
28787
- toggleUpDown(false);
28788
- }
28789
28866
  function onBeforeinput(e) {
28790
28867
  if (!e.data) return;
28791
28868
  const existingTxt = e.target?.value;
@@ -28823,15 +28900,36 @@
28823
28900
  }
28824
28901
  }
28825
28902
  }
28826
- function onControlMousedown(e) {
28903
+ function onControlClick(e) {
28904
+ e.stopPropagation();
28905
+ }
28906
+ function onControlMouseup(e) {
28907
+ const el = e.currentTarget;
28908
+ el?.releasePointerCapture(e.pointerId);
28909
+ e.preventDefault();
28910
+ e.stopPropagation();
28911
+ holdStop();
28912
+ }
28913
+ function onUpControlMousedown(e) {
28914
+ const el = e.currentTarget;
28915
+ el?.setPointerCapture(e.pointerId);
28916
+ e.preventDefault();
28827
28917
  e.stopPropagation();
28918
+ holdStart('up');
28919
+ }
28920
+ function onDownControlMousedown(e) {
28921
+ const el = e.currentTarget;
28922
+ el?.setPointerCapture(e.pointerId);
28923
+ e.preventDefault();
28924
+ e.stopPropagation();
28925
+ holdStart('down');
28828
28926
  }
28829
28927
  function clampModel() {
28830
28928
  if (controlsDisabled.value) return;
28831
28929
  if (!vTextFieldRef.value) return;
28832
28930
  const actualText = vTextFieldRef.value.value;
28833
- if (actualText && !isNaN(+actualText)) {
28834
- inputText.value = correctPrecision(clamp(+actualText, props.min, props.max));
28931
+ if (actualText && !isNaN(Number(actualText))) {
28932
+ inputText.value = correctPrecision(clamp(Number(actualText), props.min, props.max));
28835
28933
  } else {
28836
28934
  inputText.value = null;
28837
28935
  }
@@ -28853,11 +28951,11 @@
28853
28951
  inputText.value = model.value.toString();
28854
28952
  }
28855
28953
  function onFocus() {
28856
- isFocused.value = true;
28954
+ focus();
28857
28955
  trimDecimalZeros();
28858
28956
  }
28859
28957
  function onBlur() {
28860
- isFocused.value = false;
28958
+ blur();
28861
28959
  clampModel();
28862
28960
  }
28863
28961
  useRender(() => {
@@ -28874,8 +28972,9 @@
28874
28972
  "data-testid": "increment",
28875
28973
  "aria-hidden": "true",
28876
28974
  "icon": incrementIcon.value,
28877
- "onClick": onClickUp,
28878
- "onMousedown": onControlMousedown,
28975
+ "onClick": onControlClick,
28976
+ "onPointerup": onControlMouseup,
28977
+ "onPointerdown": onUpControlMousedown,
28879
28978
  "size": controlNodeSize.value,
28880
28979
  "tabindex": "-1"
28881
28980
  }, null) : vue.createVNode(VDefaultsProvider, {
@@ -28904,8 +29003,9 @@
28904
29003
  "icon": decrementIcon.value,
28905
29004
  "size": controlNodeSize.value,
28906
29005
  "tabindex": "-1",
28907
- "onClick": onClickDown,
28908
- "onMousedown": onControlMousedown
29006
+ "onClick": onControlClick,
29007
+ "onPointerup": onControlMouseup,
29008
+ "onPointerdown": onDownControlMousedown
28909
29009
  }, null) : vue.createVNode(VDefaultsProvider, {
28910
29010
  "key": "decrement-defaults",
28911
29011
  "defaults": {
@@ -28949,6 +29049,7 @@
28949
29049
  "ref": vTextFieldRef,
28950
29050
  "modelValue": inputText.value,
28951
29051
  "onUpdate:modelValue": $event => inputText.value = $event,
29052
+ "validationValue": model.value,
28952
29053
  "onBeforeinput": onBeforeinput,
28953
29054
  "onFocus": onFocus,
28954
29055
  "onBlur": onBlur,
@@ -29702,14 +29803,7 @@
29702
29803
  }
29703
29804
  });
29704
29805
 
29705
- // @ts-nocheck
29706
- /* eslint-disable */
29707
- var SelectingTimes = /*#__PURE__*/function (SelectingTimes) {
29708
- SelectingTimes[SelectingTimes["Hour"] = 1] = "Hour";
29709
- SelectingTimes[SelectingTimes["Minute"] = 2] = "Minute";
29710
- SelectingTimes[SelectingTimes["Second"] = 3] = "Second";
29711
- return SelectingTimes;
29712
- }(SelectingTimes || {});
29806
+ // Types
29713
29807
 
29714
29808
  const makeVTimePickerControlsProps = propsFactory({
29715
29809
  ampm: Boolean,
@@ -29723,15 +29817,15 @@
29723
29817
  period: String,
29724
29818
  readonly: Boolean,
29725
29819
  useSeconds: Boolean,
29726
- selecting: Number,
29727
- value: Number
29820
+ value: Number,
29821
+ viewMode: String
29728
29822
  }, 'VTimePickerControls');
29729
29823
  const VTimePickerControls = genericComponent()({
29730
29824
  name: 'VTimePickerControls',
29731
29825
  props: makeVTimePickerControlsProps(),
29732
29826
  emits: {
29733
29827
  'update:period': data => true,
29734
- 'update:selecting': data => true
29828
+ 'update:viewMode': data => true
29735
29829
  },
29736
29830
  setup(props, _ref) {
29737
29831
  let {
@@ -29754,8 +29848,8 @@
29754
29848
  'v-time-picker-controls__time--with-seconds': props.useSeconds
29755
29849
  }
29756
29850
  }, [vue.createVNode(VBtn, {
29757
- "active": props.selecting === 1,
29758
- "color": props.selecting === 1 ? props.color : undefined,
29851
+ "active": props.viewMode === 'hour',
29852
+ "color": props.viewMode === 'hour' ? props.color : undefined,
29759
29853
  "disabled": props.disabled,
29760
29854
  "variant": "tonal",
29761
29855
  "class": {
@@ -29764,24 +29858,24 @@
29764
29858
  'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29765
29859
  },
29766
29860
  "text": props.hour == null ? '--' : pad(`${hour}`),
29767
- "onClick": () => emit('update:selecting', SelectingTimes.Hour)
29861
+ "onClick": () => emit('update:viewMode', 'hour')
29768
29862
  }, null), vue.createVNode("span", {
29769
29863
  "class": ['v-time-picker-controls__time__separator', {
29770
29864
  'v-time-picker-controls--with-seconds__time__separator': props.useSeconds
29771
29865
  }]
29772
29866
  }, [vue.createTextVNode(":")]), vue.createVNode(VBtn, {
29773
- "active": props.selecting === 2,
29774
- "color": props.selecting === 2 ? props.color : undefined,
29867
+ "active": props.viewMode === 'minute',
29868
+ "color": props.viewMode === 'minute' ? props.color : undefined,
29775
29869
  "class": {
29776
29870
  'v-time-picker-controls__time__btn': true,
29777
- 'v-time-picker-controls__time__btn__active': props.selecting === 2,
29871
+ 'v-time-picker-controls__time__btn__active': props.viewMode === 'minute',
29778
29872
  'v-time-picker-controls__time--with-ampm__btn': props.ampm,
29779
29873
  'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29780
29874
  },
29781
29875
  "disabled": props.disabled,
29782
29876
  "variant": "tonal",
29783
29877
  "text": props.minute == null ? '--' : pad(props.minute),
29784
- "onClick": () => emit('update:selecting', SelectingTimes.Minute)
29878
+ "onClick": () => emit('update:viewMode', 'minute')
29785
29879
  }, null), props.useSeconds && vue.createVNode("span", {
29786
29880
  "class": ['v-time-picker-controls__time__separator', {
29787
29881
  'v-time-picker-controls--with-seconds__time__separator': props.useSeconds
@@ -29789,11 +29883,13 @@
29789
29883
  "key": "secondsDivider"
29790
29884
  }, [vue.createTextVNode(":")]), props.useSeconds && vue.createVNode(VBtn, {
29791
29885
  "key": "secondsVal",
29886
+ "active": props.viewMode === 'second',
29887
+ "color": props.viewMode === 'second' ? props.color : undefined,
29792
29888
  "variant": "tonal",
29793
- "onClick": () => emit('update:selecting', SelectingTimes.Second),
29889
+ "onClick": () => emit('update:viewMode', 'second'),
29794
29890
  "class": {
29795
29891
  'v-time-picker-controls__time__btn': true,
29796
- 'v-time-picker-controls__time__btn__active': props.selecting === 3,
29892
+ 'v-time-picker-controls__time__btn__active': props.viewMode === 'second',
29797
29893
  'v-time-picker-controls__time--with-seconds__btn': props.useSeconds
29798
29894
  },
29799
29895
  "disabled": props.disabled,
@@ -29838,11 +29934,6 @@
29838
29934
  const rangeHours12am = createRange(12);
29839
29935
  const rangeHours12pm = rangeHours12am.map(v => v + 12);
29840
29936
  createRange(60);
29841
- const selectingNames = {
29842
- 1: 'hour',
29843
- 2: 'minute',
29844
- 3: 'second'
29845
- };
29846
29937
  const makeVTimePickerProps = propsFactory({
29847
29938
  allowedHours: [Function, Array],
29848
29939
  allowedMinutes: [Function, Array],
@@ -29855,6 +29946,10 @@
29855
29946
  },
29856
29947
  max: String,
29857
29948
  min: String,
29949
+ viewMode: {
29950
+ type: String,
29951
+ default: 'hour'
29952
+ },
29858
29953
  modelValue: null,
29859
29954
  readonly: Boolean,
29860
29955
  scrollable: Boolean,
@@ -29871,7 +29966,8 @@
29871
29966
  'update:minute': val => true,
29872
29967
  'update:period': val => true,
29873
29968
  'update:second': val => true,
29874
- 'update:modelValue': val => true
29969
+ 'update:modelValue': val => true,
29970
+ 'update:viewMode': val => true
29875
29971
  },
29876
29972
  setup(props, _ref) {
29877
29973
  let {
@@ -29888,7 +29984,7 @@
29888
29984
  const lazyInputMinute = vue.ref(null);
29889
29985
  const lazyInputSecond = vue.ref(null);
29890
29986
  const period = vue.ref('am');
29891
- const selecting = vue.ref(SelectingTimes.Hour);
29987
+ const viewMode = useProxiedModel(props, 'viewMode', 'hour');
29892
29988
  const controlsRef = vue.ref(null);
29893
29989
  const clockRef = vue.ref(null);
29894
29990
  const isAllowedHourCb = vue.computed(() => {
@@ -29902,7 +29998,7 @@
29902
29998
  const minHour = props.min ? Number(props.min.split(':')[0]) : 0;
29903
29999
  const maxHour = props.max ? Number(props.max.split(':')[0]) : 23;
29904
30000
  return val => {
29905
- return val >= minHour * 1 && val <= maxHour * 1 && (!cb || cb(val));
30001
+ return val >= Number(minHour) && val <= Number(maxHour) && (!cb || cb(val));
29906
30002
  };
29907
30003
  });
29908
30004
  const isAllowedMinuteCb = vue.computed(() => {
@@ -29918,8 +30014,8 @@
29918
30014
  }
29919
30015
  const [minHour, minMinute] = props.min ? props.min.split(':').map(Number) : [0, 0];
29920
30016
  const [maxHour, maxMinute] = props.max ? props.max.split(':').map(Number) : [23, 59];
29921
- const minTime = minHour * 60 + minMinute * 1;
29922
- const maxTime = maxHour * 60 + maxMinute * 1;
30017
+ const minTime = minHour * 60 + Number(minMinute);
30018
+ const maxTime = maxHour * 60 + Number(maxMinute);
29923
30019
  return val => {
29924
30020
  const time = 60 * inputHour.value + val;
29925
30021
  return time >= minTime && time <= maxTime && isHourAllowed && (!cb || cb(val));
@@ -29939,8 +30035,8 @@
29939
30035
  }
29940
30036
  const [minHour, minMinute, minSecond] = props.min ? props.min.split(':').map(Number) : [0, 0, 0];
29941
30037
  const [maxHour, maxMinute, maxSecond] = props.max ? props.max.split(':').map(Number) : [23, 59, 59];
29942
- const minTime = minHour * 3600 + minMinute * 60 + (minSecond || 0) * 1;
29943
- const maxTime = maxHour * 3600 + maxMinute * 60 + (maxSecond || 0) * 1;
30038
+ const minTime = minHour * 3600 + minMinute * 60 + Number(minSecond || 0);
30039
+ const maxTime = maxHour * 3600 + maxMinute * 60 + Number(maxSecond || 0);
29944
30040
  return val => {
29945
30041
  const time = 3600 * inputHour.value + 60 * inputMinute.value + val;
29946
30042
  return time >= minTime && time <= maxTime && isMinuteAllowed && (!cb || cb(val));
@@ -30006,16 +30102,16 @@
30006
30102
  return true;
30007
30103
  }
30008
30104
  function onInput(value) {
30009
- if (selecting.value === SelectingTimes.Hour) {
30105
+ if (viewMode.value === 'hour') {
30010
30106
  inputHour.value = isAmPm.value ? convert12to24(value, period.value) : value;
30011
- } else if (selecting.value === SelectingTimes.Minute) {
30107
+ } else if (viewMode.value === 'minute') {
30012
30108
  inputMinute.value = value;
30013
30109
  } else {
30014
30110
  inputSecond.value = value;
30015
30111
  }
30016
30112
  }
30017
30113
  function onChange(value) {
30018
- switch (selectingNames[selecting.value]) {
30114
+ switch (viewMode.value || 'hour') {
30019
30115
  case 'hour':
30020
30116
  emit('update:hour', value);
30021
30117
  break;
@@ -30027,10 +30123,10 @@
30027
30123
  break;
30028
30124
  }
30029
30125
  const emitChange = inputHour.value !== null && inputMinute.value !== null && (props.useSeconds ? inputSecond.value !== null : true);
30030
- if (selecting.value === SelectingTimes.Hour) {
30031
- selecting.value = SelectingTimes.Minute;
30032
- } else if (props.useSeconds && selecting.value === SelectingTimes.Minute) {
30033
- selecting.value = SelectingTimes.Second;
30126
+ if (viewMode.value === 'hour') {
30127
+ viewMode.value = 'minute';
30128
+ } else if (props.useSeconds && viewMode.value === 'minute') {
30129
+ viewMode.value = 'second';
30034
30130
  }
30035
30131
  if (inputHour.value === lazyInputHour.value && inputMinute.value === lazyInputMinute.value && (!props.useSeconds || inputSecond.value === lazyInputSecond.value)) return;
30036
30132
  const time = genValue();
@@ -30059,20 +30155,20 @@
30059
30155
  "minute": inputMinute.value,
30060
30156
  "period": period.value,
30061
30157
  "second": inputSecond.value,
30062
- "selecting": selecting.value,
30158
+ "viewMode": viewMode.value,
30063
30159
  "onUpdate:period": val => setPeriod(val),
30064
- "onUpdate:selecting": value => selecting.value = value,
30160
+ "onUpdate:viewMode": value => viewMode.value = value,
30065
30161
  "ref": controlsRef
30066
30162
  }), null),
30067
30163
  default: () => vue.createVNode(VTimePickerClock, vue.mergeProps(timePickerClockProps, {
30068
- "allowedValues": selecting.value === SelectingTimes.Hour ? isAllowedHourCb.value : selecting.value === SelectingTimes.Minute ? isAllowedMinuteCb.value : isAllowedSecondCb.value,
30069
- "double": selecting.value === SelectingTimes.Hour && !isAmPm.value,
30070
- "format": selecting.value === SelectingTimes.Hour ? isAmPm.value ? convert24to12 : val => val : val => pad(val, 2),
30071
- "max": selecting.value === SelectingTimes.Hour ? isAmPm.value && period.value === 'am' ? 11 : 23 : 59,
30072
- "min": selecting.value === SelectingTimes.Hour && isAmPm.value && period.value === 'pm' ? 12 : 0,
30164
+ "allowedValues": viewMode.value === 'hour' ? isAllowedHourCb.value : viewMode.value === 'minute' ? isAllowedMinuteCb.value : isAllowedSecondCb.value,
30165
+ "double": viewMode.value === 'hour' && !isAmPm.value,
30166
+ "format": viewMode.value === 'hour' ? isAmPm.value ? convert24to12 : val => val : val => pad(val, 2),
30167
+ "max": viewMode.value === 'hour' ? isAmPm.value && period.value === 'am' ? 11 : 23 : 59,
30168
+ "min": viewMode.value === 'hour' && isAmPm.value && period.value === 'pm' ? 12 : 0,
30073
30169
  "size": 20,
30074
- "step": selecting.value === SelectingTimes.Hour ? 1 : 5,
30075
- "modelValue": selecting.value === SelectingTimes.Hour ? inputHour.value : selecting.value === SelectingTimes.Minute ? inputMinute.value : inputSecond.value,
30170
+ "step": viewMode.value === 'hour' ? 1 : 5,
30171
+ "modelValue": viewMode.value === 'hour' ? inputHour.value : viewMode.value === 'minute' ? inputMinute.value : inputSecond.value,
30076
30172
  "onChange": onChange,
30077
30173
  "onInput": onInput,
30078
30174
  "ref": clockRef
@@ -30133,7 +30229,6 @@
30133
30229
 
30134
30230
  const makeVTreeviewItemProps = propsFactory({
30135
30231
  loading: Boolean,
30136
- onToggleExpand: EventProp(),
30137
30232
  toggleIcon: IconValue,
30138
30233
  ...makeVListItemProps({
30139
30234
  slim: true
@@ -30142,9 +30237,13 @@
30142
30237
  const VTreeviewItem = genericComponent()({
30143
30238
  name: 'VTreeviewItem',
30144
30239
  props: makeVTreeviewItemProps(),
30240
+ emits: {
30241
+ toggleExpand: value => true
30242
+ },
30145
30243
  setup(props, _ref) {
30146
30244
  let {
30147
- slots
30245
+ slots,
30246
+ emit
30148
30247
  } = _ref;
30149
30248
  const visibleIds = vue.inject(VTreeviewSymbol, {
30150
30249
  visibleIds: vue.ref()
@@ -30159,6 +30258,10 @@
30159
30258
  vListItemRef.value?.activate(!vListItemRef.value?.isActivated, e);
30160
30259
  }
30161
30260
  }
30261
+ function onClickAction(e) {
30262
+ e.preventDefault();
30263
+ emit('toggleExpand', e);
30264
+ }
30162
30265
  useRender(() => {
30163
30266
  const listItemProps = omit(VListItem.filterProps(props), ['onClick']);
30164
30267
  const hasPrepend = slots.prepend || props.toggleIcon;
@@ -30183,7 +30286,7 @@
30183
30286
  "icon": props.toggleIcon,
30184
30287
  "loading": props.loading,
30185
30288
  "variant": "text",
30186
- "onClick": props.onToggleExpand
30289
+ "onClick": onClickAction
30187
30290
  }, {
30188
30291
  loader() {
30189
30292
  return vue.createVNode(VProgressCircular, {
@@ -30978,7 +31081,7 @@
30978
31081
  goTo
30979
31082
  };
30980
31083
  }
30981
- const version$1 = "3.7.14";
31084
+ const version$1 = "3.7.16";
30982
31085
  createVuetify$1.version = version$1;
30983
31086
 
30984
31087
  // Vue's inject() can only be used in setup
@@ -31231,7 +31334,7 @@
31231
31334
 
31232
31335
  /* eslint-disable local-rules/sort-imports */
31233
31336
 
31234
- const version = "3.7.14";
31337
+ const version = "3.7.16";
31235
31338
 
31236
31339
  /* eslint-disable local-rules/sort-imports */
31237
31340