@workday/canvas-kit-react 13.1.5 → 13.1.7

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 (220) hide show
  1. package/collection/lib/focusOnCurrentCursor.ts +4 -1
  2. package/collection/lib/useListItemRemoveable.ts +5 -3
  3. package/collection/lib/useListItemRovingFocus.tsx +2 -2
  4. package/common/lib/utils/useUniqueId.ts +7 -2
  5. package/dist/commonjs/action-bar/lib/ActionBarList.js +1 -1
  6. package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.js +1 -1
  7. package/dist/commonjs/avatar/lib/Avatar.js +20 -20
  8. package/dist/commonjs/badge/lib/CountBadge.js +3 -3
  9. package/dist/commonjs/banner/lib/Banner.js +5 -5
  10. package/dist/commonjs/banner/lib/BannerActionText.js +2 -2
  11. package/dist/commonjs/banner/lib/BannerIcon.js +1 -1
  12. package/dist/commonjs/banner/lib/BannerLabel.js +1 -1
  13. package/dist/commonjs/button/lib/BaseButton.js +21 -21
  14. package/dist/commonjs/button/lib/DeleteButton.js +1 -1
  15. package/dist/commonjs/button/lib/ExternalHyperlink.js +1 -1
  16. package/dist/commonjs/button/lib/Hyperlink.js +2 -2
  17. package/dist/commonjs/button/lib/PrimaryButton.js +2 -2
  18. package/dist/commonjs/button/lib/SecondaryButton.js +2 -2
  19. package/dist/commonjs/button/lib/TertiaryButton.js +18 -18
  20. package/dist/commonjs/card/lib/Card.js +1 -1
  21. package/dist/commonjs/card/lib/CardBody.js +1 -1
  22. package/dist/commonjs/card/lib/CardHeading.js +1 -1
  23. package/dist/commonjs/checkbox/lib/CheckBackground.js +3 -3
  24. package/dist/commonjs/checkbox/lib/CheckboxCheck.js +5 -5
  25. package/dist/commonjs/checkbox/lib/CheckboxContainer.js +1 -1
  26. package/dist/commonjs/checkbox/lib/CheckboxInput.js +5 -5
  27. package/dist/commonjs/checkbox/lib/CheckboxRipple.js +1 -1
  28. package/dist/commonjs/collection/lib/ListBox.js +3 -3
  29. package/dist/commonjs/collection/lib/focusOnCurrentCursor.d.ts.map +1 -1
  30. package/dist/commonjs/collection/lib/focusOnCurrentCursor.js +2 -1
  31. package/dist/commonjs/collection/lib/useListItemRemoveable.d.ts +1 -1
  32. package/dist/commonjs/collection/lib/useListItemRemoveable.d.ts.map +1 -1
  33. package/dist/commonjs/collection/lib/useListItemRemoveable.js +2 -2
  34. package/dist/commonjs/collection/lib/useListItemRovingFocus.d.ts +1 -1
  35. package/dist/commonjs/collection/lib/useListItemRovingFocus.js +1 -1
  36. package/dist/commonjs/combobox/lib/ComboboxMenuList.js +1 -1
  37. package/dist/commonjs/common/lib/AccessibleHide.js +1 -1
  38. package/dist/commonjs/common/lib/CanvasProvider.js +1 -1
  39. package/dist/commonjs/common/lib/utils/useUniqueId.d.ts +2 -1
  40. package/dist/commonjs/common/lib/utils/useUniqueId.d.ts.map +1 -1
  41. package/dist/commonjs/common/lib/utils/useUniqueId.js +9 -2
  42. package/dist/commonjs/expandable/lib/Expandable.js +1 -1
  43. package/dist/commonjs/expandable/lib/ExpandableAvatar.js +1 -1
  44. package/dist/commonjs/expandable/lib/ExpandableContent.js +1 -1
  45. package/dist/commonjs/expandable/lib/ExpandableIcon.js +10 -10
  46. package/dist/commonjs/expandable/lib/ExpandableTarget.js +1 -1
  47. package/dist/commonjs/expandable/lib/ExpandableTitle.js +1 -1
  48. package/dist/commonjs/form-field/lib/FormFieldContainer.js +1 -1
  49. package/dist/commonjs/form-field/lib/FormFieldField.js +1 -1
  50. package/dist/commonjs/form-field/lib/FormFieldGroupLabel.js +5 -5
  51. package/dist/commonjs/form-field/lib/FormFieldGroupList.js +3 -3
  52. package/dist/commonjs/form-field/lib/FormFieldHint.js +3 -3
  53. package/dist/commonjs/form-field/lib/FormFieldLabel.js +6 -6
  54. package/dist/commonjs/form-field/lib/formFieldStencil.js +8 -8
  55. package/dist/commonjs/icon/lib/AccentIcon.js +2 -2
  56. package/dist/commonjs/icon/lib/AppletIcon.js +1 -1
  57. package/dist/commonjs/icon/lib/Graphic.js +4 -4
  58. package/dist/commonjs/icon/lib/Svg.js +2 -2
  59. package/dist/commonjs/icon/lib/SystemIcon.js +1 -1
  60. package/dist/commonjs/icon/lib/SystemIconCircle.js +1 -1
  61. package/dist/commonjs/loading-dots/lib/LoadingDots.js +2 -2
  62. package/dist/commonjs/menu/lib/MenuCard.js +1 -1
  63. package/dist/commonjs/menu/lib/MenuDivider.js +1 -1
  64. package/dist/commonjs/menu/lib/MenuGroup.js +1 -1
  65. package/dist/commonjs/menu/lib/MenuItem.d.ts +1 -1
  66. package/dist/commonjs/menu/lib/MenuItem.js +1 -1
  67. package/dist/commonjs/menu/lib/MenuList.js +3 -3
  68. package/dist/commonjs/menu/lib/Submenu.d.ts +1 -1
  69. package/dist/commonjs/modal/lib/ModalBody.js +1 -1
  70. package/dist/commonjs/modal/lib/ModalCard.js +1 -1
  71. package/dist/commonjs/modal/lib/ModalHeading.js +1 -1
  72. package/dist/commonjs/modal/lib/ModalOverflowOverlay.js +1 -1
  73. package/dist/commonjs/modal/lib/ModalOverlay.js +2 -2
  74. package/dist/commonjs/popup/lib/PopupBody.js +1 -1
  75. package/dist/commonjs/popup/lib/PopupCard.js +2 -2
  76. package/dist/commonjs/popup/lib/PopupCloseIcon.js +1 -1
  77. package/dist/commonjs/popup/lib/PopupHeading.js +1 -1
  78. package/dist/commonjs/popup/lib/hooks/useDisableBodyScroll.js +1 -1
  79. package/dist/commonjs/select/lib/SelectCard.js +1 -1
  80. package/dist/commonjs/select/lib/SelectInput.js +1 -1
  81. package/dist/commonjs/skeleton/lib/Skeleton.js +2 -2
  82. package/dist/commonjs/skeleton/lib/parts/SkeletonHeader.js +1 -1
  83. package/dist/commonjs/skeleton/lib/parts/SkeletonShape.js +1 -1
  84. package/dist/commonjs/skeleton/lib/parts/SkeletonText.js +1 -1
  85. package/dist/commonjs/switch/lib/Switch.js +7 -7
  86. package/dist/commonjs/table/lib/BaseTable.js +1 -1
  87. package/dist/commonjs/table/lib/Table.js +7 -7
  88. package/dist/commonjs/table/lib/parts/BaseTableBody.js +1 -1
  89. package/dist/commonjs/table/lib/parts/BaseTableCaption.js +1 -1
  90. package/dist/commonjs/table/lib/parts/BaseTableCell.js +1 -1
  91. package/dist/commonjs/table/lib/parts/BaseTableHead.js +1 -1
  92. package/dist/commonjs/table/lib/parts/BaseTableHeader.js +1 -1
  93. package/dist/commonjs/table/lib/parts/css-grid-table/TableRow.js +1 -1
  94. package/dist/commonjs/tabs/lib/TabsItem.d.ts +1 -1
  95. package/dist/commonjs/tabs/lib/TabsItem.js +1 -1
  96. package/dist/commonjs/tabs/lib/TabsList.d.ts +330 -10
  97. package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -1
  98. package/dist/commonjs/tabs/lib/TabsList.js +66 -71
  99. package/dist/commonjs/tabs/lib/TabsOverflowButton.js +1 -1
  100. package/dist/commonjs/text/lib/LabelText.js +6 -6
  101. package/dist/commonjs/text/lib/Text.js +16 -16
  102. package/dist/commonjs/text/lib/TypeLevelComponents.js +4 -4
  103. package/dist/commonjs/text-area/lib/TextArea.js +5 -5
  104. package/dist/commonjs/text-input/lib/InputGroup.js +6 -6
  105. package/dist/commonjs/text-input/lib/TextInput.js +5 -5
  106. package/dist/commonjs/toast/lib/Toast.js +1 -1
  107. package/dist/commonjs/toast/lib/ToastBody.js +1 -1
  108. package/dist/commonjs/toast/lib/ToastCloseIcon.js +1 -1
  109. package/dist/commonjs/toast/lib/ToastIcon.js +1 -1
  110. package/dist/commonjs/toast/lib/ToastMessage.js +1 -1
  111. package/dist/commonjs/tooltip/lib/TooltipContainer.js +2 -2
  112. package/dist/es6/action-bar/lib/ActionBarList.js +1 -1
  113. package/dist/es6/action-bar/lib/ActionBarOverflowButton.js +1 -1
  114. package/dist/es6/avatar/lib/Avatar.js +20 -20
  115. package/dist/es6/badge/lib/CountBadge.js +3 -3
  116. package/dist/es6/banner/lib/Banner.js +5 -5
  117. package/dist/es6/banner/lib/BannerActionText.js +2 -2
  118. package/dist/es6/banner/lib/BannerIcon.js +1 -1
  119. package/dist/es6/banner/lib/BannerLabel.js +1 -1
  120. package/dist/es6/button/lib/BaseButton.js +21 -21
  121. package/dist/es6/button/lib/DeleteButton.js +1 -1
  122. package/dist/es6/button/lib/ExternalHyperlink.js +1 -1
  123. package/dist/es6/button/lib/Hyperlink.js +2 -2
  124. package/dist/es6/button/lib/PrimaryButton.js +2 -2
  125. package/dist/es6/button/lib/SecondaryButton.js +2 -2
  126. package/dist/es6/button/lib/TertiaryButton.js +18 -18
  127. package/dist/es6/card/lib/Card.js +1 -1
  128. package/dist/es6/card/lib/CardBody.js +1 -1
  129. package/dist/es6/card/lib/CardHeading.js +1 -1
  130. package/dist/es6/checkbox/lib/CheckBackground.js +3 -3
  131. package/dist/es6/checkbox/lib/CheckboxCheck.js +5 -5
  132. package/dist/es6/checkbox/lib/CheckboxContainer.js +1 -1
  133. package/dist/es6/checkbox/lib/CheckboxInput.js +5 -5
  134. package/dist/es6/checkbox/lib/CheckboxRipple.js +1 -1
  135. package/dist/es6/collection/lib/ListBox.js +3 -3
  136. package/dist/es6/collection/lib/focusOnCurrentCursor.d.ts.map +1 -1
  137. package/dist/es6/collection/lib/focusOnCurrentCursor.js +2 -1
  138. package/dist/es6/collection/lib/useListItemRemoveable.d.ts +1 -1
  139. package/dist/es6/collection/lib/useListItemRemoveable.d.ts.map +1 -1
  140. package/dist/es6/collection/lib/useListItemRemoveable.js +3 -3
  141. package/dist/es6/collection/lib/useListItemRovingFocus.d.ts +1 -1
  142. package/dist/es6/collection/lib/useListItemRovingFocus.js +2 -2
  143. package/dist/es6/combobox/lib/ComboboxMenuList.js +1 -1
  144. package/dist/es6/common/lib/AccessibleHide.js +1 -1
  145. package/dist/es6/common/lib/CanvasProvider.js +1 -1
  146. package/dist/es6/common/lib/utils/useUniqueId.d.ts +2 -1
  147. package/dist/es6/common/lib/utils/useUniqueId.d.ts.map +1 -1
  148. package/dist/es6/common/lib/utils/useUniqueId.js +6 -2
  149. package/dist/es6/expandable/lib/Expandable.js +1 -1
  150. package/dist/es6/expandable/lib/ExpandableAvatar.js +1 -1
  151. package/dist/es6/expandable/lib/ExpandableContent.js +1 -1
  152. package/dist/es6/expandable/lib/ExpandableIcon.js +10 -10
  153. package/dist/es6/expandable/lib/ExpandableTarget.js +1 -1
  154. package/dist/es6/expandable/lib/ExpandableTitle.js +1 -1
  155. package/dist/es6/form-field/lib/FormFieldContainer.js +1 -1
  156. package/dist/es6/form-field/lib/FormFieldField.js +1 -1
  157. package/dist/es6/form-field/lib/FormFieldGroupLabel.js +5 -5
  158. package/dist/es6/form-field/lib/FormFieldGroupList.js +3 -3
  159. package/dist/es6/form-field/lib/FormFieldHint.js +3 -3
  160. package/dist/es6/form-field/lib/FormFieldLabel.js +6 -6
  161. package/dist/es6/form-field/lib/formFieldStencil.js +8 -8
  162. package/dist/es6/icon/lib/AccentIcon.js +2 -2
  163. package/dist/es6/icon/lib/AppletIcon.js +1 -1
  164. package/dist/es6/icon/lib/Graphic.js +4 -4
  165. package/dist/es6/icon/lib/Svg.js +2 -2
  166. package/dist/es6/icon/lib/SystemIcon.js +1 -1
  167. package/dist/es6/icon/lib/SystemIconCircle.js +1 -1
  168. package/dist/es6/loading-dots/lib/LoadingDots.js +2 -2
  169. package/dist/es6/menu/lib/MenuCard.js +1 -1
  170. package/dist/es6/menu/lib/MenuDivider.js +1 -1
  171. package/dist/es6/menu/lib/MenuGroup.js +1 -1
  172. package/dist/es6/menu/lib/MenuItem.d.ts +1 -1
  173. package/dist/es6/menu/lib/MenuItem.js +1 -1
  174. package/dist/es6/menu/lib/MenuList.js +3 -3
  175. package/dist/es6/menu/lib/Submenu.d.ts +1 -1
  176. package/dist/es6/modal/lib/ModalBody.js +1 -1
  177. package/dist/es6/modal/lib/ModalCard.js +1 -1
  178. package/dist/es6/modal/lib/ModalHeading.js +1 -1
  179. package/dist/es6/modal/lib/ModalOverflowOverlay.js +1 -1
  180. package/dist/es6/modal/lib/ModalOverlay.js +2 -2
  181. package/dist/es6/popup/lib/PopupBody.js +1 -1
  182. package/dist/es6/popup/lib/PopupCard.js +2 -2
  183. package/dist/es6/popup/lib/PopupCloseIcon.js +1 -1
  184. package/dist/es6/popup/lib/PopupHeading.js +1 -1
  185. package/dist/es6/popup/lib/hooks/useDisableBodyScroll.js +1 -1
  186. package/dist/es6/select/lib/SelectCard.js +1 -1
  187. package/dist/es6/select/lib/SelectInput.js +1 -1
  188. package/dist/es6/skeleton/lib/Skeleton.js +2 -2
  189. package/dist/es6/skeleton/lib/parts/SkeletonHeader.js +1 -1
  190. package/dist/es6/skeleton/lib/parts/SkeletonShape.js +1 -1
  191. package/dist/es6/skeleton/lib/parts/SkeletonText.js +1 -1
  192. package/dist/es6/switch/lib/Switch.js +7 -7
  193. package/dist/es6/table/lib/BaseTable.js +1 -1
  194. package/dist/es6/table/lib/Table.js +7 -7
  195. package/dist/es6/table/lib/parts/BaseTableBody.js +1 -1
  196. package/dist/es6/table/lib/parts/BaseTableCaption.js +1 -1
  197. package/dist/es6/table/lib/parts/BaseTableCell.js +1 -1
  198. package/dist/es6/table/lib/parts/BaseTableHead.js +1 -1
  199. package/dist/es6/table/lib/parts/BaseTableHeader.js +1 -1
  200. package/dist/es6/table/lib/parts/css-grid-table/TableRow.js +1 -1
  201. package/dist/es6/tabs/lib/TabsItem.d.ts +1 -1
  202. package/dist/es6/tabs/lib/TabsItem.js +1 -1
  203. package/dist/es6/tabs/lib/TabsList.d.ts +330 -10
  204. package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -1
  205. package/dist/es6/tabs/lib/TabsList.js +66 -70
  206. package/dist/es6/tabs/lib/TabsOverflowButton.js +1 -1
  207. package/dist/es6/text/lib/LabelText.js +6 -6
  208. package/dist/es6/text/lib/Text.js +16 -16
  209. package/dist/es6/text/lib/TypeLevelComponents.js +4 -4
  210. package/dist/es6/text-area/lib/TextArea.js +5 -5
  211. package/dist/es6/text-input/lib/InputGroup.js +6 -6
  212. package/dist/es6/text-input/lib/TextInput.js +5 -5
  213. package/dist/es6/toast/lib/Toast.js +1 -1
  214. package/dist/es6/toast/lib/ToastBody.js +1 -1
  215. package/dist/es6/toast/lib/ToastCloseIcon.js +1 -1
  216. package/dist/es6/toast/lib/ToastIcon.js +1 -1
  217. package/dist/es6/toast/lib/ToastMessage.js +1 -1
  218. package/dist/es6/tooltip/lib/TooltipContainer.js +2 -2
  219. package/package.json +4 -4
  220. package/tabs/lib/TabsList.tsx +88 -66
