vuetify 3.7.4 → 3.7.6

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 (184) hide show
  1. package/dist/_component-variables-labs.sass +1 -0
  2. package/dist/json/attributes.json +3914 -3618
  3. package/dist/json/importMap-labs.json +34 -26
  4. package/dist/json/importMap.json +170 -170
  5. package/dist/json/tags.json +84 -0
  6. package/dist/json/web-types.json +7277 -6336
  7. package/dist/vuetify-labs.css +3535 -3460
  8. package/dist/vuetify-labs.d.ts +1909 -600
  9. package/dist/vuetify-labs.esm.js +428 -79
  10. package/dist/vuetify-labs.esm.js.map +1 -1
  11. package/dist/vuetify-labs.js +428 -79
  12. package/dist/vuetify-labs.min.css +2 -2
  13. package/dist/vuetify.css +4119 -4117
  14. package/dist/vuetify.d.ts +187 -189
  15. package/dist/vuetify.esm.js +95 -65
  16. package/dist/vuetify.esm.js.map +1 -1
  17. package/dist/vuetify.js +95 -65
  18. package/dist/vuetify.js.map +1 -1
  19. package/dist/vuetify.min.css +2 -2
  20. package/dist/vuetify.min.js +66 -65
  21. package/dist/vuetify.min.js.map +1 -1
  22. package/lib/components/VAutocomplete/VAutocomplete.mjs +6 -5
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  24. package/lib/components/VAutocomplete/index.d.mts +28 -28
  25. package/lib/components/VBadge/VBadge.css +4 -0
  26. package/lib/components/VBadge/VBadge.sass +4 -0
  27. package/lib/components/VChip/VChip.mjs +3 -2
  28. package/lib/components/VChip/VChip.mjs.map +1 -1
  29. package/lib/components/VChip/index.d.mts +9 -9
  30. package/lib/components/VCombobox/VCombobox.mjs +6 -5
  31. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  32. package/lib/components/VCombobox/index.d.mts +28 -28
  33. package/lib/components/VConfirmEdit/VConfirmEdit.mjs +9 -7
  34. package/lib/components/VConfirmEdit/VConfirmEdit.mjs.map +1 -1
  35. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.browser.mjs +1 -1
  36. package/lib/components/VConfirmEdit/__test__/VConfirmEdit.spec.browser.mjs.map +1 -1
  37. package/lib/components/VConfirmEdit/index.d.mts +3 -7
  38. package/lib/components/VDatePicker/VDatePickerHeader.mjs +2 -1
  39. package/lib/components/VDatePicker/VDatePickerHeader.mjs.map +1 -1
  40. package/lib/components/VDatePicker/index.d.mts +6 -6
  41. package/lib/components/VField/VField.mjs +2 -1
  42. package/lib/components/VField/VField.mjs.map +1 -1
  43. package/lib/components/VList/VList.mjs +3 -2
  44. package/lib/components/VList/VList.mjs.map +1 -1
  45. package/lib/components/VList/VListItem.mjs +17 -10
  46. package/lib/components/VList/VListItem.mjs.map +1 -1
  47. package/lib/components/VList/index.d.mts +12 -12
  48. package/lib/components/VRangeSlider/VRangeSlider.mjs +2 -2
  49. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  50. package/lib/components/VSelect/VSelect.mjs +5 -4
  51. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  52. package/lib/components/VSelect/index.d.mts +28 -28
  53. package/lib/components/VSelectionControl/VSelectionControl.css +1 -3
  54. package/lib/components/VSelectionControl/VSelectionControl.sass +1 -5
  55. package/lib/components/VStepper/VStepper.mjs +5 -4
  56. package/lib/components/VStepper/VStepper.mjs.map +1 -1
  57. package/lib/components/VStepper/VStepperItem.mjs +5 -4
  58. package/lib/components/VStepper/VStepperItem.mjs.map +1 -1
  59. package/lib/components/VStepper/index.d.mts +58 -52
  60. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +1 -1
  61. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  62. package/lib/components/index.d.mts +129 -133
  63. package/lib/composables/form.mjs +7 -2
  64. package/lib/composables/form.mjs.map +1 -1
  65. package/lib/composables/nested/nested.mjs +4 -2
  66. package/lib/composables/nested/nested.mjs.map +1 -1
  67. package/lib/composables/validation.mjs +10 -12
  68. package/lib/composables/validation.mjs.map +1 -1
  69. package/lib/composables/virtual.mjs +7 -2
  70. package/lib/composables/virtual.mjs.map +1 -1
  71. package/lib/entry-bundler.mjs +1 -1
  72. package/lib/framework.mjs +1 -1
  73. package/lib/iconsets/mdi.mjs +2 -1
  74. package/lib/iconsets/mdi.mjs.map +1 -1
  75. package/lib/index.d.mts +58 -56
  76. package/lib/labs/VDateInput/VDateInput.mjs +1 -1
  77. package/lib/labs/VDateInput/VDateInput.mjs.map +1 -1
  78. package/lib/labs/VFileUpload/VFileUpload.css +74 -0
  79. package/lib/labs/VFileUpload/VFileUpload.mjs +241 -0
  80. package/lib/labs/VFileUpload/VFileUpload.mjs.map +1 -0
  81. package/lib/labs/VFileUpload/VFileUpload.sass +75 -0
  82. package/lib/labs/VFileUpload/VFileUploadItem.mjs +95 -0
  83. package/lib/labs/VFileUpload/VFileUploadItem.mjs.map +1 -0
  84. package/lib/labs/VFileUpload/_variables.scss +12 -0
  85. package/lib/labs/VFileUpload/index.d.mts +1365 -0
  86. package/lib/labs/VFileUpload/index.mjs +3 -0
  87. package/lib/labs/VFileUpload/index.mjs.map +1 -0
  88. package/lib/labs/VNumberInput/VNumberInput.mjs +14 -9
  89. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  90. package/lib/labs/VStepperVertical/index.d.mts +51 -51
  91. package/lib/labs/VTreeview/VTreeviewItem.mjs +3 -4
  92. package/lib/labs/VTreeview/VTreeviewItem.mjs.map +1 -1
  93. package/lib/labs/VTreeview/index.d.mts +22 -22
  94. package/lib/labs/components.d.mts +1421 -110
  95. package/lib/labs/components.mjs +1 -0
  96. package/lib/labs/components.mjs.map +1 -1
  97. package/lib/locale/af.mjs +5 -0
  98. package/lib/locale/af.mjs.map +1 -1
  99. package/lib/locale/ar.mjs +5 -0
  100. package/lib/locale/ar.mjs.map +1 -1
  101. package/lib/locale/az.mjs +5 -0
  102. package/lib/locale/az.mjs.map +1 -1
  103. package/lib/locale/bg.mjs +5 -0
  104. package/lib/locale/bg.mjs.map +1 -1
  105. package/lib/locale/ca.mjs +5 -0
  106. package/lib/locale/ca.mjs.map +1 -1
  107. package/lib/locale/ckb.mjs +5 -0
  108. package/lib/locale/ckb.mjs.map +1 -1
  109. package/lib/locale/cs.mjs +5 -0
  110. package/lib/locale/cs.mjs.map +1 -1
  111. package/lib/locale/da.mjs +5 -0
  112. package/lib/locale/da.mjs.map +1 -1
  113. package/lib/locale/de.mjs +5 -0
  114. package/lib/locale/de.mjs.map +1 -1
  115. package/lib/locale/el.mjs +5 -0
  116. package/lib/locale/el.mjs.map +1 -1
  117. package/lib/locale/en.mjs +5 -0
  118. package/lib/locale/en.mjs.map +1 -1
  119. package/lib/locale/es.mjs +5 -0
  120. package/lib/locale/es.mjs.map +1 -1
  121. package/lib/locale/et.mjs +5 -0
  122. package/lib/locale/et.mjs.map +1 -1
  123. package/lib/locale/fa.mjs +5 -0
  124. package/lib/locale/fa.mjs.map +1 -1
  125. package/lib/locale/fi.mjs +5 -0
  126. package/lib/locale/fi.mjs.map +1 -1
  127. package/lib/locale/fr.mjs +6 -1
  128. package/lib/locale/fr.mjs.map +1 -1
  129. package/lib/locale/he.mjs +5 -0
  130. package/lib/locale/he.mjs.map +1 -1
  131. package/lib/locale/hr.mjs +5 -0
  132. package/lib/locale/hr.mjs.map +1 -1
  133. package/lib/locale/hu.mjs +5 -0
  134. package/lib/locale/hu.mjs.map +1 -1
  135. package/lib/locale/id.mjs +5 -0
  136. package/lib/locale/id.mjs.map +1 -1
  137. package/lib/locale/index.d.mts +215 -0
  138. package/lib/locale/it.mjs +5 -0
  139. package/lib/locale/it.mjs.map +1 -1
  140. package/lib/locale/ja.mjs +5 -0
  141. package/lib/locale/ja.mjs.map +1 -1
  142. package/lib/locale/km.mjs +5 -0
  143. package/lib/locale/km.mjs.map +1 -1
  144. package/lib/locale/ko.mjs +5 -0
  145. package/lib/locale/ko.mjs.map +1 -1
  146. package/lib/locale/lt.mjs +5 -0
  147. package/lib/locale/lt.mjs.map +1 -1
  148. package/lib/locale/lv.mjs +5 -0
  149. package/lib/locale/lv.mjs.map +1 -1
  150. package/lib/locale/nl.mjs +5 -0
  151. package/lib/locale/nl.mjs.map +1 -1
  152. package/lib/locale/no.mjs +5 -0
  153. package/lib/locale/no.mjs.map +1 -1
  154. package/lib/locale/pl.mjs +5 -0
  155. package/lib/locale/pl.mjs.map +1 -1
  156. package/lib/locale/pt.mjs +5 -0
  157. package/lib/locale/pt.mjs.map +1 -1
  158. package/lib/locale/ro.mjs +5 -0
  159. package/lib/locale/ro.mjs.map +1 -1
  160. package/lib/locale/ru.mjs +5 -0
  161. package/lib/locale/ru.mjs.map +1 -1
  162. package/lib/locale/sk.mjs +5 -0
  163. package/lib/locale/sk.mjs.map +1 -1
  164. package/lib/locale/sl.mjs +5 -0
  165. package/lib/locale/sl.mjs.map +1 -1
  166. package/lib/locale/sr-Cyrl.mjs +5 -0
  167. package/lib/locale/sr-Cyrl.mjs.map +1 -1
  168. package/lib/locale/sr-Latn.mjs +5 -0
  169. package/lib/locale/sr-Latn.mjs.map +1 -1
  170. package/lib/locale/sv.mjs +5 -0
  171. package/lib/locale/sv.mjs.map +1 -1
  172. package/lib/locale/th.mjs +5 -0
  173. package/lib/locale/th.mjs.map +1 -1
  174. package/lib/locale/tr.mjs +5 -0
  175. package/lib/locale/tr.mjs.map +1 -1
  176. package/lib/locale/uk.mjs +5 -0
  177. package/lib/locale/uk.mjs.map +1 -1
  178. package/lib/locale/vi.mjs +5 -0
  179. package/lib/locale/vi.mjs.map +1 -1
  180. package/lib/locale/zh-Hans.mjs +5 -0
  181. package/lib/locale/zh-Hans.mjs.map +1 -1
  182. package/lib/locale/zh-Hant.mjs +5 -0
  183. package/lib/locale/zh-Hant.mjs.map +1 -1
  184. package/package.json +2 -2
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.7.4
2
+ * Vuetify v3.7.6
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -1771,7 +1771,8 @@
1771
1771
  calendar: 'mdi-calendar',
