@vuetify/nightly 3.2.0-next-20230118.0 → 4.0.0-next-20230205.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 (170) hide show
  1. package/CHANGELOG.md +203 -16
  2. package/dist/json/importMap-labs.json +8 -4
  3. package/dist/json/importMap.json +8 -8
  4. package/dist/vuetify-labs.css +253 -246
  5. package/dist/vuetify-labs.d.ts +387 -176
  6. package/dist/vuetify-labs.esm.js +282 -215
  7. package/dist/vuetify-labs.esm.js.map +1 -1
  8. package/dist/vuetify-labs.js +281 -214
  9. package/dist/vuetify-labs.min.css +2 -2
  10. package/dist/vuetify.css +51 -44
  11. package/dist/vuetify.d.ts +317 -178
  12. package/dist/vuetify.esm.js +249 -185
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +248 -184
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +696 -685
  18. package/dist/vuetify.min.js.map +1 -1
  19. package/lib/blueprints/index.d.ts +2 -2
  20. package/lib/blueprints/md1.d.ts +2 -2
  21. package/lib/blueprints/md2.d.ts +2 -2
  22. package/lib/blueprints/md3.d.ts +2 -2
  23. package/lib/components/VAutocomplete/VAutocomplete.mjs +3 -2
  24. package/lib/components/VAutocomplete/VAutocomplete.mjs.map +1 -1
  25. package/lib/components/VAutocomplete/index.d.ts +43 -20
  26. package/lib/components/VBottomSheet/VBottomSheet.mjs +1 -4
  27. package/lib/components/VBottomSheet/VBottomSheet.mjs.map +1 -1
  28. package/lib/components/VBtn/VBtn.css +7 -7
  29. package/lib/components/VBtn/VBtn.mjs +8 -3
  30. package/lib/components/VBtn/VBtn.mjs.map +1 -1
  31. package/lib/components/VBtnGroup/VBtnGroup.mjs +15 -11
  32. package/lib/components/VBtnGroup/VBtnGroup.mjs.map +1 -1
  33. package/lib/components/VBtnGroup/index.d.ts +2 -1
  34. package/lib/components/VBtnToggle/VBtnToggle.mjs +9 -5
  35. package/lib/components/VBtnToggle/VBtnToggle.mjs.map +1 -1
  36. package/lib/components/VBtnToggle/index.d.ts +122 -1
  37. package/lib/components/VCalendar/VCalendar.mjs +3 -0
  38. package/lib/components/VCalendar/VCalendar.mjs.map +1 -1
  39. package/lib/components/VCalendar/VCalendarCategory.sass +9 -3
  40. package/lib/components/VCalendar/VCalendarDaily.mjs +20 -8
  41. package/lib/components/VCalendar/VCalendarDaily.mjs.map +1 -1
  42. package/lib/components/VCalendar/VCalendarWeekly.mjs +25 -5
  43. package/lib/components/VCalendar/VCalendarWeekly.mjs.map +1 -1
  44. package/lib/components/VCalendar/mixins/calendar-with-events.mjs +20 -16
  45. package/lib/components/VCalendar/mixins/calendar-with-events.mjs.map +1 -1
  46. package/lib/components/VCalendar/mixins/mouse.mjs +16 -30
  47. package/lib/components/VCalendar/mixins/mouse.mjs.map +1 -1
  48. package/lib/components/VCard/VCard.css +7 -7
  49. package/lib/components/VChip/VChip.css +7 -7
  50. package/lib/components/VCombobox/VCombobox.mjs +3 -3
  51. package/lib/components/VCombobox/VCombobox.mjs.map +1 -1
  52. package/lib/components/VCombobox/index.d.ts +43 -20
  53. package/lib/components/VData/VData.mjs +2 -4
  54. package/lib/components/VData/VData.mjs.map +1 -1
  55. package/lib/components/VDatePicker/VDatePicker.mjs +7 -5
  56. package/lib/components/VDatePicker/VDatePicker.mjs.map +1 -1
  57. package/lib/components/VDefaultsProvider/index.d.ts +5 -4
  58. package/lib/components/VDialog/VDialog.mjs +6 -5
  59. package/lib/components/VDialog/VDialog.mjs.map +1 -1
  60. package/lib/components/VDialog/index.d.ts +57 -34
  61. package/lib/components/VDivider/VDivider.mjs +6 -6
  62. package/lib/components/VDivider/VDivider.mjs.map +1 -1
  63. package/lib/components/VExpansionPanel/VExpansionPanel.css +7 -7
  64. package/lib/components/VField/VField.css +2 -2
  65. package/lib/components/VField/VField.mjs +28 -26
  66. package/lib/components/VField/VField.mjs.map +1 -1
  67. package/lib/components/VField/VField.sass +2 -2
  68. package/lib/components/VFileInput/VFileInput.mjs +7 -4
  69. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  70. package/lib/components/VForm/index.d.ts +0 -3
  71. package/lib/components/VList/VList.mjs +4 -1
  72. package/lib/components/VList/VList.mjs.map +1 -1
  73. package/lib/components/VList/VListItem.css +7 -7
  74. package/lib/components/VList/VListItem.mjs +29 -19
  75. package/lib/components/VList/VListItem.mjs.map +1 -1
  76. package/lib/components/VMenu/VMenu.mjs +6 -5
  77. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  78. package/lib/components/VMenu/index.d.ts +57 -34
  79. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  80. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  81. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  82. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  83. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  84. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  85. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  86. package/lib/components/VOtpInput/VOtpInput.mjs +22 -46
  87. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  88. package/lib/components/VOverflowBtn/VOverflowBtn.mjs +3 -0
  89. package/lib/components/VOverflowBtn/VOverflowBtn.mjs.map +1 -1
  90. package/lib/components/VOverlay/index.d.ts +34 -11
  91. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  92. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  93. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  94. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  95. package/lib/components/VPagination/VPagination.mjs +1 -1
  96. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  97. package/lib/components/VSelect/VSelect.mjs +3 -4
  98. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  99. package/lib/components/VSelect/index.d.ts +43 -20
  100. package/lib/components/VSelectionControl/VSelectionControl.css +2 -2
  101. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -1
  102. package/lib/components/VSnackbar/index.d.ts +42 -19
  103. package/lib/components/VStepper/VStepper.sass +6 -6
  104. package/lib/components/VStepper/VStepperStep.mjs +12 -2
  105. package/lib/components/VStepper/VStepperStep.mjs.map +1 -1
  106. package/lib/components/VTable/VTable.css +4 -4
  107. package/lib/components/VTable/VTable.sass +2 -2
  108. package/lib/components/VTimePicker/VTimePicker.mjs.map +1 -1
  109. package/lib/components/VTimeline/_mixins.sass +1 -1
  110. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  111. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  112. package/lib/components/VTooltip/index.d.ts +57 -34
  113. package/lib/components/VTreeview/VTreeview.mjs +1 -1
  114. package/lib/components/VTreeview/VTreeview.mjs.map +1 -1
  115. package/lib/components/index.d.ts +316 -176
  116. package/lib/composables/defaults.mjs +1 -1
  117. package/lib/composables/defaults.mjs.map +1 -1
  118. package/lib/composables/filter.mjs +3 -3
  119. package/lib/composables/filter.mjs.map +1 -1
  120. package/lib/composables/form.mjs +0 -1
  121. package/lib/composables/form.mjs.map +1 -1
  122. package/lib/composables/toggleScope.mjs +14 -7
  123. package/lib/composables/toggleScope.mjs.map +1 -1
  124. package/lib/directives/ripple/VRipple.css +3 -0
  125. package/lib/directives/ripple/VRipple.sass +3 -0
  126. package/lib/directives/ripple/_variables.scss +1 -1
  127. package/lib/directives/ripple/index.mjs +2 -7
  128. package/lib/directives/ripple/index.mjs.map +1 -1
  129. package/lib/entry-bundler.mjs +1 -1
  130. package/lib/framework.mjs +1 -1
  131. package/lib/index.d.ts +4 -4
  132. package/lib/labs/VDataTable/VDataTable.mjs +6 -6
  133. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  134. package/lib/labs/VDataTable/VDataTableFooter.mjs +1 -1
  135. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  136. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  137. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  138. package/lib/labs/VDataTable/VDataTableServer.mjs +19 -12
  139. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  140. package/lib/labs/VDataTable/VDataTableVirtual.mjs +6 -5
  141. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  142. package/lib/labs/VDataTable/composables/options.mjs +3 -7
  143. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  144. package/lib/labs/VDataTable/composables/paginate.mjs +1 -1
  145. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  146. package/lib/labs/VDataTable/index.d.ts +71 -1
  147. package/lib/labs/VDataTable/index.mjs +1 -0
  148. package/lib/labs/VDataTable/index.mjs.map +1 -1
  149. package/lib/labs/components.d.ts +71 -1
  150. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  151. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  152. package/lib/locale/ar.mjs +20 -20
  153. package/lib/locale/ar.mjs.map +1 -1
  154. package/lib/locale/en.mjs +2 -2
  155. package/lib/locale/en.mjs.map +1 -1
  156. package/lib/locale/es.mjs +3 -3
  157. package/lib/locale/es.mjs.map +1 -1
  158. package/lib/locale/fi.mjs +5 -5
  159. package/lib/locale/fi.mjs.map +1 -1
  160. package/lib/locale/it.mjs +6 -6
  161. package/lib/locale/it.mjs.map +1 -1
  162. package/lib/locale/sv.mjs +13 -13
  163. package/lib/locale/sv.mjs.map +1 -1
  164. package/lib/styles/settings/_variables.scss +6 -6
  165. package/lib/styles/tools/_states.sass +3 -3
  166. package/lib/util/defineComponent.mjs +21 -18
  167. package/lib/util/defineComponent.mjs.map +1 -1
  168. package/lib/util/helpers.mjs +5 -19
  169. package/lib/util/helpers.mjs.map +1 -1
  170. package/package.json +1 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.2.0-next-20230118.0
