vuetify 3.1.1 → 3.1.3

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 (135) hide show
  1. package/dist/json/attributes.json +495 -483
  2. package/dist/json/importMap.json +58 -58
  3. package/dist/json/tags.json +4 -1
  4. package/dist/json/web-types.json +892 -839
  5. package/dist/vuetify-labs.css +356 -346
  6. package/dist/vuetify-labs.d.ts +257 -179
  7. package/dist/vuetify-labs.esm.js +432 -278
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +431 -277
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +94 -84
  12. package/dist/vuetify.d.ts +261 -194
  13. package/dist/vuetify.esm.js +346 -242
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +345 -241
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +731 -721
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/blueprints/index.d.ts +2 -2
  21. package/lib/blueprints/md1.d.ts +2 -2
  22. package/lib/blueprints/md2.d.ts +2 -2
  23. package/lib/blueprints/md3.d.ts +2 -2
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs +4 -2
  25. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  26. package/lib/components/VAutocomplete/index.d.ts +43 -20
  27. package/lib/components/VBtn/VBtn.mjs +16 -5
  28. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  29. package/lib/components/VCard/VCard.mjs +5 -2
  30. package/lib/components/VCard/VCard.mjs.map +1 -1
  31. package/lib/components/VCard/index.d.ts +8 -2
  32. package/lib/components/VChip/VChip.mjs +18 -4
  33. package/lib/components/VChip/VChip.mjs.map +1 -1
  34. package/lib/components/VChip/index.d.ts +15 -2
  35. package/lib/components/VChipGroup/VChipGroup.mjs +1 -0
  36. package/lib/components/VChipGroup/VChipGroup.mjs.map +1 -1
  37. package/lib/components/VCombobox/VCombobox.mjs +5 -4
  38. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  39. package/lib/components/VCombobox/index.d.ts +43 -20
  40. package/lib/components/VDefaultsProvider/index.d.ts +5 -4
  41. package/lib/components/VDialog/VDialog.mjs +6 -5
  42. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  43. package/lib/components/VDialog/index.d.ts +57 -34
  44. package/lib/components/VDivider/VDivider.mjs +6 -6
  45. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  46. package/lib/components/VField/VField.mjs +28 -26
  47. package/lib/components/VField/VField.mjs.map +1 -1
  48. package/lib/components/VFileInput/VFileInput.css +1 -0
  49. package/lib/components/VFileInput/VFileInput.mjs +7 -4
  50. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  51. package/lib/components/VFileInput/VFileInput.sass +1 -0
  52. package/lib/components/VForm/index.d.ts +0 -3
  53. package/lib/components/VGrid/VGrid.css +5 -0
  54. package/lib/components/VGrid/VGrid.sass +5 -0
  55. package/lib/components/VList/VList.mjs +4 -1
  56. package/lib/components/VList/VList.mjs.map +1 -1
  57. package/lib/components/VList/VListItem.css +1 -1
  58. package/lib/components/VList/VListItem.mjs +34 -20
  59. package/lib/components/VList/VListItem.mjs.map +1 -1
  60. package/lib/components/VList/VListItem.sass +1 -1
  61. package/lib/components/VList/index.d.ts +20 -1
  62. package/lib/components/VMenu/VMenu.mjs +6 -5
  63. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  64. package/lib/components/VMenu/index.d.ts +57 -34
  65. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  66. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  67. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  68. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  69. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  70. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  71. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  72. package/lib/components/VOverlay/index.d.ts +34 -11
  73. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  74. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  75. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  76. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  77. package/lib/components/VPagination/VPagination.mjs +1 -1
  78. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  79. package/lib/components/VProgressLinear/VProgressLinear.mjs +13 -1
  80. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  81. package/lib/components/VProgressLinear/index.d.ts +18 -0
  82. package/lib/components/VSelect/VSelect.mjs +4 -4
  83. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  84. package/lib/components/VSelect/index.d.ts +43 -20
  85. package/lib/components/VSlider/VSliderThumb.mjs +5 -1
  86. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  87. package/lib/components/VSnackbar/index.d.ts +42 -19
  88. package/lib/components/VTable/VTable.css +4 -4
  89. package/lib/components/VTable/VTable.sass +2 -2
  90. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  91. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  92. package/lib/components/VTooltip/index.d.ts +57 -34
  93. package/lib/components/index.d.ts +247 -179
  94. package/lib/composables/defaults.mjs +1 -1
  95. package/lib/composables/defaults.mjs.map +1 -1
  96. package/lib/composables/filter.mjs +3 -3
  97. package/lib/composables/filter.mjs.map +1 -1
  98. package/lib/composables/form.mjs +0 -1
  99. package/lib/composables/form.mjs.map +1 -1
  100. package/lib/composables/teleport.mjs +6 -7
  101. package/lib/composables/teleport.mjs.map +1 -1
  102. package/lib/composables/toggleScope.mjs +14 -7
  103. package/lib/composables/toggleScope.mjs.map +1 -1
  104. package/lib/entry-bundler.mjs +1 -1
  105. package/lib/framework.mjs +1 -1
  106. package/lib/index.d.ts +17 -17
  107. package/lib/labs/VDataTable/VDataTable.mjs +10 -6
  108. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  109. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs +3 -3
  110. package/lib/labs/VDataTable/VDataTableGroupHeaderRow.mjs.map +1 -1
  111. package/lib/labs/VDataTable/VDataTableRows.mjs +36 -8
  112. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  113. package/lib/labs/VDataTable/VDataTableServer.mjs +23 -10
  114. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  115. package/lib/labs/VDataTable/VDataTableVirtual.mjs +6 -2
  116. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  117. package/lib/labs/VDataTable/composables/group.mjs +9 -4
  118. package/lib/labs/VDataTable/composables/group.mjs.map +1 -1
  119. package/lib/labs/VDataTable/composables/options.mjs +4 -2
  120. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  121. package/lib/labs/VDataTable/composables/sort.mjs +3 -5
  122. package/lib/labs/VDataTable/composables/sort.mjs.map +1 -1
  123. package/lib/labs/VDataTable/index.d.ts +11 -0
  124. package/lib/labs/components.d.ts +11 -0
  125. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  126. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  127. package/lib/locale/en.mjs +2 -2
  128. package/lib/locale/en.mjs.map +1 -1
  129. package/lib/locale/sv.mjs +7 -7
  130. package/lib/locale/sv.mjs.map +1 -1
  131. package/lib/util/defineComponent.mjs +21 -18
  132. package/lib/util/defineComponent.mjs.map +1 -1
  133. package/lib/util/helpers.mjs +5 -1
  134. package/lib/util/helpers.mjs.map +1 -1
  135. package/package.json +2 -2
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.1.1
2
+ * Vuetify v3.1.3
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
6
6
 
