vuetify 3.1.8 → 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 (107) hide show
  1. package/dist/json/attributes.json +7 -3
  2. package/dist/json/importMap.json +40 -40
  3. package/dist/json/tags.json +1 -0
  4. package/dist/json/web-types.json +51 -17
  5. package/dist/vuetify-labs.css +288 -268
  6. package/dist/vuetify-labs.d.ts +14 -7
  7. package/dist/vuetify-labs.esm.js +460 -250
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +460 -250
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +1253 -1236
  12. package/dist/vuetify.d.ts +18 -13
  13. package/dist/vuetify.esm.js +306 -193
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +306 -193
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +411 -408
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAlert/VAlert.mjs +29 -15
  21. package/lib/components/VAlert/VAlert.mjs.map +1 -1
  22. package/lib/components/VAlert/index.d.ts +2 -0
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs +11 -5
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  25. package/lib/components/VBanner/VBanner.mjs +19 -12
  26. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  27. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +11 -7
  28. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  29. package/lib/components/VBtn/VBtn.mjs +25 -19
  30. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  31. package/lib/components/VCard/VCard.mjs +10 -6
  32. package/lib/components/VCard/VCard.mjs.map +1 -1
  33. package/lib/components/VCard/VCardItem.mjs +27 -23
  34. package/lib/components/VCard/VCardItem.mjs.map +1 -1
  35. package/lib/components/VChip/VChip.css +110 -90
  36. package/lib/components/VChip/VChip.mjs +70 -48
  37. package/lib/components/VChip/VChip.mjs.map +1 -1
  38. package/lib/components/VChip/_mixins.scss +27 -23
  39. package/lib/components/VChip/index.d.ts +2 -2
  40. package/lib/components/VCombobox/VCombobox.mjs +11 -5
  41. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  42. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs +4 -1
  43. package/lib/components/VDefaultsProvider/VDefaultsProvider.mjs.map +1 -1
  44. package/lib/components/VDefaultsProvider/index.d.ts +3 -0
  45. package/lib/components/VFooter/VFooter.css +2 -0
  46. package/lib/components/VFooter/VFooter.sass +2 -0
  47. package/lib/components/VFooter/_variables.scss +2 -0
  48. package/lib/components/VImg/VImg.mjs +2 -2
  49. package/lib/components/VImg/VImg.mjs.map +1 -1
  50. package/lib/components/VList/VListItem.mjs +23 -19
  51. package/lib/components/VList/VListItem.mjs.map +1 -1
  52. package/lib/components/VSelect/VSelect.mjs +11 -5
  53. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  54. package/lib/components/VSlider/VSliderTrack.mjs +1 -0
  55. package/lib/components/VSlider/VSliderTrack.mjs.map +1 -1
  56. package/lib/components/VSlider/slider.mjs +3 -1
  57. package/lib/components/VSlider/slider.mjs.map +1 -1
  58. package/lib/components/VSnackbar/VSnackbar.css +2 -7
  59. package/lib/components/VSnackbar/VSnackbar.mjs +2 -1
  60. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  61. package/lib/components/VSnackbar/VSnackbar.sass +3 -8
  62. package/lib/components/VTabs/VTabs.mjs +23 -15
  63. package/lib/components/VTabs/VTabs.mjs.map +1 -1
  64. package/lib/components/VTimeline/VTimelineDivider.mjs +18 -10
  65. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  66. package/lib/components/VToolbar/VToolbar.mjs +9 -5
  67. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  68. package/lib/components/index.d.ts +7 -2
  69. package/lib/composables/defaults.mjs +2 -0
  70. package/lib/composables/defaults.mjs.map +1 -1
  71. package/lib/entry-bundler.mjs +1 -1
  72. package/lib/framework.mjs +1 -1
  73. package/lib/index.d.ts +11 -11
  74. package/lib/labs/VDataTable/VDataTable.css +3 -0
  75. package/lib/labs/VDataTable/VDataTable.mjs +41 -17
  76. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  77. package/lib/labs/VDataTable/VDataTable.sass +3 -0
  78. package/lib/labs/VDataTable/VDataTableFooter.mjs +3 -2
  79. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  80. package/lib/labs/VDataTable/VDataTableRow.mjs +6 -2
  81. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -1
  82. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  83. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  84. package/lib/labs/VDataTable/VDataTableServer.mjs +39 -17
  85. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  86. package/lib/labs/VDataTable/VDataTableVirtual.mjs +23 -12
  87. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  88. package/lib/labs/VDataTable/composables/expand.mjs +1 -1
  89. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -1
  90. package/lib/labs/VDataTable/composables/group.mjs +12 -1
  91. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  92. package/lib/labs/VDataTable/composables/options.mjs +0 -12
  93. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  94. package/lib/labs/VDataTable/composables/paginate.mjs +25 -4
  95. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  96. package/lib/labs/VDataTable/composables/select.mjs +1 -1
  97. package/lib/labs/VDataTable/composables/select.mjs.map +1 -1
  98. package/lib/labs/VDataTable/composables/sort.mjs +19 -3
  99. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  100. package/lib/labs/VDataTable/index.d.ts +7 -5
  101. package/lib/labs/components.d.ts +7 -5
  102. package/lib/locale/adapters/vue-i18n.d.ts +1 -1
  103. package/lib/locale/adapters/vue-i18n.mjs +1 -1
  104. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  105. package/lib/util/defineComponent.mjs +3 -2
  106. package/lib/util/defineComponent.mjs.map +1 -1
  107. package/package.json +5 -11
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.1.8
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();
@@ -2157,6 +2160,7 @@
2157
2160
  name: 'VDefaultsProvider',
2158
2161
  props: {
2159
2162
  defaults: Object,
2163
+ disabled: Boolean,
2160
2164
  reset: [Number, String],
2161
2165
  root: Boolean,
2162
2166
  scoped: Boolean
@@ -2167,6 +2171,7 @@
2167
2171
  } = _ref;