@@ -6,6 +6,7 @@ import {
6
6
  createElemPropsHook,
7
7
  ExtractProps,
8
8
  useModalityType,
9
+ useLocalRef,
9
10
  } from '@workday/canvas-kit-react/common';
10
11
  import {Flex, mergeStyles} from '@workday/canvas-kit-react/layout';
11
12
  import {
@@ -32,12 +33,81 @@ export interface TabListProps<T = any> extends Omit<ExtractProps<typeof Flex, ne
32
33
  overflowButton?: React.ReactNode;
33
34
  }
34
35
 
36
+ function getScrollPercentage(elem: HTMLDivElement, direction: 'vertical' | 'horizontal'): number {
37
+ if (direction === 'vertical') {
38
+ if (elem.scrollHeight > elem.clientHeight) {
39
+ const percentage = elem.scrollTop / (elem.scrollHeight - elem.clientHeight);
40
+ return percentage;
41
+ } else {
42
+ return -1;
43
+ }
44
+ }
45
+ if (elem.scrollWidth > elem.clientWidth) {
46
+ const percentage = elem.scrollLeft / (elem.scrollWidth - elem.clientWidth);
47
+ return percentage;
48
+ } else {
49
+ return -1;
50
+ }
51
+ }
52
+
53
+ function getScrollPosition(
54
+ elem: HTMLDivElement,
55
+ direction: 'vertical' | 'horizontal'
56
+ ): 'start' | 'middle' | 'end' | undefined {
57
+ const percentage = getScrollPercentage(elem, direction);
58
+ return percentage <= -1
59
+ ? undefined
60
+ : percentage > 0.99
61
+ ? 'end'
62
+ : percentage > 0.01
63
+ ? 'middle'
64
+ : 'start';
65
+ }
66
+
67
+ function setScrollPosition(elem: HTMLDivElement, scrollPosition?: 'start' | 'middle' | 'end') {
68
+ if (scrollPosition) {
69
+ elem.setAttribute('data-scroll-position', scrollPosition);
70
+ } else {
71
+ elem.removeAttribute('data-scroll-position');
72
+ }
73
+ }
74
+
75
+ export const useTabOverflowScroll = createElemPropsHook(useTabsModel)(
76
+ (
77
+ _model,
78
+ ref,
79
+ elemProps: {
80
+ 'aria-orientation'?: 'vertical' | 'horizontal';
81
+ } = {}
82
+ ) => {
83
+ const direction = elemProps['aria-orientation'] || 'vertical';
84
+
85
+ const {localRef, elementRef} = useLocalRef<HTMLDivElement>(ref as React.Ref<HTMLDivElement>);
86
+
87
+ React.useLayoutEffect(() => {
88
+ if (!localRef.current) {
89
+ return;
90
+ }
91
+
92
+ setScrollPosition(localRef.current, getScrollPosition(localRef.current, direction));
93
+ }, [localRef, direction]);
94
+
95
+ return {
96
+ ref: elementRef,
97
+ onScroll: (event: React.UIEvent<HTMLDivElement>) => {
98
+ const elem = event.currentTarget;
99
+ setScrollPosition(elem, getScrollPosition(elem, direction));
100
+ },
101
+ };
102
+ }
103
+ );
104
+
35
105
  export const useTabsList = composeHooks(
36
- createElemPropsHook(useTabsModel)(() => {
37
- const modality = useModalityType();
106
+ useTabOverflowScroll,
107
+ createElemPropsHook(useTabsModel)(model => {
38
108
  return {
39
109
  role: 'tablist',
40
- overflowX: modality === 'touch' ? 'auto' : undefined,
110
+ 'aria-orientation': model.state.orientation,
41
111
  } as const;
42
112
  }),
43
113
  useOverflowListMeasure,
@@ -51,12 +121,26 @@ export const tabsListStencil = createStencil({
51
121
  borderBottom: `${px2rem(1)} solid ${system.color.border.divider}`,
52
122
  gap: system.space.x3,
53
123
  paddingInline: system.space.x6,
54
- maskImage: 'none',
55
124
  },
56
125
  modifiers: {
57
126
  modality: {
58
127
  touch: {
128
+ overflowX: 'auto',
59
129
  paddingInline: system.space.zero,
130
+ // data attributes are needed until scroll-driven animations are supported. Once they are,
131
+ // we can use a CSS-only solution:
132
+ // https://www.bram.us/2023/09/16/solved-by-css-scroll-driven-animations-detect-if-an-element-can-scroll-or-not/
133
+ '&[data-scroll-position="start"]': {
134
+ maskImage: 'linear-gradient(to right, white 80%, transparent)',
135
+ },
136
+ '&[data-scroll-position="middle"]': {
137
+ maskImage:
138
+ 'linear-gradient(to left, white 80%, transparent), linear-gradient(to right, white 80%, transparent)',
139
+ maskComposite: 'intersect',
140
+ },
141
+ '&[data-scroll-position="end"]': {
142
+ maskImage: 'linear-gradient(to left, white 80%, transparent)',
143
+ },
60
144
  },
61
145
  mouse: {},
62
146
  pen: {},
@@ -69,33 +153,7 @@ export const tabsListStencil = createStencil({
69
153
  left: {},
70
154
  right: {},
71
155
  },
72
- currentScrollPos: {
73
- true: {},
74
- false: {},
75
- },
76
156
  },
77
- compound: [
78
- {
79
- modifiers: {
80
- modality: 'touch',
81
- isDragging: true,
82
- direction: 'left',
83
- },
84
- styles: {
85
- maskImage: 'linear-gradient(to left, white 80%, transparent)',
86
- },
87
- },
88
- {
89
- modifiers: {
90
- modality: 'touch',
91
- isDragging: true,
92
- direction: 'right',
93
- },
94
- styles: {
95
- maskImage: 'linear-gradient(to right, white 80%, transparent)',
96
- },
97
- },
98
- ],
99
157
  });
100
158
 
101
159
  export const TabsList = createSubcomponent('div')({
@@ -105,7 +163,6 @@ export const TabsList = createSubcomponent('div')({
105
163
  })<TabListProps & {maskImage?: string}>(
106
164
  ({children, overflowButton, ...elemProps}, Element, model) => {
107
165
  const modality = useModalityType();
108
- const touchStates = useTouchDirection();
109
166
 
110
167
  return (
111
168
  <Element
@@ -113,8 +170,6 @@ export const TabsList = createSubcomponent('div')({
113
170
  elemProps,
114
171
  tabsListStencil({
115
172
  modality: modality,
116
- isDragging: touchStates.isDragging,
117
- direction: touchStates.direction,
118
173
  })
119
174
  )}
120
175
  >
@@ -124,36 +179,3 @@ export const TabsList = createSubcomponent('div')({
124
179
  );
125
180
  }
126
181
  );
127
-
128
- export const useTouchDirection = () => {
129
- const [isDragging, setIsDragging] = React.useState(false);
130
- const [touchDir, setTouchDirection] = React.useState<'right' | 'left' | undefined>('right');
131
-
132
- React.useEffect(() => {
133
- let prevXPos = window.pageXOffset;
134
- const handleTouchMove = function (e: TouchEvent) {
135
- const currXPos = e.touches[0].clientX;
136
- setIsDragging(true);
137
- if (currXPos > prevXPos) {
138
- setTouchDirection('left');
139
- } else if (currXPos < prevXPos) {
140
- setTouchDirection('right');
141
- }
142
- prevXPos = currXPos;
143
- e.preventDefault();
144
- };
145
- const handleDragEnd = function () {
146
- setIsDragging(false);
147
- };
148
- window.addEventListener('touchmove', handleTouchMove);
149
- window.addEventListener('touchstart', handleDragEnd);
150
- window.addEventListener('touchend', handleDragEnd);
151
- return () => {
152
- window.removeEventListener('touchmove', handleTouchMove);
153
- window.removeEventListener('touchstart', handleDragEnd);
154
- window.removeEventListener('touchend', handleDragEnd);
155
- };
156
- }, []);
157
-
158
- return {direction: touchDir, isDragging: isDragging};
159
- };