vuetify 3.4.9 → 3.4.10

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 (136) hide show
  1. package/dist/json/attributes.json +12 -4
  2. package/dist/json/importMap-labs.json +8 -8
  3. package/dist/json/importMap.json +132 -132
  4. package/dist/json/tags.json +2 -0
  5. package/dist/json/web-types.json +34 -14
  6. package/dist/vuetify-labs.css +2864 -2838
  7. package/dist/vuetify-labs.d.ts +163 -81
  8. package/dist/vuetify-labs.esm.js +192 -145
  9. package/dist/vuetify-labs.esm.js.map +1 -1
  10. package/dist/vuetify-labs.js +192 -145
  11. package/dist/vuetify-labs.min.css +2 -2
  12. package/dist/vuetify.css +865 -862
  13. package/dist/vuetify.d.ts +195 -113
  14. package/dist/vuetify.esm.js +189 -134
  15. package/dist/vuetify.esm.js.map +1 -1
  16. package/dist/vuetify.js +189 -134
  17. package/dist/vuetify.js.map +1 -1
  18. package/dist/vuetify.min.css +2 -2
  19. package/dist/vuetify.min.js +108 -107
  20. package/dist/vuetify.min.js.map +1 -1
  21. package/lib/components/VAlert/VAlert.css +2 -2
  22. package/lib/components/VAppBar/VAppBar.css +1 -1
  23. package/lib/components/VAppBar/VAppBar.mjs +0 -1
  24. package/lib/components/VAppBar/VAppBar.mjs.map +1 -1
  25. package/lib/components/VAutocomplete/VAutocomplete.css +2 -2
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs +15 -2
  27. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  28. package/lib/components/VAutocomplete/VAutocomplete.sass +1 -1
  29. package/lib/components/VAutocomplete/_variables.scss +1 -0
  30. package/lib/components/VAvatar/VAvatar.css +2 -2
  31. package/lib/components/VBanner/VBanner.css +1 -1
  32. package/lib/components/VBottomNavigation/VBottomNavigation.css +1 -1
  33. package/lib/components/VBottomSheet/VBottomSheet.css +1 -1
  34. package/lib/components/VBtn/VBtn.css +4 -4
  35. package/lib/components/VBtnGroup/VBtnGroup.css +1 -1
  36. package/lib/components/VCard/VCard.css +5 -5
  37. package/lib/components/VChip/VChip.css +2 -2
  38. package/lib/components/VChip/VChip.mjs +2 -1
  39. package/lib/components/VChip/VChip.mjs.map +1 -1
  40. package/lib/components/VColorPicker/VColorPicker.css +3 -3
  41. package/lib/components/VCombobox/VCombobox.css +2 -2
  42. package/lib/components/VCombobox/VCombobox.mjs +15 -5
  43. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  44. package/lib/components/VCombobox/VCombobox.sass +2 -2
  45. package/lib/components/VCombobox/_variables.scss +2 -0
  46. package/lib/components/VDataIterator/index.d.mts +1 -1
  47. package/lib/components/VDataTable/VDataTable.css +1 -1
  48. package/lib/components/VDataTable/VDataTable.sass +1 -1
  49. package/lib/components/VDataTable/VDataTableFooter.mjs +33 -30
  50. package/lib/components/VDataTable/VDataTableFooter.mjs.map +1 -1
  51. package/lib/components/VDataTable/VDataTableHeaders.mjs +2 -1
  52. package/lib/components/VDataTable/VDataTableHeaders.mjs.map +1 -1
  53. package/lib/components/VDataTable/index.d.mts +1 -1
  54. package/lib/components/VDatePicker/index.d.mts +82 -0
  55. package/lib/components/VDialog/VDialog.css +1 -1
  56. package/lib/components/VDialog/index.d.mts +3 -3
  57. package/lib/components/VExpansionPanel/VExpansionPanel.css +1 -1
  58. package/lib/components/VField/VField.css +2 -2
  59. package/lib/components/VFileInput/index.d.mts +3 -3
  60. package/lib/components/VFooter/VFooter.css +1 -1
  61. package/lib/components/VForm/index.d.mts +21 -21
  62. package/lib/components/VImg/index.d.mts +6 -6
  63. package/lib/components/VKbd/VKbd.css +1 -1
  64. package/lib/components/VList/VList.css +1 -1
  65. package/lib/components/VList/VList.mjs +7 -2
  66. package/lib/components/VList/VList.mjs.map +1 -1
  67. package/lib/components/VList/VListItem.css +5 -2
  68. package/lib/components/VList/VListItem.sass +3 -0
  69. package/lib/components/VList/_variables.scss +1 -0
  70. package/lib/components/VMenu/VMenu.css +1 -1
  71. package/lib/components/VMenu/index.d.mts +6 -6
  72. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +2 -2
  73. package/lib/components/VNavigationDrawer/index.d.mts +3 -3
  74. package/lib/components/VOverflowBtn/VOverflowBtn.mjs +0 -1
  75. package/lib/components/VOverflowBtn/VOverflowBtn.mjs.map +1 -1
  76. package/lib/components/VOverlay/VOverlay.mjs +2 -2
  77. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  78. package/lib/components/VOverlay/locationStrategies.mjs +0 -1
  79. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  80. package/lib/components/VSelect/VSelect.css +1 -1
  81. package/lib/components/VSelect/VSelect.mjs +15 -3
  82. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  83. package/lib/components/VSelectionControl/index.d.mts +3 -3
  84. package/lib/components/VSheet/VSheet.css +1 -1
  85. package/lib/components/VSlideGroup/index.d.mts +3 -3
  86. package/lib/components/VSnackbar/VSnackbar.css +2 -2
  87. package/lib/components/VSnackbar/index.d.mts +3 -3
  88. package/lib/components/VStepper/VStepper.css +3 -3
  89. package/lib/components/VSwitch/VSwitch.css +2 -2
  90. package/lib/components/VSystemBar/VSystemBar.css +1 -1
  91. package/lib/components/VTabs/VTab.css +2 -2
  92. package/lib/components/VTabs/VTab.sass +2 -2
  93. package/lib/components/VTextField/index.d.mts +6 -6
  94. package/lib/components/VTextarea/index.d.mts +3 -3
  95. package/lib/components/VTimeline/VTimeline.css +1 -1
  96. package/lib/components/VToolbar/VToolbar.css +2 -2
  97. package/lib/components/VTooltip/index.d.mts +3 -3
  98. package/lib/components/VTreeview/VTreeview.mjs +0 -1
  99. package/lib/components/VTreeview/VTreeview.mjs.map +1 -1
  100. package/lib/components/VTreeview/VTreeviewNode.mjs +0 -1
  101. package/lib/components/VTreeview/VTreeviewNode.mjs.map +1 -1
  102. package/lib/components/VValidation/index.d.mts +6 -6
  103. package/lib/components/VWindow/VWindowItem.mjs +0 -1
  104. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  105. package/lib/components/index.d.mts +152 -70
  106. package/lib/composables/calendar.mjs +10 -4
  107. package/lib/composables/calendar.mjs.map +1 -1
  108. package/lib/composables/date/date.mjs +0 -4
  109. package/lib/composables/date/date.mjs.map +1 -1
  110. package/lib/composables/delay.mjs +19 -18
  111. package/lib/composables/delay.mjs.map +1 -1
  112. package/lib/composables/density.mjs +1 -0
  113. package/lib/composables/density.mjs.map +1 -1
  114. package/lib/entry-bundler.mjs +1 -1
  115. package/lib/entry-bundler.mjs.map +1 -1
  116. package/lib/framework.mjs +1 -1
  117. package/lib/framework.mjs.map +1 -1
  118. package/lib/index.d.mts +43 -43
  119. package/lib/labs/VCalendar/VCalendar.mjs +4 -8
  120. package/lib/labs/VCalendar/VCalendar.mjs.map +1 -1
  121. package/lib/labs/VCalendar/VCalendarDay.css +23 -0
  122. package/lib/labs/VCalendar/VCalendarDay.sass +24 -1
  123. package/lib/labs/VCalendar/index.d.mts +11 -11
  124. package/lib/labs/VPicker/VPicker.css +1 -1
  125. package/lib/labs/components.d.mts +11 -11
  126. package/lib/locale/cs.mjs +1 -1
  127. package/lib/locale/cs.mjs.map +1 -1
  128. package/lib/locale/nl.mjs +2 -2
  129. package/lib/locale/nl.mjs.map +1 -1
  130. package/lib/locale/pt.mjs +17 -17
  131. package/lib/locale/pt.mjs.map +1 -1
  132. package/lib/styles/main.css +25 -25
  133. package/lib/styles/settings/_elevations.scss +1 -1
  134. package/lib/util/helpers.mjs +8 -0
  135. package/lib/util/helpers.mjs.map +1 -1
  136. package/package.json +12 -12
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.4.9
2
+ * Vuetify v3.4.10
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -541,6 +541,14 @@
541
541
  return child.type !== vue.Fragment || ensureValidVNode(child.children);
