@vuetify/nightly 3.0.0-next-20220112.0 → 3.0.0-next-20220128.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 (71) hide show
  1. package/dist/json/attributes.json +96 -8
  2. package/dist/json/importMap.json +8 -0
  3. package/dist/json/tags.json +36 -4
  4. package/dist/json/web-types.json +354 -25
  5. package/dist/vuetify.css +116 -35
  6. package/dist/vuetify.d.ts +226 -65
  7. package/dist/vuetify.esm.js +745 -403
  8. package/dist/vuetify.esm.js.map +1 -1
  9. package/dist/vuetify.js +745 -403
  10. package/dist/vuetify.js.map +1 -1
  11. package/dist/vuetify.min.css +2 -2
  12. package/dist/vuetify.min.js +2 -2
  13. package/dist/vuetify.min.js.map +1 -1
  14. package/lib/components/VExpansionPanel/VExpansionPanel.mjs +2 -2
  15. package/lib/components/VExpansionPanel/VExpansionPanel.mjs.map +1 -1
  16. package/lib/components/VHover/VHover.mjs +3 -3
  17. package/lib/components/VHover/VHover.mjs.map +1 -1
  18. package/lib/components/VIcon/VIcon.mjs +8 -3
  19. package/lib/components/VIcon/VIcon.mjs.map +1 -1
  20. package/lib/components/VList/VList.css +4 -2
  21. package/lib/components/VList/VList.mjs +37 -36
  22. package/lib/components/VList/VList.mjs.map +1 -1
  23. package/lib/components/VList/VList.sass +5 -2
  24. package/lib/components/VList/VListChildren.mjs +25 -15
  25. package/lib/components/VList/VListChildren.mjs.map +1 -1
  26. package/lib/components/VList/VListGroup.mjs +19 -41
  27. package/lib/components/VList/VListGroup.mjs.map +1 -1
  28. package/lib/components/VList/VListItem.mjs +9 -5
  29. package/lib/components/VList/VListItem.mjs.map +1 -1
  30. package/lib/components/VList/VListSubheader.mjs +20 -12
  31. package/lib/components/VList/VListSubheader.mjs.map +1 -1
  32. package/lib/components/VList/list.mjs +31 -0
  33. package/lib/components/VList/list.mjs.map +1 -0
  34. package/lib/components/VPagination/VPagination.mjs +3 -0
  35. package/lib/components/VPagination/VPagination.mjs.map +1 -1
  36. package/lib/components/VRangeSlider/VRangeSlider.mjs +40 -28
  37. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  38. package/lib/components/VSlider/VSlider.css +2 -0
  39. package/lib/components/VSlider/VSlider.mjs +4 -3
  40. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  41. package/lib/components/VSlider/VSlider.sass +2 -0
  42. package/lib/components/VSlider/VSliderThumb.css +8 -2
  43. package/lib/components/VSlider/VSliderThumb.mjs +4 -3
  44. package/lib/components/VSlider/VSliderThumb.mjs.map +1 -1
  45. package/lib/components/VSlider/VSliderThumb.sass +7 -2
  46. package/lib/components/VSlider/_variables.scss +2 -1
  47. package/lib/components/VSlider/slider.mjs +8 -6
  48. package/lib/components/VSlider/slider.mjs.map +1 -1
  49. package/lib/components/VWindow/VWindow.css +70 -0
  50. package/lib/components/VWindow/VWindow.mjs +158 -233
  51. package/lib/components/VWindow/VWindow.mjs.map +1 -1
  52. package/lib/components/VWindow/VWindow.sass +26 -50
  53. package/lib/components/VWindow/VWindowItem.mjs +72 -98
  54. package/lib/components/VWindow/VWindowItem.mjs.map +1 -1
  55. package/lib/components/VWindow/_variables.scss +2 -3
  56. package/lib/components/VWindow/index.mjs +2 -9
  57. package/lib/components/VWindow/index.mjs.map +1 -1
  58. package/lib/components/index.d.ts +222 -64
  59. package/lib/components/index.mjs +1 -1
  60. package/lib/components/index.mjs.map +1 -1
  61. package/lib/composables/group.mjs +1 -6
  62. package/lib/composables/group.mjs.map +1 -1
  63. package/lib/composables/nested/nested.mjs +1 -1
  64. package/lib/composables/nested/nested.mjs.map +1 -1
  65. package/lib/composables/nested/openStrategies.mjs +1 -1
  66. package/lib/composables/nested/openStrategies.mjs.map +1 -1
  67. package/lib/directives/touch/index.mjs +6 -3
  68. package/lib/directives/touch/index.mjs.map +1 -1
  69. package/lib/entry-bundler.mjs +1 -1
  70. package/lib/index.d.ts +2 -0
  71. package/package.json +2 -1
package/dist/vuetify.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Vuetify v3.0.0-next-20220112.0
2
+ * Vuetify v3.0.0-next-20220128.0
3
3
  * Forged by John Leider
4
4
  * Released under the MIT License.
5
5
  */
@@ -2611,12 +2611,7 @@
2611
2611
  next: () => step(1),
2612
2612
  isSelected: id => selected.value.includes(id),
2613
2613
  selectedClass: vue.computed(() => props.selectedClass),
2614
- items: vue.computed(() => items.map(_ref => {
2615
- let {
2616
- id
2617
- } = _ref;
2618
- return id;
2619
- }))
2614
+ items: vue.computed(() => items)
2620
2615
  };
2621
2616
  vue.provide(injectKey, state);
2622
2617
  return state;
@@ -2857,7 +2852,8 @@
2857
2852
  ...makeSizeProps(),
2858
2853
  ...makeTagProps({
2859
2854
  tag: 'i'
2860
- })
2855
+ }),
2856
+ ...makeThemeProps()
2861
2857
  },
2862
2858
 
2863
2859
  setup(props, _ref) {
@@ -2876,6 +2872,9 @@
2876
2872
  });
2877
2873
  }
2878
2874
 
2875
+ const {
2876
+ themeClasses
2877
+ } = provideTheme(props);
2879
2878
  const {
2880
2879
  iconData
2881
2880
  } = useIcon(slotIcon || props);
