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
  */
@@ -1657,6 +1657,7 @@
1657
1657
 
1658
1658
  var en = {
1659
1659
  badge: 'Badge',
1660
+ open: 'Open',
1660
1661
  close: 'Close',
1661
1662
  dataIterator: {
1662
1663
  noResultsText: 'No matching records found',
@@ -5860,6 +5861,20 @@
5860
5861
  }
5861
5862
  }) : props.label;
5862
5863
  const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
5864
+ const inputNode = vue.createVNode("input", vue.mergeProps({
5865
+ "ref": input,
5866
+ "checked": model.value,
5867
+ "disabled": !!(props.readonly || props.disabled),
5868
+ "id": id.value,
5869
+ "onBlur": onBlur,
5870
+ "onFocus": onFocus,
5871
+ "onInput": onInput,
5872
+ "aria-disabled": !!(props.readonly || props.disabled),
5873
+ "type": props.type,
5874
+ "value": trueValue.value,
5875
+ "name": props.name,
5876
+ "aria-checked": props.type === 'checkbox' ? model.value : undefined
5877
+ }, inputAttrs), null);
5863
5878
  return vue.createVNode("div", vue.mergeProps({
5864
5879
  "class": ['v-selection-control', {
5865
5880
  'v-selection-control--dirty': model.value,
@@ -5876,32 +5891,21 @@
5876
5891
  "style": textColorStyles.value
5877
5892
  }, [slots.default?.(), vue.withDirectives(vue.createVNode("div", {
5878
5893
  "class": ['v-selection-control__input']
5879
- }, [icon.value && vue.createVNode(VIcon, {
5880
- "key": "icon",
5881
- "icon": icon.value
5882
- }, null), vue.createVNode("input", vue.mergeProps({
5883
- "ref": input,
5884
- "checked": model.value,
5885
- "disabled": !!(props.readonly || props.disabled),
5886
- "id": id.value,
5887
- "onBlur": onBlur,
5888
- "onFocus": onFocus,
5889
- "onInput": onInput,
5890
- "aria-disabled": !!(props.readonly || props.disabled),
5891
- "type": props.type,
5892
- "value": trueValue.value,
5893
- "name": props.name,
5894
- "aria-checked": props.type === 'checkbox' ? model.value : undefined
5895
- }, inputAttrs), null), slots.input?.({
5894
+ }, [slots.input?.({
5896
5895
  model,
5897
5896
  textColorClasses,
5898
5897
  textColorStyles,
5898
+ inputNode,
5899
+ icon: icon.value,
5899
5900
  props: {
5900
5901
  onFocus,
5901
5902
  onBlur,
5902
5903
  id: id.value
5903
5904
  }
5904
- })]), [[vue.resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && vue.createVNode(VLabel, {
5905
+ }) ?? vue.createVNode(vue.Fragment, null, [icon.value && vue.createVNode(VIcon, {
5906
+ "key": "icon",
5907
+ "icon": icon.value
5908
+ }, null), inputNode])]), [[vue.resolveDirective("ripple"), props.ripple && [!props.disabled && !props.readonly, null, ['center', 'circle']]]])]), label && vue.createVNode(VLabel, {
5905
5909
  "for": id.value,
5906
5910
  "clickable": true
5907
5911
  }, {
@@ -6798,6 +6802,7 @@
6798
6802
  const closeProps = vue.computed(() => ({
6799
6803
  'aria-label': t(props.closeLabel),
6800
6804
  onClick(e) {
6805
+ e.stopPropagation();
6801
6806
  isActive.value = false;
6802
6807
  emit('click:close', e);
6803
6808
  }
@@ -7701,7 +7706,9 @@
7701
7706
  }
7702
7707
  }, {
7703
7708
  default: () => [slots.prepend?.(slotProps.value)]
7704
- })]), vue.createVNode("div", {
7709
+ }), vue.createVNode("div", {
7710
+ "class": "v-list-item__spacer"
7711
+ }, null)]), vue.createVNode("div", {
7705
7712
  "class": "v-list-item__content",
7706
7713
  "data-no-activator": ""
7707
7714
  }, [hasTitle && vue.createVNode(VListItemTitle, {
@@ -7745,7 +7752,9 @@
7745
7752
  }
7746
7753
  }, {
7747
7754
  default: () => [slots.append?.(slotProps.value)]
7748
- })])]
7755
+ }), vue.createVNode("div", {
7756
+ "class": "v-list-item__spacer"
7757
+ }, null)])]
7749
7758
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7750
7759
  });