542
542
  }) ? vnodes : null;
543
543
  }
544
+ function defer(timeout, cb) {
545
+ if (!IN_BROWSER || timeout === 0) {
546
+ cb();
547
+ return () => {};
548
+ }
549
+ const timeoutId = window.setTimeout(cb, timeout);
550
+ return () => window.clearTimeout(timeoutId);
551
+ }
544
552
 
545
553
  // Utilities
546
554
  const block = ['top', 'bottom'];
@@ -3838,7 +3846,6 @@
3838
3846
  // shrink: behavior.has('shrink'),
3839
3847
  };
3840
3848
  });
3841
-
3842
3849
  const canScroll = vue.computed(() => {
3843
3850
  const behavior = scrollBehavior.value;
3844
3851
  return behavior.hide ||
@@ -3921,6 +3928,7 @@
3921
3928
 
3922
3929
  // typeof allowedDensities[number] evalutes to any
3923
3930
  // when generating api types for whatever reason.
3931
+
3924
3932
  // Composables
3925
3933
  const makeDensityProps = propsFactory({
3926
3934
  density: {
@@ -5816,6 +5824,68 @@
5816
5824
  }
5817
5825
  });
5818
5826
 
5827
+ const makeVAvatarProps = propsFactory({
5828
+ start: Boolean,
5829
+ end: Boolean,
5830
+ icon: IconValue,
5831
+ image: String,
5832
+ text: String,
5833
+ ...makeComponentProps(),
5834
+ ...makeDensityProps(),
5835
+ ...makeRoundedProps(),
5836
+ ...makeSizeProps(),
5837
+ ...makeTagProps(),
5838
+ ...makeThemeProps(),
5839
+ ...makeVariantProps({
5840
+ variant: 'flat'
5841
+ })
5842
+ }, 'VAvatar');
5843
+ const VAvatar = genericComponent()({
5844
+ name: 'VAvatar',
5845
+ props: makeVAvatarProps(),
5846
+ setup(props, _ref) {
5847
+ let {
5848
+ slots
5849
+ } = _ref;
5850
+ const {
5851
+ themeClasses
5852
+ } = provideTheme(props);
5853
+ const {
5854
+ colorClasses,
5855
+ colorStyles,
5856
+ variantClasses
5857
+ } = useVariant(props);
5858
+ const {
5859
+ densityClasses
5860
+ } = useDensity(props);
5861
+ const {
5862
+ roundedClasses
5863
+ } = useRounded(props);
5864
+ const {
5865
+ sizeClasses,
5866
+ sizeStyles
5867
+ } = useSize(props);
5868
+ useRender(() => vue.createVNode(props.tag, {
5869
+ "class": ['v-avatar', {
5870
+ 'v-avatar--start': props.start,
5871
+ 'v-avatar--end': props.end
5872
+ }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
5873
+ "style": [colorStyles.value, sizeStyles.value, props.style]
5874
+ }, {
5875
+ default: () => [props.image ? vue.createVNode(VImg, {
5876
+ "key": "image",
5877
+ "src": props.image,
5878
+ "alt": "",
5879
+ "cover": true
5880
+ }, null) : props.icon ? vue.createVNode(VIcon, {
5881
+ "key": "icon",
5882
+ "icon": props.icon
5883
+ }, null) : slots.default?.() ?? props.text, genOverlays(false, 'v-avatar')]
5884
+ }));
5885
+ return {};
5886
+ }
5887
+ });
5888
+
5819
5889
  const makeVLabelProps = propsFactory({
5820
5890
  text: String,
5821
5891
  clickable: Boolean,
@@ -6783,68 +6853,6 @@
6783
6853
  }
6784
6854
  });
6785
6855
 
6786
- const makeVAvatarProps = propsFactory({
6787
- start: Boolean,
6788
- end: Boolean,
6789
- icon: IconValue,
6790
- image: String,
6791
- text: String,
6792
- ...makeComponentProps(),
6793
- ...makeDensityProps(),
6794
- ...makeRoundedProps(),
6795
- ...makeSizeProps(),
6796
- ...makeTagProps(),
6797
- ...makeThemeProps(),
6798
- ...makeVariantProps({
6799
- variant: 'flat'
6800
- })
6801
- }, 'VAvatar');
6802
- const VAvatar = genericComponent()({
6803
- name: 'VAvatar',
6804
- props: makeVAvatarProps(),
6805
- setup(props, _ref) {
6806
- let {
6807
- slots
6808
- } = _ref;
6809
- const {
6810
- themeClasses
6811
- } = provideTheme(props);
6812
- const {
6813
- colorClasses,
6814
- colorStyles,
6815
- variantClasses
6816
- } = useVariant(props);
6817
- const {
6818
- densityClasses
6819
- } = useDensity(props);
6820
- const {
6821
- roundedClasses
6822
- } = useRounded(props);
6823
- const {
6824
- sizeClasses,
6825
- sizeStyles
6826
- } = useSize(props);
6827
- useRender(() => vue.createVNode(props.tag, {
6828
- "class": ['v-avatar', {
6829
- 'v-avatar--start': props.start,
6830
- 'v-avatar--end': props.end
6831
- }, themeClasses.value, colorClasses.value, densityClasses.value, roundedClasses.value, sizeClasses.value, variantClasses.value, props.class],
6832
- "style": [colorStyles.value, sizeStyles.value, props.style]
6833
- }, {
6834
- default: () => [props.image ? vue.createVNode(VImg, {
6835
- "key": "image",
6836
- "src": props.image,
6837
- "alt": "",
6838
- "cover": true
6839
- }, null) : props.icon ? vue.createVNode(VIcon, {
6840
- "key": "icon",
6841
- "icon": props.icon
6842
- }, null) : slots.default?.() ?? props.text, genOverlays(false, 'v-avatar')]
6843
- }));
6844
- return {};
6845
- }
6846
- });
6847
-
6848
6856
  // Types
6849
6857
 
6850
6858
  const VChipGroupSymbol = Symbol.for('vuetify:v-chip-group');
@@ -7137,7 +7145,8 @@
7137
7145
  }
7138
7146
  }, slots.append)]), hasClose && vue.createVNode("button", vue.mergeProps({
7139
7147
  "key": "close",
7140
- "class": "v-chip__close"
7148
+ "class": "v-chip__close",
7149
+ "type": "button"
7141
7150
  }, closeProps.value), [!slots.close ? vue.createVNode(VIcon, {
7142
7151
  "key": "close-icon",
7143
7152
  "icon": props.closeIcon,
@@ -8403,6 +8412,9 @@
8403
8412
  }
8404
8413
  e.preventDefault();
8405
8414
  }
8415
+ function onMousedown(e) {
8416
+ isFocused.value = true;
8417
+ }
8406
8418
  function focus(location) {
8407
8419
  if (contentRef.value) {
8408
8420
  return focusChild(contentRef.value, location);
@@ -8413,7 +8425,8 @@
8413
8425
  "ref": contentRef,
8414
8426
  "class": ['v-list', {
8415
8427
  'v-list--disabled': props.disabled,
8416
- 'v-list--nav': props.nav
8428
+ 'v-list--nav': props.nav,
8429
+ 'v-list--slim': props.slim
8417
8430
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, lineClasses.value, roundedClasses.value, props.class],
8418
8431
  "style": [backgroundColorStyles.value, dimensionStyles.value, props.style],
8419
8432
  "tabindex": props.disabled || isFocused.value ? -1 : 0,
@@ -8422,7 +8435,8 @@
8422
8435
  "onFocusin": onFocusin,
8423
8436
  "onFocusout": onFocusout,
8424
8437
  "onFocus": onFocus,
8425
- "onKeydown": onKeydown
8438
+ "onKeydown": onKeydown,
8439
+ "onMousedown": onMousedown
8426
8440
  }, {
8427
8441
  default: () => [vue.createVNode(VListChildren, {
8428
8442
  "items": items.value,
@@ -8549,7 +8563,6 @@
8549
8563
  // specific viewport position, usually centered
8550
8564
  connected: connectedLocationStrategy // connected to a certain element
8551
8565
  };
8552
-
8553
8566
  const makeLocationStrategyProps = propsFactory({
8554
8567
  locationStrategy: {
8555
8568
  type: [String, Function],
@@ -9096,26 +9109,27 @@
9096
9109
  openDelay: [Number, String]
9097
9110
  }, 'delay');
9098
9111
  function useDelay(props, cb) {
9099
- const delays = {};
9100
- const runDelayFactory = prop => () => {
9101
- // istanbul ignore next
9102
- if (!IN_BROWSER) return Promise.resolve(true);
9103
- const active = prop === 'openDelay';
9104
- delays.closeDelay && window.clearTimeout(delays.closeDelay);
9105
- delete delays.closeDelay;
9106
- delays.openDelay && window.clearTimeout(delays.openDelay);
9107
- delete delays.openDelay;
9112
+ let clearDelay = () => {};
9113
+ function runDelay(isOpening) {
9114
+ clearDelay?.();
9115
+ const delay = Number(isOpening ? props.openDelay : props.closeDelay);
9108
9116
  return new Promise(resolve => {
9109
- const delay = parseInt(props[prop] ?? 0, 10);
9110
- delays[prop] = window.setTimeout(() => {
9111
- cb?.(active);
9112
- resolve(active);
9113
- }, delay);
9117
+ clearDelay = defer(delay, () => {
9118
+ cb?.(isOpening);
9119
+ resolve(isOpening);
9120
+ });
9114
9121
  });
9115
- };
9122
+ }
9123
+ function runOpenDelay() {
9124
+ return runDelay(true);
9125
+ }
9126
+ function runCloseDelay() {
9127
+ return runDelay(false);
9128
+ }
9116
9129
  return {
9117
- runCloseDelay: runDelayFactory('closeDelay'),
9118
- runOpenDelay: runDelayFactory('openDelay')
9130
+ clearDelay,
9131
+ runOpenDelay,
9132
+ runCloseDelay
9119
9133
  };
9120
9134
  }
9121
9135
 
@@ -9962,7 +9976,7 @@
9962
9976
  ref: activatorRef,
9963
9977
  targetRef
9964
9978
  }, activatorEvents.value, props.activatorProps)
9965
- }), isMounted.value && hasContent.value && vue.createVNode(vue.Teleport, {
9979
+ }), !props.disabled && isMounted.value && hasContent.value && vue.createVNode(vue.Teleport, {
9966
9980
  "disabled": !teleportTarget.value,
9967
9981
  "to": teleportTarget.value
9968
9982
  }, {
@@ -9978,7 +9992,7 @@
9978
9992
  "ref": root
9979
9993
  }, scopeId, attrs), [vue.createVNode(Scrim, vue.mergeProps({
9980
9994
  "color": scrimColor,
9981
- "modelValue": isActive.value && !!props.scrim
9995
+ "modelValue": !!props.scrim && isActive.value
9982
9996
  }, scrimEvents.value), null), vue.createVNode(MaybeTransition, {
9983
9997
  "appear": true,
9984
9998
  "persisted": true,
@@ -11331,7 +11345,7 @@
11331
11345
  }
11332
11346
  return items.value;
11333
11347
  });
11334
- const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
11348
+ const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
11335
11349
  const computedMenuProps = vue.computed(() => {
11336
11350
  return {
11337
11351
  ...props.menuProps,
@@ -11341,7 +11355,6 @@
11341
11355
  }
11342
11356
  };
11343
11357
  });
11344
-
11345
11358
  const listRef = vue.ref();
11346
11359
  const {
11347
11360
  onListScroll,
@@ -11439,6 +11452,15 @@
11439
11452
  });
11440
11453
  }
11441
11454
  });