2168
2172
  const {
2169
2173
  defaults,
2174
+ disabled,
2170
2175
  reset,
2171
2176
  root,
2172
2177
  scoped
@@ -2174,7 +2179,8 @@
2174
2179
  provideDefaults(defaults, {
2175
2180
  reset,
2176
2181
  root,
2177
- scoped
2182
+ scoped,
2183
+ disabled
2178
2184
  });
2179
2185
  return () => slots.default?.();
2180
2186
  }
@@ -2796,7 +2802,7 @@
2796
2802
  "class": ['v-img__img', containClasses.value],
2797
2803
  "src": normalisedSrc.value.src,
2798
2804
  "srcset": normalisedSrc.value.srcset,
2799
- "alt": "",
2805
+ "alt": props.alt,
2800
2806
  "sizes": props.sizes,
2801
2807
  "ref": image,
2802
2808
  "onLoad": onLoad,
@@ -2818,7 +2824,7 @@
2818
2824
  default: () => [normalisedSrc.value.lazySrc && state.value !== 'loaded' && vue.createVNode("img", {
2819
2825
  "class": ['v-img__img', 'v-img__img--preload', containClasses.value],
2820
2826
  "src": normalisedSrc.value.lazySrc,
2821
- "alt": ""
2827
+ "alt": props.alt
2822
2828
  }, null)]
2823
2829
  });
2824
2830
  const __placeholder = () => {
@@ -3160,16 +3166,20 @@
3160
3166
  default: () => [hasImage && vue.createVNode("div", {
3161
3167
  "key": "image",
3162
3168
  "class": "v-toolbar__image"
3163
- }, [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,
3164
3176
  "defaults": {
3165
3177
  VImg: {
3166
3178
  cover: true,
3167
3179
  src: props.image
3168
3180
  }
3169
3181
  }
3170
- }, {
3171
- default: () => [slots.image ? slots.image?.() : vue.createVNode(VImg, null, null)]
3172
- })]), vue.createVNode(VDefaultsProvider, {
3182
+ }, slots.image)]), vue.createVNode(VDefaultsProvider, {
3173
3183
  "defaults": {
3174
3184
  VTabs: {
3175
3185
  height: convertToUnit(contentHeight.value)
@@ -4890,43 +4900,49 @@
4890
4900
  },
4891
4901
  "value": valueAttr.value
4892
4902
  }, {
4893
- default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode(VDefaultsProvider, {
4903
+ default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode("span", {
4894
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,
4895
4912
  "defaults": {
4896
4913
  VIcon: {
4897
4914
  icon: props.prependIcon
4898
4915
  }
4899
4916
  }
4900
- }, {
4901
- default: () => [vue.createVNode("span", {
4902
- "class": "v-btn__prepend"
4903
- }, [slots.prepend?.() ?? vue.createVNode(VIcon, null, null)])]
4904
- }), vue.createVNode("span", {
4917
+ }, slots.prepend)]), vue.createVNode("span", {
4905
4918
  "class": "v-btn__content",
4906
4919
  "data-no-activator": ""
4907
- }, [vue.createVNode(VDefaultsProvider, {
4908
- "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,
4909
4926
  "defaults": {
4910
4927
  VIcon: {
4911
- icon: hasIcon ? props.icon : undefined
4928
+ icon: props.icon
4912
4929
  }
4913
4930
  }
4914
- }, {
4915
- default: () => [slots.default?.() ?? (hasIcon && vue.createVNode(VIcon, {
4916
- "key": "icon"
4917
- }, null))]
4918
- })]), !props.icon && hasAppend && vue.createVNode(VDefaultsProvider, {
4931
+ }, slots.default)]), !props.icon && hasAppend && vue.createVNode("span", {
4919
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,
4920
4940
  "defaults": {
4921
4941
  VIcon: {
4922
4942
  icon: props.appendIcon
4923
4943
  }
4924
4944
  }
4925
- }, {
4926
- default: () => [vue.createVNode("span", {
4927
- "class": "v-btn__append"
4928
- }, [slots.append?.() ?? vue.createVNode(VIcon, null, null)])]
4929
- }), !!props.loading && vue.createVNode("span", {
4945
+ }, slots.append)]), !!props.loading && vue.createVNode("span", {
4930
4946
  "key": "loader",
4931
4947
  "class": "v-btn__loader"
4932
4948
  }, [slots.loader?.() ?? vue.createVNode(VProgressCircular, {
@@ -5055,10 +5071,12 @@
5055
5071
  })
5056
5072
  },
5057
5073
  emits: {
5074
+ 'click:close': e => true,
5058
5075
  'update:modelValue': value => true
5059
5076
  },
5060
5077
  setup(props, _ref) {
5061
5078
  let {
5079
+ emit,
5062
5080
  slots
5063
5081
  } = _ref;
5064
5082
  const isActive = useProxiedModel(props, 'modelValue');
@@ -5108,6 +5126,7 @@
5108
5126
  'aria-label': t(props.closeLabel),
5109
5127
  onClick(e) {
5110
5128
  isActive.value = false;
5129
+ emit('click:close', e);
5111
5130
  }
5112
5131
  }));
5113
5132
  return () => {
@@ -5129,8 +5148,17 @@
5129
5148
  "key": "border",
5130
5149
  "class": ['v-alert__border', textColorClasses.value],
5131
5150
  "style": textColorStyles.value
5132
- }, null), hasPrepend && vue.createVNode(VDefaultsProvider, {
5151
+ }, null), hasPrepend && vue.createVNode("div", {
5133
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,
5134
5162
  "defaults": {
5135
5163
  VIcon: {
5136
5164
  density: props.density,
@@ -5138,21 +5166,25 @@
5138
5166
  size: props.prominent ? 44 : 28
5139
5167
  }
5140
5168
  }
5141
- }, {
5142
- default: () => [vue.createVNode("div", {
5143
- "class": "v-alert__prepend"
5144
- }, [slots.prepend ? slots.prepend() : icon.value && vue.createVNode(VIcon, null, null)])]
5145
- }), vue.createVNode("div", {
5169
+ }, slots.prepend)]), vue.createVNode("div", {
5146
5170
  "class": "v-alert__content"
5147
5171
  }, [hasTitle && vue.createVNode(VAlertTitle, {
5148
5172
  "key": "title"
5149
5173
  }, {
5150
- default: () => [slots.title ? slots.title() : props.title]
5151
- }), 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", {
5152
5176
  "key": "append",
5153
5177
  "class": "v-alert__append"
5154
- }, [slots.append()]), hasClose && vue.createVNode(VDefaultsProvider, {
5178
+ }, [slots.append()]), hasClose && vue.createVNode("div", {
5155
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",
5156
5188
  "defaults": {
5157
5189
  VBtn: {
5158
5190
  icon: props.closeIcon,
@@ -5161,12 +5193,10 @@
5161
5193
  }
5162
5194
  }
5163
5195
  }, {
5164
- default: () => [vue.createVNode("div", {
5165
- "class": "v-alert__close"
5166
- }, [slots.close?.({
5196
+ default: () => [slots.close?.({
5167
5197
  props: closeProps.value
5168
- }) ?? vue.createVNode(VBtn, closeProps.value, null)])]
5169
- })]
5198
+ })]
5199
+ })])]
5170
5200
  });