7751
7760
  return {};
@@ -9856,10 +9865,11 @@
9856
9865
  }, 40);
9857
9866
  }
9858
9867
  });
9859
- function onFocusIn(e) {
9868
+ async function onFocusIn(e) {
9860
9869
  const before = e.relatedTarget;
9861
9870
  const after = e.target;
9862
- if (before !== after && overlay.value?.contentEl &&
9871
+ await vue.nextTick();
9872
+ if (isActive.value && before !== after && overlay.value?.contentEl &&
9863
9873
  // We're the topmost menu
9864
9874
  overlay.value?.globalTop &&
9865
9875
  // It isn't the document or the menu body
@@ -10195,7 +10205,7 @@
10195
10205
  'v-field--no-label': !label,
10196
10206
  [`v-field--variant-${props.variant}`]: true
10197
10207
  }, themeClasses.value, backgroundColorClasses.value, focusClasses.value, loaderClasses.value, roundedClasses.value, rtlClasses.value, props.class],
10198
- "style": [backgroundColorStyles.value, textColorStyles.value, props.style],
10208
+ "style": [backgroundColorStyles.value, props.style],
10199
10209
  "onClick": onClick
10200
10210
  }, attrs), [vue.createVNode("div", {
10201
10211
  "class": "v-field__overlay"
@@ -10219,7 +10229,8 @@
10219
10229
  "ref": floatingLabelRef,
10220
10230
  "class": [textColorClasses.value],
10221
10231
  "floating": true,
10222
- "for": id.value
10232
+ "for": id.value,
10233
+ "style": textColorStyles.value
10223
10234
  }, {
10224
10235
  default: () => [label]
10225
10236
  }), vue.createVNode(VFieldLabel, {
@@ -10255,7 +10266,8 @@
10255
10266
  "key": "append-icon",
10256
10267
  "name": "appendInner"
10257
10268
  }, null)]), vue.createVNode("div", {
10258
- "class": ['v-field__outline', textColorClasses.value]
10269
+ "class": ['v-field__outline', textColorClasses.value],
10270
+ "style": textColorStyles.value
10259
10271
  }, [isOutlined && vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
10260
10272
  "class": "v-field__outline__start"
10261
10273
  }, null), hasLabel.value && vue.createVNode("div", {
@@ -10299,6 +10311,7 @@
10299
10311
  persistentPlaceholder: Boolean,
10300
10312
  persistentCounter: Boolean,
10301
10313
  suffix: String,
10314
+ role: String,
10302
10315
  type: {
10303
10316
  type: String,
10304
10317
  default: 'text'
@@ -10423,7 +10436,7 @@
10423
10436
  "onClick:clear": onClear,
10424
10437
  "onClick:prependInner": props['onClick:prependInner'],
10425
10438
  "onClick:appendInner": props['onClick:appendInner'],
10426
- "role": "textbox"
10439
+ "role": props.role
10427
10440
  }, fieldProps, {
10428
10441
  "id": id.value,
10429
10442
  "active": isActive.value || isDirty.value,
@@ -10462,10 +10475,12 @@
10462
10475
  "class": "v-text-field__prefix"
10463
10476
  }, [vue.createVNode("span", {
10464
10477
  "class": "v-text-field__prefix__text"
10465
- }, [props.prefix])]), vue.createVNode("div", {
10478
+ }, [props.prefix])]), slots.default ? vue.createVNode("div", {
10466
10479
  "class": fieldClass,
10467
10480
  "data-no-activator": ""
10468
- }, [slots.default ? vue.createVNode(vue.Fragment, null, [slots.default(), inputNode]) : vue.cloneVNode(inputNode)]), props.suffix && vue.createVNode("span", {
10481
+ }, [slots.default(), inputNode]) : vue.cloneVNode(inputNode, {
10482
+ class: fieldClass
10483
+ }), props.suffix && vue.createVNode("span", {
10469
10484
  "class": "v-text-field__suffix"
10470
10485
  }, [vue.createVNode("span", {
10471
10486
  "class": "v-text-field__suffix__text"
@@ -10784,6 +10799,14 @@
10784
10799
  const makeSelectProps = propsFactory({
10785
10800
  chips: Boolean,
10786
10801
  closableChips: Boolean,
10802
+ closeText: {
10803
+ type: String,
10804
+ default: '$vuetify.close'
10805
+ },
10806
+ openText: {
10807
+ type: String,
10808
+ default: '$vuetify.open'
10809
+ },
10787
10810
  eager: Boolean,
10788
10811
  hideNoData: Boolean,
10789
10812
  hideSelected: Boolean,
@@ -10813,7 +10836,8 @@
10813
10836
  const makeVSelectProps = propsFactory({
10814
10837
  ...makeSelectProps(),
10815
10838
  ...omit(makeVTextFieldProps({
10816
- modelValue: null
10839
+ modelValue: null,
10840
+ role: 'button'
10817
10841
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
10818
10842
  ...makeTransitionProps({
10819
10843
  transition: {
@@ -10868,6 +10892,7 @@
10868
10892
  });
10869
10893
  const selected = vue.computed(() => selections.value.map(selection => selection.props.value));
10870
10894
  const isFocused = vue.shallowRef(false);
10895
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
10871
10896
  let keyboardLookupPrefix = '';
10872
10897
  let keyboardLookupLastTime;
10873
10898
  const displayItems = vue.computed(() => {
@@ -10994,7 +11019,9 @@
10994
11019
  "onClick:clear": onClear,
10995
11020
  "onMousedown:control": onMousedownControl,
10996
11021
  "onBlur": onBlur,
10997
- "onKeydown": onKeydown
11022
+ "onKeydown": onKeydown,
11023
+ "aria-label": t(label.value),
11024
+ "title": t(label.value)
10998
11025
  }), {
10999
11026
  ...slots,
11000
11027
  default: () => vue.createVNode(vue.Fragment, null, [vue.createVNode(VMenu, vue.mergeProps({
@@ -11257,7 +11284,8 @@
11257
11284
  }),
11258
11285
  ...makeSelectProps(),
11259
11286
  ...omit(makeVTextFieldProps({
11260
- modelValue: null
11287
+ modelValue: null,
11288
+ role: 'combobox'
11261
11289
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
11262
11290
  ...makeTransitionProps({
11263
11291
  transition: false
@@ -11294,6 +11322,7 @@
11294
11322
  });
11295
11323
  const selectionIndex = vue.shallowRef(-1);
11296
11324
  const color = vue.computed(() => vTextFieldRef.value?.color);
11325
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
11297
11326
  const {
11298
11327
  items,
11299
11328
  transformIn,
@@ -11641,7 +11670,9 @@
11641
11670
  "class": "v-autocomplete__menu-icon",
11642
11671
  "icon": props.menuIcon,
11643
11672
  "onMousedown": onMousedownMenuIcon,
11644
- "onClick": noop
11673
+ "onClick": noop,
11674
+ "aria-label": t(label.value),
11675
+ "title": t(label.value)
11645
11676
  }, null) : undefined]);
11646
11677
  }
11647
11678
  });
@@ -14785,7 +14816,8 @@
14785
14816
  returnObject: true
14786
14817
  }),
14787
14818
  ...omit(makeVTextFieldProps({
14788
- modelValue: null
14819
+ modelValue: null,
14820
+ role: 'combobox'
14789
14821
  }), ['validationValue', 'dirty', 'appendInnerIcon']),
14790
14822
  ...makeTransitionProps({
14791
14823
  transition: false
@@ -14824,6 +14856,7 @@
14824
14856
  const selectionIndex = vue.shallowRef(-1);
14825
14857
  let cleared = false;
14826
14858
  const color = vue.computed(() => vTextFieldRef.value?.color);
14859
+ const label = vue.computed(() => menu.value ? props.closeText : props.openText);
14827
14860
  const {
14828
14861
  items,
14829
14862
  transformIn,
@@ -15199,7 +15232,9 @@
15199
15232
  "class": "v-combobox__menu-icon",
15200
15233
  "icon": props.menuIcon,
15201
15234
  "onMousedown": onMousedownMenuIcon,
15202
- "onClick": noop
15235
+ "onClick": noop,
15236
+ "aria-label": t(label.value),
15237
+ "title": t(label.value)
15203
15238
  }, null) : undefined]);
15204
15239
  }
15205
15240
  });
@@ -16163,7 +16198,7 @@
16163
16198
  });
16164
16199
 
16165
16200
  // Utilities
16166
- const VSpacer = createSimpleFunctional('flex-grow-1', 'div', 'VSpacer');
16201
+ const VSpacer = createSimpleFunctional('v-spacer', 'div', 'VSpacer');
16167
16202
 
16168
16203
  // Composables
16169
16204
  const makeVHoverProps = propsFactory({
@@ -18542,25 +18577,32 @@
18542
18577
  }, null),
18543
18578
  input: _ref3 => {
18544
18579
  let {
18545
- textColorClasses,
18546
- textColorStyles
18580
+ inputNode,
18581
+ icon
18547
18582
  } = _ref3;
18548
- return vue.createVNode("div", {
18549
- "class": ['v-switch__thumb', textColorClasses.value],
18550
- "style": textColorStyles.value
18551
- }, [props.loading && vue.createVNode(LoaderSlot, {
18552
- "name": "v-switch",
18553
- "active": true,
18554
- "color": isValid.value === false ? undefined : loaderColor.value
18555
- }, {
18556
- default: slotProps => slots.loader ? slots.loader(slotProps) : vue.createVNode(VProgressCircular, {
18557
- "active": slotProps.isActive,
18558
- "color": slotProps.color,
18559
- "indeterminate": true,
18560
- "size": "16",
18561
- "width": "2"
18562
- }, null)
18563
- })]);
18583
+ return vue.createVNode(vue.Fragment, null, [inputNode, vue.createVNode("div", {
18584
+ "class": ['v-switch__thumb', {
18585
+ 'v-switch__thumb--filled': icon || props.loading
18586
+ }]
18587
+ }, [vue.createVNode(VScaleTransition, null, {
18588
+ default: () => [!props.loading ? icon && vue.createVNode(VIcon, {
18589
+ "key": icon,
18590
+ "icon": icon,
18591
+ "size": "x-small"
18592
+ }, null) : vue.createVNode(LoaderSlot, {
18593
+ "name": "v-switch",
18594
+ "active": true,
18595
+ "color": isValid.value === false ? undefined : loaderColor.value
18596
+ }, {
18597
+ default: slotProps => slots.loader ? slots.loader(slotProps) : vue.createVNode(VProgressCircular, {
18598
+ "active": slotProps.isActive,
18599
+ "color": slotProps.color,
18600
+ "indeterminate": true,
18601
+ "size": "16",
18602
+ "width": "2"
18603
+ }, null)
18604
+ })]
18605
+ })])]);
18564
18606
  }
18565
18607
  });
18566
18608
  }
@@ -19041,8 +19083,7 @@
19041
19083
  "onMousedown": onControlMousedown,
19042
19084
  "onClick:clear": onClear,
19043
19085
  "onClick:prependInner": props['onClick:prependInner'],
19044
- "onClick:appendInner": props['onClick:appendInner'],
19045
- "role": "textbox"
19086
+ "onClick:appendInner": props['onClick:appendInner']
19046
19087
  }, fieldProps, {
19047
19088
  "active": isActive.value || isDirty.value,
19048
19089
  "centerAffix": rows.value === 1 && !isPlainOrUnderlined.value,
@@ -21907,7 +21948,7 @@
21907
21948
  const weekday = new Date(sundayJanuarySecond2000);
21908
21949
  weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i);
21909
21950
  return new Intl.DateTimeFormat(locale, {
21910
- weekday: 'short'
21951
+ weekday: 'narrow'
21911
21952
  }).format(weekday);
21912
21953
  });
