vuetify 3.3.11 → 3.3.13

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 (199) hide show
  1. package/dist/json/attributes.json +49 -5
  2. package/dist/json/importMap.json +12 -12
  3. package/dist/json/tags.json +11 -0
  4. package/dist/json/web-types.json +168 -11
  5. package/dist/vuetify-labs.css +423 -358
  6. package/dist/vuetify-labs.d.ts +233 -91
  7. package/dist/vuetify-labs.esm.js +189 -104
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +189 -104
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +130 -65
  12. package/dist/vuetify.d.ts +172 -38
  13. package/dist/vuetify.esm.js +100 -59
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +100 -59
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +152 -152
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/md3.mjs +2 -1
  21. package/lib/blueprints/md3.mjs.map +1 -1
  22. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  23. package/lib/components/VAppBar/index.d.mts +6 -6
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +6 -2
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.mts +42 -0
  27. package/lib/components/VBanner/VBanner.css +2 -0
  28. package/lib/components/VBanner/VBanner.sass +2 -0
  29. package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -0
  30. package/lib/components/VBottomNavigation/VBottomNavigation.sass +1 -0
  31. package/lib/components/VBtn/VBtn.css +6 -0
  32. package/lib/components/VBtn/VBtn.sass +5 -0
  33. package/lib/components/VCheckbox/index.d.mts +3 -1
  34. package/lib/components/VChip/VChip.mjs +1 -0
  35. package/lib/components/VChip/VChip.mjs.map +1 -1
  36. package/lib/components/VCombobox/VCombobox.mjs +6 -2
  37. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  38. package/lib/components/VCombobox/index.d.mts +42 -0
  39. package/lib/components/VDialog/VDialog.css +15 -6
  40. package/lib/components/VDialog/VDialog.sass +41 -35
  41. package/lib/components/VField/VField.css +7 -2
  42. package/lib/components/VField/VField.mjs +5 -3
  43. package/lib/components/VField/VField.mjs.map +1 -1
  44. package/lib/components/VField/VField.sass +7 -2
  45. package/lib/components/VFileInput/VFileInput.css +4 -0
  46. package/lib/components/VFileInput/VFileInput.sass +5 -1
  47. package/lib/components/VFileInput/_variables.scss +2 -1
  48. package/lib/components/VGrid/VGrid.css +4 -0
  49. package/lib/components/VGrid/VGrid.sass +4 -1
  50. package/lib/components/VGrid/VSpacer.mjs +1 -1
  51. package/lib/components/VGrid/VSpacer.mjs.map +1 -1
  52. package/lib/components/VList/VList.css +1 -1
  53. package/lib/components/VList/VList.sass +1 -1
  54. package/lib/components/VList/VListItem.css +20 -9
  55. package/lib/components/VList/VListItem.mjs +6 -2
  56. package/lib/components/VList/VListItem.mjs.map +1 -1
  57. package/lib/components/VList/VListItem.sass +19 -8
  58. package/lib/components/VMenu/VMenu.mjs +4 -3
  59. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  60. package/lib/components/VMenu/index.d.mts +5 -5
  61. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +0 -1
  62. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +0 -1
  63. package/lib/components/VNavigationDrawer/_variables.scss +0 -1
  64. package/lib/components/VRadio/index.d.mts +3 -1
  65. package/lib/components/VRadioGroup/VRadioGroup.css +6 -1
  66. package/lib/components/VRadioGroup/VRadioGroup.sass +5 -0
  67. package/lib/components/VRadioGroup/_variables.scss +3 -1
  68. package/lib/components/VRadioGroup/index.d.mts +3 -1
  69. package/lib/components/VSelect/VSelect.mjs +14 -2
  70. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  71. package/lib/components/VSelect/index.d.mts +42 -0
  72. package/lib/components/VSelectionControl/VSelectionControl.mjs +22 -19
  73. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  74. package/lib/components/VSelectionControl/index.d.mts +27 -25
  75. package/lib/components/VSwitch/VSwitch.css +24 -17
  76. package/lib/components/VSwitch/VSwitch.mjs +28 -19
  77. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  78. package/lib/components/VSwitch/VSwitch.sass +20 -11
  79. package/lib/components/VSwitch/_variables.scss +18 -6
  80. package/lib/components/VSwitch/index.d.mts +3 -1
  81. package/lib/components/VTextField/VTextField.css +9 -2
  82. package/lib/components/VTextField/VTextField.mjs +6 -3
  83. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  84. package/lib/components/VTextField/VTextField.sass +10 -3
  85. package/lib/components/VTextField/index.d.mts +6 -0
  86. package/lib/components/VTextarea/VTextarea.mjs +1 -2
  87. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  88. package/lib/components/VTimeline/VTimeline.css +6 -1
  89. package/lib/components/VTimeline/VTimeline.sass +6 -1
  90. package/lib/components/VTooltip/VTooltip.css +1 -1
  91. package/lib/components/VTooltip/_variables.scss +1 -1
  92. package/lib/components/index.d.mts +169 -35
  93. package/lib/entry-bundler.mjs +1 -1
  94. package/lib/framework.mjs +1 -1
  95. package/lib/index.d.mts +3 -3
  96. package/lib/labs/VDateInput/composables.mjs +11 -1
  97. package/lib/labs/VDateInput/composables.mjs.map +1 -1
  98. package/lib/labs/VDateInput/index.d.mts +6 -0
  99. package/lib/labs/VDatePicker/VDatePicker.mjs +34 -14
  100. package/lib/labs/VDatePicker/VDatePicker.mjs.map +1 -1
  101. package/lib/labs/VDatePicker/VDatePickerMonth.mjs +1 -1
  102. package/lib/labs/VDatePicker/VDatePickerMonth.mjs.map +1 -1
  103. package/lib/labs/VDatePicker/composables.mjs +4 -2
  104. package/lib/labs/VDatePicker/composables.mjs.map +1 -1
  105. package/lib/labs/VDatePicker/index.d.mts +14 -0
  106. package/lib/labs/VOtpInput/VOtpInput.mjs +31 -22
  107. package/lib/labs/VOtpInput/VOtpInput.mjs.map +1 -1
  108. package/lib/labs/VStepper/VStepper.mjs +12 -9
  109. package/lib/labs/VStepper/VStepper.mjs.map +1 -1
  110. package/lib/labs/VStepper/index.d.mts +50 -56
  111. package/lib/labs/components.d.mts +64 -56
  112. package/lib/labs/date/adapters/vuetify.mjs +1 -1
  113. package/lib/labs/date/adapters/vuetify.mjs.map +1 -1
  114. package/lib/locale/af.mjs +1 -0
  115. package/lib/locale/af.mjs.map +1 -1
  116. package/lib/locale/ar.mjs +1 -0
  117. package/lib/locale/ar.mjs.map +1 -1
  118. package/lib/locale/az.mjs +1 -0
  119. package/lib/locale/az.mjs.map +1 -1
  120. package/lib/locale/bg.mjs +1 -0
  121. package/lib/locale/bg.mjs.map +1 -1
  122. package/lib/locale/ca.mjs +1 -0
  123. package/lib/locale/ca.mjs.map +1 -1
  124. package/lib/locale/ckb.mjs +1 -0
  125. package/lib/locale/ckb.mjs.map +1 -1
  126. package/lib/locale/cs.mjs +1 -0
  127. package/lib/locale/cs.mjs.map +1 -1
  128. package/lib/locale/da.mjs +1 -0
  129. package/lib/locale/da.mjs.map +1 -1
  130. package/lib/locale/de.mjs +1 -0
  131. package/lib/locale/de.mjs.map +1 -1
  132. package/lib/locale/el.mjs +1 -0
  133. package/lib/locale/el.mjs.map +1 -1
  134. package/lib/locale/en.mjs +1 -0
  135. package/lib/locale/en.mjs.map +1 -1
  136. package/lib/locale/es.mjs +1 -0
  137. package/lib/locale/es.mjs.map +1 -1
  138. package/lib/locale/et.mjs +1 -0
  139. package/lib/locale/et.mjs.map +1 -1
  140. package/lib/locale/fa.mjs +1 -0
  141. package/lib/locale/fa.mjs.map +1 -1
  142. package/lib/locale/fi.mjs +1 -0
  143. package/lib/locale/fi.mjs.map +1 -1
  144. package/lib/locale/fr.mjs +1 -0
  145. package/lib/locale/fr.mjs.map +1 -1
  146. package/lib/locale/he.mjs +1 -0
  147. package/lib/locale/he.mjs.map +1 -1
  148. package/lib/locale/hr.mjs +1 -0
  149. package/lib/locale/hr.mjs.map +1 -1
  150. package/lib/locale/hu.mjs +1 -0
  151. package/lib/locale/hu.mjs.map +1 -1
  152. package/lib/locale/id.mjs +1 -0
  153. package/lib/locale/id.mjs.map +1 -1
  154. package/lib/locale/index.d.mts +42 -0
  155. package/lib/locale/it.mjs +1 -0
  156. package/lib/locale/it.mjs.map +1 -1
  157. package/lib/locale/ja.mjs +1 -0
  158. package/lib/locale/ja.mjs.map +1 -1
  159. package/lib/locale/ko.mjs +1 -0
  160. package/lib/locale/ko.mjs.map +1 -1
  161. package/lib/locale/lt.mjs +1 -0
  162. package/lib/locale/lt.mjs.map +1 -1
  163. package/lib/locale/lv.mjs +1 -0
  164. package/lib/locale/lv.mjs.map +1 -1
  165. package/lib/locale/nl.mjs +1 -0
  166. package/lib/locale/nl.mjs.map +1 -1
  167. package/lib/locale/no.mjs +16 -15
  168. package/lib/locale/no.mjs.map +1 -1
  169. package/lib/locale/pl.mjs +1 -0
  170. package/lib/locale/pl.mjs.map +1 -1
  171. package/lib/locale/pt.mjs +1 -0
  172. package/lib/locale/pt.mjs.map +1 -1
  173. package/lib/locale/ro.mjs +1 -0
  174. package/lib/locale/ro.mjs.map +1 -1
  175. package/lib/locale/ru.mjs +1 -0
  176. package/lib/locale/ru.mjs.map +1 -1
  177. package/lib/locale/sk.mjs +1 -0
  178. package/lib/locale/sk.mjs.map +1 -1
  179. package/lib/locale/sl.mjs +1 -0
  180. package/lib/locale/sl.mjs.map +1 -1
  181. package/lib/locale/sr-Cyrl.mjs +1 -0
  182. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  183. package/lib/locale/sr-Latn.mjs +1 -0
  184. package/lib/locale/sr-Latn.mjs.map +1 -1
  185. package/lib/locale/sv.mjs +1 -0
  186. package/lib/locale/sv.mjs.map +1 -1
  187. package/lib/locale/th.mjs +1 -0
  188. package/lib/locale/th.mjs.map +1 -1
  189. package/lib/locale/tr.mjs +1 -0
  190. package/lib/locale/tr.mjs.map +1 -1
  191. package/lib/locale/uk.mjs +1 -0
  192. package/lib/locale/uk.mjs.map +1 -1
  193. package/lib/locale/vi.mjs +1 -0
  194. package/lib/locale/vi.mjs.map +1 -1
  195. package/lib/locale/zh-Hans.mjs +1 -0
  196. package/lib/locale/zh-Hans.mjs.map +1 -1
  197. package/lib/locale/zh-Hant.mjs +1 -0
  198. package/lib/locale/zh-Hant.mjs.map +1 -1
  199. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.3.11