@@ -2890,7 +2889,7 @@
2890
2889
  return vue.createVNode(iconData.value.component, {
2891
2890
  "tag": props.tag,
2892
2891
  "icon": iconData.value.icon,
2893
- "class": ['v-icon', 'notranslate', sizeClasses.value, textColorClasses.value, {
2892
+ "class": ['v-icon', 'notranslate', sizeClasses.value, textColorClasses.value, themeClasses.value, {
2894
2893
  'v-icon--left': props.left,
2895
2894
  'v-icon--right': props.right
2896
2895
  }],
@@ -7116,11 +7115,11 @@
7116
7115
  } = useElevation(props);
7117
7116
  vue.provide(VExpansionPanelSymbol, groupItem);
7118
7117
  const isBeforeSelected = vue.computed(() => {
7119
- const index = groupItem.group.items.value.indexOf(groupItem.id);
7118
+ const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id);
7120
7119
  return !groupItem.isSelected.value && groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === 1);
7121
7120
  });
7122
7121
  const isAfterSelected = vue.computed(() => {
7123
- const index = groupItem.group.items.value.indexOf(groupItem.id);
7122
+ const index = groupItem.group.items.value.findIndex(item => item.id === groupItem.id);
7124
7123
  return !groupItem.isSelected.value && groupItem.group.selected.value.some(id => groupItem.group.items.value.indexOf(id) - index === -1);
7125
7124
  });
7126
7125
  const {
@@ -8373,16 +8372,16 @@
8373
8372
  let {
8374
8373
  slots
8375
8374
  } = _ref;
8376
- const hover = useProxiedModel(props, 'modelValue');
8375
+ const isHovering = useProxiedModel(props, 'modelValue');
8377
8376
  const {
8378
8377
  runOpenDelay,
8379
8378
  runCloseDelay
8380
- } = useDelay(props, value => !props.disabled && (hover.value = value));
8379
+ } = useDelay(props, value => !props.disabled && (isHovering.value = value));
8381
8380
  return () => {
8382
8381
  var _slots$default;
8383
8382
 
8384
8383
  return (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, {
8385
- hover: hover.value,
8384
+ isHovering: isHovering.value,
8386
8385
  props: {
8387
8386
  onMouseenter: runOpenDelay,
8388
8387
  onMouseleave: runCloseDelay
@@ -8596,37 +8595,26 @@
8596
8595
 
8597
8596
  });
8598
8597
 
8599
- const VListSubheader = defineComponent({
8600
- name: 'VListSubheader',
8601
- props: {
8602
- color: String,
8603
- inset: Boolean,
8604
- ...makeTagProps()
8605
- },
8606
-
8607
- setup(props, _ref) {
8608
- let {
8609
- slots
8610
- } = _ref;
8611
- const {
8612
- textColorClasses,
8613
- textColorStyles
8614
- } = useTextColor(vue.toRef(props, 'color'));
8615
- return () => vue.createVNode(props.tag, {
8616
- "class": ['v-list-subheader', {
8617
- 'v-list-subheader--inset': props.inset
8618
- }, textColorClasses.value],
8619
- "style": {
8620
- textColorStyles
8621
- }
8622
- }, {
8623
- default: () => [slots.default && vue.createVNode("div", {
8624
- "class": "v-list-subheader__text"
8625
- }, [slots.default()])]
8626
- }, 8, ["class", "style"]);
8627
- }
8598
+ // Utilities
8628
8599
 
8629
- });
8600
+ const ListKey = Symbol.for('vuetify:list');
8601
+ function createList() {
8602
+ const parent = vue.inject(ListKey, {
8603
+ hasPrepend: vue.ref(false),
8604
+ updateHasPrepend: () => null
8605
+ });
8606
+ const data = {
8607
+ hasPrepend: vue.ref(false),
8608
+ updateHasPrepend: value => {
8609
+ if (value) data.hasPrepend.value = value;
8610
+ }
8611
+ };
8612
+ vue.provide(ListKey, data);
8613
+ return parent;
8614
+ }
8615
+ function useList() {
8616
+ return vue.inject(ListKey, null);
8617
+ }
8630
8618
 
8631
8619
  const singleOpenStrategy = _ref => {
8632
8620
  let {
@@ -8664,7 +8652,7 @@
8664
8652
  let parent = parents.get(id);
8665
8653
  opened.add(id);
8666
8654
 
8667
- while (parent != null) {
8655
+ while (parent != null && parent !== id) {
8668
8656
  opened.add(parent);
8669
8657
  parent = parents.get(parent);
8670
8658
  }
@@ -8916,7 +8904,7 @@
8916
8904
  return arr;
8917
8905
  }),
8918
8906
  register: (id, parentId, isGroup) => {
8919
- parentId && parents.value.set(id, parentId);
8907
+ parentId && id !== parentId && parents.value.set(id, parentId);
8920
8908
  isGroup && children.value.set(id, []);
8921
8909
 
8922
8910
  if (parentId != null) {
@@ -9023,30 +9011,6 @@
9023
9011
  return group;
9024
9012
  };
9025
9013
 
9026
- const VListGroupItems = defineComponent({
9027
- name: 'VListGroupItems',
9028
- props: {
9029
- open: Boolean,
9030
- items: Array
9031
- },
9032
-
9033
- setup(props, _ref) {
9034
- let {
9035
- slots
9036
- } = _ref;
9037
- createList();
9038
- return () => {
9039
- return vue.createVNode(VExpandTransition, null, {
9040
- default: () => [vue.withDirectives(vue.createVNode("div", {
9041
- "class": "v-list-group__items"
9042
- }, [vue.createVNode(VListChildren, {
9043
- "items": props.items
9044
- }, slots, 8, ["items"])], 512), [[vue.vShow, props.open]])]
9045
- });
9046
- };
9047
- }
9048
-
9049
- });
9050
9014
  const VListGroup = genericComponent()({
9051
9015
  name: 'VListGroup',
9052
9016
  props: {
@@ -9059,14 +9023,13 @@
9059
9023
  type: String,
9060
9024
  default: '$expand'
9061
9025
  },
9062
- items: Array,
9063
9026
  ...makeTagProps()
9064
9027
  },
9065
9028
 
9066
- setup(props, _ref2) {
9029
+ setup(props, _ref) {
9067
9030
  let {
9068
9031
  slots
9069
- } = _ref2;
9032
+ } = _ref;
9070
9033
  const {
9071
9034
  isOpen,
9072
9035
  open
@@ -9077,23 +9040,27 @@
9077
9040
  open(!isOpen.value, e);
9078
9041
  };
9079
9042
 
9080
- const headerProps = vue.computed(() => ({
9043
+ const activatorProps = vue.computed(() => ({
9081
9044
  onClick,
9082
9045
  appendIcon: isOpen.value ? props.collapseIcon : props.expandIcon,
9083
- class: 'v-list-group__header'
9046
+ class: 'v-list-group__header',
9047
+ value: `${props.value}_header`
9084
9048
  }));
9085
9049
  return () => {
9086
- var _slots$header;
9050
+ var _slots$activator, _slots$default;
9087
9051
 
9088
9052
  return vue.createVNode(props.tag, {
9089
9053
  "class": ['v-list-group', {
9090
9054
  'v-list-group--prepend': list == null ? void 0 : list.hasPrepend.value
9091
9055
  }]
9092
9056
  }, {
9093
- default: () => [(_slots$header = slots.header) == null ? void 0 : _slots$header.call(slots, headerProps.value), vue.createVNode(VListGroupItems, {
9094
- "items": props.items,
9095
- "open": isOpen.value
9096
- }, slots, 8, ["items", "open"])],
9057
+ default: () => [(_slots$activator = slots.activator) == null ? void 0 : _slots$activator.call(slots, {
9058
+ props: activatorProps.value
9059
+ }), vue.createVNode(VExpandTransition, null, {
9060
+ default: () => [vue.withDirectives(vue.createVNode("div", {
9061
+ "class": "v-list-group__items"
9062
+ }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots)], 512), [[vue.vShow, isOpen.value]])]
9063
+ })],
9097
9064
  _: 1
9098
9065
  }, 8, ["class"]);
9099
9066
  };
@@ -9270,9 +9237,13 @@
9270
9237
  }, null, 8, ["density", "icon", "image"])]
9271
9238
  }, 8, ["left"])), hasHeader && vue.createVNode(VListItemHeader, null, {
9272
9239
  default: () => [hasTitle && vue.createVNode(VListItemTitle, null, {
9273
- default: () => [slots.title ? slots.title() : props.title]
9240
+ default: () => [slots.title ? slots.title({
9241
+ title: props.title
9242
+ }) : props.title]
9274
9243
  }), hasSubtitle && vue.createVNode(VListItemSubtitle, null, {
9275
- default: () => [slots.subtitle ? slots.subtitle() : props.subtitle]
9244
+ default: () => [slots.subtitle ? slots.subtitle({
9245
+ subtitle: props.subtitle
9246
+ }) : props.subtitle]
9276
9247
  })],
9277
9248
  _: 1
9278
9249
  }), (_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots, slotProps.value), hasAppend && (slots.append ? slots.append(slotProps.value) : vue.createVNode(VListItemAvatar, {
@@ -9291,6 +9262,46 @@
9291
9262
 
9292
9263
  });
9293
9264
 
9265
+ const VListSubheader = defineComponent({
9266
+ name: 'VListSubheader',
9267
+ props: {
9268
+ color: String,
9269
+ inset: Boolean,
9270
+ sticky: Boolean,
9271
+ text: String,
9272
+ ...makeTagProps()
9273
+ },
9274
+
9275
+ setup(props, _ref) {
9276
+ let {
9277
+ slots
9278
+ } = _ref;
9279
+ const {
9280
+ textColorClasses,
9281
+ textColorStyles
9282
+ } = useTextColor(vue.toRef(props, 'color'));
9283
+ return () => {
9284
+ var _slots$default, _slots$default2;
9285
+
9286
+ const hasText = !!(slots.default || props.text);
9287
+ return vue.createVNode(props.tag, {
9288
+ "class": ['v-list-subheader', {
9289
+ 'v-list-subheader--inset': props.inset,
9290
+ 'v-list-subheader--sticky': props.sticky
9291
+ }, textColorClasses.value],
9292
+ "style": {
9293
+ textColorStyles
9294
+ }
9295
+ }, {
9296
+ default: () => [hasText && vue.createVNode("div", {
9297
+ "class": "v-list-subheader__text"
9298
+ }, [(_slots$default = (_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots)) != null ? _slots$default : props.text])]
9299
+ }, 8, ["class", "style"]);
9300
+ };
9301
+ }
9302
+
9303
+ });
9304
+
9294
9305
  const VListChildren = genericComponent()({
9295
9306
  name: 'VListChildren',
9296
9307
  props: {
@@ -9301,51 +9312,69 @@
9301
9312
  let {
9302
9313
  slots
9303
9314
  } = _ref;
9315
+ createList();
9304
9316
  return () => {
9305
9317
  var _slots$default, _slots$default2, _props$items;
9306
9318
 
9307
9319
  return (_slots$default = (_slots$default2 = slots.default) == null ? void 0 : _slots$default2.call(slots)) != null ? _slots$default : (_props$items = props.items) == null ? void 0 : _props$items.map(_ref2 => {
9308
9320
  let {
9309
9321
  children,
9310
- ...item
9322
+ props: itemProps,
9323
+ type
9311
9324
  } = _ref2;
9312
- const {
9313
- value,
9314
- ...rest
9315
- } = item;
9325
+ if (type === 'divider') return vue.createVNode(VDivider, itemProps, null, 16);
9326
+ if (type === 'subheader') return vue.createVNode(VListSubheader, itemProps, slots, 16);
9316
9327
  return children ? vue.createVNode(VListGroup, {
9317
- "value": value,
9318
- "items": children
9319
- }, { ...slots,
9320
- header: headerProps => slots.externalHeader ? slots.externalHeader({ ...rest,
9321
- ...headerProps
9322
- }) : vue.createVNode(VListItem, vue.mergeProps(rest, headerProps), null, 16),
9328
+ "value": itemProps == null ? void 0 : itemProps.value
9329
+ }, {
9330
+ default: () => vue.createVNode(VListChildren, {
9331
+ "items": children
9332
+ }, slots, 8, ["items"]),
9333
+ activator: _ref3 => {
9334
+ let {
9335
+ props: activatorProps
9336
+ } = _ref3;
9337
+ return slots.header ? slots.header({ ...itemProps,
9338
+ ...activatorProps
9339
+ }) : vue.createVNode(VListItem, vue.mergeProps(itemProps, activatorProps), null, 16);
9340
+ },
9323
9341
  _: 2
9324
- }, 8, ["value", "items"]) : slots.item ? slots.item(item) : vue.createVNode(VListItem, item, slots, 16);
9342
+ }, 8, ["value"]) : slots.item ? slots.item(itemProps) : vue.createVNode(VListItem, itemProps, slots, 16);
9325
9343
  });
9326
9344
  };
9327
9345
  }
9328
9346
 
9329
9347
  });
9330
9348
 
9331
- const ListKey = Symbol.for('vuetify:list');
9332
- const createList = () => {
9333
- const parent = vue.inject(ListKey, {
9334
- hasPrepend: vue.ref(false),
9335
- updateHasPrepend: () => null
9349
+ const parseItems = items => {
9350
+ if (!items) return undefined;
9351
+ return items.map(item => {
9352
+ if (typeof item === 'string') return {
9353
+ type: 'item',
9354
+ value: item,
9355
+ title: item
9356
+ };
9357
+ const {
9358
+ $type,
9359
+ $children,
9360
+ ...props
9361
+ } = item;
9362
+ if ($type === 'subheader') return {
9363
+ type: 'subheader',
9364
+ props
9365
+ };
9366
+ if ($type === 'divider') return {
9367
+ type: 'divider',
9368
+ props
9369
+ };
9370
+ return {
9371
+ type: 'item',
9372
+ props,
9373
+ children: parseItems($children)
9374
+ };
9336
9375
  });
9337
- const data = {
9338
- hasPrepend: vue.ref(false),
9339
- updateHasPrepend: value => {
9340
- if (value) data.hasPrepend.value = value;
9341
- }
9342
- };
9343
- vue.provide(ListKey, data);
9344
- return parent;
9345
- };
9346
- const useList = () => {
9347
- return vue.inject(ListKey, null);
9348
9376
  };
9377
+
9349
9378
  const VList = genericComponent()({
9350
9379
  name: 'VList',
9351
9380
  props: {
@@ -9356,10 +9385,6 @@
9356
9385
  default: 'one'
9357
9386
  },
9358
9387
  nav: Boolean,
9359
- subheader: {
9360
- type: [Boolean, String],
9361
- default: false
9362
- },
9363
9388
  items: Array,
9364
9389
  ...makeNestedProps({
9365
9390
  selectStrategy: 'leaf',
@@ -9384,6 +9409,7 @@
9384
9409
  let {
9385
9410
  slots
9386
9411
  } = _ref;
9412
+ const items = vue.computed(() => parseItems(props.items));
9387
9413
  const {
9388
9414
  themeClasses
9389
9415
  } = provideTheme(props);
@@ -9413,28 +9439,24 @@
9413
9439
  } = useNested(props);
9414
9440
  createList();
9415
9441
  useRender(() => {
9416
- const hasHeader = typeof props.subheader === 'string' || slots.subheader;
9417
9442
  return vue.createVNode(props.tag, {
9418
9443
  "class": ['v-list', {
9419
9444
  'v-list--disabled': props.disabled,
9420
9445
  'v-list--nav': props.nav,
9421
- 'v-list--subheader': props.subheader,
9422
- 'v-list--subheader-sticky': props.subheader === 'sticky',
9423
9446
  [`v-list--${props.lines}-line`]: true
9424
9447
  }, themeClasses.value, backgroundColorClasses.value, borderClasses.value, densityClasses.value, elevationClasses.value, roundedClasses.value],
9425
9448
  "style": [backgroundColorStyles.value, dimensionStyles.value]
9426
9449
  }, {
9427
- default: () => [hasHeader && (slots.subheader ? slots.subheader() : vue.createVNode(VListSubheader, null, {
9428
- default: () => [props.subheader]
9429
- })), vue.createVNode(VListChildren, {
9430
- "items": props.items
9450
+ default: () => [vue.createVNode(VListChildren, {
9451
+ "items": items.value
9431
9452
  }, {
9432
9453
  default: slots.default,
9433
9454
  item: slots.item,
9434
- externalHeader: slots.header,
9455
+ title: slots.title,
9456
+ subtitle: slots.subtitle,
9457
+ header: slots.header,
9435
9458
  _: 1
9436
- }, 8, ["items"])],
9437
- _: 1
9459
+ }, 8, ["items"])]
9438
9460
  }, 8, ["class", "style"]);
9439
9461
  });
9440
9462
  return {
@@ -10176,6 +10198,7 @@
10176
10198
  default: '...'
10177
10199
  },
10178
10200
  showFirstLastPage: Boolean,
10201
+ ...makeRoundedProps(),
10179
10202
  ...makeBorderProps(),
10180
10203
  ...makeDensityProps(),
10181
10204
  ...makeElevationProps(),
@@ -10310,6 +10333,7 @@
10310
10333
  icon: true,
10311
10334
  disabled: !!props.disabled || props.length < 2,
10312
10335
  elevation: props.elevation,
10336
+ rounded: props.rounded,
10313
10337
  color: isActive ? props.color : undefined,
10314
10338
  ariaCurrent: isActive,
10315
10339
  ariaLabel: t(isActive ? props.currentPageAriaLabel : props.pageAriaLabel, index + 1),
@@ -10737,7 +10761,7 @@
10737
10761
  },
10738
10762
  showTicks: {
10739
10763
  type: [Boolean, String],
10740
- default: true,
10764
+ default: false,
10741
10765
  validator: v => typeof v === 'boolean' || v === 'always'
10742
10766
  },
10743
10767
  showTickLabels: {
@@ -10821,6 +10845,7 @@
10821
10845
  const mousePressed = vue.ref(false);
10822
10846
  const startOffset = vue.ref(0);
10823
10847
  const trackContainerRef = vue.ref();
10848
+ const activeThumbRef = vue.ref();
10824
10849
 
10825
10850
  function roundValue(value) {
10826
10851
  if (step.value <= 0) return value;
@@ -10862,14 +10887,14 @@
10862
10887
  };
10863
10888
 
10864
10889
  const handleStart = e => {
10865
- const activeThumb = getActiveThumb(e);
10866
- if (!activeThumb) return;
10867
- activeThumb.focus();
10890
+ activeThumbRef.value = getActiveThumb(e);
10891
+ if (!activeThumbRef.value) return;
10892
+ activeThumbRef.value.focus();
10868
10893
  mousePressed.value = true;
10869
10894
 
10870
- if (activeThumb.contains(e.target)) {
10895
+ if (activeThumbRef.value.contains(e.target)) {
10871
10896
  thumbMoved = true;
10872
- startOffset.value = getOffset(e, activeThumb, props.direction);
10897
+ startOffset.value = getOffset(e, activeThumbRef.value, props.direction);
10873
10898
  } else {
10874
10899
  startOffset.value = 0;
10875
10900
  handleMouseMove(parseMouseMove(e));
@@ -10953,6 +10978,7 @@
10953
10978
  return !!label;
10954
10979
  }));
10955
10980
  const data = {
10981
+ activeThumbRef,
10956
10982
  color: vue.toRef(props, 'color'),
10957
10983
  decimals,
10958
10984
  disabled,
@@ -11041,7 +11067,8 @@
11041
11067
  elevation,
11042
11068
  isReversed,
11043
11069
  horizontalDirection,
11044
- mousePressed
11070
+ mousePressed,
11071
+ decimals
11045
11072
  } = slider;
11046
11073
  const {
11047
11074
  textColorClasses,
@@ -11118,7 +11145,7 @@
11118
11145
  "aria-valuenow": props.modelValue,
11119
11146
  "aria-readonly": readonly.value,
11120
11147
  "aria-orientation": direction.value,
11121
- "onKeydown": onKeydown
11148
+ "onKeydown": !readonly.value ? onKeydown : undefined
11122
11149
  }, [vue.createVNode("div", {
11123
11150
  "class": ['v-slider-thumb__surface', textColorClasses.value, elevationClasses.value],
11124
11151
  "style": { ...textColorStyles.value
@@ -11138,7 +11165,7 @@
11138
11165
  "class": ['v-slider-thumb__label']
11139
11166
  }, [vue.createVNode("div", null, [(_slots$thumbLabel = (_slots$thumbLabel2 = slots['thumb-label']) == null ? void 0 : _slots$thumbLabel2.call(slots, {
11140
11167
  modelValue: props.modelValue
11141
- })) != null ? _slots$thumbLabel : props.modelValue.toFixed(1)])])], 512), [[vue.vShow, thumbLabel.value && props.focused || thumbLabel.value === 'always']])]
11168
+ })) != null ? _slots$thumbLabel : props.modelValue.toFixed(step.value ? decimals.value : 1)])])], 512), [[vue.vShow, thumbLabel.value && props.focused || thumbLabel.value === 'always']])]
11142
11169
  })], 46, ["tabindex", "aria-label", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-readonly", "aria-orientation", "onKeydown"]);
11143
11170
  };