21913
21954
  }
@@ -22232,13 +22273,23 @@
22232
22273
  const date = adapter.date(input);
22233
22274
  return adapter.isValid(date) ? date : fallback;
22234
22275
  }
22276
+ function isEqual(model, comparing) {
22277
+ if (model.length !== comparing.length) return false;
22278
+ for (let i = 0; i < model.length; i++) {
22279
+ if (comparing[i] && !adapter.isEqual(model[i], comparing[i])) {
22280
+ return false;
22281
+ }
22282
+ }
22283
+ return true;
22284
+ }
22235
22285
  return {
22236
22286
  model,
22237
22287
  adapter,
22238
22288
  inputMode,
22239
22289
  viewMode,
22240
22290
  displayDate,
22241
- parseKeyboardDate
22291
+ parseKeyboardDate,
22292
+ isEqual
22242
22293
  };
22243
22294
  }
22244
22295
 
@@ -22336,7 +22387,8 @@
22336
22387
  model,
22337
22388
  displayDate,
22338
22389
  viewMode,
22339
- inputMode
22390
+ inputMode,
22391
+ isEqual
22340
22392
  } = createDateInput(props, !!props.multiple);
22341
22393
  return {
22342
22394
  hoverDate,
@@ -22347,7 +22399,8 @@
22347
22399
  model,
22348
22400
  displayDate,
22349
22401
  viewMode,
22350
- inputMode
22402
+ inputMode,
22403
+ isEqual
22351
22404
  };