11455
+ vue.watch(displayItems, (val, oldVal) => {
11456
+ if (!isFocused.value) return;
11457
+ if (!val.length && props.hideNoData) {
11458
+ menu.value = false;
11459
+ }
11460
+ if (!oldVal.length && val.length) {
11461
+ menu.value = true;
11462
+ }
11463
+ });
11442
11464
  useRender(() => {
11443
11465
  const hasChips = !!(props.chips || slots.chip);
11444
11466
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -11496,6 +11518,7 @@
11496
11518
  "onFocusin": onFocusin,
11497
11519
  "onScrollPassive": onListScroll,
11498
11520
  "tabindex": "-1",
11521
+ "aria-live": "polite",
11499
11522
  "color": props.itemColor ?? props.color
11500
11523
  }, {
11501
11524
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
@@ -11532,7 +11555,9 @@
11532
11555
  "modelValue": isSelected,
11533
11556
  "ripple": false,
11534
11557
  "tabindex": "-1"
11535
- }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
11558
+ }, null) : undefined, item.props.prependAvatar && vue.createVNode(VAvatar, {
11559
+ "image": item.props.prependAvatar
11560
+ }, null), item.props.prependIcon && vue.createVNode(VIcon, {
11536
11561
  "icon": item.props.prependIcon
11537
11562
  }, null)]);
