vuetify 3.1.8 → 3.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/json/attributes.json +7 -3
  2. package/dist/json/importMap.json +74 -74
  3. package/dist/json/tags.json +1 -0
  4. package/dist/json/web-types.json +51 -17
  5. package/dist/vuetify-labs.css +427 -407
  6. package/dist/vuetify-labs.d.ts +14 -7
  7. package/dist/vuetify-labs.esm.js +439 -237
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +439 -237
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +1055 -1038
  12. package/dist/vuetify.d.ts +28 -23
  13. package/dist/vuetify.esm.js +285 -180
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +285 -180
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +301 -298
  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/VTimeline/VTimelineDivider.mjs +18 -10
  63. package/lib/components/VTimeline/VTimelineDivider.mjs.map +1 -1
  64. package/lib/components/VToolbar/VToolbar.mjs +9 -5
  65. package/lib/components/VToolbar/VToolbar.mjs.map +1 -1
  66. package/lib/components/index.d.ts +7 -2
  67. package/lib/composables/defaults.mjs +2 -0
  68. package/lib/composables/defaults.mjs.map +1 -1
  69. package/lib/entry-bundler.mjs +1 -1
  70. package/lib/entry-bundler.mjs.map +1 -1
  71. package/lib/framework.mjs +1 -1
  72. package/lib/framework.mjs.map +1 -1
  73. package/lib/index.d.ts +21 -21
  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.10
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 injectedDefaults.value;
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.appendAvatar || props.appendIcon);
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",
@@ -17689,13 +17786,6 @@
17689
17786
  backgroundColorClasses: lineColorClasses,
17690
17787
  backgroundColorStyles: lineColorStyles
17691
17788
  } = 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
17789
  useRender(() => vue.createVNode("div", {
17700
17790
  "class": ['v-timeline-divider', {
17701
17791
  'v-timeline-divider--fill-dot': props.fillDot
@@ -17710,7 +17800,22 @@
17710
17800
  }, [vue.createVNode("div", {
17711
17801
  "class": ['v-timeline-divider__inner-dot', backgroundColorClasses.value, roundedClasses.value],
17712
17802
  "style": backgroundColorStyles.value
17713
- }, [slots.default?.() ?? (props.icon ? vue.createVNode(VIcon, null, null) : undefined)])]), vue.createVNode("div", {
17803
+ }, [!slots.default ? vue.createVNode(VIcon, {
17804
+ "key": "icon",
17805
+ "color": props.iconColor,
17806
+ "icon": props.icon,
17807
+ "size": props.size
17808
+ }, null) : vue.createVNode(VDefaultsProvider, {
17809
+ "key": "icon-defaults",
17810
+ "disabled": !props.icon,
17811
+ "defaults": {
17812
+ VIcon: {
17813
+ color: props.iconColor,
17814
+ icon: props.icon,
17815
+ size: props.size
17816
+ }
17817
+ }
17818
+ }, slots.default)])]), vue.createVNode("div", {
17714
17819
  "class": ['v-timeline-divider__after', lineColorClasses.value],
17715
17820
  "style": lineColorStyles.value
17716
17821
  }, null)]));
@@ -18081,7 +18186,7 @@
18081
18186
  }
18082
18187
  }, 'v-data-table-select');
18083
18188
  const VDataTableSelectionSymbol = Symbol.for('vuetify:data-table-selection');