22352
22405
  }
22353
22406
  function useDatePicker() {
@@ -22593,7 +22646,7 @@
22593
22646
  "onTouchstart": handleMousedown
22594
22647
  }, [!props.hideWeekdays && adapter.getWeekdays().map(weekDay => vue.createVNode("div", {
22595
22648
  "class": ['v-date-picker-month__day', 'v-date-picker-month__weekday']
22596
- }, [weekDay.charAt(0)])), daysInMonth.value.map((item, index) => vue.createVNode("div", {
22649
+ }, [weekDay])), daysInMonth.value.map((item, index) => vue.createVNode("div", {
22597
22650
  "class": ['v-date-picker-month__day', {
22598
22651
  'v-date-picker-month__day--selected': item.isSelected,
22599
22652
  'v-date-picker-month__day--start': item.isStart,
@@ -22911,6 +22964,10 @@
22911
22964
  type: String,
22912
22965
  default: '$vuetify.datePicker.input.placeholder'
22913
22966
  },
22967
+ inputPlaceholder: {
22968
+ type: String,
22969
+ default: 'dd/mm/yyyy'
22970
+ },
22914
22971
  header: {
22915
22972
  type: String,
22916
22973
  default: '$vuetify.datePicker.header'
@@ -22945,24 +23002,40 @@
22945
23002
  model,
22946
23003
  displayDate,
22947
23004
  viewMode,
22948
- inputMode
23005
+ inputMode,
23006
+ isEqual
22949
23007
  } = createDatePicker(props);
22950
23008
  const isReversing = vue.shallowRef(false);
22951
- const inputModel = vue.computed(() => model.value.length ? adapter.format(model.value[0], 'keyboardDate') : '');
23009
+ const inputModel = vue.ref(model.value.map(date => adapter.format(date, 'keyboardDate')));
23010
+ const temporaryModel = vue.ref(model.value);
22952
23011
  const title = vue.computed(() => t(props.title));
22953
23012
  const header = vue.computed(() => model.value.length ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header));
22954
23013
  const headerIcon = vue.computed(() => inputMode.value === 'calendar' ? props.keyboardIcon : props.calendarIcon);
22955
23014
  const headerTransition = vue.computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
22956
- vue.watch(inputModel, () => {
23015
+ function updateFromInput(input, index) {
22957
23016
  const {
22958
23017
  isValid,
22959
23018
  date
22960
23019
  } = adapter;
22961
- model.value = isValid(inputModel.value) ? [date(inputModel.value)] : [];
23020
+ if (isValid(input)) {
23021
+ const newModel = model.value.slice();
23022
+ newModel[index] = date(input);
23023
+ if (props.hideActions) {
23024
+ model.value = newModel;
23025
+ } else {
23026
+ temporaryModel.value = newModel;
23027
+ }
23028
+ }
23029
+ }
23030
+ vue.watch(model, val => {
23031
+ if (!isEqual(val, temporaryModel.value)) {
23032
+ temporaryModel.value = val;
23033
+ }
23034
+ inputModel.value = val.map(date => adapter.format(date, 'keyboardDate'));
22962
23035
  });
22963
- vue.watch(model, (val, oldVal) => {
22964
- if (props.hideActions) {
22965
- emit('update:modelValue', val);
23036
+ vue.watch(temporaryModel, (val, oldVal) => {
23037
+ if (props.hideActions && !isEqual(val, model.value)) {
23038
+ model.value = val;
22966
23039
  }
22967
23040
  if (val[0] && oldVal[0]) {
22968
23041
  isReversing.value = adapter.isBefore(val[0], oldVal[0]);
@@ -22973,7 +23046,7 @@
22973
23046
  }
22974
23047
  function onClickSave() {
22975
23048
  emit('click:save');
22976
- emit('update:modelValue', model.value);
23049
+ model.value = temporaryModel.value;
22977
23050
  }
22978
23051
  function onClickAppend() {
22979
23052
  inputMode.value = inputMode.value === 'calendar' ? 'keyboard' : 'calendar';
@@ -23009,8 +23082,8 @@
23009
23082
  default: () => [viewMode.value === 'month' ? vue.createVNode(VDatePickerMonth, vue.mergeProps({
23010
23083
  "key": "date-picker-month"
23011
23084
  }, datePickerMonthProps, {
23012
- "modelValue": model.value,
23013
- "onUpdate:modelValue": $event => model.value = $event,
23085
+ "modelValue": temporaryModel.value,
23086
+ "onUpdate:modelValue": $event => temporaryModel.value = $event,
23014
23087
  "displayDate": displayDate.value,
23015
23088
  "onUpdate:displayDate": $event => displayDate.value = $event
23016
23089
  }), null) : vue.createVNode(VDatePickerYears, vue.mergeProps({
@@ -23024,10 +23097,10 @@
23024
23097
  })]) : vue.createVNode("div", {
23025
23098
  "class": "v-date-picker__input"
23026
23099
  }, [vue.createVNode(VTextField, {
23027
- "modelValue": inputModel.value,
23028
- "onUpdate:modelValue": $event => inputModel.value = $event,
23100
+ "modelValue": inputModel.value[0],
23101
+ "onUpdate:modelValue": v => updateFromInput(v, 0),
23029
23102
  "label": t(props.inputText),
23030
- "placeholder": "dd/mm/yyyy"
23103
+ "placeholder": props.inputPlaceholder
23031
23104
  }, null)]),
23032
23105
  actions: () => !props.hideActions ? vue.createVNode("div", null, [vue.createVNode(VBtn, {
23033
23106
  "variant": "text",
@@ -23314,6 +23387,7 @@
23314
23387
  },
23315
23388
  setup(props, _ref) {
23316
23389
  let {
23390
+ attrs,
23317
23391
  emit,
23318
23392
  slots
23319
23393
  } = _ref;
@@ -23339,34 +23413,36 @@
23339
23413
  const value = current.value.value;
23340
23414
  array[focusIndex.value] = value;
23341
23415
  model.value = array;
23416
+ let target = null;
23417
+ if (focusIndex.value > model.value.length) {
23418
+ target = model.value.length + 1;
23419
+ } else if (focusIndex.value + 1 !== Number(props.length)) {
23420
+ target = 'next';
23421
+ } else {
23422
+ requestAnimationFrame(() => current.value?.blur());
23423
+ }
23424
+ if (target) focusChild(contentRef.value, target);
23342
23425
  }
23343
23426
  function onKeydown(e) {
23344
23427
  const array = model.value.slice();
23345
23428
  const index = focusIndex.value;
23346
23429
  let target = null;
23430
+ if (!['ArrowLeft', 'ArrowRight', 'Backspace', 'Delete'].includes(e.key)) return;
23431
+ e.preventDefault();
23347
23432
  if (e.key === 'ArrowLeft') {
23348
23433
  target = 'prev';
23349
23434
  } else if (e.key === 'ArrowRight') {
23350
23435
  target = 'next';
23351
- } else if (e.key === 'Backspace') {
23352
- if (focusIndex.value > 0) {
23353
- target = 'prev';
23354
- }
23355
- } else if (e.key === 'Delete') {
23436
+ } else if (['Backspace', 'Delete'].includes(e.key)) {
23356
23437
  array[focusIndex.value] = '';
23357
23438
  model.value = array;
23358
- requestAnimationFrame(() => {
23359
- inputRef.value[index].select();
23360
- });
23361
- } else if (props.type === 'number' && isNaN(parseInt(e.key))) {
23362
- return;
23363
- } else if (focusIndex.value > model.value.length) {
23364
- target = model.value.length + 1;
23365
- } else if (focusIndex.value + 1 !== Number(props.length)) {
23366
- target = 'next';
23367
- } else {
23368
- requestAnimationFrame(() => current.value?.blur());
23369
- return;
23439
+ if (focusIndex.value > 0 && e.key === 'Backspace') {
23440
+ target = 'prev';
23441
+ } else {
23442
+ requestAnimationFrame(() => {
23443
+ inputRef.value[index].select();
23444
+ });
23445
+ }
23370
23446
  }
23371
23447
  requestAnimationFrame(() => {
23372
23448
  if (target != null) {
@@ -23412,12 +23488,13 @@
23412
23488
  });
23413
23489
  });
23414
23490
  useRender(() => {
23415
- return vue.createVNode("div", {
23491
+ const [rootAttrs, inputAttrs] = filterInputAttrs(attrs);
23492
+ return vue.createVNode("div", vue.mergeProps({
23416
23493
  "class": ['v-otp-input', {
23417
23494
  'v-otp-input--divided': !!props.divider
23418
23495
  }, props.class],
23419
23496
  "style": [props.style]
23420
- }, [vue.createVNode("div", {
23497
+ }, rootAttrs), [vue.createVNode("div", {
23421
23498
  "ref": contentRef,
23422
23499
  "class": "v-otp-input__content",
23423
23500
  "style": [dimensionStyles.value]
@@ -23448,7 +23525,12 @@
23448
23525
  "onPaste": event => onPaste(i, event)
23449
23526
  }, null);
23450
23527
  }
23451
- })])), vue.createVNode(VOverlay, {
23528
+ })])), vue.createVNode("input", vue.mergeProps({
23529
+ "class": "v-otp-input-input",
23530
+ "type": "hidden"
23531
+ }, inputAttrs, {
23532
+ "value": model.value.join('')
23533
+ }), null), vue.createVNode(VOverlay, {
23452
23534
  "contained": true,
23453
23535
  "content-class": "v-otp-input__loader",
23454
23536
  "model-value": !!props.loading,
@@ -23866,8 +23948,8 @@
23866
23948
  mandatory: 'force',
23867
23949
  selectedClass: 'v-stepper-item--selected'
23868
23950
  }),
23869
- ...omit(makeVSheetProps(), ['color']),
23870
- ...makeVStepperActionsProps()
23951
+ ...makeVSheetProps(),
23952
+ ...only(makeVStepperActionsProps(), ['prevText', 'nextText'])
23871
23953
  }, 'VStepper');
23872
23954
  const VStepper = genericComponent()({
23873
23955
  name: 'VStepper',
@@ -23887,6 +23969,7 @@
23887
23969
  selected
23888
23970
  } = useGroup(props, VStepperSymbol);
23889
23971
  const {
23972
+ color,
23890
23973
  editable,
23891
23974
  prevText,
23892
23975
  nextText
@@ -23916,16 +23999,19 @@
23916
23999
  nextText
23917
24000
  },
23918
24001
  VStepperActions: {
23919
- disabled
24002
+ color,
24003
+ disabled,
24004
+ prevText,
24005
+ nextText
23920
24006
  }
23921
24007
  });
23922
24008
  useRender(() => {
23923
24009
  const [sheetProps] = VSheet.filterProps(props);
23924
- const [stepperActionProps] = VStepperActions.filterProps(props);
23925
24010
  const hasHeader = !!(slots.header || props.items.length);
23926
24011
  const hasWindow = props.items.length > 0;
23927
24012
  const hasActions = !props.hideActions && !!(hasWindow || slots.actions);
23928
24013
  return vue.createVNode(VSheet, vue.mergeProps(sheetProps, {
24014
+ "color": props.bgColor,
23929
24015
  "class": ['v-stepper', {
23930
24016
  'v-stepper--alt-labels': props.altLabels,
23931
24017
  'v-stepper--flat': props.flat,
@@ -23957,12 +24043,11 @@
23957
24043
  }), hasActions && (slots.actions?.({
23958
24044
  next,
23959
24045
  prev
23960
- }) ?? vue.createVNode(VStepperActions, vue.mergeProps({
23961
- "key": "stepper-actions"
23962
- }, stepperActionProps, {
24046
+ }) ?? vue.createVNode(VStepperActions, {
24047
+ "key": "stepper-actions",
23963
24048
  "onClick:prev": prev,
23964
24049
  "onClick:next": next
23965
- }), null))]
24050
+ }, null))]
23966
24051
  });
23967
24052
  });
23968
24053
  return {
@@ -24350,7 +24435,7 @@
24350
24435
  date
24351
24436
  };
24352
24437
  }
24353
- const version$1 = "3.3.11";
24438
+ const version$1 = "3.3.13";
24354
24439
  createVuetify$1.version = version$1;
24355
24440
 
24356
24441
  // Vue's inject() can only be used in setup
@@ -24364,7 +24449,7 @@
24364
24449
 
24365
24450
  /* eslint-disable local-rules/sort-imports */
24366
24451
 
24367
- const version = "3.3.11";
24452
+ const version = "3.3.13";
24368
24453
 
24369
24454
  /* eslint-disable local-rules/sort-imports */
24370
24455