1772
1772
  treeviewCollapse: 'mdi-menu-down',
1773
1773
  treeviewExpand: 'mdi-menu-right',
1774
- eyeDropper: 'mdi-eyedropper'
1774
+ eyeDropper: 'mdi-eyedropper',
1775
+ upload: 'mdi-cloud-upload'
1775
1776
  };
1776
1777
  const mdi = {
1777
1778
  // Not using mergeProps here, functional components merge props by default (?)
@@ -2475,6 +2476,11 @@
2475
2476
  counter: '{0} files',
2476
2477
  counterSize: '{0} files ({1} in total)'
2477
2478
  },
2479
+ fileUpload: {
2480
+ title: 'Drag and drop files here',
2481
+ divider: 'or',
2482
+ browse: 'Browse Files'
2483
+ },
2478
2484
  timePicker: {
2479
2485
  am: 'AM',
2480
2486
  pm: 'PM',
@@ -6905,8 +6911,13 @@
6905
6911
  resetValidation
6906
6912
  };
6907
6913
  }
6908
- function useForm() {
6909
- return vue.inject(FormKey, null);
6914
+ function useForm(props) {
6915
+ const form = vue.inject(FormKey, null);
6916
+ return {
6917
+ ...form,
6918
+ isReadonly: vue.computed(() => !!(props?.readonly ?? form?.isReadonly.value)),
6919
+ isDisabled: vue.computed(() => !!(props?.disabled ?? form?.isDisabled.value))
6920
+ };
6910
6921
  }
6911
6922
 
6912
6923
  // Composables
@@ -6947,17 +6958,15 @@
6947
6958
  let id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : getUid();
6948
6959
  const model = useProxiedModel(props, 'modelValue');
6949
6960
  const validationModel = vue.computed(() => props.validationValue === undefined ? model.value : props.validationValue);
6950
- const form = useForm();
6961
+ const form = useForm(props);
6951
6962
  const internalErrorMessages = vue.ref([]);
6952
6963
  const isPristine = vue.shallowRef(true);
6953
6964
  const isDirty = vue.computed(() => !!(wrapInArray(model.value === '' ? null : model.value).length || wrapInArray(validationModel.value === '' ? null : validationModel.value).length));
6954
- const isDisabled = vue.computed(() => !!(props.disabled ?? form?.isDisabled.value));
6955
- const isReadonly = vue.computed(() => !!(props.readonly ?? form?.isReadonly.value));
6956
6965
  const errorMessages = vue.computed(() => {
6957
6966
  return props.errorMessages?.length ? wrapInArray(props.errorMessages).concat(internalErrorMessages.value).slice(0, Math.max(0, +props.maxErrors)) : internalErrorMessages.value;
6958
6967
  });
6959
6968
  const validateOn = vue.computed(() => {
6960
- let value = (props.validateOn ?? form?.validateOn.value) || 'input';
6969
+ let value = (props.validateOn ?? form.validateOn?.value) || 'input';
6961
6970
  if (value === 'lazy') value = 'input lazy';
6962
6971
  if (value === 'eager') value = 'input eager';
6963
6972
  const set = new Set(value?.split(' ') ?? []);
@@ -6983,14 +6992,14 @@
6983
6992
  return {
6984
6993
  [`${name}--error`]: isValid.value === false,
6985
6994
  [`${name}--dirty`]: isDirty.value,
6986
- [`${name}--disabled`]: isDisabled.value,
6987
- [`${name}--readonly`]: isReadonly.value
6995
+ [`${name}--disabled`]: form.isDisabled.value,
6996
+ [`${name}--readonly`]: form.isReadonly.value
6988
6997
  };
6989
6998
  });
6990
6999
  const vm = getCurrentInstance('validation');
6991
7000
  const uid = vue.computed(() => props.name ?? vue.unref(id));
6992
7001
  vue.onBeforeMount(() => {
6993
- form?.register({
7002
+ form.register?.({
6994
7003
  id: uid.value,
6995
7004
  vm,
6996
7005
  validate,
@@ -6999,13 +7008,13 @@
6999
7008
  });
7000
7009
  });
7001
7010
  vue.onBeforeUnmount(() => {
7002
- form?.unregister(uid.value);
7011
+ form.unregister?.(uid.value);
7003
7012
  });
7004
7013
  vue.onMounted(async () => {
7005
7014
  if (!validateOn.value.lazy) {
7006
7015
  await validate(!validateOn.value.eager);
7007
7016
  }
7008
- form?.update(uid.value, isValid.value, errorMessages.value);
7017
+ form.update?.(uid.value, isValid.value, errorMessages.value);
7009
7018
  });
7010
7019
  useToggleScope(() => validateOn.value.input || validateOn.value.invalidInput && isValid.value === false, () => {
7011
7020
  vue.watch(validationModel, () => {
@@ -7025,7 +7034,7 @@
7025
7034
  });
7026
7035
  });
7027
7036
  vue.watch([isValid, errorMessages], () => {
7028
- form?.update(uid.value, isValid.value, errorMessages.value);
7037
+ form.update?.(uid.value, isValid.value, errorMessages.value);
7029
7038
  });
7030
7039
  async function reset() {
7031
7040
  model.value = null;
@@ -7066,8 +7075,8 @@
7066
7075
  return {
7067
7076
  errorMessages,
7068
7077
  isDirty,
7069
- isDisabled,
7070
- isReadonly,
7078
+ isDisabled: form.isDisabled,
7079
+ isReadonly: form.isReadonly,
7071
7080
  isPristine,
7072
7081
  isValid,
7073
7082
  isValidating,
@@ -8070,7 +8079,7 @@
8070
8079
  draggable: Boolean,
8071
8080
  filter: Boolean,
8072
8081
  filterIcon: {
8073
- type: String,
8082
+ type: IconValue,
8074
8083
  default: '$complete'
8075
8084
  },
8076
8085
  label: Boolean,
@@ -8193,7 +8202,8 @@
8193
8202
  'v-chip--label': props.label,
8194
8203
  'v-chip--link': isClickable.value,
8195
8204
  'v-chip--filter': hasFilter,
8196
- 'v-chip--pill': props.pill
8205
+ 'v-chip--pill': props.pill,
8206
+ [`${props.activeClass}`]: props.activeClass && link.isActive?.value
8197
8207
  }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, group?.selectedClass.value, props.class],
8198
8208
  "style": [hasColor ? colorStyles.value : undefined, props.style],
8199
8209
  "disabled": props.disabled || undefined,
@@ -8941,7 +8951,9 @@
8941
8951
  isLeaf: vue.computed(() => !parent.root.children.value.get(computedId.value)),
8942
8952
  isGroupActivator: parent.isGroupActivator
8943
8953
  };
8944
- !parent.isGroupActivator && parent.root.register(computedId.value, parent.id.value, isGroup);
8954
+ vue.onBeforeMount(() => {
8955
+ !parent.isGroupActivator && parent.root.register(computedId.value, parent.id.value, isGroup);
8956
+ });
8945
8957
  vue.onBeforeUnmount(() => {
8946
8958
  !parent.isGroupActivator && parent.root.unregister(computedId.value);
8947
8959
  });
@@ -9167,23 +9179,30 @@
9167
9179
  const list = useList();
9168
9180
  const isActive = vue.computed(() => props.active !== false && (props.active || link.isActive?.value || (root.activatable.value ? isActivated.value : isSelected.value)));
9169
9181
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
9170
- const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || !!list && (root.selectable.value || root.activatable.value || props.value != null)));
9182
+ const isSelectable = vue.computed(() => !!list && (root.selectable.value || root.activatable.value || props.value != null));
9183
+ const isClickable = vue.computed(() => !props.disabled && props.link !== false && (props.link || link.isClickable.value || isSelectable.value));
9171
9184
  const roundedProps = vue.computed(() => props.rounded || props.nav);