11144
11171
  }
@@ -11259,6 +11286,7 @@
11259
11286
  name: 'VRangeSlider',
11260
11287
  props: { ...makeVInputProps(),
11261
11288
  ...makeSliderProps(),
11289
+ strict: Boolean,
11262
11290
  modelValue: {
11263
11291
  type: Array,
11264
11292
  default: () => [0, 0]
@@ -11275,20 +11303,15 @@
11275
11303
  } = _ref;
11276
11304
  const startThumbRef = vue.ref();
11277
11305
  const stopThumbRef = vue.ref();
11278
- const focusedThumb = vue.ref();
11279
11306
  const inputRef = vue.ref();
11280
- let canSwitch = false;
11281
11307
 
11282
11308
  function getActiveThumb(e) {
11283
- var _startThumbRef$value, _stopThumbRef$value;
11284
-
11285
11309
  if (!startThumbRef.value || !stopThumbRef.value) return;
11286
- canSwitch = true;
11287
11310
  const startOffset = getOffset(e, startThumbRef.value.$el, props.direction);
11288
11311
  const stopOffset = getOffset(e, stopThumbRef.value.$el, props.direction);
11289
11312
  const a = Math.abs(startOffset);
11290
11313
  const b = Math.abs(stopOffset);
11291
- return a < b || a === b && startOffset < 0 ? (_startThumbRef$value = startThumbRef.value) == null ? void 0 : _startThumbRef$value.$el : (_stopThumbRef$value = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value.$el;
11314
+ return a < b || a === b && startOffset < 0 ? startThumbRef.value.$el : stopThumbRef.value.$el;
11292
11315
  }
11293
11316
 
11294
11317
  const {
@@ -11300,25 +11323,33 @@
11300
11323
  onSliderTouchstart,
11301
11324
  trackContainerRef,
11302
11325
  position,
11303
- hasLabels
11326
+ hasLabels,
11327
+ activeThumbRef
11304
11328
  } = useSlider({
11305
11329
  /* eslint-disable @typescript-eslint/no-use-before-define */
11306
11330
  props,
11307
11331
  handleSliderMouseUp: newValue => {
11308
- model.value = focusedThumb.value === startThumbRef.value ? [newValue, model.value[1]] : [model.value[0], newValue];
11332
+ var _startThumbRef$value;
11333
+
11334
+ model.value = activeThumbRef.value === ((_startThumbRef$value = startThumbRef.value) == null ? void 0 : _startThumbRef$value.$el) ? [newValue, model.value[1]] : [model.value[0], newValue];
11309
11335
  },
11310
11336
  handleMouseMove: newValue => {
11311
- if (focusedThumb.value === startThumbRef.value) {
11312
- model.value = [Math.min(newValue, model.value[1]), model.value[1]];
11313
- } else {
11314
- model.value = [model.value[0], Math.max(model.value[0], newValue)];
11315
- }
11337
+ var _startThumbRef$value3;
11338
+
11339
+ const [start, stop] = model.value;
11340
+
11341
+ if (!props.strict && start === stop && start !== min.value) {
11342
+ var _stopThumbRef$value, _startThumbRef$value2, _activeThumbRef$value;
11316
11343
 
11317
- if (canSwitch && model.value[0] === model.value[1]) {
11318
- focusedThumb.value = newValue > model.value[0] ? stopThumbRef.value : startThumbRef.value;
11344
+ activeThumbRef.value = newValue > start ? (_stopThumbRef$value = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value.$el : (_startThumbRef$value2 = startThumbRef.value) == null ? void 0 : _startThumbRef$value2.$el;
11345
+ (_activeThumbRef$value = activeThumbRef.value) == null ? void 0 : _activeThumbRef$value.focus();
11319
11346
  }
11320
11347
 
11321
- canSwitch = false;
11348
+ if (activeThumbRef.value === ((_startThumbRef$value3 = startThumbRef.value) == null ? void 0 : _startThumbRef$value3.$el)) {
11349
+ model.value = [Math.min(newValue, stop), stop];
11350
+ } else {
11351
+ model.value = [start, Math.max(start, newValue)];
11352
+ }
11322
11353
  },
11323
11354
  getActiveThumb
11324
11355
  /* eslint-enable @typescript-eslint/no-use-before-define */
@@ -11349,6 +11380,8 @@
11349
11380
  "focused": isFocused.value
11350
11381
  }), { ...slots,
11351
11382
  default: _ref2 => {
11383
+ var _startThumbRef$value4, _stopThumbRef$value4;
11384
+
11352
11385
  let {
11353
11386
  id
11354
11387
  } = _ref2;
@@ -11379,23 +11412,28 @@
11379
11412
  _: 1
11380
11413
  }, 8, ["start", "stop"]), vue.createVNode(VSliderThumb, {
11381
11414
  "ref": startThumbRef,
11382
- "focused": isFocused && focusedThumb.value === startThumbRef.value,
11415
+ "focused": isFocused && activeThumbRef.value === ((_startThumbRef$value4 = startThumbRef.value) == null ? void 0 : _startThumbRef$value4.$el),
11383
11416
  "modelValue": model.value[0],
11384
11417
  "onUpdate:modelValue": v => model.value = [v, model.value[1]],
11385
11418
  "onFocus": e => {
11386
- var _stopThumbRef$value2, _stopThumbRef$value3;
11419
+ var _startThumbRef$value5, _stopThumbRef$value2;
11387
11420
 
11388
11421
  focus();
11389
- focusedThumb.value = startThumbRef.value; // Make sure second thumb is focused if
11422
+ activeThumbRef.value = (_startThumbRef$value5 = startThumbRef.value) == null ? void 0 : _startThumbRef$value5.$el; // Make sure second thumb is focused if
11390
11423
  // the thumbs are on top of each other
11391
11424
  // and they are both at minimum value
11392
11425
  // but only if focused from outside.
11393
11426
 
11394
- if (model.value[0] === model.value[1] && model.value[1] === min.value && e.relatedTarget !== ((_stopThumbRef$value2 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value2.$el)) (_stopThumbRef$value3 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value3.$el.focus();
11427
+ if (model.value[0] === model.value[1] && model.value[1] === min.value && e.relatedTarget !== ((_stopThumbRef$value2 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value2.$el)) {
11428
+ var _startThumbRef$value6, _stopThumbRef$value3;
11429
+
11430
+ (_startThumbRef$value6 = startThumbRef.value) == null ? void 0 : _startThumbRef$value6.$el.blur();
11431
+ (_stopThumbRef$value3 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value3.$el.focus();
11432
+ }
11395
11433
  },
11396
11434
  "onBlur": () => {
11397
11435
  blur();
11398
- focusedThumb.value = null;
11436
+ activeThumbRef.value = undefined;
11399
11437
  },
11400
11438
  "min": min.value,
11401
11439
  "max": model.value[1],
@@ -11405,27 +11443,28 @@
11405
11443
  _: 1
11406
11444
  }, 8, ["focused", "modelValue", "onUpdate:modelValue", "onFocus", "onBlur", "min", "max", "position"]), vue.createVNode(VSliderThumb, {
11407
11445
  "ref": stopThumbRef,
11408
- "focused": isFocused && focusedThumb.value === stopThumbRef.value,
11446
+ "focused": isFocused && activeThumbRef.value === ((_stopThumbRef$value4 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value4.$el),
11409
11447
  "modelValue": model.value[1],
11410
11448
  "onUpdate:modelValue": v => model.value = [model.value[0], v],
11411
11449
  "onFocus": e => {
11412
- var _startThumbRef$value2;
11450
+ var _stopThumbRef$value5, _startThumbRef$value7;
11413
11451
 
11414
11452
  focus();
11415
- focusedThumb.value = stopThumbRef.value; // Make sure first thumb is focused if
11453
+ activeThumbRef.value = (_stopThumbRef$value5 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value5.$el; // Make sure first thumb is focused if
11416
11454
  // the thumbs are on top of each other
11417
11455
  // and they are both at maximum value
11418
11456
  // but only if focused from outside.
11419
11457
 
11420
- if (model.value[0] === model.value[1] && model.value[0] === max.value && e.relatedTarget !== ((_startThumbRef$value2 = startThumbRef.value) == null ? void 0 : _startThumbRef$value2.$el)) {
11421
- var _startThumbRef$value3;
11458
+ if (model.value[0] === model.value[1] && model.value[0] === max.value && e.relatedTarget !== ((_startThumbRef$value7 = startThumbRef.value) == null ? void 0 : _startThumbRef$value7.$el)) {
11459
+ var _stopThumbRef$value6, _startThumbRef$value8;
11422
11460
 
11423
- (_startThumbRef$value3 = startThumbRef.value) == null ? void 0 : _startThumbRef$value3.$el.focus();
11461
+ (_stopThumbRef$value6 = stopThumbRef.value) == null ? void 0 : _stopThumbRef$value6.$el.blur();
11462
+ (_startThumbRef$value8 = startThumbRef.value) == null ? void 0 : _startThumbRef$value8.$el.focus();
11424
11463
  }
11425
11464
  },
11426
11465
  "onBlur": () => {
11427
11466
  blur();
11428
- focusedThumb.value = null;
11467
+ activeThumbRef.value = undefined;
11429
11468
  },
11430
11469
  "min": model.value[0],
11431
11470
  "max": max.value,
@@ -11756,7 +11795,8 @@
11756
11795
  onSliderTouchstart,
11757
11796
  trackContainerRef,
11758
11797
  position,
11759
- hasLabels
11798
+ hasLabels,
11799
+ readonly
11760
11800
  } = useSlider({
11761
11801
  props,
11762
11802
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -11797,8 +11837,8 @@
11797
11837
  } = _ref2;
11798
11838
  return vue.createVNode("div", {
11799
11839
  "class": "v-slider__container",
11800
- "onMousedown": onSliderMousedown,
11801
- "onTouchstartPassive": onSliderTouchstart
11840
+ "onMousedown": !readonly.value ? onSliderMousedown : undefined,
11841
+ "onTouchstartPassive": !readonly.value ? onSliderTouchstart : undefined
11802
11842
  }, [vue.createVNode("input", {
11803
11843
  "id": id.value,
11804
11844
  "name": props.name || id.value,
@@ -12800,111 +12840,535 @@
12800
12840
 
12801
12841
  });
12802
12842
 
12803
- var components = /*#__PURE__*/Object.freeze({
12804
- __proto__: null,
12805
- VApp: VApp,
12806
- VAppBar: VAppBar,
12807
- VAppBarNavIcon: VAppBarNavIcon,
12808
- VAppBarTitle: VAppBarTitle,
12809
- VAlert: VAlert,
12810
- VAvatar: VAvatar,
12811
- VBadge: VBadge,
12812
- VBanner: VBanner,
12813
- VBannerActions: VBannerActions,
12814
- VBannerAvatar: VBannerAvatar,
12815
- VBannerContent: VBannerContent,
12816
- VBannerText: VBannerText,
12817
- VBottomNavigation: VBottomNavigation,
12818
- VBreadcrumbs: VBreadcrumbs,
12819
- VBreadcrumbsItem: VBreadcrumbsItem,
12820
- VBreadcrumbsDivider: VBreadcrumbsDivider,
12821
- VBtn: VBtn,
12822
- VBtnGroup: VBtnGroup,
12823
- VBtnToggle: VBtnToggle,
12824
- VCard: VCard,
12825
- VCardActions: VCardActions,
12826
- VCardAvatar: VCardAvatar,
12827
- VCardHeader: VCardHeader,
12828
- VCardHeaderText: VCardHeaderText,
12829
- VCardImg: VCardImg,
12830
- VCardSubtitle: VCardSubtitle,
12831
- VCardText: VCardText,
12832
- VCardTitle: VCardTitle,
12833
- VCheckbox: VCheckbox,
12834
- VChip: VChip,
12835
- VCode: VCode,
12836
- VCounter: VCounter,
12837
- VDefaultsProvider: VDefaultsProvider,
12838
- VDialog: VDialog,
12839
- VDivider: VDivider,
12840
- VExpansionPanels: VExpansionPanels,
12841
- VExpansionPanel: VExpansionPanel,
12842
- VExpansionPanelText: VExpansionPanelText,
12843
- VExpansionPanelTitle: VExpansionPanelTitle,
12844
- VField: VField,
12845
- VFieldLabel: VFieldLabel,
12846
- VFileInput: VFileInput,
12847
- VFooter: VFooter,
12848
- VForm: VForm,
12849
- VContainer: VContainer,
12850
- VCol: VCol,
12851
- VRow: VRow,
12852
- VSpacer: VSpacer,
12853
- VHover: VHover,
12854
- VIcon: VIcon,
12855
- VComponentIcon: VComponentIcon,
12856
- VSvgIcon: VSvgIcon,
12857
- VLigatureIcon: VLigatureIcon,
12858
- VClassIcon: VClassIcon,
12859
- VImg: VImg,
12860
- VInput: VInput,
12861
- VItemGroup: VItemGroup,
12862
- VItem: VItem,
12863
- VKbd: VKbd,
12864
- VLabel: VLabel,
12865
- VLayout: VLayout,
12866
- VLayoutItem: VLayoutItem,
12867
- VLazy: VLazy,
12868
- VList: VList,
12869
- VListSubheader: VListSubheader,
12870
- VListImg: VListImg,
12871
- VListItem: VListItem,
12872
- VListItemAvatar: VListItemAvatar,
12873
- VListItemHeader: VListItemHeader,
12874
- VListItemMedia: VListItemMedia,
12875
- VListItemSubtitle: VListItemSubtitle,
12876
- VListItemTitle: VListItemTitle,
12877
- VListGroup: VListGroup,
12878
- VLocaleProvider: VLocaleProvider,
12879
- VMain: VMain,
12880
- VMenu: VMenu,
12881
- VMessages: VMessages,
12882
- VNavigationDrawer: VNavigationDrawer,
12883
- VNoSsr: VNoSsr,
12884
- VOverlay: VOverlay,
12885
- VPagination: VPagination,
12886
- VParallax: VParallax,
12887
- VProgressCircular: VProgressCircular,
12888
- VProgressLinear: VProgressLinear,
12889
- VRadio: VRadio,
12890
- VRadioGroup: VRadioGroup,
12891
- VRangeSlider: VRangeSlider,
12892
- VRating: VRating,
12893
- VResponsive: VResponsive,
12894
- VSelectionControl: VSelectionControl,
12895
- VSelectionControlGroup: VSelectionControlGroup,
12896
- VSheet: VSheet,
12897
- VSlider: VSlider,
12898
- VSwitch: VSwitch,
12899
- VSystemBar: VSystemBar,
12900
- VTable: VTable,
12901
- VTextarea: VTextarea,
12902
- VTextField: VTextField,
12903
- VThemeProvider: VThemeProvider,
12843
+ // Types
12844
+
12845
+ const handleGesture = wrapper => {
12846
+ const {
12847
+ touchstartX,
12848
+ touchendX,
12849
+ touchstartY,
12850
+ touchendY
12851
+ } = wrapper;
12852
+ const dirRatio = 0.5;
12853
+ const minDistance = 16;
12854
+ wrapper.offsetX = touchendX - touchstartX;
12855
+ wrapper.offsetY = touchendY - touchstartY;
12856
+
12857
+ if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {
12858
+ wrapper.left && touchendX < touchstartX - minDistance && wrapper.left(wrapper);
12859
+ wrapper.right && touchendX > touchstartX + minDistance && wrapper.right(wrapper);
12860
+ }
12861
+
12862
+ if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {
12863
+ wrapper.up && touchendY < touchstartY - minDistance && wrapper.up(wrapper);
12864
+ wrapper.down && touchendY > touchstartY + minDistance && wrapper.down(wrapper);
12865
+ }
12866
+ };
12867
+
12868
+ function touchstart(event, wrapper) {
12869
+ var _wrapper$start;
12870
+
12871
+ const touch = event.changedTouches[0];
12872
+ wrapper.touchstartX = touch.clientX;
12873
+ wrapper.touchstartY = touch.clientY;
12874
+ (_wrapper$start = wrapper.start) == null ? void 0 : _wrapper$start.call(wrapper, {
12875
+ originalEvent: event,
12876
+ ...wrapper
12877
+ });
12878
+ }
12879
+
12880
+ function touchend(event, wrapper) {
12881
+ var _wrapper$end;
12882
+
12883
+ const touch = event.changedTouches[0];
12884
+ wrapper.touchendX = touch.clientX;
12885
+ wrapper.touchendY = touch.clientY;
12886
+ (_wrapper$end = wrapper.end) == null ? void 0 : _wrapper$end.call(wrapper, {
12887
+ originalEvent: event,
12888
+ ...wrapper
12889
+ });
12890
+ handleGesture(wrapper);
12891
+ }
12892
+
12893
+ function touchmove(event, wrapper) {
12894
+ var _wrapper$move;
12895
+
12896
+ const touch = event.changedTouches[0];
12897
+ wrapper.touchmoveX = touch.clientX;
12898
+ wrapper.touchmoveY = touch.clientY;
12899
+ (_wrapper$move = wrapper.move) == null ? void 0 : _wrapper$move.call(wrapper, {
12900
+ originalEvent: event,
12901
+ ...wrapper
12902
+ });
12903
+ }
12904
+
12905
+ function createHandlers() {
12906
+ let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
12907
+ const wrapper = {
12908
+ touchstartX: 0,
12909
+ touchstartY: 0,
12910
+ touchendX: 0,
12911
+ touchendY: 0,
12912
+ touchmoveX: 0,
12913
+ touchmoveY: 0,
12914
+ offsetX: 0,
12915
+ offsetY: 0,
12916
+ left: value.left,
12917
+ right: value.right,
12918
+ up: value.up,
12919
+ down: value.down,
12920
+ start: value.start,
12921
+ move: value.move,
12922
+ end: value.end
12923
+ };
12924
+ return {
12925
+ touchstart: e => touchstart(e, wrapper),
12926
+ touchend: e => touchend(e, wrapper),
12927
+ touchmove: e => touchmove(e, wrapper)
12928
+ };
12929
+ }
12930
+
12931
+ function mounted$3(el, binding) {
12932
+ var _value$options, _binding$instance, _target$_touchHandler;
12933
+
12934
+ const value = binding.value;
12935
+ const target = value != null && value.parent ? el.parentElement : el;
12936
+ const options = (_value$options = value == null ? void 0 : value.options) != null ? _value$options : {
12937
+ passive: true
12938
+ };
12939
+ const uid = (_binding$instance = binding.instance) == null ? void 0 : _binding$instance.$.uid; // TODO: use custom uid generator
12940
+
12941
+ if (!target || !uid) return;
12942
+ const handlers = createHandlers(binding.value);
12943
+ target._touchHandlers = (_target$_touchHandler = target._touchHandlers) != null ? _target$_touchHandler : Object.create(null);
12944
+ target._touchHandlers[uid] = handlers;
12945
+ keys(handlers).forEach(eventName => {
12946
+ target.addEventListener(eventName, handlers[eventName], options);
12947
+ });
12948
+ }
12949
+
12950
+ function unmounted$3(el, binding) {
12951
+ var _binding$value, _binding$instance2;
12952
+
12953
+ const target = (_binding$value = binding.value) != null && _binding$value.parent ? el.parentElement : el;
12954
+ const uid = (_binding$instance2 = binding.instance) == null ? void 0 : _binding$instance2.$.uid;
12955
+ if (!(target != null && target._touchHandlers) || !uid) return;
12956
+ const handlers = target._touchHandlers[uid];
12957
+ keys(handlers).forEach(eventName => {
12958
+ target.removeEventListener(eventName, handlers[eventName]);
12959
+ });
12960
+ delete target._touchHandlers[uid];
12961
+ }
12962
+
12963
+ const Touch = {
12964
+ mounted: mounted$3,
12965
+ unmounted: unmounted$3
12966
+ };
12967
+
12968
+ const VWindowSymbol = Symbol.for('vuetify:v-window');
12969
+ const VWindowGroupSymbol = Symbol.for('vuetify:v-window-group');
12970
+ const VWindow = vue.defineComponent({
12971
+ name: 'VWindow',
12972
+ directives: {
12973
+ Touch
12974
+ },
12975
+ props: {
12976
+ continuous: Boolean,
12977
+ nextIcon: {
12978
+ type: [Boolean, String],
12979
+ default: '$next'
12980
+ },
12981
+ prevIcon: {
12982
+ type: [Boolean, String],
12983
+ default: '$prev'
12984
+ },
12985
+ reverse: Boolean,
12986
+ showArrows: {
12987
+ type: [Boolean, String],
12988
+ validator: v => typeof v === 'boolean' || v === 'hover'
12989
+ },
12990
+ touch: {
12991
+ type: [Object, Boolean],
12992
+ default: undefined
12993
+ },
12994
+ direction: {
12995
+ type: String,
12996
+ default: 'horizontal'
12997
+ },
12998
+ modelValue: null,
12999
+ disabled: Boolean,
13000
+ selectedClass: {
13001
+ type: String,
13002
+ default: 'v-window-item--active'
13003
+ },
13004
+ // TODO: mandatory should probably not be exposed but do this for now
13005
+ mandatory: {
13006
+ default: 'force'
13007
+ },
13008
+ ...makeTagProps(),
13009
+ ...makeThemeProps()
13010
+ },
13011
+ emits: {
13012
+ 'update:modelValue': v => true
13013
+ },
13014
+
13015
+ setup(props, _ref) {
13016
+ let {
13017
+ slots
13018
+ } = _ref;
13019
+ const {
13020
+ themeClasses
13021
+ } = provideTheme(props);
13022
+ const {
13023
+ isRtl
13024
+ } = useRtl();
13025
+ const {
13026
+ t
13027
+ } = useLocale();
13028
+ const group = useGroup(props, VWindowGroupSymbol);
13029
+ const rootRef = vue.ref();
13030
+ const isRtlReverse = vue.computed(() => isRtl.value ? !props.reverse : props.reverse);
13031
+ const isReversed = vue.ref(false);
13032
+ const transition = vue.computed(() => {
13033
+ const axis = props.direction === 'vertical' ? 'y' : 'x';
13034
+ const reverse = isRtlReverse.value ? !isReversed.value : isReversed.value;
13035
+ const direction = reverse ? '-reverse' : '';
13036
+ return `v-window-${axis}${direction}-transition`;
13037
+ });
13038
+ const transitionCount = vue.ref(0);
13039
+ const transitionHeight = vue.ref(undefined);
13040
+ const activeIndex = vue.computed(() => {
13041
+ return group.items.value.findIndex(item => group.selected.value.includes(item.id));
13042
+ });
13043
+ vue.watch(activeIndex, (newVal, oldVal) => {
13044
+ const itemsLength = group.items.value.length;
13045
+ const lastIndex = itemsLength - 1;
13046
+
13047
+ if (itemsLength <= 2) {
13048
+ isReversed.value = newVal < oldVal;
13049
+ } else if (newVal === lastIndex && oldVal === 0) {
13050
+ isReversed.value = true;
13051
+ } else if (newVal === 0 && oldVal === lastIndex) {
13052
+ isReversed.value = false;
13053
+ } else {
13054
+ isReversed.value = newVal < oldVal;
13055
+ }
13056
+ });
13057
+ vue.provide(VWindowSymbol, {
13058
+ transition,
13059
+ isReversed,
13060
+ transitionCount,
13061
+ transitionHeight,
13062
+ rootRef
13063
+ });
13064
+ const canMoveBack = vue.computed(() => props.continuous || activeIndex.value !== 0);
13065
+ const canMoveForward = vue.computed(() => props.continuous || activeIndex.value !== group.items.value.length - 1);
13066
+
13067
+ function prev() {
13068
+ canMoveBack.value && group.prev();
13069
+ }
13070
+
13071
+ function next() {
13072
+ canMoveForward.value && group.next();
13073
+ }
13074
+
13075
+ provideDefaults({
13076
+ VBtn: {
13077
+ variant: 'text'
13078
+ }
13079
+ }, {
13080
+ scoped: true
13081
+ });
13082
+ const arrows = vue.computed(() => {
13083
+ const arrows = [];
13084
+ const prevProps = {
13085
+ icon: isRtl.value ? props.nextIcon : props.prevIcon,
13086
+ class: `v-window__${isRtlReverse.value ? 'right' : 'left'}`,
13087
+ onClick: group.prev,
13088
+ ariaLabel: t('$vuetify.carousel.prev')
13089
+ };
13090
+ arrows.push(canMoveBack.value ? slots.prev ? slots.prev({
13091
+ props: prevProps
13092
+ }) : vue.createVNode(VBtn, prevProps, null, 16) : vue.createVNode("div", null, null));
13093
+ const nextProps = {
13094
+ icon: isRtl.value ? props.prevIcon : props.nextIcon,
13095
+ class: `v-window__${isRtlReverse.value ? 'left' : 'right'}`,
13096
+ onClick: group.next,
13097
+ ariaLabel: t('$vuetify.carousel.next')
13098
+ };
13099
+ arrows.push(canMoveForward.value ? slots.next ? slots.next({
13100
+ props: nextProps
13101
+ }) : vue.createVNode(VBtn, nextProps, null, 16) : vue.createVNode("div", null, null));
13102
+ return arrows;
13103
+ });
13104
+ const touchOptions = vue.computed(() => {
13105
+ if (props.touch === false) return props.touch;
13106
+ const options = {
13107
+ left: () => {
13108
+ isRtlReverse.value ? prev() : next();
13109
+ },
13110
+ right: () => {
13111
+ isRtlReverse.value ? next() : prev();
13112
+ },
13113
+ end: _ref2 => {
13114
+ let {
13115
+ originalEvent
13116
+ } = _ref2;
13117
+ originalEvent.stopPropagation();
13118
+ },
13119
+ start: _ref3 => {
13120
+ let {
13121
+ originalEvent
13122
+ } = _ref3;
13123
+ originalEvent.stopPropagation();
13124
+ }
13125
+ };
13126
+ return { ...options,
13127
+ ...(props.touch === true ? {} : props.touch)
13128
+ };
13129
+ });
13130
+ return () => {
13131
+ var _slots$default;
13132
+
13133
+ return vue.withDirectives(vue.createVNode(props.tag, {
13134
+ "ref": rootRef,
13135
+ "class": ['v-window', {
13136
+ 'v-window--show-arrows-on-hover': props.showArrows === 'hover'
13137
+ }, themeClasses.value]
13138
+ }, {
13139
+ default: () => [vue.createVNode("div", {
13140
+ "class": "v-window__container",
13141
+ "style": {
13142
+ height: transitionHeight.value
13143
+ }
13144
+ }, [(_slots$default = slots.default) == null ? void 0 : _slots$default.call(slots), props.showArrows !== false && vue.createVNode("div", {
13145
+ "class": "v-window__controls"
13146
+ }, [arrows.value])], 4)]
13147
+ }, 8, ["class"]), [[vue.resolveDirective("touch"), touchOptions.value]]);
13148
+ };
13149
+ }
13150
+
13151
+ });
13152
+
13153
+ const VWindowItem = defineComponent({
13154
+ name: 'VWindowItem',
13155
+ directives: {
13156
+ Touch
13157
+ },
13158
+ props: {
13159
+ reverseTransition: {
13160
+ type: [Boolean, String],
13161
+ default: undefined
13162
+ },
13163
+ transition: {
13164
+ type: [Boolean, String],
13165
+ default: undefined
13166
+ },
13167
+ ...makeLazyProps(),
13168
+ ...makeGroupItemProps()
13169
+ },
13170
+
13171
+ setup(props, _ref) {
13172
+ let {
13173
+ slots
13174
+ } = _ref;
13175
+ const window = vue.inject(VWindowSymbol);
13176
+ const groupItem = useGroupItem(props, VWindowGroupSymbol);
13177
+ if (!window || !groupItem) throw new Error('[Vuetify] VWindowItem must be used inside VWindow');
13178
+ const isTransitioning = vue.ref(false);
13179
+ const hasTransition = vue.computed(() => window.isReversed.value ? props.reverseTransition !== false : props.transition !== false);
13180
+
13181
+ function onAfterTransition() {
13182
+ if (!isTransitioning.value || !window) {
13183
+ return;
13184
+ } // Finalize transition state.
13185
+
13186
+
13187
+ isTransitioning.value = false;
13188
+
13189
+ if (window.transitionCount.value > 0) {
13190
+ window.transitionCount.value -= 1; // Remove container height if we are out of transition.
13191
+
13192
+ if (window.transitionCount.value === 0) {
13193
+ window.transitionHeight.value = undefined;
13194
+ }
13195
+ }
13196
+ }
13197
+
13198
+ function onBeforeTransition() {
13199
+ if (isTransitioning.value || !window) {
13200
+ return;
13201
+ } // Initialize transition state here.
13202
+
13203
+
13204
+ isTransitioning.value = true;
13205
+
13206
+ if (window.transitionCount.value === 0) {
13207
+ var _window$rootRef$value;
13208
+
13209
+ // Set initial height for height transition.
13210
+ window.transitionHeight.value = convertToUnit((_window$rootRef$value = window.rootRef.value) == null ? void 0 : _window$rootRef$value.clientHeight);
13211
+ }
13212
+
13213
+ window.transitionCount.value += 1;
13214
+ }
13215
+
13216
+ function onTransitionCancelled() {
13217
+ onAfterTransition(); // This should have the same path as normal transition end.
13218
+ }
13219
+
13220
+ function onEnterTransition(el) {
13221
+ if (!isTransitioning.value) {
13222
+ return;
13223
+ }
13224
+
13225
+ vue.nextTick(() => {
13226
+ // Do not set height if no transition or cancelled.
13227
+ if (!hasTransition.value || !isTransitioning.value || !window) {
13228
+ return;
13229
+ } // Set transition target height.
13230
+
13231
+
13232
+ window.transitionHeight.value = convertToUnit(el.clientHeight);
13233
+ });
13234
+ }
13235
+
13236
+ const transition = vue.computed(() => {
13237
+ const name = window.isReversed.value ? props.reverseTransition : props.transition;
13238
+ return !hasTransition.value ? false : {
13239
+ name: typeof name !== 'string' ? window.transition.value : name,
13240
+ onBeforeEnter: onBeforeTransition,
13241
+ onAfterEnter: onAfterTransition,
13242
+ onEnterCancelled: onTransitionCancelled,
13243
+ onBeforeLeave: onBeforeTransition,
13244
+ onAfterLeave: onAfterTransition,
13245
+ onLeaveCancelled: onTransitionCancelled,
13246
+ onEnter: onEnterTransition
13247
+ };
13248
+ });
13249
+ const {
13250
+ hasContent
13251
+ } = useLazy(props, groupItem.isSelected);
13252
+ return () => {
13253
+ return vue.createVNode(MaybeTransition, {
13254
+ "transition": transition.value
13255
+ }, {
13256
+ default: () => [vue.withDirectives(vue.createVNode("div", {
13257
+ "class": ['v-window-item', groupItem.selectedClass.value]
13258
+ }, [slots.default && hasContent.value && slots.default()], 2), [[vue.vShow, groupItem.isSelected.value]])]
13259
+ }, 8, ["transition"]);
13260
+ };
13261
+ }
13262
+
13263
+ });
13264
+
13265
+ var components = /*#__PURE__*/Object.freeze({
13266
+ __proto__: null,
13267
+ VApp: VApp,
13268
+ VAppBar: VAppBar,
13269
+ VAppBarNavIcon: VAppBarNavIcon,
13270
+ VAppBarTitle: VAppBarTitle,
13271
+ VAlert: VAlert,
13272
+ VAvatar: VAvatar,
13273
+ VBadge: VBadge,
13274
+ VBanner: VBanner,
13275
+ VBannerActions: VBannerActions,
13276
+ VBannerAvatar: VBannerAvatar,
13277
+ VBannerContent: VBannerContent,
13278
+ VBannerText: VBannerText,
13279
+ VBottomNavigation: VBottomNavigation,
13280
+ VBreadcrumbs: VBreadcrumbs,
13281
+ VBreadcrumbsItem: VBreadcrumbsItem,
13282
+ VBreadcrumbsDivider: VBreadcrumbsDivider,
13283
+ VBtn: VBtn,
13284
+ VBtnGroup: VBtnGroup,
13285
+ VBtnToggle: VBtnToggle,
13286
+ VCard: VCard,
13287
+ VCardActions: VCardActions,
13288
+ VCardAvatar: VCardAvatar,
13289
+ VCardHeader: VCardHeader,
13290
+ VCardHeaderText: VCardHeaderText,
13291
+ VCardImg: VCardImg,
13292
+ VCardSubtitle: VCardSubtitle,
13293
+ VCardText: VCardText,
13294
+ VCardTitle: VCardTitle,
13295
+ VCheckbox: VCheckbox,
13296
+ VChip: VChip,
13297
+ VCode: VCode,
13298
+ VCounter: VCounter,
13299
+ VDefaultsProvider: VDefaultsProvider,
13300
+ VDialog: VDialog,
13301
+ VDivider: VDivider,
13302
+ VExpansionPanels: VExpansionPanels,
13303
+ VExpansionPanel: VExpansionPanel,
13304
+ VExpansionPanelText: VExpansionPanelText,
13305
+ VExpansionPanelTitle: VExpansionPanelTitle,
13306
+ VField: VField,
13307
+ VFieldLabel: VFieldLabel,
13308
+ VFileInput: VFileInput,
13309
+ VFooter: VFooter,
13310
+ VForm: VForm,
13311
+ VContainer: VContainer,
13312
+ VCol: VCol,
13313
+ VRow: VRow,
13314
+ VSpacer: VSpacer,
13315
+ VHover: VHover,
13316
+ VIcon: VIcon,
13317
+ VComponentIcon: VComponentIcon,
13318
+ VSvgIcon: VSvgIcon,
13319
+ VLigatureIcon: VLigatureIcon,
13320
+ VClassIcon: VClassIcon,
13321
+ VImg: VImg,
13322
+ VInput: VInput,
13323
+ VItemGroup: VItemGroup,
13324
+ VItem: VItem,
13325
+ VKbd: VKbd,
13326
+ VLabel: VLabel,
13327
+ VLayout: VLayout,
13328
+ VLayoutItem: VLayoutItem,
13329
+ VLazy: VLazy,
13330
+ VList: VList,
13331
+ VListSubheader: VListSubheader,
13332
+ VListImg: VListImg,
13333
+ VListItem: VListItem,
13334
+ VListItemAvatar: VListItemAvatar,
13335
+ VListItemHeader: VListItemHeader,
13336
+ VListItemMedia: VListItemMedia,
13337
+ VListItemSubtitle: VListItemSubtitle,
13338
+ VListItemTitle: VListItemTitle,
13339
+ VListGroup: VListGroup,
13340
+ VLocaleProvider: VLocaleProvider,
13341
+ VMain: VMain,
13342
+ VMenu: VMenu,
13343
+ VMessages: VMessages,
13344
+ VNavigationDrawer: VNavigationDrawer,
13345
+ VNoSsr: VNoSsr,
13346
+ VOverlay: VOverlay,
13347
+ VPagination: VPagination,
13348
+ VParallax: VParallax,
13349
+ VProgressCircular: VProgressCircular,
13350
+ VProgressLinear: VProgressLinear,
13351
+ VRadio: VRadio,
13352
+ VRadioGroup: VRadioGroup,
13353
+ VRangeSlider: VRangeSlider,
13354
+ VRating: VRating,
13355
+ VResponsive: VResponsive,
13356
+ VSelectionControl: VSelectionControl,
13357
+ VSelectionControlGroup: VSelectionControlGroup,
13358
+ VSheet: VSheet,
13359
+ VSlider: VSlider,
13360
+ VSwitch: VSwitch,
13361
+ VSystemBar: VSystemBar,
13362
+ VTable: VTable,
13363
+ VTextarea: VTextarea,
13364
+ VTextField: VTextField,
13365
+ VThemeProvider: VThemeProvider,
12904
13366
  VTimeline: VTimeline,
12905
13367
  VTimelineItem: VTimelineItem,
12906
13368
  VTooltip: VTooltip,
12907
13369
  VValidation: VValidation,
13370
+ VWindow: VWindow,
13371
+ VWindowItem: VWindowItem,
12908
13372
  VDialogTransition: VDialogTransition,
12909
13373
  VCarouselTransition: VCarouselTransition,
12910
13374
  VCarouselReverseTransition: VCarouselReverseTransition,
@@ -12929,7 +13393,7 @@
12929
13393
  });
12930
13394
 
12931
13395
  // Types
12932
- function mounted$3(el, binding) {
13396
+ function mounted$2(el, binding) {
12933
13397
  var _modifierKeys$attr, _modifierKeys$char, _modifierKeys$child, _modifierKeys$sub;
12934
13398
 
12935
13399
  const modifiers = binding.modifiers || {};
@@ -12956,7 +13420,7 @@
12956
13420
  let mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
12957
13421
  let observer = arguments.length > 1 ? arguments[1] : undefined;
12958
13422
  handler == null ? void 0 : handler(mutations, observer);
12959
- if (once) unmounted$3(el, binding);
13423
+ if (once) unmounted$2(el, binding);
12960
13424
  });
12961
13425
  if (immediate) handler == null ? void 0 : handler([], observer);
12962
13426
  el._mutate = Object(el._mutate);
@@ -12966,7 +13430,7 @@
12966
13430
  observer.observe(el, options);
12967
13431
  }
12968
13432
 
12969
- function unmounted$3(el, binding) {
13433
+ function unmounted$2(el, binding) {
12970
13434
  var _el$_mutate;
12971
13435
 
12972
13436
  if (!((_el$_mutate = el._mutate) != null && _el$_mutate[binding.instance.$.uid])) return;
@@ -12977,11 +13441,11 @@
12977
13441
  }
12978
13442
 
12979
13443
  const Mutate = {
12980
- mounted: mounted$3,
12981
- unmounted: unmounted$3
13444
+ mounted: mounted$2,
13445
+ unmounted: unmounted$2
12982
13446
  };
12983
13447
 
12984
- function mounted$2(el, binding) {
13448
+ function mounted$1(el, binding) {
12985
13449
  var _binding$modifiers, _binding$modifiers2;
12986
13450
 
12987
13451
  const handler = binding.value;
@@ -13000,7 +13464,7 @@
13000
13464
  }
13001
13465
  }
13002
13466
 
13003
- function unmounted$2(el, binding) {
13467
+ function unmounted$1(el, binding) {
13004
13468
  var _el$_onResize;
13005
13469
 
13006
13470
  if (!((_el$_onResize = el._onResize) != null && _el$_onResize[binding.instance.$.uid])) return;
@@ -13013,11 +13477,11 @@
13013
13477
  }
13014
13478
 
13015
13479
  const Resize = {
13016
- mounted: mounted$2,
13017
- unmounted: unmounted$2
13480
+ mounted: mounted$1,
13481
+ unmounted: unmounted$1
13018
13482
  };
13019
13483
 
13020
- function mounted$1(el, binding) {
13484
+ function mounted(el, binding) {
13021
13485
  var _binding$modifiers;
13022
13486
 
13023
13487
  const {
@@ -13040,7 +13504,7 @@
13040
13504
  };
13041
13505
  }
13042
13506
 
13043
- function unmounted$1(el, binding) {
13507
+ function unmounted(el, binding) {
13044
13508
  var _el$_onScroll;
13045
13509
 
13046
13510
  if (!((_el$_onScroll = el._onScroll) != null && _el$_onScroll[binding.instance.$.uid])) return;
@@ -13055,136 +13519,14 @@
13055
13519
 
13056
13520
  function updated(el, binding) {
13057
13521
  if (binding.value === binding.oldValue) return;
13058
- unmounted$1(el, binding);
13059
- mounted$1(el, binding);
13522
+ unmounted(el, binding);
13523
+ mounted(el, binding);
13060
13524
  }
13061
13525
 
13062
13526
  const Scroll = {
13063
- mounted: mounted$1,
13064
- unmounted: unmounted$1,
13065
- updated
13066
- };
13067
-
13068
- // Types
13069
-
13070
- const handleGesture = wrapper => {
13071
- const {
13072
- touchstartX,
13073
- touchendX,
13074
- touchstartY,
13075
- touchendY
13076
- } = wrapper;
13077
- const dirRatio = 0.5;
13078
- const minDistance = 16;
13079
- wrapper.offsetX = touchendX - touchstartX;
13080
- wrapper.offsetY = touchendY - touchstartY;
13081
-
13082
- if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {
13083
- wrapper.left && touchendX < touchstartX - minDistance && wrapper.left(wrapper);
13084
- wrapper.right && touchendX > touchstartX + minDistance && wrapper.right(wrapper);
13085
- }
13086
-
13087
- if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {
13088
- wrapper.up && touchendY < touchstartY - minDistance && wrapper.up(wrapper);
13089
- wrapper.down && touchendY > touchstartY + minDistance && wrapper.down(wrapper);
13090
- }
13091
- };
13092
-
13093
- function touchstart(event, wrapper) {
13094
- var _wrapper$start;
13095
-
13096
- const touch = event.changedTouches[0];
13097
- wrapper.touchstartX = touch.clientX;
13098
- wrapper.touchstartY = touch.clientY;
13099
- (_wrapper$start = wrapper.start) == null ? void 0 : _wrapper$start.call(wrapper, { ...event,
13100
- ...wrapper
13101
- });
13102
- }
13103
-
13104
- function touchend(event, wrapper) {
13105
- var _wrapper$end;
13106
-
13107
- const touch = event.changedTouches[0];
13108
- wrapper.touchendX = touch.clientX;
13109
- wrapper.touchendY = touch.clientY;
13110
- (_wrapper$end = wrapper.end) == null ? void 0 : _wrapper$end.call(wrapper, { ...event,
13111
- ...wrapper
13112
- });
13113
- handleGesture(wrapper);
13114
- }
13115
-
13116
- function touchmove(event, wrapper) {
13117
- var _wrapper$move;
13118
-
13119
- const touch = event.changedTouches[0];
13120
- wrapper.touchmoveX = touch.clientX;
13121
- wrapper.touchmoveY = touch.clientY;
13122
- (_wrapper$move = wrapper.move) == null ? void 0 : _wrapper$move.call(wrapper, { ...event,
13123
- ...wrapper
13124
- });
13125
- }
13126
-
13127
- function createHandlers() {
13128
- let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
13129
- const wrapper = {
13130
- touchstartX: 0,
13131
- touchstartY: 0,
13132
- touchendX: 0,
13133
- touchendY: 0,
13134
- touchmoveX: 0,
13135
- touchmoveY: 0,
13136
- offsetX: 0,
13137
- offsetY: 0,
13138
- left: value.left,
13139
- right: value.right,
13140
- up: value.up,
13141
- down: value.down,
13142
- start: value.start,
13143
- move: value.move,
13144
- end: value.end
13145
- };
13146
- return {
13147
- touchstart: e => touchstart(e, wrapper),
13148
- touchend: e => touchend(e, wrapper),
13149
- touchmove: e => touchmove(e, wrapper)
13150
- };
13151
- }
13152
-
13153
- function mounted(el, binding) {
13154
- var _value$options, _binding$instance, _target$_touchHandler;
13155
-
13156
- const value = binding.value;
13157
- const target = value != null && value.parent ? el.parentElement : el;
13158
- const options = (_value$options = value == null ? void 0 : value.options) != null ? _value$options : {
13159
- passive: true
13160
- };
13161
- const uid = (_binding$instance = binding.instance) == null ? void 0 : _binding$instance.$.uid; // TODO: use custom uid generator
13162
-
13163
- if (!target || !uid) return;
13164
- const handlers = createHandlers(binding.value);
13165
- target._touchHandlers = (_target$_touchHandler = target._touchHandlers) != null ? _target$_touchHandler : Object.create(null);
13166
- target._touchHandlers[uid] = handlers;
13167
- keys(handlers).forEach(eventName => {
13168
- target.addEventListener(eventName, handlers[eventName], options);
13169
- });
13170
- }
13171
-
13172
- function unmounted(el, binding) {
13173
- var _binding$value, _binding$instance2;
13174
-
13175
- const target = (_binding$value = binding.value) != null && _binding$value.parent ? el.parentElement : el;
13176
- const uid = (_binding$instance2 = binding.instance) == null ? void 0 : _binding$instance2.$.uid;
13177
- if (!(target != null && target._touchHandlers) || !uid) return;
13178
- const handlers = target._touchHandlers[uid];
13179
- keys(handlers).forEach(eventName => {
13180
- target.removeEventListener(eventName, handlers[eventName]);
13181
- });
13182
- delete target._touchHandlers[uid];
13183
- }
13184
-
13185
- const Touch = {
13186
13527
  mounted,
13187
- unmounted
13528
+ unmounted,
13529
+ updated
13188
13530
  };
13189
13531
 
13190
13532
  var directives = /*#__PURE__*/Object.freeze({
@@ -13323,7 +13665,7 @@
13323
13665
  ...options
13324
13666
  });
13325
13667
  };
13326
- const version = "3.0.0-next-20220112.0";
13668
+ const version = "3.0.0-next-20220128.0";
13327
13669
 
13328
13670
  exports.components = components;
13329
13671
  exports.createVuetify = createVuetify;