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
  */
@@ -953,6 +953,8 @@
953
953
  const injectedDefaults = useDefaults();
954
954
  const providedDefaults = vue.ref(defaults);
955
955
  const newDefaults = vue.computed(() => {
956
+ const disabled = vue.unref(options?.disabled);
957
+ if (disabled) return {};
956
958
  const scoped = vue.unref(options?.scoped);
957
959
  const reset = vue.unref(options?.reset);
958
960
  const root = vue.unref(options?.root);
@@ -1026,10 +1028,11 @@
1026
1028
  const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1027
1029
  const _props = new Proxy(props, {
1028
1030
  get(target, prop) {
1031
+ const propValue = Reflect.get(target, prop);
1029
1032
  if (typeof prop === 'string' && !propIsDefined(vm.vnode, prop)) {
1030
- return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? target[prop];
1033
+ return componentDefaults.value?.[prop] ?? defaults.value.global?.[prop] ?? propValue;
1031
1034
  }
1032
- return Reflect.get(target, prop);
1035
+ return propValue;
1033
1036
  }
1034
1037
  });
1035
1038
  const _subcomponentDefaults = vue.shallowRef();
@@ -1675,17 +1678,9 @@
1675
1678
  if (current.value.dark) {
1676
1679
  createCssClass(lines, ':root', ['color-scheme: dark']);
1677
1680
  }
1681
+ createCssClass(lines, ':root', genCssVariables(current.value));
1678
1682
  for (const [themeName, theme] of Object.entries(computedThemes.value)) {
1679
- const {
1680
- variables,
1681
- dark
1682
- } = theme;
1683
- createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${dark ? 'dark' : 'normal'}`, ...genCssVariables(theme), ...Object.keys(variables).map(key => {
1684
- const value = variables[key];
1685
- const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1686
- const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1687
- return `--v-${key}: ${rgb ?? value}`;
1688
- })]);
1683
+ createCssClass(lines, `.v-theme--${themeName}`, [`color-scheme: ${theme.dark ? 'dark' : 'normal'}`, ...genCssVariables(theme)]);
1689
1684
  }
1690
1685
  const bgLines = [];
1691
1686
  const fgLines = [];
@@ -1798,6 +1793,11 @@
1798
1793
  variables.push(`--v-theme-${key}-overlay-multiplier: ${getLuma(value) > 0.18 ? lightOverlay : darkOverlay}`);
1799
1794
  }
1800
1795
  }
1796
+ for (const [key, value] of Object.entries(theme.variables)) {
1797
+ const color = typeof value === 'string' && value.startsWith('#') ? parseColor$1(value) : undefined;
1798
+ const rgb = color ? `${color.r}, ${color.g}, ${color.b}` : undefined;
1799
+ variables.push(`--v-${key}: ${rgb ?? value}`);
1800
+ }
1801
1801
  return variables;
1802
1802
  }
1803
1803
 
@@ -2027,7 +2027,7 @@
2027
2027
  en: false,
2028
2028
  es: false,
2029
2029
  et: false,
2030
- fa: false,
2030
+ fa: true,
2031
2031
  fi: false,
2032
2032
  fr: false,
2033
2033
  hr: false,
@@ -2160,6 +2160,7 @@
2160
2160
  name: 'VDefaultsProvider',
2161
2161
  props: {
2162
2162
  defaults: Object,
2163
+ disabled: Boolean,
2163
2164
  reset: [Number, String],
2164
2165
  root: Boolean,
2165
2166
  scoped: Boolean
@@ -2170,6 +2171,7 @@
2170
2171
  } = _ref;
2171
2172
  const {
2172
2173
  defaults,
2174
+ disabled,
2173
2175
  reset,
2174
2176
  root,
2175
2177
  scoped
@@ -2177,7 +2179,8 @@
2177
2179
  provideDefaults(defaults, {
2178
2180
  reset,
2179
2181
  root,
2180
- scoped
2182
+ scoped,
2183
+ disabled
2181
2184
  });
2182
2185
  return () => slots.default?.();
2183
2186
  }
@@ -2188,7 +2191,7 @@
2188
2191
  // Types
2189
2192
 
2190
2193
  function createCssTransition(name) {
2191
- let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top center 0';
2194
+ let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'center center';
2192
2195
  let mode = arguments.length > 2 ? arguments[2] : undefined;
2193
2196
  return genericComponent()({
2194
2197
  name,
@@ -2799,7 +2802,7 @@
2799
2802
  "class": ['v-img__img', containClasses.value],
2800
2803
  "src": normalisedSrc.value.src,
2801
2804
  "srcset": normalisedSrc.value.srcset,
2802
- "alt": "",
2805
+ "alt": props.alt,
2803
2806
  "sizes": props.sizes,
2804
2807
  "ref": image,
2805
2808
  "onLoad": onLoad,
@@ -2821,7 +2824,7 @@
2821
2824
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && vue.createVNode("img", {
2822
2825
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
2823
2826
  "src": normalisedSrc.value.lazySrc,
2824
- "alt": ""
2827
+ "alt": props.alt
2825
2828
  }, null)]
2826
2829
  });
2827
2830
  const __placeholder = () => {
@@ -3163,16 +3166,20 @@
3163
3166
  default: () => [hasImage && vue.createVNode("div", {
3164
3167
  "key": "image",
3165
3168
  "class": "v-toolbar__image"
3166
- }, [vue.createVNode(VDefaultsProvider, {
3169
+ }, [!slots.image ? vue.createVNode(VImg, {
3170
+ "key": "image-img",
3171
+ "cover": true,
3172
+ "src": props.image
3173
+ }, null) : vue.createVNode(VDefaultsProvider, {
3174
+ "key": "image-defaults",
3175
+ "disabled": !props.image,
3167
3176
  "defaults": {
3168
3177
  VImg: {
3169
3178
  cover: true,
3170
3179
  src: props.image
3171
3180
  }
3172
3181
  }
3173
- }, {
3174
- default: () => [slots.image ? slots.image?.() : vue.createVNode(VImg, null, null)]
3175
- })]), vue.createVNode(VDefaultsProvider, {
3182
+ }, slots.image)]), vue.createVNode(VDefaultsProvider, {
3176
3183
  "defaults": {
3177
3184
  VTabs: {
3178
3185
  height: convertToUnit(contentHeight.value)
@@ -4893,43 +4900,49 @@
4893
4900
  },
4894
4901
  "value": valueAttr.value
4895
4902
  }, {
4896
- default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode(VDefaultsProvider, {
4903
+ default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode("span", {
4897
4904
  "key": "prepend",
4905
+ "class": "v-btn__prepend"
4906
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
4907
+ "key": "prepend-icon",
4908
+ "icon": props.prependIcon
4909
+ }, null) : vue.createVNode(VDefaultsProvider, {
4910
+ "key": "prepend-defaults",
4911
+ "disabled": !props.prependIcon,
4898
4912
  "defaults": {
4899
4913
  VIcon: {
4900
4914
  icon: props.prependIcon
4901
4915
  }
4902
4916
  }
4903
- }, {
4904
- default: () => [vue.createVNode("span", {
4905
- "class": "v-btn__prepend"
4906
- }, [slots.prepend?.() ?? vue.createVNode(VIcon, null, null)])]
4907
- }), vue.createVNode("span", {
4917
+ }, slots.prepend)]), vue.createVNode("span", {
4908
4918
  "class": "v-btn__content",
4909
4919
  "data-no-activator": ""
4910
- }, [vue.createVNode(VDefaultsProvider, {
4911
- "key": "content",
4920
+ }, [!slots.default && hasIcon ? vue.createVNode(VIcon, {
4921
+ "key": "content-icon",
4922
+ "icon": props.icon
4923
+ }, null) : vue.createVNode(VDefaultsProvider, {
4924
+ "key": "content-defaults",
4925
+ "disabled": !hasIcon,
4912
4926
  "defaults": {
4913
4927
  VIcon: {
4914
- icon: hasIcon ? props.icon : undefined
4928
+ icon: props.icon
4915
4929
  }
4916
4930
  }
4917
- }, {
4918
- default: () => [slots.default?.() ?? (hasIcon && vue.createVNode(VIcon, {
4919
- "key": "icon"
4920
- }, null))]
4921
- })]), !props.icon && hasAppend && vue.createVNode(VDefaultsProvider, {
4931
+ }, slots.default)]), !props.icon && hasAppend && vue.createVNode("span", {
4922
4932
  "key": "append",
4933
+ "class": "v-btn__append"
4934
+ }, [!slots.append ? vue.createVNode(VIcon, {
4935
+ "key": "append-icon",
4936
+ "icon": props.appendIcon
4937
+ }, null) : vue.createVNode(VDefaultsProvider, {
4938
+ "key": "append-defaults",
4939
+ "disabled": !props.appendIcon,
4923
4940
  "defaults": {
4924
4941
  VIcon: {
4925
4942
  icon: props.appendIcon
4926
4943
  }
4927
4944
  }
4928
- }, {
4929
- default: () => [vue.createVNode("span", {
4930
- "class": "v-btn__append"
4931
- }, [slots.append?.() ?? vue.createVNode(VIcon, null, null)])]
4932
- }), !!props.loading && vue.createVNode("span", {
4945
+ }, slots.append)]), !!props.loading && vue.createVNode("span", {
4933
4946
  "key": "loader",
4934
4947
  "class": "v-btn__loader"
4935
4948
  }, [slots.loader?.() ?? vue.createVNode(VProgressCircular, {
@@ -5058,10 +5071,12 @@
5058
5071
  })
5059
5072
  },
5060
5073
  emits: {
5074
+ 'click:close': e => true,
5061
5075
  'update:modelValue': value => true
5062
5076
  },
5063
5077
  setup(props, _ref) {
5064
5078
  let {
5079
+ emit,
5065
5080
  slots
5066
5081
  } = _ref;
5067
5082
  const isActive = useProxiedModel(props, 'modelValue');
@@ -5111,6 +5126,7 @@
5111
5126
  'aria-label': t(props.closeLabel),
5112
5127
  onClick(e) {
5113
5128
  isActive.value = false;
5129
+ emit('click:close', e);
5114
5130
  }
5115
5131
  }));
5116
5132
  return () => {
@@ -5132,8 +5148,17 @@
5132
5148
  "key": "border",
5133
5149
  "class": ['v-alert__border', textColorClasses.value],
5134
5150
  "style": textColorStyles.value
5135
- }, null), hasPrepend && vue.createVNode(VDefaultsProvider, {
5151
+ }, null), hasPrepend && vue.createVNode("div", {
5136
5152
  "key": "prepend",
5153
+ "class": "v-alert__prepend"
5154
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
5155
+ "key": "prepend-icon",
5156
+ "density": props.density,
5157
+ "icon": icon.value,
5158
+ "size": props.prominent ? 44 : 28
5159
+ }, null) : vue.createVNode(VDefaultsProvider, {
5160
+ "key": "prepend-defaults",
5161
+ "disabled": !icon.value,
5137
5162
  "defaults": {
5138
5163
  VIcon: {
5139
5164
  density: props.density,
@@ -5141,21 +5166,25 @@
5141
5166
  size: props.prominent ? 44 : 28
5142
5167
  }
5143
5168
  }
5144
- }, {
5145
- default: () => [vue.createVNode("div", {
5146
- "class": "v-alert__prepend"
5147
- }, [slots.prepend ? slots.prepend() : icon.value && vue.createVNode(VIcon, null, null)])]
5148
- }), vue.createVNode("div", {
5169
+ }, slots.prepend)]), vue.createVNode("div", {
5149
5170
  "class": "v-alert__content"
5150
5171
  }, [hasTitle && vue.createVNode(VAlertTitle, {
5151
5172
  "key": "title"
5152
5173
  }, {
5153
- default: () => [slots.title ? slots.title() : props.title]
5154
- }), hasText && (slots.text ? slots.text() : props.text), slots.default?.()]), slots.append && vue.createVNode("div", {
5174
+ default: () => [slots.title?.() ?? props.title]
5175
+ }), hasText && (slots.text?.() ?? props.text), slots.default?.()]), slots.append && vue.createVNode("div", {
5155
5176
  "key": "append",
5156
5177
  "class": "v-alert__append"
5157
- }, [slots.append()]), hasClose && vue.createVNode(VDefaultsProvider, {
5178
+ }, [slots.append()]), hasClose && vue.createVNode("div", {
5158
5179
  "key": "close",
5180
+ "class": "v-alert__close"
5181
+ }, [!slots.close ? vue.createVNode(VBtn, vue.mergeProps({
5182
+ "key": "close-btn",
5183
+ "icon": props.closeIcon,
5184
+ "size": "x-small",
5185
+ "variant": "text"
5186
+ }, closeProps.value), null) : vue.createVNode(VDefaultsProvider, {
5187
+ "key": "close-defaults",
5159
5188
  "defaults": {
5160
5189
  VBtn: {
5161
5190
  icon: props.closeIcon,
@@ -5164,12 +5193,10 @@
5164
5193
  }
5165
5194
  }
5166
5195
  }, {
5167
- default: () => [vue.createVNode("div", {
5168
- "class": "v-alert__close"
5169
- }, [slots.close?.({
5196
+ default: () => [slots.close?.({
5170
5197
  props: closeProps.value
5171
- }) ?? vue.createVNode(VBtn, closeProps.value, null)])]
5172
- })]
5198
+ })]
5199
+ })])]
5173
5200
  });
5174
5201
  };
5175
5202
  }
@@ -6179,6 +6206,7 @@
6179
6206
  "id": id.value,
6180
6207
  "active": isActive.value || isDirty.value,
6181
6208
  "dirty": isDirty.value || props.dirty,
6209
+ "disabled": isDisabled.value,
6182
6210
  "focused": isFocused.value,
6183
6211
  "error": isValid.value === false
6184
6212
  }), {
@@ -6833,10 +6861,13 @@
6833
6861
  const link = useLink(props, attrs);
6834
6862
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
6835
6863
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6836
- function onCloseClick(e) {
6837
- isActive.value = false;
6838
- emit('click:close', e);
6839
- }
6864
+ const closeProps = vue.computed(() => ({
6865
+ 'aria-label': t(props.closeLabel),
6866
+ onClick(e) {
6867
+ isActive.value = false;
6868
+ emit('click:close', e);
6869
+ }
6870
+ }));
6840
6871
  function onClick(e) {
6841
6872
  emit('click', e);
6842
6873
  if (!isClickable.value) return;
@@ -6851,10 +6882,12 @@
6851
6882
  }
6852
6883
  return () => {
6853
6884
  const Tag = link.isLink.value ? 'a' : props.tag;
6854
- const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar);
6885
+ const hasAppendMedia = !!(props.appendIcon || props.appendAvatar);
6886
+ const hasAppend = !!(hasAppendMedia || slots.append);
6855
6887
  const hasClose = !!(slots.close || props.closable);
6856
6888
  const hasFilter = !!(slots.filter || props.filter) && group;
6857
- const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar);
6889
+ const hasPrependMedia = !!(props.prependIcon || props.prependAvatar);
6890
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
6858
6891
  const hasColor = !group || group.isSelected.value;
6859
6892
  return isActive.value && vue.withDirectives(vue.createVNode(Tag, {
6860
6893
  "class": ['v-chip', {
@@ -6872,77 +6905,94 @@
6872
6905
  "onClick": onClick,
6873
6906
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
6874
6907
  }, {
6875
- default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VDefaultsProvider, {
6876
- "key": "filter",
6877
- "defaults": {
6878
- VIcon: {
6879
- icon: props.filterIcon
6880
- }
6881
- }
6908
+ default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VExpandXTransition, {
6909
+ "key": "filter"
6882
6910
  }, {
6883
- default: () => [vue.createVNode(VExpandXTransition, null, {
6884
- default: () => [vue.withDirectives(vue.createVNode("div", {
6885
- "class": "v-chip__filter"
6886
- }, [slots.filter ? slots.filter() : vue.createVNode(VIcon, null, null)]), [[vue.vShow, group.isSelected.value]])]
6887
- })]
6888
- }), hasPrepend && vue.createVNode(VDefaultsProvider, {
6911
+ default: () => [vue.withDirectives(vue.createVNode("div", {
6912
+ "class": "v-chip__filter"
6913
+ }, [!slots.filter ? vue.createVNode(VIcon, {
6914
+ "key": "filter-icon",
6915
+ "icon": props.filterIcon
6916
+ }, null) : vue.withDirectives(vue.createVNode(VDefaultsProvider, {
6917
+ "key": "filter-defaults",
6918
+ "disabled": !props.filterIcon,
6919
+ "defaults": {
6920
+ VIcon: {
6921
+ icon: props.filterIcon
6922
+ }
6923
+ }
6924
+ }, null), [[vue.resolveDirective("slot"), slots.filter, "default"]])]), [[vue.vShow, group.isSelected.value]])]
6925
+ }), hasPrepend && vue.createVNode("div", {
6889
6926
  "key": "prepend",
6927
+ "class": "v-chip__prepend"
6928
+ }, [!slots.prepend ? vue.createVNode(vue.Fragment, null, [props.prependIcon && vue.createVNode(VIcon, {
6929
+ "key": "prepend-icon",
6930
+ "icon": props.prependIcon,
6931
+ "start": true
6932
+ }, null), props.prependAvatar && vue.createVNode(VAvatar, {
6933
+ "key": "prepend-avatar",
6934
+ "image": props.prependAvatar,
6935
+ "start": true
6936
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
6937
+ "key": "prepend-defaults",
6938
+ "disabled": !hasPrependMedia,
6890
6939
  "defaults": {
6891
6940
  VAvatar: {
6892
- image: props.prependAvatar
6941
+ image: props.prependAvatar,
6942
+ start: true
6893
6943
  },
6894
6944
  VIcon: {
6895
- icon: props.prependIcon
6945
+ icon: props.prependIcon,
6946
+ start: true
6896
6947
  }
6897
6948
  }
6898
- }, {
6899
- default: () => [slots.prepend ? vue.createVNode("div", {
6900
- "class": "v-chip__prepend"
6901
- }, [slots.prepend()]) : props.prependAvatar ? vue.createVNode(VAvatar, {
6902
- "start": true
6903
- }, null) : props.prependIcon ? vue.createVNode(VIcon, {
6904
- "start": true
6905
- }, null) : undefined]
6906
- }), slots.default?.({
6949
+ }, slots.prepend)]), slots.default?.({
6907
6950
  isSelected: group?.isSelected.value,
6908
6951
  selectedClass: group?.selectedClass.value,
6909
6952
  select: group?.select,
6910
6953
  toggle: group?.toggle,
6911
6954
  value: group?.value.value,
6912
6955
  disabled: props.disabled
6913
- }) ?? props.text, hasAppend && vue.createVNode(VDefaultsProvider, {
6956
+ }) ?? props.text, hasAppend && vue.createVNode("div", {
6914
6957
  "key": "append",
6958
+ "class": "v-chip__append"
6959
+ }, [!slots.append ? vue.createVNode(vue.Fragment, null, [props.appendIcon && vue.createVNode(VIcon, {
6960
+ "key": "append-icon",
6961
+ "end": true,
6962
+ "icon": props.appendIcon
6963
+ }, null), props.appendAvatar && vue.createVNode(VAvatar, {
6964
+ "key": "append-avatar",
6965
+ "end": true,
6966
+ "image": props.appendAvatar
6967
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
6968
+ "key": "append-defaults",
6969
+ "disabled": !hasAppendMedia,
6915
6970
  "defaults": {
6916
6971
  VAvatar: {
6972
+ end: true,
6917
6973
  image: props.appendAvatar
6918
6974
  },
6919
6975
  VIcon: {
6976
+ end: true,
6920
6977
  icon: props.appendIcon
6921
6978
  }
6922
6979
  }
6923
- }, {
6924
- default: () => [slots.append ? vue.createVNode("div", {
6925
- "class": "v-chip__append"
6926
- }, [slots.append()]) : props.appendAvatar ? vue.createVNode(VAvatar, {
6927
- "end": true
6928
- }, null) : props.appendIcon ? vue.createVNode(VIcon, {
6929
- "end": true
6930
- }, null) : undefined]
6931
- }), hasClose && vue.createVNode(VDefaultsProvider, {
6980
+ }, slots.append)]), hasClose && vue.createVNode("div", vue.mergeProps({
6932
6981
  "key": "close",
6982
+ "class": "v-chip__close"
6983
+ }, closeProps.value), [!slots.close ? vue.createVNode(VIcon, {
6984
+ "key": "close-icon",
6985
+ "icon": props.closeIcon,
6986
+ "size": "x-small"
6987
+ }, null) : vue.createVNode(VDefaultsProvider, {
6988
+ "key": "close-defaults",
6933
6989
  "defaults": {
6934
6990
  VIcon: {
6935
6991
  icon: props.closeIcon,
6936
6992
  size: 'x-small'
6937
6993
  }
6938
6994
  }
6939
- }, {
6940
- default: () => [vue.createVNode("div", {
6941
- "class": "v-chip__close",
6942
- "aria-label": t(props.closeLabel),
6943
- "onClick": onCloseClick
6944
- }, [slots.close ? slots.close() : vue.createVNode(VIcon, null, null)])]
6945
- })]
6995
+ }, slots.close)])]
6946
6996
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple, null]]);
6947
6997
  };
6948
6998
  }
@@ -7692,8 +7742,10 @@
7692
7742
  const hasColor = !list || isSelected.value || isActive.value;
7693
7743
  const hasTitle = slots.title || props.title;
7694
7744
  const hasSubtitle = slots.subtitle || props.subtitle;
7695
- const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
7696
- const hasPrepend = !!(slots.prepend || props.prependAvatar || props.prependIcon);
7745
+ const hasAppendMedia = !!(props.prependAvatar || props.prependIcon);
7746
+ const hasAppend = !!(hasAppendMedia || slots.append);
7747
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
7748
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
7697
7749
  list?.updateHasPrepend(hasPrepend);
7698
7750
  return vue.withDirectives(vue.createVNode(Tag, {
7699
7751
  "class": ['v-list-item', {
@@ -7713,7 +7765,7 @@
7713
7765
  default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode("div", {
7714
7766
  "key": "prepend",
7715
7767
  "class": "v-list-item__prepend"
7716
- }, [props.prependAvatar && vue.createVNode(VAvatar, {
7768
+ }, [!slots.prepend ? vue.createVNode(vue.Fragment, null, [props.prependAvatar && vue.createVNode(VAvatar, {
7717
7769
  "key": "prepend-avatar",
7718
7770
  "density": props.density,
7719
7771
  "image": props.prependAvatar
@@ -7721,8 +7773,9 @@
7721
7773
  "key": "prepend-icon",
7722
7774
  "density": props.density,
7723
7775
  "icon": props.prependIcon
7724
- }, null), slots.prepend && vue.createVNode(VDefaultsProvider, {
7725
- "key": "prepend",
7776
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
7777
+ "key": "prepend-defaults",
7778
+ "disabled": !hasPrependMedia,
7726
7779
  "defaults": {
7727
7780
  VAvatar: {
7728
7781
  density: props.density,
@@ -7737,7 +7790,7 @@
7737
7790
  }
7738
7791
  }
7739
7792
  }, {
7740
- default: () => [slots.prepend(slotProps.value)]
7793
+ default: () => [slots.prepend?.(slotProps.value)]
7741
7794
  })]), vue.createVNode("div", {
7742
7795
  "class": "v-list-item__content",
7743
7796
  "data-no-activator": ""
@@ -7756,8 +7809,17 @@
7756
7809
  }), slots.default?.(slotProps.value)]), hasAppend && vue.createVNode("div", {
7757
7810
  "key": "append",
7758
7811
  "class": "v-list-item__append"
7759
- }, [slots.append && vue.createVNode(VDefaultsProvider, {
7760
- "key": "append",
7812
+ }, [!slots.append ? vue.createVNode(vue.Fragment, null, [props.appendIcon && vue.createVNode(VIcon, {
7813
+ "key": "append-icon",
7814
+ "density": props.density,
7815
+ "icon": props.appendIcon
7816
+ }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7817
+ "key": "append-avatar",
7818
+ "density": props.density,
7819
+ "image": props.appendAvatar
7820
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
7821
+ "key": "append-defaults",
7822
+ "disabled": !hasAppendMedia,
7761
7823
  "defaults": {
7762
7824
  VAvatar: {
7763
7825
  density: props.density,
@@ -7772,16 +7834,8 @@
7772
7834
  }
7773
7835
  }
7774
7836
  }, {
7775
- default: () => [slots.append(slotProps.value)]
7776
- }), props.appendIcon && vue.createVNode(VIcon, {
7777
- "key": "append-icon",
7778
- "density": props.density,
7779
- "icon": props.appendIcon
7780
- }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7781
- "key": "append-avatar",
7782
- "density": props.density,
7783
- "image": props.appendAvatar
7784
- }, null)])]
7837
+ default: () => [slots.append?.(slotProps.value)]
7838
+ })])]
7785
7839
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7786
7840
  });
7787
7841
  return {};
@@ -9127,8 +9181,8 @@
9127
9181
  function getClientHeight(isHydrate) {
9128
9182
  return IN_BROWSER && !isHydrate ? window.innerHeight : 0;
9129
9183
  }
9130
- function getPlatform() {
9131
- const userAgent = IN_BROWSER ? window.navigator.userAgent : 'ssr';
9184
+ function getPlatform(isHydrate) {
9185
+ const userAgent = IN_BROWSER && !isHydrate ? window.navigator.userAgent : 'ssr';
9132
9186
  function match(regexp) {
9133
9187
  return Boolean(userAgent.match(regexp));
9134
9188
  }
@@ -9143,7 +9197,6 @@
9143
9197
  const win = match(/win/i);
9144
9198
  const mac = match(/mac/i);
9145
9199
  const linux = match(/linux/i);
9146
- const ssr = match(/ssr/i);
9147
9200
  return {
9148
9201
  android,
9149
9202
  ios,
@@ -9157,7 +9210,7 @@
9157
9210
  mac,
9158
9211
  linux,
9159
9212
  touch: SUPPORTS_TOUCH,
9160
- ssr
9213
+ ssr: userAgent === 'ssr'
9161
9214
  };
9162
9215
  }
9163
9216
  function createDisplay(options, ssr) {
@@ -9166,13 +9219,17 @@
9166
9219
  mobileBreakpoint
9167
9220
  } = parseDisplayOptions(options);
9168
9221
  const height = vue.ref(getClientHeight(ssr));
9169
- const platform = getPlatform();
9222
+ const platform = vue.shallowRef(getPlatform(ssr));
9170
9223
  const state = vue.reactive({});
9171
9224
  const width = vue.ref(getClientWidth(ssr));
9172
- function update() {
9225
+ function updateSize() {
9173
9226
  height.value = getClientHeight();
9174
9227
  width.value = getClientWidth();
9175
9228
  }
9229
+ function update() {
9230
+ updateSize();
9231
+ platform.value = getPlatform();
9232
+ }
9176
9233
 
9177
9234
  // eslint-disable-next-line max-statements
9178
9235
  vue.watchEffect(() => {
@@ -9184,7 +9241,7 @@
9184
9241
  const xxl = width.value >= thresholds.xxl;
9185
9242
  const name = xs ? 'xs' : sm ? 'sm' : md ? 'md' : lg ? 'lg' : xl ? 'xl' : 'xxl';
9186
9243
  const breakpointValue = typeof mobileBreakpoint === 'number' ? mobileBreakpoint : thresholds[mobileBreakpoint];
9187
- const mobile = !platform.ssr ? width.value < breakpointValue : platform.android || platform.ios || platform.opera;
9244
+ const mobile = width.value < breakpointValue;
9188
9245
  state.xs = xs;
9189
9246
  state.sm = sm;
9190
9247
  state.md = md;
@@ -9204,11 +9261,11 @@
9204
9261
  state.width = width.value;
9205
9262
  state.mobile = mobile;
9206
9263
  state.mobileBreakpoint = mobileBreakpoint;
9207
- state.platform = platform;
9264
+ state.platform = platform.value;
9208
9265
  state.thresholds = thresholds;
9209
9266
  });
9210
9267
  if (IN_BROWSER) {
9211
- window.addEventListener('resize', update, {
9268
+ window.addEventListener('resize', updateSize, {
9212
9269
  passive: true
9213
9270
  });
9214
9271
  }
@@ -9987,7 +10044,13 @@
9987
10044
  return vue.createVNode("div", {
9988
10045
  "key": item.value,
9989
10046
  "class": "v-select__selection"
9990
- }, [hasChips ? vue.createVNode(VDefaultsProvider, {
10047
+ }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
10048
+ "key": "chip",
10049
+ "closable": props.closableChips,
10050
+ "size": "small",
10051
+ "text": item.title
10052
+ }, slotProps), null) : vue.createVNode(VDefaultsProvider, {
10053
+ "key": "chip-defaults",
9991
10054
  "defaults": {
9992
10055
  VChip: {
9993
10056
  closable: props.closableChips,
@@ -9996,15 +10059,15 @@
9996
10059
  }
9997
10060
  }
9998
10061
  }, {
9999
- default: () => [slots.chip ? slots.chip({
10062
+ default: () => [slots.chip?.({
10000
10063
  item,
10001
10064
  index,
10002
10065
  props: slotProps
10003
- }) : vue.createVNode(VChip, slotProps, null)]
10004
- }) : slots.selection ? slots.selection({
10066
+ })]
10067
+ }) : slots.selection?.({
10005
10068
  item,
10006
10069
  index
10007
- }) : vue.createVNode("span", {
10070
+ }) ?? vue.createVNode("span", {
10008
10071
  "class": "v-select__selection-text"
10009
10072
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10010
10073
  "class": "v-select__selection-comma"
@@ -10376,7 +10439,13 @@
10376
10439
  return vue.createVNode("div", {
10377
10440
  "key": item.value,
10378
10441
  "class": "v-autocomplete__selection"
10379
- }, [hasChips ? vue.createVNode(VDefaultsProvider, {
10442
+ }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
10443
+ "key": "chip",
10444
+ "closable": props.closableChips,
10445
+ "size": "small",
10446
+ "text": item.title
10447
+ }, slotProps), null) : vue.createVNode(VDefaultsProvider, {
10448
+ "key": "chip-defaults",
10380
10449
  "defaults": {
10381
10450
  VChip: {
10382
10451
  closable: props.closableChips,
@@ -10385,15 +10454,15 @@
10385
10454
  }
10386
10455
  }
10387
10456
  }, {
10388
- default: () => [slots.chip ? slots.chip({
10457
+ default: () => [slots.chip?.({
10389
10458
  item,
10390
10459
  index,
10391
10460
  props: slotProps
10392
- }) : vue.createVNode(VChip, slotProps, null)]
10393
- }) : slots.selection ? slots.selection({
10461
+ })]
10462
+ }) : slots.selection?.({
10394
10463
  item,
10395
10464
  index
10396
- }) : vue.createVNode("span", {
10465
+ }) ?? vue.createVNode("span", {
10397
10466
  "class": "v-autocomplete__selection-text"
10398
10467
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10399
10468
  "class": "v-autocomplete__selection-comma"
@@ -10594,7 +10663,8 @@
10594
10663
  });
10595
10664
  useRender(() => {
10596
10665
  const hasText = !!(props.text || slots.text);
10597
- const hasPrepend = !!(slots.prepend || props.avatar || props.icon);
10666
+ const hasPrependMedia = !!(props.avatar || props.icon);
10667
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
10598
10668
  return vue.createVNode(props.tag, {
10599
10669
  "class": ['v-banner', {
10600
10670
  'v-banner--stacked': props.stacked || mobile.value,
@@ -10604,8 +10674,18 @@
10604
10674
  "style": [dimensionStyles.value, locationStyles.value],
10605
10675
  "role": "banner"
10606
10676
  }, {
10607
- default: () => [hasPrepend && vue.createVNode(VDefaultsProvider, {
10677
+ default: () => [hasPrepend && vue.createVNode("div", {
10608
10678
  "key": "prepend",
10679
+ "class": "v-banner__prepend"
10680
+ }, [!slots.prepend ? vue.createVNode(VAvatar, {
10681
+ "key": "prepend-avatar",
10682
+ "color": color.value,
10683
+ "density": density.value,
10684
+ "icon": props.icon,
10685
+ "image": props.avatar
10686
+ }, null) : vue.createVNode(VDefaultsProvider, {
10687
+ "key": "prepend-defaults",
10688
+ "disabled": !hasPrependMedia,
10609
10689
  "defaults": {
10610
10690
  VAvatar: {
10611
10691
  color: color.value,
@@ -10614,19 +10694,15 @@
10614
10694
  image: props.avatar
10615
10695
  }
10616
10696
  }
10617
- }, {
10618
- default: () => [vue.createVNode("div", {
10619
- "class": "v-banner__prepend"
10620
- }, [slots.prepend ? slots.prepend() : (props.avatar || props.icon) && vue.createVNode(VAvatar, null, null)])]
10621
- }), vue.createVNode("div", {
10697
+ }, slots.prepend)]), vue.createVNode("div", {
10622
10698
  "class": "v-banner__content"
10623
10699
  }, [hasText && vue.createVNode(VBannerText, {
10624
10700
  "key": "text"
10625
10701
  }, {
10626
- default: () => [slots.text ? slots.text() : props.text]
10627
- }), slots.default?.()]), slots.actions && vue.createVNode(VBannerActions, null, {
10628
- default: () => [slots.actions()]
10629
- })]
10702
+ default: () => [slots.text?.() ?? props.text]
10703
+ }), slots.default?.()]), slots.actions && vue.createVNode(VBannerActions, {
10704
+ "key": "actions"
10705
+ }, slots.actions)]
10630
10706
  });
10631
10707
  });
10632
10708
  }
@@ -10859,19 +10935,23 @@
10859
10935
  "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
10860
10936
  "style": backgroundColorStyles.value
10861
10937
  }, {
10862
- default: () => [hasPrepend && vue.createVNode(VDefaultsProvider, {
10938
+ default: () => [hasPrepend && vue.createVNode("div", {
10863
10939
  "key": "prepend",
10940
+ "class": "v-breadcrumbs__prepend"
10941
+ }, [!slots.prepend ? vue.createVNode(VIcon, {
10942
+ "key": "prepend-icon",
10943
+ "start": true,
10944
+ "icon": props.icon
10945
+ }, null) : vue.createVNode(VDefaultsProvider, {
10946
+ "key": "prepend-defaults",
10947
+ "disabled": !props.icon,
10864
10948
  "defaults": {
10865
10949
  VIcon: {
10866
10950
  icon: props.icon,
10867
10951
  start: true
10868
10952
  }
10869
10953
  }
10870
- }, {
10871
- default: () => [vue.createVNode("div", {
10872
- "class": "v-breadcrumbs__prepend"
10873
- }, [slots.prepend ? slots.prepend() : props.icon && vue.createVNode(VIcon, null, null)])]
10874
- }), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
10954
+ }, slots.prepend)]), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
10875
10955
  "key": index,
10876
10956
  "disabled": index >= array.length - 1
10877
10957
  }, typeof item === 'string' ? {
@@ -10935,30 +11015,33 @@
10935
11015
  slots
10936
11016
  } = _ref;
10937
11017
  useRender(() => {
10938
- const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend);
10939
- const hasAppend = !!(props.appendAvatar || props.appendIcon || slots.append);
11018
+ const hasPrependMedia = !!(props.prependAvatar || props.prependIcon);
11019
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
11020
+ const hasAppendMedia = !!(props.appendAvatar || props.appendIcon);
11021
+ const hasAppend = !!(hasAppendMedia || slots.append);
10940
11022
  const hasTitle = !!(props.title || slots.title);
10941
11023
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
10942
11024
  return vue.createVNode("div", {
10943
11025
  "class": "v-card-item"
10944
- }, [hasPrepend && vue.createVNode(VDefaultsProvider, {
11026
+ }, [hasPrepend && vue.createVNode("div", {
10945
11027
  "key": "prepend",
11028
+ "class": "v-card-item__prepend"
11029
+ }, [!slots.prepend ? hasPrependMedia && vue.createVNode(VAvatar, {
11030
+ "key": "prepend-avatar",
11031
+ "density": props.density,
11032
+ "icon": props.prependIcon,
11033
+ "image": props.prependAvatar
11034
+ }, null) : vue.createVNode(VDefaultsProvider, {
11035
+ "key": "prepend-defaults",
11036
+ "disabled": !hasPrependMedia,
10946
11037
  "defaults": {
10947
11038
  VAvatar: {
10948
11039
  density: props.density,
10949
11040
  icon: props.prependIcon,
10950
11041
  image: props.prependAvatar
10951
- },
10952
- VIcon: {
10953
- density: props.density,
10954
- icon: props.prependIcon
10955
11042
  }
10956
11043
  }
10957
- }, {
10958
- default: () => [vue.createVNode("div", {
10959
- "class": "v-card-item__prepend"
10960
- }, [slots.prepend?.() ?? vue.createVNode(VAvatar, null, null)])]
10961
- }), vue.createVNode("div", {
11044
+ }, slots.prepend)]), vue.createVNode("div", {
10962
11045
  "class": "v-card-item__content"
10963
11046
  }, [hasTitle && vue.createVNode(VCardTitle, {
10964
11047
  "key": "title"
@@ -10968,24 +11051,25 @@
10968
11051
  "key": "subtitle"
10969
11052
  }, {
10970
11053
  default: () => [slots.subtitle?.() ?? props.subtitle]
10971
- }), slots.default?.()]), hasAppend && vue.createVNode(VDefaultsProvider, {
11054
+ }), slots.default?.()]), hasAppend && vue.createVNode("div", {
10972
11055
  "key": "append",
11056
+ "class": "v-card-item__append"
11057
+ }, [!slots.append ? hasAppendMedia && vue.createVNode(VAvatar, {
11058
+ "key": "append-avatar",
11059
+ "density": props.density,
11060
+ "icon": props.appendIcon,
11061
+ "image": props.appendAvatar
11062
+ }, null) : vue.createVNode(VDefaultsProvider, {
11063
+ "key": "append-defaults",
11064
+ "disabled": !hasAppendMedia,
10973
11065
  "defaults": {
10974
11066
  VAvatar: {
10975
11067
  density: props.density,
10976
11068
  icon: props.appendIcon,
10977
11069
  image: props.appendAvatar
10978
- },
10979
- VIcon: {
10980
- density: props.density,
10981
- icon: props.appendIcon
10982
11070
  }
10983
11071
  }
10984
- }, {
10985
- default: () => [vue.createVNode("div", {
10986
- "class": "v-card-item__append"
10987
- }, [slots.append?.() ?? vue.createVNode(VAvatar, null, null)])]
10988
- })]);
11072
+ }, slots.append)])]);
10989
11073
  });
10990
11074
  return {};
10991
11075
  }
@@ -11097,19 +11181,23 @@
11097
11181
  "onClick": isClickable.value && link.navigate,
11098
11182
  "tabindex": props.disabled ? -1 : undefined
11099
11183
  }, {
11100
- default: () => [hasImage && vue.createVNode(VDefaultsProvider, {
11184
+ default: () => [hasImage && vue.createVNode("div", {
11101
11185
  "key": "image",
11186
+ "class": "v-card__image"
11187
+ }, [!slots.image ? vue.createVNode(VImg, {
11188
+ "key": "image-img",
11189
+ "cover": true,
11190
+ "src": props.image
11191
+ }, null) : vue.createVNode(VDefaultsProvider, {
11192
+ "key": "image-defaults",
11193
+ "disabled": !props.image,
11102
11194
  "defaults": {
11103
11195
  VImg: {
11104
11196
  cover: true,
11105
11197
  src: props.image
11106
11198
  }
11107
11199
  }
11108
- }, {
11109
- default: () => [vue.createVNode("div", {
11110
- "class": "v-card__image"
11111
- }, [slots.image?.() ?? vue.createVNode(VImg, null, null)])]
11112
- }), vue.createVNode(LoaderSlot, {
11200
+ }, slots.image)]), vue.createVNode(LoaderSlot, {
11113
11201
  "name": "v-card",
11114
11202
  "active": !!props.loading,
11115
11203
  "color": typeof props.loading === 'boolean' ? undefined : props.loading
@@ -12313,7 +12401,9 @@
12313
12401
  const percentage = (val - min.value) / (max.value - min.value) * 100;
12314
12402
  return clamp(isNaN(percentage) ? 0 : percentage, 0, 100);
12315
12403
  };
12404
+ const showTicks = vue.toRef(props, 'showTicks');
12316
12405
  const parsedTicks = vue.computed(() => {
12406
+ if (!showTicks.value) return [];
12317
12407
  if (!props.ticks) {
12318
12408
  return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {
12319
12409
  const value = min.value + t * step.value;
@@ -12362,7 +12452,7 @@
12362
12452
  readonly: vue.toRef(props, 'readonly'),
12363
12453
  rounded: vue.toRef(props, 'rounded'),
12364
12454
  roundValue,
12365
- showTicks: vue.toRef(props, 'showTicks'),
12455
+ showTicks,
12366
12456
  startOffset,
12367
12457
  step,
12368
12458
  thumbSize,
@@ -12584,6 +12674,7 @@
12584
12674
  };
12585
12675
  });
12586
12676
  const computedTicks = vue.computed(() => {
12677
+ if (!showTicks.value) return [];
12587
12678
  const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value;
12588
12679
  return ticks.map((tick, index) => {
12589
12680
  const directionProperty = vertical.value ? 'bottom' : 'margin-inline-start';
@@ -13703,7 +13794,13 @@
13703
13794
  "key": item.value,
13704
13795
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
13705
13796
  "style": index === selectionIndex.value ? textColorStyles.value : {}
13706
- }, [hasChips ? vue.createVNode(VDefaultsProvider, {
13797
+ }, [hasChips ? !slots.chip ? vue.createVNode(VChip, vue.mergeProps({
13798
+ "key": "chip",
13799
+ "closable": props.closableChips,
13800
+ "size": "small",
13801
+ "text": item.title
13802
+ }, slotProps), null) : vue.createVNode(VDefaultsProvider, {
13803
+ "key": "chip-defaults",
13707
13804
  "defaults": {
13708
13805
  VChip: {
13709
13806
  closable: props.closableChips,
@@ -13712,15 +13809,15 @@
13712
13809
  }
13713
13810
  }
13714
13811
  }, {
13715
- default: () => [slots.chip ? slots.chip({
13812
+ default: () => [slots.chip?.({
13716
13813
  item,
13717
13814
  index,
13718
13815
  props: slotProps
13719
- }) : vue.createVNode(VChip, slotProps, null)]
13720
- }) : slots.selection ? slots.selection({
13816
+ })]
13817
+ }) : slots.selection?.({
13721
13818
  item,
13722
13819
  index
13723
- }) : vue.createVNode("span", {
13820
+ }) ?? vue.createVNode("span", {
13724
13821
  "class": "v-combobox__selection-text"
13725
13822
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
13726
13823
  "class": "v-combobox__selection-comma"
@@ -14221,6 +14318,7 @@
14221
14318
  "id": id.value,
14222
14319
  "active": isDirty.value || isFocused.value,
14223
14320
  "dirty": isDirty.value,
14321
+ "disabled": isDisabled.value,
14224
14322
  "focused": isFocused.value,
14225
14323
  "error": isValid.value === false
14226
14324
  }), {
@@ -16857,19 +16955,18 @@
16857
16955
  "modelValue": isActive.value,
16858
16956
  "onUpdate:modelValue": $event => isActive.value = $event,
16859
16957
  "contentProps": vue.mergeProps({
16860
- style: locationStyles.value
16958
+ class: ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16959
+ style: [locationStyles.value, colorStyles.value],
16960
+ onPointerenter,
16961
+ onPointerleave: startTimeout
16861
16962
  }, overlayProps.contentProps),
16862
16963
  "persistent": true,
16863
16964
  "noClickAnimation": true,
16864
16965
  "scrim": false,
16865
- "scrollStrategy": "none"
16966
+ "scrollStrategy": "none",
16967
+ "_disableGlobalStack": true
16866
16968
  }, scopeId), {
16867
- default: () => [vue.createVNode("div", {
16868
- "class": ['v-snackbar__wrapper', themeClasses.value, colorClasses.value, roundedClasses.value, variantClasses.value],
16869
- "style": [colorStyles.value],
16870
- "onPointerenter": onPointerenter,
16871
- "onPointerleave": startTimeout
16872
- }, [genOverlays(false, 'v-snackbar'), slots.default && vue.createVNode("div", {
16969
+ default: () => [genOverlays(false, 'v-snackbar'), slots.default && vue.createVNode("div", {
16873
16970
  "class": "v-snackbar__content",
16874
16971
  "role": "status",
16875
16972
  "aria-live": "polite"
@@ -16884,7 +16981,7 @@
16884
16981
  default: () => [vue.createVNode("div", {
16885
16982
  "class": "v-snackbar__actions"
16886
16983
  }, [slots.actions()])]
16887
- })])],
16984
+ })],
16888
16985
  activator: slots.activator
16889
16986
  });
16890
16987
  });
@@ -17233,16 +17330,6 @@
17233
17330
  backgroundColorClasses,
17234
17331
  backgroundColorStyles
17235
17332
  } = useBackgroundColor(vue.toRef(props, 'bgColor'));
17236
- provideDefaults({
17237
- VTab: {
17238
- color: vue.toRef(props, 'color'),
17239
- direction: vue.toRef(props, 'direction'),
17240
- stacked: vue.toRef(props, 'stacked'),
17241
- fixed: vue.toRef(props, 'fixedTabs'),
17242
- sliderColor: vue.toRef(props, 'sliderColor'),
17243
- hideSlider: vue.toRef(props, 'hideSlider')
17244
- }
17245
- });
17246
17333
  useRender(() => vue.createVNode(VSlideGroup, {
17247
17334
  "modelValue": model.value,
17248
17335
  "onUpdate:modelValue": $event => model.value = $event,
@@ -17259,9 +17346,27 @@
17259
17346
  "mandatory": props.mandatory,
17260
17347
  "direction": props.direction
17261
17348
  }, {
17262
- default: () => [slots.default ? slots.default() : parsedItems.value.map(item => vue.createVNode(VTab, vue.mergeProps(item, {
17263
- "key": item.title
17264
- }), null))]
17349
+ default: () => [!slots.default ? parsedItems.value.map(item => vue.createVNode(VTab, vue.mergeProps({
17350
+ "key": item.title,
17351
+ "color": props.color,
17352
+ "direction": props.direction,
17353
+ "fixed": props.fixedTabs,
17354
+ "hideSlider": props.hideSlider,
17355
+ "sliderColor": props.sliderColor,
17356
+ "stacked": props.stacked
17357
+ }, item), null)) : vue.createVNode(VDefaultsProvider, {
17358
+ "key": "tabs-defaults",
17359
+ "defaults": {
17360
+ VTab: {
17361
+ color: props.color,
17362
+ direction: props.direction,
17363
+ fixed: props.fixedTabs,
17364
+ hideSlider: props.hideSlider,
17365
+ sliderColor: props.sliderColor,
17366
+ stacked: props.stacked
17367
+ }
17368
+ }
17369
+ }, slots.default)]
17265
17370
  }));
17266
17371
  return {};
17267
17372
  }
@@ -17486,6 +17591,7 @@
17486
17591
  }, fieldProps, {
17487
17592
  "active": isActive.value || isDirty.value,
17488
17593
  "dirty": isDirty.value || props.dirty,
17594
+ "disabled": isDisabled.value,
17489
17595
  "focused": isFocused.value,
17490
17596
  "error": isValid.value === false
17491
17597
  }), {
@@ -17688,13 +17794,6 @@
17688
17794
  backgroundColorClasses: lineColorClasses,
17689
17795
  backgroundColorStyles: lineColorStyles
17690
17796
  } = useBackgroundColor(vue.toRef(props, 'lineColor'));
17691
- provideDefaults({
17692
- VIcon: {
17693
- color: vue.toRef(props, 'iconColor'),
17694
- icon: vue.toRef(props, 'icon'),
17695
- size: vue.toRef(props, 'size')
17696
- }
17697
- });
17698
17797
  useRender(() => vue.createVNode("div", {
17699
17798
  "class": ['v-timeline-divider', {
17700
17799
  'v-timeline-divider--fill-dot': props.fillDot
@@ -17709,7 +17808,22 @@
17709
17808
  }, [vue.createVNode("div", {
17710
17809
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17711
17810
  "style": backgroundColorStyles.value
17712
- }, [slots.default?.() ?? (props.icon ? vue.createVNode(VIcon, null, null) : undefined)])]), vue.createVNode("div", {
17811
+ }, [!slots.default ? vue.createVNode(VIcon, {
17812
+ "key": "icon",
17813
+ "color": props.iconColor,
17814
+ "icon": props.icon,
17815
+ "size": props.size
17816
+ }, null) : vue.createVNode(VDefaultsProvider, {
17817
+ "key": "icon-defaults",
17818
+ "disabled": !props.icon,
17819
+ "defaults": {
17820
+ VIcon: {
17821
+ color: props.iconColor,
17822
+ icon: props.icon,
17823
+ size: props.size
17824
+ }
17825
+ }
17826
+ }, slots.default)])]), vue.createVNode("div", {
17713
17827
  "class": ['v-timeline-divider__after', lineColorClasses.value],
17714
17828
  "style": lineColorStyles.value
17715
17829
  }, null)]));
@@ -18080,7 +18194,7 @@
18080
18194
  }
18081
18195
  }, 'v-data-table-select');
18082
18196
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18083
- function createSelection(props, allItems) {
18197
+ function provideSelection(props, allItems) {
18084
18198
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18085
18199
  return new Set(v);
18086
18200
  }, v => {
@@ -18140,13 +18254,28 @@
18140
18254
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18141
18255
  function createSort(props) {
18142
18256
  const sortBy = useProxiedModel(props, 'sortBy');
18257
+ const mustSort = vue.toRef(props, 'mustSort');
18258
+ const multiSort = vue.toRef(props, 'multiSort');
18259
+ return {
18260
+ sortBy,
18261
+ mustSort,
18262
+ multiSort
18263
+ };
18264
+ }
18265
+ function provideSort(options) {
18266
+ const {
18267
+ sortBy,
18268
+ mustSort,
18269
+ multiSort,
18270
+ page
18271
+ } = options;
18143
18272
  const toggleSort = key => {
18144
18273
  let newSortBy = sortBy.value.map(x => ({
18145
18274
  ...x
18146
18275
  })) ?? [];
18147
18276
  const item = newSortBy.find(x => x.key === key);
18148
18277
  if (!item) {
18149
- if (props.multiSort) newSortBy = [...newSortBy, {
18278
+ if (multiSort.value) newSortBy = [...newSortBy, {
18150
18279
  key,
18151
18280
  order: 'asc'
18152
18281
  }];else newSortBy = [{
@@ -18154,7 +18283,7 @@
18154
18283
  order: 'asc'
18155
18284
  }];
18156
18285
  } else if (item.order === 'desc') {
18157
- if (props.mustSort) {
18286
+ if (mustSort.value) {
18158
18287
  item.order = 'asc';
18159
18288
  } else {
18160
18289
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -18163,6 +18292,7 @@
18163
18292
  item.order = 'desc';
18164
18293
  }
18165
18294
  sortBy.value = newSortBy;
18295
+ if (page) page.value = 1;
18166
18296
  };
18167
18297
  const data = {
18168
18298
  sortBy,
@@ -18365,9 +18495,6 @@
18365
18495
  });
18366
18496
 
18367
18497
  // Utilities
18368
-
18369
- // Types
18370
-
18371
18498
  const makeDataTableGroupProps = propsFactory({
18372
18499
  groupBy: {
18373
18500
  type: Array,
@@ -18375,7 +18502,17 @@
18375
18502
  }
18376
18503
  }, 'data-table-group');
18377
18504
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18378
- function createGroupBy(props, groupBy, sortBy) {
18505
+ function createGroupBy(props) {
18506
+ const groupBy = useProxiedModel(props, 'groupBy');
18507
+ return {
18508
+ groupBy
18509
+ };
18510
+ }
18511
+ function provideGroupBy(options) {
18512
+ const {
18513
+ groupBy,
18514
+ sortBy
18515
+ } = options;
18379
18516
  const opened = vue.ref(new Set());
18380
18517
  const sortByWithGroups = vue.computed(() => {
18381
18518
  return groupBy.value.map(val => ({
@@ -18585,7 +18722,7 @@
18585
18722
  }
18586
18723
  }, 'v-data-table-expand');
18587
18724
  const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18588
- function createExpanded(props) {
18725
+ function provideExpanded(props) {
18589
18726
  const expandOnClick = vue.toRef(props, 'expandOnClick');
18590
18727
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18591
18728
  return new Set(v);
@@ -18628,7 +18765,8 @@
18628
18765
  const VDataTableRow = defineComponent({
18629
18766
  name: 'VDataTableRow',
18630
18767
  props: {
18631
- item: Object
18768
+ item: Object,
18769
+ onClick: Function
18632
18770
  },
18633
18771
  setup(props, _ref) {
18634
18772
  let {
@@ -18646,7 +18784,10 @@
18646
18784
  columns
18647
18785
  } = useHeaders();
18648
18786
  useRender(() => vue.createVNode("tr", {
18649
- "class": ['v-data-table__tr']
18787
+ "class": ['v-data-table__tr', {
18788
+ 'v-data-table__tr--clickable': !!props.onClick
18789
+ }],
18790
+ "onClick": props.onClick
18650
18791
  }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
18651
18792
  "key": "no-data"
18652
18793
  }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
@@ -18777,7 +18918,7 @@
18777
18918
  "key": `item_${item.value}`,
18778
18919
  "onClick": event => {
18779
18920
  if (expandOnClick.value) {
18780
- toggleExpand(item.value);
18921
+ toggleExpand(item);
18781
18922
  }
18782
18923
  emit('click:row', event, {
18783
18924
  item
@@ -18805,10 +18946,20 @@
18805
18946
  }
18806
18947
  }, 'v-data-table-paginate');
18807
18948
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18808
- function createPagination(props, items) {
18949
+ function createPagination(props) {
18809
18950
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18810
18951
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18811
- const itemsLength = vue.computed(() => +(props.itemsLength ?? items.value.length));
18952
+ return {
18953
+ page,
18954
+ itemsPerPage
18955
+ };
18956
+ }
18957
+ function providePagination(options) {
18958
+ const {
18959
+ page,
18960
+ itemsPerPage,
18961
+ itemsLength
18962
+ } = options;
18812
18963
  const startIndex = vue.computed(() => {
18813
18964
  if (itemsPerPage.value === -1) return 0;
18814
18965
  return itemsPerPage.value * (page.value - 1);
@@ -18821,13 +18972,18 @@
18821
18972
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18822
18973
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18823
18974
  });
18975
+ function setItemsPerPage(value) {
18976
+ itemsPerPage.value = value;
18977
+ page.value = 1;
18978
+ }
18824
18979
  const data = {
18825
18980
  page,
18826
18981
  itemsPerPage,
18982
+ itemsLength,
18827
18983
  startIndex,
18828
18984
  stopIndex,
18829
18985
  pageCount,
18830
- itemsLength
18986
+ setItemsPerPage
18831
18987
  };
18832
18988
  vue.provide(VDataTablePaginationSymbol, data);
18833
18989
  return data;
@@ -18837,7 +18993,13 @@
18837
18993
  if (!data) throw new Error('Missing pagination!');
18838
18994
  return data;
18839
18995
  }
18840
- function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
18996
+ function usePaginatedItems(options) {
18997
+ const {
18998
+ items,
18999
+ startIndex,
19000
+ stopIndex,
19001
+ itemsPerPage
19002
+ } = options;
18841
19003
  const paginatedItems = vue.computed(() => {
18842
19004
  if (itemsPerPage.value <= 0) return items.value;
18843
19005
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -18926,7 +19088,8 @@
18926
19088
  startIndex,
18927
19089
  stopIndex,
18928
19090
  itemsLength,
18929
- itemsPerPage
19091
+ itemsPerPage,
19092
+ setItemsPerPage
18930
19093
  } = usePagination();
18931
19094
  const itemsPerPageOptions = vue.computed(() => props.itemsPerPageOptions.map(option => ({
18932
19095
  ...option,
@@ -18939,7 +19102,7 @@
18939
19102
  }, [vue.createVNode("span", null, [t(props.itemsPerPageText)]), vue.createVNode(VSelect, {
18940
19103
  "items": itemsPerPageOptions.value,
18941
19104
  "modelValue": itemsPerPage.value,
18942
- "onUpdate:modelValue": v => itemsPerPage.value = Number(v),
19105
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
18943
19106
  "density": "compact",
18944
19107
  "variant": "outlined",
18945
19108
  "hide-details": true
@@ -19017,7 +19180,8 @@
19017
19180
  page,
19018
19181
  itemsPerPage,
19019
19182
  sortBy,
19020
- groupBy
19183
+ groupBy,
19184
+ search
19021
19185
  } = _ref;
19022
19186
  const vm = getCurrentInstance('VDataTable');
19023
19187
  const options = vue.computed(() => ({
@@ -19027,15 +19191,8 @@
19027
19191
  groupBy: groupBy.value
19028
19192
  }));
19029
19193
 
19030
- // Reset page when sorting changes
19031
- vue.watch(sortBy, () => {
19032
- page.value = 1;
19033
- }, {
19034
- deep: true
19035
- });
19036
-
19037
- // Reset page when items-per-page changes
19038
- vue.watch(itemsPerPage, () => {
19194
+ // Reset page when searching
19195
+ vue.watch(() => search?.value, () => {
19039
19196
  page.value = 1;
19040
19197
  });
19041
19198
  let oldOptions = null;
@@ -19091,7 +19248,18 @@
19091
19248
  emit,
19092
19249
  slots
19093
19250
  } = _ref;
19094
- const groupBy = useProxiedModel(props, 'groupBy');
19251
+ const {
19252
+ groupBy
19253
+ } = createGroupBy(props);
19254
+ const {
19255
+ sortBy,
19256
+ multiSort,
19257
+ mustSort
19258
+ } = createSort(props);
19259
+ const {
19260
+ page,
19261
+ itemsPerPage
19262
+ } = createPagination(props);
19095
19263
  const {
19096
19264
  columns
19097
19265
  } = createHeaders(props, {
@@ -19103,42 +19271,58 @@
19103
19271
  items
19104
19272
  } = useDataTableItems(props, columns);
19105
19273
  const filterKeys = vue.computed(() => columns.value.map(c => 'columns.' + c.key));
19274
+ const search = vue.toRef(props, 'search');
19106
19275
  const {
19107
19276
  filteredItems
19108
- } = useFilter(props, items, vue.toRef(props, 'search'), {
19277
+ } = useFilter(props, items, search, {
19109
19278
  filterKeys
19110
19279
  });
19111
- const {
19112
- sortBy
19113
- } = createSort(props);
19280
+ provideSort({
19281
+ sortBy,
19282
+ multiSort,
19283
+ mustSort,
19284
+ page
19285
+ });
19114
19286
  const {
19115
19287
  sortByWithGroups,
19116
19288
  opened,
19117
19289
  extractRows
19118
- } = createGroupBy(props, groupBy, sortBy);
19290
+ } = provideGroupBy({
19291
+ groupBy,
19292
+ sortBy
19293
+ });
19119
19294
  const {
19120
19295
  sortedItems
19121
19296
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
19122
19297
  const {
19123
19298
  flatItems
19124
19299
  } = useGroupedItems(sortedItems, groupBy, opened);
19300
+ const itemsLength = vue.computed(() => flatItems.value.length);
19125
19301
  const {
19126
- page,
19127
- itemsPerPage,
19128
19302
  startIndex,
19129
19303
  stopIndex
19130
- } = createPagination(props, flatItems);
19304
+ } = providePagination({
19305
+ page,
19306
+ itemsPerPage,
19307
+ itemsLength
19308
+ });
19131
19309
  const {
19132
19310
  paginatedItems
19133
- } = usePaginatedItems(flatItems, startIndex, stopIndex, itemsPerPage);
19311
+ } = usePaginatedItems({
19312
+ items: flatItems,
19313
+ startIndex,
19314
+ stopIndex,
19315
+ itemsPerPage
19316
+ });
19134
19317
  const paginatedItemsWithoutGroups = vue.computed(() => extractRows(paginatedItems.value));
19135
- createSelection(props, paginatedItemsWithoutGroups);
19136
- createExpanded(props);
19318
+ provideSelection(props, paginatedItemsWithoutGroups);
19319
+ provideExpanded(props);
19137
19320
  useOptions({
19138
19321
  page,
19139
19322
  itemsPerPage,
19140
19323
  sortBy,
19141
- groupBy
19324
+ groupBy,
19325
+ search
19142
19326
  });
19143
19327
  provideDefaults({
19144
19328
  VDataTableRows: {
@@ -19280,7 +19464,14 @@
19280
19464
  emit,
19281
19465
  slots
19282
19466
  } = _ref;
19283
- const groupBy = useProxiedModel(props, 'groupBy');
19467
+ const {
19468
+ groupBy
19469
+ } = createGroupBy(props);
19470
+ const {
19471
+ sortBy,
19472
+ multiSort,
19473
+ mustSort
19474
+ } = createSort(props);
19284
19475
  const {
19285
19476
  columns
19286
19477
  } = createHeaders(props, {
@@ -19292,19 +19483,25 @@
19292
19483
  items
19293
19484
  } = useDataTableItems(props, columns);
19294
19485
  const filterKeys = vue.computed(() => columns.value.map(c => 'columns.' + c.key));
19486
+ const search = vue.toRef(props, 'search');
19295
19487
  const {
19296
19488
  filteredItems
19297
- } = useFilter(props, items, vue.toRef(props, 'search'), {
19489
+ } = useFilter(props, items, search, {
19298
19490
  filterKeys
19299
19491
  });
19300
- const {
19301
- sortBy
19302
- } = createSort(props);
19492
+ provideSort({
19493
+ sortBy,
19494
+ multiSort,
19495
+ mustSort
19496
+ });
19303
19497
  const {
19304
19498
  sortByWithGroups,
19305
19499
  opened,
19306
19500
  extractRows
19307
- } = createGroupBy(props, groupBy, sortBy);
19501
+ } = provideGroupBy({
19502
+ groupBy,
19503
+ sortBy
19504
+ });
19308
19505
  const {
19309
19506
  sortedItems
19310
19507
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -19312,8 +19509,8 @@
19312
19509
  flatItems
19313
19510
  } = useGroupedItems(sortedItems, groupBy, opened);
19314
19511
  const allRows = vue.computed(() => extractRows(flatItems.value));
19315
- createSelection(props, allRows);
19316
- createExpanded(props);
19512
+ provideSelection(props, allRows);
19513
+ provideExpanded(props);
19317
19514
  const {
19318
19515
  containerRef,
19319
19516
  paddingTop,
@@ -19330,7 +19527,8 @@
19330
19527
  sortBy,
19331
19528
  page: vue.ref(1),
19332
19529
  itemsPerPage: vue.ref(-1),
19333
- groupBy
19530
+ groupBy,
19531
+ search
19334
19532
  });
19335
19533
  provideDefaults({
19336
19534
  VDataTableRows: {
@@ -19399,7 +19597,10 @@
19399
19597
  type: String,
19400
19598
  default: '$vuetify.dataIterator.loadingText'
19401
19599
  },
19402
- itemsLength: [Number, String],
19600
+ itemsLength: {
19601
+ type: [Number, String],
19602
+ required: true
19603
+ },
19403
19604
  ...makeVDataTableProps(),
19404
19605
  ...makeDataTableExpandProps(),
19405
19606
  ...makeDataTableHeaderProps(),
@@ -19424,8 +19625,20 @@
19424
19625
  emit,
19425
19626
  slots
19426
19627
  } = _ref;
19427
- const groupBy = useProxiedModel(props, 'groupBy');
19428
- createExpanded(props);
19628
+ const {
19629
+ groupBy
19630
+ } = createGroupBy(props);
19631
+ const {
19632
+ sortBy,
19633
+ multiSort,
19634
+ mustSort
19635
+ } = createSort(props);
19636
+ const {
19637
+ page,
19638
+ itemsPerPage
19639
+ } = createPagination(props);
19640
+ const itemsLength = vue.computed(() => parseInt(props.itemsLength, 10));
19641
+ provideExpanded(props);
19429
19642
  const {
19430
19643
  columns
19431
19644
  } = createHeaders(props, {
@@ -19437,20 +19650,28 @@
19437
19650
  items
19438
19651
  } = useDataTableItems(props, columns);
19439
19652
  const {
19440
- sortBy,
19441
19653
  toggleSort
19442
- } = createSort(props);
19654
+ } = provideSort({
19655
+ sortBy,
19656
+ multiSort,
19657
+ mustSort,
19658
+ page
19659
+ });
19443
19660
  const {
19444
19661
  opened
19445
- } = createGroupBy(props, groupBy, sortBy);
19446
- const {
19662
+ } = provideGroupBy({
19663
+ groupBy,
19664
+ sortBy
19665
+ });
19666
+ providePagination({
19447
19667
  page,
19448
- itemsPerPage
19449
- } = createPagination(props, items);
19668
+ itemsPerPage,
19669
+ itemsLength
19670
+ });
19450
19671
  const {
19451
19672
  flatItems
19452
19673
  } = useGroupedItems(items, groupBy, opened);
19453
- createSelection(props, items);
19674
+ provideSelection(props, items);
19454
19675
  useOptions({
19455
19676
  page,
19456
19677
  itemsPerPage,
@@ -20021,7 +20242,7 @@
20021
20242
  locale
20022
20243
  };
20023
20244
  }
20024
- const version$1 = "3.1.7";
20245
+ const version$1 = "3.1.9";
20025
20246
  createVuetify$1.version = version$1;
20026
20247
 
20027
20248
  // Vue's inject() can only be used in setup
@@ -20033,7 +20254,7 @@
20033
20254
  }
20034
20255
  }
20035
20256
 
20036
- const version = "3.1.7";
20257
+ const version = "3.1.9";
20037
20258
 
20038
20259
  const createVuetify = function () {
20039
20260
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};