9172
9185
  const color = vue.computed(() => props.color ?? props.activeColor);
9173
9186
  const variantProps = vue.computed(() => ({
9174
9187
  color: isActive.value ? color.value ?? props.baseColor : props.baseColor,
9175
9188
  variant: props.variant
9176
9189
  }));
9190
+
9191
+ // useNestedItem doesn't call register until beforeMount,
9192
+ // so this can't be an immediate watcher as we don't know parent yet
9177
9193
  vue.watch(() => link.isActive?.value, val => {
9178
- if (val && parent.value != null) {
9194
+ if (!val) return;
9195
+ handleActiveLink();
9196
+ });
9197
+ vue.onBeforeMount(() => {
9198
+ if (link.isActive?.value) handleActiveLink();
9199
+ });
9200
+ function handleActiveLink() {
9201
+ if (parent.value != null) {
9179
9202
  root.open(parent.value, true);
9180
9203
  }
9181
- if (val) {
9182
- openOnSelect(val);
9183
- }
9184
- }, {
9185
- immediate: true
9186
- });
9204
+ openOnSelect(true);
9205
+ }
9187
9206
  const {
9188
9207
  themeClasses
9189
9208
  } = provideTheme(props);
@@ -9258,7 +9277,7 @@
9258
9277
  }, themeClasses.value, borderClasses.value, colorClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, variantClasses.value, props.class],