2
+ * Vuetify v4.0.0-next-20230205.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -262,8 +262,12 @@
262
262
  }
263
263
  function toKebabCase() {
264
264
  let str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
265
- return str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
265
+ if (toKebabCase.cache.has(str)) return toKebabCase.cache.get(str);
266
+ const kebab = str.replace(/[^a-z]/gi, '-').replace(/\B([A-Z])/g, '-$1').toLowerCase();
267
+ toKebabCase.cache.set(str, kebab);
268
+ return kebab;
266
269
  }
270
+ toKebabCase.cache = new Map();
267
271
  function findChildrenWithProvide(key, vnode) {
268
272
  if (!vnode || typeof vnode !== 'object') return [];
269
273
  if (Array.isArray(vnode)) {
@@ -890,7 +894,7 @@
890
894
 
891
895
  const DefaultsSymbol = Symbol.for('vuetify:defaults');
892
896
  function createDefaults(options) {
893
- return vue.ref(options ?? {});
897
+ return vue.ref(options);
894
898
  }
895
899
  function useDefaults() {
896
900
  const defaults = vue.inject(DefaultsSymbol);
@@ -922,23 +926,30 @@
922
926
  return newDefaults;
923
927
  }
924
928
 
925
- function useToggleScope(source, cb) {
929
+ function useToggleScope(source, fn) {
926
930
  let scope;
931
+ function start() {
932
+ scope = vue.effectScope();
933
+ scope.run(() => fn.length ? fn(() => {
934
+ var _scope;
935
+ (_scope = scope) == null ? void 0 : _scope.stop();
936
+ start();
937
+ }) : fn());
938
+ }
927
939
  vue.watch(source, active => {
928
940
  if (active && !scope) {
929
- scope = vue.effectScope();
930
- scope.run(cb);
941
+ start();
931
942
  } else if (!active) {
932
- var _scope;
933
- (_scope = scope) == null ? void 0 : _scope.stop();
943
+ var _scope2;
944
+ (_scope2 = scope) == null ? void 0 : _scope2.stop();
934
945
  scope = undefined;
935
946
  }
936
947
  }, {
937
948
  immediate: true
938
949
  });
939
950
  vue.onScopeDispose(() => {
940
- var _scope2;
941
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
951
+ var _scope3;
952
+ (_scope3 = scope) == null ? void 0 : _scope3.stop();
942
953
  });
943
954
  }
944
955
 
@@ -1007,33 +1018,36 @@
1007
1018
  options.props = propsFactory(options.props, toKebabCase(options.name))();
1008
1019
  options.props._as = String;
1009
1020
  options.setup = function setup(props, ctx) {
1010
- const vm = vue.getCurrentInstance();
1011
1021
  const defaults = useDefaults();
1012
- const _subcomponentDefaults = vue.shallowRef();
1013
- const _props = vue.shallowReactive({
1014
- ...vue.toRaw(props)
1022
+
1023
+ // Skip props proxy if defaults are not provided
1024
+ if (!defaults.value) return options._setup(props, ctx);
1025
+ const vm = vue.getCurrentInstance();
1026
+ const componentDefaults = vue.computed(() => defaults.value[props._as ?? options.name]);
1027
+ const _props = new Proxy(props, {
1028
+ get(target, prop) {
1029
+ if (!propIsDefined(vm.vnode, prop)) {
1030
+ var _componentDefaults$va, _global;
1031
+ return ((_componentDefaults$va = componentDefaults.value) == null ? void 0 : _componentDefaults$va[prop]) ?? ((_global = defaults.value.global) == null ? void 0 : _global[prop]) ?? target[prop];
1032
+ }
1033
+ return Reflect.get(target, prop);
1034
+ }
1015
1035
  });
1036
+ const _subcomponentDefaults = vue.shallowRef();
1016
1037
  vue.watchEffect(() => {
1017
- const globalDefaults = defaults.value.global;
1018
- const componentDefaults = defaults.value[props._as ?? options.name];
1019
- if (componentDefaults) {
1020
- const subComponents = Object.entries(componentDefaults).filter(_ref => {
1038
+ if (componentDefaults.value) {
1039
+ const subComponents = Object.entries(componentDefaults.value).filter(_ref => {
1021
1040
  let [key] = _ref;
1022
1041
  return key.startsWith(key[0].toUpperCase());
1023
1042
  });
1024
1043
  if (subComponents.length) _subcomponentDefaults.value = Object.fromEntries(subComponents);
1025
1044
  }
1026
- for (const prop of Object.keys(props)) {
1027
- let newVal = props[prop];
1028
- if (!propIsDefined(vm.vnode, prop)) {
1029
- newVal = (componentDefaults == null ? void 0 : componentDefaults[prop]) ?? (globalDefaults == null ? void 0 : globalDefaults[prop]) ?? props[prop];
1030
- }
1031
- if (_props[prop] !== newVal) {
1032
- _props[prop] = newVal;
1033
- }
1034
- }
1035
1045
  });
1036
1046
  const setupBindings = options._setup(_props, ctx);
1047
+
1048
+ // If subcomponent defaults are provided, override any
1049
+ // subcomponents provided by the component's setup function.
1050
+ // This uses injectSelf so must be done after the original setup to work.
1037
1051
  useToggleScope(_subcomponentDefaults, () => {
1038
1052
  var _injectSelf;
1039
1053
  provideDefaults(mergeDeep(((_injectSelf = injectSelf(DefaultsSymbol)) == null ? void 0 : _injectSelf.value) ?? {}, _subcomponentDefaults.value));
@@ -1892,8 +1906,8 @@
1892
1906
  root: 'Pagination Navigation',
1893
1907
  next: 'Next page',
1894
1908
  previous: 'Previous page',
1895
- page: 'Goto Page {0}',
1896
- currentPage: 'Page {0}, Current Page',
1909
+ page: 'Go to page {0}',
1910
+ currentPage: 'Page {0}, Current page',
1897
1911
  first: 'First page',
1898
1912
  last: 'Last page'
1899
1913
  }
@@ -3368,18 +3382,21 @@
3368
3382
  };
3369
3383
  }
3370
3384
 
3385
+ // Types
3386
+
3387
+ const makeVBtnGroupProps = propsFactory({
3388
+ divided: Boolean,
3389
+ ...makeBorderProps(),
3390
+ ...makeDensityProps(),
3391
+ ...makeElevationProps(),
3392
+ ...makeRoundedProps(),
3393
+ ...makeTagProps(),
3394
+ ...makeThemeProps(),
3395
+ ...makeVariantProps()
3396
+ }, 'v-btn-group');
3371
3397
  const VBtnGroup = defineComponent({
3372
3398
  name: 'VBtnGroup',
3373
- props: {
3374
- divided: Boolean,
3375
- ...makeBorderProps(),
3376
- ...makeDensityProps(),
3377
- ...makeElevationProps(),
3378
- ...makeRoundedProps(),
3379
- ...makeTagProps(),
3380
- ...makeThemeProps(),
3381
- ...makeVariantProps()
3382
- },
3399
+ props: makeVBtnGroupProps(),
3383
3400
  setup(props, _ref) {
3384
3401
  let {
3385
3402
  slots
@@ -3417,6 +3434,9 @@
3417
3434
  });
3418
3435
  }
3419
3436
  });
3437
+ function filterVBtnGroupProps(props) {
3438
+ return pick(props, Object.keys(VBtnGroup.props));
3439
+ }
3420
3440
 
3421
3441
  // Composables
3422
3442
 
@@ -3624,7 +3644,10 @@
3624
3644
  const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
3625
3645
  const VBtnToggle = genericComponent()({
3626
3646
  name: 'VBtnToggle',
3627
- props: makeGroupProps(),
3647
+ props: {
3648
+ ...makeVBtnGroupProps(),
3649
+ ...makeGroupProps()
3650
+ },
3628
3651
  emits: {
3629
3652
  'update:modelValue': value => true
3630
3653
  },
@@ -3641,9 +3664,10 @@
3641
3664
  } = useGroup(props, VBtnToggleSymbol);
3642
3665
  useRender(() => {
3643
3666
  var _slots$default;
3644
- return vue.createVNode(VBtnGroup, {
3667
+ const [btnGroupProps] = filterVBtnGroupProps(props);
3668
+ return vue.createVNode(VBtnGroup, vue.mergeProps({
3645
3669
  "class": "v-btn-toggle"
3646
- }, {
3670
+ }, btnGroupProps), {
3647
3671
  default: () => [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
3648
3672
  isSelected,
3649
3673
  next,
@@ -4098,9 +4122,6 @@
4098
4122
  el.style.transform = value;
4099
4123
  el.style.webkitTransform = value;
4100
4124
  }
4101
- function opacity(el, value) {
4102
- el.style.opacity = `calc(${value} * var(--v-theme-overlay-multiplier))`;
4103
- }
4104
4125
  function isTouchEvent(e) {
4105
4126
  return e.constructor.name === 'TouchEvent';
4106
4127
  }
@@ -4176,13 +4197,11 @@
4176
4197
  animation.classList.add('v-ripple__animation--enter');
4177
4198
  animation.classList.add('v-ripple__animation--visible');
4178
4199
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
4179
- opacity(animation, 0);
4180
4200
  animation.dataset.activated = String(performance.now());
4181
4201
  setTimeout(() => {
4182
4202
  animation.classList.remove('v-ripple__animation--enter');
4183
4203
  animation.classList.add('v-ripple__animation--in');
4184
4204
  transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
4185
- opacity(animation, 0.08);
4186
4205
  }, 0);
4187
4206
  },
4188
4207
  hide(el) {
@@ -4197,14 +4216,14 @@
4197
4216
  setTimeout(() => {
4198
4217
  animation.classList.remove('v-ripple__animation--in');
4199
4218
  animation.classList.add('v-ripple__animation--out');
4200
- opacity(animation, 0);
4201
4219
  setTimeout(() => {
4220
+ var _animation$parentNode;
4202
4221
  const ripples = el.getElementsByClassName('v-ripple__animation');
4203
4222
  if (ripples.length === 1 && el.dataset.previousPosition) {
4204
4223
  el.style.position = el.dataset.previousPosition;
4205
4224
  delete el.dataset.previousPosition;
4206
4225
  }
4207
- animation.parentNode && el.removeChild(animation.parentNode);
4226
+ if (((_animation$parentNode = animation.parentNode) == null ? void 0 : _animation$parentNode.parentNode) === el) el.removeChild(animation.parentNode);
4208
4227
  }, 300);
4209
4228
  }, delay);
4210
4229
  }
@@ -4857,14 +4876,18 @@
4857
4876
  const isElevated = vue.computed(() => {
4858
4877
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4859
4878
  });
4879
+ const valueAttr = vue.computed(() => {
4880
+ if (props.value === undefined) return undefined;
4881
+ return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
4882
+ });
4860
4883
  useSelectLink(link, group == null ? void 0 : group.select);
4861
4884
  useRender(() => {
4862
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4885
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4863
4886
  const Tag = link.isLink.value ? 'a' : props.tag;
4864
- const hasColor = !group || isActive.value;
4865
4887
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4866
4888
  const hasAppend = !!(props.appendIcon || slots.append);
4867
4889
  const hasIcon = !!(props.icon && props.icon !== true);
4890
+ 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);
4868
4891
  return vue.withDirectives(vue.createVNode(Tag, {
4869
4892
  "type": Tag === 'a' ? undefined : 'button',
4870
4893
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4885,7 +4908,8 @@
4885
4908
  if (isDisabled.value) return;
4886
4909
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4887
4910
  group == null ? void 0 : group.toggle();
4888
- }
4911
+ },
4912
+ "value": valueAttr.value
4889
4913
  }, {
4890
4914
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && vue.createVNode(VDefaultsProvider, {
4891
4915
  "key": "prepend",
@@ -5359,32 +5383,34 @@
5359
5383
  if (hasLabel.value) {
5360
5384
  const el = labelRef.value.$el;
5361
5385
  const targetEl = floatingLabelRef.value.$el;
5362
- const rect = nullifyTransforms(el);
5363
- const targetRect = targetEl.getBoundingClientRect();
5364
- const x = targetRect.x - rect.x;
5365
- const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5366
- const targetWidth = targetRect.width / 0.75;
5367
- const width = Math.abs(targetWidth - rect.width) > 1 ? {
5368
- maxWidth: convertToUnit(targetWidth)
5369
- } : undefined;
5370
- const style = getComputedStyle(el);
5371
- const targetStyle = getComputedStyle(targetEl);
5372
- const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5373
- const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5374
- const color = targetStyle.getPropertyValue('color');
5375
- el.style.visibility = 'visible';
5376
- targetEl.style.visibility = 'hidden';
5377
- animate(el, {
5378
- transform: `translate(${x}px, ${y}px) scale(${scale})`,
5379
- color,
5380
- ...width
5381
- }, {
5382
- duration,
5383
- easing: standardEasing,
5384
- direction: val ? 'normal' : 'reverse'
5385
- }).finished.then(() => {
5386
- el.style.removeProperty('visibility');
5387
- targetEl.style.removeProperty('visibility');
5386
+ requestAnimationFrame(() => {
5387
+ const rect = nullifyTransforms(el);
5388
+ const targetRect = targetEl.getBoundingClientRect();
5389
+ const x = targetRect.x - rect.x;
5390
+ const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5391
+ const targetWidth = targetRect.width / 0.75;
5392
+ const width = Math.abs(targetWidth - rect.width) > 1 ? {
5393
+ maxWidth: convertToUnit(targetWidth)
5394
+ } : undefined;
5395
+ const style = getComputedStyle(el);
5396
+ const targetStyle = getComputedStyle(targetEl);
5397
+ const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5398
+ const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5399
+ const color = targetStyle.getPropertyValue('color');
5400
+ el.style.visibility = 'visible';
5401
+ targetEl.style.visibility = 'hidden';
5402
+ animate(el, {
5403
+ transform: `translate(${x}px, ${y}px) scale(${scale})`,
5404
+ color,
5405
+ ...width
5406
+ }, {
5407
+ duration,
5408
+ easing: standardEasing,
5409
+ direction: val ? 'normal' : 'reverse'
5410
+ }).finished.then(() => {
5411
+ el.style.removeProperty('visibility');
5412
+ targetEl.style.removeProperty('visibility');
5413
+ });
5388
5414
  });
5389
5415
  }
5390
5416
  }, {
@@ -5573,7 +5599,6 @@
5573
5599
  const makeFormProps = propsFactory({
5574
5600
  disabled: Boolean,
5575
5601
  fastFail: Boolean,
5576
- lazyValidation: Boolean,
5577
5602
  readonly: Boolean,
5578
5603
  modelValue: {
5579
5604
  type: Boolean,
@@ -6977,9 +7002,9 @@
6977
7002
  themeClasses
6978
7003
  } = provideTheme(props);
6979
7004
  const {
6980
- backgroundColorClasses,
6981
- backgroundColorStyles
6982
- } = useBackgroundColor(vue.toRef(props, 'color'));
7005
+ textColorClasses,
7006
+ textColorStyles
7007
+ } = useTextColor(vue.toRef(props, 'color'));
6983
7008
  const dividerStyles = vue.computed(() => {
6984
7009
  const styles = {};
6985
7010
  if (props.length) {
@@ -6995,8 +7020,8 @@
6995
7020
  'v-divider': true,
6996
7021
  'v-divider--inset': props.inset,
6997
7022
  'v-divider--vertical': props.vertical
6998
- }, themeClasses.value, backgroundColorClasses.value],
6999
- "style": [dividerStyles.value, backgroundColorStyles.value],
7023
+ }, themeClasses.value, textColorClasses.value],
7024
+ "style": [dividerStyles.value, textColorStyles.value],
7000
7025
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
7001
7026
  "role": `${attrs.role || 'separator'}`
7002
7027
  }, null));
@@ -7706,7 +7731,7 @@
7706
7731
  }
7707
7732
  }
7708
7733
  useRender(() => {
7709
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7734
+ var _slots$title, _slots$subtitle, _slots$default;
7710
7735
  const Tag = isLink.value ? 'a' : props.tag;
7711
7736
  const hasColor = !list || isSelected.value || isActive.value;
7712
7737
  const hasTitle = slots.title || props.title;
@@ -7729,7 +7754,18 @@
7729
7754
  "onClick": onClick,
7730
7755
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7731
7756
  }, {
7732
- default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode(VDefaultsProvider, {
7757
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && vue.createVNode("div", {
7758
+ "key": "prepend",
7759
+ "class": "v-list-item__prepend"
7760
+ }, [props.prependAvatar && vue.createVNode(VAvatar, {
7761
+ "key": "prepend-avatar",
7762
+ "density": props.density,
7763
+ "image": props.prependAvatar
7764
+ }, null), props.prependIcon && vue.createVNode(VIcon, {
7765
+ "key": "prepend-icon",
7766
+ "density": props.density,
7767
+ "icon": props.prependIcon
7768
+ }, null), slots.prepend && vue.createVNode(VDefaultsProvider, {
7733
7769
  "key": "prepend",
7734
7770
  "defaults": {
7735
7771
  VAvatar: {
@@ -7745,14 +7781,8 @@
7745
7781
  }
7746
7782
  }
7747
7783
  }, {
7748
- default: () => [vue.createVNode("div", {
7749
- "class": "v-list-item__prepend"
7750
- }, [props.prependAvatar && vue.createVNode(VAvatar, {
7751
- "key": "prepend-avatar"
7752
- }, null), props.prependIcon && vue.createVNode(VIcon, {
7753
- "key": "prepend-icon"
7754
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7755
- }), vue.createVNode("div", {
7784
+ default: () => [slots.prepend(slotProps.value)]
7785
+ })]), vue.createVNode("div", {
7756
7786
  "class": "v-list-item__content",
7757
7787
  "data-no-activator": ""
7758
7788
  }, [hasTitle && vue.createVNode(VListItemTitle, {
@@ -7767,7 +7797,10 @@
7767
7797
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7768
7798
  subtitle: props.subtitle
7769
7799
  })) ?? props.subtitle]
7770
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && vue.createVNode(VDefaultsProvider, {
7800
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && vue.createVNode("div", {
7801
+ "key": "append",
7802
+ "class": "v-list-item__append"
7803
+ }, [slots.append && vue.createVNode(VDefaultsProvider, {
7771
7804
  "key": "append",
7772
7805
  "defaults": {
7773
7806
  VAvatar: {
@@ -7783,14 +7816,16 @@
7783
7816
  }
7784
7817
  }
7785
7818
  }, {
7786
- default: () => [vue.createVNode("div", {
7787
- "class": "v-list-item__append"
7788
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && vue.createVNode(VIcon, {
7789
- "key": "append-icon"
7790
- }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7791
- "key": "append-avatar"
7792
- }, null)])]
7793
- })]
7819
+ default: () => [slots.append(slotProps.value)]
7820
+ }), props.appendIcon && vue.createVNode(VIcon, {
7821
+ "key": "append-icon",
7822
+ "density": props.density,
7823
+ "icon": props.appendIcon
7824
+ }, null), props.appendAvatar && vue.createVNode(VAvatar, {
7825
+ "key": "append-avatar",
7826
+ "density": props.density,
7827
+ "image": props.appendAvatar
7828
+ }, null)])]
7794
7829
  }), [[vue.resolveDirective("ripple"), isClickable.value && props.ripple]]);
7795
7830
  });
7796
7831
  return {};
@@ -8004,9 +8039,12 @@
8004
8039
 
8005
8040
  // Types
8006
8041
 
8042
+ function isPrimitive(value) {
8043
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8044
+ }
8007
8045
  function transformItem(props, item) {
8008
8046
  const type = getPropertyFromItem(item, props.itemType, 'item');
8009
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8047
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
8010
8048
  const value = getPropertyFromItem(item, props.itemValue, undefined);
8011
8049
  const children = getPropertyFromItem(item, props.itemChildren);
8012
8050
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8632,17 +8670,12 @@
8632
8670
  function useLocationStrategies(props, data) {
8633
8671
  const contentStyles = vue.ref({});
8634
8672
  const updateLocation = vue.ref();
8635
- let scope;
8636
- vue.watchEffect(async () => {
8637
- var _scope;
8638
- (_scope = scope) == null ? void 0 : _scope.stop();
8639
- updateLocation.value = undefined;
8640
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8641
- scope = vue.effectScope();
8642
- if (!(props.locationStrategy === 'connected')) {
8643
- await vue.nextTick();
8644
- }
8645
- scope.run(() => {
8673
+ if (IN_BROWSER) {
8674
+ useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {
8675
+ vue.watch(() => props.locationStrategy, reset);
8676
+ vue.onScopeDispose(() => {
8677
+ updateLocation.value = undefined;
8678
+ });
8646
8679
  if (typeof props.locationStrategy === 'function') {
8647
8680
  var _props$locationStrate;
8648
8681
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8651,16 +8684,14 @@
8651
8684
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8652
8685
  }
8653
8686
  });
8654
- });
8655
- IN_BROWSER && window.addEventListener('resize', onResize, {
8656
- passive: true
8657
- });
8658
- vue.onScopeDispose(() => {
8659
- var _scope2;
8660
- IN_BROWSER && window.removeEventListener('resize', onResize);
8661
- updateLocation.value = undefined;
8662
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8663
- });
8687
+ window.addEventListener('resize', onResize, {
8688
+ passive: true
8689
+ });
8690
+ vue.onScopeDispose(() => {
8691
+ window.removeEventListener('resize', onResize);
8692
+ updateLocation.value = undefined;
8693
+ });
8694
+ }
8664
8695
  function onResize(e) {
8665
8696
  var _updateLocation$value;
8666
8697
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8954,13 +8985,30 @@
8954
8985
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8955
8986
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8956
8987
  });
8988
+ return {
8989
+ available,
8990
+ contentBox
8991
+ };
8957
8992
  }
8958
- vue.watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8959
- immediate: !activatorFixed
8960
- });
8961
- if (activatorFixed) vue.nextTick(() => updateLocation());
8962
- requestAnimationFrame(() => {
8963
- if (contentStyles.value.maxHeight) updateLocation();
8993
+ vue.watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());
8994
+ vue.nextTick(() => {
8995
+ const result = updateLocation();
8996
+
8997
+ // TODO: overflowing content should only require a single updateLocation call
8998
+ // Icky hack to make sure the content is positioned consistently
8999
+ if (!result) return;
9000
+ const {
9001
+ available,
9002
+ contentBox
9003
+ } = result;
9004
+ if (contentBox.height > available.y) {
9005
+ requestAnimationFrame(() => {
9006
+ updateLocation();
9007
+ requestAnimationFrame(() => {
9008
+ updateLocation();
9009
+ });
9010
+ });
9011
+ }
8964
9012
  });
8965
9013
  return {
8966
9014
  updateLocation
@@ -9028,10 +9076,10 @@
9028
9076
  await vue.nextTick();
9029
9077
  scope.run(() => {
9030
9078
  if (typeof props.scrollStrategy === 'function') {
9031
- props.scrollStrategy(data, props);
9079
+ props.scrollStrategy(data, props, scope);
9032
9080
  } else {
9033
9081
  var _scrollStrategies$pro;
9034
- (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props);
9082
+ (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props, scope);
9035
9083
  }
9036
9084
  });
9037
9085
  });
@@ -9077,9 +9125,10 @@
9077
9125
  }
9078
9126
  });
9079
9127
  }
9080
- function repositionScrollStrategy(data) {
9128
+ function repositionScrollStrategy(data, props, scope) {
9081
9129
  let slow = false;
9082
9130
  let raf = -1;
9131
+ let ric = -1;
9083
9132
  function update(e) {
9084
9133
  requestNewFrame(() => {
9085
9134
  var _data$updateLocation$, _data$updateLocation;
@@ -9089,21 +9138,29 @@
9089
9138
  slow = time / (1000 / 60) > 2;
9090
9139
  });
9091
9140
  }
9092
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9093
- if (slow) {
9094
- // If the position calculation is slow,
9095
- // defer updates until scrolling is finished.
9096
- // Browsers usually fire one scroll event per frame so
9097
- // we just wait until we've got two frames without an event
9098
- cancelAnimationFrame(raf);
9099
- raf = requestAnimationFrame(() => {
9100
- raf = requestAnimationFrame(() => {
9141
+ ric = requestIdleCallback(() => {
9142
+ scope.run(() => {
9143
+ bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9144
+ if (slow) {
9145
+ // If the position calculation is slow,
9146
+ // defer updates until scrolling is finished.
9147
+ // Browsers usually fire one scroll event per frame so
9148
+ // we just wait until we've got two frames without an event
9149
+ cancelAnimationFrame(raf);
9150
+ raf = requestAnimationFrame(() => {
9151
+ raf = requestAnimationFrame(() => {
9152
+ update(e);
9153
+ });
9154
+ });
9155
+ } else {
9101
9156
  update(e);
9102
- });
9157
+ }
9103
9158
  });
9104
- } else {
9105
- update(e);
9106
- }
9159
+ });
9160
+ });
9161
+ vue.onScopeDispose(() => {
9162
+ cancelIdleCallback(ric);
9163
+ cancelAnimationFrame(raf);
9107
9164
  });
9108
9165
  }
9109
9166
 
@@ -9746,6 +9803,11 @@
9746
9803
  function onClickOutside() {
9747
9804
  parent == null ? void 0 : parent.closeParents();
9748
9805
  }
9806
+ const activatorProps = vue.computed(() => vue.mergeProps({
9807
+ 'aria-haspopup': 'menu',
9808
+ 'aria-expanded': String(isActive.value),
9809
+ 'aria-owns': id.value
9810
+ }, props.activatorProps));
9749
9811
  useRender(() => {
9750
9812
  const [overlayProps] = filterVOverlayProps(props);
9751
9813
  return vue.createVNode(VOverlay, vue.mergeProps({
@@ -9755,11 +9817,7 @@
9755
9817
  "modelValue": isActive.value,
9756
9818
  "onUpdate:modelValue": $event => isActive.value = $event,
9757
9819
  "absolute": true,
9758
- "activatorProps": vue.mergeProps({
9759
- 'aria-haspopup': 'menu',
9760
- 'aria-expanded': String(isActive.value),
9761
- 'aria-owns': id.value
9762
- }, props.activatorProps),
9820
+ "activatorProps": activatorProps.value,
9763
9821
  "onClick:outside": onClickOutside
9764
9822
  }, scopeId), {
9765
9823
  activator: slots.activator,
@@ -9873,8 +9931,10 @@
9873
9931
  }
9874
9932
  function onKeydown(e) {
9875
9933
  if (props.readonly || form != null && form.isReadonly.value) return;
9876
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9934
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9877
9935
  e.preventDefault();
9936
+ }
9937
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9878
9938
  menu.value = true;
9879
9939
  }
9880
9940
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9885,15 +9945,12 @@
9885
9945
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9886
9946
  } else if (e.key === 'ArrowUp') {
9887
9947
  var _listRef$value2;
9888
- e.preventDefault();
9889
9948
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9890
9949
  } else if (e.key === 'Home') {
9891
9950
  var _listRef$value3;
9892
- e.preventDefault();
9893
9951
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9894
9952
  } else if (e.key === 'End') {
9895
9953
  var _listRef$value4;
9896
- e.preventDefault();
9897
9954
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9898
9955
  }
9899
9956
  }
@@ -10075,7 +10132,7 @@
10075
10132
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10076
10133
  if (!(items != null && items.length)) return array;
10077
10134
  loop: for (let i = 0; i < items.length; i++) {
10078
- const item = items[i].raw;
10135
+ const item = items[i];
10079
10136
  const customMatches = {};
10080
10137
  const defaultMatches = {};
10081
10138
  let match = -1;
@@ -10115,7 +10172,7 @@
10115
10172
  }
10116
10173
  return array;
10117
10174
  }
10118
- function useFilter(props, items, query) {
10175
+ function useFilter(props, items, query, options) {
10119
10176
  const strQuery = vue.computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10120
10177
  const filteredItems = vue.ref([]);
10121
10178
  const filteredMatches = vue.ref(new Map());
@@ -10126,7 +10183,7 @@
10126
10183
  const results = filterItems(transformedItems, strQuery.value, {
10127
10184
  customKeyFilter: props.customKeyFilter,
10128
10185
  default: props.customFilter,
10129
- filterKeys: props.filterKeys,
10186
+ filterKeys: vue.unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10130
10187
  filterMode: props.filterMode,
10131
10188
  noFilter: props.noFilter
10132
10189
  });
@@ -10237,6 +10294,9 @@
10237
10294
  }
10238
10295
  function onKeydown(e) {
10239
10296
  if (props.readonly || form != null && form.isReadonly.value) return;
10297
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10298
+ e.preventDefault();
10299
+ }
10240
10300
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10241
10301
  menu.value = true;
10242
10302
  }
@@ -10248,11 +10308,9 @@
10248
10308
  }
10249
10309
  if (e.key === 'ArrowDown') {
10250
10310
  var _listRef$value;
10251
- e.preventDefault();
10252
10311
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10253
10312
  } else if (e.key === 'ArrowUp') {
10254
10313
  var _listRef$value2;
10255
- e.preventDefault();
10256
10314
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10257
10315
  }
10258
10316
  }
@@ -13581,7 +13639,9 @@
13581
13639
  if (props.readonly || form != null && form.isReadonly.value) return;
13582
13640
  const selectionStart = vTextFieldRef.value.selectionStart;
13583
13641
  const length = selected.value.length;
13584
- if (selectionIndex.value > -1) e.preventDefault();
13642
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13643
+ e.preventDefault();
13644
+ }
13585
13645
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13586
13646
  menu.value = true;
13587
13647
  }
@@ -13593,11 +13653,9 @@
13593
13653
  }
13594
13654
  if (e.key === 'ArrowDown') {
13595
13655
  var _listRef$value;
13596
- e.preventDefault();
13597
13656
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13598
13657
  } else if (e.key === 'ArrowUp') {
13599
13658
  var _listRef$value2;
13600
- e.preventDefault();
13601
13659
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13602
13660
  }
13603
13661
  if (!props.multiple) return;
@@ -13892,6 +13950,10 @@
13892
13950
  });
13893
13951
  }
13894
13952
  });