5171
5201
  };
5172
5202
  }
@@ -6831,10 +6861,13 @@
6831
6861
  const link = useLink(props, attrs);
6832
6862
  const isLink = vue.computed(() => props.link !== false && link.isLink.value);
6833
6863
  const isClickable = vue.computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6834
- function onCloseClick(e) {
6835
- isActive.value = false;
6836
- emit('click:close', e);
6837
- }
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
+ }));
6838
6871
  function onClick(e) {
6839
6872
  emit('click', e);
6840
6873
  if (!isClickable.value) return;
@@ -6849,10 +6882,12 @@
6849
6882
  }
6850
6883
  return () => {
6851
6884
  const Tag = link.isLink.value ? 'a' : props.tag;
6852
- const hasAppend = !!(slots.append || props.appendIcon || props.appendAvatar);
6885
+ const hasAppendMedia = !!(props.appendIcon || props.appendAvatar);
6886
+ const hasAppend = !!(hasAppendMedia || slots.append);
6853
6887
  const hasClose = !!(slots.close || props.closable);
6854
6888
  const hasFilter = !!(slots.filter || props.filter) && group;
6855
- const hasPrepend = !!(slots.prepend || props.prependIcon || props.prependAvatar);
6889
+ const hasPrependMedia = !!(props.prependIcon || props.prependAvatar);
6890
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
6856
6891
  const hasColor = !group || group.isSelected.value;
6857
6892
  return isActive.value && vue.withDirectives(vue.createVNode(Tag, {
6858
6893
  "class": ['v-chip', {
@@ -6870,77 +6905,94 @@
6870
6905
  "onClick": onClick,
6871
6906
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
6872
6907
  }, {
6873
- default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VDefaultsProvider, {
6874
- "key": "filter",
6875
- "defaults": {
6876
- VIcon: {
6877
- icon: props.filterIcon
6878
- }
6879
- }
6908
+ default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && vue.createVNode(VExpandXTransition, {
6909
+ "key": "filter"
6880
6910
  }, {
6881
- default: () => [vue.createVNode(VExpandXTransition, null, {
6882
- default: () => [vue.withDirectives(vue.createVNode("div", {
6883
- "class": "v-chip__filter"
6884
- }, [slots.filter ? slots.filter() : vue.createVNode(VIcon, null, null)]), [[vue.vShow, group.isSelected.value]])]
6885
- })]
6886
- }), 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", {
6887
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,
6888
6939
  "defaults": {
6889
6940
  VAvatar: {
6890
- image: props.prependAvatar
6941
+ image: props.prependAvatar,
6942
+ start: true
6891
6943
  },
6892
6944
  VIcon: {
6893
- icon: props.prependIcon
6945
+ icon: props.prependIcon,
6946
+ start: true
6894
6947
  }
6895
6948
  }
6896
- }, {
6897
- default: () => [slots.prepend ? vue.createVNode("div", {
6898
- "class": "v-chip__prepend"
6899
- }, [slots.prepend()]) : props.prependAvatar ? vue.createVNode(VAvatar, {
6900
- "start": true
6901
- }, null) : props.prependIcon ? vue.createVNode(VIcon, {
6902
- "start": true
6903
- }, null) : undefined]
6904
- }), slots.default?.({
6949
+ }, slots.prepend)]), slots.default?.({
6905
6950
  isSelected: group?.isSelected.value,
6906
6951
  selectedClass: group?.selectedClass.value,
6907
6952
  select: group?.select,
6908
6953
  toggle: group?.toggle,
6909
6954
  value: group?.value.value,
6910
6955
  disabled: props.disabled
6911
- }) ?? props.text, hasAppend && vue.createVNode(VDefaultsProvider, {
6956
+ }) ?? props.text, hasAppend && vue.createVNode("div", {
6912
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,
6913
6970
  "defaults": {
6914
6971
  VAvatar: {
6972
+ end: true,
6915
6973
  image: props.appendAvatar
6916
6974
  },
6917
6975
  VIcon: {
6976
+ end: true,
6918
6977
  icon: props.appendIcon
6919
6978
  }
6920
6979
  }
6921
- }, {
6922
- default: () => [slots.append ? vue.createVNode("div", {
6923
- "class": "v-chip__append"
6924
- }, [slots.append()]) : props.appendAvatar ? vue.createVNode(VAvatar, {
6925
- "end": true
6926
- }, null) : props.appendIcon ? vue.createVNode(VIcon, {
6927
- "end": true
6928
- }, null) : undefined]
6929
- }), hasClose && vue.createVNode(VDefaultsProvider, {
6980
+ }, slots.append)]), hasClose && vue.createVNode("div", vue.mergeProps({
6930
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",
6931
6989
  "defaults": {
6932
6990
  VIcon: {
6933
6991
  icon: props.closeIcon,
6934
6992
  size: 'x-small'
6935
6993
  }
6936
6994
  }
6937
- }, {
6938
- default: () => [vue.createVNode("div", {
6939
- "class": "v-chip__close",
6940
- "aria-label": t(props.closeLabel),
6941
- "onClick": onCloseClick
6942
- }, [slots.close ? slots.close() : vue.createVNode(VIcon, null, null)])]
6943
- })]
6995
+ }, slots.close)])]
6944
6996
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple, null]]);
6945
6997
  };