9259
9278
  "style": [colorStyles.value, dimensionStyles.value, props.style],
9260
9279
  "tabindex": isClickable.value ? list ? -2 : 0 : undefined,
9261
- "aria-selected": root.activatable.value ? isActivated.value : isSelected.value,
9280
+ "aria-selected": isSelectable.value ? root.activatable.value ? isActivated.value : root.selectable.value ? isSelected.value : isActive.value : undefined,
9262
9281
  "onClick": onClick,
9263
9282
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
9264
9283
  }, link.linkProps), {
@@ -9675,8 +9694,8 @@
9675
9694
  activeClass: String,
9676
9695
  bgColor: String,
9677
9696
  disabled: Boolean,
9678
- expandIcon: String,
9679
- collapseIcon: String,
9697
+ expandIcon: IconValue,
9698
+ collapseIcon: IconValue,
9680
9699
  lines: {
9681
9700
  type: [Boolean, String],
9682
9701
  default: 'one'
@@ -11850,7 +11869,8 @@
11850
11869
  "style": textColorStyles.value
11851
11870
  }, {
11852
11871
  default: () => [label()]
11853
- }), vue.createVNode(VFieldLabel, {
11872
+ }), hasLabel.value && vue.createVNode(VFieldLabel, {
11873
+ "key": "label",
11854
11874
  "ref": labelRef,
11855
11875
  "for": id.value
11856
11876
  }, {
@@ -12295,6 +12315,7 @@
12295
12315
  }
12296
12316
  }
