vuetify 3.5.12 → 3.5.14

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 (78) hide show
  1. package/dist/json/attributes.json +160 -160
  2. package/dist/json/importMap-labs.json +10 -10
  3. package/dist/json/importMap.json +124 -124
  4. package/dist/json/web-types.json +161 -161
  5. package/dist/vuetify-labs.css +2164 -2150
  6. package/dist/vuetify-labs.d.ts +993 -845
  7. package/dist/vuetify-labs.esm.js +91 -23
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +91 -23
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +745 -736
  12. package/dist/vuetify.d.ts +789 -669
  13. package/dist/vuetify.esm.js +86 -18
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +86 -18
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +122 -120
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/index.d.mts +2 -0
  21. package/lib/blueprints/md1.d.mts +2 -0
  22. package/lib/blueprints/md2.d.mts +2 -0
  23. package/lib/blueprints/md3.d.mts +2 -0
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +6 -0
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.mts +34 -28
  27. package/lib/components/VBtn/VBtn.mjs +2 -0
  28. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  29. package/lib/components/VChip/VChip.mjs +1 -0
  30. package/lib/components/VChip/VChip.mjs.map +1 -1
  31. package/lib/components/VCombobox/VCombobox.mjs +6 -0
  32. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  33. package/lib/components/VCombobox/index.d.mts +34 -28
  34. package/lib/components/VDataTable/VDataTableServer.mjs +3 -2
  35. package/lib/components/VDataTable/VDataTableServer.mjs.map +1 -1
  36. package/lib/components/VDatePicker/VDatePicker.mjs +9 -2
  37. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  38. package/lib/components/VField/VField.mjs +29 -3
  39. package/lib/components/VField/VField.mjs.map +1 -1
  40. package/lib/components/VField/index.d.mts +9 -3
  41. package/lib/components/VFileInput/VFileInput.mjs +2 -2
  42. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  43. package/lib/components/VFileInput/index.d.mts +51 -23
  44. package/lib/components/VList/VListItem.css +3 -0
  45. package/lib/components/VList/VListItem.sass +4 -0
  46. package/lib/components/VOtpInput/VOtpInput.mjs +1 -1
  47. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  48. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -3
  49. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  50. package/lib/components/VSelect/VSelect.mjs +6 -0
  51. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  52. package/lib/components/VSelect/index.d.mts +34 -28
  53. package/lib/components/VSwitch/VSwitch.css +6 -0
  54. package/lib/components/VSwitch/VSwitch.sass +7 -0
  55. package/lib/components/VSwitch/_variables.scss +1 -0
  56. package/lib/components/VTextField/index.d.mts +88 -46
  57. package/lib/components/VTextarea/index.d.mts +54 -26
  58. package/lib/components/index.d.mts +764 -650
  59. package/lib/composables/date/DateAdapter.mjs.map +1 -1
  60. package/lib/composables/date/adapters/vuetify.mjs +14 -0
  61. package/lib/composables/date/adapters/vuetify.mjs.map +1 -1
  62. package/lib/composables/router.mjs +2 -2
  63. package/lib/composables/router.mjs.map +1 -1
  64. package/lib/entry-bundler.mjs +1 -1
  65. package/lib/framework.mjs +1 -1
  66. package/lib/index.d.mts +44 -38
  67. package/lib/labs/VEmptyState/VEmptyState.css +4 -0
  68. package/lib/labs/VEmptyState/VEmptyState.mjs +6 -1
  69. package/lib/labs/VEmptyState/VEmptyState.mjs.map +1 -1
  70. package/lib/labs/VEmptyState/VEmptyState.sass +4 -0
  71. package/lib/labs/VEmptyState/_variables.scss +1 -0
  72. package/lib/labs/VNumberInput/VNumberInput.css +1 -0
  73. package/lib/labs/VNumberInput/VNumberInput.mjs +0 -4
  74. package/lib/labs/VNumberInput/VNumberInput.mjs.map +1 -1
  75. package/lib/labs/VNumberInput/VNumberInput.sass +1 -0
  76. package/lib/labs/VNumberInput/index.d.mts +51 -23
  77. package/lib/labs/components.d.mts +50 -22
  78. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.5.12
