@vuetify/nightly 3.2.0-next-20230114.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 (176) hide show
  1. package/CHANGELOG.md +203 -11
  2. package/dist/json/importMap-labs.json +8 -4
  3. package/dist/json/importMap.json +12 -12
  4. package/dist/vuetify-labs.css +173 -165
  5. package/dist/vuetify-labs.d.ts +399 -176
  6. package/dist/vuetify-labs.esm.js +362 -278
  7. package/dist/vuetify-labs.esm.js.map +1 -1
  8. package/dist/vuetify-labs.js +361 -277
  9. package/dist/vuetify-labs.min.css +2 -2
  10. package/dist/vuetify.css +53 -45
  11. package/dist/vuetify.d.ts +330 -179
  12. package/dist/vuetify.esm.js +329 -248
  13. package/dist/vuetify.esm.js.map +1 -1
  14. package/dist/vuetify.js +328 -247
  15. package/dist/vuetify.js.map +1 -1
  16. package/dist/vuetify.min.css +2 -2
  17. package/dist/vuetify.min.js +700 -689
  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 +16 -5
  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 +4 -4
  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.css +1 -0
  69. package/lib/components/VFileInput/VFileInput.mjs +7 -4
  70. package/lib/components/VFileInput/VFileInput.mjs.map +1 -1
  71. package/lib/components/VFileInput/VFileInput.sass +1 -0
  72. package/lib/components/VForm/index.d.ts +0 -3
  73. package/lib/components/VList/VList.mjs +4 -1
  74. package/lib/components/VList/VList.mjs.map +1 -1
  75. package/lib/components/VList/VListItem.css +8 -8
  76. package/lib/components/VList/VListItem.mjs +29 -19
  77. package/lib/components/VList/VListItem.mjs.map +1 -1
  78. package/lib/components/VList/VListItem.sass +1 -1
  79. package/lib/components/VMenu/VMenu.mjs +6 -5
  80. package/lib/components/VMenu/VMenu.mjs.map +1 -1
  81. package/lib/components/VMenu/index.d.ts +57 -34
  82. package/lib/components/VNavigationDrawer/VNavigationDrawer.css +4 -0
  83. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +1 -1
  84. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  85. package/lib/components/VNavigationDrawer/VNavigationDrawer.sass +4 -0
  86. package/lib/components/VNavigationDrawer/index.d.ts +3 -3
  87. package/lib/components/VNavigationDrawer/touch.mjs +7 -6
  88. package/lib/components/VNavigationDrawer/touch.mjs.map +1 -1
  89. package/lib/components/VOtpInput/VOtpInput.mjs +22 -46
  90. package/lib/components/VOtpInput/VOtpInput.mjs.map +1 -1
  91. package/lib/components/VOverflowBtn/VOverflowBtn.mjs +3 -0
  92. package/lib/components/VOverflowBtn/VOverflowBtn.mjs.map +1 -1
  93. package/lib/components/VOverlay/index.d.ts +34 -11
  94. package/lib/components/VOverlay/locationStrategies.mjs +40 -29
  95. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  96. package/lib/components/VOverlay/scrollStrategies.mjs +25 -16
  97. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  98. package/lib/components/VPagination/VPagination.mjs +1 -1
  99. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  100. package/lib/components/VProgressLinear/VProgressLinear.mjs +13 -1
  101. package/lib/components/VProgressLinear/VProgressLinear.mjs.map +1 -1
  102. package/lib/components/VProgressLinear/index.d.ts +18 -0
  103. package/lib/components/VSelect/VSelect.mjs +3 -4
  104. package/lib/components/VSelect/VSelect.mjs.map +1 -1
  105. package/lib/components/VSelect/index.d.ts +43 -20
  106. package/lib/components/VSelectionControl/VSelectionControl.css +2 -2
  107. package/lib/components/VSkeletonLoader/VSkeletonLoader.sass +1 -1
  108. package/lib/components/VSnackbar/index.d.ts +42 -19
  109. package/lib/components/VStepper/VStepper.sass +6 -6
  110. package/lib/components/VStepper/VStepperStep.mjs +12 -2
  111. package/lib/components/VStepper/VStepperStep.mjs.map +1 -1
  112. package/lib/components/VTable/VTable.css +4 -4
  113. package/lib/components/VTable/VTable.sass +2 -2
  114. package/lib/components/VTimePicker/VTimePicker.mjs.map +1 -1
  115. package/lib/components/VTimeline/_mixins.sass +1 -1
  116. package/lib/components/VTooltip/VTooltip.mjs +4 -3
  117. package/lib/components/VTooltip/VTooltip.mjs.map +1 -1
  118. package/lib/components/VTooltip/index.d.ts +57 -34
  119. package/lib/components/VTreeview/VTreeview.mjs +1 -1
  120. package/lib/components/VTreeview/VTreeview.mjs.map +1 -1
  121. package/lib/components/index.d.ts +328 -176
  122. package/lib/composables/defaults.mjs +1 -1
  123. package/lib/composables/defaults.mjs.map +1 -1
  124. package/lib/composables/filter.mjs +3 -3
  125. package/lib/composables/filter.mjs.map +1 -1
  126. package/lib/composables/form.mjs +0 -1
  127. package/lib/composables/form.mjs.map +1 -1
  128. package/lib/composables/toggleScope.mjs +14 -7
  129. package/lib/composables/toggleScope.mjs.map +1 -1
  130. package/lib/directives/ripple/VRipple.css +3 -0
  131. package/lib/directives/ripple/VRipple.sass +3 -0
  132. package/lib/directives/ripple/_variables.scss +1 -1
  133. package/lib/directives/ripple/index.mjs +2 -7
  134. package/lib/directives/ripple/index.mjs.map +1 -1
  135. package/lib/entry-bundler.mjs +1 -1
  136. package/lib/framework.mjs +1 -1
  137. package/lib/index.d.ts +5 -5
  138. package/lib/labs/VDataTable/VDataTable.mjs +6 -6
  139. package/lib/labs/VDataTable/VDataTable.mjs.map +1 -1
  140. package/lib/labs/VDataTable/VDataTableFooter.mjs +1 -1
  141. package/lib/labs/VDataTable/VDataTableFooter.mjs.map +1 -1
  142. package/lib/labs/VDataTable/VDataTableRows.mjs +1 -1
  143. package/lib/labs/VDataTable/VDataTableRows.mjs.map +1 -1
  144. package/lib/labs/VDataTable/VDataTableServer.mjs +19 -12
  145. package/lib/labs/VDataTable/VDataTableServer.mjs.map +1 -1
  146. package/lib/labs/VDataTable/VDataTableVirtual.mjs +6 -5
  147. package/lib/labs/VDataTable/VDataTableVirtual.mjs.map +1 -1
  148. package/lib/labs/VDataTable/composables/options.mjs +3 -7
  149. package/lib/labs/VDataTable/composables/options.mjs.map +1 -1
  150. package/lib/labs/VDataTable/composables/paginate.mjs +1 -1
  151. package/lib/labs/VDataTable/composables/paginate.mjs.map +1 -1
  152. package/lib/labs/VDataTable/index.d.ts +71 -1
  153. package/lib/labs/VDataTable/index.mjs +1 -0
  154. package/lib/labs/VDataTable/index.mjs.map +1 -1
  155. package/lib/labs/components.d.ts +71 -1
  156. package/lib/locale/adapters/vue-i18n.mjs +12 -2
  157. package/lib/locale/adapters/vue-i18n.mjs.map +1 -1
  158. package/lib/locale/ar.mjs +20 -20
  159. package/lib/locale/ar.mjs.map +1 -1
  160. package/lib/locale/en.mjs +2 -2
  161. package/lib/locale/en.mjs.map +1 -1
  162. package/lib/locale/es.mjs +3 -3
  163. package/lib/locale/es.mjs.map +1 -1
  164. package/lib/locale/fi.mjs +5 -5
  165. package/lib/locale/fi.mjs.map +1 -1
  166. package/lib/locale/it.mjs +6 -6
  167. package/lib/locale/it.mjs.map +1 -1
  168. package/lib/locale/sv.mjs +13 -13
  169. package/lib/locale/sv.mjs.map +1 -1
  170. package/lib/styles/settings/_variables.scss +6 -6
  171. package/lib/styles/tools/_states.sass +3 -3
  172. package/lib/util/defineComponent.mjs +21 -18
  173. package/lib/util/defineComponent.mjs.map +1 -1
  174. package/lib/util/helpers.mjs +5 -19
  175. package/lib/util/helpers.mjs.map +1 -1
  176. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * Vuetify v3.2.0-next-20230114.0
