vuetify 3.0.6 → 3.1.0

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 (189) hide show
  1. package/_settings.scss +1 -0
  2. package/dist/_component-variables-labs.sass +1 -0
  3. package/dist/json/attributes.json +460 -12
  4. package/dist/json/importMap-labs.json +28 -0
  5. package/dist/json/importMap.json +60 -60
  6. package/dist/json/tags.json +154 -8
  7. package/dist/json/web-types.json +1522 -26
  8. package/dist/vuetify-labs.d.ts +875 -0
  9. package/dist/vuetify-labs.js +9748 -0
  10. package/dist/vuetify.css +36 -55
  11. package/dist/vuetify.d.ts +173 -196
  12. package/dist/vuetify.esm.js +190 -128
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +189 -127
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +788 -780
  18. package/dist/vuetify.min.js.map +1 -1
  19. package/lib/blueprints/index.d.ts +3 -2
  20. package/lib/blueprints/md1.d.ts +3 -2
  21. package/lib/blueprints/md2.d.ts +3 -2
  22. package/lib/blueprints/md3.d.ts +3 -2
  23. package/lib/components/VAlert/VAlertTitle.mjs.map +1 -1
  24. package/lib/components/VAlert/index.d.ts +1 -0
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs +8 -10
  26. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  27. package/lib/components/VAutocomplete/index.d.ts +3 -12
  28. package/lib/components/VAvatar/VAvatar.mjs +2 -1
  29. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  30. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +23 -20
  31. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  32. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs +21 -2
  33. package/lib/components/VBreadcrumbs/VBreadcrumbsDivider.mjs.map +1 -1
  34. package/lib/components/VBreadcrumbs/index.d.ts +4 -15
  35. package/lib/components/VColorPicker/VColorPicker.mjs +0 -1
  36. package/lib/components/VColorPicker/VColorPicker.mjs.map +1 -1
  37. package/lib/components/VCombobox/VCombobox.mjs +8 -10
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.ts +3 -12
  40. package/lib/components/VDivider/VDivider.css +1 -1
  41. package/lib/components/VDivider/VDivider.sass +1 -0
  42. package/lib/components/VDivider/_variables.scss +2 -1
  43. package/lib/components/VIcon/VIcon.mjs +25 -20
  44. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  45. package/lib/components/VIcon/index.d.ts +4 -8
  46. package/lib/components/VList/VListItem.css +0 -4
  47. package/lib/components/VList/VListItem.sass +12 -6
  48. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +10 -2
  49. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  50. package/lib/components/VNavigationDrawer/index.d.ts +11 -3
  51. package/lib/components/VPagination/VPagination.mjs +12 -5
  52. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  53. package/lib/components/VRadioGroup/VRadioGroup.mjs +3 -2
  54. package/lib/components/VRadioGroup/VRadioGroup.mjs.map +1 -1
  55. package/lib/components/VSelect/VSelect.mjs +11 -8
  56. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  57. package/lib/components/VSelectionControl/VSelectionControl.mjs +11 -2
  58. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  59. package/lib/components/VSelectionControl/index.d.ts +2 -2
  60. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs +12 -3
  61. package/lib/components/VSelectionControlGroup/VSelectionControlGroup.mjs.map +1 -1
  62. package/lib/components/VSlider/VSliderThumb.css +2 -0
  63. package/lib/components/VSlider/VSliderThumb.sass +2 -0
  64. package/lib/components/VTable/VTable.css +12 -29
  65. package/lib/components/VTable/VTable.mjs +3 -3
  66. package/lib/components/VTable/VTable.mjs.map +1 -1
  67. package/lib/components/VTable/VTable.sass +10 -17
  68. package/lib/components/VTable/_variables.scss +4 -2
  69. package/lib/components/index.d.ts +27 -51
  70. package/lib/composables/filter.mjs +18 -10
  71. package/lib/composables/filter.mjs.map +1 -1
  72. package/lib/composables/icons.mjs +12 -7
  73. package/lib/composables/icons.mjs.map +1 -1
  74. package/lib/entry-bundler.mjs +1 -1
  75. package/lib/framework.mjs +15 -13
  76. package/lib/framework.mjs.map +1 -1
  77. package/lib/iconsets/fa-svg.d.ts +3 -2
  78. package/lib/iconsets/fa.d.ts +3 -2
  79. package/lib/iconsets/fa.mjs +2 -1
  80. package/lib/iconsets/fa.mjs.map +1 -1
  81. package/lib/iconsets/fa4.d.ts +3 -2
  82. package/lib/iconsets/fa4.mjs +2 -1
  83. package/lib/iconsets/fa4.mjs.map +1 -1
  84. package/lib/iconsets/md.d.ts +3 -2
  85. package/lib/iconsets/md.mjs +2 -1
  86. package/lib/iconsets/md.mjs.map +1 -1
  87. package/lib/iconsets/mdi-svg.d.ts +3 -2
  88. package/lib/iconsets/mdi-svg.mjs +2 -1
  89. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  90. package/lib/iconsets/mdi.d.ts +3 -2
  91. package/lib/iconsets/mdi.mjs +2 -1
  92. package/lib/iconsets/mdi.mjs.map +1 -1
  93. package/lib/index.d.ts +19 -18
  94. package/lib/labs/VDataTable/VDataTable.css +119 -0
  95. package/lib/labs/VDataTable/VDataTable.mjs +146 -0
  96. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -0
  97. package/lib/labs/VDataTable/VDataTable.sass +106 -0
  98. package/lib/labs/VDataTable/VDataTableColumn.mjs +37 -0
  99. package/lib/labs/VDataTable/VDataTableColumn.mjs.map +1 -0
  100. package/lib/labs/VDataTable/VDataTableFooter.css +22 -0
  101. package/lib/labs/VDataTable/VDataTableFooter.mjs +105 -0
  102. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -0
  103. package/lib/labs/VDataTable/VDataTableFooter.sass +23 -0
  104. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs +88 -0
  105. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -0
  106. package/lib/labs/VDataTable/VDataTableHeaders.mjs +143 -0
  107. package/lib/labs/VDataTable/VDataTableHeaders.mjs.map +1 -0
  108. package/lib/labs/VDataTable/VDataTableRow.mjs +75 -0
  109. package/lib/labs/VDataTable/VDataTableRow.mjs.map +1 -0
  110. package/lib/labs/VDataTable/VDataTableRows.mjs +87 -0
  111. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -0
  112. package/lib/labs/VDataTable/VDataTableServer.mjs +124 -0
  113. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -0
  114. package/lib/labs/VDataTable/VDataTableVirtual.mjs +154 -0
  115. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -0
  116. package/lib/labs/VDataTable/_variables.scss +6 -0
  117. package/lib/labs/VDataTable/composables/expand.mjs +51 -0
  118. package/lib/labs/VDataTable/composables/expand.mjs.map +1 -0
  119. package/lib/labs/VDataTable/composables/group.mjs +124 -0
  120. package/lib/labs/VDataTable/composables/group.mjs.map +1 -0
  121. package/lib/labs/VDataTable/composables/headers.mjs +152 -0
  122. package/lib/labs/VDataTable/composables/headers.mjs.map +1 -0
  123. package/lib/labs/VDataTable/composables/items.mjs +30 -0
  124. package/lib/labs/VDataTable/composables/items.mjs.map +1 -0
  125. package/lib/labs/VDataTable/composables/options.mjs +44 -0
  126. package/lib/labs/VDataTable/composables/options.mjs.map +1 -0
  127. package/lib/labs/VDataTable/composables/paginate.mjs +62 -0
  128. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -0
  129. package/lib/labs/VDataTable/composables/select.mjs +57 -0
  130. package/lib/labs/VDataTable/composables/select.mjs.map +1 -0
  131. package/lib/labs/VDataTable/composables/sort.mjs +109 -0
  132. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -0
  133. package/lib/labs/VDataTable/composables/virtual.mjs +77 -0
  134. package/lib/labs/VDataTable/composables/virtual.mjs.map +1 -0
  135. package/lib/labs/VDataTable/index.d.ts +705 -0
  136. package/lib/labs/VDataTable/index.mjs +6 -0
  137. package/lib/labs/VDataTable/index.mjs.map +1 -0
  138. package/lib/labs/VDataTable/types.mjs +2 -0
  139. package/lib/labs/VDataTable/types.mjs.map +1 -0
  140. package/lib/labs/VVirtualScroll/VVirtualScroll.css +11 -0
  141. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs +118 -0
  142. package/lib/labs/VVirtualScroll/VVirtualScroll.mjs.map +1 -0
  143. package/lib/{components → labs}/VVirtualScroll/VVirtualScroll.sass +0 -5
  144. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs +35 -0
  145. package/lib/labs/VVirtualScroll/VVirtualScrollItem.mjs.map +1 -0
  146. package/lib/labs/VVirtualScroll/index.d.ts +154 -0
  147. package/lib/labs/VVirtualScroll/index.mjs +2 -0
  148. package/lib/labs/VVirtualScroll/index.mjs.map +1 -0
  149. package/lib/labs/components.d.ts +856 -0
  150. package/lib/labs/components.mjs +3 -0
  151. package/lib/labs/components.mjs.map +1 -0
  152. package/lib/labs/index.mjs +3 -0
  153. package/lib/labs/index.mjs.map +1 -0
  154. package/lib/util/defineComponent.mjs +4 -0
  155. package/lib/util/defineComponent.mjs.map +1 -1
  156. package/lib/util/helpers.mjs +0 -38
  157. package/lib/util/helpers.mjs.map +1 -1
  158. package/package.json +4 -2
  159. package/lib/components/VDataTable/MobileRow.mjs +0 -63
  160. package/lib/components/VDataTable/MobileRow.mjs.map +0 -1
  161. package/lib/components/VDataTable/Row.mjs +0 -57
  162. package/lib/components/VDataTable/Row.mjs.map +0 -1
  163. package/lib/components/VDataTable/RowGroup.mjs +0 -48
  164. package/lib/components/VDataTable/RowGroup.mjs.map +0 -1
  165. package/lib/components/VDataTable/VDataTable.mjs +0 -577
  166. package/lib/components/VDataTable/VDataTable.mjs.map +0 -1
  167. package/lib/components/VDataTable/VDataTable.sass +0 -98
  168. package/lib/components/VDataTable/VDataTableHeader.mjs +0 -42
  169. package/lib/components/VDataTable/VDataTableHeader.mjs.map +0 -1
  170. package/lib/components/VDataTable/VDataTableHeader.sass +0 -80
  171. package/lib/components/VDataTable/VDataTableHeaderDesktop.mjs +0 -96
  172. package/lib/components/VDataTable/VDataTableHeaderDesktop.mjs.map +0 -1
  173. package/lib/components/VDataTable/VDataTableHeaderMobile.mjs +0 -89
  174. package/lib/components/VDataTable/VDataTableHeaderMobile.mjs.map +0 -1
  175. package/lib/components/VDataTable/VEditDialog.mjs +0 -127
  176. package/lib/components/VDataTable/VEditDialog.mjs.map +0 -1
  177. package/lib/components/VDataTable/VEditDialog.sass +0 -22
  178. package/lib/components/VDataTable/VVirtualTable.mjs +0 -132
  179. package/lib/components/VDataTable/VVirtualTable.mjs.map +0 -1
  180. package/lib/components/VDataTable/VVirtualTable.sass +0 -13
  181. package/lib/components/VDataTable/_variables.scss +0 -24
  182. package/lib/components/VDataTable/index.mjs +0 -21
  183. package/lib/components/VDataTable/index.mjs.map +0 -1
  184. package/lib/components/VDataTable/mixins/header.mjs +0 -71
  185. package/lib/components/VDataTable/mixins/header.mjs.map +0 -1
  186. package/lib/components/VVirtualScroll/VVirtualScroll.mjs +0 -108
  187. package/lib/components/VVirtualScroll/VVirtualScroll.mjs.map +0 -1
  188. package/lib/components/VVirtualScroll/index.mjs +0 -4
  189. package/lib/components/VVirtualScroll/index.mjs.map +0 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.0.6