2
+ * Vuetify v3.5.14
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -5080,7 +5080,7 @@ function useLink(props, attrs) {
5080
5080
  const isClickable = computed(() => {
5081
5081
  return isLink?.value || hasEvent(attrs, 'click') || hasEvent(props, 'click');
5082
5082
  });
5083
- if (typeof RouterLink === 'string') {
5083
+ if (typeof RouterLink === 'string' || !('useLink' in RouterLink)) {
5084
5084
  return {
5085
5085
  isLink,
5086
5086
  isClickable,
@@ -5090,7 +5090,7 @@ function useLink(props, attrs) {
5090
5090
  // vue-router useLink `to` prop needs to be reactive and useLink will crash if undefined
5091
5091
  const linkProps = computed(() => ({
5092
5092
  ...props,
5093
- to: props.to ? props.to : {}
5093
+ to: toRef(() => props.to || {})
5094
5094
  }));
5095
5095
  const routerLink = RouterLink.useLink(linkProps.value);
5096
5096
  // Actual link needs to be undefined when to prop is not used
@@ -5589,8 +5589,10 @@ const VBtn = genericComponent()({
5589
5589
  'v-btn--stacked': props.stacked
5590
5590
  }, themeClasses.value, borderClasses.value, hasColor ? colorClasses.value : undefined, densityClasses.value, elevationClasses.value, loaderClasses.value, positionClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5591
5591
  "style": [hasColor ? colorStyles.value : undefined, dimensionStyles.value, locationStyles.value, sizeStyles.value, props.style],
5592
+ "aria-busy": props.loading ? true : undefined,
5592
5593
  "disabled": isDisabled.value || undefined,
5593
5594
  "href": link.href.value,
5595
+ "tabindex": props.loading ? -1 : undefined,
5594
5596
  "onClick": onClick,
5595
5597
  "value": valueAttr.value
5596
5598
  }, {
@@ -7617,6 +7619,7 @@ const VChip = genericComponent()({
7617
7619
  const closeProps = computed(() => ({
7618
7620
  'aria-label': t(props.closeLabel),
7619
7621
  onClick(e) {
7622
+ e.preventDefault();
7620
7623
  e.stopPropagation();
7621
7624
  isActive.value = false;
7622
7625
  emit('click:close', e);
@@ -11134,6 +11137,12 @@ const VField = genericComponent()({
11134
11137
  e.preventDefault();
11135
11138
  }
11136
11139
  }
11140
+ function onKeydownClear(e) {
11141
+ if (e.key !== 'Enter' && e.key !== ' ') return;
11142
+ e.preventDefault();
11143
+ e.stopPropagation();
11144
+ props['onClick:clear']?.(new MouseEvent('click'));
11145
+ }
11137
11146
  useRender(() => {
11138
11147
  const isOutlined = props.variant === 'outlined';
11139
11148
  const hasPrepend = !!(slots['prepend-inner'] || props.prependInnerIcon);
@@ -11214,9 +11223,28 @@ const VField = genericComponent()({
11214
11223
  e.preventDefault();
11215
11224
  e.stopPropagation();
11216
11225
  }
11217
- }, [slots.clear ? slots.clear() : createVNode(InputIcon, {
11218
- "name": "clear"
11219
- }, null)]), [[vShow, props.dirty]])]
11226
+ }, [createVNode(VDefaultsProvider, {
11227
+ "defaults": {
11228
+ VIcon: {
11229
+ icon: props.clearIcon
11230
+ }
11231
+ }
11232
+ }, {
11233
+ default: () => [slots.clear ? slots.clear({
11234
+ ...slotProps.value,
11235
+ props: {
11236
+ onKeydown: onKeydownClear,
11237
+ onFocus: focus,
11238
+ onBlur: blur,
11239
+ onClick: props['onClick:clear']
11240
+ }
11241
+ }) : createVNode(InputIcon, {
11242
+ "name": "clear",
11243
+ "onKeydown": onKeydownClear,
11244
+ "onFocus": focus,
11245
+ "onBlur": blur
11246
+ }, null)]
11247
+ })]), [[vShow, props.dirty]])]
11220
11248
  }), hasAppend && createVNode("div", {
11221
11249
  "key": "append",
11222
11250
  "class": "v-field__append-inner"
@@ -12239,6 +12267,12 @@ const VSelect = genericComponent()({
12239
12267
  }
12240
12268
  const slotProps = {
12241
12269
  'onClick:close': onChipClose,
12270
+ onKeydown(e) {
12271
+ if (e.key !== 'Enter' && e.key !== ' ') return;
12272
+ e.preventDefault();
12273
+ e.stopPropagation();
12274
+ onChipClose(e);
12275
+ },
12242
12276
  onMousedown(e) {
12243
12277
  e.preventDefault();
12244
12278
  e.stopPropagation();
@@ -12803,6 +12837,12 @@ const VAutocomplete = genericComponent()({
12803
12837
  }
12804
12838
  const slotProps = {
12805
12839
  'onClick:close': onChipClose,
12840
+ onKeydown(e) {
12841
+ if (e.key !== 'Enter' && e.key !== ' ') return;
12842
+ e.preventDefault();
12843
+ e.stopPropagation();
12844
+ onChipClose(e);
12845
+ },
12806
12846
  onMousedown(e) {
12807
12847
  e.preventDefault();
12808
12848
  e.stopPropagation();
@@ -16611,6 +16651,12 @@ const VCombobox = genericComponent()({
16611
16651
  }
16612
16652
  const slotProps = {
16613
16653
  'onClick:close': onChipClose,
16654
+ onKeydown(e) {
16655
+ if (e.key !== 'Enter' && e.key !== ' ') return;
16656
+ e.preventDefault();
16657
+ e.stopPropagation();
16658
+ onChipClose(e);
16659
+ },
16614
16660
  onMousedown(e) {
16615
16661
  e.preventDefault();
16616
16662
  e.stopPropagation();
@@ -17560,6 +17606,9 @@ function getYear(date) {
17560
17606
  function getMonth(date) {
17561
17607
  return date.getMonth();
17562
17608
  }
17609
+ function getDate(date) {
17610
+ return date.getDate();
17611
+ }
17563
17612
  function getNextMonth(date) {
17564
17613
  return new Date(date.getFullYear(), date.getMonth() + 1, 1);
17565
17614
  }
@@ -17638,6 +17687,11 @@ function setMonth(date, count) {
17638
17687
  d.setMonth(count);
17639
17688
  return d;
17640
17689
  }
17690
+ function setDate(date, day) {
17691
+ const d = new Date(date);
17692
+ d.setDate(day);
17693
+ return d;
17694
+ }
17641
17695
  function setYear(date, year) {
17642
17696
  const d = new Date(date);
17643
17697
  d.setFullYear(year);
@@ -17729,6 +17783,9 @@ class VuetifyDateAdapter {
17729
17783
  setMonth(date, count) {
17730
17784
  return setMonth(date, count);
17731
17785
  }
17786
+ setDate(date, day) {
17787
+ return setDate(date, day);
17788
+ }
17732
17789
  setYear(date, year) {
17733
17790
  return setYear(date, year);
17734
17791
  }
@@ -17744,6 +17801,9 @@ class VuetifyDateAdapter {
17744
17801
  getMonth(date) {
17745
17802
  return getMonth(date);
17746
17803
  }
17804
+ getDate(date) {
17805
+ return getDate(date);
17806
+ }
17747
17807
  getNextMonth(date) {
17748
17808
  return getNextMonth(date);
17749
17809
  }
@@ -20171,9 +20231,9 @@ const VDataTableServer = genericComponent()({
20171
20231
  }, [slots['body.prepend']?.(slotProps.value), slots.body ? slots.body(slotProps.value) : createVNode(VDataTableRows, mergeProps(attrs, dataTableRowsProps, {
20172
20232
  "items": flatItems.value
20173
20233
  }), slots), slots['body.append']?.(slotProps.value)]), slots.tbody?.(slotProps.value), slots.tfoot?.(slotProps.value)]),
20174
- bottom: () => slots.bottom ? slots.bottom(slotProps.value) : createVNode(VDataTableFooter, dataTableFooterProps, {
20234
+ bottom: () => slots.bottom ? slots.bottom(slotProps.value) : createVNode(Fragment, null, [createVNode(VDivider, null, null), createVNode(VDataTableFooter, dataTableFooterProps, {
20175
20235
  prepend: slots['footer.prepend']
20176
- })
20236
+ })])
20177
20237
  });
20178
20238
  });
20179
20239
  }
@@ -21203,10 +21263,17 @@ const VDatePicker = genericComponent()({
21203
21263
  const year = ref(Number(props.year ?? adapter.getYear(adapter.startOfYear(adapter.setMonth(internal.value, month.value)))));
21204
21264
  const isReversing = shallowRef(false);
21205
21265
  const header = computed(() => {
21206
- return props.multiple && model.value.length > 1 ? t('$vuetify.datePicker.itemsSelected', model.value.length) : model.value[0] && adapter.isValid(model.value[0]) ? adapter.format(model.value[0], 'normalDateWithWeekday') : t(props.header);
21266
+ if (props.multiple && model.value.length > 1) {
21267
+ return t('$vuetify.datePicker.itemsSelected', model.value.length);
21268
+ }
21269
+ return model.value[0] && adapter.isValid(model.value[0]) ? adapter.format(adapter.date(model.value[0]), 'normalDateWithWeekday') : t(props.header);
21207
21270
  });
21208
21271
  const text = computed(() => {
21209
- return adapter.format(adapter.date(new Date(year.value, month.value, 1)), 'monthAndYear');
21272
+ let date = adapter.date();
21273
+ date = adapter.setYear(date, year.value);
21274
+ date = adapter.setMonth(date, month.value);
21275
+ date = adapter.setDate(date, 1);
21276
+ return adapter.format(date, 'monthAndYear');
21210
21277
  });
21211
21278
  // const headerIcon = computed(() => props.inputMode === 'calendar' ? props.keyboardIcon : props.calendarIcon)
21212
21279
  const headerTransition = computed(() => `date-picker-header${isReversing.value ? '-reverse' : ''}-transition`);
@@ -21635,7 +21702,7 @@ const makeVFileInputProps = propsFactory({
21635
21702
  prependIcon: '$file'
21636
21703
  }),
21637
21704
  modelValue: {
21638
- type: Array,
21705
+ type: [Array, Object],
21639
21706
  default: () => [],
21640
21707
  validator: val => {
21641
21708
  return wrapInArray(val).every(v => v != null && typeof v === 'object');
@@ -21664,7 +21731,7 @@ const VFileInput = genericComponent()({
21664
21731
  const {
21665
21732
  t
21666
21733
  } = useLocale();
21667
- const model = useProxiedModel(props, 'modelValue');
21734
+ const model = useProxiedModel(props, 'modelValue', props.modelValue, val => wrapInArray(val), val => props.multiple || Array.isArray(props.modelValue) ? val : val[0]);
21668
21735
  const {
21669
21736
  isFocused,
21670
21737
  focus,
@@ -23093,7 +23160,7 @@ const VOtpInput = genericComponent()({
23093
23160
  focus,
23094
23161
  blur
23095
23162
  } = useFocus(props);
23096
- const model = useProxiedModel(props, 'modelValue', '', val => String(val).split(''), val => val.join(''));
23163
+ const model = useProxiedModel(props, 'modelValue', '', val => val == null ? [] : String(val).split(''), val => val.join(''));
23097
23164
  const {
23098
23165
  t
23099
23166
  } = useLocale();
@@ -23519,7 +23586,8 @@ const VRangeSlider = genericComponent()({
23519
23586
  onSliderMousedown,
23520
23587
  onSliderTouchstart,
23521
23588
  position,
23522
- trackContainerRef
23589
+ trackContainerRef,
23590
+ readonly
23523
23591
  } = useSlider({
23524
23592
  props,
23525
23593
  steps,
@@ -23587,8 +23655,8 @@ const VRangeSlider = genericComponent()({
23587
23655
  } = _ref4;
23588
23656
  return createVNode("div", {
23589
23657
  "class": "v-slider__container",
23590
- "onMousedown": onSliderMousedown,
23591
- "onTouchstartPassive": onSliderTouchstart
23658
+ "onMousedown": !readonly.value ? onSliderMousedown : undefined,
23659
+ "onTouchstartPassive": !readonly.value ? onSliderTouchstart : undefined
23592
23660
  }, [createVNode("input", {
23593
23661
  "id": `${id.value}_start`,
23594
23662
  "name": props.name || id.value,
@@ -26242,6 +26310,9 @@ const VEmptyState = genericComponent()({
26242
26310
  const {
26243
26311
  dimensionStyles
26244
26312
  } = useDimension(props);
26313
+ const {
26314
+ displayClasses
26315
+ } = useDisplay();
26245
26316
  function onClickAction(e) {
26246
26317
  emit('click:action', e);
26247
26318
  }
@@ -26255,7 +26326,7 @@ const VEmptyState = genericComponent()({
26255
26326
  return createVNode("div", {
26256
26327
  "class": ['v-empty-state', {
26257
26328
  [`v-empty-state--${props.justify}`]: true
26258
- }, themeClasses.value, backgroundColorClasses.value, props.class],
26329
+ }, themeClasses.value, backgroundColorClasses.value, displayClasses.value, props.class],
26259
26330
  "style": [backgroundColorStyles.value, dimensionStyles.value, props.style]
26260
26331
  }, [hasMedia && createVNode("div", {
26261
26332
  "key": "media",
@@ -26266,6 +26337,7 @@ const VEmptyState = genericComponent()({
26266
26337
  "height": size
26267
26338
  }, null) : props.icon ? createVNode(VIcon, {
26268
26339
  "key": "icon",
26340
+ "color": props.color,
26269
26341
  "size": size,
26270
26342
  "icon": props.icon
26271
26343
  }, null) : undefined]) : createVNode(VDefaultsProvider, {
@@ -26507,7 +26579,6 @@ const VNumberInput = genericComponent()({
26507
26579
  "key": "decrement-btn",
26508
26580
  "height": defaultHeight,
26509
26581
  "icon": "$expand",
26510
- "rounded": "0",
26511
26582
  "size": "small",
26512
26583
  "onClick": onClickDown
26513
26584
  }, null) : createVNode(VDefaultsProvider, {
@@ -26515,7 +26586,6 @@ const VNumberInput = genericComponent()({
26515
26586
  "defaults": {
26516
26587
  VBtn: {
26517
26588
  flat: true,
26518
- rounded: '0',
26519
26589
  height: defaultHeight,
26520
26590
  size: 'small',
26521
26591
  icon: '$expand'
@@ -26531,7 +26601,6 @@ const VNumberInput = genericComponent()({
26531
26601
  "height": defaultHeight,
26532
26602
  "icon": "$collapse",
26533
26603
  "onClick": onClickUp,
26534
- "rounded": "0",
26535
26604
  "size": "small"
26536
26605
  }, null) : createVNode(VDefaultsProvider, {
26537
26606
  "key": "increment-defaults",
@@ -26539,7 +26608,6 @@ const VNumberInput = genericComponent()({
26539
26608
  VBtn: {
26540
26609
  flat: true,
26541
26610
  height: defaultHeight,
26542
- rounded: '0',
26543
26611
  size: 'small',
26544
26612
  icon: '$collapse'
26545
26613
  }
@@ -28508,7 +28576,7 @@ function createVuetify$1() {
28508
28576
  goTo
28509
28577
  };
28510
28578
  }
28511
- const version$1 = "3.5.12";
28579
+ const version$1 = "3.5.14";
28512
28580
  createVuetify$1.version = version$1;
28513
28581
 
28514
28582
  // Vue's inject() can only be used in setup
@@ -28761,7 +28829,7 @@ var index = /*#__PURE__*/Object.freeze({
28761
28829
 
28762
28830
  /* eslint-disable local-rules/sort-imports */
28763
28831
 
28764
- const version = "3.5.12";
28832
+ const version = "3.5.14";
28765
28833
 
28766
28834
  /* eslint-disable local-rules/sort-imports */
28767
28835