2
+ * Vuetify v4.0.0-next-20230205.0
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
  }
@@ -3364,18 +3378,21 @@ function useVariant(props) {
3364
3378
  };
3365
3379
  }
3366
3380
 
3381
+ // Types
3382
+
3383
+ const makeVBtnGroupProps = propsFactory({
3384
+ divided: Boolean,
3385
+ ...makeBorderProps(),
3386
+ ...makeDensityProps(),
3387
+ ...makeElevationProps(),
3388
+ ...makeRoundedProps(),
3389
+ ...makeTagProps(),
3390
+ ...makeThemeProps(),
3391
+ ...makeVariantProps()
3392
+ }, 'v-btn-group');
3367
3393
  const VBtnGroup = defineComponent({
3368
3394
  name: 'VBtnGroup',
3369
- props: {
3370
- divided: Boolean,
3371
- ...makeBorderProps(),
3372
- ...makeDensityProps(),
3373
- ...makeElevationProps(),
3374
- ...makeRoundedProps(),
3375
- ...makeTagProps(),
3376
- ...makeThemeProps(),
3377
- ...makeVariantProps()
3378
- },
3395
+ props: makeVBtnGroupProps(),
3379
3396
  setup(props, _ref) {
3380
3397
  let {
3381
3398
  slots
@@ -3413,6 +3430,9 @@ const VBtnGroup = defineComponent({
3413
3430
  });
3414
3431
  }
3415
3432
  });
3433
+ function filterVBtnGroupProps(props) {
3434
+ return pick(props, Object.keys(VBtnGroup.props));
3435
+ }
3416
3436
 
3417
3437
  // Composables
3418
3438
 
@@ -3620,7 +3640,10 @@ function getValues(items, ids) {
3620
3640
  const VBtnToggleSymbol = Symbol.for('vuetify:v-btn-toggle');
3621
3641
  const VBtnToggle = genericComponent()({
3622
3642
  name: 'VBtnToggle',
3623
- props: makeGroupProps(),
3643
+ props: {
3644
+ ...makeVBtnGroupProps(),
3645
+ ...makeGroupProps()
3646
+ },
3624
3647
  emits: {
3625
3648
  'update:modelValue': value => true
3626
3649
  },
@@ -3637,9 +3660,10 @@ const VBtnToggle = genericComponent()({
3637
3660
  } = useGroup(props, VBtnToggleSymbol);
3638
3661
  useRender(() => {
3639
3662
  var _slots$default;
3640
- return createVNode(VBtnGroup, {
3663
+ const [btnGroupProps] = filterVBtnGroupProps(props);
3664
+ return createVNode(VBtnGroup, mergeProps({
3641
3665
  "class": "v-btn-toggle"
3642
- }, {
3666
+ }, btnGroupProps), {
3643
3667
  default: () => [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
3644
3668
  isSelected,
3645
3669
  next,
@@ -4094,9 +4118,6 @@ function transform(el, value) {
4094
4118
  el.style.transform = value;
4095
4119
  el.style.webkitTransform = value;
4096
4120
  }
4097
- function opacity(el, value) {
4098
- el.style.opacity = `calc(${value} * var(--v-theme-overlay-multiplier))`;
4099
- }
4100
4121
  function isTouchEvent(e) {
4101
4122
  return e.constructor.name === 'TouchEvent';
4102
4123
  }
@@ -4172,13 +4193,11 @@ const ripples = {
4172
4193
  animation.classList.add('v-ripple__animation--enter');
4173
4194
  animation.classList.add('v-ripple__animation--visible');
4174
4195
  transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`);
4175
- opacity(animation, 0);
4176
4196
  animation.dataset.activated = String(performance.now());
4177
4197
  setTimeout(() => {
4178
4198
  animation.classList.remove('v-ripple__animation--enter');
4179
4199
  animation.classList.add('v-ripple__animation--in');
4180
4200
  transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`);
4181
- opacity(animation, 0.08);
4182
4201
  }, 0);
4183
4202
  },
4184
4203
  hide(el) {
@@ -4193,14 +4212,14 @@ const ripples = {
4193
4212
  setTimeout(() => {
4194
4213
  animation.classList.remove('v-ripple__animation--in');
4195
4214
  animation.classList.add('v-ripple__animation--out');
4196
- opacity(animation, 0);
4197
4215
  setTimeout(() => {
4216
+ var _animation$parentNode;
4198
4217
  const ripples = el.getElementsByClassName('v-ripple__animation');
4199
4218
  if (ripples.length === 1 && el.dataset.previousPosition) {
4200
4219
  el.style.position = el.dataset.previousPosition;
4201
4220
  delete el.dataset.previousPosition;
4202
4221
  }
4203
- animation.parentNode && el.removeChild(animation.parentNode);
4222
+ if (((_animation$parentNode = animation.parentNode) == null ? void 0 : _animation$parentNode.parentNode) === el) el.removeChild(animation.parentNode);
4204
4223
  }, 300);
4205
4224
  }, delay);
4206
4225
  }
@@ -4380,9 +4399,69 @@ const Ripple = {
4380
4399
  updated: updated$1
4381
4400
  };
4382
4401
 
4402
+ // Composables
4403
+
4404
+ // Types
4405
+
4406
+ const oppositeMap = {
4407
+ center: 'center',
4408
+ top: 'bottom',
4409
+ bottom: 'top',
4410
+ left: 'right',
4411
+ right: 'left'
4412
+ };
4413
+ const makeLocationProps = propsFactory({
4414
+ location: String
4415
+ }, 'location');
4416
+ function useLocation(props) {
4417
+ let opposite = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
4418
+ let offset = arguments.length > 2 ? arguments[2] : undefined;
4419
+ const {
4420
+ isRtl
4421
+ } = useRtl();
4422
+ const locationStyles = computed(() => {
4423
+ if (!props.location) return {};
4424
+ const {
4425
+ side,
4426
+ align
4427
+ } = parseAnchor(props.location.split(' ').length > 1 ? props.location : `${props.location} center`, isRtl.value);
4428
+ function getOffset(side) {
4429
+ return offset ? offset(side) : 0;
4430
+ }
4431
+ const styles = {};
4432
+ if (side !== 'center') {
4433
+ if (opposite) styles[oppositeMap[side]] = `calc(100% - ${getOffset(side)}px)`;else styles[side] = 0;
4434
+ }
4435
+ if (align !== 'center') {
4436
+ if (opposite) styles[oppositeMap[align]] = `calc(100% - ${getOffset(align)}px)`;else styles[align] = 0;
4437
+ } else {
4438
+ if (side === 'center') styles.top = styles.left = '50%';else {
4439
+ styles[{
4440
+ top: 'left',
4441
+ bottom: 'left',
4442
+ left: 'top',
4443
+ right: 'top'
4444
+ }[side]] = '50%';
4445
+ }
4446
+ styles.transform = {
4447
+ top: 'translateX(-50%)',
4448
+ bottom: 'translateX(-50%)',
4449
+ left: 'translateY(-50%)',
4450
+ right: 'translateY(-50%)',
4451
+ center: 'translate(-50%, -50%)'
4452
+ }[side];
4453
+ }
4454
+ return styles;
4455
+ });
4456
+ return {
4457
+ locationStyles
4458
+ };
4459
+ }
4460
+
4383
4461
  const VProgressLinear = defineComponent({
4384
4462
  name: 'VProgressLinear',
4385
4463
  props: {
4464
+ absolute: Boolean,
4386
4465
  active: {
4387
4466
  type: Boolean,
4388
4467
  default: true
@@ -4412,6 +4491,9 @@ const VProgressLinear = defineComponent({
4412
4491
  stream: Boolean,
4413
4492
  striped: Boolean,
4414
4493
  roundedBar: Boolean,
4494
+ ...makeLocationProps({
4495
+ location: 'top'
4496
+ }),
4415
4497
  ...makeRoundedProps(),
4416
4498
  ...makeTagProps(),
4417
4499
  ...makeThemeProps()
@@ -4430,6 +4512,9 @@ const VProgressLinear = defineComponent({
4430
4512
  const {
4431
4513
  themeClasses
4432
4514
  } = provideTheme(props);
4515
+ const {
4516
+ locationStyles
4517
+ } = useLocation(props);
4433
4518
  const {
4434
4519
  textColorClasses,
4435
4520
  textColorStyles
@@ -4471,6 +4556,7 @@ const VProgressLinear = defineComponent({
4471
4556
  useRender(() => createVNode(props.tag, {
4472
4557
  "ref": intersectionRef,
4473
4558
  "class": ['v-progress-linear', {
4559
+ 'v-progress-linear--absolute': props.absolute,
4474
4560
  'v-progress-linear--active': props.active && isIntersecting.value,
4475
4561
  'v-progress-linear--reverse': isReversed.value,
4476
4562
  'v-progress-linear--rounded': props.rounded,
@@ -4478,8 +4564,11 @@ const VProgressLinear = defineComponent({
4478
4564
  'v-progress-linear--striped': props.striped
4479
4565
  }, roundedClasses.value, themeClasses.value],
4480
4566
  "style": {
4567
+ bottom: props.location === 'bottom' ? 0 : undefined,
4568
+ top: props.location === 'top' ? 0 : undefined,
4481
4569
  height: props.active ? convertToUnit(height.value) : 0,
4482
- '--v-progress-linear-height': convertToUnit(height.value)
4570
+ '--v-progress-linear-height': convertToUnit(height.value),
4571
+ ...locationStyles.value
4483
4572
  },
4484
4573
  "role": "progressbar",
4485
4574
  "aria-hidden": props.active ? 'false' : 'true',
@@ -4565,65 +4654,6 @@ function LoaderSlot(props, _ref) {
4565
4654
  }, null)]);
4566
4655
  }
4567
4656
 
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
4657
  // Utilities
4628
4658
 
4629
4659
  // Types
@@ -4829,21 +4859,31 @@ const VBtn = defineComponent({
4829
4859
  const group = useGroupItem(props, props.symbol, false);
4830
4860
  const link = useLink(props, attrs);
4831
4861
  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));
4862
+ if (props.active !== undefined) {
4863
+ return props.active;
4864
+ }
4865
+ if (link.isLink.value) {
4866
+ var _link$isActive;
4867
+ return (_link$isActive = link.isActive) == null ? void 0 : _link$isActive.value;
4868
+ }
4869
+ return group == null ? void 0 : group.isSelected.value;
4834
4870
  });
4835
4871
  const isDisabled = computed(() => (group == null ? void 0 : group.disabled.value) || props.disabled);
4836
4872
  const isElevated = computed(() => {
4837
4873
  return props.variant === 'elevated' && !(props.disabled || props.flat || props.border);
4838
4874
  });
4875
+ const valueAttr = computed(() => {
4876
+ if (props.value === undefined) return undefined;
4877
+ return Object(props.value) === props.value ? JSON.stringify(props.value, null, 0) : props.value;
4878
+ });
4839
4879
  useSelectLink(link, group == null ? void 0 : group.select);
4840
4880
  useRender(() => {
4841
- var _slots$prepend, _slots$default, _slots$append, _slots$loader;
4881
+ var _link$isActive2, _link$isActive3, _slots$prepend, _slots$default, _slots$append, _slots$loader;
4842
4882
  const Tag = link.isLink.value ? 'a' : props.tag;
4843
- const hasColor = !group || group.isSelected.value;
4844
4883
  const hasPrepend = !!(props.prependIcon || slots.prepend);
4845
4884
  const hasAppend = !!(props.appendIcon || slots.append);
4846
4885
  const hasIcon = !!(props.icon && props.icon !== true);
4886
+ 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
4887
  return withDirectives(createVNode(Tag, {
4848
4888
  "type": Tag === 'a' ? undefined : 'button',
4849
4889
  "class": ['v-btn', group == null ? void 0 : group.selectedClass.value, {
@@ -4864,7 +4904,8 @@ const VBtn = defineComponent({
4864
4904
  if (isDisabled.value) return;
4865
4905
  (_link$navigate = link.navigate) == null ? void 0 : _link$navigate.call(link, e);
4866
4906
  group == null ? void 0 : group.toggle();
4867
- }
4907
+ },
4908
+ "value": valueAttr.value
4868
4909
  }, {
4869
4910
  default: () => [genOverlays(true, 'v-btn'), !props.icon && hasPrepend && createVNode(VDefaultsProvider, {
4870
4911
  "key": "prepend",
@@ -5338,32 +5379,34 @@ const VField = genericComponent()({
5338
5379
  if (hasLabel.value) {
5339
5380
  const el = labelRef.value.$el;
5340
5381
  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');
5382
+ requestAnimationFrame(() => {
5383
+ const rect = nullifyTransforms(el);
5384
+ const targetRect = targetEl.getBoundingClientRect();
5385
+ const x = targetRect.x - rect.x;
5386
+ const y = targetRect.y - rect.y - (rect.height / 2 - targetRect.height / 2);
5387
+ const targetWidth = targetRect.width / 0.75;
5388
+ const width = Math.abs(targetWidth - rect.width) > 1 ? {
5389
+ maxWidth: convertToUnit(targetWidth)
5390
+ } : undefined;
5391
+ const style = getComputedStyle(el);
5392
+ const targetStyle = getComputedStyle(targetEl);
5393
+ const duration = parseFloat(style.transitionDuration) * 1000 || 150;
5394
+ const scale = parseFloat(targetStyle.getPropertyValue('--v-field-label-scale'));
5395
+ const color = targetStyle.getPropertyValue('color');
5396
+ el.style.visibility = 'visible';
5397
+ targetEl.style.visibility = 'hidden';
5398
+ animate(el, {
5399
+ transform: `translate(${x}px, ${y}px) scale(${scale})`,
5400
+ color,
5401
+ ...width
5402
+ }, {
5403
+ duration,
5404
+ easing: standardEasing,
5405
+ direction: val ? 'normal' : 'reverse'
5406
+ }).finished.then(() => {
5407
+ el.style.removeProperty('visibility');
5408
+ targetEl.style.removeProperty('visibility');
5409
+ });
5367
5410
  });
5368
5411
  }
5369
5412
  }, {
@@ -5552,7 +5595,6 @@ const FormKey = Symbol.for('vuetify:form');
5552
5595
  const makeFormProps = propsFactory({
5553
5596
  disabled: Boolean,
5554
5597
  fastFail: Boolean,
5555
- lazyValidation: Boolean,
5556
5598
  readonly: Boolean,
5557
5599
  modelValue: {
5558
5600
  type: Boolean,
@@ -6956,9 +6998,9 @@ const VDivider = defineComponent({
6956
6998
  themeClasses
6957
6999
  } = provideTheme(props);
6958
7000
  const {
6959
- backgroundColorClasses,
6960
- backgroundColorStyles
6961
- } = useBackgroundColor(toRef(props, 'color'));
7001
+ textColorClasses,
7002
+ textColorStyles
7003
+ } = useTextColor(toRef(props, 'color'));
6962
7004
  const dividerStyles = computed(() => {
6963
7005
  const styles = {};
6964
7006
  if (props.length) {
@@ -6974,8 +7016,8 @@ const VDivider = defineComponent({
6974
7016
  'v-divider': true,
6975
7017
  'v-divider--inset': props.inset,
6976
7018
  'v-divider--vertical': props.vertical
6977
- }, themeClasses.value, backgroundColorClasses.value],
6978
- "style": [dividerStyles.value, backgroundColorStyles.value],
7019
+ }, themeClasses.value, textColorClasses.value],
7020
+ "style": [dividerStyles.value, textColorStyles.value],
6979
7021
  "aria-orientation": !attrs.role || attrs.role === 'separator' ? props.vertical ? 'vertical' : 'horizontal' : undefined,
6980
7022
  "role": `${attrs.role || 'separator'}`
6981
7023
  }, null));
@@ -7685,7 +7727,7 @@ const VListItem = genericComponent()({
7685
7727
  }
7686
7728
  }
7687
7729
  useRender(() => {
7688
- var _slots$prepend, _slots$title, _slots$subtitle, _slots$default, _slots$append;
7730
+ var _slots$title, _slots$subtitle, _slots$default;
7689
7731
  const Tag = isLink.value ? 'a' : props.tag;
7690
7732
  const hasColor = !list || isSelected.value || isActive.value;
7691
7733
  const hasTitle = slots.title || props.title;
@@ -7708,7 +7750,18 @@ const VListItem = genericComponent()({
7708
7750
  "onClick": onClick,
7709
7751
  "onKeydown": isClickable.value && !isLink.value && onKeyDown
7710
7752
  }, {
7711
- default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode(VDefaultsProvider, {
7753
+ default: () => [genOverlays(isClickable.value || isActive.value, 'v-list-item'), hasPrepend && createVNode("div", {
7754
+ "key": "prepend",
7755
+ "class": "v-list-item__prepend"
7756
+ }, [props.prependAvatar && createVNode(VAvatar, {
7757
+ "key": "prepend-avatar",
7758
+ "density": props.density,
7759
+ "image": props.prependAvatar
7760
+ }, null), props.prependIcon && createVNode(VIcon, {
7761
+ "key": "prepend-icon",
7762
+ "density": props.density,
7763
+ "icon": props.prependIcon
7764
+ }, null), slots.prepend && createVNode(VDefaultsProvider, {
7712
7765
  "key": "prepend",
7713
7766
  "defaults": {
7714
7767
  VAvatar: {
@@ -7724,14 +7777,8 @@ const VListItem = genericComponent()({
7724
7777
  }
7725
7778
  }
7726
7779
  }, {
7727
- default: () => [createVNode("div", {
7728
- "class": "v-list-item__prepend"
7729
- }, [props.prependAvatar && createVNode(VAvatar, {
7730
- "key": "prepend-avatar"
7731
- }, null), props.prependIcon && createVNode(VIcon, {
7732
- "key": "prepend-icon"
7733
- }, null), (_slots$prepend = slots.prepend) == null ? void 0 : _slots$prepend.call(slots, slotProps.value)])]
7734
- }), createVNode("div", {
7780
+ default: () => [slots.prepend(slotProps.value)]
7781
+ })]), createVNode("div", {
7735
7782
  "class": "v-list-item__content",
7736
7783
  "data-no-activator": ""
7737
7784
  }, [hasTitle && createVNode(VListItemTitle, {
@@ -7746,7 +7793,10 @@ const VListItem = genericComponent()({
7746
7793
  default: () => [((_slots$subtitle = slots.subtitle) == null ? void 0 : _slots$subtitle.call(slots, {
7747
7794
  subtitle: props.subtitle
7748
7795
  })) ?? props.subtitle]
7749
- }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode(VDefaultsProvider, {
7796
+ }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value)]), hasAppend && createVNode("div", {
7797
+ "key": "append",
7798
+ "class": "v-list-item__append"
7799
+ }, [slots.append && createVNode(VDefaultsProvider, {
7750
7800
  "key": "append",
7751
7801
  "defaults": {
7752
7802
  VAvatar: {
@@ -7762,14 +7812,16 @@ const VListItem = genericComponent()({
7762
7812
  }
7763
7813
  }
7764
7814
  }, {
7765
- default: () => [createVNode("div", {
7766
- "class": "v-list-item__append"
7767
- }, [(_slots$append = slots.append) == null ? void 0 : _slots$append.call(slots, slotProps.value), props.appendIcon && createVNode(VIcon, {
7768
- "key": "append-icon"
7769
- }, null), props.appendAvatar && createVNode(VAvatar, {
7770
- "key": "append-avatar"
7771
- }, null)])]
7772
- })]
7815
+ default: () => [slots.append(slotProps.value)]
7816
+ }), props.appendIcon && createVNode(VIcon, {
7817
+ "key": "append-icon",
7818
+ "density": props.density,
7819
+ "icon": props.appendIcon
7820
+ }, null), props.appendAvatar && createVNode(VAvatar, {
7821
+ "key": "append-avatar",
7822
+ "density": props.density,
7823
+ "image": props.appendAvatar
7824
+ }, null)])]
7773
7825
  }), [[resolveDirective("ripple"), isClickable.value && props.ripple]]);
7774
7826
  });
7775
7827
  return {};
@@ -7983,9 +8035,12 @@ function useItems(props) {
7983
8035
 
7984
8036
  // Types
7985
8037
 
8038
+ function isPrimitive(value) {
8039
+ return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
8040
+ }
7986
8041
  function transformItem(props, item) {
7987
8042
  const type = getPropertyFromItem(item, props.itemType, 'item');
7988
- const title = typeof item === 'string' ? item : getPropertyFromItem(item, props.itemTitle);
8043
+ const title = isPrimitive(item) ? item : getPropertyFromItem(item, props.itemTitle);
7989
8044
  const value = getPropertyFromItem(item, props.itemValue, undefined);
7990
8045
  const children = getPropertyFromItem(item, props.itemChildren);
7991
8046
  const itemProps = props.itemProps === true ? pick(item, ['children'])[1] : getPropertyFromItem(item, props.itemProps);
@@ -8611,17 +8666,12 @@ const makeLocationStrategyProps = propsFactory({
8611
8666
  function useLocationStrategies(props, data) {
8612
8667
  const contentStyles = ref({});
8613
8668
  const updateLocation = ref();
8614
- let scope;
8615
- watchEffect(async () => {
8616
- var _scope;
8617
- (_scope = scope) == null ? void 0 : _scope.stop();
8618
- updateLocation.value = undefined;
8619
- if (!(IN_BROWSER && data.isActive.value && props.locationStrategy)) return;
8620
- scope = effectScope();
8621
- if (!(props.locationStrategy === 'connected')) {
8622
- await nextTick();
8623
- }
8624
- scope.run(() => {
8669
+ if (IN_BROWSER) {
8670
+ useToggleScope(() => !!(data.isActive.value && props.locationStrategy), reset => {
8671
+ watch(() => props.locationStrategy, reset);
8672
+ onScopeDispose(() => {
8673
+ updateLocation.value = undefined;
8674
+ });
8625
8675
  if (typeof props.locationStrategy === 'function') {
8626
8676
  var _props$locationStrate;
8627
8677
  updateLocation.value = (_props$locationStrate = props.locationStrategy(data, props, contentStyles)) == null ? void 0 : _props$locationStrate.updateLocation;
@@ -8630,16 +8680,14 @@ function useLocationStrategies(props, data) {
8630
8680
  updateLocation.value = (_locationStrategies$p = locationStrategies[props.locationStrategy](data, props, contentStyles)) == null ? void 0 : _locationStrategies$p.updateLocation;
8631
8681
  }
8632
8682
  });
8633
- });
8634
- IN_BROWSER && window.addEventListener('resize', onResize, {
8635
- passive: true
8636
- });
8637
- onScopeDispose(() => {
8638
- var _scope2;
8639
- IN_BROWSER && window.removeEventListener('resize', onResize);
8640
- updateLocation.value = undefined;
8641
- (_scope2 = scope) == null ? void 0 : _scope2.stop();
8642
- });
8683
+ window.addEventListener('resize', onResize, {
8684
+ passive: true
8685
+ });
8686
+ onScopeDispose(() => {
8687
+ window.removeEventListener('resize', onResize);
8688
+ updateLocation.value = undefined;
8689
+ });
8690
+ }
8643
8691
  function onResize(e) {
8644
8692
  var _updateLocation$value;
8645
8693
  (_updateLocation$value = updateLocation.value) == null ? void 0 : _updateLocation$value.call(updateLocation, e);
@@ -8933,13 +8981,30 @@ function connectedLocationStrategy(data, props, contentStyles) {
8933
8981
  maxWidth: convertToUnit(pixelCeil(clamp(available.x, minWidth.value === Infinity ? 0 : minWidth.value, maxWidth.value))),
8934
8982
  maxHeight: convertToUnit(pixelCeil(clamp(available.y, minHeight.value === Infinity ? 0 : minHeight.value, maxHeight.value)))
8935
8983
  });
8984
+ return {
8985
+ available,
8986
+ contentBox
8987
+ };
8936
8988
  }
8937
- watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation(), {
8938
- immediate: !activatorFixed
8939
- });
8940
- if (activatorFixed) nextTick(() => updateLocation());
8941
- requestAnimationFrame(() => {
8942
- if (contentStyles.value.maxHeight) updateLocation();
8989
+ watch(() => [preferredAnchor.value, preferredOrigin.value, props.offset, props.minWidth, props.minHeight, props.maxWidth, props.maxHeight], () => updateLocation());
8990
+ nextTick(() => {
8991
+ const result = updateLocation();
8992
+
8993
+ // TODO: overflowing content should only require a single updateLocation call
8994
+ // Icky hack to make sure the content is positioned consistently
8995
+ if (!result) return;
8996
+ const {
8997
+ available,
8998
+ contentBox
8999
+ } = result;
9000
+ if (contentBox.height > available.y) {
9001
+ requestAnimationFrame(() => {
9002
+ updateLocation();
9003
+ requestAnimationFrame(() => {
9004
+ updateLocation();
9005
+ });
9006
+ });
9007
+ }
8943
9008
  });
8944
9009
  return {
8945
9010
  updateLocation
@@ -9007,10 +9072,10 @@ function useScrollStrategies(props, data) {
9007
9072
  await nextTick();
9008
9073
  scope.run(() => {
9009
9074
  if (typeof props.scrollStrategy === 'function') {
9010
- props.scrollStrategy(data, props);
9075
+ props.scrollStrategy(data, props, scope);
9011
9076
  } else {
9012
9077
  var _scrollStrategies$pro;
9013
- (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props);
9078
+ (_scrollStrategies$pro = scrollStrategies[props.scrollStrategy]) == null ? void 0 : _scrollStrategies$pro.call(scrollStrategies, data, props, scope);
9014
9079
  }
9015
9080
  });
9016
9081
  });
@@ -9056,9 +9121,10 @@ function blockScrollStrategy(data, props) {
9056
9121
  }
9057
9122
  });
9058
9123
  }
9059
- function repositionScrollStrategy(data) {
9124
+ function repositionScrollStrategy(data, props, scope) {
9060
9125
  let slow = false;
9061
9126
  let raf = -1;
9127
+ let ric = -1;
9062
9128
  function update(e) {
9063
9129
  requestNewFrame(() => {
9064
9130
  var _data$updateLocation$, _data$updateLocation;
@@ -9068,21 +9134,29 @@ function repositionScrollStrategy(data) {
9068
9134
  slow = time / (1000 / 60) > 2;
9069
9135
  });
9070
9136
  }
9071
- bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9072
- if (slow) {
9073
- // If the position calculation is slow,
9074
- // defer updates until scrolling is finished.
9075
- // Browsers usually fire one scroll event per frame so
9076
- // we just wait until we've got two frames without an event
9077
- cancelAnimationFrame(raf);
9078
- raf = requestAnimationFrame(() => {
9079
- raf = requestAnimationFrame(() => {
9137
+ ric = requestIdleCallback(() => {
9138
+ scope.run(() => {
9139
+ bindScroll(data.activatorEl.value ?? data.contentEl.value, e => {
9140
+ if (slow) {
9141
+ // If the position calculation is slow,
9142
+ // defer updates until scrolling is finished.
9143
+ // Browsers usually fire one scroll event per frame so
9144
+ // we just wait until we've got two frames without an event
9145
+ cancelAnimationFrame(raf);
9146
+ raf = requestAnimationFrame(() => {
9147
+ raf = requestAnimationFrame(() => {
9148
+ update(e);
9149
+ });
9150
+ });
9151
+ } else {
9080
9152
  update(e);
9081
- });
9153
+ }
9082
9154
  });
9083
- } else {
9084
- update(e);
9085
- }
9155
+ });
9156
+ });
9157
+ onScopeDispose(() => {
9158
+ cancelIdleCallback(ric);
9159
+ cancelAnimationFrame(raf);
9086
9160
  });
9087
9161
  }
9088
9162
 
@@ -9725,6 +9799,11 @@ const VMenu = genericComponent()({
9725
9799
  function onClickOutside() {
9726
9800
  parent == null ? void 0 : parent.closeParents();
9727
9801
  }
9802
+ const activatorProps = computed(() => mergeProps({
9803
+ 'aria-haspopup': 'menu',
9804
+ 'aria-expanded': String(isActive.value),
9805
+ 'aria-owns': id.value
9806
+ }, props.activatorProps));
9728
9807
  useRender(() => {
9729
9808
  const [overlayProps] = filterVOverlayProps(props);
9730
9809
  return createVNode(VOverlay, mergeProps({
@@ -9734,11 +9813,7 @@ const VMenu = genericComponent()({
9734
9813
  "modelValue": isActive.value,
9735
9814
  "onUpdate:modelValue": $event => isActive.value = $event,
9736
9815
  "absolute": true,
9737
- "activatorProps": mergeProps({
9738
- 'aria-haspopup': 'menu',
9739
- 'aria-expanded': String(isActive.value),
9740
- 'aria-owns': id.value
9741
- }, props.activatorProps),
9816
+ "activatorProps": activatorProps.value,
9742
9817
  "onClick:outside": onClickOutside
9743
9818
  }, scopeId), {
9744
9819
  activator: slots.activator,
@@ -9852,8 +9927,10 @@ const VSelect = genericComponent()({
9852
9927
  }
9853
9928
  function onKeydown(e) {
9854
9929
  if (props.readonly || form != null && form.isReadonly.value) return;
9855
- if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9930
+ if (['Enter', ' ', 'ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {
9856
9931
  e.preventDefault();
9932
+ }
9933
+ if (['Enter', 'ArrowDown', ' '].includes(e.key)) {
9857
9934
  menu.value = true;
9858
9935
  }
9859
9936
  if (['Escape', 'Tab'].includes(e.key)) {
@@ -9864,15 +9941,12 @@ const VSelect = genericComponent()({
9864
9941
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
9865
9942
  } else if (e.key === 'ArrowUp') {
9866
9943
  var _listRef$value2;
9867
- e.preventDefault();
9868
9944
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
9869
9945
  } else if (e.key === 'Home') {
9870
9946
  var _listRef$value3;
9871
- e.preventDefault();
9872
9947
  (_listRef$value3 = listRef.value) == null ? void 0 : _listRef$value3.focus('first');
9873
9948
  } else if (e.key === 'End') {
9874
9949
  var _listRef$value4;
9875
- e.preventDefault();
9876
9950
  (_listRef$value4 = listRef.value) == null ? void 0 : _listRef$value4.focus('last');
9877
9951
  }
9878
9952
  }
@@ -10054,7 +10128,7 @@ function filterItems(items, query, options) {
10054
10128
  const customFiltersLength = Object.keys((options == null ? void 0 : options.customKeyFilter) ?? {}).length;
10055
10129
  if (!(items != null && items.length)) return array;
10056
10130
  loop: for (let i = 0; i < items.length; i++) {
10057
- const item = items[i].raw;
10131
+ const item = items[i];
10058
10132
  const customMatches = {};
10059
10133
  const defaultMatches = {};
10060
10134
  let match = -1;
@@ -10094,7 +10168,7 @@ function filterItems(items, query, options) {
10094
10168
  }
10095
10169
  return array;
10096
10170
  }
10097
- function useFilter(props, items, query) {
10171
+ function useFilter(props, items, query, options) {
10098
10172
  const strQuery = computed(() => typeof (query == null ? void 0 : query.value) !== 'string' && typeof (query == null ? void 0 : query.value) !== 'number' ? '' : String(query.value));
10099
10173
  const filteredItems = ref([]);
10100
10174
  const filteredMatches = ref(new Map());
@@ -10105,7 +10179,7 @@ function useFilter(props, items, query) {
10105
10179
  const results = filterItems(transformedItems, strQuery.value, {
10106
10180
  customKeyFilter: props.customKeyFilter,
10107
10181
  default: props.customFilter,
10108
- filterKeys: props.filterKeys,
10182
+ filterKeys: unref(options == null ? void 0 : options.filterKeys) ?? props.filterKeys,
10109
10183
  filterMode: props.filterMode,
10110
10184
  noFilter: props.noFilter
10111
10185
  });
@@ -10216,6 +10290,9 @@ const VAutocomplete = genericComponent()({
10216
10290
  }
10217
10291
  function onKeydown(e) {
10218
10292
  if (props.readonly || form != null && form.isReadonly.value) return;
10293
+ if (['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
10294
+ e.preventDefault();
10295
+ }
10219
10296
  if (['Enter', 'ArrowDown'].includes(e.key)) {
10220
10297
  menu.value = true;
10221
10298
  }
@@ -10227,11 +10304,9 @@ const VAutocomplete = genericComponent()({
10227
10304
  }
10228
10305
  if (e.key === 'ArrowDown') {
10229
10306
  var _listRef$value;
10230
- e.preventDefault();
10231
10307
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
10232
10308
  } else if (e.key === 'ArrowUp') {
10233
10309
  var _listRef$value2;
10234
- e.preventDefault();
10235
10310
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
10236
10311
  }
10237
10312
  }
@@ -13560,7 +13635,9 @@ const VCombobox = genericComponent()({
13560
13635
  if (props.readonly || form != null && form.isReadonly.value) return;
13561
13636
  const selectionStart = vTextFieldRef.value.selectionStart;
13562
13637
  const length = selected.value.length;
13563
- if (selectionIndex.value > -1) e.preventDefault();
13638
+ if (selectionIndex.value > -1 || ['Enter', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
13639
+ e.preventDefault();
13640
+ }
13564
13641
  if (['Enter', 'ArrowDown'].includes(e.key)) {
13565
13642
  menu.value = true;
13566
13643
  }
@@ -13572,11 +13649,9 @@ const VCombobox = genericComponent()({
13572
13649
  }
13573
13650
  if (e.key === 'ArrowDown') {
13574
13651
  var _listRef$value;
13575
- e.preventDefault();
13576
13652
  (_listRef$value = listRef.value) == null ? void 0 : _listRef$value.focus('next');
13577
13653
  } else if (e.key === 'ArrowUp') {
13578
13654
  var _listRef$value2;
13579
- e.preventDefault();
13580
13655
  (_listRef$value2 = listRef.value) == null ? void 0 : _listRef$value2.focus('prev');
13581
13656
  }
13582
13657
  if (!props.multiple) return;
@@ -13610,7 +13685,7 @@ const VCombobox = genericComponent()({
13610
13685
  vTextFieldRef.value.setSelectionRange(0, 0);
13611
13686
  }
13612
13687
  }
13613
- if (e.key === 'Enter') {
13688
+ if (e.key === 'Enter' && search.value) {
13614
13689
  select(transformItem$1(props, search.value));
13615
13690
  search.value = '';
13616
13691
  }
@@ -13871,6 +13946,10 @@ const VDialog = genericComponent()({
13871
13946
  });
13872
13947
  }
13873
13948
  });
13949
+ const activatorProps = computed(() => mergeProps({
13950
+ 'aria-haspopup': 'dialog',
13951
+ 'aria-expanded': String(isActive.value)
13952
+ }, props.activatorProps));
13874
13953
  useRender(() => {
13875
13954
  const [overlayProps] = filterVOverlayProps(props);
13876
13955
  return createVNode(VOverlay, mergeProps({
@@ -13884,10 +13963,7 @@ const VDialog = genericComponent()({
13884
13963
  "onUpdate:modelValue": $event => isActive.value = $event,
13885
13964
  "aria-role": "dialog",
13886
13965
  "aria-modal": "true",
13887
- "activatorProps": mergeProps({
13888
- 'aria-haspopup': 'dialog',
13889
- 'aria-expanded': String(isActive.value)
13890
- }, props.activatorProps)
13966
+ "activatorProps": activatorProps.value
13891
13967
  }, scopeId), {
13892
13968
  activator: slots.activator,
13893
13969
  default: function () {
@@ -14236,12 +14312,15 @@ const VFileInput = defineComponent({
14236
14312
  onFocus();
14237
14313
  nextTick(() => {
14238
14314
  model.value = [];
14239
- if (inputRef != null && inputRef.value) {
14240
- inputRef.value.value = '';
14241
- }
14242
14315
  callEvent(props['onClick:clear'], e);
14243
14316
  });
14244
14317
  }
14318
+ watch(model, newValue => {
14319
+ const hasModelReset = !Array.isArray(newValue) || !newValue.length;
14320
+ if (hasModelReset && inputRef.value) {
14321
+ inputRef.value.value = '';
14322
+ }
14323
+ });
14245
14324
  useRender(() => {
14246
14325
  const hasCounter = !!(slots.counter || props.counter);
14247
14326
  const hasDetails = !!(hasCounter || slots.details);
@@ -15232,7 +15311,7 @@ function useTouch(_ref) {
15232
15311
  window.removeEventListener('touchmove', onTouchmove);
15233
15312
  window.removeEventListener('touchend', onTouchend);
15234
15313
  });
15235
- const isHorizontal = computed(() => position.value !== 'bottom');
15314
+ const isHorizontal = computed(() => ['left', 'right'].includes(position.value));
15236
15315
  const {
15237
15316
  addMovement,
15238
15317
  endTouch,
@@ -15244,11 +15323,11 @@ function useTouch(_ref) {
15244
15323
  const offset = ref(0);
15245
15324
  let start;
15246
15325
  function getOffset(pos, active) {
15247
- return (position.value === 'left' ? pos : position.value === 'right' ? document.documentElement.clientWidth - pos : position.value === 'bottom' ? document.documentElement.clientHeight - pos : oops()) - (active ? width.value : 0);
15326
+ 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);
15248
15327
  }
15249
15328
  function getProgress(pos) {
15250
15329
  let limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15251
- 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();
15330
+ 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();
15252
15331
  return limit ? Math.max(0, Math.min(1, progress)) : progress;
15253
15332
  }
15254
15333
  function onTouchstart(e) {
@@ -15256,8 +15335,8 @@ function useTouch(_ref) {
15256
15335
  const touchX = e.changedTouches[0].clientX;
15257
15336
  const touchY = e.changedTouches[0].clientY;
15258
15337
  const touchZone = 25;
15259
- const inTouchZone = position.value === 'left' ? touchX < touchZone : position.value === 'right' ? touchX > document.documentElement.clientWidth - touchZone : position.value === 'bottom' ? touchY > document.documentElement.clientHeight - touchZone : oops();
15260
- 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());
15338
+ 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();
15339
+ 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());
15261
15340
  if (inTouchZone || inElement || isActive.value && isTemporary.value) {
15262
15341
  maybeDragging = true;
15263
15342
  start = [touchX, touchY];
@@ -15309,6 +15388,7 @@ function useTouch(_ref) {
15309
15388
  isActive.value = velocity.direction === ({
15310
15389
  left: 'right',
15311
15390
  right: 'left',
15391
+ top: 'down',
15312
15392
  bottom: 'up'
15313
15393
  }[position.value] || oops());
15314
15394
  } else {
@@ -15317,7 +15397,7 @@ function useTouch(_ref) {
15317
15397
  }
15318
15398
  const dragStyles = computed(() => {
15319
15399
  return isDragging.value ? {
15320
- 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(),
15400
+ 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(),
15321
15401
  transition: 'none'
15322
15402
  } : undefined;
15323
15403
  });
@@ -15333,7 +15413,7 @@ function oops() {
15333
15413
 
15334
15414
  // Types
15335
15415
 
15336
- const locations = ['start', 'end', 'left', 'right', 'bottom'];
15416
+ const locations = ['start', 'end', 'left', 'right', 'top', 'bottom'];
15337
15417
  const VNavigationDrawer = defineComponent({
15338
15418
  name: 'VNavigationDrawer',
15339
15419
  props: {
@@ -15790,7 +15870,7 @@ const VPagination = defineComponent({
15790
15870
  disabled: !!props.disabled || props.length < 2,
15791
15871
  color: isActive ? props.activeColor : props.color,
15792
15872
  ariaCurrent: isActive,
15793
- ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
15873
+ ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, item),
15794
15874
  onClick: e => setValue(e, item)
15795
15875
  }
15796
15876
  };
@@ -17969,6 +18049,9 @@ const VTooltip = genericComponent()({
17969
18049
  if (props.transition) return props.transition;
17970
18050
  return isActive.value ? 'scale-transition' : 'fade-transition';
17971
18051
  });
18052
+ const activatorProps = computed(() => mergeProps({
18053
+ 'aria-describedby': id.value
18054
+ }, props.activatorProps));
17972
18055
  useRender(() => {
17973
18056
  const [overlayProps] = filterVOverlayProps(props);
17974
18057
  return createVNode(VOverlay, mergeProps({
@@ -17985,9 +18068,7 @@ const VTooltip = genericComponent()({
17985
18068
  "persistent": true,
17986
18069
  "role": "tooltip",
17987
18070
  "eager": true,
17988
- "activatorProps": mergeProps({
17989
- 'aria-describedby': id.value
17990
- }, props.activatorProps),
18071
+ "activatorProps": activatorProps.value,
17991
18072
  "_disableGlobalStack": true
17992
18073
  }, scopeId), {
17993
18074
  activator: slots.activator,
@@ -18373,7 +18454,7 @@ function createVuetify$1() {
18373
18454
  locale
18374
18455
  };
18375
18456
  }
18376
- const version$1 = "3.2.0-next-20230114.0";
18457
+ const version$1 = "4.0.0-next-20230205.0";
18377
18458
  createVuetify$1.version = version$1;
18378
18459
 
18379
18460
  // Vue's inject() can only be used in setup
@@ -18394,7 +18475,7 @@ const createVuetify = function () {
18394
18475
  ...options
18395
18476
  });
18396
18477
  };
18397
- const version = "3.2.0-next-20230114.0";
18478
+ const version = "4.0.0-next-20230205.0";
18398
18479
  createVuetify.version = version;
18399
18480
 
18400
18481
  export { components, createVuetify, directives, useDisplay, useLayout, useLocale, useRtl, useTheme, version };