12297
12317
  });
12318
+ let scrollTimeout = -1;
12298
12319
  function handleScroll() {
12299
12320
  if (!containerRef.value || !markerRef.value) return;
12300
12321
  const scrollTop = containerRef.value.scrollTop;
@@ -12311,12 +12332,15 @@
12311
12332
  }
12312
12333
  lastScrollTop = scrollTop;
12313
12334
  lastScrollTime = scrollTime;
12335
+ window.clearTimeout(scrollTimeout);
12336
+ scrollTimeout = window.setTimeout(handleScrollend, 500);
12314
12337
  calculateVisibleItems();
12315
12338
  }
12316
12339
  function handleScrollend() {
12317
12340
  if (!containerRef.value || !markerRef.value) return;
12318
12341
  scrollVelocity = 0;
12319
12342
  lastScrollTime = 0;
12343
+ window.clearTimeout(scrollTimeout);
12320
12344
  calculateVisibleItems();
12321
12345
  }
12322
12346
  let raf = -1;
@@ -12362,7 +12386,8 @@
12362
12386
  const computedItems = vue.computed(() => {
12363
12387
  return items.value.slice(first.value, last.value).map((item, index) => ({
12364
12388
  raw: item,
12365
- index: index + first.value
12389
+ index: index + first.value,
12390
+ key: isObject(item) && 'value' in item ? item.value : index + first.value
12366
12391
  }));
12367
12392
  });