6946
6998
  }
@@ -7690,8 +7742,10 @@
7690
7742
  const hasColor = !list || isSelected.value || isActive.value;
7691
7743
  const hasTitle = slots.title || props.title;
7692
7744
  const hasSubtitle = slots.subtitle || props.subtitle;
7693
- const hasAppend = !!(slots.append || props.appendAvatar || props.appendIcon);
7694
- 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);
7695
7749
  list?.updateHasPrepend(hasPrepend);
7696
7750
  return vue.withDirectives(vue.createVNode(Tag, {
7697
7751
  "class": ['v-list-item', {
@@ -7711,7 +7765,7 @@
7711
7765
  default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode("div", {
7712
7766
  "key": "prepend",
7713
7767
  "class": "v-list-item__prepend"
7714
- }, [props.prependAvatar && vue.createVNode(VAvatar, {
7768
+ }, [!slots.prepend ? vue.createVNode(vue.Fragment, null, [props.prependAvatar && vue.createVNode(VAvatar, {
7715
7769
  "key": "prepend-avatar",
7716
7770
  "density": props.density,
7717
7771
  "image": props.prependAvatar
@@ -7719,8 +7773,9 @@
7719
7773
  "key": "prepend-icon",
7720
7774
  "density": props.density,
7721
7775
  "icon": props.prependIcon
7722
- }, null), slots.prepend && vue.createVNode(VDefaultsProvider, {
7723
- "key": "prepend",
7776
+ }, null)]) : vue.createVNode(VDefaultsProvider, {
7777
+ "key": "prepend-defaults",
7778
+ "disabled": !hasPrependMedia,
7724
7779
  "defaults": {
7725
7780
  VAvatar: {
7726
7781
  density: props.density,
@@ -7735,7 +7790,7 @@
7735
7790
  }
7736
7791
  }
7737
7792
  }, {
7738
- default: () => [slots.prepend(slotProps.value)]
7793
+ default: () => [slots.prepend?.(slotProps.value)]
7739
7794
  })]), vue.createVNode("div", {
7740
7795
  "class": "v-list-item__content",
7741
7796
  "data-no-activator": ""
@@ -7754,8 +7809,17 @@
7754
7809
  }), slots.default?.(slotProps.value)]), hasAppend && vue.createVNode("div", {
7755
7810
  "key": "append",
7756
7811
  "class": "v-list-item__append"
7757
- }, [slots.append && vue.createVNode(VDefaultsProvider, {
7758
- "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,
7759
7823
  "defaults": {
7760
7824
  VAvatar: {
7761
7825
  density: props.density,
@@ -7770,16 +7834,8 @@
7770
7834
  }
7771
7835
  }
7772
7836
  }, {
7773
- default: () => [slots.append(slotProps.value)]
7774
- }), props.appendIcon && vue.createVNode(VIcon, {
7775
- "key": "append-icon",
7776
- "density": props.density,
7777
- "icon": props.appendIcon
7778
- }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7779
- "key": "append-avatar",
7780
- "density": props.density,
7781
- "image": props.appendAvatar
7782
- }, null)])]
7837
+ default: () => [slots.append?.(slotProps.value)]
7838
+ })])]
7783
7839
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7784
7840
  });
7785
7841
  return {};
@@ -9988,7 +10044,13 @@
9988
10044
  return vue.createVNode("div", {
9989
10045
  "key": item.value,
9990
10046
  "class": "v-select__selection"
9991
- }, [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",
9992
10054
  "defaults": {
9993
10055
  VChip: {
9994
10056
  closable: props.closableChips,
@@ -9997,15 +10059,15 @@
9997
10059
  }
9998
10060
  }
9999
10061
  }, {
10000
- default: () => [slots.chip ? slots.chip({
10062
+ default: () => [slots.chip?.({
10001
10063
  item,
10002
10064
  index,
10003
10065
  props: slotProps
10004
- }) : vue.createVNode(VChip, slotProps, null)]
10005
- }) : slots.selection ? slots.selection({
10066
+ })]
10067
+ }) : slots.selection?.({
10006
10068
  item,
10007
10069
  index
10008
- }) : vue.createVNode("span", {
10070
+ }) ?? vue.createVNode("span", {
10009
10071
  "class": "v-select__selection-text"
10010
10072
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10011
10073
  "class": "v-select__selection-comma"
@@ -10377,7 +10439,13 @@
10377
10439
  return vue.createVNode("div", {
10378
10440
  "key": item.value,
10379
10441
  "class": "v-autocomplete__selection"
10380
- }, [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",
10381
10449
  "defaults": {
10382
10450
  VChip: {
10383
10451
  closable: props.closableChips,
@@ -10386,15 +10454,15 @@
10386
10454
  }
10387
10455
  }
10388
10456
  }, {
10389
- default: () => [slots.chip ? slots.chip({
10457
+ default: () => [slots.chip?.({
10390
10458
  item,
10391
10459
  index,
10392
10460
  props: slotProps
10393
- }) : vue.createVNode(VChip, slotProps, null)]
10394
- }) : slots.selection ? slots.selection({
10461
+ })]
10462
+ }) : slots.selection?.({
10395
10463
  item,
10396
10464
  index
10397
- }) : vue.createVNode("span", {
10465
+ }) ?? vue.createVNode("span", {
10398
10466
  "class": "v-autocomplete__selection-text"
10399
10467
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
10400
10468
  "class": "v-autocomplete__selection-comma"
@@ -10595,7 +10663,8 @@
10595
10663
  });
10596
10664
  useRender(() => {
10597
10665
  const hasText = !!(props.text || slots.text);
10598
- const hasPrepend = !!(slots.prepend || props.avatar || props.icon);
10666
+ const hasPrependMedia = !!(props.avatar || props.icon);
10667
+ const hasPrepend = !!(hasPrependMedia || slots.prepend);
10599
10668
  return vue.createVNode(props.tag, {
10600
10669
  "class": ['v-banner', {
10601
10670
  'v-banner--stacked': props.stacked || mobile.value,
@@ -10605,8 +10674,18 @@
10605
10674
  "style": [dimensionStyles.value, locationStyles.value],
10606
10675
  "role": "banner"
10607
10676
  }, {
10608
- default: () => [hasPrepend && vue.createVNode(VDefaultsProvider, {
10677
+ default: () => [hasPrepend && vue.createVNode("div", {
10609
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,
10610
10689
  "defaults": {
10611
10690
  VAvatar: {
10612
10691
  color: color.value,
@@ -10615,19 +10694,15 @@
10615
10694
  image: props.avatar
10616
10695
  }
10617
10696
  }
10618
- }, {
10619
- default: () => [vue.createVNode("div", {
10620
- "class": "v-banner__prepend"
10621
- }, [slots.prepend ? slots.prepend() : (props.avatar || props.icon) && vue.createVNode(VAvatar, null, null)])]
10622
- }), vue.createVNode("div", {
10697
+ }, slots.prepend)]), vue.createVNode("div", {
10623
10698
  "class": "v-banner__content"
10624
10699
  }, [hasText && vue.createVNode(VBannerText, {
10625
10700
  "key": "text"
10626
10701
  }, {
10627
- default: () => [slots.text ? slots.text() : props.text]
10628
- }), slots.default?.()]), slots.actions && vue.createVNode(VBannerActions, null, {
10629
- default: () => [slots.actions()]
10630
- })]
10702
+ default: () => [slots.text?.() ?? props.text]
10703
+ }), slots.default?.()]), slots.actions && vue.createVNode(VBannerActions, {
10704
+ "key": "actions"
10705
+ }, slots.actions)]
10631
10706
  });
10632
10707
  });