13953
+ const activatorProps = vue.computed(() => vue.mergeProps({
13954
+ 'aria-haspopup': 'dialog',
13955
+ 'aria-expanded': String(isActive.value)
13956
+ }, props.activatorProps));
13895
13957
  useRender(() => {
13896
13958
  const [overlayProps] = filterVOverlayProps(props);
13897
13959
  return vue.createVNode(VOverlay, vue.mergeProps({
@@ -13905,10 +13967,7 @@
13905
13967
  "onUpdate:modelValue": $event => isActive.value = $event,
13906
13968
  "aria-role": "dialog",
13907
13969
  "aria-modal": "true",
13908
- "activatorProps": vue.mergeProps({
13909
- 'aria-haspopup': 'dialog',
13910
- 'aria-expanded': String(isActive.value)
13911
- }, props.activatorProps)
13970
+ "activatorProps": activatorProps.value
13912
13971
  }, scopeId), {
13913
13972
  activator: slots.activator,
13914
13973
  default: function () {
@@ -14257,12 +14316,15 @@
14257
14316
  onFocus();
14258
14317
  vue.nextTick(() => {
14259
14318
  model.value = [];
14260
- if (inputRef != null && inputRef.value) {
14261
- inputRef.value.value = '';
14262
- }
14263
14319
  callEvent(props['onClick:clear'], e);
14264
14320
  });
14265
14321
  }
14322
+ vue.watch(model, newValue => {
14323
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14324
+ if (hasModelReset && inputRef.value) {
14325
+ inputRef.value.value = '';
14326
+ }
14327
+ });
14266
14328
  useRender(() => {
14267
14329
  const hasCounter = !!(slots.counter || props.counter);
14268
14330
  const hasDetails = !!(hasCounter || slots.details);
@@ -15253,7 +15315,7 @@
15253
15315
  window.removeEventListener('touchmove', onTouchmove);
15254
15316
  window.removeEventListener('touchend', onTouchend);
15255
15317
  });
15256
- const isHorizontal = vue.computed(() => position.value !== 'bottom');
15318
+ const isHorizontal = vue.computed(() => ['left', 'right'].includes(position.value));
15257
15319
  const {
15258
15320
  addMovement,
15259
15321
  endTouch,
@@ -15265,11 +15327,11 @@
15265
15327
  const offset = vue.ref(0);
15266
15328
  let start;
15267
15329
  function getOffset(pos, active) {
15268
- return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15330
+ 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);
15269
15331
  }
15270
15332
  function getProgress(pos) {
15271
15333
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15272
- 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();
15334
+ 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();
15273
15335
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15274
15336
  }
15275
15337
  function onTouchstart(e) {
@@ -15277,8 +15339,8 @@
15277
15339
  const touchX = e.changedTouches[0].clientX;
15278
15340
  const touchY = e.changedTouches[0].clientY;
15279
15341
  const touchZone = 25;
15280
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15281
- 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());
15342
+ 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();
15343
+ 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());
15282
15344
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15283
15345
  maybeDragging = true;
15284
15346
  start = [touchX, touchY];
@@ -15330,6 +15392,7 @@
15330
15392
  isActive.value = velocity.direction === ({
15331
15393
  left: 'right',
15332
15394
  right: 'left',
15395
+ top: 'down',
15333
15396
  bottom: 'up'
15334
15397
  }[position.value] || oops());
15335
15398
  } else {
@@ -15338,7 +15401,7 @@
15338
15401
  }
15339
15402
  const dragStyles = vue.computed(() => {
15340
15403
  return isDragging.value ? {
15341
- 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(),
15404
+ 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(),
15342
15405
  transition: 'none'
15343
15406
  } : undefined;
15344
15407
  });
@@ -15354,7 +15417,7 @@
15354
15417
 
15355
15418
  // Types
15356
15419
 
15357
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15420
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15358
15421
  const VNavigationDrawer = defineComponent({
15359
15422
  name: 'VNavigationDrawer',
15360
15423
  props: {
@@ -15811,7 +15874,7 @@
15811
15874
  disabled: !!props.disabled || props.length < 2,
15812
15875
  color: isActive ? props.activeColor : props.color,
15813
15876
  ariaCurrent: isActive,
15814
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15877
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15815
15878
  onClick: e => setValue(e, item)
15816
15879
  }
15817
15880
  };
@@ -17990,6 +18053,9 @@
17990
18053
  if (props.transition) return props.transition;
17991
18054
  return isActive.value ? 'scale-transition' : 'fade-transition';
17992
18055
  });
18056
+ const activatorProps = vue.computed(() => vue.mergeProps({
18057
+ 'aria-describedby': id.value
18058
+ }, props.activatorProps));
17993
18059
  useRender(() => {
17994
18060
  const [overlayProps] = filterVOverlayProps(props);
17995
18061
  return vue.createVNode(VOverlay, vue.mergeProps({
@@ -18006,9 +18072,7 @@
18006
18072
  "persistent": true,
18007
18073
  "role": "tooltip",
18008
18074
  "eager": true,
18009
- "activatorProps": vue.mergeProps({
18010
- 'aria-describedby': id.value
18011
- }, props.activatorProps),
18075
+ "activatorProps": activatorProps.value,
18012
18076
  "_disableGlobalStack": true
18013
18077
  }, scopeId), {
18014
18078
  activator: slots.activator,
@@ -18394,7 +18458,7 @@
18394
18458
  locale
18395
18459
  };
18396
18460
  }
18397
- const version$1 = "3.2.0-next-20230118.0";
18461
+ const version$1 = "4.0.0-next-20230205.0";
18398
18462
  createVuetify$1.version = version$1;
18399
18463
 
18400
18464
  // Vue's inject() can only be used in setup
@@ -18415,7 +18479,7 @@
18415
18479
  ...options
18416
18480
  });
18417
18481
  };
18418
- const version = "3.2.0-next-20230118.0";
18482
+ const version = "4.0.0-next-20230205.0";
18419
18483
  createVuetify.version = version;
18420
18484
 
18421
18485
  exports.components = components;