12368
12393
  vue.watch(items, () => {
@@ -12477,7 +12502,7 @@
12477
12502
  });
12478
12503
  useRender(() => {
12479
12504
  const children = computedItems.value.map(item => vue.createVNode(VVirtualScrollItem, {
12480
- "key": item.index,
12505
+ "key": item.key,
12481
12506
  "renderless": props.renderless,
12482
12507
  "onUpdate:height": height => handleItemResize(item.index, height)
12483
12508
  }, {
@@ -12676,7 +12701,7 @@
12676
12701
  const counterValue = vue.computed(() => {
12677
12702
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : model.value.length;
12678
12703
  });
12679
- const form = useForm();
12704
+ const form = useForm(props);
12680
12705
  const selectedValues = vue.computed(() => model.value.map(selection => selection.value));
12681
12706
  const isFocused = vue.shallowRef(false);
12682
12707
  const label = vue.computed(() => menu.value ? props.closeText : props.openText);
@@ -12688,7 +12713,7 @@
12688
12713
  }
12689
12714
  return items.value;
12690
12715
  });
12691
- const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
12716
+ const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
12692
12717
  const computedMenuProps = vue.computed(() => {
12693
12718
  return {
12694
12719
  ...props.menuProps,
@@ -12715,7 +12740,7 @@
12715
12740
  }
12716
12741
  }
12717
12742
  function onKeydown(e) {
12718
- if (!e.key || props.readonly || form?.isReadonly.value) return;
12743
+ if (!e.key || form.isReadonly.value) return;
12719
12744
  if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
12720
12745
  e.preventDefault();
12721
12746
  }
@@ -12876,6 +12901,7 @@
12876
12901
  "color": props.itemColor ?? props.color
12877
12902
  }, listEvents, props.listProps), {
12878
12903
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
12904
+ "key": "no-data",
12879
12905
  "title": t(props.noDataText)
12880
12906
  }, null)), vue.createVNode(VVirtualScroll, {
12881
12907
  "ref": vVirtualScrollRef,
@@ -12890,7 +12916,7 @@
12890
12916
  } = _ref2;
12891
12917
  const itemProps = vue.mergeProps(item.props, {
12892
12918
  ref: itemRef,
12893
- key: index,
12919
+ key: item.value,
12894
12920
  onClick: () => select(item, null)
12895
12921
  });
12896
12922
  return slots.item?.({
@@ -13193,7 +13219,7 @@
13193
13219
  const counterValue = vue.computed(() => {
13194
13220
  return typeof props.counterValue === 'function' ? props.counterValue(model.value) : typeof props.counterValue === 'number' ? props.counterValue : model.value.length;
13195
13221
  });
13196
- const form = useForm();
13222
+ const form = useForm(props);
13197
13223
  const {
13198
13224
  filteredItems,
13199
13225
  getMatches
@@ -13211,7 +13237,7 @@
13211
13237
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
13212
13238
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
13213
13239
  });
13214
- const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
13240
+ const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
13215
13241
  const listRef = vue.ref();
13216
13242
  const listEvents = useScrolling(listRef, vTextFieldRef);
13217
13243
  function onClear(e) {
@@ -13238,7 +13264,7 @@
13238
13264
  }
13239
13265
  }
13240
13266
  function onKeydown(e) {
13241
- if (props.readonly || form?.isReadonly.value) return;
13267
+ if (form.isReadonly.value) return;
13242
13268
  const selectionStart = vTextFieldRef.value.selectionStart;
13243
13269
  const length = model.value.length;
13244
13270
  if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
@@ -13415,7 +13441,7 @@
13415
13441
  'v-autocomplete--selecting-index': selectionIndex.value > -1
13416
13442
  }, props.class],
