vuetify 3.3.15 → 3.4.0-alpha.1

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 (122) hide show
  1. package/dist/json/attributes.json +111 -11
  2. package/dist/json/importMap.json +4 -4
  3. package/dist/json/tags.json +25 -0
  4. package/dist/json/web-types.json +263 -18
  5. package/dist/vuetify-labs.css +1558 -518
  6. package/dist/vuetify-labs.d.ts +499 -179
  7. package/dist/vuetify-labs.esm.js +264 -73
  8. package/dist/vuetify-labs.esm.js.map +1 -1
  9. package/dist/vuetify-labs.js +263 -72
  10. package/dist/vuetify-labs.min.css +2 -2
  11. package/dist/vuetify.css +1080 -40
  12. package/dist/vuetify.d.ts +484 -170
  13. package/dist/vuetify.esm.js +264 -73
  14. package/dist/vuetify.esm.js.map +1 -1
  15. package/dist/vuetify.js +263 -72
  16. package/dist/vuetify.js.map +1 -1
  17. package/dist/vuetify.min.css +2 -2
  18. package/dist/vuetify.min.js +914 -895
  19. package/dist/vuetify.min.js.map +1 -1
  20. package/lib/components/VAutocomplete/index.d.mts +20 -14
  21. package/lib/components/VAvatar/VAvatar.mjs +2 -1
  22. package/lib/components/VAvatar/VAvatar.mjs.map +1 -1
  23. package/lib/components/VAvatar/index.d.mts +6 -0
  24. package/lib/components/VBanner/VBanner.mjs +5 -3
  25. package/lib/components/VBanner/VBanner.mjs.map +1 -1
  26. package/lib/components/VBanner/index.d.mts +10 -0
  27. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs +9 -4
  28. package/lib/components/VBreadcrumbs/VBreadcrumbs.mjs.map +1 -1
  29. package/lib/components/VBreadcrumbs/index.d.mts +28 -2
  30. package/lib/components/VCarousel/index.d.mts +26 -0
  31. package/lib/components/VCheckbox/index.d.mts +12 -0
  32. package/lib/components/VColorPicker/VColorPickerPreview.css +5 -0
  33. package/lib/components/VColorPicker/VColorPickerPreview.mjs +28 -2
  34. package/lib/components/VColorPicker/VColorPickerPreview.mjs.map +1 -1
  35. package/lib/components/VColorPicker/VColorPickerPreview.sass +4 -0
  36. package/lib/components/VColorPicker/_variables.scss +1 -0
  37. package/lib/components/VCombobox/index.d.mts +20 -14
  38. package/lib/components/VDialog/index.d.mts +41 -20
  39. package/lib/components/VField/index.d.mts +4 -4
  40. package/lib/components/VFileInput/index.d.mts +4 -4
  41. package/lib/components/VImg/VImg.mjs +13 -1
  42. package/lib/components/VImg/VImg.mjs.map +1 -1
  43. package/lib/components/VImg/index.d.mts +26 -0
  44. package/lib/components/VList/index.d.mts +12 -12
  45. package/lib/components/VMenu/index.d.mts +41 -20
  46. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs +5 -3
  47. package/lib/components/VNavigationDrawer/VNavigationDrawer.mjs.map +1 -1
  48. package/lib/components/VNavigationDrawer/index.d.mts +10 -0
  49. package/lib/components/VOverlay/VOverlay.mjs +9 -4
  50. package/lib/components/VOverlay/VOverlay.mjs.map +1 -1
  51. package/lib/components/VOverlay/index.d.mts +17 -8
  52. package/lib/components/VOverlay/locationStrategies.mjs +9 -9
  53. package/lib/components/VOverlay/locationStrategies.mjs.map +1 -1
  54. package/lib/components/VOverlay/scrollStrategies.mjs +3 -3
  55. package/lib/components/VOverlay/scrollStrategies.mjs.map +1 -1
  56. package/lib/components/VOverlay/useActivator.mjs +50 -21
  57. package/lib/components/VOverlay/useActivator.mjs.map +1 -1
  58. package/lib/components/VRadio/index.d.mts +6 -0
  59. package/lib/components/VRangeSlider/VRangeSlider.mjs +4 -2
  60. package/lib/components/VRangeSlider/VRangeSlider.mjs.map +1 -1
  61. package/lib/components/VRangeSlider/index.d.mts +14 -0
  62. package/lib/components/VSelect/index.d.mts +20 -14
  63. package/lib/components/VSelectionControl/VSelectionControl.mjs +3 -1
  64. package/lib/components/VSelectionControl/VSelectionControl.mjs.map +1 -1
  65. package/lib/components/VSelectionControl/index.d.mts +6 -0
  66. package/lib/components/VSlideGroup/VSlideGroup.mjs +5 -3
  67. package/lib/components/VSlideGroup/VSlideGroup.mjs.map +1 -1
  68. package/lib/components/VSlideGroup/index.d.mts +10 -0
  69. package/lib/components/VSlider/VSlider.mjs +2 -1
  70. package/lib/components/VSlider/VSlider.mjs.map +1 -1
  71. package/lib/components/VSlider/index.d.mts +14 -0
  72. package/lib/components/VSlider/slider.mjs +5 -1
  73. package/lib/components/VSlider/slider.mjs.map +1 -1
  74. package/lib/components/VSnackbar/VSnackbar.css +9 -0
  75. package/lib/components/VSnackbar/VSnackbar.mjs +65 -6
  76. package/lib/components/VSnackbar/VSnackbar.mjs.map +1 -1
  77. package/lib/components/VSnackbar/VSnackbar.sass +9 -0
  78. package/lib/components/VSnackbar/index.d.mts +52 -25
  79. package/lib/components/VSwitch/index.d.mts +6 -0
  80. package/lib/components/VTabs/index.d.mts +10 -0
  81. package/lib/components/VTextField/index.d.mts +16 -16
  82. package/lib/components/VTextarea/index.d.mts +4 -4
  83. package/lib/components/VTooltip/index.d.mts +41 -20
  84. package/lib/components/index.d.mts +455 -168
  85. package/lib/components/transitions/dialog-transition.mjs +4 -3
  86. package/lib/components/transitions/dialog-transition.mjs.map +1 -1
  87. package/lib/components/transitions/index.d.mts +6 -6
  88. package/lib/composables/directiveComponent.mjs +69 -0
  89. package/lib/composables/directiveComponent.mjs.map +1 -0
  90. package/lib/composables/display.mjs +23 -3
  91. package/lib/composables/display.mjs.map +1 -1
  92. package/lib/composables/resizeObserver.mjs.map +1 -1
  93. package/lib/composables/theme.mjs +7 -7
  94. package/lib/composables/theme.mjs.map +1 -1
  95. package/lib/entry-bundler.mjs +1 -1
  96. package/lib/entry-bundler.mjs.map +1 -1
  97. package/lib/framework.mjs +1 -1
  98. package/lib/framework.mjs.map +1 -1
  99. package/lib/iconsets/fa.mjs +2 -1
  100. package/lib/iconsets/fa.mjs.map +1 -1
  101. package/lib/iconsets/fa4.mjs +2 -1
  102. package/lib/iconsets/fa4.mjs.map +1 -1
  103. package/lib/iconsets/md.mjs +2 -1
  104. package/lib/iconsets/md.mjs.map +1 -1
  105. package/lib/iconsets/mdi-svg.mjs +2 -1
  106. package/lib/iconsets/mdi-svg.mjs.map +1 -1
  107. package/lib/iconsets/mdi.mjs +2 -1
  108. package/lib/iconsets/mdi.mjs.map +1 -1
  109. package/lib/index.d.mts +33 -2
  110. package/lib/labs/VBottomSheet/index.d.mts +14 -8
  111. package/lib/labs/VDateInput/index.d.mts +4 -4
  112. package/lib/labs/VOtpInput/index.d.mts +4 -4
  113. package/lib/labs/components.d.mts +18 -12
  114. package/lib/styles/main.css +1026 -0
  115. package/lib/styles/settings/_utilities.scss +20 -0
  116. package/lib/util/box.mjs +12 -0
  117. package/lib/util/box.mjs.map +1 -1
  118. package/lib/util/globals.mjs +1 -0
  119. package/lib/util/globals.mjs.map +1 -1
  120. package/lib/util/helpers.mjs +9 -1
  121. package/lib/util/helpers.mjs.map +1 -1
  122. package/package.json +2 -2