11538
11563
  }
@@ -11823,7 +11848,7 @@
11823
11848
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
11824
11849
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
11825
11850
  });
11826
- const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
11851
+ const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
11827
11852
  const listRef = vue.ref();
11828
11853
  const {
11829
11854
  onListScroll,
@@ -11982,6 +12007,15 @@
11982
12007
  });
11983
12008
  }
11984
12009
  });
12010
+ vue.watch(displayItems, (val, oldVal) => {
12011
+ if (!isFocused.value) return;
12012
+ if (!val.length && props.hideNoData) {
12013
+ menu.value = false;
12014
+ }
12015
+ if (!oldVal.length && val.length) {
12016
+ menu.value = true;
12017
+ }
12018
+ });
11985
12019
  useRender(() => {
11986
12020
  const hasChips = !!(props.chips || slots.chip);
11987
12021
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -12036,6 +12070,7 @@
12036
12070
  "onFocusout": onFocusout,
12037
12071
  "onScrollPassive": onListScroll,
12038
12072
  "tabindex": "-1",
12073
+ "aria-live": "polite",
12039
12074
  "color": props.itemColor ?? props.color
12040
12075
  }, {
12041
12076
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
@@ -12071,7 +12106,9 @@
12071
12106
  "modelValue": isSelected,
12072
12107
  "ripple": false,
12073
12108
  "tabindex": "-1"
12074
- }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
12109
+ }, null) : undefined, item.props.prependAvatar && vue.createVNode(VAvatar, {
12110
+ "image": item.props.prependAvatar
12111
+ }, null), item.props.prependIcon && vue.createVNode(VIcon, {
12075
12112
  "icon": item.props.prependIcon
12076
12113
  }, null)]);