10633
10708
  }
@@ -10860,19 +10935,23 @@
10860
10935
  "class": ['v-breadcrumbs', backgroundColorClasses.value, densityClasses.value, roundedClasses.value],
10861
10936
  "style": backgroundColorStyles.value
10862
10937
  }, {
10863
- default: () => [hasPrepend && vue.createVNode(VDefaultsProvider, {
10938
+ default: () => [hasPrepend && vue.createVNode("div", {
10864
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,
10865
10948
  "defaults": {
10866
10949
  VIcon: {
10867
10950
  icon: props.icon,
10868
10951
  start: true
10869
10952
  }
10870
10953
  }
10871
- }, {
10872
- default: () => [vue.createVNode("div", {
10873
- "class": "v-breadcrumbs__prepend"
10874
- }, [slots.prepend ? slots.prepend() : props.icon && vue.createVNode(VIcon, null, null)])]
10875
- }), 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({
10876
10955
  "key": index,
10877
10956
  "disabled": index >= array.length - 1
10878
10957
  }, typeof item === 'string' ? {
@@ -10936,30 +11015,33 @@
10936
11015
  slots
10937
11016
  } = _ref;
10938
11017
  useRender(() => {
10939
- const hasPrepend = !!(props.prependAvatar || props.prependIcon || slots.prepend);
10940
- 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);
10941
11022
  const hasTitle = !!(props.title || slots.title);
10942
11023
  const hasSubtitle = !!(props.subtitle || slots.subtitle);
10943
11024
  return vue.createVNode("div", {
10944
11025
  "class": "v-card-item"
10945
- }, [hasPrepend && vue.createVNode(VDefaultsProvider, {
11026
+ }, [hasPrepend && vue.createVNode("div", {
10946
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,
10947
11037
  "defaults": {
10948
11038
  VAvatar: {
10949
11039
  density: props.density,
10950
11040
  icon: props.prependIcon,
10951
11041
  image: props.prependAvatar
10952
- },
10953
- VIcon: {
10954
- density: props.density,
10955
- icon: props.prependIcon
10956
11042
  }
10957
11043
  }
10958
- }, {
10959
- default: () => [vue.createVNode("div", {
10960
- "class": "v-card-item__prepend"
10961
- }, [slots.prepend?.() ?? vue.createVNode(VAvatar, null, null)])]
10962
- }), vue.createVNode("div", {
11044
+ }, slots.prepend)]), vue.createVNode("div", {
10963
11045
  "class": "v-card-item__content"
10964
11046
  }, [hasTitle && vue.createVNode(VCardTitle, {
10965
11047
  "key": "title"
@@ -10969,24 +11051,25 @@
10969
11051
  "key": "subtitle"
10970
11052
  }, {
10971
11053
  default: () => [slots.subtitle?.() ?? props.subtitle]
10972
- }), slots.default?.()]), hasAppend && vue.createVNode(VDefaultsProvider, {
11054
+ }), slots.default?.()]), hasAppend && vue.createVNode("div", {
10973
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,
10974
11065
  "defaults": {
10975
11066
  VAvatar: {
10976
11067
  density: props.density,
10977
11068
  icon: props.appendIcon,
10978
11069
  image: props.appendAvatar
10979
- },
10980
- VIcon: {
10981
- density: props.density,
10982
- icon: props.appendIcon
10983
11070
  }
10984
11071
  }
10985
- }, {
10986
- default: () => [vue.createVNode("div", {
10987
- "class": "v-card-item__append"
10988
- }, [slots.append?.() ?? vue.createVNode(VAvatar, null, null)])]
10989
- })]);
11072
+ }, slots.append)])]);
10990
11073
  });
10991
11074
  return {};
10992
11075
  }
@@ -11098,19 +11181,23 @@
11098
11181
  "onClick": isClickable.value && link.navigate,
11099
11182
  "tabindex": props.disabled ? -1 : undefined