@@ -60,6 +60,7 @@ declare const VRangeSlider: {
60
60
  rounded?: string | number | boolean | undefined;
61
61
  density?: Density | undefined;
62
62
  modelValue?: readonly (string | number)[] | undefined;
63
+ ripple?: boolean | undefined;
63
64
  focused?: boolean | undefined;
64
65
  errorMessages?: string | readonly string[] | undefined;
65
66
  maxErrors?: string | number | undefined;
@@ -234,6 +235,7 @@ declare const VRangeSlider: {
234
235
  messages: string | readonly string[];
235
236
  density: Density;
236
237
  modelValue: readonly (string | number)[];
238
+ ripple: boolean;
237
239
  focused: boolean;
238
240
  errorMessages: string | readonly string[];
239
241
  maxErrors: string | number;
@@ -336,6 +338,7 @@ declare const VRangeSlider: {
336
338
  rounded: string | number | boolean;
337
339
  density: Density;
338
340
  modelValue: readonly (string | number)[];
341
+ ripple: boolean;
339
342
  focused: boolean;
340
343
  errorMessages: string | readonly string[];
341
344
  maxErrors: string | number;
@@ -412,6 +415,7 @@ declare const VRangeSlider: {
412
415
  messages: string | readonly string[];
413
416
  density: Density;
414
417
  modelValue: readonly (string | number)[];
418
+ ripple: boolean;
415
419
  focused: boolean;
416
420
  errorMessages: string | readonly string[];
417
421
  maxErrors: string | number;
@@ -512,6 +516,7 @@ declare const VRangeSlider: {
512
516
  messages: string | readonly string[];
513
517
  density: Density;
514
518
  modelValue: readonly (string | number)[];
519
+ ripple: boolean;
515
520
  focused: boolean;
516
521
  errorMessages: string | readonly string[];
517
522
  maxErrors: string | number;
@@ -614,6 +619,7 @@ declare const VRangeSlider: {
614
619
  rounded: string | number | boolean;
615
620
  density: Density;
616
621
  modelValue: readonly (string | number)[];
622
+ ripple: boolean;
617
623
  focused: boolean;
618
624
  errorMessages: string | readonly string[];
619
625
  maxErrors: string | number;
@@ -661,6 +667,10 @@ declare const VRangeSlider: {
661
667
  type: PropType<readonly (string | number)[]>;
662
668
  default: () => number[];
663
669
  };
670
+ ripple: {
671
+ type: BooleanConstructor;
672
+ default: boolean;
673
+ };
664
674
  elevation: Omit<{
665
675
  type: (StringConstructor | NumberConstructor)[];
666
676
  validator(v: any): boolean;
@@ -778,6 +788,10 @@ declare const VRangeSlider: {
778
788
  type: PropType<readonly (string | number)[]>;
779
789
  default: () => number[];
780
790
  };
791
+ ripple: {
792
+ type: BooleanConstructor;
793
+ default: boolean;
794
+ };
781
795
  elevation: Omit<{
782
796
  type: (StringConstructor | NumberConstructor)[];
783
797
  validator(v: any): boolean;
@@ -121,7 +121,7 @@ type VInputSlots = {
121
121
  interface ScrollStrategyData {
122
122
  root: Ref<HTMLElement | undefined>;
123
123
  contentEl: Ref<HTMLElement | undefined>;
124
- activatorEl: Ref<HTMLElement | undefined>;
124
+ targetEl: Ref<HTMLElement | undefined>;
125
125
  isActive: Ref<boolean>;
126
126
  updateLocation: Ref<((e: Event) => void) | undefined>;
127
127
  }
@@ -142,7 +142,7 @@ declare function repositionScrollStrategy(data: ScrollStrategyData, props: Strat
142
142
 
143
143
  interface LocationStrategyData {
144
144
  contentEl: Ref<HTMLElement | undefined>;
145
- activatorEl: Ref<HTMLElement | undefined>;
145
+ target: Ref<HTMLElement | [x: number, y: number] | undefined>;
146
146
  isActive: Ref<boolean>;
147
147
  isRtl: Ref<boolean>;
148
148
  }
@@ -298,6 +298,7 @@ declare const VSelect: {
298
298
  bgColor?: string | undefined;
299
299
  prependIcon?: IconValue | undefined;
300
300
  appendIcon?: IconValue | undefined;
301
+ baseColor?: string | undefined;
301
302
  prependInnerIcon?: IconValue | undefined;
302
303
  'onClick:clear'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
303
304
  'onClick:append'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
@@ -308,7 +309,6 @@ declare const VSelect: {
308
309
  validateOn?: "lazy" | ("input" | "blur" | "submit") | "input lazy" | "blur lazy" | "submit lazy" | "lazy input" | "lazy blur" | "lazy submit" | undefined;
309
310
  hint?: string | undefined;
310
311
  hideDetails?: boolean | "auto" | undefined;
311
- baseColor?: string | undefined;
312
312
  suffix?: string | undefined;
313
313
  counterValue?: ((value: any) => number) | undefined;
314
314
  modelModifiers?: Record<string, boolean> | undefined;
@@ -350,6 +350,7 @@ declare const VSelect: {
350
350
  maxWidth?: string | number | undefined;
351
351
  minHeight?: string | number | undefined;
352
352
  minWidth?: string | number | undefined;
353
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
353
354
  class?: any;
354
355
  $children?: vue.VNodeChild | {
355
356
  default?: ((arg: {
@@ -418,7 +419,7 @@ declare const VSelect: {
418
419
  [key: string]: any;
419
420
  }>) => void)[] | undefined;
420
421
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
421
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
422
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
422
423
  "v-slot:activator"?: false | ((arg: {
423
424
  isActive: boolean;
424
425
  props: Record<string, any>;
@@ -562,6 +563,7 @@ declare const VSelect: {
562
563
  bgColor?: string | undefined;
563
564
  prependIcon?: IconValue | undefined;
564
565
  appendIcon?: IconValue | undefined;
566
+ baseColor?: string | undefined;
565
567
  prependInnerIcon?: IconValue | undefined;
566
568
  'onClick:clear'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
567
569
  'onClick:append'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
@@ -573,7 +575,6 @@ declare const VSelect: {
573
575
  centerAffix?: boolean | undefined;
574
576
  hint?: string | undefined;
575
577
  hideDetails?: boolean | "auto" | undefined;
576
- baseColor?: string | undefined;
577
578
  suffix?: string | undefined;
578
579
  counterValue?: ((value: any) => number) | undefined;
579
580
  modelModifiers?: Record<string, boolean> | undefined;
@@ -615,6 +616,7 @@ declare const VSelect: {
615
616
  maxWidth?: string | number | undefined;
616
617
  minHeight?: string | number | undefined;
617
618
  minWidth?: string | number | undefined;
619
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
618
620
  class?: any;
619
621
  $children?: vue.VNodeChild | {
620
622
  default?: ((arg: {
@@ -683,7 +685,7 @@ declare const VSelect: {
683
685
  [key: string]: any;
684
686
  }>) => void)[] | undefined;
685
687
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
686
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
688
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
687
689
  "v-slot:activator"?: false | ((arg: {
688
690
  isActive: boolean;
689
691
  props: Record<string, any>;
@@ -891,6 +893,7 @@ declare const VSelect: {
891
893
  bgColor?: string | undefined;
892
894
  prependIcon?: IconValue | undefined;
893
895
  appendIcon?: IconValue | undefined;
896
+ baseColor?: string | undefined;
894
897
  prependInnerIcon?: IconValue | undefined;
895
898
  'onClick:clear'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
896
899
  'onClick:append'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
@@ -902,7 +905,6 @@ declare const VSelect: {
902
905
  centerAffix?: boolean | undefined;
903
906
  hint?: string | undefined;
904
907
  hideDetails?: boolean | "auto" | undefined;
905
- baseColor?: string | undefined;
906
908
  suffix?: string | undefined;
907
909
  counterValue?: ((value: any) => number) | undefined;
908
910
  modelModifiers?: Record<string, boolean> | undefined;
@@ -944,6 +946,7 @@ declare const VSelect: {
944
946
  maxWidth?: string | number | undefined;
945
947
  minHeight?: string | number | undefined;
946
948
  minWidth?: string | number | undefined;
949
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
947
950
  class?: any;
948
951
  $children?: vue.VNodeChild | {
949
952
  default?: ((arg: {
@@ -1012,7 +1015,7 @@ declare const VSelect: {
1012
1015
  [key: string]: any;
1013
1016
  }>) => void)[] | undefined;
1014
1017
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
1015
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
1018
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
1016
1019
  "v-slot:activator"?: false | ((arg: {
1017
1020
  isActive: boolean;
1018
1021
  props: Record<string, any>;
@@ -1091,6 +1094,7 @@ declare const VSelect: {
1091
1094
  bgColor?: string | undefined;
1092
1095
  prependIcon?: IconValue | undefined;
1093
1096
  appendIcon?: IconValue | undefined;
1097
+ baseColor?: string | undefined;
1094
1098
  prependInnerIcon?: IconValue | undefined;
1095
1099
  'onClick:clear'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
1096
1100
  'onClick:append'?: EventProp<[MouseEvent], (args_0: MouseEvent) => any> | undefined;
@@ -1102,7 +1106,6 @@ declare const VSelect: {
1102
1106
  centerAffix?: boolean | undefined;
1103
1107
  hint?: string | undefined;
1104
1108
  hideDetails?: boolean | "auto" | undefined;
1105
- baseColor?: string | undefined;
1106
1109
  suffix?: string | undefined;
1107
1110
  counterValue?: ((value: any) => number) | undefined;
1108
1111
  modelModifiers?: Record<string, boolean> | undefined;
@@ -1144,6 +1147,7 @@ declare const VSelect: {
1144
1147
  maxWidth?: string | number | undefined;
1145
1148
  minHeight?: string | number | undefined;
1146
1149
  minWidth?: string | number | undefined;
1150
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
1147
1151
  class?: any;
1148
1152
  $children?: vue.VNodeChild | {
1149
1153
  default?: ((arg: {
@@ -1212,7 +1216,7 @@ declare const VSelect: {
1212
1216
  [key: string]: any;
1213
1217
  }>) => void)[] | undefined;
1214
1218
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
1215
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
1219
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
1216
1220
  "v-slot:activator"?: false | ((arg: {
1217
1221
  isActive: boolean;
1218
1222
  props: Record<string, any>;
@@ -1470,6 +1474,7 @@ declare const VSelect: {
1470
1474
  bgColor: StringConstructor;
1471
1475
  prependIcon: PropType<IconValue>;
1472
1476
  appendIcon: PropType<IconValue>;
1477
+ baseColor: StringConstructor;
1473
1478
  clearIcon: {
1474
1479
  type: PropType<IconValue>;
1475
1480
  default: string;
@@ -1502,7 +1507,6 @@ declare const VSelect: {
1502
1507
  hint: StringConstructor;
1503
1508
  persistentHint: BooleanConstructor;
1504
1509
  hideDetails: PropType<boolean | "auto">;
1505
- baseColor: StringConstructor;
1506
1510
  clearable: BooleanConstructor;
1507
1511
  persistentClear: BooleanConstructor;
1508
1512
  singleLine: BooleanConstructor;
@@ -1592,6 +1596,7 @@ declare const VSelect: {
1592
1596
  maxWidth?: string | number | undefined;
1593
1597
  minHeight?: string | number | undefined;
1594
1598
  minWidth?: string | number | undefined;
1599
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
1595
1600
  class?: any;
1596
1601
  $children?: vue.VNodeChild | {
1597
1602
  default?: ((arg: {
@@ -1660,7 +1665,7 @@ declare const VSelect: {
1660
1665
  [key: string]: any;
1661
1666
  }>) => void)[] | undefined;
1662
1667
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
1663
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
1668
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
1664
1669
  "v-slot:activator"?: false | ((arg: {
1665
1670
  isActive: boolean;
1666
1671
  props: Record<string, any>;
@@ -1764,6 +1769,7 @@ declare const VSelect: {
1764
1769
  bgColor: StringConstructor;
1765
1770
  prependIcon: PropType<IconValue>;
1766
1771
  appendIcon: PropType<IconValue>;
1772
+ baseColor: StringConstructor;
1767
1773
  clearIcon: {
1768
1774
  type: PropType<IconValue>;
1769
1775
  default: string;
@@ -1796,7 +1802,6 @@ declare const VSelect: {
1796
1802
  hint: StringConstructor;
1797
1803
  persistentHint: BooleanConstructor;
1798
1804
  hideDetails: PropType<boolean | "auto">;
1799
- baseColor: StringConstructor;
1800
1805
  clearable: BooleanConstructor;
1801
1806
  persistentClear: BooleanConstructor;
1802
1807
  singleLine: BooleanConstructor;
@@ -1886,6 +1891,7 @@ declare const VSelect: {
1886
1891
  maxWidth?: string | number | undefined;
1887
1892
  minHeight?: string | number | undefined;
1888
1893
  minWidth?: string | number | undefined;
1894
+ target?: Element | "cursor" | "parent" | (string & {}) | vue.ComponentPublicInstance | [x: number, y: number] | undefined;
1889
1895
  class?: any;
1890
1896
  $children?: vue.VNodeChild | {
1891
1897
  default?: ((arg: {
@@ -1954,7 +1960,7 @@ declare const VSelect: {
1954
1960
  [key: string]: any;
1955
1961
  }>) => void)[] | undefined;
1956
1962
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
1957
- activator?: string | Element | vue.ComponentPublicInstance | undefined;
1963
+ activator?: Element | "parent" | (string & {}) | vue.ComponentPublicInstance | undefined;
1958
1964
  "v-slot:activator"?: false | ((arg: {
1959
1965
  isActive: boolean;
1960
1966
  props: Record<string, any>;
@@ -15,6 +15,7 @@ import { computed, inject, nextTick, ref, shallowRef } from 'vue';
15
15
  import { filterInputAttrs, genericComponent, getUid, matchesSelector, propsFactory, useRender, wrapInArray } from "../../util/index.mjs"; // Types
16
16
  export const makeVSelectionControlProps = propsFactory({
17
17
  label: String,
18
+ baseColor: String,
18
19
  trueValue: null,
19
20
  falseValue: null,
20
21
  value: null,
@@ -53,7 +54,8 @@ export function useSelectionControl(props) {
53
54
  textColorClasses,
54
55
  textColorStyles
55
56
  } = useTextColor(computed(() => {
56
- return model.value && !props.error && !props.disabled ? props.color : undefined;
57
+ if (props.error || props.disabled) return undefined;
58
+ return model.value ? props.color : props.baseColor;
57
59
  }));
58
60
  const {
59
61
  backgroundColorClasses,
@@ -1 +1 @@
1
- {"version":3,"file":"VSelectionControl.mjs","names":["VIcon","VLabel","makeSelectionControlGroupProps","VSelectionControlGroupSymbol","useBackgroundColor","useTextColor","makeComponentProps","useDensity","useProxiedModel","Ripple","computed","inject","nextTick","ref","shallowRef","filterInputAttrs","genericComponent","getUid","matchesSelector","propsFactory","useRender","wrapInArray","makeVSelectionControlProps","label","String","trueValue","falseValue","value","useSelectionControl","props","group","undefined","densityClasses","modelValue","isMultiple","multiple","Array","isArray","model","get","val","some","v","valueComparator","set","readonly","currentValue","newVal","filter","item","textColorClasses","textColorStyles","error","disabled","color","backgroundColorClasses","backgroundColorStyles","icon","trueIcon","falseIcon","VSelectionControl","name","directives","inheritAttrs","emits","setup","_ref","attrs","slots","uid","id","isFocused","isFocusVisible","input","onForceUpdate","checked","onFocus","e","target","onBlur","onInput","forceUpdate","for","rootAttrs","inputAttrs","inputNode","_createVNode","_mergeProps","type","inline","class","style","default","_withDirectives","_Fragment","_resolveDirective","ripple","stopPropagation"],"sources":["../../../src/components/VSelectionControl/VSelectionControl.tsx"],"sourcesContent":["// Styles\nimport './VSelectionControl.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VLabel } from '@/components/VLabel'\nimport { makeSelectionControlGroupProps, VSelectionControlGroupSymbol } from '@/components/VSelectionControlGroup/VSelectionControlGroup'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useDensity } from '@/composables/density'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, nextTick, ref, shallowRef } from 'vue'\nimport {\n filterInputAttrs,\n genericComponent,\n getUid,\n matchesSelector,\n propsFactory,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { CSSProperties, ExtractPropTypes, Ref, VNode, WritableComputedRef } from 'vue'\nimport type { IconValue } from '@/composables/icons'\nimport type { GenericProps } from '@/util'\n\nexport type SelectionControlSlot = {\n model: WritableComputedRef<any>\n textColorClasses: Ref<string[]>\n textColorStyles: Ref<CSSProperties>\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n inputNode: VNode\n icon: IconValue | undefined\n props: {\n onBlur: (e: Event) => void\n onFocus: (e: FocusEvent) => void\n id: string\n }\n}\n\nexport type VSelectionControlSlots = {\n default: {\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n }\n label: { label: string | undefined, props: Record<string, unknown> }\n input: SelectionControlSlot\n}\n\nexport const makeVSelectionControlProps = propsFactory({\n label: String,\n trueValue: null,\n falseValue: null,\n value: null,\n\n ...makeComponentProps(),\n ...makeSelectionControlGroupProps(),\n}, 'VSelectionControl')\n\nexport function useSelectionControl (\n props: ExtractPropTypes<ReturnType<typeof makeVSelectionControlProps>> & {\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n }\n) {\n const group = inject(VSelectionControlGroupSymbol, undefined)\n const { densityClasses } = useDensity(props)\n const modelValue = useProxiedModel(props, 'modelValue')\n const trueValue = computed(() => (\n props.trueValue !== undefined ? props.trueValue\n : props.value !== undefined ? props.value\n : true\n ))\n const falseValue = computed(() => props.falseValue !== undefined ? props.falseValue : false)\n const isMultiple = computed(() => (\n !!props.multiple ||\n (props.multiple == null && Array.isArray(modelValue.value))\n ))\n const model = computed({\n get () {\n const val = group ? group.modelValue.value : modelValue.value\n\n return isMultiple.value\n ? val.some((v: any) => props.valueComparator(v, trueValue.value))\n : props.valueComparator(val, trueValue.value)\n },\n set (val: boolean) {\n if (props.readonly) return\n\n const currentValue = val ? trueValue.value : falseValue.value\n\n let newVal = currentValue\n\n if (isMultiple.value) {\n newVal = val\n ? [...wrapInArray(modelValue.value), currentValue]\n : wrapInArray(modelValue.value).filter((item: any) => !props.valueComparator(item, trueValue.value))\n }\n\n if (group) {\n group.modelValue.value = newVal\n } else {\n modelValue.value = newVal\n }\n },\n })\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n return (\n model.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => {\n return (\n model.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n const icon = computed(() => model.value ? props.trueIcon : props.falseIcon)\n\n return {\n group,\n densityClasses,\n trueValue,\n falseValue,\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n icon,\n }\n}\n\nexport const VSelectionControl = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n },\n slots: VSelectionControlSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSelectionControl',\n\n directives: { Ripple },\n\n inheritAttrs: false,\n\n props: makeVSelectionControlProps(),\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, slots }) {\n const {\n group,\n densityClasses,\n icon,\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n trueValue,\n } = useSelectionControl(props)\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = shallowRef(false)\n const isFocusVisible = shallowRef(false)\n const input = ref<HTMLInputElement>()\n\n group?.onForceUpdate(() => {\n if (input.value) {\n input.value.checked = model.value\n }\n })\n\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n if (matchesSelector(e.target as HTMLElement, ':focus-visible') !== false) {\n isFocusVisible.value = true\n }\n }\n\n function onBlur () {\n isFocused.value = false\n isFocusVisible.value = false\n }\n\n function onInput (e: Event) {\n if (props.readonly && group) {\n nextTick(() => group.forceUpdate())\n }\n model.value = (e.target as HTMLInputElement).checked\n }\n\n useRender(() => {\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ input }\n checked={ model.value }\n disabled={ !!(props.readonly || props.disabled) }\n id={ id.value }\n onBlur={ onBlur }\n onFocus={ onFocus }\n onInput={ onInput }\n aria-disabled={ !!(props.readonly || props.disabled) }\n type={ props.type }\n value={ trueValue.value }\n name={ props.name }\n aria-checked={ props.type === 'checkbox' ? model.value : undefined }\n { ...inputAttrs }\n />\n )\n\n return (\n <div\n class={[\n 'v-selection-control',\n {\n 'v-selection-control--dirty': model.value,\n 'v-selection-control--disabled': props.disabled,\n 'v-selection-control--error': props.error,\n 'v-selection-control--focused': isFocused.value,\n 'v-selection-control--focus-visible': isFocusVisible.value,\n 'v-selection-control--inline': props.inline,\n },\n densityClasses.value,\n props.class,\n ]}\n { ...rootAttrs }\n style={ props.style }\n >\n <div\n class={[\n 'v-selection-control__wrapper',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n >\n { slots.default?.({\n backgroundColorClasses,\n backgroundColorStyles,\n })}\n\n <div\n class={[\n 'v-selection-control__input',\n ]}\n v-ripple={ props.ripple && [\n !props.disabled && !props.readonly,\n null,\n ['center', 'circle'],\n ]}\n >\n { slots.input?.({\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n inputNode,\n icon: icon.value,\n props: {\n onFocus,\n onBlur,\n id: id.value,\n },\n } satisfies SelectionControlSlot) ?? (\n <>\n { icon.value && <VIcon key=\"icon\" icon={ icon.value } /> }\n\n { inputNode }\n </>\n )}\n </div>\n </div>\n\n { label && (\n <VLabel for={ id.value } clickable onClick={ (e: Event) => e.stopPropagation() }>\n { label }\n </VLabel>\n )}\n </div>\n )\n })\n\n return {\n isFocused,\n input,\n }\n },\n})\n\nexport type VSelectionControl = InstanceType<typeof VSelectionControl>\n"],"mappings":"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"}
1
+ {"version":3,"file":"VSelectionControl.mjs","names":["VIcon","VLabel","makeSelectionControlGroupProps","VSelectionControlGroupSymbol","useBackgroundColor","useTextColor","makeComponentProps","useDensity","useProxiedModel","Ripple","computed","inject","nextTick","ref","shallowRef","filterInputAttrs","genericComponent","getUid","matchesSelector","propsFactory","useRender","wrapInArray","makeVSelectionControlProps","label","String","baseColor","trueValue","falseValue","value","useSelectionControl","props","group","undefined","densityClasses","modelValue","isMultiple","multiple","Array","isArray","model","get","val","some","v","valueComparator","set","readonly","currentValue","newVal","filter","item","textColorClasses","textColorStyles","error","disabled","color","backgroundColorClasses","backgroundColorStyles","icon","trueIcon","falseIcon","VSelectionControl","name","directives","inheritAttrs","emits","setup","_ref","attrs","slots","uid","id","isFocused","isFocusVisible","input","onForceUpdate","checked","onFocus","e","target","onBlur","onInput","forceUpdate","for","rootAttrs","inputAttrs","inputNode","_createVNode","_mergeProps","type","inline","class","style","default","_withDirectives","_Fragment","_resolveDirective","ripple","stopPropagation"],"sources":["../../../src/components/VSelectionControl/VSelectionControl.tsx"],"sourcesContent":["// Styles\nimport './VSelectionControl.sass'\n\n// Components\nimport { VIcon } from '@/components/VIcon'\nimport { VLabel } from '@/components/VLabel'\nimport { makeSelectionControlGroupProps, VSelectionControlGroupSymbol } from '@/components/VSelectionControlGroup/VSelectionControlGroup'\n\n// Composables\nimport { useBackgroundColor, useTextColor } from '@/composables/color'\nimport { makeComponentProps } from '@/composables/component'\nimport { useDensity } from '@/composables/density'\nimport { useProxiedModel } from '@/composables/proxiedModel'\n\n// Directives\nimport { Ripple } from '@/directives/ripple'\n\n// Utilities\nimport { computed, inject, nextTick, ref, shallowRef } from 'vue'\nimport {\n filterInputAttrs,\n genericComponent,\n getUid,\n matchesSelector,\n propsFactory,\n useRender,\n wrapInArray,\n} from '@/util'\n\n// Types\nimport type { CSSProperties, ExtractPropTypes, Ref, VNode, WritableComputedRef } from 'vue'\nimport type { IconValue } from '@/composables/icons'\nimport type { GenericProps } from '@/util'\n\nexport type SelectionControlSlot = {\n model: WritableComputedRef<any>\n textColorClasses: Ref<string[]>\n textColorStyles: Ref<CSSProperties>\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n inputNode: VNode\n icon: IconValue | undefined\n props: {\n onBlur: (e: Event) => void\n onFocus: (e: FocusEvent) => void\n id: string\n }\n}\n\nexport type VSelectionControlSlots = {\n default: {\n backgroundColorClasses: Ref<string[]>\n backgroundColorStyles: Ref<CSSProperties>\n }\n label: { label: string | undefined, props: Record<string, unknown> }\n input: SelectionControlSlot\n}\n\nexport const makeVSelectionControlProps = propsFactory({\n label: String,\n baseColor: String,\n trueValue: null,\n falseValue: null,\n value: null,\n\n ...makeComponentProps(),\n ...makeSelectionControlGroupProps(),\n}, 'VSelectionControl')\n\nexport function useSelectionControl (\n props: ExtractPropTypes<ReturnType<typeof makeVSelectionControlProps>> & {\n 'onUpdate:modelValue': ((val: any) => void) | undefined\n }\n) {\n const group = inject(VSelectionControlGroupSymbol, undefined)\n const { densityClasses } = useDensity(props)\n const modelValue = useProxiedModel(props, 'modelValue')\n const trueValue = computed(() => (\n props.trueValue !== undefined ? props.trueValue\n : props.value !== undefined ? props.value\n : true\n ))\n const falseValue = computed(() => props.falseValue !== undefined ? props.falseValue : false)\n const isMultiple = computed(() => (\n !!props.multiple ||\n (props.multiple == null && Array.isArray(modelValue.value))\n ))\n const model = computed({\n get () {\n const val = group ? group.modelValue.value : modelValue.value\n\n return isMultiple.value\n ? val.some((v: any) => props.valueComparator(v, trueValue.value))\n : props.valueComparator(val, trueValue.value)\n },\n set (val: boolean) {\n if (props.readonly) return\n\n const currentValue = val ? trueValue.value : falseValue.value\n\n let newVal = currentValue\n\n if (isMultiple.value) {\n newVal = val\n ? [...wrapInArray(modelValue.value), currentValue]\n : wrapInArray(modelValue.value).filter((item: any) => !props.valueComparator(item, trueValue.value))\n }\n\n if (group) {\n group.modelValue.value = newVal\n } else {\n modelValue.value = newVal\n }\n },\n })\n const { textColorClasses, textColorStyles } = useTextColor(computed(() => {\n if (props.error || props.disabled) return undefined\n\n return model.value ? props.color : props.baseColor\n }))\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(computed(() => {\n return (\n model.value &&\n !props.error &&\n !props.disabled\n ) ? props.color : undefined\n }))\n const icon = computed(() => model.value ? props.trueIcon : props.falseIcon)\n\n return {\n group,\n densityClasses,\n trueValue,\n falseValue,\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n icon,\n }\n}\n\nexport const VSelectionControl = genericComponent<new <T>(\n props: {\n modelValue?: T\n 'onUpdate:modelValue'?: (val: T) => any\n },\n slots: VSelectionControlSlots,\n) => GenericProps<typeof props, typeof slots>>()({\n name: 'VSelectionControl',\n\n directives: { Ripple },\n\n inheritAttrs: false,\n\n props: makeVSelectionControlProps(),\n\n emits: {\n 'update:modelValue': (val: any) => true,\n },\n\n setup (props, { attrs, slots }) {\n const {\n group,\n densityClasses,\n icon,\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n trueValue,\n } = useSelectionControl(props)\n const uid = getUid()\n const id = computed(() => props.id || `input-${uid}`)\n const isFocused = shallowRef(false)\n const isFocusVisible = shallowRef(false)\n const input = ref<HTMLInputElement>()\n\n group?.onForceUpdate(() => {\n if (input.value) {\n input.value.checked = model.value\n }\n })\n\n function onFocus (e: FocusEvent) {\n isFocused.value = true\n if (matchesSelector(e.target as HTMLElement, ':focus-visible') !== false) {\n isFocusVisible.value = true\n }\n }\n\n function onBlur () {\n isFocused.value = false\n isFocusVisible.value = false\n }\n\n function onInput (e: Event) {\n if (props.readonly && group) {\n nextTick(() => group.forceUpdate())\n }\n model.value = (e.target as HTMLInputElement).checked\n }\n\n useRender(() => {\n const label = slots.label\n ? slots.label({\n label: props.label,\n props: { for: id.value },\n })\n : props.label\n const [rootAttrs, inputAttrs] = filterInputAttrs(attrs)\n\n const inputNode = (\n <input\n ref={ input }\n checked={ model.value }\n disabled={ !!(props.readonly || props.disabled) }\n id={ id.value }\n onBlur={ onBlur }\n onFocus={ onFocus }\n onInput={ onInput }\n aria-disabled={ !!(props.readonly || props.disabled) }\n type={ props.type }\n value={ trueValue.value }\n name={ props.name }\n aria-checked={ props.type === 'checkbox' ? model.value : undefined }\n { ...inputAttrs }\n />\n )\n\n return (\n <div\n class={[\n 'v-selection-control',\n {\n 'v-selection-control--dirty': model.value,\n 'v-selection-control--disabled': props.disabled,\n 'v-selection-control--error': props.error,\n 'v-selection-control--focused': isFocused.value,\n 'v-selection-control--focus-visible': isFocusVisible.value,\n 'v-selection-control--inline': props.inline,\n },\n densityClasses.value,\n props.class,\n ]}\n { ...rootAttrs }\n style={ props.style }\n >\n <div\n class={[\n 'v-selection-control__wrapper',\n textColorClasses.value,\n ]}\n style={ textColorStyles.value }\n >\n { slots.default?.({\n backgroundColorClasses,\n backgroundColorStyles,\n })}\n\n <div\n class={[\n 'v-selection-control__input',\n ]}\n v-ripple={ props.ripple && [\n !props.disabled && !props.readonly,\n null,\n ['center', 'circle'],\n ]}\n >\n { slots.input?.({\n model,\n textColorClasses,\n textColorStyles,\n backgroundColorClasses,\n backgroundColorStyles,\n inputNode,\n icon: icon.value,\n props: {\n onFocus,\n onBlur,\n id: id.value,\n },\n } satisfies SelectionControlSlot) ?? (\n <>\n { icon.value && <VIcon key=\"icon\" icon={ icon.value } /> }\n\n { inputNode }\n </>\n )}\n </div>\n </div>\n\n { label && (\n <VLabel for={ id.value } clickable onClick={ (e: Event) => e.stopPropagation() }>\n { label }\n </VLabel>\n )}\n </div>\n )\n })\n\n return {\n isFocused,\n input,\n }\n },\n})\n\nexport type VSelectionControl = InstanceType<typeof VSelectionControl>\n"],"mappings":"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"}
@@ -130,6 +130,7 @@ declare const VSelectionControl: {
130
130
  defaultsTarget?: string | undefined;
131
131
  falseIcon?: IconValue | undefined;
132
132
  trueIcon?: IconValue | undefined;
133
+ baseColor?: string | undefined;
133
134
  trueValue?: any;
134
135
  falseValue?: any;
135
136
  };
@@ -182,6 +183,7 @@ declare const VSelectionControl: {
182
183
  defaultsTarget?: string | undefined;
183
184
  falseIcon?: IconValue | undefined;
184
185
  trueIcon?: IconValue | undefined;
186
+ baseColor?: string | undefined;
185
187
  trueValue?: any;
186
188
  falseValue?: any;
187
189
  } & {
@@ -259,6 +261,7 @@ declare const VSelectionControl: {
259
261
  defaultsTarget?: string | undefined;
260
262
  falseIcon?: IconValue | undefined;
261
263
  trueIcon?: IconValue | undefined;
264
+ baseColor?: string | undefined;
262
265
  trueValue?: any;
263
266
  falseValue?: any;
264
267
  } & {
@@ -292,6 +295,7 @@ declare const VSelectionControl: {
292
295
  defaultsTarget?: string | undefined;
293
296
  falseIcon?: IconValue | undefined;
294
297
  trueIcon?: IconValue | undefined;
298
+ baseColor?: string | undefined;
295
299
  trueValue?: any;
296
300
  falseValue?: any;
297
301
  } & {
@@ -373,6 +377,7 @@ declare const VSelectionControl: {
373
377
  default: typeof deepEqual;
374
378
  };
375
379
  label: StringConstructor;
380
+ baseColor: StringConstructor;
376
381
  trueValue: null;
377
382
  falseValue: null;
378
383
  value: null;
@@ -416,6 +421,7 @@ declare const VSelectionControl: {
416
421
  default: typeof deepEqual;
417
422
  };
418
423
  label: StringConstructor;
424
+ baseColor: StringConstructor;
419
425
  trueValue: null;
420
426
  falseValue: null;
421
427
  value: null;
@@ -5,8 +5,8 @@ import "./VSlideGroup.css";
5
5
  // Components
6
6
  import { VFadeTransition } from "../transitions/index.mjs";
7
7
  import { VIcon } from "../VIcon/index.mjs"; // Composables
8
- import { useDisplay } from "../../composables/index.mjs";
9
8
  import { makeComponentProps } from "../../composables/component.mjs";
9
+ import { makeDisplayProps, useDisplay } from "../../composables/display.mjs";
10
10
  import { makeGroupProps, useGroup } from "../../composables/group.mjs";
11
11
  import { IconValue } from "../../composables/icons.mjs";
12
12
  import { useRtl } from "../../composables/locale.mjs";
@@ -39,6 +39,7 @@ export const makeVSlideGroupProps = propsFactory({
39
39
  validator: v => typeof v === 'boolean' || ['always', 'desktop', 'mobile'].includes(v)
40
40
  },
41
41
  ...makeComponentProps(),
42
+ ...makeDisplayProps(),
42
43
  ...makeTagProps(),
43
44
  ...makeGroupProps({
44
45
  selectedClass: 'v-slide-group-item--active'
@@ -58,8 +59,9 @@ export const VSlideGroup = genericComponent()({
58
59
  isRtl
59
60
  } = useRtl();
60
61
  const {
62
+ displayClasses,
61
63
  mobile
62
- } = useDisplay();
64
+ } = useDisplay(props);
63
65
  const group = useGroup(props, props.symbol);
64
66
  const isOverflowing = shallowRef(false);
65
67
  const scrollOffset = shallowRef(0);
@@ -279,7 +281,7 @@ export const VSlideGroup = genericComponent()({
279
281
  'v-slide-group--vertical': !isHorizontal.value,
280
282
  'v-slide-group--has-affixes': hasAffixes.value,
281
283
  'v-slide-group--is-overflowing': isOverflowing.value
282
- }, props.class],
284
+ }, displayClasses.value, props.class],
283
285
  "style": props.style,
284
286
  "tabindex": isFocused.value || group.selected.value.length ? -1 : 0,
285
287
  "onFocus": onFocus
@@ -1 +1 @@
1
- {"version":3,"file":"VSlideGroup.mjs","names":["VFadeTransition","VIcon","useDisplay","makeComponentProps","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","bias","calculateCenteredOffset","calculateUpdatedOffset","clamp","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","direction","type","String","default","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","mobile","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","currentScrollOffset","disableTransition","startTouch","startOffset","onTouchstart","e","sign","touches","onTouchmove","onTouchend","maxScrollOffset","onScroll","isFocused","onFocusin","el","composedPath","onFocusout","onFocus","relatedTarget","contains","focus","onKeydown","key","location","focusable","querySelector","nextElementSibling","previousElementSibling","firstElementChild","lastElementChild","scrollTo","newAbsoluteOffset","contentStyles","scrollAmount","transform","transition","willChange","slotProps","next","prev","select","isSelected","hasAffixes","Math","abs","hasPrev","hasNext","_createVNode","tag","class","style","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport { bias, calculateCenteredOffset, calculateUpdatedOffset } from './helpers'\nimport { clamp, focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n next: GroupProvide['next']\n prev: GroupProvide['prev']\n select: GroupProvide['select']\n isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n default: SlideGroupSlot\n prev: SlideGroupSlot\n next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n symbol: {\n type: null,\n default: VSlideGroupSymbol,\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n\n ...makeComponentProps(),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<VSlideGroupSlots>()({\n name: 'VSlideGroup',\n\n props: makeVSlideGroupProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { mobile } = useDisplay()\n const group = useGroup(props, props.symbol)\n const isOverflowing = shallowRef(false)\n const scrollOffset = shallowRef(0)\n const containerSize = shallowRef(0)\n const contentSize = shallowRef(0)\n const isHorizontal = computed(() => props.direction === 'horizontal')\n\n const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[0])\n })\n\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n })\n\n if (IN_BROWSER) {\n let frame = -1\n watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n containerSize.value = containerRect.value[sizeProperty]\n contentSize.value = contentRect.value[sizeProperty]\n\n isOverflowing.value = containerSize.value + 1 < contentSize.value\n }\n\n if (firstSelectedIndex.value >= 0 && contentRef.value) {\n // TODO: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.value.children[lastSelectedIndex.value] as HTMLElement\n\n if (firstSelectedIndex.value === 0 || !isOverflowing.value) {\n scrollOffset.value = 0\n } else if (props.centerActive) {\n scrollOffset.value = calculateCenteredOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n isHorizontal: isHorizontal.value,\n })\n } else if (isOverflowing.value) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n })\n }\n }\n })\n })\n }\n\n const disableTransition = shallowRef(false)\n\n let startTouch = 0\n let startOffset = 0\n\n function onTouchstart (e: TouchEvent) {\n const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n startOffset = sign * scrollOffset.value\n startTouch = e.touches[0][sizeProperty]\n disableTransition.value = true\n }\n\n function onTouchmove (e: TouchEvent) {\n if (!isOverflowing.value) return\n\n const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n scrollOffset.value = sign * (startOffset + startTouch - e.touches[0][sizeProperty])\n }\n\n function onTouchend (e: TouchEvent) {\n const maxScrollOffset = contentSize.value - containerSize.value\n\n if (scrollOffset.value < 0 || !isOverflowing.value) {\n scrollOffset.value = 0\n } else if (scrollOffset.value >= maxScrollOffset) {\n scrollOffset.value = maxScrollOffset\n }\n\n disableTransition.value = false\n }\n\n function onScroll () {\n if (!containerRef.value) return\n\n containerRef.value[isHorizontal.value ? 'scrollLeft' : 'scrollTop'] = 0\n }\n\n const isFocused = shallowRef(false)\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n\n if (!isOverflowing.value || !contentRef.value) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.value.children) {\n if (item === el) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement: item as HTMLElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n })\n return\n }\n }\n }\n }\n\n function onFocusout (e: FocusEvent) {\n isFocused.value = false\n }\n\n function onFocus (e: FocusEvent) {\n if (\n !isFocused.value &&\n !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget as Node))\n ) focus()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!contentRef.value) return\n\n if (isHorizontal.value) {\n if (e.key === 'ArrowRight') {\n focus(isRtl.value ? 'prev' : 'next')\n } else if (e.key === 'ArrowLeft') {\n focus(isRtl.value ? 'next' : 'prev')\n }\n } else {\n if (e.key === 'ArrowDown') {\n focus('next')\n } else if (e.key === 'ArrowUp') {\n focus('prev')\n }\n }\n\n if (e.key === 'Home') {\n focus('first')\n } else if (e.key === 'End') {\n focus('last')\n }\n }\n\n function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n if (!contentRef.value) return\n\n if (!location) {\n const focusable = focusableChildren(contentRef.value)\n focusable[0]?.focus()\n } else if (location === 'next') {\n const el = contentRef.value.querySelector(':focus')?.nextElementSibling as HTMLElement | undefined\n if (el) el.focus()\n else focus('first')\n } else if (location === 'prev') {\n const el = contentRef.value.querySelector(':focus')?.previousElementSibling as HTMLElement | undefined\n if (el) el.focus()\n else focus('last')\n } else if (location === 'first') {\n (contentRef.value.firstElementChild as HTMLElement)?.focus()\n } else if (location === 'last') {\n (contentRef.value.lastElementChild as HTMLElement)?.focus()\n }\n }\n\n function scrollTo (location: 'prev' | 'next') {\n const newAbsoluteOffset = scrollOffset.value + (location === 'prev' ? -1 : 1) * containerSize.value\n\n scrollOffset.value = clamp(newAbsoluteOffset, 0, contentSize.value - containerSize.value)\n }\n\n const contentStyles = computed(() => {\n // This adds friction when scrolling the 'wrong' way when at max offset\n let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value\n ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value)\n : -scrollOffset.value\n\n // This adds friction when scrolling the 'wrong' way when at min offset\n if (scrollOffset.value <= 0) {\n scrollAmount = bias(-scrollOffset.value)\n }\n\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n return {\n transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,\n transition: disableTransition.value ? 'none' : '',\n willChange: disableTransition.value ? 'transform' : '',\n }\n })\n\n const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected,\n }))\n\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !mobile.value\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return isOverflowing.value || Math.abs(scrollOffset.value) > 0\n\n // Always show on mobile\n case 'mobile': return (\n mobile.value ||\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !mobile.value &&\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n }\n })\n\n const hasPrev = computed(() => {\n return Math.abs(scrollOffset.value) > 0\n })\n\n const hasNext = computed(() => {\n // Check one scroll ahead to know the width of right-most item\n return contentSize.value > Math.abs(scrollOffset.value) + containerSize.value\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-slide-group',\n {\n 'v-slide-group--vertical': !isHorizontal.value,\n 'v-slide-group--has-affixes': hasAffixes.value,\n 'v-slide-group--is-overflowing': isOverflowing.value,\n },\n props.class,\n ]}\n style={ props.style }\n tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n onFocus={ onFocus }\n >\n { hasAffixes.value && (\n <div\n key=\"prev\"\n class={[\n 'v-slide-group__prev',\n { 'v-slide-group__prev--disabled': !hasPrev.value },\n ]}\n onClick={ () => scrollTo('prev') }\n >\n { slots.prev?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n\n <div\n key=\"container\"\n ref={ containerRef }\n class=\"v-slide-group__container\"\n onScroll={ onScroll }\n >\n <div\n ref={ contentRef }\n class=\"v-slide-group__content\"\n style={ contentStyles.value }\n onTouchstartPassive={ onTouchstart }\n onTouchmovePassive={ onTouchmove }\n onTouchendPassive={ onTouchend }\n onFocusin={ onFocusin }\n onFocusout={ onFocusout }\n onKeydown={ onKeydown }\n >\n { slots.default?.(slotProps.value) }\n </div>\n </div>\n\n { hasAffixes.value && (\n <div\n key=\"next\"\n class={[\n 'v-slide-group__next',\n { 'v-slide-group__next--disabled': !hasNext.value },\n ]}\n onClick={ () => scrollTo('next') }\n >\n { slots.next?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n </props.tag>\n ))\n\n return {\n selected: group.selected,\n scrollTo,\n scrollOffset,\n focus,\n }\n },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":";AAAA;AACA;;AAEA;AAAA,SACSA,eAAe;AAAA,SACfC,KAAK,8BAEd;AAAA,SACSC,UAAU;AAAA,SACVC,kBAAkB;AAAA,SAClBC,cAAc,EAAEC,QAAQ;AAAA,SACxBC,SAAS;AAAA,SACTC,MAAM;AAAA,SACNC,iBAAiB;AAAA,SACjBC,YAAY,qCAErB;AACA,SAASC,QAAQ,EAAEC,UAAU,EAAEC,KAAK,QAAQ,KAAK;AAAA,SACxCC,IAAI,EAAEC,uBAAuB,EAAEC,sBAAsB;AAAA,SACrDC,KAAK,EAAEC,iBAAiB,EAAEC,gBAAgB,EAAEC,UAAU,EAAEC,YAAY,EAAEC,SAAS,gCAExF;AAIA,OAAO,MAAMC,iBAA6C,GAAGC,MAAM,CAACC,GAAG,CAAC,uBAAuB,CAAC;AAehG,OAAO,MAAMC,oBAAoB,GAAGL,YAAY,CAAC;EAC/CM,YAAY,EAAEC,OAAO;EACrBC,SAAS,EAAE;IACTC,IAAI,EAAEC,MAA6C;IACnDC,OAAO,EAAE;EACX,CAAC;EACDC,MAAM,EAAE;IACNH,IAAI,EAAE,IAAI;IACVE,OAAO,EAAET;EACX,CAAC;EACDW,QAAQ,EAAE;IACRJ,IAAI,EAAEvB,SAAS;IACfyB,OAAO,EAAE;EACX,CAAC;EACDG,QAAQ,EAAE;IACRL,IAAI,EAAEvB,SAAS;IACfyB,OAAO,EAAE;EACX,CAAC;EACDI,UAAU,EAAE;IACVN,IAAI,EAAE,CAACF,OAAO,EAAEG,MAAM,CAAC;IACvBM,SAAS,EAAGC,CAAM,IAChB,OAAOA,CAAC,KAAK,SAAS,IAAI,CACxB,QAAQ,EACR,SAAS,EACT,QAAQ,CACT,CAACC,QAAQ,CAACD,CAAC;EAEhB,CAAC;EAED,GAAGlC,kBAAkB,EAAE;EACvB,GAAGM,YAAY,EAAE;EACjB,GAAGL,cAAc,CAAC;IAChBmC,aAAa,EAAE;EACjB,CAAC;AACH,CAAC,EAAE,aAAa,CAAC;AAEjB,OAAO,MAAMC,WAAW,GAAGtB,gBAAgB,EAAoB,CAAC;EAC9DuB,IAAI,EAAE,aAAa;EAEnBC,KAAK,EAAEjB,oBAAoB,EAAE;EAE7BkB,KAAK,EAAE;IACL,mBAAmB,EAAGC,KAAU,IAAK;EACvC,CAAC;EAEDC,KAAKA,CAAEH,KAAK,EAAAI,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACrB,MAAM;MAAEE;IAAM,CAAC,GAAGzC,MAAM,EAAE;IAC1B,MAAM;MAAE0C;IAAO,CAAC,GAAG/C,UAAU,EAAE;IAC/B,MAAMgD,KAAK,GAAG7C,QAAQ,CAACqC,KAAK,EAAEA,KAAK,CAACV,MAAM,CAAC;IAC3C,MAAMmB,aAAa,GAAGxC,UAAU,CAAC,KAAK,CAAC;IACvC,MAAMyC,YAAY,GAAGzC,UAAU,CAAC,CAAC,CAAC;IAClC,MAAM0C,aAAa,GAAG1C,UAAU,CAAC,CAAC,CAAC;IACnC,MAAM2C,WAAW,GAAG3C,UAAU,CAAC,CAAC,CAAC;IACjC,MAAM4C,YAAY,GAAG7C,QAAQ,CAAC,MAAMgC,KAAK,CAACd,SAAS,KAAK,YAAY,CAAC;IAErE,MAAM;MAAE4B,SAAS,EAAEC,YAAY;MAAEC,WAAW,EAAEC;IAAc,CAAC,GAAGnD,iBAAiB,EAAE;IACnF,MAAM;MAAEgD,SAAS,EAAEI,UAAU;MAAEF;IAAY,CAAC,GAAGlD,iBAAiB,EAAE;IAElE,MAAMqD,kBAAkB,GAAGnD,QAAQ,CAAC,MAAM;MACxC,IAAI,CAACwC,KAAK,CAACY,QAAQ,CAAClB,KAAK,CAACmB,MAAM,EAAE,OAAO,CAAC,CAAC;MAE3C,OAAOb,KAAK,CAACc,KAAK,CAACpB,KAAK,CAACqB,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,EAAE,KAAKjB,KAAK,CAACY,QAAQ,CAAClB,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,CAAC,CAAC;IAEF,MAAMwB,iBAAiB,GAAG1D,QAAQ,CAAC,MAAM;MACvC,IAAI,CAACwC,KAAK,CAACY,QAAQ,CAAClB,KAAK,CAACmB,MAAM,EAAE,OAAO,CAAC,CAAC;MAE3C,OAAOb,KAAK,CAACc,KAAK,CAACpB,KAAK,CAACqB,SAAS,CAACC,IAAI,IAAIA,IAAI,CAACC,EAAE,KAAKjB,KAAK,CAACY,QAAQ,CAAClB,KAAK,CAACM,KAAK,CAACY,QAAQ,CAAClB,KAAK,CAACmB,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/G,CAAC,CAAC;IAEF,IAAI5C,UAAU,EAAE;MACd,IAAIkD,KAAK,GAAG,CAAC,CAAC;MACdzD,KAAK,CAAC,MAAM,CAACsC,KAAK,CAACY,QAAQ,CAAClB,KAAK,EAAEe,aAAa,CAACf,KAAK,EAAEc,WAAW,CAACd,KAAK,EAAEW,YAAY,CAACX,KAAK,CAAC,EAAE,MAAM;QACpG0B,oBAAoB,CAACD,KAAK,CAAC;QAC3BA,KAAK,GAAGE,qBAAqB,CAAC,MAAM;UAClC,IAAIZ,aAAa,CAACf,KAAK,IAAIc,WAAW,CAACd,KAAK,EAAE;YAC5C,MAAM4B,YAAY,GAAGjB,YAAY,CAACX,KAAK,GAAG,OAAO,GAAG,QAAQ;YAE5DS,aAAa,CAACT,KAAK,GAAGe,aAAa,CAACf,KAAK,CAAC4B,YAAY,CAAC;YACvDlB,WAAW,CAACV,KAAK,GAAGc,WAAW,CAACd,KAAK,CAAC4B,YAAY,CAAC;YAEnDrB,aAAa,CAACP,KAAK,GAAGS,aAAa,CAACT,KAAK,GAAG,CAAC,GAAGU,WAAW,CAACV,KAAK;UACnE;UAEA,IAAIiB,kBAAkB,CAACjB,KAAK,IAAI,CAAC,IAAIgB,UAAU,CAAChB,KAAK,EAAE;YACrD;YACA,MAAM6B,eAAe,GAAGb,UAAU,CAAChB,KAAK,CAAC8B,QAAQ,CAACN,iBAAiB,CAACxB,KAAK,CAAgB;YAEzF,IAAIiB,kBAAkB,CAACjB,KAAK,KAAK,CAAC,IAAI,CAACO,aAAa,CAACP,KAAK,EAAE;cAC1DQ,YAAY,CAACR,KAAK,GAAG,CAAC;YACxB,CAAC,MAAM,IAAIF,KAAK,CAAChB,YAAY,EAAE;cAC7B0B,YAAY,CAACR,KAAK,GAAG9B,uBAAuB,CAAC;gBAC3C2D,eAAe;gBACfpB,aAAa,EAAEA,aAAa,CAACT,KAAK;gBAClCU,WAAW,EAAEA,WAAW,CAACV,KAAK;gBAC9BI,KAAK,EAAEA,KAAK,CAACJ,KAAK;gBAClBW,YAAY,EAAEA,YAAY,CAACX;cAC7B,CAAC,CAAC;YACJ,CAAC,MAAM,IAAIO,aAAa,CAACP,KAAK,EAAE;cAC9BQ,YAAY,CAACR,KAAK,GAAG7B,sBAAsB,CAAC;gBAC1C0D,eAAe;gBACfpB,aAAa,EAAEA,aAAa,CAACT,KAAK;gBAClCU,WAAW,EAAEA,WAAW,CAACV,KAAK;gBAC9BI,KAAK,EAAEA,KAAK,CAACJ,KAAK;gBAClB+B,mBAAmB,EAAEvB,YAAY,CAACR,KAAK;gBACvCW,YAAY,EAAEA,YAAY,CAACX;cAC7B,CAAC,CAAC;YACJ;UACF;QACF,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;IAEA,MAAMgC,iBAAiB,GAAGjE,UAAU,CAAC,KAAK,CAAC;IAE3C,IAAIkE,UAAU,GAAG,CAAC;IAClB,IAAIC,WAAW,GAAG,CAAC;IAEnB,SAASC,YAAYA,CAAEC,CAAa,EAAE;MACpC,MAAMR,YAAY,GAAGjB,YAAY,CAACX,KAAK,GAAG,SAAS,GAAG,SAAS;MAC/D,MAAMqC,IAAI,GAAGjC,KAAK,CAACJ,KAAK,IAAIW,YAAY,CAACX,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MACvDkC,WAAW,GAAGG,IAAI,GAAG7B,YAAY,CAACR,KAAK;MACvCiC,UAAU,GAAGG,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,CAACV,YAAY,CAAC;MACvCI,iBAAiB,CAAChC,KAAK,GAAG,IAAI;IAChC;IAEA,SAASuC,WAAWA,CAAEH,CAAa,EAAE;MACnC,IAAI,CAAC7B,aAAa,CAACP,KAAK,EAAE;MAE1B,MAAM4B,YAAY,GAAGjB,YAAY,CAACX,KAAK,GAAG,SAAS,GAAG,SAAS;MAC/D,MAAMqC,IAAI,GAAGjC,KAAK,CAACJ,KAAK,IAAIW,YAAY,CAACX,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MACvDQ,YAAY,CAACR,KAAK,GAAGqC,IAAI,IAAIH,WAAW,GAAGD,UAAU,GAAGG,CAAC,CAACE,OAAO,CAAC,CAAC,CAAC,CAACV,YAAY,CAAC,CAAC;IACrF;IAEA,SAASY,UAAUA,CAAEJ,CAAa,EAAE;MAClC,MAAMK,eAAe,GAAG/B,WAAW,CAACV,KAAK,GAAGS,aAAa,CAACT,KAAK;MAE/D,IAAIQ,YAAY,CAACR,KAAK,GAAG,CAAC,IAAI,CAACO,aAAa,CAACP,KAAK,EAAE;QAClDQ,YAAY,CAACR,KAAK,GAAG,CAAC;MACxB,CAAC,MAAM,IAAIQ,YAAY,CAACR,KAAK,IAAIyC,eAAe,EAAE;QAChDjC,YAAY,CAACR,KAAK,GAAGyC,eAAe;MACtC;MAEAT,iBAAiB,CAAChC,KAAK,GAAG,KAAK;IACjC;IAEA,SAAS0C,QAAQA,CAAA,EAAI;MACnB,IAAI,CAAC7B,YAAY,CAACb,KAAK,EAAE;MAEzBa,YAAY,CAACb,KAAK,CAACW,YAAY,CAACX,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC;IACzE;IAEA,MAAM2C,SAAS,GAAG5E,UAAU,CAAC,KAAK,CAAC;IACnC,SAAS6E,SAASA,CAAER,CAAa,EAAE;MACjCO,SAAS,CAAC3C,KAAK,GAAG,IAAI;MAEtB,IAAI,CAACO,aAAa,CAACP,KAAK,IAAI,CAACgB,UAAU,CAAChB,KAAK,EAAE;;MAE/C;MACA;MACA,KAAK,MAAM6C,EAAE,IAAIT,CAAC,CAACU,YAAY,EAAE,EAAE;QACjC,KAAK,MAAMxB,IAAI,IAAIN,UAAU,CAAChB,KAAK,CAAC8B,QAAQ,EAAE;UAC5C,IAAIR,IAAI,KAAKuB,EAAE,EAAE;YACfrC,YAAY,CAACR,KAAK,GAAG7B,sBAAsB,CAAC;cAC1C0D,eAAe,EAAEP,IAAmB;cACpCb,aAAa,EAAEA,aAAa,CAACT,KAAK;cAClCU,WAAW,EAAEA,WAAW,CAACV,KAAK;cAC9BI,KAAK,EAAEA,KAAK,CAACJ,KAAK;cAClB+B,mBAAmB,EAAEvB,YAAY,CAACR,KAAK;cACvCW,YAAY,EAAEA,YAAY,CAACX;YAC7B,CAAC,CAAC;YACF;UACF;QACF;MACF;IACF;IAEA,SAAS+C,UAAUA,CAAEX,CAAa,EAAE;MAClCO,SAAS,CAAC3C,KAAK,GAAG,KAAK;IACzB;IAEA,SAASgD,OAAOA,CAAEZ,CAAa,EAAE;MAC/B,IACE,CAACO,SAAS,CAAC3C,KAAK,IAChB,EAAEoC,CAAC,CAACa,aAAa,IAAIjC,UAAU,CAAChB,KAAK,EAAEkD,QAAQ,CAACd,CAAC,CAACa,aAAa,CAAS,CAAC,EACzEE,KAAK,EAAE;IACX;IAEA,SAASC,SAASA,CAAEhB,CAAgB,EAAE;MACpC,IAAI,CAACpB,UAAU,CAAChB,KAAK,EAAE;MAEvB,IAAIW,YAAY,CAACX,KAAK,EAAE;QACtB,IAAIoC,CAAC,CAACiB,GAAG,KAAK,YAAY,EAAE;UAC1BF,KAAK,CAAC/C,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QACtC,CAAC,MAAM,IAAIoC,CAAC,CAACiB,GAAG,KAAK,WAAW,EAAE;UAChCF,KAAK,CAAC/C,KAAK,CAACJ,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;QACtC;MACF,CAAC,MAAM;QACL,IAAIoC,CAAC,CAACiB,GAAG,KAAK,WAAW,EAAE;UACzBF,KAAK,CAAC,MAAM,CAAC;QACf,CAAC,MAAM,IAAIf,CAAC,CAACiB,GAAG,KAAK,SAAS,EAAE;UAC9BF,KAAK,CAAC,MAAM,CAAC;QACf;MACF;MAEA,IAAIf,CAAC,CAACiB,GAAG,KAAK,MAAM,EAAE;QACpBF,KAAK,CAAC,OAAO,CAAC;MAChB,CAAC,MAAM,IAAIf,CAAC,CAACiB,GAAG,KAAK,KAAK,EAAE;QAC1BF,KAAK,CAAC,MAAM,CAAC;MACf;IACF;IAEA,SAASA,KAAKA,CAAEG,QAA6C,EAAE;MAC7D,IAAI,CAACtC,UAAU,CAAChB,KAAK,EAAE;MAEvB,IAAI,CAACsD,QAAQ,EAAE;QACb,MAAMC,SAAS,GAAGlF,iBAAiB,CAAC2C,UAAU,CAAChB,KAAK,CAAC;QACrDuD,SAAS,CAAC,CAAC,CAAC,EAAEJ,KAAK,EAAE;MACvB,CAAC,MAAM,IAAIG,QAAQ,KAAK,MAAM,EAAE;QAC9B,MAAMT,EAAE,GAAG7B,UAAU,CAAChB,KAAK,CAACwD,aAAa,CAAC,QAAQ,CAAC,EAAEC,kBAA6C;QAClG,IAAIZ,EAAE,EAAEA,EAAE,CAACM,KAAK,EAAE,MACbA,KAAK,CAAC,OAAO,CAAC;MACrB,CAAC,MAAM,IAAIG,QAAQ,KAAK,MAAM,EAAE;QAC9B,MAAMT,EAAE,GAAG7B,UAAU,CAAChB,KAAK,CAACwD,aAAa,CAAC,QAAQ,CAAC,EAAEE,sBAAiD;QACtG,IAAIb,EAAE,EAAEA,EAAE,CAACM,KAAK,EAAE,MACbA,KAAK,CAAC,MAAM,CAAC;MACpB,CAAC,MAAM,IAAIG,QAAQ,KAAK,OAAO,EAAE;QAC9BtC,UAAU,CAAChB,KAAK,CAAC2D,iBAAiB,EAAkBR,KAAK,EAAE;MAC9D,CAAC,MAAM,IAAIG,QAAQ,KAAK,MAAM,EAAE;QAC7BtC,UAAU,CAAChB,KAAK,CAAC4D,gBAAgB,EAAkBT,KAAK,EAAE;MAC7D;IACF;IAEA,SAASU,QAAQA,CAAEP,QAAyB,EAAE;MAC5C,MAAMQ,iBAAiB,GAAGtD,YAAY,CAACR,KAAK,GAAG,CAACsD,QAAQ,KAAK,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI7C,aAAa,CAACT,KAAK;MAEnGQ,YAAY,CAACR,KAAK,GAAG5B,KAAK,CAAC0F,iBAAiB,EAAE,CAAC,EAAEpD,WAAW,CAACV,KAAK,GAAGS,aAAa,CAACT,KAAK,CAAC;IAC3F;IAEA,MAAM+D,aAAa,GAAGjG,QAAQ,CAAC,MAAM;MACnC;MACA,IAAIkG,YAAY,GAAGxD,YAAY,CAACR,KAAK,GAAGU,WAAW,CAACV,KAAK,GAAGS,aAAa,CAACT,KAAK,GAC3E,EAAEU,WAAW,CAACV,KAAK,GAAGS,aAAa,CAACT,KAAK,CAAC,GAAG/B,IAAI,CAACyC,WAAW,CAACV,KAAK,GAAGS,aAAa,CAACT,KAAK,GAAGQ,YAAY,CAACR,KAAK,CAAC,GAC/G,CAACQ,YAAY,CAACR,KAAK;;MAEvB;MACA,IAAIQ,YAAY,CAACR,KAAK,IAAI,CAAC,EAAE;QAC3BgE,YAAY,GAAG/F,IAAI,CAAC,CAACuC,YAAY,CAACR,KAAK,CAAC;MAC1C;MAEA,MAAMqC,IAAI,GAAGjC,KAAK,CAACJ,KAAK,IAAIW,YAAY,CAACX,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;MACvD,OAAO;QACLiE,SAAS,EAAG,YAAWtD,YAAY,CAACX,KAAK,GAAG,GAAG,GAAG,GAAI,IAAGqC,IAAI,GAAG2B,YAAa,KAAI;QACjFE,UAAU,EAAElC,iBAAiB,CAAChC,KAAK,GAAG,MAAM,GAAG,EAAE;QACjDmE,UAAU,EAAEnC,iBAAiB,CAAChC,KAAK,GAAG,WAAW,GAAG;MACtD,CAAC;IACH,CAAC,CAAC;IAEF,MAAMoE,SAAS,GAAGtG,QAAQ,CAAC,OAAO;MAChCuG,IAAI,EAAE/D,KAAK,CAAC+D,IAAI;MAChBC,IAAI,EAAEhE,KAAK,CAACgE,IAAI;MAChBC,MAAM,EAAEjE,KAAK,CAACiE,MAAM;MACpBC,UAAU,EAAElE,KAAK,CAACkE;IACpB,CAAC,CAAC,CAAC;IAEH,MAAMC,UAAU,GAAG3G,QAAQ,CAAC,MAAM;MAChC,QAAQgC,KAAK,CAACP,UAAU;QACtB;QACA,KAAK,QAAQ;UAAE,OAAO,IAAI;;QAE1B;QACA,KAAK,SAAS;UAAE,OAAO,CAACc,MAAM,CAACL,KAAK;;QAEpC;QACA;QACA,KAAK,IAAI;UAAE,OAAOO,aAAa,CAACP,KAAK,IAAI0E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACR,KAAK,CAAC,GAAG,CAAC;;QAEzE;QACA,KAAK,QAAQ;UAAE,OACbK,MAAM,CAACL,KAAK,IACXO,aAAa,CAACP,KAAK,IAAI0E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACR,KAAK,CAAC,GAAG,CAAE;;QAG3D;QACA;QACA;QACA;UAAS,OACP,CAACK,MAAM,CAACL,KAAK,KACZO,aAAa,CAACP,KAAK,IAAI0E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACR,KAAK,CAAC,GAAG,CAAC,CAAC;MAC1D;IAEL,CAAC,CAAC;IAEF,MAAM4E,OAAO,GAAG9G,QAAQ,CAAC,MAAM;MAC7B,OAAO4G,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACR,KAAK,CAAC,GAAG,CAAC;IACzC,CAAC,CAAC;IAEF,MAAM6E,OAAO,GAAG/G,QAAQ,CAAC,MAAM;MAC7B;MACA,OAAO4C,WAAW,CAACV,KAAK,GAAG0E,IAAI,CAACC,GAAG,CAACnE,YAAY,CAACR,KAAK,CAAC,GAAGS,aAAa,CAACT,KAAK;IAC/E,CAAC,CAAC;IAEFvB,SAAS,CAAC,MAAAqG,YAAA,CAAAhF,KAAA,CAAAiF,GAAA;MAAA,SAEC,CACL,eAAe,EACf;QACE,yBAAyB,EAAE,CAACpE,YAAY,CAACX,KAAK;QAC9C,4BAA4B,EAAEyE,UAAU,CAACzE,KAAK;QAC9C,+BAA+B,EAAEO,aAAa,CAACP;MACjD,CAAC,EACDF,KAAK,CAACkF,KAAK,CACZ;MAAA,SACOlF,KAAK,CAACmF,KAAK;MAAA,YACPtC,SAAS,CAAC3C,KAAK,IAAIM,KAAK,CAACY,QAAQ,CAAClB,KAAK,CAACmB,MAAM,GAAI,CAAC,CAAC,GAAG,CAAC;MAAA,WAC1D6B;IAAO;MAAA7D,OAAA,EAAAA,CAAA,MAEfsF,UAAU,CAACzE,KAAK,IAAA8E,YAAA;QAAA,OAEV,MAAM;QAAA,SACH,CACL,qBAAqB,EACrB;UAAE,+BAA+B,EAAE,CAACF,OAAO,CAAC5E;QAAM,CAAC,CACpD;QAAA,WACSkF,CAAA,KAAMrB,QAAQ,CAAC,MAAM;MAAC,IAE9B1D,KAAK,CAACmE,IAAI,GAAGF,SAAS,CAACpE,KAAK,CAAC,IAAA8E,YAAA,CAAA1H,eAAA;QAAA+B,OAAA,EAAAA,CAAA,MAAA2F,YAAA,CAAAzH,KAAA;UAAA,QAEb+C,KAAK,CAACJ,KAAK,GAAGF,KAAK,CAACT,QAAQ,GAAGS,KAAK,CAACR;QAAQ;MAAA,EAE9D,EAEJ,EAAAwF,YAAA;QAAA,OAGK,WAAW;QAAA,OACTjE,YAAY;QAAA,SACZ,0BAA0B;QAAA,YACrB6B;MAAQ,IAAAoC,YAAA;QAAA,OAGX9D,UAAU;QAAA,SACV,wBAAwB;QAAA,SACtB+C,aAAa,CAAC/D,KAAK;QAAA,uBACLmC,YAAY;QAAA,sBACbI,WAAW;QAAA,qBACZC,UAAU;QAAA,aAClBI,SAAS;QAAA,cACRG,UAAU;QAAA,aACXK;MAAS,IAEnBjD,KAAK,CAAChB,OAAO,GAAGiF,SAAS,CAACpE,KAAK,CAAC,MAIpCyE,UAAU,CAACzE,KAAK,IAAA8E,YAAA;QAAA,OAEV,MAAM;QAAA,SACH,CACL,qBAAqB,EACrB;UAAE,+BAA+B,EAAE,CAACD,OAAO,CAAC7E;QAAM,CAAC,CACpD;QAAA,WACSkF,CAAA,KAAMrB,QAAQ,CAAC,MAAM;MAAC,IAE9B1D,KAAK,CAACkE,IAAI,GAAGD,SAAS,CAACpE,KAAK,CAAC,IAAA8E,YAAA,CAAA1H,eAAA;QAAA+B,OAAA,EAAAA,CAAA,MAAA2F,YAAA,CAAAzH,KAAA;UAAA,QAEb+C,KAAK,CAACJ,KAAK,GAAGF,KAAK,CAACR,QAAQ,GAAGQ,KAAK,CAACT;QAAQ;MAAA,EAE9D,EAEJ;IAAA,EAEJ,CAAC;IAEF,OAAO;MACL6B,QAAQ,EAAEZ,KAAK,CAACY,QAAQ;MACxB2C,QAAQ;MACRrD,YAAY;MACZ2C;IACF,CAAC;EACH;AACF,CAAC,CAAC"}
1
+ {"version":3,"file":"VSlideGroup.mjs","names":["VFadeTransition","VIcon","makeComponentProps","makeDisplayProps","useDisplay","makeGroupProps","useGroup","IconValue","useRtl","useResizeObserver","makeTagProps","computed","shallowRef","watch","bias","calculateCenteredOffset","calculateUpdatedOffset","clamp","focusableChildren","genericComponent","IN_BROWSER","propsFactory","useRender","VSlideGroupSymbol","Symbol","for","makeVSlideGroupProps","centerActive","Boolean","direction","type","String","default","symbol","nextIcon","prevIcon","showArrows","validator","v","includes","selectedClass","VSlideGroup","name","props","emits","value","setup","_ref","slots","isRtl","displayClasses","mobile","group","isOverflowing","scrollOffset","containerSize","contentSize","isHorizontal","resizeRef","containerRef","contentRect","containerRect","contentRef","firstSelectedIndex","selected","length","items","findIndex","item","id","lastSelectedIndex","frame","cancelAnimationFrame","requestAnimationFrame","sizeProperty","selectedElement","children","currentScrollOffset","disableTransition","startTouch","startOffset","onTouchstart","e","sign","touches","onTouchmove","onTouchend","maxScrollOffset","onScroll","isFocused","onFocusin","el","composedPath","onFocusout","onFocus","relatedTarget","contains","focus","onKeydown","key","location","focusable","querySelector","nextElementSibling","previousElementSibling","firstElementChild","lastElementChild","scrollTo","newAbsoluteOffset","contentStyles","scrollAmount","transform","transition","willChange","slotProps","next","prev","select","isSelected","hasAffixes","Math","abs","hasPrev","hasNext","_createVNode","tag","class","style","onClick"],"sources":["../../../src/components/VSlideGroup/VSlideGroup.tsx"],"sourcesContent":["// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport { VFadeTransition } from '@/components/transitions'\nimport { VIcon } from '@/components/VIcon'\n\n// Composables\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDisplayProps, useDisplay } from '@/composables/display'\nimport { makeGroupProps, useGroup } from '@/composables/group'\nimport { IconValue } from '@/composables/icons'\nimport { useRtl } from '@/composables/locale'\nimport { useResizeObserver } from '@/composables/resizeObserver'\nimport { makeTagProps } from '@/composables/tag'\n\n// Utilities\nimport { computed, shallowRef, watch } from 'vue'\nimport { bias, calculateCenteredOffset, calculateUpdatedOffset } from './helpers'\nimport { clamp, focusableChildren, genericComponent, IN_BROWSER, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { InjectionKey, PropType } from 'vue'\nimport type { GroupProvide } from '@/composables/group'\n\nexport const VSlideGroupSymbol: InjectionKey<GroupProvide> = Symbol.for('vuetify:v-slide-group')\n\ninterface SlideGroupSlot {\n next: GroupProvide['next']\n prev: GroupProvide['prev']\n select: GroupProvide['select']\n isSelected: GroupProvide['isSelected']\n}\n\ntype VSlideGroupSlots = {\n default: SlideGroupSlot\n prev: SlideGroupSlot\n next: SlideGroupSlot\n}\n\nexport const makeVSlideGroupProps = propsFactory({\n centerActive: Boolean,\n direction: {\n type: String as PropType<'horizontal' | 'vertical'>,\n default: 'horizontal',\n },\n symbol: {\n type: null,\n default: VSlideGroupSymbol,\n },\n nextIcon: {\n type: IconValue,\n default: '$next',\n },\n prevIcon: {\n type: IconValue,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: (v: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n\n ...makeComponentProps(),\n ...makeDisplayProps(),\n ...makeTagProps(),\n ...makeGroupProps({\n selectedClass: 'v-slide-group-item--active',\n }),\n}, 'VSlideGroup')\n\nexport const VSlideGroup = genericComponent<VSlideGroupSlots>()({\n name: 'VSlideGroup',\n\n props: makeVSlideGroupProps(),\n\n emits: {\n 'update:modelValue': (value: any) => true,\n },\n\n setup (props, { slots }) {\n const { isRtl } = useRtl()\n const { displayClasses, mobile } = useDisplay(props)\n const group = useGroup(props, props.symbol)\n const isOverflowing = shallowRef(false)\n const scrollOffset = shallowRef(0)\n const containerSize = shallowRef(0)\n const contentSize = shallowRef(0)\n const isHorizontal = computed(() => props.direction === 'horizontal')\n\n const { resizeRef: containerRef, contentRect: containerRect } = useResizeObserver()\n const { resizeRef: contentRef, contentRect } = useResizeObserver()\n\n const firstSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[0])\n })\n\n const lastSelectedIndex = computed(() => {\n if (!group.selected.value.length) return -1\n\n return group.items.value.findIndex(item => item.id === group.selected.value[group.selected.value.length - 1])\n })\n\n if (IN_BROWSER) {\n let frame = -1\n watch(() => [group.selected.value, containerRect.value, contentRect.value, isHorizontal.value], () => {\n cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n if (containerRect.value && contentRect.value) {\n const sizeProperty = isHorizontal.value ? 'width' : 'height'\n\n containerSize.value = containerRect.value[sizeProperty]\n contentSize.value = contentRect.value[sizeProperty]\n\n isOverflowing.value = containerSize.value + 1 < contentSize.value\n }\n\n if (firstSelectedIndex.value >= 0 && contentRef.value) {\n // TODO: Is this too naive? Should we store element references in group composable?\n const selectedElement = contentRef.value.children[lastSelectedIndex.value] as HTMLElement\n\n if (firstSelectedIndex.value === 0 || !isOverflowing.value) {\n scrollOffset.value = 0\n } else if (props.centerActive) {\n scrollOffset.value = calculateCenteredOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n isHorizontal: isHorizontal.value,\n })\n } else if (isOverflowing.value) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n })\n }\n }\n })\n })\n }\n\n const disableTransition = shallowRef(false)\n\n let startTouch = 0\n let startOffset = 0\n\n function onTouchstart (e: TouchEvent) {\n const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n startOffset = sign * scrollOffset.value\n startTouch = e.touches[0][sizeProperty]\n disableTransition.value = true\n }\n\n function onTouchmove (e: TouchEvent) {\n if (!isOverflowing.value) return\n\n const sizeProperty = isHorizontal.value ? 'clientX' : 'clientY'\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n scrollOffset.value = sign * (startOffset + startTouch - e.touches[0][sizeProperty])\n }\n\n function onTouchend (e: TouchEvent) {\n const maxScrollOffset = contentSize.value - containerSize.value\n\n if (scrollOffset.value < 0 || !isOverflowing.value) {\n scrollOffset.value = 0\n } else if (scrollOffset.value >= maxScrollOffset) {\n scrollOffset.value = maxScrollOffset\n }\n\n disableTransition.value = false\n }\n\n function onScroll () {\n if (!containerRef.value) return\n\n containerRef.value[isHorizontal.value ? 'scrollLeft' : 'scrollTop'] = 0\n }\n\n const isFocused = shallowRef(false)\n function onFocusin (e: FocusEvent) {\n isFocused.value = true\n\n if (!isOverflowing.value || !contentRef.value) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of e.composedPath()) {\n for (const item of contentRef.value.children) {\n if (item === el) {\n scrollOffset.value = calculateUpdatedOffset({\n selectedElement: item as HTMLElement,\n containerSize: containerSize.value,\n contentSize: contentSize.value,\n isRtl: isRtl.value,\n currentScrollOffset: scrollOffset.value,\n isHorizontal: isHorizontal.value,\n })\n return\n }\n }\n }\n }\n\n function onFocusout (e: FocusEvent) {\n isFocused.value = false\n }\n\n function onFocus (e: FocusEvent) {\n if (\n !isFocused.value &&\n !(e.relatedTarget && contentRef.value?.contains(e.relatedTarget as Node))\n ) focus()\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!contentRef.value) return\n\n if (isHorizontal.value) {\n if (e.key === 'ArrowRight') {\n focus(isRtl.value ? 'prev' : 'next')\n } else if (e.key === 'ArrowLeft') {\n focus(isRtl.value ? 'next' : 'prev')\n }\n } else {\n if (e.key === 'ArrowDown') {\n focus('next')\n } else if (e.key === 'ArrowUp') {\n focus('prev')\n }\n }\n\n if (e.key === 'Home') {\n focus('first')\n } else if (e.key === 'End') {\n focus('last')\n }\n }\n\n function focus (location?: 'next' | 'prev' | 'first' | 'last') {\n if (!contentRef.value) return\n\n if (!location) {\n const focusable = focusableChildren(contentRef.value)\n focusable[0]?.focus()\n } else if (location === 'next') {\n const el = contentRef.value.querySelector(':focus')?.nextElementSibling as HTMLElement | undefined\n if (el) el.focus()\n else focus('first')\n } else if (location === 'prev') {\n const el = contentRef.value.querySelector(':focus')?.previousElementSibling as HTMLElement | undefined\n if (el) el.focus()\n else focus('last')\n } else if (location === 'first') {\n (contentRef.value.firstElementChild as HTMLElement)?.focus()\n } else if (location === 'last') {\n (contentRef.value.lastElementChild as HTMLElement)?.focus()\n }\n }\n\n function scrollTo (location: 'prev' | 'next') {\n const newAbsoluteOffset = scrollOffset.value + (location === 'prev' ? -1 : 1) * containerSize.value\n\n scrollOffset.value = clamp(newAbsoluteOffset, 0, contentSize.value - containerSize.value)\n }\n\n const contentStyles = computed(() => {\n // This adds friction when scrolling the 'wrong' way when at max offset\n let scrollAmount = scrollOffset.value > contentSize.value - containerSize.value\n ? -(contentSize.value - containerSize.value) + bias(contentSize.value - containerSize.value - scrollOffset.value)\n : -scrollOffset.value\n\n // This adds friction when scrolling the 'wrong' way when at min offset\n if (scrollOffset.value <= 0) {\n scrollAmount = bias(-scrollOffset.value)\n }\n\n const sign = isRtl.value && isHorizontal.value ? -1 : 1\n return {\n transform: `translate${isHorizontal.value ? 'X' : 'Y'}(${sign * scrollAmount}px)`,\n transition: disableTransition.value ? 'none' : '',\n willChange: disableTransition.value ? 'transform' : '',\n }\n })\n\n const slotProps = computed(() => ({\n next: group.next,\n prev: group.prev,\n select: group.select,\n isSelected: group.isSelected,\n }))\n\n const hasAffixes = computed(() => {\n switch (props.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !mobile.value\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return isOverflowing.value || Math.abs(scrollOffset.value) > 0\n\n // Always show on mobile\n case 'mobile': return (\n mobile.value ||\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !mobile.value &&\n (isOverflowing.value || Math.abs(scrollOffset.value) > 0)\n )\n }\n })\n\n const hasPrev = computed(() => {\n return Math.abs(scrollOffset.value) > 0\n })\n\n const hasNext = computed(() => {\n // Check one scroll ahead to know the width of right-most item\n return contentSize.value > Math.abs(scrollOffset.value) + containerSize.value\n })\n\n useRender(() => (\n <props.tag\n class={[\n 'v-slide-group',\n {\n 'v-slide-group--vertical': !isHorizontal.value,\n 'v-slide-group--has-affixes': hasAffixes.value,\n 'v-slide-group--is-overflowing': isOverflowing.value,\n },\n displayClasses.value,\n props.class,\n ]}\n style={ props.style }\n tabindex={ (isFocused.value || group.selected.value.length) ? -1 : 0 }\n onFocus={ onFocus }\n >\n { hasAffixes.value && (\n <div\n key=\"prev\"\n class={[\n 'v-slide-group__prev',\n { 'v-slide-group__prev--disabled': !hasPrev.value },\n ]}\n onClick={ () => scrollTo('prev') }\n >\n { slots.prev?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.nextIcon : props.prevIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n\n <div\n key=\"container\"\n ref={ containerRef }\n class=\"v-slide-group__container\"\n onScroll={ onScroll }\n >\n <div\n ref={ contentRef }\n class=\"v-slide-group__content\"\n style={ contentStyles.value }\n onTouchstartPassive={ onTouchstart }\n onTouchmovePassive={ onTouchmove }\n onTouchendPassive={ onTouchend }\n onFocusin={ onFocusin }\n onFocusout={ onFocusout }\n onKeydown={ onKeydown }\n >\n { slots.default?.(slotProps.value) }\n </div>\n </div>\n\n { hasAffixes.value && (\n <div\n key=\"next\"\n class={[\n 'v-slide-group__next',\n { 'v-slide-group__next--disabled': !hasNext.value },\n ]}\n onClick={ () => scrollTo('next') }\n >\n { slots.next?.(slotProps.value) ?? (\n <VFadeTransition>\n <VIcon icon={ isRtl.value ? props.prevIcon : props.nextIcon }></VIcon>\n </VFadeTransition>\n )}\n </div>\n )}\n </props.tag>\n ))\n\n return {\n selected: group.selected,\n scrollTo,\n scrollOffset,\n focus,\n }\n },\n})\n\nexport type VSlideGroup = InstanceType<typeof VSlideGroup>\n"],"mappings":"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"}