vuetify 3.1.7 → 3.1.9

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 (169) hide show
  1. package/dist/json/attributes.json +6 -530
  2. package/dist/json/importMap.json +36 -36
  3. package/dist/json/tags.json +3 -136
  4. package/dist/json/web-types.json +62 -1218
  5. package/dist/vuetify-labs.css +526 -363
  6. package/dist/vuetify-labs.d.ts +14 -7
  7. package/dist/vuetify-labs.esm.js +502 -281
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +502 -281
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +472 -312
  12. package/dist/vuetify.d.ts +17 -12
  13. package/dist/vuetify.esm.js +336 -222
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +336 -222
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +503 -501
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAlert/VAlert.css +1 -1
  21. package/lib/components/VAlert/VAlert.mjs +29 -15
  22. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  23. package/lib/components/VAlert/_variables.scss +1 -1
  24. package/lib/components/VAlert/index.d.ts +2 -0
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs +11 -5
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VBanner/VBanner.mjs +19 -12
  28. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  29. package/lib/components/VBottomNavigation/VBottomNavigation.mjs.map +1 -1
  30. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +11 -7
  31. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  32. package/lib/components/VBtn/VBtn.mjs +25 -19
  33. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  34. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  35. package/lib/components/VCard/VCard.mjs +10 -6
  36. package/lib/components/VCard/VCard.mjs.map +1 -1
  37. package/lib/components/VCard/VCardItem.mjs +27 -23
  38. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  39. package/lib/components/VCarousel/VCarousel.mjs.map +1 -1
  40. package/lib/components/VChip/VChip.css +110 -90
  41. package/lib/components/VChip/VChip.mjs +70 -48
  42. package/lib/components/VChip/VChip.mjs.map +1 -1
  43. package/lib/components/VChip/_mixins.scss +27 -23
  44. package/lib/components/VChip/index.d.ts +2 -2
  45. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  46. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  47. package/lib/components/VColorPicker/VColorPickerEdit.mjs.map +1 -1
  48. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  49. package/lib/components/VColorPicker/VColorPickerSwatches.mjs.map +1 -1
  50. package/lib/components/VCombobox/VCombobox.mjs +11 -5
  51. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  52. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +4 -1
  53. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
  54. package/lib/components/VDefaultsProvider/index.d.ts +3 -0
  55. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  56. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  57. package/lib/components/VExpansionPanel/VExpansionPanelText.mjs.map +1 -1
  58. package/lib/components/VExpansionPanel/VExpansionPanelTitle.mjs.map +1 -1
  59. package/lib/components/VField/VField.mjs.map +1 -1
  60. package/lib/components/VFileInput/VFileInput.mjs +1 -0
  61. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  62. package/lib/components/VFooter/VFooter.css +2 -0
  63. package/lib/components/VFooter/VFooter.sass +2 -0
  64. package/lib/components/VFooter/_variables.scss +2 -0
  65. package/lib/components/VImg/VImg.mjs +2 -2
  66. package/lib/components/VImg/VImg.mjs.map +1 -1
  67. package/lib/components/VInput/VInput.mjs.map +1 -1
  68. package/lib/components/VItemGroup/VItemGroup.mjs.map +1 -1
  69. package/lib/components/VList/VListGroup.mjs.map +1 -1
  70. package/lib/components/VList/VListItem.mjs +23 -19
  71. package/lib/components/VList/VListItem.mjs.map +1 -1
  72. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  73. package/lib/components/VMessages/VMessages.mjs.map +1 -1
  74. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  75. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  76. package/lib/components/VProgressCircular/VProgressCircular.mjs.map +1 -1
  77. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  78. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  79. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  80. package/lib/components/VRating/VRating.mjs.map +1 -1
  81. package/lib/components/VSelect/VSelect.mjs +11 -5
  82. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  83. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  84. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  85. package/lib/components/VSlider/VSliderTrack.mjs +1 -0
  86. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  87. package/lib/components/VSlider/slider.mjs +3 -1
  88. package/lib/components/VSlider/slider.mjs.map +1 -1
  89. package/lib/components/VSnackbar/VSnackbar.css +2 -9
  90. package/lib/components/VSnackbar/VSnackbar.mjs +8 -9
  91. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  92. package/lib/components/VSnackbar/VSnackbar.sass +3 -10
  93. package/lib/components/VSwitch/VSwitch.mjs.map +1 -1
  94. package/lib/components/VTable/VTable.mjs.map +1 -1
  95. package/lib/components/VTabs/VTab.mjs.map +1 -1
  96. package/lib/components/VTabs/VTabs.mjs +23 -15
  97. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  98. package/lib/components/VTextField/VTextField.mjs +1 -0
  99. package/lib/components/VTextField/VTextField.mjs.map +1 -1
  100. package/lib/components/VTextarea/VTextarea.mjs +1 -0
  101. package/lib/components/VTextarea/VTextarea.mjs.map +1 -1
  102. package/lib/components/VTimeline/VTimelineDivider.mjs +18 -10
  103. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  104. package/lib/components/VTimeline/VTimelineItem.mjs.map +1 -1
  105. package/lib/components/VToolbar/VToolbar.mjs +9 -5
  106. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  107. package/lib/components/VToolbar/VToolbarTitle.mjs.map +1 -1
  108. package/lib/components/index.d.ts +7 -2
  109. package/lib/components/transitions/createTransition.mjs +1 -1
  110. package/lib/components/transitions/createTransition.mjs.map +1 -1
  111. package/lib/composables/defaults.mjs +2 -0
  112. package/lib/composables/defaults.mjs.map +1 -1
  113. package/lib/composables/display.mjs +13 -10
  114. package/lib/composables/display.mjs.map +1 -1
  115. package/lib/composables/loader.mjs.map +1 -1
  116. package/lib/composables/theme.mjs +7 -10
  117. package/lib/composables/theme.mjs.map +1 -1
  118. package/lib/composables/variant.mjs.map +1 -1
  119. package/lib/entry-bundler.mjs +1 -1
  120. package/lib/framework.mjs +1 -1
  121. package/lib/index.d.ts +10 -10
  122. package/lib/labs/VDataTable/VDataTable.css +3 -0
  123. package/lib/labs/VDataTable/VDataTable.mjs +45 -19
  124. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  125. package/lib/labs/VDataTable/VDataTable.sass +3 -0
  126. package/lib/labs/VDataTable/VDataTableFooter.mjs +3 -2
  127. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  128. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -1
  129. package/lib/labs/VDataTable/VDataTableRow.mjs +6 -2
  130. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  131. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  132. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  133. package/lib/labs/VDataTable/VDataTableServer.mjs +39 -17
  134. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  135. package/lib/labs/VDataTable/VDataTableVirtual.mjs +27 -14
  136. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  137. package/lib/labs/VDataTable/composables/expand.mjs +1 -1
  138. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -1
  139. package/lib/labs/VDataTable/composables/group.mjs +12 -1
  140. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  141. package/lib/labs/VDataTable/composables/options.mjs +4 -10
  142. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  143. package/lib/labs/VDataTable/composables/paginate.mjs +25 -4
  144. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  145. package/lib/labs/VDataTable/composables/select.mjs +1 -1
  146. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  147. package/lib/labs/VDataTable/composables/sort.mjs +19 -3
  148. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  149. package/lib/labs/VDataTable/index.d.ts +7 -5
  150. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +1 -1
  151. package/lib/labs/components.d.ts +7 -5
  152. package/lib/locale/adapters/vue-i18n.d.ts +1 -1
  153. package/lib/locale/adapters/vue-i18n.mjs +1 -1
  154. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  155. package/lib/locale/index.mjs +1 -1
  156. package/lib/locale/index.mjs.map +1 -1
  157. package/lib/styles/elements/_global.sass +0 -4
  158. package/lib/styles/generic/_index.scss +0 -1
  159. package/lib/styles/generic/_transitions.scss +111 -9
  160. package/lib/styles/main.css +312 -167
  161. package/lib/styles/tools/_sheet.sass +3 -6
  162. package/lib/styles/utilities/_display.sass +6 -5
  163. package/lib/styles/utilities/_elevation.scss +13 -0
  164. package/lib/styles/utilities/_index.sass +3 -2
  165. package/lib/styles/utilities/_screenreaders.sass +13 -11
  166. package/lib/util/defineComponent.mjs +3 -2
  167. package/lib/util/defineComponent.mjs.map +1 -1
  168. package/package.json +14 -7
  169. package/lib/styles/generic/_elevation.scss +0 -10
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.7
2
+ * Vuetify v3.1.9
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -949,6 +949,8 @@ function provideDefaults(defaults, options) {
949
949
  const injectedDefaults = useDefaults();
950
950
  const providedDefaults = ref(defaults);
951
951
  const newDefaults = computed(() => {
952
+ const disabled = unref(options?.disabled);
953
+ if (disabled) return {};
952
954
  const scoped = unref(options?.scoped);
953
955
  const reset = unref(options?.reset);
954
956
  const root = unref(options?.root);
@@ -1022,10 +1024,11 @@ const defineComponent = function defineComponent(options) {
1022
1024
  const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1023
1025
  const _props = new Proxy(props, {
1024
1026
  get(target, prop) {
1027
+ const propValue = Reflect.get(target, prop);
1025
1028
  if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1026
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? target[prop];
1029
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1027
1030
  }
1028
- return Reflect.get(target, prop);
1031
+ return propValue;
1029
1032
  }
1030
1033
  });
1031
1034
  const _subcomponentDefaults = shallowRef();
@@ -1671,17 +1674,9 @@ function createTheme(options) {
1671
1674
  if (current.value.dark) {
1672
1675
  createCssClass(lines, ':root', ['color-scheme: dark']);
1673
1676
  }
1677
+ createCssClass(lines, ':root', genCssVariables(current.value));
1674
1678
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
1675
- const {
1676
- variables,
1677
- dark
1678
- } = theme;
1679
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${dark ? 'dark' : 'normal'}`, ...genCssVariables(theme), ...Object.keys(variables).map(key => {
1680
- const value = variables[key];
1681
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1682
- const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1683
- return `--v-${key}: ${rgb ?? value}`;
1684
- })]);
1679
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)]);
1685
1680
  }
1686
1681
  const bgLines = [];
1687
1682
  const fgLines = [];
@@ -1794,6 +1789,11 @@ function genCssVariables(theme) {
1794
1789
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
1795
1790
  }
1796
1791
  }
1792
+ for (const [key, value] of Object.entries(theme.variables)) {
1793
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1794
+ const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1795
+ variables.push(`--v-${key}: ${rgb ?? value}`);
1796
+ }
1797
1797
  return variables;
1798
1798
  }
1799
1799
 
@@ -2023,7 +2023,7 @@ const defaultRtl = {
2023
2023
  en: false,
2024
2024
  es: false,
2025
2025
  et: false,
2026
- fa: false,
2026
+ fa: true,
2027
2027
  fi: false,
2028
2028
  fr: false,
2029
2029
  hr: false,
@@ -2156,6 +2156,7 @@ const VDefaultsProvider = genericComponent(false)({
2156
2156
  name: 'VDefaultsProvider',
2157
2157
  props: {
2158
2158
  defaults: Object,
2159
+ disabled: Boolean,
2159
2160
  reset: [Number, String],
2160
2161
  root: Boolean,
2161
2162
  scoped: Boolean
@@ -2166,6 +2167,7 @@ const VDefaultsProvider = genericComponent(false)({
2166
2167
  } = _ref;
2167
2168
  const {
2168
2169
  defaults,
2170
+ disabled,
2169
2171
  reset,
2170
2172
  root,
2171
2173
  scoped
@@ -2173,7 +2175,8 @@ const VDefaultsProvider = genericComponent(false)({
2173
2175
  provideDefaults(defaults, {
2174
2176
  reset,
2175
2177
  root,
2176
- scoped
2178
+ scoped,
2179
+ disabled
2177
2180
  });
2178
2181
  return () => slots.default?.();
2179
2182
  }
@@ -2184,7 +2187,7 @@ const VDefaultsProvider = genericComponent(false)({
2184
2187
  // Types
2185
2188
 
2186
2189
  function createCssTransition(name) {
2187
- let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top center 0';
2190
+ let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'center center';
2188
2191
  let mode = arguments.length > 2 ? arguments[2] : undefined;
2189
2192
  return genericComponent()({
2190
2193
  name,
@@ -2795,7 +2798,7 @@ const VImg = genericComponent()({
2795
2798
  "class": ['v-img__img', containClasses.value],
2796
2799
  "src": normalisedSrc.value.src,
2797
2800
  "srcset": normalisedSrc.value.srcset,
2798
- "alt": "",
2801
+ "alt": props.alt,
2799
2802
  "sizes": props.sizes,
2800
2803
  "ref": image,
2801
2804
  "onLoad": onLoad,
@@ -2817,7 +2820,7 @@ const VImg = genericComponent()({
2817
2820
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && createVNode("img", {
2818
2821
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
2819
2822
  "src": normalisedSrc.value.lazySrc,
2820
- "alt": ""
2823
+ "alt": props.alt
2821
2824
  }, null)]
2822
2825
  });
2823
2826
  const __placeholder = () => {
@@ -3159,16 +3162,20 @@ const VToolbar = genericComponent()({
3159
3162
  default: () => [hasImage && createVNode("div", {
3160
3163
  "key": "image",
3161
3164
  "class": "v-toolbar__image"
3162
- }, [createVNode(VDefaultsProvider, {
3165
+ }, [!slots.image ? createVNode(VImg, {
3166
+ "key": "image-img",
3167
+ "cover": true,
3168
+ "src": props.image
3169
+ }, null) : createVNode(VDefaultsProvider, {
3170
+ "key": "image-defaults",
3171
+ "disabled": !props.image,
3163
3172
  "defaults": {
3164
3173
  VImg: {
3165
3174
  cover: true,
3166
3175
  src: props.image
3167
3176
  }
3168
3177
  }
3169
- }, {
3170
- default: () => [slots.image ? slots.image?.() : createVNode(VImg, null, null)]
3171
- })]), createVNode(VDefaultsProvider, {
3178
+ }, slots.image)]), createVNode(VDefaultsProvider, {
3172
3179
  "defaults": {
3173
3180
  VTabs: {
3174
3181
  height: convertToUnit(contentHeight.value)
@@ -4889,43 +4896,49 @@ const VBtn = genericComponent()({
4889
4896
  },
4890
4897
  "value": valueAttr.value
4891
4898
  }, {
4892
- default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4899
+ default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode("span", {
4893
4900
  "key": "prepend",
4901
+ "class": "v-btn__prepend"
4902
+ }, [!slots.prepend ? createVNode(VIcon, {
4903
+ "key": "prepend-icon",
4904
+ "icon": props.prependIcon
4905
+ }, null) : createVNode(VDefaultsProvider, {
4906
+ "key": "prepend-defaults",
4907
+ "disabled": !props.prependIcon,
4894
4908
  "defaults": {
4895
4909
  VIcon: {
4896
4910
  icon: props.prependIcon
4897
4911
  }
4898
4912
  }
4899
- }, {
4900
- default: () => [createVNode("span", {
4901
- "class": "v-btn__prepend"
4902
- }, [slots.prepend?.() ?? createVNode(VIcon, null, null)])]
4903
- }), createVNode("span", {
4913
+ }, slots.prepend)]), createVNode("span", {
4904
4914
  "class": "v-btn__content",
4905
4915
  "data-no-activator": ""
4906
- }, [createVNode(VDefaultsProvider, {
4907
- "key": "content",
4916
+ }, [!slots.default && hasIcon ? createVNode(VIcon, {
4917
+ "key": "content-icon",
4918
+ "icon": props.icon
4919
+ }, null) : createVNode(VDefaultsProvider, {
4920
+ "key": "content-defaults",
4921
+ "disabled": !hasIcon,
4908
4922
  "defaults": {
4909
4923
  VIcon: {
4910
- icon: hasIcon ? props.icon : undefined
4924
+ icon: props.icon
4911
4925
  }
4912
4926
  }
4913
- }, {
4914
- default: () => [slots.default?.() ?? (hasIcon && createVNode(VIcon, {
4915
- "key": "icon"
4916
- }, null))]
4917
- })]), !props.icon && hasAppend && createVNode(VDefaultsProvider, {
4927
+ }, slots.default)]), !props.icon && hasAppend && createVNode("span", {
4918
4928
  "key": "append",
4929
+ "class": "v-btn__append"
4930
+ }, [!slots.append ? createVNode(VIcon, {
4931
+ "key": "append-icon",
4932
+ "icon": props.appendIcon
4933
+ }, null) : createVNode(VDefaultsProvider, {
4934
+ "key": "append-defaults",
4935
+ "disabled": !props.appendIcon,
4919
4936
  "defaults": {
4920
4937
  VIcon: {
4921
4938
  icon: props.appendIcon
4922
4939
  }
4923
4940
  }
4924
- }, {
4925
- default: () => [createVNode("span", {
4926
- "class": "v-btn__append"
4927
- }, [slots.append?.() ?? createVNode(VIcon, null, null)])]
4928
- }), !!props.loading && createVNode("span", {
4941
+ }, slots.append)]), !!props.loading && createVNode("span", {
4929
4942
  "key": "loader",
4930
4943
  "class": "v-btn__loader"
4931
4944
  }, [slots.loader?.() ?? createVNode(VProgressCircular, {
@@ -5054,10 +5067,12 @@ const VAlert = genericComponent()({
5054
5067
  })
5055
5068
  },
5056
5069
  emits: {
5070
+ 'click:close': e => true,
5057
5071
  'update:modelValue': value => true
5058
5072
  },
5059
5073
  setup(props, _ref) {
5060
5074
  let {
5075
+ emit,
5061
5076
  slots
5062
5077
  } = _ref;
5063
5078
  const isActive = useProxiedModel(props, 'modelValue');
@@ -5107,6 +5122,7 @@ const VAlert = genericComponent()({
5107
5122
  'aria-label': t(props.closeLabel),
5108
5123
  onClick(e) {
5109
5124
  isActive.value = false;
5125
+ emit('click:close', e);
5110
5126
  }
5111
5127
  }));
5112
5128
  return () => {
@@ -5128,8 +5144,17 @@ const VAlert = genericComponent()({
5128
5144
  "key": "border",
5129
5145
  "class": ['v-alert__border', textColorClasses.value],
5130
5146
  "style": textColorStyles.value
5131
- }, null), hasPrepend && createVNode(VDefaultsProvider, {
5147
+ }, null), hasPrepend && createVNode("div", {
5132
5148
  "key": "prepend",
5149
+ "class": "v-alert__prepend"
5150
+ }, [!slots.prepend ? createVNode(VIcon, {
5151
+ "key": "prepend-icon",
5152
+ "density": props.density,
5153
+ "icon": icon.value,
5154
+ "size": props.prominent ? 44 : 28
5155
+ }, null) : createVNode(VDefaultsProvider, {
5156
+ "key": "prepend-defaults",
5157
+ "disabled": !icon.value,
5133
5158
  "defaults": {
5134
5159
  VIcon: {
5135
5160
  density: props.density,
@@ -5137,21 +5162,25 @@ const VAlert = genericComponent()({
5137
5162
  size: props.prominent ? 44 : 28
5138
5163
  }
5139
5164
  }
5140
- }, {
5141
- default: () => [createVNode("div", {
5142
- "class": "v-alert__prepend"
5143
- }, [slots.prepend ? slots.prepend() : icon.value && createVNode(VIcon, null, null)])]
5144
- }), createVNode("div", {
5165
+ }, slots.prepend)]), createVNode("div", {
5145
5166
  "class": "v-alert__content"
5146
5167
  }, [hasTitle && createVNode(VAlertTitle, {
5147
5168
  "key": "title"
5148
5169
  }, {
5149
- default: () => [slots.title ? slots.title() : props.title]
5150
- }), hasText && (slots.text ? slots.text() : props.text), slots.default?.()]), slots.append && createVNode("div", {
5170
+ default: () => [slots.title?.() ?? props.title]
5171
+ }), hasText && (slots.text?.() ?? props.text), slots.default?.()]), slots.append && createVNode("div", {
5151
5172
  "key": "append",
5152
5173
  "class": "v-alert__append"
5153
- }, [slots.append()]), hasClose && createVNode(VDefaultsProvider, {
5174
+ }, [slots.append()]), hasClose && createVNode("div", {
5154
5175
  "key": "close",
5176
+ "class": "v-alert__close"
5177
+ }, [!slots.close ? createVNode(VBtn, mergeProps({
5178
+ "key": "close-btn",
5179
+ "icon": props.closeIcon,
5180
+ "size": "x-small",
5181
+ "variant": "text"
5182
+ }, closeProps.value), null) : createVNode(VDefaultsProvider, {
5183
+ "key": "close-defaults",
5155
5184
  "defaults": {
5156
5185
  VBtn: {
5157
5186
  icon: props.closeIcon,
@@ -5160,12 +5189,10 @@ const VAlert = genericComponent()({
5160
5189
  }
5161
5190
  }
5162
5191
  }, {
5163
- default: () => [createVNode("div", {
5164
- "class": "v-alert__close"
5165
- }, [slots.close?.({
5192
+ default: () => [slots.close?.({
5166
5193
  props: closeProps.value
5167
- }) ?? createVNode(VBtn, closeProps.value, null)])]
5168
- })]
5194
+ })]
5195
+ })])]
5169
5196
  });
5170
5197
  };
5171
5198
  }
@@ -6175,6 +6202,7 @@ const VTextField = genericComponent()({
6175
6202
  "id": id.value,
6176
6203
  "active": isActive.value || isDirty.value,
6177
6204
  "dirty": isDirty.value || props.dirty,
6205
+ "disabled": isDisabled.value,
6178
6206
  "focused": isFocused.value,
6179
6207
  "error": isValid.value === false
6180
6208
  }), {
@@ -6829,10 +6857,13 @@ const VChip = genericComponent()({
6829
6857
  const link = useLink(props, attrs);
6830
6858
  const isLink = computed(() => props.link !== false && link.isLink.value);
6831
6859
  const isClickable = computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6832
- function onCloseClick(e) {
6833
- isActive.value = false;
6834
- emit('click:close', e);
6835
- }
6860
+ const closeProps = computed(() => ({
6861
+ 'aria-label': t(props.closeLabel),
6862
+ onClick(e) {
6863
+ isActive.value = false;
6864
+ emit('click:close', e);
6865
+ }
6866
+ }));
6836
6867
  function onClick(e) {
6837
6868
  emit('click', e);
6838
6869
  if (!isClickable.value) return;
@@ -6847,10 +6878,12 @@ const VChip = genericComponent()({
6847
6878
  }
6848
6879
  return () => {
6849
6880
  const Tag = link.isLink.value ? 'a' : props.tag;
6850
- const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar);
6881
+ const hasAppendMedia = !!(props.appendIcon || props.appendAvatar);
6882
+ const hasAppend = !!(hasAppendMedia || slots.append);
6851
6883
  const hasClose = !!(slots.close || props.closable);
6852
6884
  const hasFilter = !!(slots.filter || props.filter) && group;
6853
- const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar);
6885
+ const hasPrependMedia = !!(props.prependIcon || props.prependAvatar);
6886
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
6854
6887
  const hasColor = !group || group.isSelected.value;
6855
6888
  return isActive.value && withDirectives(createVNode(Tag, {
6856
6889
  "class": ['v-chip', {
@@ -6868,77 +6901,94 @@ const VChip = genericComponent()({
6868
6901
  "onClick": onClick,
6869
6902
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
6870
6903
  }, {
6871
- default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && createVNode(VDefaultsProvider, {
6872
- "key": "filter",
6873
- "defaults": {
6874
- VIcon: {
6875
- icon: props.filterIcon
6876
- }
6877
- }
6904
+ default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && createVNode(VExpandXTransition, {
6905
+ "key": "filter"
6878
6906
  }, {
6879
- default: () => [createVNode(VExpandXTransition, null, {
6880
- default: () => [withDirectives(createVNode("div", {
6881
- "class": "v-chip__filter"
6882
- }, [slots.filter ? slots.filter() : createVNode(VIcon, null, null)]), [[vShow, group.isSelected.value]])]
6883
- })]
6884
- }), hasPrepend && createVNode(VDefaultsProvider, {
6907
+ default: () => [withDirectives(createVNode("div", {
6908
+ "class": "v-chip__filter"
6909
+ }, [!slots.filter ? createVNode(VIcon, {
6910
+ "key": "filter-icon",
6911
+ "icon": props.filterIcon
6912
+ }, null) : withDirectives(createVNode(VDefaultsProvider, {
6913
+ "key": "filter-defaults",
6914
+ "disabled": !props.filterIcon,
6915
+ "defaults": {
6916
+ VIcon: {
6917
+ icon: props.filterIcon
6918
+ }
6919
+ }
6920
+ }, null), [[resolveDirective("slot"), slots.filter, "default"]])]), [[vShow, group.isSelected.value]])]
6921
+ }), hasPrepend && createVNode("div", {
6885
6922
  "key": "prepend",
6923
+ "class": "v-chip__prepend"
6924
+ }, [!slots.prepend ? createVNode(Fragment, null, [props.prependIcon && createVNode(VIcon, {
6925
+ "key": "prepend-icon",
6926
+ "icon": props.prependIcon,
6927
+ "start": true
6928
+ }, null), props.prependAvatar && createVNode(VAvatar, {
6929
+ "key": "prepend-avatar",
6930
+ "image": props.prependAvatar,
6931
+ "start": true
6932
+ }, null)]) : createVNode(VDefaultsProvider, {
6933
+ "key": "prepend-defaults",
6934
+ "disabled": !hasPrependMedia,
6886
6935
  "defaults": {
6887
6936
  VAvatar: {
6888
- image: props.prependAvatar
6937
+ image: props.prependAvatar,
6938
+ start: true
6889
6939
  },
6890
6940
  VIcon: {
6891
- icon: props.prependIcon
6941
+ icon: props.prependIcon,
6942
+ start: true
6892
6943
  }
6893
6944
  }
6894
- }, {
6895
- default: () => [slots.prepend ? createVNode("div", {
6896
- "class": "v-chip__prepend"
6897
- }, [slots.prepend()]) : props.prependAvatar ? createVNode(VAvatar, {
6898
- "start": true
6899
- }, null) : props.prependIcon ? createVNode(VIcon, {
6900
- "start": true
6901
- }, null) : undefined]
6902
- }), slots.default?.({
6945
+ }, slots.prepend)]), slots.default?.({
6903
6946
  isSelected: group?.isSelected.value,
6904
6947
  selectedClass: group?.selectedClass.value,
6905
6948
  select: group?.select,
6906
6949
  toggle: group?.toggle,
6907
6950
  value: group?.value.value,
6908
6951
  disabled: props.disabled
6909
- }) ?? props.text, hasAppend && createVNode(VDefaultsProvider, {
6952
+ }) ?? props.text, hasAppend && createVNode("div", {
6910
6953
  "key": "append",
6954
+ "class": "v-chip__append"
6955
+ }, [!slots.append ? createVNode(Fragment, null, [props.appendIcon && createVNode(VIcon, {
6956
+ "key": "append-icon",
6957
+ "end": true,
6958
+ "icon": props.appendIcon
6959
+ }, null), props.appendAvatar && createVNode(VAvatar, {
6960
+ "key": "append-avatar",
6961
+ "end": true,
6962
+ "image": props.appendAvatar
6963
+ }, null)]) : createVNode(VDefaultsProvider, {
6964
+ "key": "append-defaults",
6965
+ "disabled": !hasAppendMedia,
6911
6966
  "defaults": {
6912
6967
  VAvatar: {
6968
+ end: true,
6913
6969
  image: props.appendAvatar
6914
6970
  },
6915
6971
  VIcon: {
6972
+ end: true,
6916
6973
  icon: props.appendIcon
6917
6974
  }
6918
6975
  }
6919
- }, {
6920
- default: () => [slots.append ? createVNode("div", {
6921
- "class": "v-chip__append"
6922
- }, [slots.append()]) : props.appendAvatar ? createVNode(VAvatar, {
6923
- "end": true
6924
- }, null) : props.appendIcon ? createVNode(VIcon, {
6925
- "end": true
6926
- }, null) : undefined]
6927
- }), hasClose && createVNode(VDefaultsProvider, {
6976
+ }, slots.append)]), hasClose && createVNode("div", mergeProps({
6928
6977
  "key": "close",
6978
+ "class": "v-chip__close"
6979
+ }, closeProps.value), [!slots.close ? createVNode(VIcon, {
6980
+ "key": "close-icon",
6981
+ "icon": props.closeIcon,
6982
+ "size": "x-small"
6983
+ }, null) : createVNode(VDefaultsProvider, {
6984
+ "key": "close-defaults",
6929
6985
  "defaults": {
6930
6986
  VIcon: {
6931
6987
  icon: props.closeIcon,
6932
6988
  size: 'x-small'
6933
6989
  }
6934
6990
  }
6935
- }, {
6936
- default: () => [createVNode("div", {
6937
- "class": "v-chip__close",
6938
- "aria-label": t(props.closeLabel),
6939
- "onClick": onCloseClick
6940
- }, [slots.close ? slots.close() : createVNode(VIcon, null, null)])]
6941
- })]
6991
+ }, slots.close)])]
6942
6992
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple, null]]);
6943
6993
  };
6944
6994
  }
@@ -7688,8 +7738,10 @@ const VListItem = genericComponent()({
7688
7738
  const hasColor = !list || isSelected.value || isActive.value;
7689
7739
  const hasTitle = slots.title || props.title;
7690
7740
  const hasSubtitle = slots.subtitle || props.subtitle;
7691
- const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
7692
- const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon);
7741
+ const hasAppendMedia = !!(props.prependAvatar || props.prependIcon);
7742
+ const hasAppend = !!(hasAppendMedia || slots.append);
7743
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
7744
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
7693
7745
  list?.updateHasPrepend(hasPrepend);
7694
7746
  return withDirectives(createVNode(Tag, {
7695
7747
  "class": ['v-list-item', {
@@ -7709,7 +7761,7 @@ const VListItem = genericComponent()({
7709
7761
  default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode("div", {
7710
7762
  "key": "prepend",
7711
7763
  "class": "v-list-item__prepend"
7712
- }, [props.prependAvatar && createVNode(VAvatar, {
7764
+ }, [!slots.prepend ? createVNode(Fragment, null, [props.prependAvatar && createVNode(VAvatar, {
7713
7765
  "key": "prepend-avatar",
7714
7766
  "density": props.density,
7715
7767
  "image": props.prependAvatar
@@ -7717,8 +7769,9 @@ const VListItem = genericComponent()({
7717
7769
  "key": "prepend-icon",
7718
7770
  "density": props.density,
7719
7771
  "icon": props.prependIcon
7720
- }, null), slots.prepend && createVNode(VDefaultsProvider, {
7721
- "key": "prepend",
7772
+ }, null)]) : createVNode(VDefaultsProvider, {
7773
+ "key": "prepend-defaults",
7774
+ "disabled": !hasPrependMedia,
7722
7775
  "defaults": {
7723
7776
  VAvatar: {
7724
7777
  density: props.density,
@@ -7733,7 +7786,7 @@ const VListItem = genericComponent()({
7733
7786
  }
7734
7787
  }
7735
7788
  }, {
7736
- default: () => [slots.prepend(slotProps.value)]
7789
+ default: () => [slots.prepend?.(slotProps.value)]
7737
7790
  })]), createVNode("div", {
7738
7791
  "class": "v-list-item__content",
7739
7792
  "data-no-activator": ""
@@ -7752,8 +7805,17 @@ const VListItem = genericComponent()({
7752
7805
  }), slots.default?.(slotProps.value)]), hasAppend && createVNode("div", {
7753
7806
  "key": "append",
7754
7807
  "class": "v-list-item__append"
7755
- }, [slots.append && createVNode(VDefaultsProvider, {
7756
- "key": "append",
7808
+ }, [!slots.append ? createVNode(Fragment, null, [props.appendIcon && createVNode(VIcon, {
7809
+ "key": "append-icon",
7810
+ "density": props.density,
7811
+ "icon": props.appendIcon
7812
+ }, null), props.appendAvatar && createVNode(VAvatar, {
7813
+ "key": "append-avatar",
7814
+ "density": props.density,
7815
+ "image": props.appendAvatar
7816
+ }, null)]) : createVNode(VDefaultsProvider, {
7817
+ "key": "append-defaults",
7818
+ "disabled": !hasAppendMedia,
7757
7819
  "defaults": {
7758
7820
  VAvatar: {
7759
7821
  density: props.density,
@@ -7768,16 +7830,8 @@ const VListItem = genericComponent()({
7768
7830
  }
7769
7831
  }
7770
7832
  }, {
7771
- default: () => [slots.append(slotProps.value)]
7772
- }), props.appendIcon && createVNode(VIcon, {
7773
- "key": "append-icon",
7774
- "density": props.density,
7775
- "icon": props.appendIcon
7776
- }, null), props.appendAvatar && createVNode(VAvatar, {
7777
- "key": "append-avatar",
7778
- "density": props.density,
7779
- "image": props.appendAvatar
7780
- }, null)])]
7833
+ default: () => [slots.append?.(slotProps.value)]
7834
+ })])]
7781
7835
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7782
7836
  });
7783
7837
  return {};
@@ -9123,8 +9177,8 @@ function getClientWidth(isHydrate) {
9123
9177
  function getClientHeight(isHydrate) {
9124
9178
  return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
9125
9179
  }
9126
- function getPlatform() {
9127
- const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr';
9180
+ function getPlatform(isHydrate) {
9181
+ const userAgent = IN_BROWSER && !isHydrate ? window.navigator.userAgent : 'ssr';
9128
9182
  function match(regexp) {
9129
9183
  return Boolean(userAgent.match(regexp));
9130
9184
  }
@@ -9139,7 +9193,6 @@ function getPlatform() {
9139
9193
  const win = match(/win/i);
9140
9194
  const mac = match(/mac/i);
9141
9195
  const linux = match(/linux/i);
9142
- const ssr = match(/ssr/i);
9143
9196
  return {
9144
9197
  android,
9145
9198
  ios,
@@ -9153,7 +9206,7 @@ function getPlatform() {
9153
9206
  mac,
9154
9207
  linux,
9155
9208
  touch: SUPPORTS_TOUCH,
9156
- ssr
9209
+ ssr: userAgent === 'ssr'
9157
9210
  };
9158
9211
  }
9159
9212
  function createDisplay(options, ssr) {
@@ -9162,13 +9215,17 @@ function createDisplay(options, ssr) {
9162
9215
  mobileBreakpoint
9163
9216
  } = parseDisplayOptions(options);
9164
9217
  const height = ref(getClientHeight(ssr));
9165
- const platform = getPlatform();
9218
+ const platform = shallowRef(getPlatform(ssr));
9166
9219
  const state = reactive({});
9167
9220
  const width = ref(getClientWidth(ssr));
9168
- function update() {
9221
+ function updateSize() {
9169
9222
  height.value = getClientHeight();
9170
9223
  width.value = getClientWidth();
9171
9224
  }
9225
+ function update() {
9226
+ updateSize();
9227
+ platform.value = getPlatform();
9228
+ }
9172
9229
 
9173
9230
  // eslint-disable-next-line max-statements
9174
9231
  watchEffect(() => {
@@ -9180,7 +9237,7 @@ function createDisplay(options, ssr) {
9180
9237
  const xxl = width.value >= thresholds.xxl;
9181
9238
  const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';
9182
9239
  const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];
9183
- const mobile = !platform.ssr ? width.value < breakpointValue : platform.android || platform.ios || platform.opera;
9240
+ const mobile = width.value < breakpointValue;
9184
9241
  state.xs = xs;
9185
9242
  state.sm = sm;
9186
9243
  state.md = md;
@@ -9200,11 +9257,11 @@ function createDisplay(options, ssr) {
9200
9257
  state.width = width.value;
9201
9258
  state.mobile = mobile;
9202
9259
  state.mobileBreakpoint = mobileBreakpoint;
9203
- state.platform = platform;
9260
+ state.platform = platform.value;
9204
9261
  state.thresholds = thresholds;
9205
9262
  });
9206
9263
  if (IN_BROWSER) {
9207
- window.addEventListener('resize', update, {
9264
+ window.addEventListener('resize', updateSize, {
9208
9265
  passive: true
9209
9266
  });
9210
9267
  }
@@ -9983,7 +10040,13 @@ const VSelect = genericComponent()({
9983
10040
  return createVNode("div", {
9984
10041
  "key": item.value,
9985
10042
  "class": "v-select__selection"
9986
- }, [hasChips ? createVNode(VDefaultsProvider, {
10043
+ }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
10044
+ "key": "chip",
10045
+ "closable": props.closableChips,
10046
+ "size": "small",
10047
+ "text": item.title
10048
+ }, slotProps), null) : createVNode(VDefaultsProvider, {
10049
+ "key": "chip-defaults",
9987
10050
  "defaults": {
9988
10051
  VChip: {
9989
10052
  closable: props.closableChips,
@@ -9992,15 +10055,15 @@ const VSelect = genericComponent()({
9992
10055
  }
9993
10056
  }
9994
10057
  }, {
9995
- default: () => [slots.chip ? slots.chip({
10058
+ default: () => [slots.chip?.({
9996
10059
  item,
9997
10060
  index,
9998
10061
  props: slotProps
9999
- }) : createVNode(VChip, slotProps, null)]
10000
- }) : slots.selection ? slots.selection({
10062
+ })]
10063
+ }) : slots.selection?.({
10001
10064
  item,
10002
10065
  index
10003
- }) : createVNode("span", {
10066
+ }) ?? createVNode("span", {
10004
10067
  "class": "v-select__selection-text"
10005
10068
  }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
10006
10069
  "class": "v-select__selection-comma"
@@ -10372,7 +10435,13 @@ const VAutocomplete = genericComponent()({
10372
10435
  return createVNode("div", {
10373
10436
  "key": item.value,
10374
10437
  "class": "v-autocomplete__selection"
10375
- }, [hasChips ? createVNode(VDefaultsProvider, {
10438
+ }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
10439
+ "key": "chip",
10440
+ "closable": props.closableChips,
10441
+ "size": "small",
10442
+ "text": item.title
10443
+ }, slotProps), null) : createVNode(VDefaultsProvider, {
10444
+ "key": "chip-defaults",
10376
10445
  "defaults": {
10377
10446
  VChip: {
10378
10447
  closable: props.closableChips,
@@ -10381,15 +10450,15 @@ const VAutocomplete = genericComponent()({
10381
10450
  }
10382
10451
  }
10383
10452
  }, {
10384
- default: () => [slots.chip ? slots.chip({
10453
+ default: () => [slots.chip?.({
10385
10454
  item,
10386
10455
  index,
10387
10456
  props: slotProps
10388
- }) : createVNode(VChip, slotProps, null)]
10389
- }) : slots.selection ? slots.selection({
10457
+ })]
10458
+ }) : slots.selection?.({
10390
10459
  item,
10391
10460
  index
10392
- }) : createVNode("span", {
10461
+ }) ?? createVNode("span", {
10393
10462
  "class": "v-autocomplete__selection-text"
10394
10463
  }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
10395
10464
  "class": "v-autocomplete__selection-comma"
@@ -10590,7 +10659,8 @@ const VBanner = genericComponent()({
10590
10659
  });
10591
10660
  useRender(() => {
10592
10661
  const hasText = !!(props.text || slots.text);
10593
- const hasPrepend = !!(slots.prepend || props.avatar || props.icon);
10662
+ const hasPrependMedia = !!(props.avatar || props.icon);
10663
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
10594
10664
  return createVNode(props.tag, {
10595
10665
  "class": ['v-banner', {
10596
10666
  'v-banner--stacked': props.stacked || mobile.value,
@@ -10600,8 +10670,18 @@ const VBanner = genericComponent()({
10600
10670
  "style": [dimensionStyles.value, locationStyles.value],
10601
10671
  "role": "banner"
10602
10672
  }, {
10603
- default: () => [hasPrepend && createVNode(VDefaultsProvider, {
10673
+ default: () => [hasPrepend && createVNode("div", {
10604
10674
  "key": "prepend",
10675
+ "class": "v-banner__prepend"
10676
+ }, [!slots.prepend ? createVNode(VAvatar, {
10677
+ "key": "prepend-avatar",
10678
+ "color": color.value,
10679
+ "density": density.value,
10680
+ "icon": props.icon,
10681
+ "image": props.avatar
10682
+ }, null) : createVNode(VDefaultsProvider, {
10683
+ "key": "prepend-defaults",
10684
+ "disabled": !hasPrependMedia,
10605
10685
  "defaults": {
10606
10686
  VAvatar: {
10607
10687
  color: color.value,
@@ -10610,19 +10690,15 @@ const VBanner = genericComponent()({
10610
10690
  image: props.avatar
10611
10691
  }
10612
10692
  }
10613
- }, {
10614
- default: () => [createVNode("div", {
10615
- "class": "v-banner__prepend"
10616
- }, [slots.prepend ? slots.prepend() : (props.avatar || props.icon) && createVNode(VAvatar, null, null)])]
10617
- }), createVNode("div", {
10693
+ }, slots.prepend)]), createVNode("div", {
10618
10694
  "class": "v-banner__content"
10619
10695
  }, [hasText && createVNode(VBannerText, {
10620
10696
  "key": "text"
10621
10697
  }, {
10622
- default: () => [slots.text ? slots.text() : props.text]
10623
- }), slots.default?.()]), slots.actions && createVNode(VBannerActions, null, {
10624
- default: () => [slots.actions()]
10625
- })]
10698
+ default: () => [slots.text?.() ?? props.text]
10699
+ }), slots.default?.()]), slots.actions && createVNode(VBannerActions, {
10700
+ "key": "actions"
10701
+ }, slots.actions)]
10626
10702
  });
10627
10703
  });
10628
10704
  }
@@ -10855,19 +10931,23 @@ const VBreadcrumbs = genericComponent()({
10855
10931
  "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
10856
10932
  "style": backgroundColorStyles.value
10857
10933
  }, {
10858
- default: () => [hasPrepend && createVNode(VDefaultsProvider, {
10934
+ default: () => [hasPrepend && createVNode("div", {
10859
10935
  "key": "prepend",
10936
+ "class": "v-breadcrumbs__prepend"
10937
+ }, [!slots.prepend ? createVNode(VIcon, {
10938
+ "key": "prepend-icon",
10939
+ "start": true,
10940
+ "icon": props.icon
10941
+ }, null) : createVNode(VDefaultsProvider, {
10942
+ "key": "prepend-defaults",
10943
+ "disabled": !props.icon,
10860
10944
  "defaults": {
10861
10945
  VIcon: {
10862
10946
  icon: props.icon,
10863
10947
  start: true
10864
10948
  }
10865
10949
  }
10866
- }, {
10867
- default: () => [createVNode("div", {
10868
- "class": "v-breadcrumbs__prepend"
10869
- }, [slots.prepend ? slots.prepend() : props.icon && createVNode(VIcon, null, null)])]
10870
- }), props.items.map((item, index, array) => createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
10950
+ }, slots.prepend)]), props.items.map((item, index, array) => createVNode(Fragment, null, [createVNode(VBreadcrumbsItem, mergeProps({
10871
10951
  "key": index,
10872
10952
  "disabled": index >= array.length - 1
10873
10953
  }, typeof item === 'string' ? {
@@ -10931,30 +11011,33 @@ const VCardItem = genericComponent()({
10931
11011
  slots
10932
11012
  } = _ref;
10933
11013
  useRender(() => {
10934
- const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend);
10935
- const hasAppend = !!(props.appendAvatar || props.appendIcon || slots.append);
11014
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
11015
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
11016
+ const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
11017
+ const hasAppend = !!(hasAppendMedia || slots.append);
10936
11018
  const hasTitle = !!(props.title || slots.title);
10937
11019
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
10938
11020
  return createVNode("div", {
10939
11021
  "class": "v-card-item"
10940
- }, [hasPrepend && createVNode(VDefaultsProvider, {
11022
+ }, [hasPrepend && createVNode("div", {
10941
11023
  "key": "prepend",
11024
+ "class": "v-card-item__prepend"
11025
+ }, [!slots.prepend ? hasPrependMedia && createVNode(VAvatar, {
11026
+ "key": "prepend-avatar",
11027
+ "density": props.density,
11028
+ "icon": props.prependIcon,
11029
+ "image": props.prependAvatar
11030
+ }, null) : createVNode(VDefaultsProvider, {
11031
+ "key": "prepend-defaults",
11032
+ "disabled": !hasPrependMedia,
10942
11033
  "defaults": {
10943
11034
  VAvatar: {
10944
11035
  density: props.density,
10945
11036
  icon: props.prependIcon,
10946
11037
  image: props.prependAvatar
10947
- },
10948
- VIcon: {
10949
- density: props.density,
10950
- icon: props.prependIcon
10951
11038
  }
10952
11039
  }
10953
- }, {
10954
- default: () => [createVNode("div", {
10955
- "class": "v-card-item__prepend"
10956
- }, [slots.prepend?.() ?? createVNode(VAvatar, null, null)])]
10957
- }), createVNode("div", {
11040
+ }, slots.prepend)]), createVNode("div", {
10958
11041
  "class": "v-card-item__content"
10959
11042
  }, [hasTitle && createVNode(VCardTitle, {
10960
11043
  "key": "title"
@@ -10964,24 +11047,25 @@ const VCardItem = genericComponent()({
10964
11047
  "key": "subtitle"
10965
11048
  }, {
10966
11049
  default: () => [slots.subtitle?.() ?? props.subtitle]
10967
- }), slots.default?.()]), hasAppend && createVNode(VDefaultsProvider, {
11050
+ }), slots.default?.()]), hasAppend && createVNode("div", {
10968
11051
  "key": "append",
11052
+ "class": "v-card-item__append"
11053
+ }, [!slots.append ? hasAppendMedia && createVNode(VAvatar, {
11054
+ "key": "append-avatar",
11055
+ "density": props.density,
11056
+ "icon": props.appendIcon,
11057
+ "image": props.appendAvatar
11058
+ }, null) : createVNode(VDefaultsProvider, {
11059
+ "key": "append-defaults",
11060
+ "disabled": !hasAppendMedia,
10969
11061
  "defaults": {
10970
11062
  VAvatar: {
10971
11063
  density: props.density,
10972
11064
  icon: props.appendIcon,
10973
11065
  image: props.appendAvatar
10974
- },
10975
- VIcon: {
10976
- density: props.density,
10977
- icon: props.appendIcon
10978
11066
  }
10979
11067
  }
10980
- }, {
10981
- default: () => [createVNode("div", {
10982
- "class": "v-card-item__append"
10983
- }, [slots.append?.() ?? createVNode(VAvatar, null, null)])]
10984
- })]);
11068
+ }, slots.append)])]);
10985
11069
  });
10986
11070
  return {};
10987
11071
  }
@@ -11093,19 +11177,23 @@ const VCard = genericComponent()({
11093
11177
  "onClick": isClickable.value && link.navigate,
11094
11178
  "tabindex": props.disabled ? -1 : undefined
11095
11179
  }, {
11096
- default: () => [hasImage && createVNode(VDefaultsProvider, {
11180
+ default: () => [hasImage && createVNode("div", {
11097
11181
  "key": "image",
11182
+ "class": "v-card__image"
11183
+ }, [!slots.image ? createVNode(VImg, {
11184
+ "key": "image-img",
11185
+ "cover": true,
11186
+ "src": props.image
11187
+ }, null) : createVNode(VDefaultsProvider, {
11188
+ "key": "image-defaults",
11189
+ "disabled": !props.image,
11098
11190
  "defaults": {
11099
11191
  VImg: {
11100
11192
  cover: true,
11101
11193
  src: props.image
11102
11194
  }
11103
11195
  }
11104
- }, {
11105
- default: () => [createVNode("div", {
11106
- "class": "v-card__image"
11107
- }, [slots.image?.() ?? createVNode(VImg, null, null)])]
11108
- }), createVNode(LoaderSlot, {
11196
+ }, slots.image)]), createVNode(LoaderSlot, {
11109
11197
  "name": "v-card",
11110
11198
  "active": !!props.loading,
11111
11199
  "color": typeof props.loading === 'boolean' ? undefined : props.loading
@@ -12309,7 +12397,9 @@ const useSlider = _ref => {
12309
12397
  const percentage = (val - min.value) / (max.value - min.value) * 100;
12310
12398
  return clamp(isNaN(percentage) ? 0 : percentage, 0, 100);
12311
12399
  };
12400
+ const showTicks = toRef(props, 'showTicks');
12312
12401
  const parsedTicks = computed(() => {
12402
+ if (!showTicks.value) return [];
12313
12403
  if (!props.ticks) {
12314
12404
  return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {
12315
12405
  const value = min.value + t * step.value;
@@ -12358,7 +12448,7 @@ const useSlider = _ref => {
12358
12448
  readonly: toRef(props, 'readonly'),
12359
12449
  rounded: toRef(props, 'rounded'),
12360
12450
  roundValue,
12361
- showTicks: toRef(props, 'showTicks'),
12451
+ showTicks,
12362
12452
  startOffset,
12363
12453
  step,
12364
12454
  thumbSize,
@@ -12580,6 +12670,7 @@ const VSliderTrack = genericComponent()({
12580
12670
  };
12581
12671
  });
12582
12672
  const computedTicks = computed(() => {
12673
+ if (!showTicks.value) return [];
12583
12674
  const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value;
12584
12675
  return ticks.map((tick, index) => {
12585
12676
  const directionProperty = vertical.value ? 'bottom' : 'margin-inline-start';
@@ -13699,7 +13790,13 @@ const VCombobox = genericComponent()({
13699
13790
  "key": item.value,
13700
13791
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
13701
13792
  "style": index === selectionIndex.value ? textColorStyles.value : {}
13702
- }, [hasChips ? createVNode(VDefaultsProvider, {
13793
+ }, [hasChips ? !slots.chip ? createVNode(VChip, mergeProps({
13794
+ "key": "chip",
13795
+ "closable": props.closableChips,
13796
+ "size": "small",
13797
+ "text": item.title
13798
+ }, slotProps), null) : createVNode(VDefaultsProvider, {
13799
+ "key": "chip-defaults",
13703
13800
  "defaults": {
13704
13801
  VChip: {
13705
13802
  closable: props.closableChips,
@@ -13708,15 +13805,15 @@ const VCombobox = genericComponent()({
13708
13805
  }
13709
13806
  }
13710
13807
  }, {
13711
- default: () => [slots.chip ? slots.chip({
13808
+ default: () => [slots.chip?.({
13712
13809
  item,
13713
13810
  index,
13714
13811
  props: slotProps
13715
- }) : createVNode(VChip, slotProps, null)]
13716
- }) : slots.selection ? slots.selection({
13812
+ })]
13813
+ }) : slots.selection?.({
13717
13814
  item,
13718
13815
  index
13719
- }) : createVNode("span", {
13816
+ }) ?? createVNode("span", {
13720
13817
  "class": "v-combobox__selection-text"
13721
13818
  }, [item.title, props.multiple && index < selections.value.length - 1 && createVNode("span", {
13722
13819
  "class": "v-combobox__selection-comma"
@@ -14217,6 +14314,7 @@ const VFileInput = genericComponent()({
14217
14314
  "id": id.value,
14218
14315
  "active": isDirty.value || isFocused.value,
14219
14316
  "dirty": isDirty.value,
14317
+ "disabled": isDisabled.value,
14220
14318
  "focused": isFocused.value,
14221
14319
  "error": isValid.value === false
14222
14320
  }), {
@@ -16853,19 +16951,18 @@ const VSnackbar = genericComponent()({
16853
16951
  "modelValue": isActive.value,
16854
16952
  "onUpdate:modelValue": $event => isActive.value = $event,
16855
16953
  "contentProps": mergeProps({
16856
- style: locationStyles.value
16954
+ class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16955
+ style: [locationStyles.value, colorStyles.value],
16956
+ onPointerenter,
16957
+ onPointerleave: startTimeout
16857
16958
  }, overlayProps.contentProps),
16858
16959
  "persistent": true,
16859
16960
  "noClickAnimation": true,
16860
16961
  "scrim": false,
16861
- "scrollStrategy": "none"
16962
+ "scrollStrategy": "none",
16963
+ "_disableGlobalStack": true
16862
16964
  }, scopeId), {
16863
- default: () => [createVNode("div", {
16864
- "class": ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16865
- "style": [colorStyles.value],
16866
- "onPointerenter": onPointerenter,
16867
- "onPointerleave": startTimeout
16868
- }, [genOverlays(false, 'v-snackbar'), slots.default && createVNode("div", {
16965
+ default: () => [genOverlays(false, 'v-snackbar'), slots.default && createVNode("div", {
16869
16966
  "class": "v-snackbar__content",
16870
16967
  "role": "status",
16871
16968
  "aria-live": "polite"
@@ -16880,7 +16977,7 @@ const VSnackbar = genericComponent()({
16880
16977
  default: () => [createVNode("div", {
16881
16978
  "class": "v-snackbar__actions"
16882
16979
  }, [slots.actions()])]
16883
- })])],
16980
+ })],
16884
16981
  activator: slots.activator
16885
16982
  });
16886
16983
  });
@@ -17229,16 +17326,6 @@ const VTabs = genericComponent()({
17229
17326
  backgroundColorClasses,
17230
17327
  backgroundColorStyles
17231
17328
  } = useBackgroundColor(toRef(props, 'bgColor'));
17232
- provideDefaults({
17233
- VTab: {
17234
- color: toRef(props, 'color'),
17235
- direction: toRef(props, 'direction'),
17236
- stacked: toRef(props, 'stacked'),
17237
- fixed: toRef(props, 'fixedTabs'),
17238
- sliderColor: toRef(props, 'sliderColor'),
17239
- hideSlider: toRef(props, 'hideSlider')
17240
- }
17241
- });
17242
17329
  useRender(() => createVNode(VSlideGroup, {
17243
17330
  "modelValue": model.value,
17244
17331
  "onUpdate:modelValue": $event => model.value = $event,
@@ -17255,9 +17342,27 @@ const VTabs = genericComponent()({
17255
17342
  "mandatory": props.mandatory,
17256
17343
  "direction": props.direction
17257
17344
  }, {
17258
- default: () => [slots.default ? slots.default() : parsedItems.value.map(item => createVNode(VTab, mergeProps(item, {
17259
- "key": item.title
17260
- }), null))]
17345
+ default: () => [!slots.default ? parsedItems.value.map(item => createVNode(VTab, mergeProps({
17346
+ "key": item.title,
17347
+ "color": props.color,
17348
+ "direction": props.direction,
17349
+ "fixed": props.fixedTabs,
17350
+ "hideSlider": props.hideSlider,
17351
+ "sliderColor": props.sliderColor,
17352
+ "stacked": props.stacked
17353
+ }, item), null)) : createVNode(VDefaultsProvider, {
17354
+ "key": "tabs-defaults",
17355
+ "defaults": {
17356
+ VTab: {
17357
+ color: props.color,
17358
+ direction: props.direction,
17359
+ fixed: props.fixedTabs,
17360
+ hideSlider: props.hideSlider,
17361
+ sliderColor: props.sliderColor,
17362
+ stacked: props.stacked
17363
+ }
17364
+ }
17365
+ }, slots.default)]
17261
17366
  }));
17262
17367
  return {};
17263
17368
  }
@@ -17482,6 +17587,7 @@ const VTextarea = genericComponent()({
17482
17587
  }, fieldProps, {
17483
17588
  "active": isActive.value || isDirty.value,
17484
17589
  "dirty": isDirty.value || props.dirty,
17590
+ "disabled": isDisabled.value,
17485
17591
  "focused": isFocused.value,
17486
17592
  "error": isValid.value === false
17487
17593
  }), {
@@ -17684,13 +17790,6 @@ const VTimelineDivider = genericComponent()({
17684
17790
  backgroundColorClasses: lineColorClasses,
17685
17791
  backgroundColorStyles: lineColorStyles
17686
17792
  } = useBackgroundColor(toRef(props, 'lineColor'));
17687
- provideDefaults({
17688
- VIcon: {
17689
- color: toRef(props, 'iconColor'),
17690
- icon: toRef(props, 'icon'),
17691
- size: toRef(props, 'size')
17692
- }
17693
- });
17694
17793
  useRender(() => createVNode("div", {
17695
17794
  "class": ['v-timeline-divider', {
17696
17795
  'v-timeline-divider--fill-dot': props.fillDot
@@ -17705,7 +17804,22 @@ const VTimelineDivider = genericComponent()({
17705
17804
  }, [createVNode("div", {
17706
17805
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17707
17806
  "style": backgroundColorStyles.value
17708
- }, [slots.default?.() ?? (props.icon ? createVNode(VIcon, null, null) : undefined)])]), createVNode("div", {
17807
+ }, [!slots.default ? createVNode(VIcon, {
17808
+ "key": "icon",
17809
+ "color": props.iconColor,
17810
+ "icon": props.icon,
17811
+ "size": props.size
17812
+ }, null) : createVNode(VDefaultsProvider, {
17813
+ "key": "icon-defaults",
17814
+ "disabled": !props.icon,
17815
+ "defaults": {
17816
+ VIcon: {
17817
+ color: props.iconColor,
17818
+ icon: props.icon,
17819
+ size: props.size
17820
+ }
17821
+ }
17822
+ }, slots.default)])]), createVNode("div", {
17709
17823
  "class": ['v-timeline-divider__after', lineColorClasses.value],
17710
17824
  "style": lineColorStyles.value
17711
17825
  }, null)]));
@@ -18076,7 +18190,7 @@ const makeDataTableSelectProps = propsFactory({
18076
18190
  }
18077
18191
  }, 'v-data-table-select');
18078
18192
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18079
- function createSelection(props, allItems) {
18193
+ function provideSelection(props, allItems) {
18080
18194
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18081
18195
  return new Set(v);
18082
18196
  }, v => {
@@ -18136,13 +18250,28 @@ const makeDataTableSortProps = propsFactory({
18136
18250
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18137
18251
  function createSort(props) {
18138
18252
  const sortBy = useProxiedModel(props, 'sortBy');
18253
+ const mustSort = toRef(props, 'mustSort');
18254
+ const multiSort = toRef(props, 'multiSort');
18255
+ return {
18256
+ sortBy,
18257
+ mustSort,
18258
+ multiSort
18259
+ };
18260
+ }
18261
+ function provideSort(options) {
18262
+ const {
18263
+ sortBy,
18264
+ mustSort,
18265
+ multiSort,
18266
+ page
18267
+ } = options;
18139
18268
  const toggleSort = key => {
18140
18269
  let newSortBy = sortBy.value.map(x => ({
18141
18270
  ...x
18142
18271
  })) ?? [];
18143
18272
  const item = newSortBy.find(x => x.key === key);
18144
18273
  if (!item) {
18145
- if (props.multiSort) newSortBy = [...newSortBy, {
18274
+ if (multiSort.value) newSortBy = [...newSortBy, {
18146
18275
  key,
18147
18276
  order: 'asc'
18148
18277
  }];else newSortBy = [{
@@ -18150,7 +18279,7 @@ function createSort(props) {
18150
18279
  order: 'asc'
18151
18280
  }];
18152
18281
  } else if (item.order === 'desc') {
18153
- if (props.mustSort) {
18282
+ if (mustSort.value) {
18154
18283
  item.order = 'asc';
18155
18284
  } else {
18156
18285
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -18159,6 +18288,7 @@ function createSort(props) {
18159
18288
  item.order = 'desc';
18160
18289
  }
18161
18290
  sortBy.value = newSortBy;
18291
+ if (page) page.value = 1;
18162
18292
  };
18163
18293
  const data = {
18164
18294
  sortBy,
@@ -18361,9 +18491,6 @@ const VDataTableHeaders = genericComponent()({
18361
18491
  });
18362
18492
 
18363
18493
  // Utilities
18364
-
18365
- // Types
18366
-
18367
18494
  const makeDataTableGroupProps = propsFactory({
18368
18495
  groupBy: {
18369
18496
  type: Array,
@@ -18371,7 +18498,17 @@ const makeDataTableGroupProps = propsFactory({
18371
18498
  }
18372
18499
  }, 'data-table-group');
18373
18500
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18374
- function createGroupBy(props, groupBy, sortBy) {
18501
+ function createGroupBy(props) {
18502
+ const groupBy = useProxiedModel(props, 'groupBy');
18503
+ return {
18504
+ groupBy
18505
+ };
18506
+ }
18507
+ function provideGroupBy(options) {
18508
+ const {
18509
+ groupBy,
18510
+ sortBy
18511
+ } = options;
18375
18512
  const opened = ref(new Set());
18376
18513
  const sortByWithGroups = computed(() => {
18377
18514
  return groupBy.value.map(val => ({
@@ -18581,7 +18718,7 @@ const makeDataTableExpandProps = propsFactory({
18581
18718
  }
18582
18719
  }, 'v-data-table-expand');
18583
18720
  const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18584
- function createExpanded(props) {
18721
+ function provideExpanded(props) {
18585
18722
  const expandOnClick = toRef(props, 'expandOnClick');
18586
18723
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18587
18724
  return new Set(v);
@@ -18624,7 +18761,8 @@ function useExpanded() {
18624
18761
  const VDataTableRow = defineComponent({
18625
18762
  name: 'VDataTableRow',
18626
18763
  props: {
18627
- item: Object
18764
+ item: Object,
18765
+ onClick: Function
18628
18766
  },
18629
18767
  setup(props, _ref) {
18630
18768
  let {
@@ -18642,7 +18780,10 @@ const VDataTableRow = defineComponent({
18642
18780
  columns
18643
18781
  } = useHeaders();
18644
18782
  useRender(() => createVNode("tr", {
18645
- "class": ['v-data-table__tr']
18783
+ "class": ['v-data-table__tr', {
18784
+ 'v-data-table__tr--clickable': !!props.onClick
18785
+ }],
18786
+ "onClick": props.onClick
18646
18787
  }, [!columns.value.length && createVNode(VDataTableColumn, {
18647
18788
  "key": "no-data"
18648
18789
  }, slots), props.item && columns.value.map((column, i) => createVNode(VDataTableColumn, {
@@ -18773,7 +18914,7 @@ const VDataTableRows = genericComponent()({
18773
18914
  "key": `item_${item.value}`,
18774
18915
  "onClick": event => {
18775
18916
  if (expandOnClick.value) {
18776
- toggleExpand(item.value);
18917
+ toggleExpand(item);
18777
18918
  }
18778
18919
  emit('click:row', event, {
18779
18920
  item
@@ -18801,10 +18942,20 @@ const makeDataTablePaginateProps = propsFactory({
18801
18942
  }
18802
18943
  }, 'v-data-table-paginate');
18803
18944
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18804
- function createPagination(props, items) {
18945
+ function createPagination(props) {
18805
18946
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18806
18947
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18807
- const itemsLength = computed(() => +(props.itemsLength ?? items.value.length));
18948
+ return {
18949
+ page,
18950
+ itemsPerPage
18951
+ };
18952
+ }
18953
+ function providePagination(options) {
18954
+ const {
18955
+ page,
18956
+ itemsPerPage,
18957
+ itemsLength
18958
+ } = options;
18808
18959
  const startIndex = computed(() => {
18809
18960
  if (itemsPerPage.value === -1) return 0;
18810
18961
  return itemsPerPage.value * (page.value - 1);
@@ -18817,13 +18968,18 @@ function createPagination(props, items) {
18817
18968
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18818
18969
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18819
18970
  });
18971
+ function setItemsPerPage(value) {
18972
+ itemsPerPage.value = value;
18973
+ page.value = 1;
18974
+ }
18820
18975
  const data = {
18821
18976
  page,
18822
18977
  itemsPerPage,
18978
+ itemsLength,
18823
18979
  startIndex,
18824
18980
  stopIndex,
18825
18981
  pageCount,
18826
- itemsLength
18982
+ setItemsPerPage
18827
18983
  };
18828
18984
  provide(VDataTablePaginationSymbol, data);
18829
18985
  return data;
@@ -18833,7 +18989,13 @@ function usePagination() {
18833
18989
  if (!data) throw new Error('Missing pagination!');
18834
18990
  return data;
18835
18991
  }
18836
- function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
18992
+ function usePaginatedItems(options) {
18993
+ const {
18994
+ items,
18995
+ startIndex,
18996
+ stopIndex,
18997
+ itemsPerPage
18998
+ } = options;
18837
18999
  const paginatedItems = computed(() => {
18838
19000
  if (itemsPerPage.value <= 0) return items.value;
18839
19001
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -18922,7 +19084,8 @@ const VDataTableFooter = genericComponent()({
18922
19084
  startIndex,
18923
19085
  stopIndex,
18924
19086
  itemsLength,
18925
- itemsPerPage
19087
+ itemsPerPage,
19088
+ setItemsPerPage
18926
19089
  } = usePagination();
18927
19090
  const itemsPerPageOptions = computed(() => props.itemsPerPageOptions.map(option => ({
18928
19091
  ...option,
@@ -18935,7 +19098,7 @@ const VDataTableFooter = genericComponent()({
18935
19098
  }, [createVNode("span", null, [t(props.itemsPerPageText)]), createVNode(VSelect, {
18936
19099
  "items": itemsPerPageOptions.value,
18937
19100
  "modelValue": itemsPerPage.value,
18938
- "onUpdate:modelValue": v => itemsPerPage.value = Number(v),
19101
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
18939
19102
  "density": "compact",
18940
19103
  "variant": "outlined",
18941
19104
  "hide-details": true
@@ -19013,7 +19176,8 @@ function useOptions(_ref) {
19013
19176
  page,
19014
19177
  itemsPerPage,
19015
19178
  sortBy,
19016
- groupBy
19179
+ groupBy,
19180
+ search
19017
19181
  } = _ref;
19018
19182
  const vm = getCurrentInstance('VDataTable');
19019
19183
  const options = computed(() => ({
@@ -19023,15 +19187,8 @@ function useOptions(_ref) {
19023
19187
  groupBy: groupBy.value
19024
19188
  }));
19025
19189
 
19026
- // Reset page when sorting changes
19027
- watch(sortBy, () => {
19028
- page.value = 1;
19029
- }, {
19030
- deep: true
19031
- });
19032
-
19033
- // Reset page when items-per-page changes
19034
- watch(itemsPerPage, () => {
19190
+ // Reset page when searching
19191
+ watch(() => search?.value, () => {
19035
19192
  page.value = 1;
19036
19193
  });
19037
19194
  let oldOptions = null;
@@ -19087,7 +19244,18 @@ const VDataTable = genericComponent()({
19087
19244
  emit,
19088
19245
  slots
19089
19246
  } = _ref;
19090
- const groupBy = useProxiedModel(props, 'groupBy');
19247
+ const {
19248
+ groupBy
19249
+ } = createGroupBy(props);
19250
+ const {
19251
+ sortBy,
19252
+ multiSort,
19253
+ mustSort
19254
+ } = createSort(props);
19255
+ const {
19256
+ page,
19257
+ itemsPerPage
19258
+ } = createPagination(props);
19091
19259
  const {
19092
19260
  columns
19093
19261
  } = createHeaders(props, {
@@ -19099,42 +19267,58 @@ const VDataTable = genericComponent()({
19099
19267
  items
19100
19268
  } = useDataTableItems(props, columns);
19101
19269
  const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19270
+ const search = toRef(props, 'search');
19102
19271
  const {
19103
19272
  filteredItems
19104
- } = useFilter(props, items, toRef(props, 'search'), {
19273
+ } = useFilter(props, items, search, {
19105
19274
  filterKeys
19106
19275
  });
19107
- const {
19108
- sortBy
19109
- } = createSort(props);
19276
+ provideSort({
19277
+ sortBy,
19278
+ multiSort,
19279
+ mustSort,
19280
+ page
19281
+ });
19110
19282
  const {
19111
19283
  sortByWithGroups,
19112
19284
  opened,
19113
19285
  extractRows
19114
- } = createGroupBy(props, groupBy, sortBy);
19286
+ } = provideGroupBy({
19287
+ groupBy,
19288
+ sortBy
19289
+ });
19115
19290
  const {
19116
19291
  sortedItems
19117
19292
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
19118
19293
  const {
19119
19294
  flatItems
19120
19295
  } = useGroupedItems(sortedItems, groupBy, opened);
19296
+ const itemsLength = computed(() => flatItems.value.length);
19121
19297
  const {
19122
- page,
19123
- itemsPerPage,
19124
19298
  startIndex,
19125
19299
  stopIndex
19126
- } = createPagination(props, flatItems);
19300
+ } = providePagination({
19301
+ page,
19302
+ itemsPerPage,
19303
+ itemsLength
19304
+ });
19127
19305
  const {
19128
19306
  paginatedItems
19129
- } = usePaginatedItems(flatItems, startIndex, stopIndex, itemsPerPage);
19307
+ } = usePaginatedItems({
19308
+ items: flatItems,
19309
+ startIndex,
19310
+ stopIndex,
19311
+ itemsPerPage
19312
+ });
19130
19313
  const paginatedItemsWithoutGroups = computed(() => extractRows(paginatedItems.value));
19131
- createSelection(props, paginatedItemsWithoutGroups);
19132
- createExpanded(props);
19314
+ provideSelection(props, paginatedItemsWithoutGroups);
19315
+ provideExpanded(props);
19133
19316
  useOptions({
19134
19317
  page,
19135
19318
  itemsPerPage,
19136
19319
  sortBy,
19137
- groupBy
19320
+ groupBy,
19321
+ search
19138
19322
  });
19139
19323
  provideDefaults({
19140
19324
  VDataTableRows: {
@@ -19276,7 +19460,14 @@ const VDataTableVirtual = genericComponent()({
19276
19460
  emit,
19277
19461
  slots
19278
19462
  } = _ref;
19279
- const groupBy = useProxiedModel(props, 'groupBy');
19463
+ const {
19464
+ groupBy
19465
+ } = createGroupBy(props);
19466
+ const {
19467
+ sortBy,
19468
+ multiSort,
19469
+ mustSort
19470
+ } = createSort(props);
19280
19471
  const {
19281
19472
  columns
19282
19473
  } = createHeaders(props, {
@@ -19288,19 +19479,25 @@ const VDataTableVirtual = genericComponent()({
19288
19479
  items
19289
19480
  } = useDataTableItems(props, columns);
19290
19481
  const filterKeys = computed(() => columns.value.map(c => 'columns.' + c.key));
19482
+ const search = toRef(props, 'search');
19291
19483
  const {
19292
19484
  filteredItems
19293
- } = useFilter(props, items, toRef(props, 'search'), {
19485
+ } = useFilter(props, items, search, {
19294
19486
  filterKeys
19295
19487
  });
19296
- const {
19297
- sortBy
19298
- } = createSort(props);
19488
+ provideSort({
19489
+ sortBy,
19490
+ multiSort,
19491
+ mustSort
19492
+ });
19299
19493
  const {
19300
19494
  sortByWithGroups,
19301
19495
  opened,
19302
19496
  extractRows
19303
- } = createGroupBy(props, groupBy, sortBy);
19497
+ } = provideGroupBy({
19498
+ groupBy,
19499
+ sortBy
19500
+ });
19304
19501
  const {
19305
19502
  sortedItems
19306
19503
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -19308,8 +19505,8 @@ const VDataTableVirtual = genericComponent()({
19308
19505
  flatItems
19309
19506
  } = useGroupedItems(sortedItems, groupBy, opened);
19310
19507
  const allRows = computed(() => extractRows(flatItems.value));
19311
- createSelection(props, allRows);
19312
- createExpanded(props);
19508
+ provideSelection(props, allRows);
19509
+ provideExpanded(props);
19313
19510
  const {
19314
19511
  containerRef,
19315
19512
  paddingTop,
@@ -19326,7 +19523,8 @@ const VDataTableVirtual = genericComponent()({
19326
19523
  sortBy,
19327
19524
  page: ref(1),
19328
19525
  itemsPerPage: ref(-1),
19329
- groupBy
19526
+ groupBy,
19527
+ search
19330
19528
  });
19331
19529
  provideDefaults({
19332
19530
  VDataTableRows: {
@@ -19395,7 +19593,10 @@ const VDataTableServer = genericComponent()({
19395
19593
  type: String,
19396
19594
  default: '$vuetify.dataIterator.loadingText'
19397
19595
  },
19398
- itemsLength: [Number, String],
19596
+ itemsLength: {
19597
+ type: [Number, String],
19598
+ required: true
19599
+ },
19399
19600
  ...makeVDataTableProps(),
19400
19601
  ...makeDataTableExpandProps(),
19401
19602
  ...makeDataTableHeaderProps(),
@@ -19420,8 +19621,20 @@ const VDataTableServer = genericComponent()({
19420
19621
  emit,
19421
19622
  slots
19422
19623
  } = _ref;
19423
- const groupBy = useProxiedModel(props, 'groupBy');
19424
- createExpanded(props);
19624
+ const {
19625
+ groupBy
19626
+ } = createGroupBy(props);
19627
+ const {
19628
+ sortBy,
19629
+ multiSort,
19630
+ mustSort
19631
+ } = createSort(props);
19632
+ const {
19633
+ page,
19634
+ itemsPerPage
19635
+ } = createPagination(props);
19636
+ const itemsLength = computed(() => parseInt(props.itemsLength, 10));
19637
+ provideExpanded(props);
19425
19638
  const {
19426
19639
  columns
19427
19640
  } = createHeaders(props, {
@@ -19433,20 +19646,28 @@ const VDataTableServer = genericComponent()({
19433
19646
  items
19434
19647
  } = useDataTableItems(props, columns);
19435
19648
  const {
19436
- sortBy,
19437
19649
  toggleSort
19438
- } = createSort(props);
19650
+ } = provideSort({
19651
+ sortBy,
19652
+ multiSort,
19653
+ mustSort,
19654
+ page
19655
+ });
19439
19656
  const {
19440
19657
  opened
19441
- } = createGroupBy(props, groupBy, sortBy);
19442
- const {
19658
+ } = provideGroupBy({
19659
+ groupBy,
19660
+ sortBy
19661
+ });
19662
+ providePagination({
19443
19663
  page,
19444
- itemsPerPage
19445
- } = createPagination(props, items);
19664
+ itemsPerPage,
19665
+ itemsLength
19666
+ });
19446
19667
  const {
19447
19668
  flatItems
19448
19669
  } = useGroupedItems(items, groupBy, opened);
19449
- createSelection(props, items);
19670
+ provideSelection(props, items);
19450
19671
  useOptions({
19451
19672
  page,
19452
19673
  itemsPerPage,
@@ -20017,7 +20238,7 @@ function createVuetify$1() {
20017
20238
  locale
20018
20239
  };
20019
20240
  }
20020
- const version$1 = "3.1.7";
20241
+ const version$1 = "3.1.9";
20021
20242
  createVuetify$1.version = version$1;
20022
20243
 
20023
20244
  // Vue's inject() can only be used in setup
@@ -20029,7 +20250,7 @@ function inject(key) {
20029
20250
  }
20030
20251
  }
20031
20252
 
20032
- const version = "3.1.7";
20253
+ const version = "3.1.9";
20033
20254
 
20034
20255
  const createVuetify = function () {
20035
20256
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};