11100
11183
  }, {
11101
- default: () => [hasImage && vue.createVNode(VDefaultsProvider, {
11184
+ default: () => [hasImage && vue.createVNode("div", {
11102
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,
11103
11194
  "defaults": {
11104
11195
  VImg: {
11105
11196
  cover: true,
11106
11197
  src: props.image
11107
11198
  }
11108
11199
  }
11109
- }, {
11110
- default: () => [vue.createVNode("div", {
11111
- "class": "v-card__image"
11112
- }, [slots.image?.() ?? vue.createVNode(VImg, null, null)])]
11113
- }), vue.createVNode(LoaderSlot, {
11200
+ }, slots.image)]), vue.createVNode(LoaderSlot, {
11114
11201
  "name": "v-card",
11115
11202
  "active": !!props.loading,
11116
11203
  "color": typeof props.loading === 'boolean' ? undefined : props.loading
@@ -12314,7 +12401,9 @@
12314
12401
  const percentage = (val - min.value) / (max.value - min.value) * 100;
12315
12402
  return clamp(isNaN(percentage) ? 0 : percentage, 0, 100);
12316
12403
  };
12404
+ const showTicks = vue.toRef(props, 'showTicks');
12317
12405
  const parsedTicks = vue.computed(() => {
12406
+ if (!showTicks.value) return [];
12318
12407
  if (!props.ticks) {
12319
12408
  return numTicks.value !== Infinity ? createRange(numTicks.value + 1).map(t => {
12320
12409
  const value = min.value + t * step.value;
@@ -12363,7 +12452,7 @@
12363
12452
  readonly: vue.toRef(props, 'readonly'),
12364
12453
  rounded: vue.toRef(props, 'rounded'),
12365
12454
  roundValue,
12366
- showTicks: vue.toRef(props, 'showTicks'),
12455
+ showTicks,
12367
12456
  startOffset,
12368
12457
  step,
12369
12458
  thumbSize,
@@ -12585,6 +12674,7 @@
12585
12674
  };
12586
12675
  });
12587
12676
  const computedTicks = vue.computed(() => {
12677
+ if (!showTicks.value) return [];
12588
12678
  const ticks = vertical.value ? parsedTicks.value.slice().reverse() : parsedTicks.value;
12589
12679
  return ticks.map((tick, index) => {
12590
12680
  const directionProperty = vertical.value ? 'bottom' : 'margin-inline-start';
@@ -13704,7 +13794,13 @@
13704
13794
  "key": item.value,
13705
13795
  "class": ['v-combobox__selection', index === selectionIndex.value && ['v-combobox__selection--selected', textColorClasses.value]],
13706
13796
  "style": index === selectionIndex.value ? textColorStyles.value : {}
13707
- }, [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",
13708
13804
  "defaults": {
13709
13805
  VChip: {
13710
13806
  closable: props.closableChips,
@@ -13713,15 +13809,15 @@
13713
13809
  }
13714
13810
  }
13715
13811
  }, {
13716
- default: () => [slots.chip ? slots.chip({
13812
+ default: () => [slots.chip?.({
13717
13813
  item,
13718
13814
  index,
13719
13815
  props: slotProps
13720
- }) : vue.createVNode(VChip, slotProps, null)]
13721
- }) : slots.selection ? slots.selection({
13816
+ })]
13817
+ }) : slots.selection?.({
13722
13818
  item,
13723
13819
  index
13724
- }) : vue.createVNode("span", {
13820
+ }) ?? vue.createVNode("span", {
13725
13821
  "class": "v-combobox__selection-text"
13726
13822
  }, [item.title, props.multiple && index < selections.value.length - 1 && vue.createVNode("span", {
13727
13823
  "class": "v-combobox__selection-comma"
@@ -16867,7 +16963,8 @@
16867
16963
  "persistent": true,
16868
16964
  "noClickAnimation": true,
16869
16965
  "scrim": false,
16870
- "scrollStrategy": "none"
16966
+ "scrollStrategy": "none",
16967
+ "_disableGlobalStack": true
16871
16968
  }, scopeId), {
16872
16969
  default: () => [genOverlays(false, 'v-snackbar'), slots.default && vue.createVNode("div", {
16873
16970
  "class": "v-snackbar__content",
@@ -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
  }
@@ -17689,13 +17794,6 @@
17689
17794
  backgroundColorClasses: lineColorClasses,
17690
17795
  backgroundColorStyles: lineColorStyles
17691
17796
  } = useBackgroundColor(vue.toRef(props, 'lineColor'));
17692
- provideDefaults({
17693
- VIcon: {
17694
- color: vue.toRef(props, 'iconColor'),
17695
- icon: vue.toRef(props, 'icon'),
17696
- size: vue.toRef(props, 'size')
17697
- }
17698
- });
17699
17797
  useRender(() => vue.createVNode("div", {
17700
17798
  "class": ['v-timeline-divider', {
17701
17799
  'v-timeline-divider--fill-dot': props.fillDot
@@ -17710,7 +17808,22 @@
17710
17808
  }, [vue.createVNode("div", {
17711
17809
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17712
17810
  "style": backgroundColorStyles.value
17713
- }, [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", {
17714
17827
  "class": ['v-timeline-divider__after', lineColorClasses.value],
17715
17828
  "style": lineColorStyles.value
17716
17829
  }, null)]));
@@ -18081,7 +18194,7 @@
18081
18194
  }
18082
18195
  }, 'v-data-table-select');
18083
18196
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18084
- function createSelection(props, allItems) {
18197
+ function provideSelection(props, allItems) {
18085
18198
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18086
18199
  return new Set(v);
18087
18200
  }, v => {
@@ -18141,13 +18254,28 @@
18141
18254
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18142
18255
  function createSort(props) {
18143
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;
18144
18272
  const toggleSort = key => {
18145
18273
  let newSortBy = sortBy.value.map(x => ({
18146
18274
  ...x
18147
18275
  })) ?? [];
18148
18276
  const item = newSortBy.find(x => x.key === key);
18149
18277
  if (!item) {
18150
- if (props.multiSort) newSortBy = [...newSortBy, {
18278
+ if (multiSort.value) newSortBy = [...newSortBy, {
18151
18279
  key,
18152
18280
  order: 'asc'
18153
18281
  }];else newSortBy = [{
@@ -18155,7 +18283,7 @@
18155
18283
  order: 'asc'
18156
18284
  }];
18157
18285
  } else if (item.order === 'desc') {
18158
- if (props.mustSort) {
18286
+ if (mustSort.value) {
18159
18287
  item.order = 'asc';
18160
18288
  } else {
18161
18289
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -18164,6 +18292,7 @@
18164
18292
  item.order = 'desc';
18165
18293
  }
18166
18294
  sortBy.value = newSortBy;
18295
+ if (page) page.value = 1;
18167
18296
  };
18168
18297
  const data = {
18169
18298
  sortBy,
@@ -18366,9 +18495,6 @@
18366
18495
  });
18367
18496
 
18368
18497
  // Utilities
18369
-
18370
- // Types
18371
-
18372
18498
  const makeDataTableGroupProps = propsFactory({
18373
18499
  groupBy: {
18374
18500
  type: Array,
@@ -18376,7 +18502,17 @@
18376
18502
  }
18377
18503
  }, 'data-table-group');
18378
18504
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18379
- 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;
18380
18516
  const opened = vue.ref(new Set());
18381
18517
  const sortByWithGroups = vue.computed(() => {
18382
18518
  return groupBy.value.map(val => ({
@@ -18586,7 +18722,7 @@
18586
18722
  }
18587
18723
  }, 'v-data-table-expand');
18588
18724
  const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18589
- function createExpanded(props) {
18725
+ function provideExpanded(props) {
18590
18726
  const expandOnClick = vue.toRef(props, 'expandOnClick');
18591
18727
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18592
18728
  return new Set(v);
@@ -18629,7 +18765,8 @@
18629
18765
  const VDataTableRow = defineComponent({
18630
18766
  name: 'VDataTableRow',
18631
18767
  props: {
18632
- item: Object
18768
+ item: Object,
18769
+ onClick: Function
18633
18770
  },
18634
18771
  setup(props, _ref) {
18635
18772
  let {
@@ -18647,7 +18784,10 @@
18647
18784
  columns
18648
18785
  } = useHeaders();
18649
18786
  useRender(() => vue.createVNode("tr", {
18650
- "class": ['v-data-table__tr']
18787
+ "class": ['v-data-table__tr', {
18788
+ 'v-data-table__tr--clickable': !!props.onClick
18789
+ }],
18790
+ "onClick": props.onClick
18651
18791
  }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
18652
18792
  "key": "no-data"
18653
18793
  }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
@@ -18778,7 +18918,7 @@
18778
18918
  "key": `item_${item.value}`,
18779
18919
  "onClick": event => {
18780
18920
  if (expandOnClick.value) {
18781
- toggleExpand(item.value);
18921
+ toggleExpand(item);
18782
18922
  }
18783
18923
  emit('click:row', event, {
18784
18924
  item
@@ -18806,10 +18946,20 @@
18806
18946
  }
18807
18947
  }, 'v-data-table-paginate');
18808
18948
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18809
- function createPagination(props, items) {
18949
+ function createPagination(props) {
18810
18950
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18811
18951
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18812
- 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;
18813
18963
  const startIndex = vue.computed(() => {
18814
18964
  if (itemsPerPage.value === -1) return 0;
18815
18965
  return itemsPerPage.value * (page.value - 1);
@@ -18822,13 +18972,18 @@
18822
18972
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18823
18973
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18824
18974
  });
18975
+ function setItemsPerPage(value) {
18976
+ itemsPerPage.value = value;
18977
+ page.value = 1;
18978
+ }
18825
18979
  const data = {
18826
18980
  page,
18827
18981
  itemsPerPage,
18982
+ itemsLength,
18828
18983
  startIndex,
18829
18984
  stopIndex,
18830
18985
  pageCount,
18831
- itemsLength
18986
+ setItemsPerPage
18832
18987
  };
18833
18988
  vue.provide(VDataTablePaginationSymbol, data);
18834
18989
  return data;
@@ -18838,7 +18993,13 @@
18838
18993
  if (!data) throw new Error('Missing pagination!');
18839
18994
  return data;
18840
18995
  }
18841
- function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
18996
+ function usePaginatedItems(options) {
18997
+ const {
18998
+ items,
18999
+ startIndex,
19000
+ stopIndex,
19001
+ itemsPerPage
19002
+ } = options;
18842
19003
  const paginatedItems = vue.computed(() => {
18843
19004
  if (itemsPerPage.value <= 0) return items.value;
18844
19005
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -18927,7 +19088,8 @@
18927
19088
  startIndex,
18928
19089
  stopIndex,
18929
19090
  itemsLength,
18930
- itemsPerPage
19091
+ itemsPerPage,
19092
+ setItemsPerPage
18931
19093
  } = usePagination();
18932
19094
  const itemsPerPageOptions = vue.computed(() => props.itemsPerPageOptions.map(option => ({
18933
19095
  ...option,
@@ -18940,7 +19102,7 @@
18940
19102
  }, [vue.createVNode("span", null, [t(props.itemsPerPageText)]), vue.createVNode(VSelect, {
18941
19103
  "items": itemsPerPageOptions.value,
18942
19104
  "modelValue": itemsPerPage.value,
18943
- "onUpdate:modelValue": v => itemsPerPage.value = Number(v),
19105
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
18944
19106
  "density": "compact",
18945
19107
  "variant": "outlined",
18946
19108
  "hide-details": true
@@ -19029,22 +19191,10 @@
19029
19191
  groupBy: groupBy.value
19030
19192
  }));
19031
19193
 
19032
- // Reset page when sorting changes
19033
- vue.watch(sortBy, () => {
19034
- page.value = 1;
19035
- }, {
19036
- deep: true
19037
- });
19038
-
19039
19194
  // Reset page when searching
19040
19195
  vue.watch(() => search?.value, () => {
19041
19196
  page.value = 1;
19042
19197
  });
19043
-
19044
- // Reset page when items-per-page changes
19045
- vue.watch(itemsPerPage, () => {
19046
- page.value = 1;
19047
- });
19048
19198
  let oldOptions = null;
19049
19199
  vue.watch(options, () => {
19050
19200
  if (deepEqual(oldOptions, options.value)) return;
@@ -19098,7 +19248,18 @@
19098
19248
  emit,
19099
19249
  slots
19100
19250
  } = _ref;
19101
- 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);
19102
19263
  const {
19103
19264
  columns
19104
19265
  } = createHeaders(props, {
@@ -19116,32 +19277,46 @@
19116
19277
  } = useFilter(props, items, search, {
19117
19278
  filterKeys
19118
19279
  });
19119
- const {
19120
- sortBy
19121
- } = createSort(props);
19280
+ provideSort({
19281
+ sortBy,
19282
+ multiSort,
19283
+ mustSort,
19284
+ page
19285
+ });
19122
19286
  const {
19123
19287
  sortByWithGroups,
19124
19288
  opened,
19125
19289
  extractRows
19126
- } = createGroupBy(props, groupBy, sortBy);
19290
+ } = provideGroupBy({
19291
+ groupBy,
19292
+ sortBy
19293
+ });
19127
19294
  const {
19128
19295
  sortedItems
19129
19296
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
19130
19297
  const {
19131
19298
  flatItems
19132
19299
  } = useGroupedItems(sortedItems, groupBy, opened);
19300
+ const itemsLength = vue.computed(() => flatItems.value.length);
19133
19301
  const {
19134
- page,
19135
- itemsPerPage,
19136
19302
  startIndex,
19137
19303
  stopIndex
19138
- } = createPagination(props, flatItems);
19304
+ } = providePagination({
19305
+ page,
19306
+ itemsPerPage,
19307
+ itemsLength
19308
+ });
19139
19309
  const {
19140
19310
  paginatedItems
19141
- } = usePaginatedItems(flatItems, startIndex, stopIndex, itemsPerPage);
19311
+ } = usePaginatedItems({
19312
+ items: flatItems,
19313
+ startIndex,
19314
+ stopIndex,
19315
+ itemsPerPage
19316
+ });
19142
19317
  const paginatedItemsWithoutGroups = vue.computed(() => extractRows(paginatedItems.value));
19143
- createSelection(props, paginatedItemsWithoutGroups);
19144
- createExpanded(props);
19318
+ provideSelection(props, paginatedItemsWithoutGroups);
19319
+ provideExpanded(props);
19145
19320
  useOptions({
19146
19321
  page,
19147
19322
  itemsPerPage,
@@ -19289,7 +19464,14 @@
19289
19464
  emit,
19290
19465
  slots
19291
19466
  } = _ref;
19292
- const groupBy = useProxiedModel(props, 'groupBy');
19467
+ const {
19468
+ groupBy
19469
+ } = createGroupBy(props);
19470
+ const {
19471
+ sortBy,
19472
+ multiSort,
19473
+ mustSort
19474
+ } = createSort(props);
19293
19475
  const {
19294
19476
  columns
19295
19477
  } = createHeaders(props, {
@@ -19307,14 +19489,19 @@
19307
19489
  } = useFilter(props, items, search, {
19308
19490
  filterKeys
19309
19491
  });
19310
- const {
19311
- sortBy
19312
- } = createSort(props);
19492
+ provideSort({
19493
+ sortBy,
19494
+ multiSort,
19495
+ mustSort
19496
+ });
19313
19497
  const {
19314
19498
  sortByWithGroups,
19315
19499
  opened,
19316
19500
  extractRows
19317
- } = createGroupBy(props, groupBy, sortBy);
19501
+ } = provideGroupBy({
19502
+ groupBy,
19503
+ sortBy
19504
+ });
19318
19505
  const {
19319
19506
  sortedItems
19320
19507
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -19322,8 +19509,8 @@
19322
19509
  flatItems
19323
19510
  } = useGroupedItems(sortedItems, groupBy, opened);
19324
19511
  const allRows = vue.computed(() => extractRows(flatItems.value));
19325
- createSelection(props, allRows);
19326
- createExpanded(props);
19512
+ provideSelection(props, allRows);
19513
+ provideExpanded(props);
19327
19514
  const {
19328
19515
  containerRef,
19329
19516
  paddingTop,
@@ -19410,7 +19597,10 @@
19410
19597
  type: String,
19411
19598
  default: '$vuetify.dataIterator.loadingText'
19412
19599
  },
19413
- itemsLength: [Number, String],
19600
+ itemsLength: {
19601
+ type: [Number, String],
19602
+ required: true
19603
+ },
19414
19604
  ...makeVDataTableProps(),
19415
19605
  ...makeDataTableExpandProps(),
19416
19606
  ...makeDataTableHeaderProps(),
@@ -19435,8 +19625,20 @@
19435
19625
  emit,
19436
19626
  slots
19437
19627
  } = _ref;
19438
- const groupBy = useProxiedModel(props, 'groupBy');
19439
- 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);
19440
19642
  const {
19441
19643
  columns
19442
19644
  } = createHeaders(props, {
@@ -19448,20 +19650,28 @@
19448
19650
  items
19449
19651
  } = useDataTableItems(props, columns);
19450
19652
  const {
19451
- sortBy,
19452
19653
  toggleSort
19453
- } = createSort(props);
19654
+ } = provideSort({
19655
+ sortBy,
19656
+ multiSort,
19657
+ mustSort,
19658
+ page
19659
+ });
19454
19660
  const {
19455
19661
  opened
19456
- } = createGroupBy(props, groupBy, sortBy);
19457
- const {
19662
+ } = provideGroupBy({
19663
+ groupBy,
19664
+ sortBy
19665
+ });
19666
+ providePagination({
19458
19667
  page,
19459
- itemsPerPage
19460
- } = createPagination(props, items);
19668
+ itemsPerPage,
19669
+ itemsLength
19670
+ });
19461
19671
  const {
19462
19672
  flatItems
19463
19673
  } = useGroupedItems(items, groupBy, opened);
19464
- createSelection(props, items);
19674
+ provideSelection(props, items);
19465
19675
  useOptions({
19466
19676
  page,
19467
19677
  itemsPerPage,
@@ -20032,7 +20242,7 @@
20032
20242
  locale
20033
20243
  };
20034
20244
  }
20035
- const version$1 = "3.1.8";
20245
+ const version$1 = "3.1.9";
20036
20246
  createVuetify$1.version = version$1;
20037
20247
 
20038
20248
  // Vue's inject() can only be used in setup
@@ -20044,7 +20254,7 @@
20044
20254
  }
20045
20255
  }
20046
20256
 
20047
- const version = "3.1.8";
20257
+ const version = "3.1.9";
20048
20258
 
20049
20259
  const createVuetify = function () {
20050
20260
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};