2
+ * Vuetify v3.1.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -260,15 +260,6 @@
260
260
  }
261
261
  return out;
262
262
  }
263
- function flattenFragments(nodes) {
264
- return nodes.map(node => {
265
- if (node.type === vue.Fragment) {
266
- return flattenFragments(node.children);
267
- } else {
268
- return node;
269
- }
270
- }).flat();
271
- }
272
263
  function toKebabCase() {
273
264
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
274
265
  return str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
@@ -3699,7 +3690,8 @@
3699
3690
  checkboxIndeterminate: 'mdi-minus-box',
3700
3691
  delimiter: 'mdi-circle',
3701
3692
  // for carousel
3702
- sort: 'mdi-arrow-up',
3693
+ sortAsc: 'mdi-arrow-up',
3694
+ sortDesc: 'mdi-arrow-down',
3703
3695
  expand: 'mdi-chevron-down',
3704
3696
  menu: 'mdi-menu',
3705
3697
  subgroup: 'mdi-menu-down',
@@ -3732,8 +3724,7 @@
3732
3724
  const IconSymbol = Symbol.for('vuetify:icons');
3733
3725
  const makeIconProps = propsFactory({
3734
3726
  icon: {
3735
- type: IconValue,
3736
- required: true
3727
+ type: IconValue
3737
3728
  },
3738
3729
  // Could not remove this and use makeTagProps, types complained because it is not required
3739
3730
  tag: {
@@ -3744,10 +3735,14 @@
3744
3735
  const VComponentIcon = defineComponent({
3745
3736
  name: 'VComponentIcon',
3746
3737
  props: makeIconProps(),
3747
- setup(props) {
3738
+ setup(props, _ref) {
3739
+ let {
3740
+ slots
3741
+ } = _ref;
3748
3742
  return () => {
3743
+ var _slots$default;
3749
3744
  return vue.createVNode(props.tag, null, {
3750
- default: () => [vue.createVNode(props.icon, null, null)]
3745
+ default: () => [props.icon ? vue.createVNode(props.icon, null, null) : (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]
3751
3746
  });
3752
3747
  };
3753
3748
  }
@@ -3756,10 +3751,10 @@
3756
3751
  name: 'VSvgIcon',
3757
3752
  inheritAttrs: false,
3758
3753
  props: makeIconProps(),
3759
- setup(props, _ref) {
3754
+ setup(props, _ref2) {
3760
3755
  let {
3761
3756
  attrs
3762
- } = _ref;
3757
+ } = _ref2;
3763
3758
  return () => {
3764
3759
  return vue.createVNode(props.tag, vue.mergeProps(attrs, {
3765
3760
  "style": null
@@ -3824,7 +3819,9 @@
3824
3819
  if (!icons) throw new Error('Missing Vuetify Icons provide!');
3825
3820
  const iconData = vue.computed(() => {
3826
3821
  const iconAlias = vue.isRef(props) ? props.value : props.icon;
3827
- if (!iconAlias) throw new Error('Icon value is undefined or null');
3822
+ if (!iconAlias) return {
3823
+ component: VComponentIcon
3824
+ };
3828
3825
  let icon = iconAlias;
3829
3826
  if (typeof icon === 'string') {
3830
3827
  icon = icon.trim();
@@ -3908,10 +3905,10 @@
3908
3905
  let slotIcon;
3909
3906
  if (slots.default) {
3910
3907
  slotIcon = vue.computed(() => {
3911
- var _slots$default, _flattenFragments$fil;
3908
+ var _slots$default, _slot$filter$;
3912
3909
  const slot = (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots);
3913
3910
  if (!slot) return;
3914
- return (_flattenFragments$fil = flattenFragments(slot).filter(node => node.children && typeof node.children === 'string')[0]) == null ? void 0 : _flattenFragments$fil.children;
3911
+ return (_slot$filter$ = slot.filter(node => node.type === vue.Text && node.children && typeof node.children === 'string')[0]) == null ? void 0 : _slot$filter$.children;
3915
3912
  });
3916
3913
  }
3917
3914
  const {
@@ -3927,22 +3924,27 @@
3927
3924
  textColorClasses,
3928
3925
  textColorStyles
3929
3926
  } = useTextColor(vue.toRef(props, 'color'));
3930
- useRender(() => vue.createVNode(iconData.value.component, {
3931
- "tag": props.tag,
3932
- "icon": iconData.value.icon,
3933
- "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
3934
- 'v-icon--clickable': !!attrs.onClick,
3935
- 'v-icon--start': props.start,
3936
- 'v-icon--end': props.end
3937
- }],
3938
- "style": [!sizeClasses.value ? {
3939
- fontSize: convertToUnit(props.size),
3940
- height: convertToUnit(props.size),
3941
- width: convertToUnit(props.size)
3942
- } : undefined, textColorStyles.value],
3943
- "role": attrs.onClick ? 'button' : undefined,
3944
- "aria-hidden": !attrs.onClick
3945
- }, null));
3927
+ useRender(() => {
3928
+ var _slots$default2;
3929
+ return vue.createVNode(iconData.value.component, {
3930
+ "tag": props.tag,
3931
+ "icon": iconData.value.icon,
3932
+ "class": ['v-icon', 'notranslate', themeClasses.value, sizeClasses.value, textColorClasses.value, {
3933
+ 'v-icon--clickable': !!attrs.onClick,
3934
+ 'v-icon--start': props.start,
3935
+ 'v-icon--end': props.end
3936
+ }],
3937
+ "style": [!sizeClasses.value ? {
3938
+ fontSize: convertToUnit(props.size),
3939
+ height: convertToUnit(props.size),
3940
+ width: convertToUnit(props.size)
3941
+ } : undefined, textColorStyles.value],
3942
+ "role": attrs.onClick ? 'button' : undefined,
3943
+ "aria-hidden": !attrs.onClick
3944
+ }, {
3945
+ default: () => [(_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots)]
3946
+ });
3947
+ });
3946
3948
  return {};
3947
3949
  }
3948
3950
  });
@@ -6270,8 +6272,18 @@
6270
6272
  const uid = getUid();
6271
6273
  const id = vue.computed(() => props.id || `v-selection-control-group-${uid}`);
6272
6274
  const name = vue.computed(() => props.name || id.value);
6275
+ const updateHandlers = new Set();
6273
6276
  vue.provide(VSelectionControlGroupSymbol, {
6274
- modelValue
6277
+ modelValue,
6278
+ forceUpdate: () => {
6279
+ updateHandlers.forEach(fn => fn());
6280
+ },
6281
+ onForceUpdate: cb => {
6282
+ updateHandlers.add(cb);
6283
+ vue.onScopeDispose(() => {
6284
+ updateHandlers.delete(cb);
6285
+ });
6286
+ }
6275
6287
  });
6276
6288
  provideDefaults({
6277
6289
  [props.defaultsTarget]: {
@@ -6297,7 +6309,6 @@
6297
6309
  "class": ['v-selection-control-group', {
6298
6310
  'v-selection-control-group--inline': props.inline
6299
6311
  }],
6300
- "aria-labelled-by": props.type === 'radio' ? id.value : undefined,
6301
6312
  "role": props.type === 'radio' ? 'radiogroup' : undefined
6302
6313
  }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]);
6303
6314
  });
@@ -6376,6 +6387,7 @@
6376
6387
  slots
6377
6388
  } = _ref;
6378
6389
  const {
6390
+ group,
6379
6391
  densityClasses,
6380
6392
  icon,
6381
6393
  model,
@@ -6388,6 +6400,11 @@
6388
6400
  const isFocused = vue.ref(false);
6389
6401
  const isFocusVisible = vue.ref(false);
6390
6402
  const input = vue.ref();
6403
+ group == null ? void 0 : group.onForceUpdate(() => {
6404
+ if (input.value) {
6405
+ input.value.checked = model.value;
6406
+ }
6407
+ });
6391
6408
  function onFocus(e) {
6392
6409
  isFocused.value = true;
6393
6410
  if (!SUPPORTS_FOCUS_VISIBLE || SUPPORTS_FOCUS_VISIBLE && e.target.matches(':focus-visible')) {
@@ -6399,6 +6416,9 @@
6399
6416
  isFocusVisible.value = false;
6400
6417
  }
6401
6418
  function onInput(e) {
6419
+ if (props.readonly && group) {
6420
+ vue.nextTick(() => group.forceUpdate());
6421
+ }
6402
6422
  model.value = e.target.checked;
6403
6423
  }
6404
6424
  useRender(() => {
@@ -6435,7 +6455,7 @@
6435
6455
  "onBlur": onBlur,
6436
6456
  "onFocus": onFocus,
6437
6457
  "onInput": onInput,
6438
- "aria-readonly": props.readonly,
6458
+ "aria-disabled": props.readonly,
6439
6459
  "type": props.type,
6440
6460
  "value": trueValue.value,
6441
6461
  "name": props.name,
@@ -6625,7 +6645,8 @@
6625
6645
  default: () => [props.image ? vue.createVNode(VImg, {
6626
6646
  "key": "image",
6627
6647
  "src": props.image,
6628
- "alt": ""
6648
+ "alt": "",
6649
+ "cover": true
6629
6650
  }, null) : props.icon ? vue.createVNode(VIcon, {
6630
6651
  "key": "icon",
6631
6652
  "icon": props.icon
@@ -9906,14 +9927,17 @@
9906
9927
  default: () => [!items.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
9907
9928
  "title": t(props.noDataText)
9908
9929
  }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), items.value.map((item, index) => {
9909
- var _slots$item;
9910
- return ((_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
9911
- item,
9912
- index,
9913
- props: vue.mergeProps(item.props, {
9914
- onClick: () => select(item)
9915
- })
9916
- })) ?? vue.createVNode(VListItem, vue.mergeProps({
9930
+ if (slots.item) {
9931
+ var _slots$item;
9932
+ return (_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
9933
+ item,
9934
+ index,
9935
+ props: vue.mergeProps(item.props, {
9936
+ onClick: () => select(item)
9937
+ })
9938
+ });
9939
+ }
9940
+ return vue.createVNode(VListItem, vue.mergeProps({
9917
9941
  "key": index
9918
9942
  }, item.props, {
9919
9943
  "onClick": () => select(item)
@@ -10004,7 +10028,7 @@
10004
10028
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10005
10029
  if (!(items != null && items.length)) return array;
10006
10030
  loop: for (let i = 0; i < items.length; i++) {
10007
- const item = items[i];
10031
+ const item = items[i].raw;
10008
10032
  const customMatches = {};
10009
10033
  const defaultMatches = {};
10010
10034
  let match = -1;
@@ -10046,34 +10070,43 @@
10046
10070
  }
10047
10071
  function useFilter(props, items, query) {
10048
10072
  const strQuery = vue.computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10049
- const filteredItems = vue.computed(() => {
10073
+ const filteredItems = vue.ref([]);
10074
+ const filteredMatches = vue.ref(new Map());
10075
+ vue.watchEffect(() => {
10076
+ filteredItems.value = [];
10077
+ filteredMatches.value = new Map();
10050
10078
  const transformedItems = vue.unref(items);
10051
- const matches = filterItems(transformedItems, strQuery.value, {
10079
+ const results = filterItems(transformedItems, strQuery.value, {
10052
10080
  customKeyFilter: props.customKeyFilter,
10053
10081
  default: props.customFilter,
10054
10082
  filterKeys: props.filterKeys,
10055
10083
  filterMode: props.filterMode,
10056
10084
  noFilter: props.noFilter
10057
10085
  });
10058
- return matches.map(_ref => {
10086
+ results.forEach(_ref => {
10059
10087
  let {
10060
10088
  index,
10061
10089
  matches
10062
10090
  } = _ref;
10063
- return {
10064
- item: transformedItems[index],
10065
- matches
10066
- };
10091
+ const item = transformedItems[index];
10092
+ filteredItems.value.push(item);
10093
+ filteredMatches.value.set(item.value, matches);
10067
10094
  });
10068
10095
  });
10096
+ function getMatches(item) {
10097
+ return filteredMatches.value.get(item.value);
10098
+ }
10069
10099
  return {
10070
- filteredItems
10100
+ filteredItems,
10101
+ filteredMatches,
10102
+ getMatches
10071
10103
  };
10072
10104
  }
10073
10105
 
10074
10106
  // Types
10075
10107
 
10076
10108
  function highlightResult$1(text, matches, length) {
10109
+ if (matches == null) return text;
10077
10110
  if (Array.isArray(matches)) throw new Error('Multiple matches is not implemented');
10078
10111
  return typeof matches === 'number' && ~matches ? vue.createVNode(vue.Fragment, null, [vue.createVNode("span", {
10079
10112
  "class": "v-autocomplete__unmask"
@@ -10127,7 +10160,8 @@
10127
10160
  return props.multiple ? transformed : transformed[0] ?? null;
10128
10161
  });
10129
10162
  const {
10130
- filteredItems
10163
+ filteredItems,
10164
+ getMatches
10131
10165
  } = useFilter(props, items, vue.computed(() => isPristine.value ? undefined : search.value));
10132
10166
  const selections = vue.computed(() => {
10133
10167
  return model.value.map(v => {
@@ -10275,12 +10309,8 @@
10275
10309
  }, {
10276
10310
  default: () => [!filteredItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
10277
10311
  "title": t(props.noDataText)
10278
- }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), filteredItems.value.map((_ref2, index) => {
10312
+ }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), filteredItems.value.map((item, index) => {
10279
10313
  var _slots$item;
10280
- let {
10281
- item,
10282
- matches
10283
- } = _ref2;
10284
10314
  return ((_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
10285
10315
  item,
10286
10316
  index,
@@ -10292,18 +10322,18 @@
10292
10322
  }, item.props, {
10293
10323
  "onClick": () => select(item)
10294
10324
  }), {
10295
- prepend: _ref3 => {
10325
+ prepend: _ref2 => {
10296
10326
  let {
10297
10327
  isSelected
10298
- } = _ref3;
10328
+ } = _ref2;
10299
10329
  return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
10300
10330
  "modelValue": isSelected,
10301
10331
  "ripple": false
10302
10332
  }, null) : undefined;
10303
10333
  },
10304
10334
  title: () => {
10305
- var _search$value;
10306
- return isPristine.value ? item.title : highlightResult$1(item.title, matches.title, ((_search$value = search.value) == null ? void 0 : _search$value.length) ?? 0);
10335
+ var _getMatches, _search$value;
10336
+ return isPristine.value ? item.title : highlightResult$1(item.title, (_getMatches = getMatches(item)) == null ? void 0 : _getMatches.title, ((_search$value = search.value) == null ? void 0 : _search$value.length) ?? 0);
10307
10337
  }
10308
10338
  });
10309
10339
  }), (_slots$appendItem = slots['append-item']) == null ? void 0 : _slots$appendItem.call(slots)]
@@ -10687,7 +10717,24 @@
10687
10717
  }
10688
10718
  });
10689
10719
 
10690
- const VBreadcrumbsDivider = createSimpleFunctional('v-breadcrumbs-divider', 'li');
10720
+ const VBreadcrumbsDivider = defineComponent({
10721
+ name: 'VBreadcrumbsDivider',
10722
+ props: {
10723
+ divider: [Number, String]
10724
+ },
10725
+ setup(props, _ref) {
10726
+ let {
10727
+ slots
10728
+ } = _ref;
10729
+ useRender(() => {
10730
+ var _slots$default;
10731
+ return vue.createVNode("li", {
10732
+ "class": "v-breadcrumbs-divider"
10733
+ }, [(slots == null ? void 0 : (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)) ?? props.divider]);
10734
+ });
10735
+ return {};
10736
+ }
10737
+ });
10691
10738
 
10692
10739
  const VBreadcrumbsItem = defineComponent({
10693
10740
  name: 'VBreadcrumbsItem',
@@ -10780,6 +10827,9 @@
10780
10827
  roundedClasses
10781
10828
  } = useRounded(props);
10782
10829
  provideDefaults({
10830
+ VBreadcrumbsDivider: {
10831
+ divider: vue.toRef(props, 'divider')
10832
+ },
10783
10833
  VBreadcrumbsItem: {
10784
10834
  activeClass: vue.toRef(props, 'activeClass'),
10785
10835
  activeColor: vue.toRef(props, 'activeColor'),
@@ -10806,28 +10856,28 @@
10806
10856
  default: () => [vue.createVNode("div", {
10807
10857
  "class": "v-breadcrumbs__prepend"
10808
10858
  }, [slots.prepend ? slots.prepend() : props.icon && vue.createVNode(VIcon, null, null)])]
10809
- }), props.items.map((item, index, array) => {
10810
- var _slots$divider;
10811
- return vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
10812
- "key": index,
10813
- "disabled": index >= array.length - 1
10814
- }, typeof item === 'string' ? {
10815
- title: item
10816
- } : item), {
10817
- default: slots.title ? () => {
10818
- var _slots$title;
10819
- return (_slots$title = slots.title) == null ? void 0 : _slots$title.call(slots, {
10820
- item,
10821
- index
10822
- });
10823
- } : undefined
10824
- }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
10825
- default: () => [((_slots$divider = slots.divider) == null ? void 0 : _slots$divider.call(slots, {
10859
+ }), props.items.map((item, index, array) => vue.createVNode(vue.Fragment, null, [vue.createVNode(VBreadcrumbsItem, vue.mergeProps({
10860
+ "key": index,
10861
+ "disabled": index >= array.length - 1
10862
+ }, typeof item === 'string' ? {
10863
+ title: item
10864
+ } : item), {
10865
+ default: slots.title ? () => {
10866
+ var _slots$title;
10867
+ return (_slots$title = slots.title) == null ? void 0 : _slots$title.call(slots, {
10826
10868
  item,
10827
10869
  index
10828
- })) ?? props.divider]
10829
- })]);
10830
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]
10870
+ });
10871
+ } : undefined
10872
+ }), index < array.length - 1 && vue.createVNode(VBreadcrumbsDivider, null, {
10873
+ default: slots.divider ? () => {
10874
+ var _slots$divider;
10875
+ return (_slots$divider = slots.divider) == null ? void 0 : _slots$divider.call(slots, {
10876
+ item,
10877
+ index
10878
+ });
10879
+ } : undefined
10880
+ })])), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)]
10831
10881
  });
10832
10882
  });
10833
10883
  return {};
@@ -13208,7 +13258,6 @@
13208
13258
 
13209
13259
  const VColorPicker = defineComponent({
13210
13260
  name: 'VColorPicker',
13211
- inheritAttrs: false,
13212
13261
  props: {
13213
13262
  canvasHeight: {
13214
13263
  type: [String, Number],
@@ -13332,6 +13381,7 @@
13332
13381
  // Types
13333
13382
 
13334
13383
  function highlightResult(text, matches, length) {
13384
+ if (matches == null) return text;
13335
13385
  if (Array.isArray(matches)) throw new Error('Multiple matches is not implemented');
13336
13386
  return typeof matches === 'number' && ~matches ? vue.createVNode(vue.Fragment, null, [vue.createVNode("span", {
13337
13387
  "class": "v-combobox__unmask"
@@ -13433,7 +13483,8 @@
13433
13483
  }
13434
13484
  });
13435
13485
  const {
13436
- filteredItems
13486
+ filteredItems,
13487
+ getMatches
13437
13488
  } = useFilter(props, items, vue.computed(() => isPristine.value ? undefined : search.value));
13438
13489
  const selections = vue.computed(() => {
13439
13490
  return model.value.map(v => {
@@ -13610,12 +13661,8 @@
13610
13661
  }, {
13611
13662
  default: () => [!filteredItems.value.length && !props.hideNoData && (((_slots$noData = slots['no-data']) == null ? void 0 : _slots$noData.call(slots)) ?? vue.createVNode(VListItem, {
13612
13663
  "title": t(props.noDataText)
13613
- }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), filteredItems.value.map((_ref2, index) => {
13664
+ }, null)), (_slots$prependItem = slots['prepend-item']) == null ? void 0 : _slots$prependItem.call(slots), filteredItems.value.map((item, index) => {
13614
13665
  var _slots$item;
13615
- let {
13616
- item,
13617
- matches
13618
- } = _ref2;
13619
13666
  return ((_slots$item = slots.item) == null ? void 0 : _slots$item.call(slots, {
13620
13667
  item,
13621
13668
  index,
@@ -13627,18 +13674,18 @@
13627
13674
  }, item.props, {
13628
13675
  "onClick": () => select(item)
13629
13676
  }), {
13630
- prepend: _ref3 => {
13677
+ prepend: _ref2 => {
13631
13678
  let {
13632
13679
  isSelected
13633
- } = _ref3;
13680
+ } = _ref2;
13634
13681
  return props.multiple && !props.hideSelected ? vue.createVNode(VCheckboxBtn, {
13635
13682
  "modelValue": isSelected,
13636
13683
  "ripple": false
13637
13684
  }, null) : undefined;
13638
13685
  },
13639
13686
  title: () => {
13640
- var _search$value;
13641
- return isPristine.value ? item.title : highlightResult(item.title, matches.title, ((_search$value = search.value) == null ? void 0 : _search$value.length) ?? 0);
13687
+ var _getMatches, _search$value;
13688
+ return isPristine.value ? item.title : highlightResult(item.title, (_getMatches = getMatches(item)) == null ? void 0 : _getMatches.title, ((_search$value = search.value) == null ? void 0 : _search$value.length) ?? 0);
13642
13689
  }
13643
13690
  });
13644
13691
  }), (_slots$appendItem = slots['append-item']) == null ? void 0 : _slots$appendItem.call(slots)]
@@ -15244,7 +15291,10 @@
15244
15291
  default: null
15245
15292
  },
15246
15293
  permanent: Boolean,
15247
- rail: Boolean,
15294
+ rail: {
15295
+ type: Boolean,
15296
+ default: null
15297
+ },
15248
15298
  railWidth: {
15249
15299
  type: [Number, String],
15250
15300
  default: 56
@@ -15276,11 +15326,13 @@
15276
15326
  ...makeThemeProps()
15277
15327
  },
15278
15328
  emits: {
15279
- 'update:modelValue': val => true
15329
+ 'update:modelValue': val => true,
15330
+ 'update:rail': val => true
15280
15331
  },
15281
15332
  setup(props, _ref) {
15282
15333
  let {
15283
15334
  attrs,
15335
+ emit,
15284
15336
  slots
15285
15337
  } = _ref;
15286
15338
  const {
@@ -15320,6 +15372,9 @@
15320
15372
  });
15321
15373
  const isTemporary = vue.computed(() => !props.permanent && (mobile.value || props.temporary));
15322
15374
  const isSticky = vue.computed(() => props.sticky && !isTemporary.value && location.value !== 'bottom');
15375
+ if (props.expandOnHover && props.rail != null) {
15376
+ vue.watch(isHovering, val => emit('update:rail', !val));
15377
+ }
15323
15378
  if (!props.disableResizeWatcher) {
15324
15379
  vue.watch(isTemporary, val => !props.permanent && vue.nextTick(() => isActive.value = !val));
15325
15380
  }
@@ -15470,8 +15525,6 @@
15470
15525
  };
15471
15526
  }
15472
15527
 
15473
- // Types
15474
-
15475
15528
  const VPagination = defineComponent({
15476
15529
  name: 'VPagination',
15477
15530
  props: {
@@ -15576,6 +15629,9 @@
15576
15629
  const {
15577
15630
  themeClasses
15578
15631
  } = provideTheme(props);
15632
+ const {
15633
+ width
15634
+ } = useDisplay();
15579
15635
  const maxButtons = vue.ref(-1);
15580
15636
  provideDefaults(undefined, {
15581
15637
  scoped: true
@@ -15592,17 +15648,20 @@
15592
15648
  if (!firstItem) return;
15593
15649
  const totalWidth = contentRect.width;
15594
15650
  const itemWidth = firstItem.offsetWidth + parseFloat(getComputedStyle(firstItem).marginRight) * 2;
15595
- const minButtons = props.showFirstLastPage ? 5 : 3;
15596
- maxButtons.value = Math.max(0, Math.floor(
15597
- // Round to two decimal places to avoid floating point errors
15598
- +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
15651
+ maxButtons.value = getMax(totalWidth, itemWidth);
15599
15652
  });
15600
15653
  const length = vue.computed(() => parseInt(props.length, 10));
15601
15654
  const start = vue.computed(() => parseInt(props.start, 10));
15602
15655
  const totalVisible = vue.computed(() => {
15603
15656
  if (props.totalVisible) return parseInt(props.totalVisible, 10);else if (maxButtons.value >= 0) return maxButtons.value;
15604
- return length.value;
15657
+ return getMax(width.value, 58);
15605
15658
  });
15659
+ function getMax(totalWidth, itemWidth) {
15660
+ const minButtons = props.showFirstLastPage ? 5 : 3;
15661
+ return Math.max(0, Math.floor(
15662
+ // Round to two decimal places to avoid floating point errors
15663
+ +((totalWidth - itemWidth * minButtons) / itemWidth).toFixed(2)));
15664
+ }
15606
15665
  const range = vue.computed(() => {
15607
15666
  if (length.value <= 0 || isNaN(length.value) || length.value > Number.MAX_SAFE_INTEGER) return [];
15608
15667
  if (totalVisible.value <= 1) return [page.value];
@@ -15949,7 +16008,7 @@
15949
16008
  isReadonly
15950
16009
  } = _ref2;
15951
16010
  return vue.createVNode(vue.Fragment, null, [label && vue.createVNode(VLabel, {
15952
- "for": id.value
16011
+ "id": id.value
15953
16012
  }, {
15954
16013
  default: () => [label]
15955
16014
  }), vue.createVNode(VSelectionControlGroup, vue.mergeProps(controlProps, {
@@ -15959,7 +16018,8 @@
15959
16018
  "falseIcon": props.falseIcon,
15960
16019
  "type": props.type,
15961
16020
  "disabled": isDisabled.value,
15962
- "readonly": isReadonly.value
16021
+ "readonly": isReadonly.value,
16022
+ "aria-labelledby": label ? id.value : undefined
15963
16023
  }, controlAttrs, {
15964
16024
  "modelValue": model.value,
15965
16025
  "onUpdate:modelValue": $event => model.value = $event
@@ -17295,7 +17355,7 @@
17295
17355
  densityClasses
17296
17356
  } = useDensity(props);
17297
17357
  useRender(() => {
17298
- var _slots$top, _slots$bottom;
17358
+ var _slots$top, _slots$wrapper, _slots$bottom;
17299
17359
  return vue.createVNode(props.tag, {
17300
17360
  "class": ['v-table', {
17301
17361
  'v-table--fixed-height': !!props.height,
@@ -17306,12 +17366,12 @@
17306
17366
  'v-table--hover': props.hover
17307
17367
  }, themeClasses.value, densityClasses.value]
17308
17368
  }, {
17309
- default: () => [(_slots$top = slots.top) == null ? void 0 : _slots$top.call(slots), slots.default && vue.createVNode("div", {
17369
+ default: () => [(_slots$top = slots.top) == null ? void 0 : _slots$top.call(slots), slots.default ? vue.createVNode("div", {
17310
17370
  "class": "v-table__wrapper",
17311
17371
  "style": {
17312
17372
  height: convertToUnit(props.height)
17313
17373
  }
17314
- }, [vue.createVNode("table", null, [slots.default()])]), (_slots$bottom = slots.bottom) == null ? void 0 : _slots$bottom.call(slots)]
17374
+ }, [vue.createVNode("table", null, [slots.default()])]) : (_slots$wrapper = slots.wrapper) == null ? void 0 : _slots$wrapper.call(slots), (_slots$bottom = slots.bottom) == null ? void 0 : _slots$bottom.call(slots)]
17315
17375
  });
17316
17376
  });
17317
17377
  return {};
@@ -18225,19 +18285,21 @@
18225
18285
  }
18226
18286
  }
18227
18287
  getUid.reset();
18228
- app.mixin({
18229
- computed: {
18230
- $vuetify() {
18231
- return vue.reactive({
18232
- defaults: inject.call(this, DefaultsSymbol),
18233
- display: inject.call(this, DisplaySymbol),
18234
- theme: inject.call(this, ThemeSymbol),
18235
- icons: inject.call(this, IconSymbol),
18236
- locale: inject.call(this, LocaleSymbol)
18237
- });
18288
+ if (typeof __VUE_OPTIONS_API__ !== 'boolean' || __VUE_OPTIONS_API__) {
18289
+ app.mixin({
18290
+ computed: {
18291
+ $vuetify() {
18292
+ return vue.reactive({
18293
+ defaults: inject.call(this, DefaultsSymbol),
18294
+ display: inject.call(this, DisplaySymbol),
18295
+ theme: inject.call(this, ThemeSymbol),
18296
+ icons: inject.call(this, IconSymbol),
18297
+ locale: inject.call(this, LocaleSymbol)
18298
+ });
18299
+ }
18238
18300
  }
18239
- }
18240
- });
18301
+ });
18302
+ }
18241
18303
  };
18242
18304
  return {
18243
18305
  install,
@@ -18248,7 +18310,7 @@
18248
18310
  locale
18249
18311
  };
18250
18312
  }
18251
- const version$1 = "3.0.6";
18313
+ const version$1 = "3.1.0";
18252
18314
  createVuetify$1.version = version$1;
18253
18315
 
18254
18316
  // Vue's inject() can only be used in setup
@@ -18269,7 +18331,7 @@
18269
18331
  ...options
18270
18332
  });
18271
18333
  };
18272
- const version = "3.0.6";
18334
+ const version = "3.1.0";
18273
18335
  createVuetify.version = version;
18274
18336
 
18275
18337
  exports.components = components;