7
- import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, effectScope, onScopeDispose, shallowRef, shallowReactive, toRaw, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
7
+ import { ref, onBeforeUnmount, watch, readonly, reactive, computed, watchEffect, toRefs, capitalize, getCurrentInstance as getCurrentInstance$1, unref, provide, inject as inject$1, onScopeDispose, effectScope, shallowRef, defineComponent as defineComponent$1, camelize, h, onDeactivated, onActivated, onMounted, createVNode, TransitionGroup, Transition, mergeProps, onBeforeMount, nextTick, withDirectives, Fragment, resolveDirective, vShow, isRef, toRef, Text, resolveDynamicComponent, cloneVNode, warn, toHandlers, Teleport, createTextVNode, onBeforeUpdate, vModelText } from 'vue';
8
8
 
9
9
  const IN_BROWSER = typeof window !== 'undefined';
10
10
  const SUPPORTS_INTERSECTION = IN_BROWSER && 'IntersectionObserver' in window;
@@ -258,8 +258,12 @@ function mergeDeep() {
258
258
  }
259
259
  function toKebabCase() {
260
260
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
261
- return str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
261
+ if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
262
+ const kebab = str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
263
+ toKebabCase.cache.set(str, kebab);
264
+ return kebab;
262
265
  }
266
+ toKebabCase.cache = new Map();
263
267
  function findChildrenWithProvide(key, vnode) {
264
268
  if (!vnode || typeof vnode !== 'object') return [];
265
269
  if (Array.isArray(vnode)) {
@@ -886,7 +890,7 @@ function injectSelf(key) {
886
890
 
887
891
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
888
892
  function createDefaults(options) {
889
- return ref(options ?? {});
893
+ return ref(options);
890
894
  }
891
895
  function useDefaults() {
892
896
  const defaults = inject$1(DefaultsSymbol);
@@ -918,23 +922,30 @@ function provideDefaults(defaults, options) {
918
922
  return newDefaults;
919
923
  }
920
924
 
921
- function useToggleScope(source, cb) {
925
+ function useToggleScope(source, fn) {
922
926
  let scope;
927
+ function start() {
928
+ scope = effectScope();
929
+ scope.run(() => fn.length ? fn(() => {
930
+ var _scope;
931
+ (_scope = scope) == null ? void 0 : _scope.stop();
932
+ start();
933
+ }) : fn());
934
+ }
923
935
  watch(source, active => {
924
936
  if (active && !scope) {
925
- scope = effectScope();
926
- scope.run(cb);
937
+ start();
927
938
  } else if (!active) {
928
- var _scope;
929
- (_scope = scope) == null ? void 0 : _scope.stop();
939
+ var _scope2;
940
+ (_scope2 = scope) == null ? void 0 : _scope2.stop();
930
941
  scope = undefined;
931
942
  }
932
943
  }, {
933
944
  immediate: true
934
945
  });
935
946
  onScopeDispose(() => {
936
- var _scope2;
937
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
947
+ var _scope3;
948
+ (_scope3 = scope) == null ? void 0 : _scope3.stop();
938
949
  });
939
950
  }
940
951
 
@@ -1003,33 +1014,36 @@ const defineComponent = function defineComponent(options) {
1003
1014
  options.props = propsFactory(options.props, toKebabCase(options.name))();
1004
1015
  options.props._as = String;
1005
1016
  options.setup = function setup(props, ctx) {
1006
- const vm = getCurrentInstance$1();
1007
1017
  const defaults = useDefaults();
1008
- const _subcomponentDefaults = shallowRef();
1009
- const _props = shallowReactive({
1010
- ...toRaw(props)
1018
+
1019
+ // Skip props proxy if defaults are not provided
1020
+ if (!defaults.value) return options._setup(props, ctx);
1021
+ const vm = getCurrentInstance$1();
1022
+ const componentDefaults = computed(() => defaults.value[props._as ?? options.name]);
1023
+ const _props = new Proxy(props, {
1024
+ get(target, prop) {
1025
+ if (!propIsDefined(vm.vnode, prop)) {
1026
+ var _componentDefaults$va, _global;
1027
+ return ((_componentDefaults$va = componentDefaults.value) == null ? void 0 : _componentDefaults$va[prop]) ?? ((_global = defaults.value.global) == null ? void 0 : _global[prop]) ?? target[prop];
1028
+ }
1029
+ return Reflect.get(target, prop);
1030
+ }
1011
1031
  });
1032
+ const _subcomponentDefaults = shallowRef();
1012
1033
  watchEffect(() => {
1013
- const globalDefaults = defaults.value.global;
1014
- const componentDefaults = defaults.value[props._as ?? options.name];
1015
- if (componentDefaults) {
1016
- const subComponents = Object.entries(componentDefaults).filter(_ref => {
1034
+ if (componentDefaults.value) {
1035
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1017
1036
  let [key] = _ref;
1018
1037
  return key.startsWith(key[0].toUpperCase());
1019
1038
  });
1020
1039
  if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1021
1040
  }
1022
- for (const prop of Object.keys(props)) {
1023
- let newVal = props[prop];
1024
- if (!propIsDefined(vm.vnode, prop)) {
1025
- newVal = (componentDefaults == null ? void 0 : componentDefaults[prop]) ?? (globalDefaults == null ? void 0 : globalDefaults[prop]) ?? props[prop];
1026
- }
1027
- if (_props[prop] !== newVal) {
1028
- _props[prop] = newVal;
1029
- }
1030
- }
1031
1041
  });
1032
1042
  const setupBindings = options._setup(_props, ctx);
1043
+
1044
+ // If subcomponent defaults are provided, override any
1045
+ // subcomponents provided by the component's setup function.
1046
+ // This uses injectSelf so must be done after the original setup to work.
1033
1047
  useToggleScope(_subcomponentDefaults, () => {
1034
1048
  var _injectSelf;
1035
1049
  provideDefaults(mergeDeep(((_injectSelf = injectSelf(DefaultsSymbol)) == null ? void 0 : _injectSelf.value) ?? {}, _subcomponentDefaults.value));
@@ -1888,8 +1902,8 @@ var en = {
1888
1902
  root: 'Pagination Navigation',
1889
1903
  next: 'Next page',
1890
1904
  previous: 'Previous page',
1891
- page: 'Goto Page {0}',
1892
- currentPage: 'Page {0}, Current Page',
1905
+ page: 'Go to page {0}',
1906
+ currentPage: 'Page {0}, Current page',
1893
1907
  first: 'First page',
1894
1908
  last: 'Last page'
1895
1909
  }
@@ -4380,9 +4394,69 @@ const Ripple = {
4380
4394
  updated: updated$1
4381
4395
  };
4382
4396
 
4397
+ // Composables
4398
+
4399
+ // Types
4400
+
4401
+ const oppositeMap = {
4402
+ center: 'center',
4403
+ top: 'bottom',
4404
+ bottom: 'top',
4405
+ left: 'right',
4406
+ right: 'left'
4407
+ };
4408
+ const makeLocationProps = propsFactory({
4409
+ location: String
4410
+ }, 'location');
4411
+ function useLocation(props) {
4412
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4413
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
4414
+ const {
4415
+ isRtl
4416
+ } = useRtl();
4417
+ const locationStyles = computed(() => {
4418
+ if (!props.location) return {};
4419
+ const {
4420
+ side,
4421
+ align
4422
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4423
+ function getOffset(side) {
4424
+ return offset ? offset(side) : 0;
4425
+ }
4426
+ const styles = {};
4427
+ if (side !== 'center') {
4428
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4429
+ }
4430
+ if (align !== 'center') {
4431
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4432
+ } else {
4433
+ if (side === 'center') styles.top = styles.left = '50%';else {
4434
+ styles[{
4435
+ top: 'left',
4436
+ bottom: 'left',
4437
+ left: 'top',
4438
+ right: 'top'
4439
+ }[side]] = '50%';
4440
+ }
4441
+ styles.transform = {
4442
+ top: 'translateX(-50%)',
4443
+ bottom: 'translateX(-50%)',
4444
+ left: 'translateY(-50%)',
4445
+ right: 'translateY(-50%)',
4446
+ center: 'translate(-50%, -50%)'
4447
+ }[side];
4448
+ }
4449
+ return styles;
4450
+ });
4451
+ return {
4452
+ locationStyles
4453
+ };
4454
+ }
4455
+
4383
4456
  const VProgressLinear = defineComponent({
4384
4457
  name: 'VProgressLinear',
4385
4458
  props: {
4459
+ absolute: Boolean,
4386
4460
  active: {
4387
4461
  type: Boolean,
4388
4462
  default: true
@@ -4412,6 +4486,9 @@ const VProgressLinear = defineComponent({
4412
4486
  stream: Boolean,
4413
4487
  striped: Boolean,
4414
4488
  roundedBar: Boolean,
4489
+ ...makeLocationProps({
4490
+ location: 'top'
4491
+ }),
4415
4492
  ...makeRoundedProps(),
4416
4493
  ...makeTagProps(),
4417
4494
  ...makeThemeProps()
@@ -4430,6 +4507,9 @@ const VProgressLinear = defineComponent({
4430
4507
  const {
4431
4508
  themeClasses
4432
4509
  } = provideTheme(props);
4510
+ const {
4511
+ locationStyles
4512
+ } = useLocation(props);
4433
4513
  const {
4434
4514
  textColorClasses,
4435
4515
  textColorStyles
@@ -4471,6 +4551,7 @@ const VProgressLinear = defineComponent({
4471
4551
  useRender(() => createVNode(props.tag, {
4472
4552
  "ref": intersectionRef,
4473
4553
  "class": ['v-progress-linear', {
4554
+ 'v-progress-linear--absolute': props.absolute,
4474
4555
  'v-progress-linear--active': props.active && isIntersecting.value,
4475
4556
  'v-progress-linear--reverse': isReversed.value,
4476
4557
  'v-progress-linear--rounded': props.rounded,
@@ -4478,8 +4559,11 @@ const VProgressLinear = defineComponent({
4478
4559
  'v-progress-linear--striped': props.striped
4479
4560
  }, roundedClasses.value, themeClasses.value],
4480
4561
  "style": {
4562
+ bottom: props.location === 'bottom' ? 0 : undefined,
4563
+ top: props.location === 'top' ? 0 : undefined,
4481
4564
  height: props.active ? convertToUnit(height.value) : 0,
4482
- '--v-progress-linear-height': convertToUnit(height.value)
4565
+ '--v-progress-linear-height': convertToUnit(height.value),
4566
+ ...locationStyles.value
4483
4567
  },
4484
4568
  "role": "progressbar",
4485
4569
  "aria-hidden": props.active ? 'false' : 'true',
@@ -4565,65 +4649,6 @@ function LoaderSlot(props, _ref) {
4565
4649
  }, null)]);
4566
4650
  }
4567
4651
 
4568
- // Composables
4569
-
4570
- // Types
4571
-
4572
- const oppositeMap = {
4573
- center: 'center',
4574
- top: 'bottom',
4575
- bottom: 'top',
4576
- left: 'right',
4577
- right: 'left'
4578
- };
4579
- const makeLocationProps = propsFactory({
4580
- location: String
4581
- }, 'location');
4582
- function useLocation(props) {
4583
- let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4584
- let offset = arguments.length > 2 ? arguments[2] : undefined;
4585
- const {
4586
- isRtl
4587
- } = useRtl();
4588
- const locationStyles = computed(() => {
4589
- if (!props.location) return {};
4590
- const {
4591
- side,
4592
- align
4593
- } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4594
- function getOffset(side) {
4595
- return offset ? offset(side) : 0;
4596
- }
4597
- const styles = {};
4598
- if (side !== 'center') {
4599
- if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4600
- }
4601
- if (align !== 'center') {
4602
- if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4603
- } else {
4604
- if (side === 'center') styles.top = styles.left = '50%';else {
4605
- styles[{
4606
- top: 'left',
4607
- bottom: 'left',
4608
- left: 'top',
4609
- right: 'top'
4610
- }[side]] = '50%';
4611
- }
4612
- styles.transform = {
4613
- top: 'translateX(-50%)',
4614
- bottom: 'translateX(-50%)',
4615
- left: 'translateY(-50%)',
4616
- right: 'translateY(-50%)',
4617
- center: 'translate(-50%, -50%)'
4618
- }[side];
4619
- }
4620
- return styles;
4621
- });
4622
- return {
4623
- locationStyles
4624
- };
4625
- }
4626
-
4627
4652
  // Utilities
4628
4653
 
4629
4654
  // Types
@@ -4829,21 +4854,31 @@ const VBtn = defineComponent({
4829
4854
  const group = useGroupItem(props, props.symbol, false);
4830
4855
  const link = useLink(props, attrs);
4831
4856
  const isActive = computed(() => {
4832
- var _link$isActive;
4833
- return props.active !== false && (props.active || ((_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value) || (group == null ? void 0 : group.isSelected.value));
4857
+ if (props.active !== undefined) {
4858
+ return props.active;
4859
+ }
4860
+ if (link.isLink.value) {
4861
+ var _link$isActive;
4862
+ return (_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value;
4863
+ }
4864
+ return group == null ? void 0 : group.isSelected.value;
4834
4865
  });
4835
4866
  const isDisabled = computed(() => (group == null ? void 0 : group.disabled.value) || props.disabled);
4836
4867
  const isElevated = computed(() => {
4837
4868
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4838
4869
  });
4870
+ const valueAttr = computed(() => {
4871
+ if (props.value === undefined) return undefined;
4872
+ return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
4873
+ });
4839
4874
  useSelectLink(link, group == null ? void 0 : group.select);
4840
4875
  useRender(() => {
4841
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4876
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4842
4877
  const Tag = link.isLink.value ? 'a' : props.tag;
4843
- const hasColor = !group || group.isSelected.value;
4844
4878
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4845
4879
  const hasAppend = !!(props.appendIcon || slots.append);
4846
4880
  const hasIcon = !!(props.icon && props.icon !== true);
4881
+ const hasColor = (group == null ? void 0 : group.isSelected.value) && (!link.isLink.value || ((_link$isActive2 = link.isActive) == null ? void 0 : _link$isActive2.value)) || !group || ((_link$isActive3 = link.isActive) == null ? void 0 : _link$isActive3.value);
4847
4882
  return withDirectives(createVNode(Tag, {
4848
4883
  "type": Tag === 'a' ? undefined : 'button',
4849
4884
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4864,7 +4899,8 @@ const VBtn = defineComponent({
4864
4899
  if (isDisabled.value) return;
4865
4900
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4866
4901
  group == null ? void 0 : group.toggle();
4867
- }
4902
+ },
4903
+ "value": valueAttr.value
4868
4904
  }, {
4869
4905
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4870
4906
  "key": "prepend",
@@ -5338,32 +5374,34 @@ const VField = genericComponent()({
5338
5374
  if (hasLabel.value) {
5339
5375
  const el = labelRef.value.$el;
5340
5376
  const targetEl = floatingLabelRef.value.$el;
5341
- const rect = nullifyTransforms(el);
5342
- const targetRect = targetEl.getBoundingClientRect();
5343
- const x = targetRect.x - rect.x;
5344
- const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5345
- const targetWidth = targetRect.width / 0.75;
5346
- const width = Math.abs(targetWidth - rect.width) > 1 ? {
5347
- maxWidth: convertToUnit(targetWidth)
5348
- } : undefined;
5349
- const style = getComputedStyle(el);
5350
- const targetStyle = getComputedStyle(targetEl);
5351
- const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5352
- const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5353
- const color = targetStyle.getPropertyValue('color');
5354
- el.style.visibility = 'visible';
5355
- targetEl.style.visibility = 'hidden';
5356
- animate(el, {
5357
- transform: `translate(${x}px, ${y}px) scale(${scale})`,
5358
- color,
5359
- ...width
5360
- }, {
5361
- duration,
5362
- easing: standardEasing,
5363
- direction: val ? 'normal' : 'reverse'
5364
- }).finished.then(() => {
5365
- el.style.removeProperty('visibility');
5366
- targetEl.style.removeProperty('visibility');
5377
+ requestAnimationFrame(() => {
5378
+ const rect = nullifyTransforms(el);
5379
+ const targetRect = targetEl.getBoundingClientRect();
5380
+ const x = targetRect.x - rect.x;
5381
+ const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5382
+ const targetWidth = targetRect.width / 0.75;
5383
+ const width = Math.abs(targetWidth - rect.width) > 1 ? {
5384
+ maxWidth: convertToUnit(targetWidth)
5385
+ } : undefined;
5386
+ const style = getComputedStyle(el);
5387
+ const targetStyle = getComputedStyle(targetEl);
5388
+ const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5389
+ const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5390
+ const color = targetStyle.getPropertyValue('color');
5391
+ el.style.visibility = 'visible';
5392
+ targetEl.style.visibility = 'hidden';
5393
+ animate(el, {
5394
+ transform: `translate(${x}px, ${y}px) scale(${scale})`,
5395
+ color,
5396
+ ...width
5397
+ }, {
5398
+ duration,
5399
+ easing: standardEasing,
5400
+ direction: val ? 'normal' : 'reverse'
5401
+ }).finished.then(() => {
5402
+ el.style.removeProperty('visibility');
5403
+ targetEl.style.removeProperty('visibility');
5404
+ });
5367
5405
  });
5368
5406
  }
5369
5407
  }, {
@@ -5552,7 +5590,6 @@ const FormKey = Symbol.for('vuetify:form');
5552
5590
  const makeFormProps = propsFactory({
5553
5591
  disabled: Boolean,
5554
5592
  fastFail: Boolean,
5555
- lazyValidation: Boolean,
5556
5593
  readonly: Boolean,
5557
5594
  modelValue: {
5558
5595
  type: Boolean,
@@ -6697,6 +6734,7 @@ const VChipGroup = defineComponent({
6697
6734
  provideDefaults({
6698
6735
  VChip: {
6699
6736
  color: toRef(props, 'color'),
6737
+ disabled: toRef(props, 'disabled'),
6700
6738
  filter: toRef(props, 'filter'),
6701
6739
  variant: toRef(props, 'variant')
6702
6740
  }
@@ -6746,7 +6784,10 @@ const VChip = defineComponent({
6746
6784
  default: '$complete'
6747
6785
  },
6748
6786
  label: Boolean,
6749
- link: Boolean,
6787
+ link: {
6788
+ type: Boolean,
6789
+ default: undefined
6790
+ },
6750
6791
  pill: Boolean,
6751
6792
  prependAvatar: String,
6752
6793
  prependIcon: IconValue,
@@ -6759,6 +6800,8 @@ const VChip = defineComponent({
6759
6800
  type: Boolean,
6760
6801
  default: true
6761
6802
  },
6803
+ onClick: EventProp,
6804
+ onClickOnce: EventProp,
6762
6805
  ...makeBorderProps(),
6763
6806
  ...makeDensityProps(),
6764
6807
  ...makeElevationProps(),
@@ -6812,7 +6855,8 @@ const VChip = defineComponent({
6812
6855
  const isActive = useProxiedModel(props, 'modelValue');
6813
6856
  const group = useGroupItem(props, VChipGroupSymbol, false);
6814
6857
  const link = useLink(props, attrs);
6815
- const isClickable = computed(() => !props.disabled && (!!group || link.isClickable.value || props.link));
6858
+ const isLink = computed(() => props.link !== false && link.isLink.value);
6859
+ const isClickable = computed(() => !props.disabled && props.link !== false && (!!group || props.link || link.isClickable.value));
6816
6860
  function onCloseClick(e) {
6817
6861
  isActive.value = false;
6818
6862
  emit('click:close', e);
@@ -6824,6 +6868,12 @@ const VChip = defineComponent({
6824
6868
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
6825
6869
  group == null ? void 0 : group.toggle();
6826
6870
  }
6871
+ function onKeyDown(e) {
6872
+ if (e.key === 'Enter' || e.key === ' ') {
6873
+ e.preventDefault();
6874
+ onClick(e);
6875
+ }
6876
+ }
6827
6877
  return () => {
6828
6878
  var _slots$default;
6829
6879
  const Tag = link.isLink.value ? 'a' : props.tag;
@@ -6844,7 +6894,9 @@ const VChip = defineComponent({
6844
6894
  "disabled": props.disabled || undefined,
6845
6895
  "draggable": props.draggable,
6846
6896
  "href": link.href.value,
6847
- "onClick": onClick
6897
+ "tabindex": isClickable.value ? 0 : undefined,
6898
+ "onClick": onClick,
6899
+ "onKeydown": isClickable.value && !isLink.value && onKeyDown
6848
6900
  }, {
6849
6901
  default: () => [genOverlays(isClickable.value, 'v-chip'), hasFilter && createVNode(VDefaultsProvider, {
6850
6902
  "key": "filter",
@@ -6941,9 +6993,9 @@ const VDivider = defineComponent({
6941
6993
  themeClasses
6942
6994
  } = provideTheme(props);
6943
6995
  const {
6944
- backgroundColorClasses,
6945
- backgroundColorStyles
6946
- } = useBackgroundColor(toRef(props, 'color'));
6996
+ textColorClasses,
6997
+ textColorStyles
6998
+ } = useTextColor(toRef(props, 'color'));
6947
6999
  const dividerStyles = computed(() => {
6948
7000
  const styles = {};
6949
7001
  if (props.length) {
@@ -6959,8 +7011,8 @@ const VDivider = defineComponent({
6959
7011
  'v-divider': true,
6960
7012
  'v-divider--inset': props.inset,
6961
7013
  'v-divider--vertical': props.vertical
6962
- }, themeClasses.value, backgroundColorClasses.value],
6963
- "style": [dividerStyles.value, backgroundColorStyles.value],
7014
+ }, themeClasses.value, textColorClasses.value],
7015
+ "style": [dividerStyles.value, textColorStyles.value],
6964
7016
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
6965
7017
  "role": `${attrs.role || 'separator'}`
6966
7018
  }, null));
@@ -7560,6 +7612,10 @@ const VListItem = genericComponent()({
7560
7612
  nav: Boolean,
7561
7613
  prependAvatar: String,
7562
7614
  prependIcon: IconValue,
7615
+ ripple: {
7616
+ type: Boolean,
7617
+ default: true
7618
+ },
7563
7619
  subtitle: [String, Number, Boolean],
7564
7620
  title: [String, Number, Boolean],
7565
7621
  value: null,
@@ -7666,7 +7722,7 @@ const VListItem = genericComponent()({
7666
7722
  }
7667
7723
  }
7668
7724
  useRender(() => {
7669
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7725
+ var _slots$title, _slots$subtitle, _slots$default;
7670
7726
  const Tag = isLink.value ? 'a' : props.tag;
7671
7727
  const hasColor = !list || isSelected.value || isActive.value;
7672
7728
  const hasTitle = slots.title || props.title;
@@ -7689,7 +7745,18 @@ const VListItem = genericComponent()({
7689
7745
  "onClick": onClick,
7690
7746
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7691
7747
  }, {
7692
- default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode(VDefaultsProvider, {
7748
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode("div", {
7749
+ "key": "prepend",
7750
+ "class": "v-list-item__prepend"
7751
+ }, [props.prependAvatar && createVNode(VAvatar, {
7752
+ "key": "prepend-avatar",
7753
+ "density": props.density,
7754
+ "image": props.prependAvatar
7755
+ }, null), props.prependIcon && createVNode(VIcon, {
7756
+ "key": "prepend-icon",
7757
+ "density": props.density,
7758
+ "icon": props.prependIcon
7759
+ }, null), slots.prepend && createVNode(VDefaultsProvider, {
7693
7760
  "key": "prepend",
7694
7761
  "defaults": {
7695
7762
  VAvatar: {
@@ -7705,14 +7772,8 @@ const VListItem = genericComponent()({
7705
7772
  }
7706
7773
  }
7707
7774
  }, {
7708
- default: () => [createVNode("div", {
7709
- "class": "v-list-item__prepend"
7710
- }, [props.prependAvatar && createVNode(VAvatar, {
7711
- "key": "prepend-avatar"
7712
- }, null), props.prependIcon && createVNode(VIcon, {
7713
- "key": "prepend-icon"
7714
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7715
- }), createVNode("div", {
7775
+ default: () => [slots.prepend(slotProps.value)]
7776
+ })]), createVNode("div", {
7716
7777
  "class": "v-list-item__content",
7717
7778
  "data-no-activator": ""
7718
7779
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7727,7 +7788,10 @@ const VListItem = genericComponent()({
7727
7788
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7728
7789
  subtitle: props.subtitle
7729
7790
  })) ?? props.subtitle]
7730
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode(VDefaultsProvider, {
7791
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode("div", {
7792
+ "key": "append",
7793
+ "class": "v-list-item__append"
7794
+ }, [slots.append && createVNode(VDefaultsProvider, {
7731
7795
  "key": "append",
7732
7796
  "defaults": {
7733
7797
  VAvatar: {
@@ -7743,15 +7807,17 @@ const VListItem = genericComponent()({
7743
7807
  }
7744
7808
  }
7745
7809
  }, {
7746
- default: () => [createVNode("div", {
7747
- "class": "v-list-item__append"
7748
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && createVNode(VIcon, {
7749
- "key": "append-icon"
7750
- }, null), props.appendAvatar && createVNode(VAvatar, {
7751
- "key": "append-avatar"
7752
- }, null)])]
7753
- })]
7754
- }), [[resolveDirective("ripple"), isClickable.value]]);
7810
+ default: () => [slots.append(slotProps.value)]
7811
+ }), props.appendIcon && createVNode(VIcon, {
7812
+ "key": "append-icon",
7813
+ "density": props.density,
7814
+ "icon": props.appendIcon
7815
+ }, null), props.appendAvatar && createVNode(VAvatar, {
7816
+ "key": "append-avatar",
7817
+ "density": props.density,
7818
+ "image": props.appendAvatar
7819
+ }, null)])]
7820
+ }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7755
7821
  });
7756
7822
  return {};
7757
7823
  }
@@ -7964,9 +8030,12 @@ function useItems(props) {
7964
8030
 
7965
8031
  // Types
7966
8032
 
8033
+ function isPrimitive(value) {
8034
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8035
+ }
7967
8036
  function transformItem(props, item) {
7968
8037
  const type = getPropertyFromItem(item, props.itemType, 'item');
7969
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8038
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
7970
8039
  const value = getPropertyFromItem(item, props.itemValue, undefined);
7971
8040
  const children = getPropertyFromItem(item, props.itemChildren);
7972
8041
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8592,17 +8661,12 @@ const makeLocationStrategyProps = propsFactory({
8592
8661
  function useLocationStrategies(props, data) {
8593
8662
  const contentStyles = ref({});
8594
8663
  const updateLocation = ref();
8595
- let scope;
8596
- watchEffect(async () => {
8597
- var _scope;
8598
- (_scope = scope) == null ? void 0 : _scope.stop();
8599
- updateLocation.value = undefined;
8600
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8601
- scope = effectScope();
8602
- if (!(props.locationStrategy === 'connected')) {
8603
- await nextTick();
8604
- }
8605
- scope.run(() => {
8664
+ if (IN_BROWSER) {
8665
+ useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {
8666
+ watch(() => props.locationStrategy, reset);
8667
+ onScopeDispose(() => {
8668
+ updateLocation.value = undefined;
8669
+ });
8606
8670
  if (typeof props.locationStrategy === 'function') {
8607
8671
  var _props$locationStrate;
8608
8672
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8611,16 +8675,14 @@ function useLocationStrategies(props, data) {
8611
8675
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8612
8676
  }
8613
8677
  });
8614
- });
8615
- IN_BROWSER && window.addEventListener('resize', onResize, {
8616
- passive: true
8617
- });
8618
- onScopeDispose(() => {
8619
- var _scope2;
8620
- IN_BROWSER && window.removeEventListener('resize', onResize);
8621
- updateLocation.value = undefined;
8622
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8623
- });
8678
+ window.addEventListener('resize', onResize, {
8679
+ passive: true
8680
+ });
8681
+ onScopeDispose(() => {
8682
+ window.removeEventListener('resize', onResize);
8683
+ updateLocation.value = undefined;
8684
+ });
8685
+ }
8624
8686
  function onResize(e) {
8625
8687
  var _updateLocation$value;
8626
8688
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8914,13 +8976,30 @@ function connectedLocationStrategy(data, props, contentStyles) {
8914
8976
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8915
8977
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8916
8978
  });
8979
+ return {
8980
+ available,
8981
+ contentBox
8982
+ };
8917
8983
  }
8918
- watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8919
- immediate: !activatorFixed
8920
- });
8921
- if (activatorFixed) nextTick(() => updateLocation());
8922
- requestAnimationFrame(() => {
8923
- if (contentStyles.value.maxHeight) updateLocation();
8984
+ watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());
8985
+ nextTick(() => {
8986
+ const result = updateLocation();
8987
+
8988
+ // TODO: overflowing content should only require a single updateLocation call
8989
+ // Icky hack to make sure the content is positioned consistently
8990
+ if (!result) return;
8991
+ const {
8992
+ available,
8993
+ contentBox
8994
+ } = result;
8995
+ if (contentBox.height > available.y) {
8996
+ requestAnimationFrame(() => {
8997
+ updateLocation();
8998
+ requestAnimationFrame(() => {
8999
+ updateLocation();
9000
+ });
9001
+ });
9002
+ }
8924
9003
  });
8925
9004
  return {
8926
9005
  updateLocation
@@ -8988,10 +9067,10 @@ function useScrollStrategies(props, data) {
8988
9067
  await nextTick();
8989
9068
  scope.run(() => {
8990
9069
  if (typeof props.scrollStrategy === 'function') {
8991
- props.scrollStrategy(data, props);
9070
+ props.scrollStrategy(data, props, scope);
8992
9071
  } else {
8993
9072
  var _scrollStrategies$pro;
8994
- (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props);
9073
+ (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props, scope);
8995
9074
  }
8996
9075
  });
8997
9076
  });
@@ -9037,9 +9116,10 @@ function blockScrollStrategy(data, props) {
9037
9116
  }
9038
9117
  });
9039
9118
  }
9040
- function repositionScrollStrategy(data) {
9119
+ function repositionScrollStrategy(data, props, scope) {
9041
9120
  let slow = false;
9042
9121
  let raf = -1;
9122
+ let ric = -1;
9043
9123
  function update(e) {
9044
9124
  requestNewFrame(() => {
9045
9125
  var _data$updateLocation$, _data$updateLocation;
@@ -9049,21 +9129,29 @@ function repositionScrollStrategy(data) {
9049
9129
  slow = time / (1000 / 60) > 2;
9050
9130
  });
9051
9131
  }
9052
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9053
- if (slow) {
9054
- // If the position calculation is slow,
9055
- // defer updates until scrolling is finished.
9056
- // Browsers usually fire one scroll event per frame so
9057
- // we just wait until we've got two frames without an event
9058
- cancelAnimationFrame(raf);
9059
- raf = requestAnimationFrame(() => {
9060
- raf = requestAnimationFrame(() => {
9132
+ ric = requestIdleCallback(() => {
9133
+ scope.run(() => {
9134
+ bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9135
+ if (slow) {
9136
+ // If the position calculation is slow,
9137
+ // defer updates until scrolling is finished.
9138
+ // Browsers usually fire one scroll event per frame so
9139
+ // we just wait until we've got two frames without an event
9140
+ cancelAnimationFrame(raf);
9141
+ raf = requestAnimationFrame(() => {
9142
+ raf = requestAnimationFrame(() => {
9143
+ update(e);
9144
+ });
9145
+ });
9146
+ } else {
9061
9147
  update(e);
9062
- });
9148
+ }
9063
9149
  });
9064
- } else {
9065
- update(e);
9066
- }
9150
+ });
9151
+ });
9152
+ onScopeDispose(() => {
9153
+ cancelIdleCallback(ric);
9154
+ cancelAnimationFrame(raf);
9067
9155
  });
9068
9156
  }
9069
9157
 
@@ -9292,19 +9380,18 @@ function useTeleport(target) {
9292
9380
  warn(`Unable to locate target ${_target}`);
9293
9381
  return undefined;
9294
9382
  }
9295
- if (!useTeleport.cache.has(targetElement)) {
9296
- const el = document.createElement('div');
9297
- el.className = 'v-overlay-container';
9298
- targetElement.appendChild(el);
9299
- useTeleport.cache.set(targetElement, el);
9383
+ let container = targetElement.querySelector('.v-overlay-container');
9384
+ if (!container) {
9385
+ container = document.createElement('div');
9386
+ container.className = 'v-overlay-container';
9387
+ targetElement.appendChild(container);
9300
9388
  }
9301
- return useTeleport.cache.get(targetElement);
9389
+ return container;
9302
9390
  });
9303
9391
  return {
9304
9392
  teleportTarget
9305
9393
  };
9306
9394
  }
9307
- useTeleport.cache = new WeakMap();
9308
9395
 
9309
9396
  function defaultConditional() {
9310
9397
  return true;
@@ -9707,6 +9794,11 @@ const VMenu = genericComponent()({
9707
9794
  function onClickOutside() {
9708
9795
  parent == null ? void 0 : parent.closeParents();
9709
9796
  }
9797
+ const activatorProps = computed(() => mergeProps({
9798
+ 'aria-haspopup': 'menu',
9799
+ 'aria-expanded': String(isActive.value),
9800
+ 'aria-owns': id.value
9801
+ }, props.activatorProps));
9710
9802
  useRender(() => {
9711
9803
  const [overlayProps] = filterVOverlayProps(props);
9712
9804
  return createVNode(VOverlay, mergeProps({
@@ -9716,11 +9808,7 @@ const VMenu = genericComponent()({
9716
9808
  "modelValue": isActive.value,
9717
9809
  "onUpdate:modelValue": $event => isActive.value = $event,
9718
9810
  "absolute": true,
9719
- "activatorProps": mergeProps({
9720
- 'aria-haspopup': 'menu',
9721
- 'aria-expanded': String(isActive.value),
9722
- 'aria-owns': id.value
9723
- }, props.activatorProps),
9811
+ "activatorProps": activatorProps.value,
9724
9812
  "onClick:outside": onClickOutside
9725
9813
  }, scopeId), {
9726
9814
  activator: slots.activator,
@@ -9834,8 +9922,10 @@ const VSelect = genericComponent()({
9834
9922
  }
9835
9923
  function onKeydown(e) {
9836
9924
  if (props.readonly || form != null && form.isReadonly.value) return;
9837
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9925
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9838
9926
  e.preventDefault();
9927
+ }
9928
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9839
9929
  menu.value = true;
9840
9930
  }
9841
9931
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9846,15 +9936,12 @@ const VSelect = genericComponent()({
9846
9936
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9847
9937
  } else if (e.key === 'ArrowUp') {
9848
9938
  var _listRef$value2;
9849
- e.preventDefault();
9850
9939
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9851
9940
  } else if (e.key === 'Home') {
9852
9941
  var _listRef$value3;
9853
- e.preventDefault();
9854
9942
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9855
9943
  } else if (e.key === 'End') {
9856
9944
  var _listRef$value4;
9857
- e.preventDefault();
9858
9945
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9859
9946
  }
9860
9947
  }
@@ -9920,6 +10007,7 @@ const VSelect = genericComponent()({
9920
10007
  "activator": "parent",
9921
10008
  "contentClass": "v-select__content",
9922
10009
  "eager": props.eager,
10010
+ "maxHeight": 310,
9923
10011
  "openOnClick": false,
9924
10012
  "closeOnContentClick": false,
9925
10013
  "transition": props.transition
@@ -10035,7 +10123,7 @@ function filterItems(items, query, options) {
10035
10123
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10036
10124
  if (!(items != null && items.length)) return array;
10037
10125
  loop: for (let i = 0; i < items.length; i++) {
10038
- const item = items[i].raw;
10126
+ const item = items[i];
10039
10127
  const customMatches = {};
10040
10128
  const defaultMatches = {};
10041
10129
  let match = -1;
@@ -10075,7 +10163,7 @@ function filterItems(items, query, options) {
10075
10163
  }
10076
10164
  return array;
10077
10165
  }
10078
- function useFilter(props, items, query) {
10166
+ function useFilter(props, items, query, options) {
10079
10167
  const strQuery = computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10080
10168
  const filteredItems = ref([]);
10081
10169
  const filteredMatches = ref(new Map());
@@ -10086,7 +10174,7 @@ function useFilter(props, items, query) {
10086
10174
  const results = filterItems(transformedItems, strQuery.value, {
10087
10175
  customKeyFilter: props.customKeyFilter,
10088
10176
  default: props.customFilter,
10089
- filterKeys: props.filterKeys,
10177
+ filterKeys: unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10090
10178
  filterMode: props.filterMode,
10091
10179
  noFilter: props.noFilter
10092
10180
  });
@@ -10197,6 +10285,9 @@ const VAutocomplete = genericComponent()({
10197
10285
  }
10198
10286
  function onKeydown(e) {
10199
10287
  if (props.readonly || form != null && form.isReadonly.value) return;
10288
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10289
+ e.preventDefault();
10290
+ }
10200
10291
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10201
10292
  menu.value = true;
10202
10293
  }
@@ -10208,11 +10299,9 @@ const VAutocomplete = genericComponent()({
10208
10299
  }
10209
10300
  if (e.key === 'ArrowDown') {
10210
10301
  var _listRef$value;
10211
- e.preventDefault();
10212
10302
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10213
10303
  } else if (e.key === 'ArrowUp') {
10214
10304
  var _listRef$value2;
10215
- e.preventDefault();
10216
10305
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10217
10306
  }
10218
10307
  }
@@ -10309,6 +10398,7 @@ const VAutocomplete = genericComponent()({
10309
10398
  "activator": "parent",
10310
10399
  "contentClass": "v-autocomplete__content",
10311
10400
  "eager": props.eager,
10401
+ "maxHeight": 310,
10312
10402
  "openOnClick": false,
10313
10403
  "closeOnContentClick": false,
10314
10404
  "transition": props.transition,
@@ -11017,7 +11107,10 @@ const VCard = defineComponent({
11017
11107
  },
11018
11108
  prependAvatar: String,
11019
11109
  prependIcon: IconValue,
11020
- ripple: Boolean,
11110
+ ripple: {
11111
+ type: Boolean,
11112
+ default: true
11113
+ },
11021
11114
  subtitle: String,
11022
11115
  text: String,
11023
11116
  title: String,
@@ -11138,7 +11231,7 @@ const VCard = defineComponent({
11138
11231
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), slots.actions && createVNode(VCardActions, null, {
11139
11232
  default: slots.actions
11140
11233
  }), genOverlays(isClickable.value, 'v-card')]
11141
- }), [[resolveDirective("ripple"), isClickable.value]]);
11234
+ }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
11142
11235
  });
11143
11236
  return {};
11144
11237
  }
@@ -12431,6 +12524,10 @@ const VSliderThumb = defineComponent({
12431
12524
  position: {
12432
12525
  type: Number,
12433
12526
  required: true
12527
+ },
12528
+ ripple: {
12529
+ type: Boolean,
12530
+ default: true
12434
12531
  }
12435
12532
  },
12436
12533
  emits: {
@@ -12531,7 +12628,7 @@ const VSliderThumb = defineComponent({
12531
12628
  }, null), withDirectives(createVNode("div", {
12532
12629
  "class": ['v-slider-thumb__ripple', textColorClasses.value],
12533
12630
  "style": textColorStyles.value
12534
- }, null), [[resolveDirective("ripple"), true, null, {
12631
+ }, null), [[resolveDirective("ripple"), props.ripple, null, {
12535
12632
  circle: true,
12536
12633
  center: true
12537
12634
  }]]), createVNode(VScaleTransition, {
@@ -13533,7 +13630,9 @@ const VCombobox = genericComponent()({
13533
13630
  if (props.readonly || form != null && form.isReadonly.value) return;
13534
13631
  const selectionStart = vTextFieldRef.value.selectionStart;
13535
13632
  const length = selected.value.length;
13536
- if (selectionIndex.value > -1) e.preventDefault();
13633
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13634
+ e.preventDefault();
13635
+ }
13537
13636
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13538
13637
  menu.value = true;
13539
13638
  }
@@ -13545,11 +13644,9 @@ const VCombobox = genericComponent()({
13545
13644
  }
13546
13645
  if (e.key === 'ArrowDown') {
13547
13646
  var _listRef$value;
13548
- e.preventDefault();
13549
13647
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13550
13648
  } else if (e.key === 'ArrowUp') {
13551
13649
  var _listRef$value2;
13552
- e.preventDefault();
13553
13650
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13554
13651
  }
13555
13652
  if (!props.multiple) return;
@@ -13583,7 +13680,7 @@ const VCombobox = genericComponent()({
13583
13680
  vTextFieldRef.value.setSelectionRange(0, 0);
13584
13681
  }
13585
13682
  }
13586
- if (e.key === 'Enter') {
13683
+ if (e.key === 'Enter' && search.value) {
13587
13684
  select(transformItem$1(props, search.value));
13588
13685
  search.value = '';
13589
13686
  }
@@ -13672,6 +13769,7 @@ const VCombobox = genericComponent()({
13672
13769
  "activator": "parent",
13673
13770
  "contentClass": "v-combobox__content",
13674
13771
  "eager": props.eager,
13772
+ "maxHeight": 310,
13675
13773
  "openOnClick": false,
13676
13774
  "closeOnContentClick": false,
13677
13775
  "transition": props.transition,
@@ -13843,6 +13941,10 @@ const VDialog = genericComponent()({
13843
13941
  });
13844
13942
  }
13845
13943
  });
13944
+ const activatorProps = computed(() => mergeProps({
13945
+ 'aria-haspopup': 'dialog',
13946
+ 'aria-expanded': String(isActive.value)
13947
+ }, props.activatorProps));
13846
13948
  useRender(() => {
13847
13949
  const [overlayProps] = filterVOverlayProps(props);
13848
13950
  return createVNode(VOverlay, mergeProps({
@@ -13856,10 +13958,7 @@ const VDialog = genericComponent()({
13856
13958
  "onUpdate:modelValue": $event => isActive.value = $event,
13857
13959
  "aria-role": "dialog",
13858
13960
  "aria-modal": "true",
13859
- "activatorProps": mergeProps({
13860
- 'aria-haspopup': 'dialog',
13861
- 'aria-expanded': String(isActive.value)
13862
- }, props.activatorProps)
13961
+ "activatorProps": activatorProps.value
13863
13962
  }, scopeId), {
13864
13963
  activator: slots.activator,
13865
13964
  default: function () {
@@ -14208,12 +14307,15 @@ const VFileInput = defineComponent({
14208
14307
  onFocus();
14209
14308
  nextTick(() => {
14210
14309
  model.value = [];
14211
- if (inputRef != null && inputRef.value) {
14212
- inputRef.value.value = '';
14213
- }
14214
14310
  callEvent(props['onClick:clear'], e);
14215
14311
  });
14216
14312
  }
14313
+ watch(model, newValue => {
14314
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14315
+ if (hasModelReset && inputRef.value) {
14316
+ inputRef.value.value = '';
14317
+ }
14318
+ });
14217
14319
  useRender(() => {
14218
14320
  const hasCounter = !!(slots.counter || props.counter);
14219
14321
  const hasDetails = !!(hasCounter || slots.details);
@@ -15204,7 +15306,7 @@ function useTouch(_ref) {
15204
15306
  window.removeEventListener('touchmove', onTouchmove);
15205
15307
  window.removeEventListener('touchend', onTouchend);
15206
15308
  });
15207
- const isHorizontal = computed(() => position.value !== 'bottom');
15309
+ const isHorizontal = computed(() => ['left', 'right'].includes(position.value));
15208
15310
  const {
15209
15311
  addMovement,
15210
15312
  endTouch,
@@ -15216,11 +15318,11 @@ function useTouch(_ref) {
15216
15318
  const offset = ref(0);
15217
15319
  let start;
15218
15320
  function getOffset(pos, active) {
15219
- return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15321
+ return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'top' ? pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15220
15322
  }
15221
15323
  function getProgress(pos) {
15222
15324
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15223
- const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
15325
+ const progress = position.value === 'left' ? (pos - offset.value) / width.value : position.value === 'right' ? (document.documentElement.clientWidth - pos - offset.value) / width.value : position.value === 'top' ? (pos - offset.value) / width.value : position.value === 'bottom' ? (document.documentElement.clientHeight - pos - offset.value) / width.value : oops();
15224
15326
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15225
15327
  }
15226
15328
  function onTouchstart(e) {
@@ -15228,8 +15330,8 @@ function useTouch(_ref) {
15228
15330
  const touchX = e.changedTouches[0].clientX;
15229
15331
  const touchY = e.changedTouches[0].clientY;
15230
15332
  const touchZone = 25;
15231
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15232
- const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
15333
+ const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'top' ? touchY < touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15334
+ const inElement = isActive.value && (position.value === 'left' ? touchX < width.value : position.value === 'right' ? touchX > document.documentElement.clientWidth - width.value : position.value === 'top' ? touchY < width.value : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - width.value : oops());
15233
15335
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15234
15336
  maybeDragging = true;
15235
15337
  start = [touchX, touchY];
@@ -15281,6 +15383,7 @@ function useTouch(_ref) {
15281
15383
  isActive.value = velocity.direction === ({
15282
15384
  left: 'right',
15283
15385
  right: 'left',
15386
+ top: 'down',
15284
15387
  bottom: 'up'
15285
15388
  }[position.value] || oops());
15286
15389
  } else {
@@ -15289,7 +15392,7 @@ function useTouch(_ref) {
15289
15392
  }
15290
15393
  const dragStyles = computed(() => {
15291
15394
  return isDragging.value ? {
15292
- transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),
15395
+ transform: position.value === 'left' ? `translateX(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'right' ? `translateX(calc(100% - ${dragProgress.value * width.value}px))` : position.value === 'top' ? `translateY(calc(-100% + ${dragProgress.value * width.value}px))` : position.value === 'bottom' ? `translateY(calc(100% - ${dragProgress.value * width.value}px))` : oops(),
15293
15396
  transition: 'none'
15294
15397
  } : undefined;
15295
15398
  });
@@ -15305,7 +15408,7 @@ function oops() {
15305
15408
 
15306
15409
  // Types
15307
15410
 
15308
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15411
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15309
15412
  const VNavigationDrawer = defineComponent({
15310
15413
  name: 'VNavigationDrawer',
15311
15414
  props: {
@@ -15762,7 +15865,7 @@ const VPagination = defineComponent({
15762
15865
  disabled: !!props.disabled || props.length < 2,
15763
15866
  color: isActive ? props.activeColor : props.color,
15764
15867
  ariaCurrent: isActive,
15765
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15868
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15766
15869
  onClick: e => setValue(e, item)
15767
15870
  }
15768
15871
  };
@@ -17941,6 +18044,9 @@ const VTooltip = genericComponent()({
17941
18044
  if (props.transition) return props.transition;
17942
18045
  return isActive.value ? 'scale-transition' : 'fade-transition';
17943
18046
  });
18047
+ const activatorProps = computed(() => mergeProps({
18048
+ 'aria-describedby': id.value
18049
+ }, props.activatorProps));
17944
18050
  useRender(() => {
17945
18051
  const [overlayProps] = filterVOverlayProps(props);
17946
18052
  return createVNode(VOverlay, mergeProps({
@@ -17957,9 +18063,7 @@ const VTooltip = genericComponent()({
17957
18063
  "persistent": true,
17958
18064
  "role": "tooltip",
17959
18065
  "eager": true,
17960
- "activatorProps": mergeProps({
17961
- 'aria-describedby': id.value
17962
- }, props.activatorProps),
18066
+ "activatorProps": activatorProps.value,
17963
18067
  "_disableGlobalStack": true
17964
18068
  }, scopeId), {
17965
18069
  activator: slots.activator,
@@ -18345,7 +18449,7 @@ function createVuetify$1() {
18345
18449
  locale
18346
18450
  };
18347
18451
  }
18348
- const version$1 = "3.1.1";
18452
+ const version$1 = "3.1.3";
18349
18453
  createVuetify$1.version = version$1;
18350
18454
 
18351
18455
  // Vue's inject() can only be used in setup
@@ -18366,7 +18470,7 @@ const createVuetify = function () {
18366
18470
  ...options
18367
18471
  });
18368
18472
  };
18369
- const version = "3.1.1";
18473
+ const version = "3.1.3";
18370
18474
  createVuetify.version = version;
18371
18475
 
18372
18476
  export { components, createVuetify, directives, useDisplay, useLayout, useLocale, useRtl, useTheme, version };