2
+ * Vuetify v3.3.13
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1653,6 +1653,7 @@ function createLayout(props) {
1653
1653
 
1654
1654
  var en = {
1655
1655
  badge: 'Badge',
1656
+ open: 'Open',
1656
1657
  close: 'Close',
1657
1658
  dataIterator: {
1658
1659
  noResultsText: 'No matching records found',
@@ -5856,6 +5857,20 @@ const VSelectionControl = genericComponent()({
5856
5857
  }
5857
5858
  }) : props.label;
5858
5859
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
5860
+ const inputNode = createVNode("input", mergeProps({
5861
+ "ref": input,
5862
+ "checked": model.value,
5863
+ "disabled": !!(props.readonly || props.disabled),
5864
+ "id": id.value,
5865
+ "onBlur": onBlur,
5866
+ "onFocus": onFocus,
5867
+ "onInput": onInput,
5868
+ "aria-disabled": !!(props.readonly || props.disabled),
5869
+ "type": props.type,
5870
+ "value": trueValue.value,
5871
+ "name": props.name,
5872
+ "aria-checked": props.type === 'checkbox' ? model.value : undefined
5873
+ }, inputAttrs), null);
5859
5874
  return createVNode("div", mergeProps({
5860
5875
  "class": ['v-selection-control', {
5861
5876
  'v-selection-control--dirty': model.value,
@@ -5872,32 +5887,21 @@ const VSelectionControl = genericComponent()({
5872
5887
  "style": textColorStyles.value
5873
5888
  }, [slots.default?.(), withDirectives(createVNode("div", {
5874
5889
  "class": ['v-selection-control__input']
5875
- }, [icon.value && createVNode(VIcon, {
5876
- "key": "icon",
5877
- "icon": icon.value
5878
- }, null), createVNode("input", mergeProps({
5879
- "ref": input,
5880
- "checked": model.value,
5881
- "disabled": !!(props.readonly || props.disabled),
5882
- "id": id.value,
5883
- "onBlur": onBlur,
5884
- "onFocus": onFocus,
5885
- "onInput": onInput,
5886
- "aria-disabled": !!(props.readonly || props.disabled),
5887
- "type": props.type,
5888
- "value": trueValue.value,
5889
- "name": props.name,
5890
- "aria-checked": props.type === 'checkbox' ? model.value : undefined
5891
- }, inputAttrs), null), slots.input?.({
5890
+ }, [slots.input?.({
5892
5891
  model,
5893
5892
  textColorClasses,
5894
5893
  textColorStyles,
5894
+ inputNode,
5895
+ icon: icon.value,
5895
5896
  props: {
5896
5897
  onFocus,
5897
5898
  onBlur,
5898
5899
  id: id.value
5899
5900
  }
5900
- })]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
5901
+ }) ?? createVNode(Fragment, null, [icon.value && createVNode(VIcon, {
5902
+ "key": "icon",
5903
+ "icon": icon.value
5904
+ }, null), inputNode])]), [[resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && createVNode(VLabel, {
5901
5905
  "for": id.value,
5902
5906
  "clickable": true
5903
5907
  }, {
@@ -6794,6 +6798,7 @@ const VChip = genericComponent()({
6794
6798
  const closeProps = computed(() => ({
6795
6799
  'aria-label': t(props.closeLabel),
6796
6800
  onClick(e) {
6801
+ e.stopPropagation();
6797
6802
  isActive.value = false;
6798
6803
  emit('click:close', e);
6799
6804
  }
@@ -7697,7 +7702,9 @@ const VListItem = genericComponent()({
7697
7702
  }
7698
7703
  }, {
7699
7704
  default: () => [slots.prepend?.(slotProps.value)]
7700
- })]), createVNode("div", {
7705
+ }), createVNode("div", {
7706
+ "class": "v-list-item__spacer"
7707
+ }, null)]), createVNode("div", {
7701
7708
  "class": "v-list-item__content",
7702
7709
  "data-no-activator": ""
7703
7710
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7741,7 +7748,9 @@ const VListItem = genericComponent()({
7741
7748
  }
7742
7749
  }, {
7743
7750
  default: () => [slots.append?.(slotProps.value)]
7744
- })])]
7751
+ }), createVNode("div", {
7752
+ "class": "v-list-item__spacer"
7753
+ }, null)])]
7745
7754
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7746
7755
  });
7747
7756
  return {};
@@ -9852,10 +9861,11 @@ const VMenu = genericComponent()({
9852
9861
  }, 40);
9853
9862
  }
9854
9863
  });
9855
- function onFocusIn(e) {
9864
+ async function onFocusIn(e) {
9856
9865
  const before = e.relatedTarget;
9857
9866
  const after = e.target;
9858
- if (before !== after && overlay.value?.contentEl &&
9867
+ await nextTick();
9868
+ if (isActive.value && before !== after && overlay.value?.contentEl &&
9859
9869
  // We're the topmost menu
9860
9870
  overlay.value?.globalTop &&
9861
9871
  // It isn't the document or the menu body
@@ -10191,7 +10201,7 @@ const VField = genericComponent()({
10191
10201
  'v-field--no-label': !label,
10192
10202
  [`v-field--variant-${props.variant}`]: true
10193
10203
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
10194
- "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
10204
+ "style": [backgroundColorStyles.value, props.style],
10195
10205
  "onClick": onClick
10196
10206
  }, attrs), [createVNode("div", {
10197
10207
  "class": "v-field__overlay"
@@ -10215,7 +10225,8 @@ const VField = genericComponent()({
10215
10225
  "ref": floatingLabelRef,
10216
10226
  "class": [textColorClasses.value],
10217
10227
  "floating": true,
10218
- "for": id.value
10228
+ "for": id.value,
10229
+ "style": textColorStyles.value
10219
10230
  }, {
10220
10231
  default: () => [label]
10221
10232
  }), createVNode(VFieldLabel, {
@@ -10251,7 +10262,8 @@ const VField = genericComponent()({
10251
10262
  "key": "append-icon",
10252
10263
  "name": "appendInner"
10253
10264
  }, null)]), createVNode("div", {
10254
- "class": ['v-field__outline', textColorClasses.value]
10265
+ "class": ['v-field__outline', textColorClasses.value],
10266
+ "style": textColorStyles.value
10255
10267
  }, [isOutlined && createVNode(Fragment, null, [createVNode("div", {
10256
10268
  "class": "v-field__outline__start"
10257
10269
  }, null), hasLabel.value && createVNode("div", {
@@ -10295,6 +10307,7 @@ const makeVTextFieldProps = propsFactory({
10295
10307
  persistentPlaceholder: Boolean,
10296
10308
  persistentCounter: Boolean,
10297
10309
  suffix: String,
10310
+ role: String,
10298
10311
  type: {
10299
10312
  type: String,
10300
10313
  default: 'text'
@@ -10419,7 +10432,7 @@ const VTextField = genericComponent()({
10419
10432
  "onClick:clear": onClear,
10420
10433
  "onClick:prependInner": props['onClick:prependInner'],
10421
10434
  "onClick:appendInner": props['onClick:appendInner'],
10422
- "role": "textbox"
10435
+ "role": props.role
10423
10436
  }, fieldProps, {
10424
10437
  "id": id.value,
10425
10438
  "active": isActive.value || isDirty.value,
@@ -10458,10 +10471,12 @@ const VTextField = genericComponent()({
10458
10471
  "class": "v-text-field__prefix"
10459
10472
  }, [createVNode("span", {
10460
10473
  "class": "v-text-field__prefix__text"
10461
- }, [props.prefix])]), createVNode("div", {
10474
+ }, [props.prefix])]), slots.default ? createVNode("div", {
10462
10475
  "class": fieldClass,
10463
10476
  "data-no-activator": ""
10464
- }, [slots.default ? createVNode(Fragment, null, [slots.default(), inputNode]) : cloneVNode(inputNode)]), props.suffix && createVNode("span", {
10477
+ }, [slots.default(), inputNode]) : cloneVNode(inputNode, {
10478
+ class: fieldClass
10479
+ }), props.suffix && createVNode("span", {
10465
10480
  "class": "v-text-field__suffix"
10466
10481
  }, [createVNode("span", {
10467
10482
  "class": "v-text-field__suffix__text"
@@ -10780,6 +10795,14 @@ function useScrolling(listRef, textFieldRef) {
10780
10795
  const makeSelectProps = propsFactory({
10781
10796
  chips: Boolean,
10782
10797
  closableChips: Boolean,
10798
+ closeText: {
10799
+ type: String,
10800
+ default: '$vuetify.close'
10801
+ },
10802
+ openText: {
10803
+ type: String,
10804
+ default: '$vuetify.open'
10805
+ },
10783
10806
  eager: Boolean,
10784
10807
  hideNoData: Boolean,
10785
10808
  hideSelected: Boolean,
@@ -10809,7 +10832,8 @@ const makeSelectProps = propsFactory({
10809
10832
  const makeVSelectProps = propsFactory({
10810
10833
  ...makeSelectProps(),
10811
10834
  ...omit(makeVTextFieldProps({
10812
- modelValue: null
10835
+ modelValue: null,
10836
+ role: 'button'
10813
10837
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
10814
10838
  ...makeTransitionProps({
10815
10839
  transition: {
@@ -10864,6 +10888,7 @@ const VSelect = genericComponent()({
10864
10888
  });
10865
10889
  const selected = computed(() => selections.value.map(selection => selection.props.value));
10866
10890
  const isFocused = shallowRef(false);
10891
+ const label = computed(() => menu.value ? props.closeText : props.openText);
10867
10892
  let keyboardLookupPrefix = '';
10868
10893
  let keyboardLookupLastTime;
10869
10894
  const displayItems = computed(() => {
@@ -10990,7 +11015,9 @@ const VSelect = genericComponent()({
10990
11015
  "onClick:clear": onClear,
10991
11016
  "onMousedown:control": onMousedownControl,
10992
11017
  "onBlur": onBlur,
10993
- "onKeydown": onKeydown
11018
+ "onKeydown": onKeydown,
11019
+ "aria-label": t(label.value),
11020
+ "title": t(label.value)
10994
11021
  }), {
10995
11022
  ...slots,
10996
11023
  default: () => createVNode(Fragment, null, [createVNode(VMenu, mergeProps({
@@ -11253,7 +11280,8 @@ const makeVAutocompleteProps = propsFactory({
11253
11280
  }),
11254
11281
  ...makeSelectProps(),
11255
11282
  ...omit(makeVTextFieldProps({
11256
- modelValue: null
11283
+ modelValue: null,
11284
+ role: 'combobox'
11257
11285
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
11258
11286
  ...makeTransitionProps({
11259
11287
  transition: false
@@ -11290,6 +11318,7 @@ const VAutocomplete = genericComponent()({
11290
11318
  });
11291
11319
  const selectionIndex = shallowRef(-1);
11292
11320
  const color = computed(() => vTextFieldRef.value?.color);
11321
+ const label = computed(() => menu.value ? props.closeText : props.openText);
11293
11322
  const {
11294
11323
  items,
11295
11324
  transformIn,
@@ -11637,7 +11666,9 @@ const VAutocomplete = genericComponent()({
11637
11666
  "class": "v-autocomplete__menu-icon",
11638
11667
  "icon": props.menuIcon,
11639
11668
  "onMousedown": onMousedownMenuIcon,
11640
- "onClick": noop
11669
+ "onClick": noop,
11670
+ "aria-label": t(label.value),
11671
+ "title": t(label.value)
11641
11672
  }, null) : undefined]);
11642
11673
  }
11643
11674
  });
@@ -14781,7 +14812,8 @@ const makeVComboboxProps = propsFactory({
14781
14812
  returnObject: true
14782
14813
  }),
14783
14814
  ...omit(makeVTextFieldProps({
14784
- modelValue: null
14815
+ modelValue: null,
14816
+ role: 'combobox'
14785
14817
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
14786
14818
  ...makeTransitionProps({
14787
14819
  transition: false
@@ -14820,6 +14852,7 @@ const VCombobox = genericComponent()({
14820
14852
  const selectionIndex = shallowRef(-1);
14821
14853
  let cleared = false;
14822
14854
  const color = computed(() => vTextFieldRef.value?.color);
14855
+ const label = computed(() => menu.value ? props.closeText : props.openText);
14823
14856
  const {
14824
14857
  items,
14825
14858
  transformIn,
@@ -15195,7 +15228,9 @@ const VCombobox = genericComponent()({
15195
15228
  "class": "v-combobox__menu-icon",
15196
15229
  "icon": props.menuIcon,
15197
15230
  "onMousedown": onMousedownMenuIcon,
15198
- "onClick": noop
15231
+ "onClick": noop,
15232
+ "aria-label": t(label.value),
15233
+ "title": t(label.value)
15199
15234
  }, null) : undefined]);
15200
15235
  }
15201
15236
  });
@@ -16159,7 +16194,7 @@ const VRow = genericComponent()({
16159
16194
  });
16160
16195
 
16161
16196
  // Utilities
16162
- const VSpacer = createSimpleFunctional('flex-grow-1', 'div', 'VSpacer');
16197
+ const VSpacer = createSimpleFunctional('v-spacer', 'div', 'VSpacer');
16163
16198
 
16164
16199
  // Composables
16165
16200
  const makeVHoverProps = propsFactory({
@@ -18538,25 +18573,32 @@ const VSwitch = genericComponent()({
18538
18573
  }, null),
18539
18574
  input: _ref3 => {
18540
18575
  let {
18541
- textColorClasses,
18542
- textColorStyles
18576
+ inputNode,
18577
+ icon
18543
18578
  } = _ref3;
18544
- return createVNode("div", {
18545
- "class": ['v-switch__thumb', textColorClasses.value],
18546
- "style": textColorStyles.value
18547
- }, [props.loading && createVNode(LoaderSlot, {
18548
- "name": "v-switch",
18549
- "active": true,
18550
- "color": isValid.value === false ? undefined : loaderColor.value
18551
- }, {
18552
- default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
18553
- "active": slotProps.isActive,
18554
- "color": slotProps.color,
18555
- "indeterminate": true,
18556
- "size": "16",
18557
- "width": "2"
18558
- }, null)
18559
- })]);
18579
+ return createVNode(Fragment, null, [inputNode, createVNode("div", {
18580
+ "class": ['v-switch__thumb', {
18581
+ 'v-switch__thumb--filled': icon || props.loading
18582
+ }]
18583
+ }, [createVNode(VScaleTransition, null, {
18584
+ default: () => [!props.loading ? icon && createVNode(VIcon, {
18585
+ "key": icon,
18586
+ "icon": icon,
18587
+ "size": "x-small"
18588
+ }, null) : createVNode(LoaderSlot, {
18589
+ "name": "v-switch",
18590
+ "active": true,
18591
+ "color": isValid.value === false ? undefined : loaderColor.value
18592
+ }, {
18593
+ default: slotProps => slots.loader ? slots.loader(slotProps) : createVNode(VProgressCircular, {
18594
+ "active": slotProps.isActive,
18595
+ "color": slotProps.color,
18596
+ "indeterminate": true,
18597
+ "size": "16",
18598
+ "width": "2"
18599
+ }, null)
18600
+ })]
18601
+ })])]);
18560
18602
  }
18561
18603
  });
18562
18604
  }
@@ -19037,8 +19079,7 @@ const VTextarea = genericComponent()({
19037
19079
  "onMousedown": onControlMousedown,
19038
19080
  "onClick:clear": onClear,
19039
19081
  "onClick:prependInner": props['onClick:prependInner'],
19040
- "onClick:appendInner": props['onClick:appendInner'],
19041
- "role": "textbox"
19082
+ "onClick:appendInner": props['onClick:appendInner']
19042
19083
  }, fieldProps, {
19043
19084
  "active": isActive.value || isDirty.value,
19044
19085
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
@@ -21903,7 +21944,7 @@ function getWeekdays(locale) {
21903
21944
  const weekday = new Date(sundayJanuarySecond2000);
21904
21945
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21905
21946
  return new Intl.DateTimeFormat(locale, {
21906
- weekday: 'short'
21947
+ weekday: 'narrow'
21907
21948
  }).format(weekday);
21908
21949
  });
21909
21950
  }
@@ -22228,13 +22269,23 @@ function createDateInput(props, isRange) {
22228
22269
  const date = adapter.date(input);
22229
22270
  return adapter.isValid(date) ? date : fallback;
22230
22271
  }
22272
+ function isEqual(model, comparing) {
22273
+ if (model.length !== comparing.length) return false;
22274
+ for (let i = 0; i < model.length; i++) {
22275
+ if (comparing[i] && !adapter.isEqual(model[i], comparing[i])) {
22276
+ return false;
22277
+ }
22278
+ }
22279
+ return true;
22280
+ }
22231
22281
  return {
22232
22282
  model,
22233
22283
  adapter,
22234
22284
  inputMode,
22235
22285
  viewMode,
22236
22286
  displayDate,
22237
- parseKeyboardDate
22287
+ parseKeyboardDate,
22288
+ isEqual
22238
22289
  };
22239
22290
  }
22240
22291
 
@@ -22332,7 +22383,8 @@ function createDatePicker(props) {
22332
22383
  model,
22333
22384
  displayDate,
22334
22385
  viewMode,
22335
- inputMode
22386
+ inputMode,
22387
+ isEqual
22336
22388
  } = createDateInput(props, !!props.multiple);
22337
22389
  return {
22338
22390
  hoverDate,
@@ -22343,7 +22395,8 @@ function createDatePicker(props) {
22343
22395
  model,
22344
22396
  displayDate,
22345
22397
  viewMode,
22346
- inputMode
22398
+ inputMode,
22399
+ isEqual
22347
22400
  };
22348
22401
  }
22349
22402
  function useDatePicker() {
@@ -22589,7 +22642,7 @@ const VDatePickerMonth = genericComponent()({
22589
22642
  "onTouchstart": handleMousedown
22590
22643
  }, [!props.hideWeekdays && adapter.getWeekdays().map(weekDay => createVNode("div", {
22591
22644
  "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
22592
- }, [weekDay.charAt(0)])), daysInMonth.value.map((item, index) => createVNode("div", {
22645
+ }, [weekDay])), daysInMonth.value.map((item, index) => createVNode("div", {
22593
22646
  "class": ['v-date-picker-month__day', {
22594
22647
  'v-date-picker-month__day--selected': item.isSelected,
22595
22648
  'v-date-picker-month__day--start': item.isStart,
@@ -22907,6 +22960,10 @@ const makeVDatePickerProps = propsFactory({
22907
22960
  type: String,
22908
22961
  default: '$vuetify.datePicker.input.placeholder'
22909
22962
  },
22963
+ inputPlaceholder: {
22964
+ type: String,
22965
+ default: 'dd/mm/yyyy'
22966
+ },
22910
22967
  header: {
22911
22968
  type: String,
22912
22969
  default: '$vuetify.datePicker.header'
@@ -22941,24 +22998,40 @@ const VDatePicker = genericComponent()({
22941
22998
  model,
22942
22999
  displayDate,
22943
23000
  viewMode,
22944
- inputMode
23001
+ inputMode,
23002
+ isEqual
22945
23003
  } = createDatePicker(props);
22946
23004
  const isReversing = shallowRef(false);
22947
- const inputModel = computed(() => model.value.length ? adapter.format(model.value[0], 'keyboardDate') : '');
23005
+ const inputModel = ref(model.value.map(date => adapter.format(date, 'keyboardDate')));
23006
+ const temporaryModel = ref(model.value);
22948
23007
  const title = computed(() => t(props.title));
22949
23008
  const header = computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header));
22950
23009
  const headerIcon = computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon);
22951
23010
  const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
22952
- watch(inputModel, () => {
23011
+ function updateFromInput(input, index) {
22953
23012
  const {
22954
23013
  isValid,
22955
23014
  date
22956
23015
  } = adapter;
22957
- model.value = isValid(inputModel.value) ? [date(inputModel.value)] : [];
23016
+ if (isValid(input)) {
23017
+ const newModel = model.value.slice();
23018
+ newModel[index] = date(input);
23019
+ if (props.hideActions) {
23020
+ model.value = newModel;
23021
+ } else {
23022
+ temporaryModel.value = newModel;
23023
+ }
23024
+ }
23025
+ }
23026
+ watch(model, val => {
23027
+ if (!isEqual(val, temporaryModel.value)) {
23028
+ temporaryModel.value = val;
23029
+ }
23030
+ inputModel.value = val.map(date => adapter.format(date, 'keyboardDate'));
22958
23031
  });
22959
- watch(model, (val, oldVal) => {
22960
- if (props.hideActions) {
22961
- emit('update:modelValue', val);
23032
+ watch(temporaryModel, (val, oldVal) => {
23033
+ if (props.hideActions && !isEqual(val, model.value)) {
23034
+ model.value = val;
22962
23035
  }
22963
23036
  if (val[0] && oldVal[0]) {
22964
23037
  isReversing.value = adapter.isBefore(val[0], oldVal[0]);
@@ -22969,7 +23042,7 @@ const VDatePicker = genericComponent()({
22969
23042
  }
22970
23043
  function onClickSave() {
22971
23044
  emit('click:save');
22972
- emit('update:modelValue', model.value);
23045
+ model.value = temporaryModel.value;
22973
23046
  }
22974
23047
  function onClickAppend() {
22975
23048
  inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar';
@@ -23005,8 +23078,8 @@ const VDatePicker = genericComponent()({
23005
23078
  default: () => [viewMode.value === 'month' ? createVNode(VDatePickerMonth, mergeProps({
23006
23079
  "key": "date-picker-month"
23007
23080
  }, datePickerMonthProps, {
23008
- "modelValue": model.value,
23009
- "onUpdate:modelValue": $event => model.value = $event,
23081
+ "modelValue": temporaryModel.value,
23082
+ "onUpdate:modelValue": $event => temporaryModel.value = $event,
23010
23083
  "displayDate": displayDate.value,
23011
23084
  "onUpdate:displayDate": $event => displayDate.value = $event
23012
23085
  }), null) : createVNode(VDatePickerYears, mergeProps({
@@ -23020,10 +23093,10 @@ const VDatePicker = genericComponent()({
23020
23093
  })]) : createVNode("div", {
23021
23094
  "class": "v-date-picker__input"
23022
23095
  }, [createVNode(VTextField, {
23023
- "modelValue": inputModel.value,
23024
- "onUpdate:modelValue": $event => inputModel.value = $event,
23096
+ "modelValue": inputModel.value[0],
23097
+ "onUpdate:modelValue": v => updateFromInput(v, 0),
23025
23098
  "label": t(props.inputText),
23026
- "placeholder": "dd/mm/yyyy"
23099
+ "placeholder": props.inputPlaceholder
23027
23100
  }, null)]),
23028
23101
  actions: () => !props.hideActions ? createVNode("div", null, [createVNode(VBtn, {
23029
23102
  "variant": "text",
@@ -23310,6 +23383,7 @@ const VOtpInput = genericComponent()({
23310
23383
  },
23311
23384
  setup(props, _ref) {
23312
23385
  let {
23386
+ attrs,
23313
23387
  emit,
23314
23388
  slots
23315
23389
  } = _ref;
@@ -23335,34 +23409,36 @@ const VOtpInput = genericComponent()({
23335
23409
  const value = current.value.value;
23336
23410
  array[focusIndex.value] = value;
23337
23411
  model.value = array;
23412
+ let target = null;
23413
+ if (focusIndex.value > model.value.length) {
23414
+ target = model.value.length + 1;
23415
+ } else if (focusIndex.value + 1 !== Number(props.length)) {
23416
+ target = 'next';
23417
+ } else {
23418
+ requestAnimationFrame(() => current.value?.blur());
23419
+ }
23420
+ if (target) focusChild(contentRef.value, target);
23338
23421
  }
23339
23422
  function onKeydown(e) {
23340
23423
  const array = model.value.slice();
23341
23424
  const index = focusIndex.value;
23342
23425
  let target = null;
23426
+ if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'].includes(e.key)) return;
23427
+ e.preventDefault();
23343
23428
  if (e.key === 'ArrowLeft') {
23344
23429
  target = 'prev';
23345
23430
  } else if (e.key === 'ArrowRight') {
23346
23431
  target = 'next';
23347
- } else if (e.key === 'Backspace') {
23348
- if (focusIndex.value > 0) {
23349
- target = 'prev';
23350
- }
23351
- } else if (e.key === 'Delete') {
23432
+ } else if (['Backspace', 'Delete'].includes(e.key)) {
23352
23433
  array[focusIndex.value] = '';
23353
23434
  model.value = array;
23354
- requestAnimationFrame(() => {
23355
- inputRef.value[index].select();
23356
- });
23357
- } else if (props.type === 'number' && isNaN(parseInt(e.key))) {
23358
- return;
23359
- } else if (focusIndex.value > model.value.length) {
23360
- target = model.value.length + 1;
23361
- } else if (focusIndex.value + 1 !== Number(props.length)) {
23362
- target = 'next';
23363
- } else {
23364
- requestAnimationFrame(() => current.value?.blur());
23365
- return;
23435
+ if (focusIndex.value > 0 && e.key === 'Backspace') {
23436
+ target = 'prev';
23437
+ } else {
23438
+ requestAnimationFrame(() => {
23439
+ inputRef.value[index].select();
23440
+ });
23441
+ }
23366
23442
  }
23367
23443
  requestAnimationFrame(() => {
23368
23444
  if (target != null) {
@@ -23408,12 +23484,13 @@ const VOtpInput = genericComponent()({
23408
23484
  });
23409
23485
  });
23410
23486
  useRender(() => {
23411
- return createVNode("div", {
23487
+ const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
23488
+ return createVNode("div", mergeProps({
23412
23489
  "class": ['v-otp-input', {
23413
23490
  'v-otp-input--divided': !!props.divider
23414
23491
  }, props.class],
23415
23492
  "style": [props.style]
23416
- }, [createVNode("div", {
23493
+ }, rootAttrs), [createVNode("div", {
23417
23494
  "ref": contentRef,
23418
23495
  "class": "v-otp-input__content",
23419
23496
  "style": [dimensionStyles.value]
@@ -23444,7 +23521,12 @@ const VOtpInput = genericComponent()({
23444
23521
  "onPaste": event => onPaste(i, event)
23445
23522
  }, null);
23446
23523
  }
23447
- })])), createVNode(VOverlay, {
23524
+ })])), createVNode("input", mergeProps({
23525
+ "class": "v-otp-input-input",
23526
+ "type": "hidden"
23527
+ }, inputAttrs, {
23528
+ "value": model.value.join('')
23529
+ }), null), createVNode(VOverlay, {
23448
23530
  "contained": true,
23449
23531
  "content-class": "v-otp-input__loader",
23450
23532
  "model-value": !!props.loading,
@@ -23862,8 +23944,8 @@ const makeVStepperProps = propsFactory({
23862
23944
  mandatory: 'force',
23863
23945
  selectedClass: 'v-stepper-item--selected'
23864
23946
  }),
23865
- ...omit(makeVSheetProps(), ['color']),
23866
- ...makeVStepperActionsProps()
23947
+ ...makeVSheetProps(),
23948
+ ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
23867
23949
  }, 'VStepper');
23868
23950
  const VStepper = genericComponent()({
23869
23951
  name: 'VStepper',
@@ -23883,6 +23965,7 @@ const VStepper = genericComponent()({
23883
23965
  selected
23884
23966
  } = useGroup(props, VStepperSymbol);
23885
23967
  const {
23968
+ color,
23886
23969
  editable,
23887
23970
  prevText,
23888
23971
  nextText
@@ -23912,16 +23995,19 @@ const VStepper = genericComponent()({
23912
23995
  nextText
23913
23996
  },
23914
23997
  VStepperActions: {
23915
- disabled
23998
+ color,
23999
+ disabled,
24000
+ prevText,
24001
+ nextText
23916
24002
  }
23917
24003
  });
23918
24004
  useRender(() => {
23919
24005
  const [sheetProps] = VSheet.filterProps(props);
23920
- const [stepperActionProps] = VStepperActions.filterProps(props);
23921
24006
  const hasHeader = !!(slots.header || props.items.length);
23922
24007
  const hasWindow = props.items.length > 0;
23923
24008
  const hasActions = !props.hideActions && !!(hasWindow || slots.actions);
23924
24009
  return createVNode(VSheet, mergeProps(sheetProps, {
24010
+ "color": props.bgColor,
23925
24011
  "class": ['v-stepper', {
23926
24012
  'v-stepper--alt-labels': props.altLabels,
23927
24013
  'v-stepper--flat': props.flat,
@@ -23953,12 +24039,11 @@ const VStepper = genericComponent()({
23953
24039
  }), hasActions && (slots.actions?.({
23954
24040
  next,
23955
24041
  prev
23956
- }) ?? createVNode(VStepperActions, mergeProps({
23957
- "key": "stepper-actions"
23958
- }, stepperActionProps, {
24042
+ }) ?? createVNode(VStepperActions, {
24043
+ "key": "stepper-actions",
23959
24044
  "onClick:prev": prev,
23960
24045
  "onClick:next": next
23961
- }), null))]
24046
+ }, null))]
23962
24047
  });
23963
24048
  });
23964
24049
  return {
@@ -24346,7 +24431,7 @@ function createVuetify$1() {
24346
24431
  date
24347
24432
  };
24348
24433
  }
24349
- const version$1 = "3.3.11";
24434
+ const version$1 = "3.3.13";
24350
24435
  createVuetify$1.version = version$1;
24351
24436
 
24352
24437
  // Vue's inject() can only be used in setup
@@ -24360,7 +24445,7 @@ function inject(key) {
24360
24445
 
24361
24446
  /* eslint-disable local-rules/sort-imports */
24362
24447
 
24363
- const version = "3.3.11";
24448
+ const version = "3.3.13";
24364
24449
 
24365
24450
  /* eslint-disable local-rules/sort-imports */
24366
24451