12077
12114
  },
@@ -13580,7 +13617,6 @@
13580
13617
  function onTransitionCancelled() {
13581
13618
  onAfterTransition(); // This should have the same path as normal transition end.
13582
13619
  }
13583
-
13584
13620
  function onEnterTransition(el) {
13585
13621
  if (!isTransitioning.value) {
13586
13622
  return;
@@ -15579,7 +15615,7 @@
15579
15615
  const selectFirst = props.autoSelectFirst === true || props.autoSelectFirst === 'exact' && search.value === displayItems.value[0]?.title;
15580
15616
  return selectFirst && displayItems.value.length > 0 && !isPristine.value && !listHasFocus.value;
15581
15617
  });
15582
- const menuDisabled = vue.computed(() => props.hideNoData && !items.value.length || props.readonly || form?.isReadonly.value);
15618
+ const menuDisabled = vue.computed(() => props.hideNoData && !displayItems.value.length || props.readonly || form?.isReadonly.value);
15583
15619
  const listRef = vue.ref();
15584
15620
  const {
15585
15621
  onListScroll,
@@ -15707,9 +15743,6 @@
15707
15743
  function onUpdateModelValue(v) {
15708
15744
  if (v == null || v === '' && !props.multiple) model.value = [];
15709
15745
  }
15710
- vue.watch(filteredItems, val => {
15711
- if (!val.length && props.hideNoData) menu.value = false;
15712
- });
15713
15746
  vue.watch(isFocused, (val, oldVal) => {
15714
15747
  if (val || val === oldVal) return;
15715
15748
  selectionIndex.value = -1;
@@ -15733,6 +15766,15 @@
15733
15766
  });
15734
15767
  }