13417
13443
  "style": props.style,
13418
- "readonly": props.readonly,
13444
+ "readonly": form.isReadonly.value,
13419
13445
  "placeholder": isDirty ? undefined : props.placeholder,
13420
13446
  "onClick:clear": onClear,
13421
13447
  "onMousedown:control": onMousedownControl,
@@ -13450,6 +13476,7 @@
13450
13476
  "color": props.itemColor ?? props.color
13451
13477
  }, listEvents, props.listProps), {
13452
13478
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
13479
+ "key": "no-data",
13453
13480
  "title": t(props.noDataText)
13454
13481
  }, null)), vue.createVNode(VVirtualScroll, {
13455
13482
  "ref": vVirtualScrollRef,
@@ -13464,7 +13491,7 @@
13464
13491
  } = _ref4;
13465
13492
  const itemProps = vue.mergeProps(item.props, {
13466
13493
  ref: itemRef,
13467
- key: index,
13494
+ key: item.value,
13468
13495
  active: highlightFirst.value && index === 0 ? true : undefined,
13469
13496
  onClick: () => select(item, null)
13470
13497
  });
@@ -17034,7 +17061,7 @@
17034
17061
  const transformed = transformOut(v);
17035
17062
  return props.multiple ? transformed : transformed[0] ?? null;
17036
17063
  });
17037
- const form = useForm();
17064
+ const form = useForm(props);
17038
17065
  const hasChips = vue.computed(() => !!(props.chips || slots.chip));
17039
17066
  const hasSelectionSlot = vue.computed(() => hasChips.value || !!slots.selection);
17040
17067
  const _search = vue.shallowRef(!props.multiple && !hasSelectionSlot.value ? model.value[0]?.title ?? '' : '');
@@ -17094,7 +17121,7 @@
17094
17121
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
17095
17122
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
17096
17123
  });
17097
- const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
17124
+ const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || form.isReadonly.value || form.isDisabled.value);
17098
17125
  const listRef = vue.ref();
17099
17126
  const listEvents = useScrolling(listRef, vTextFieldRef);
17100
17127
  function onClear(e) {
@@ -17122,7 +17149,7 @@
17122
17149
  }
17123
17150
  // eslint-disable-next-line complexity
17124
17151
  function onKeydown(e) {
17125
- if (isComposingIgnoreKey(e) || props.readonly || form?.isReadonly.value) return;
17152
+ if (isComposingIgnoreKey(e) || form.isReadonly.value) return;
17126
17153
  const selectionStart = vTextFieldRef.value.selectionStart;
17127
17154
  const length = model.value.length;
17128
17155
  if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
@@ -17294,7 +17321,7 @@
17294
17321
  [`v-combobox--${props.multiple ? 'multiple' : 'single'}`]: true
17295
17322
  }, props.class],
17296
17323
  "style": props.style,
17297
- "readonly": props.readonly,
17324
+ "readonly": form.isReadonly.value,
17298
17325
  "placeholder": isDirty ? undefined : props.placeholder,
17299
17326
  "onClick:clear": onClear,
17300
17327
  "onMousedown:control": onMousedownControl,
@@ -17329,6 +17356,7 @@
17329
17356
  "color": props.itemColor ?? props.color
17330
17357
  }, listEvents, props.listProps), {
17331
17358
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
17359
+ "key": "no-data",
17332
17360
  "title": t(props.noDataText)
17333
17361
  }, null)), vue.createVNode(VVirtualScroll, {
17334
17362
  "ref": vVirtualScrollRef,
@@ -17343,7 +17371,7 @@
17343
17371
  } = _ref4;
17344
17372
  const itemProps = vue.mergeProps(item.props, {
17345
17373
  ref: itemRef,
17346
- key: index,
17374
+ key: item.value,
17347
17375
  active: highlightFirst.value && index === 0 ? true : undefined,
17348
17376
  onClick: () => select(item, null)
17349
17377
  });
@@ -18338,21 +18366,23 @@
18338
18366
  internalModel.value = structuredClone(vue.toRaw(model.value));
18339
18367
  emit('cancel');
18340
18368
  }