18084
- function createSelection(props, allItems) {
18189
+ function provideSelection(props, allItems) {
18085
18190
  const selected = useProxiedModel(props, 'modelValue', props.modelValue, v => {
18086
18191
  return new Set(v);
18087
18192
  }, v => {
@@ -18141,13 +18246,28 @@
18141
18246
  const VDataTableSortSymbol = Symbol.for('vuetify:data-table-sort');
18142
18247
  function createSort(props) {
18143
18248
  const sortBy = useProxiedModel(props, 'sortBy');
18249
+ const mustSort = vue.toRef(props, 'mustSort');
18250
+ const multiSort = vue.toRef(props, 'multiSort');
18251
+ return {
18252
+ sortBy,
18253
+ mustSort,
18254
+ multiSort
18255
+ };
18256
+ }
18257
+ function provideSort(options) {
18258
+ const {
18259
+ sortBy,
18260
+ mustSort,
18261
+ multiSort,
18262
+ page
18263
+ } = options;
18144
18264
  const toggleSort = key => {
18145
18265
  let newSortBy = sortBy.value.map(x => ({
18146
18266
  ...x
18147
18267
  })) ?? [];
18148
18268
  const item = newSortBy.find(x => x.key === key);
18149
18269
  if (!item) {
18150
- if (props.multiSort) newSortBy = [...newSortBy, {
18270
+ if (multiSort.value) newSortBy = [...newSortBy, {
18151
18271
  key,
18152
18272
  order: 'asc'
18153
18273
  }];else newSortBy = [{
@@ -18155,7 +18275,7 @@
18155
18275
  order: 'asc'
18156
18276
  }];
18157
18277
  } else if (item.order === 'desc') {
18158
- if (props.mustSort) {
18278
+ if (mustSort.value) {
18159
18279
  item.order = 'asc';
18160
18280
  } else {
18161
18281
  newSortBy = newSortBy.filter(x => x.key !== key);
@@ -18164,6 +18284,7 @@
18164
18284
  item.order = 'desc';
18165
18285
  }
18166
18286
  sortBy.value = newSortBy;
18287
+ if (page) page.value = 1;
18167
18288
  };
18168
18289
  const data = {
18169
18290
  sortBy,
@@ -18366,9 +18487,6 @@
18366
18487
  });
18367
18488
 
18368
18489
  // Utilities
18369
-
18370
- // Types
18371
-
18372
18490
  const makeDataTableGroupProps = propsFactory({
18373
18491
  groupBy: {
18374
18492
  type: Array,
@@ -18376,7 +18494,17 @@
18376
18494
  }
18377
18495
  }, 'data-table-group');
18378
18496
  const VDataTableGroupSymbol = Symbol.for('vuetify:data-table-group');
18379
- function createGroupBy(props, groupBy, sortBy) {
18497
+ function createGroupBy(props) {
18498
+ const groupBy = useProxiedModel(props, 'groupBy');
18499
+ return {
18500
+ groupBy
18501
+ };
18502
+ }
18503
+ function provideGroupBy(options) {
18504
+ const {
18505
+ groupBy,
18506
+ sortBy
18507
+ } = options;
18380
18508
  const opened = vue.ref(new Set());
18381
18509
  const sortByWithGroups = vue.computed(() => {
18382
18510
  return groupBy.value.map(val => ({
@@ -18586,7 +18714,7 @@
18586
18714
  }
18587
18715
  }, 'v-data-table-expand');
18588
18716
  const VDataTableExpandedKey = Symbol.for('vuetify:datatable:expanded');
18589
- function createExpanded(props) {
18717
+ function provideExpanded(props) {
18590
18718
  const expandOnClick = vue.toRef(props, 'expandOnClick');
18591
18719
  const expanded = useProxiedModel(props, 'expanded', props.expanded, v => {
18592
18720
  return new Set(v);
@@ -18629,7 +18757,8 @@
18629
18757
  const VDataTableRow = defineComponent({
18630
18758
  name: 'VDataTableRow',
18631
18759
  props: {
18632
- item: Object
18760
+ item: Object,
18761
+ onClick: Function
18633
18762
  },
18634
18763
  setup(props, _ref) {
18635
18764
  let {
@@ -18647,7 +18776,10 @@
18647
18776
  columns
18648
18777
  } = useHeaders();
18649
18778
  useRender(() => vue.createVNode("tr", {
18650
- "class": ['v-data-table__tr']
18779
+ "class": ['v-data-table__tr', {
18780
+ 'v-data-table__tr--clickable': !!props.onClick
18781
+ }],
18782
+ "onClick": props.onClick
18651
18783
  }, [!columns.value.length && vue.createVNode(VDataTableColumn, {
18652
18784
  "key": "no-data"
18653
18785
  }, slots), props.item && columns.value.map((column, i) => vue.createVNode(VDataTableColumn, {
@@ -18778,7 +18910,7 @@
18778
18910
  "key": `item_${item.value}`,
18779
18911
  "onClick": event => {
18780
18912
  if (expandOnClick.value) {
18781
- toggleExpand(item.value);
18913
+ toggleExpand(item);
18782
18914
  }
18783
18915
  emit('click:row', event, {
18784
18916
  item
@@ -18806,10 +18938,20 @@
18806
18938
  }
18807
18939
  }, 'v-data-table-paginate');
18808
18940
  const VDataTablePaginationSymbol = Symbol.for('vuetify:data-table-pagination');
18809
- function createPagination(props, items) {
18941
+ function createPagination(props) {
18810
18942
  const page = useProxiedModel(props, 'page', undefined, value => +(value ?? 1));
18811
18943
  const itemsPerPage = useProxiedModel(props, 'itemsPerPage', undefined, value => +(value ?? 10));
18812
- const itemsLength = vue.computed(() => +(props.itemsLength ?? items.value.length));
18944
+ return {
18945
+ page,
18946
+ itemsPerPage
18947
+ };
18948
+ }
18949
+ function providePagination(options) {
18950
+ const {
18951
+ page,
18952
+ itemsPerPage,
18953
+ itemsLength
18954
+ } = options;
18813
18955
  const startIndex = vue.computed(() => {
18814
18956
  if (itemsPerPage.value === -1) return 0;
18815
18957
  return itemsPerPage.value * (page.value - 1);
@@ -18822,13 +18964,18 @@
18822
18964
  if (itemsPerPage.value === -1 || itemsLength.value === 0) return 1;
18823
18965
  return Math.ceil(itemsLength.value / itemsPerPage.value);
18824
18966
  });
18967
+ function setItemsPerPage(value) {
18968
+ itemsPerPage.value = value;
18969
+ page.value = 1;
18970
+ }
18825
18971
  const data = {
18826
18972
  page,
18827
18973
  itemsPerPage,
18974
+ itemsLength,
18828
18975
  startIndex,
18829
18976
  stopIndex,
18830
18977
  pageCount,
18831
- itemsLength
18978
+ setItemsPerPage
18832
18979
  };
18833
18980
  vue.provide(VDataTablePaginationSymbol, data);
18834
18981
  return data;
@@ -18838,7 +18985,13 @@
18838
18985
  if (!data) throw new Error('Missing pagination!');
18839
18986
  return data;
18840
18987
  }
18841
- function usePaginatedItems(items, startIndex, stopIndex, itemsPerPage) {
18988
+ function usePaginatedItems(options) {
18989
+ const {
18990
+ items,
18991
+ startIndex,
18992
+ stopIndex,
18993
+ itemsPerPage
18994
+ } = options;
18842
18995
  const paginatedItems = vue.computed(() => {
18843
18996
  if (itemsPerPage.value <= 0) return items.value;
18844
18997
  return items.value.slice(startIndex.value, stopIndex.value);
@@ -18927,7 +19080,8 @@
18927
19080
  startIndex,
18928
19081
  stopIndex,
18929
19082
  itemsLength,
18930
- itemsPerPage
19083
+ itemsPerPage,
19084
+ setItemsPerPage
18931
19085
  } = usePagination();
18932
19086
  const itemsPerPageOptions = vue.computed(() => props.itemsPerPageOptions.map(option => ({
18933
19087
  ...option,
@@ -18940,7 +19094,7 @@
18940
19094
  }, [vue.createVNode("span", null, [t(props.itemsPerPageText)]), vue.createVNode(VSelect, {
18941
19095
  "items": itemsPerPageOptions.value,
18942
19096
  "modelValue": itemsPerPage.value,
18943
- "onUpdate:modelValue": v => itemsPerPage.value = Number(v),
19097
+ "onUpdate:modelValue": v => setItemsPerPage(Number(v)),
18944
19098
  "density": "compact",
18945
19099
  "variant": "outlined",
18946
19100
  "hide-details": true
@@ -19029,22 +19183,10 @@
19029
19183
  groupBy: groupBy.value
19030
19184
  }));
19031
19185
 
19032
- // Reset page when sorting changes
19033
- vue.watch(sortBy, () => {
19034
- page.value = 1;
19035
- }, {
19036
- deep: true
19037
- });
19038
-
19039
19186
  // Reset page when searching
19040
19187
  vue.watch(() => search?.value, () => {
19041
19188
  page.value = 1;
19042
19189
  });
19043
-
19044
- // Reset page when items-per-page changes
19045
- vue.watch(itemsPerPage, () => {
19046
- page.value = 1;
19047
- });
19048
19190
  let oldOptions = null;
19049
19191
  vue.watch(options, () => {
19050
19192
  if (deepEqual(oldOptions, options.value)) return;
@@ -19098,7 +19240,18 @@
19098
19240
  emit,
19099
19241
  slots
19100
19242
  } = _ref;
19101
- const groupBy = useProxiedModel(props, 'groupBy');
19243
+ const {
19244
+ groupBy
19245
+ } = createGroupBy(props);
19246
+ const {
19247
+ sortBy,
19248
+ multiSort,
19249
+ mustSort
19250
+ } = createSort(props);
19251
+ const {
19252
+ page,
19253
+ itemsPerPage
19254
+ } = createPagination(props);
19102
19255
  const {
19103
19256
  columns
19104
19257
  } = createHeaders(props, {
@@ -19116,32 +19269,46 @@
19116
19269
  } = useFilter(props, items, search, {
19117
19270
  filterKeys
19118
19271
  });
19119
- const {
19120
- sortBy
19121
- } = createSort(props);
19272
+ provideSort({
19273
+ sortBy,
19274
+ multiSort,
19275
+ mustSort,
19276
+ page
19277
+ });
19122
19278
  const {
19123
19279
  sortByWithGroups,
19124
19280
  opened,
19125
19281
  extractRows
19126
- } = createGroupBy(props, groupBy, sortBy);
19282
+ } = provideGroupBy({
19283
+ groupBy,
19284
+ sortBy
19285
+ });
19127
19286
  const {
19128
19287
  sortedItems
19129
19288
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
19130
19289
  const {
19131
19290
  flatItems
19132
19291
  } = useGroupedItems(sortedItems, groupBy, opened);
19292
+ const itemsLength = vue.computed(() => flatItems.value.length);
19133
19293
  const {
19134
- page,
19135
- itemsPerPage,
19136
19294
  startIndex,
19137
19295
  stopIndex
19138
- } = createPagination(props, flatItems);
19296
+ } = providePagination({
19297
+ page,
19298
+ itemsPerPage,
19299
+ itemsLength
19300
+ });
19139
19301
  const {
19140
19302
  paginatedItems
19141
- } = usePaginatedItems(flatItems, startIndex, stopIndex, itemsPerPage);
19303
+ } = usePaginatedItems({
19304
+ items: flatItems,
19305
+ startIndex,
19306
+ stopIndex,
19307
+ itemsPerPage
19308
+ });
19142
19309
  const paginatedItemsWithoutGroups = vue.computed(() => extractRows(paginatedItems.value));
19143
- createSelection(props, paginatedItemsWithoutGroups);
19144
- createExpanded(props);
19310
+ provideSelection(props, paginatedItemsWithoutGroups);
19311
+ provideExpanded(props);
19145
19312
  useOptions({
19146
19313
  page,
19147
19314
  itemsPerPage,
@@ -19289,7 +19456,14 @@
19289
19456
  emit,
19290
19457
  slots
19291
19458
  } = _ref;
19292
- const groupBy = useProxiedModel(props, 'groupBy');
19459
+ const {
19460
+ groupBy
19461
+ } = createGroupBy(props);
19462
+ const {
19463
+ sortBy,
19464
+ multiSort,
19465
+ mustSort
19466
+ } = createSort(props);
19293
19467
  const {
19294
19468
  columns
19295
19469
  } = createHeaders(props, {
@@ -19307,14 +19481,19 @@
19307
19481
  } = useFilter(props, items, search, {
19308
19482
  filterKeys
19309
19483
  });
19310
- const {
19311
- sortBy
19312
- } = createSort(props);
19484
+ provideSort({
19485
+ sortBy,
19486
+ multiSort,
19487
+ mustSort
19488
+ });
19313
19489
  const {
19314
19490
  sortByWithGroups,
19315
19491
  opened,
19316
19492
  extractRows
19317
- } = createGroupBy(props, groupBy, sortBy);
19493
+ } = provideGroupBy({
19494
+ groupBy,
19495
+ sortBy
19496
+ });
19318
19497
  const {
19319
19498
  sortedItems
19320
19499
  } = useSortedItems(filteredItems, sortByWithGroups, columns);
@@ -19322,8 +19501,8 @@
19322
19501
  flatItems
19323
19502
  } = useGroupedItems(sortedItems, groupBy, opened);
19324
19503
  const allRows = vue.computed(() => extractRows(flatItems.value));
19325
- createSelection(props, allRows);
19326
- createExpanded(props);
19504
+ provideSelection(props, allRows);
19505
+ provideExpanded(props);
19327
19506
  const {
19328
19507
  containerRef,
19329
19508
  paddingTop,
@@ -19410,7 +19589,10 @@
19410
19589
  type: String,
19411
19590
  default: '$vuetify.dataIterator.loadingText'
19412
19591
  },
19413
- itemsLength: [Number, String],
19592
+ itemsLength: {
19593
+ type: [Number, String],
19594
+ required: true
19595
+ },
19414
19596
  ...makeVDataTableProps(),
19415
19597
  ...makeDataTableExpandProps(),
19416
19598
  ...makeDataTableHeaderProps(),
@@ -19435,8 +19617,20 @@
19435
19617
  emit,
19436
19618
  slots
19437
19619
  } = _ref;
19438
- const groupBy = useProxiedModel(props, 'groupBy');
19439
- createExpanded(props);
19620
+ const {
19621
+ groupBy
19622
+ } = createGroupBy(props);
19623
+ const {
19624
+ sortBy,
19625
+ multiSort,
19626
+ mustSort
19627
+ } = createSort(props);
19628
+ const {
19629
+ page,
19630
+ itemsPerPage
19631
+ } = createPagination(props);
19632
+ const itemsLength = vue.computed(() => parseInt(props.itemsLength, 10));
19633
+ provideExpanded(props);
19440
19634
  const {
19441
19635
  columns
19442
19636
  } = createHeaders(props, {
@@ -19448,20 +19642,28 @@
19448
19642
  items
19449
19643
  } = useDataTableItems(props, columns);
19450
19644
  const {
19451
- sortBy,
19452
19645
  toggleSort
19453
- } = createSort(props);
19646
+ } = provideSort({
19647
+ sortBy,
19648
+ multiSort,
19649
+ mustSort,
19650
+ page
19651
+ });
19454
19652
  const {
19455
19653
  opened
19456
- } = createGroupBy(props, groupBy, sortBy);
19457
- const {
19654
+ } = provideGroupBy({
19655
+ groupBy,
19656
+ sortBy
19657
+ });
19658
+ providePagination({
19458
19659
  page,
19459
- itemsPerPage
19460
- } = createPagination(props, items);
19660
+ itemsPerPage,
19661
+ itemsLength
19662
+ });
19461
19663
  const {
19462
19664
  flatItems
19463
19665
  } = useGroupedItems(items, groupBy, opened);
19464
- createSelection(props, items);
19666
+ provideSelection(props, items);
19465
19667
  useOptions({
19466
19668
  page,
19467
19669
  itemsPerPage,
@@ -20032,7 +20234,7 @@
20032
20234
  locale
20033
20235
  };
20034
20236
  }
20035
- const version$1 = "3.1.8";
20237
+ const version$1 = "3.1.10";
20036
20238
  createVuetify$1.version = version$1;
20037
20239
 
20038
20240
  // Vue's inject() can only be used in setup
@@ -20044,7 +20246,7 @@
20044
20246
  }
20045
20247
  }
20046
20248
 
20047
- const version = "3.1.8";
20249
+ const version = "3.1.10";
20048
20250
 
20049
20251
  const createVuetify = function () {
20050
20252
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};