15735
15768
  });
15769
+ vue.watch(displayItems, (val, oldVal) => {
15770
+ if (!isFocused.value) return;
15771
+ if (!val.length && props.hideNoData) {
15772
+ menu.value = false;
15773
+ }
15774
+ if (!oldVal.length && val.length) {
15775
+ menu.value = true;
15776
+ }
15777
+ });
15736
15778
  useRender(() => {
15737
15779
  const hasChips = !!(props.chips || slots.chip);
15738
15780
  const hasList = !!(!props.hideNoData || displayItems.value.length || slots['prepend-item'] || slots['append-item'] || slots['no-data']);
@@ -15787,6 +15829,7 @@
15787
15829
  "onFocusout": onFocusout,
15788
15830
  "onScrollPassive": onListScroll,
15789
15831
  "tabindex": "-1",
15832
+ "aria-live": "polite",
15790
15833
  "color": props.itemColor ?? props.color
15791
15834
  }, {
15792
15835
  default: () => [slots['prepend-item']?.(), !displayItems.value.length && !props.hideNoData && (slots['no-data']?.() ?? vue.createVNode(VListItem, {
@@ -15822,7 +15865,9 @@
15822
15865
  "modelValue": isSelected,
15823
15866
  "ripple": false,
15824
15867
  "tabindex": "-1"
15825
- }, null) : undefined, item.props.prependIcon && vue.createVNode(VIcon, {
15868
+ }, null) : undefined, item.props.prependAvatar && vue.createVNode(VAvatar, {
15869
+ "image": item.props.prependAvatar
15870
+ }, null), item.props.prependIcon && vue.createVNode(VIcon, {
15826
15871
  "icon": item.props.prependIcon
15827
15872
  }, null)]);
15828
15873
  },
@@ -17078,10 +17123,6 @@
17078
17123
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
17079
17124
  return Math.floor(diffDays / 7) + 1;
17080
17125
  }