18341
- let actionsUsed = false;
18342
- useRender(() => {
18343
- const actions = vue.createVNode(vue.Fragment, null, [vue.createVNode(VBtn, {
18369
+ function actions(actionsProps) {
18370
+ return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBtn, vue.mergeProps({
18344
18371
  "disabled": isPristine.value,
18345
18372
  "variant": "text",
18346
18373
  "color": props.color,
18347
18374
  "onClick": cancel,
18348
18375
  "text": t(props.cancelText)
18349
- }, null), vue.createVNode(VBtn, {
18376
+ }, actionsProps), null), vue.createVNode(VBtn, vue.mergeProps({
18350
18377
  "disabled": isPristine.value,
18351
18378
  "variant": "text",
18352
18379
  "color": props.color,
18353
18380
  "onClick": save,
18354
18381
  "text": t(props.okText)
18355
- }, null)]);
18382
+ }, actionsProps), null)]);
18383
+ }
18384
+ let actionsUsed = false;
18385
+ useRender(() => {
18356
18386
  return vue.createVNode(vue.Fragment, null, [slots.default?.({
18357
18387
  model: internalModel,
18358
18388
  save,
@@ -18362,7 +18392,7 @@
18362
18392
  actionsUsed = true;
18363
18393
  return actions;
18364
18394
  }
18365
- }), !actionsUsed && actions]);
18395
+ }), !actionsUsed && actions()]);
18366
18396
  });
18367
18397
  return {
18368
18398
  save,
@@ -21652,7 +21682,7 @@
21652
21682
  // Types
21653
21683
 
21654
21684
  const makeVDatePickerHeaderProps = propsFactory({
21655
- appendIcon: String,
21685
+ appendIcon: IconValue,
21656
21686
  color: String,
21657
21687
  header: String,
21658
21688
  transition: String,
@@ -25085,7 +25115,7 @@
25085
25115
  // the thumbs are on top of each other
25086
25116
  // and they are both at minimum value
25087
25117
  // but only if focused from outside.
25088
- if (model.value[0] === model.value[1] && model.value[1] === min.value && e.relatedTarget !== stopThumbRef.value?.$el) {
25118
+ if (max.value !== min.value && model.value[0] === model.value[1] && model.value[1] === min.value && e.relatedTarget !== stopThumbRef.value?.$el) {
25089
25119
  startThumbRef.value?.$el.blur();
25090
25120
  stopThumbRef.value?.$el.focus();
25091
25121
  }
@@ -25114,7 +25144,7 @@
25114
25144
  // the thumbs are on top of each other
25115
25145
  // and they are both at maximum value
25116
25146
  // but only if focused from outside.
25117
- if (model.value[0] === model.value[1] && model.value[0] === max.value && e.relatedTarget !== startThumbRef.value?.$el) {
25147
+ if (max.value !== min.value && model.value[0] === model.value[1] && model.value[0] === max.value && e.relatedTarget !== startThumbRef.value?.$el) {
25118
25148
  stopThumbRef.value?.$el.blur();
25119
25149
  startThumbRef.value?.$el.focus();
25120
25150
  }
@@ -26304,20 +26334,20 @@
26304
26334
  subtitle: String,
26305
26335
  complete: Boolean,
26306
26336
  completeIcon: {
26307
- type: String,
26337
+ type: IconValue,
26308
26338
  default: '$complete'
26309
26339
  },
26310
26340
  editable: Boolean,
26311
26341
  editIcon: {
26312
- type: String,
26342
+ type: IconValue,
26313
26343
  default: '$edit'
26314
26344
  },
26315
26345
  error: Boolean,
26316
26346
  errorIcon: {
26317
- type: String,
26347
+ type: IconValue,
26318
26348
  default: '$error'
26319
26349
  },
26320
- icon: String,
26350
+ icon: IconValue,
26321
26351
  ripple: {
26322
26352
  type: [Boolean, Object],
26323
26353
  default: true
@@ -26478,10 +26508,10 @@
26478
26508
  const makeStepperProps = propsFactory({
26479
26509
  altLabels: Boolean,
26480
26510
  bgColor: String,
26481
- completeIcon: String,
26482
- editIcon: String,
26511
+ completeIcon: IconValue,
26512
+ editIcon: IconValue,
26483
26513
  editable: Boolean,
26484
- errorIcon: String,
26514
+ errorIcon: IconValue,
26485
26515
  hideActions: Boolean,
26486
26516
  items: {
26487
26517
  type: Array,
@@ -28258,7 +28288,7 @@
28258
28288
  goTo
28259
28289
  };
28260
28290
  }
28261
- const version$1 = "3.7.4";
28291
+ const version$1 = "3.7.6";
28262
28292
  createVuetify$1.version = version$1;
28263
28293
 
28264
28294
  // Vue's inject() can only be used in setup
@@ -28283,7 +28313,7 @@
28283
28313
  ...options
28284
28314
  });
28285
28315
  };
28286
- const version = "3.7.4";
28316
+ const version = "3.7.6";
28287
28317
  createVuetify.version = version;
28288
28318
 
28289
28319
  exports.blueprints = index;