17081
- function getDay(adapter, value) {
17082
- const date = adapter.toJsDate(value);
17083
- return date.getDay();
17084
- }
17085
17126
 
17086
17127
  // Composables
17087
17128
 
@@ -17830,35 +17871,38 @@
17830
17871
  title: t(option.title)
17831
17872
  };
17832
17873
  }));
17833
- useRender(() => vue.createVNode("div", {
17834
- "class": "v-data-table-footer"
17835
- }, [slots.prepend?.(), vue.createVNode("div", {
17836
- "class": "v-data-table-footer__items-per-page"
17837
- }, [vue.createVNode("span", null, [t(props.itemsPerPageText)]), vue.createVNode(VSelect, {
17838
- "items": itemsPerPageOptions.value,
17839
- "modelValue": itemsPerPage.value,
17840
- "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
17841
- "density": "compact",
17842
- "variant": "outlined",
17843
- "hide-details": true
17844
- }, null)]), vue.createVNode("div", {
17845
- "class": "v-data-table-footer__info"
17846
- }, [vue.createVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), vue.createVNode("div", {
17847
- "class": "v-data-table-footer__pagination"
17848
- }, [vue.createVNode(VPagination, {
17849
- "modelValue": page.value,
17850
- "onUpdate:modelValue": $event => page.value = $event,
17851
- "density": "comfortable",
17852
- "first-aria-label": props.firstPageLabel,
17853
- "last-aria-label": props.lastPageLabel,
17854
- "length": pageCount.value,
17855
- "next-aria-label": props.nextPageLabel,
17856
- "previous-aria-label": props.prevPageLabel,
17857
- "rounded": true,
17858
- "show-first-last-page": true,
17859
- "total-visible": props.showCurrentPage ? 1 : 0,
17860
- "variant": "plain"
17861
- }, null)])]));
17874
+ useRender(() => {
17875
+ const paginationProps = VPagination.filterProps(props);
17876
+ return vue.createVNode("div", {
17877
+ "class": "v-data-table-footer"
17878
+ }, [slots.prepend?.(), vue.createVNode("div", {
17879
+ "class": "v-data-table-footer__items-per-page"
17880
+ }, [vue.createVNode("span", null, [t(props.itemsPerPageText)]), vue.createVNode(VSelect, {
17881
+ "items": itemsPerPageOptions.value,
17882
+ "modelValue": itemsPerPage.value,
17883
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
17884
+ "density": "compact",
17885
+ "variant": "outlined",
17886
+ "hide-details": true
17887
+ }, null)]), vue.createVNode("div", {
17888
+ "class": "v-data-table-footer__info"
17889
+ }, [vue.createVNode("div", null, [t(props.pageText, !itemsLength.value ? 0 : startIndex.value + 1, stopIndex.value, itemsLength.value)])]), vue.createVNode("div", {
17890
+ "class": "v-data-table-footer__pagination"
17891
+ }, [vue.createVNode(VPagination, vue.mergeProps({
17892
+ "modelValue": page.value,
17893
+ "onUpdate:modelValue": $event => page.value = $event,
17894
+ "density": "comfortable",
17895
+ "first-aria-label": props.firstPageLabel,
17896
+ "last-aria-label": props.lastPageLabel,
17897
+ "length": pageCount.value,
17898
+ "next-aria-label": props.nextPageLabel,
17899
+ "previous-aria-label": props.prevPageLabel,
17900
+ "rounded": true,
17901
+ "show-first-last-page": true,
17902
+ "total-visible": props.showCurrentPage ? 1 : 0,
17903
+ "variant": "plain"
17904
+ }, paginationProps), null)])]);
17905
+ });
17862
17906
  return {};
17863
17907
  }
17864
17908
  });
@@ -18242,7 +18286,8 @@
18242
18286
  "class": ['v-data-table__th', {
18243
18287
  'v-data-table__th--sortable': column.sortable,
18244
18288
  'v-data-table__th--sorted': isSorted(column),
18245
- 'v-data-table__th--fixed': column.fixed
18289
+ 'v-data-table__th--fixed': column.fixed,
18290
+ 'v-data-table__th--sticky': props.sticky
18246
18291
  }, loaderClasses.value],
18247
18292
  "style": {
18248
18293
  width: convertToUnit(column.width),
@@ -19736,7 +19781,11 @@
19736
19781
  max: null,
19737
19782
  min: null,
19738
19783
  showAdjacentMonths: Boolean,
19739
- year: [Number, String]
19784
+ year: [Number, String],
19785
+ weekdays: {
19786
+ type: Array,
19787
+ default: () => [0, 1, 2, 3, 4, 5, 6]
19788
+ }
19740
19789
  }, 'calendar');
19741
19790
  function useCalendar(props) {
19742
19791
  const adapter = useDate();
@@ -19777,8 +19826,10 @@
19777
19826
  }
19778
19827
  return weeks;
19779
19828
  });
19780
- const genDays = (days, today) => {
19781
- return days.map((date, index) => {
19829
+ function genDays(days, today) {
19830
+ return days.filter(date => {
19831
+ return props.weekdays.includes(date.getDay());
19832
+ }).map((date, index) => {
19782
19833
  const isoDate = adapter.toISO(date);
19783
19834
  const isAdjacent = !adapter.isSameMonth(date, month.value);
19784
19835
  const isStart = adapter.isSameDay(date, adapter.startOfMonth(month.value));
@@ -19803,7 +19854,7 @@
19803
19854
  localized: adapter.format(date, 'dayOfMonth')
19804
19855
  };
19805
19856
  });
19806
- };
19857
+ }
19807
19858
  const daysInWeek = vue.computed(() => {
19808
19859
  const lastDay = adapter.startOfWeek(model.value);
19809
19860
  const week = [];
@@ -25407,10 +25458,6 @@
25407
25458
  const makeVCalendarProps = propsFactory({
25408
25459
  hideHeader: Boolean,
25409
25460
  hideWeekNumber: Boolean,
25410
- weekdays: {
25411
- type: Array,
25412
- default: () => [0, 1, 2, 3, 4, 5, 6]
25413
- },
25414
25461
  ...makeCalendarProps(),
25415
25462
  ...makeVCalendarDayProps(),
25416
25463
  ...makeVCalendarHeaderProps()
@@ -25484,7 +25531,7 @@
25484
25531
  }), null) : slots.header({
25485
25532
  title: title.value
25486
25533
  }))]), vue.createVNode("div", {
25487
- "class": "v-calendar__container"
25534
+ "class": ['v-calendar__container', `days__${props.weekdays.length}`]
25488
25535
  }, [props.viewMode === 'month' && !props.hideDayHeader && vue.createVNode("div", {
25489
25536
  "class": ['v-calendar-weekly__head', `days__${props.weekdays.length}`, ...(!props.hideWeekNumber ? ['v-calendar-weekly__head-weeknumbers'] : [])],
25490
25537
  "key": "calenderWeeklyHead"
@@ -25496,9 +25543,9 @@
25496
25543
  }, [dayNames[weekday]]))]), props.viewMode === 'month' && vue.createVNode("div", {
25497
25544
  "key": "VCalendarMonth",
25498
25545
  "class": ['v-calendar-month__days', `days${!props.hideWeekNumber ? '-with-weeknumbers' : ''}__${props.weekdays.length}`, ...(!props.hideWeekNumber ? ['v-calendar-month__weeknumbers'] : [])]
25499
- }, [chunkArray(daysInMonth.value.filter(day => props.weekdays.includes(getDay(adapter, day.date))), props.weekdays.length).map((week, wi) => [!props.hideWeekNumber ? vue.createVNode("div", {
25546
+ }, [chunkArray(daysInMonth.value, props.weekdays.length).map((week, wi) => [!props.hideWeekNumber ? vue.createVNode("div", {
25500
25547
  "class": "v-calendar-month__weeknumber"
25501
- }, [weekNumbers.value[wi]]) : '', week.filter(day => props.weekdays.includes(getDay(adapter, day.date))).map(day => vue.createVNode(VCalendarMonthDay, {
25548
+ }, [weekNumbers.value[wi]]) : '', week.map(day => vue.createVNode(VCalendarMonthDay, {
25502
25549
  "color": adapter.isSameDay(new Date(), day.date) ? 'primary' : undefined,
25503
25550
  "day": day,
25504
25551
  "title": day ? adapter.format(day.date, 'dayOfMonth') : 'NaN',
@@ -25906,7 +25953,7 @@
25906
25953
  date
25907
25954
  };
25908
25955
  }
25909
- const version$1 = "3.4.9";
25956
+ const version$1 = "3.4.10";
25910
25957
  createVuetify$1.version = version$1;
25911
25958
 
25912
25959
  // Vue's inject() can only be used in setup
@@ -25920,7 +25967,7 @@
25920
25967
 
25921
25968
  /* eslint-disable local-rules/sort-imports */
25922
25969
 
25923
- const version = "3.4.9";
25970
+ const version = "3.4.10";
25924
25971
 
25925
25972
  /* eslint-disable local-rules/sort-imports */
25926
25973