@codeleap/mobile 1.4.0 → 1.4.3

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 (191) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +3 -3
  3. package/.vscode/settings.json +10 -10
  4. package/CodeLeap-Mobile-Packages.code-workspace +7 -7
  5. package/dist/components/ActivityIndicator.d.ts +13 -13
  6. package/dist/components/ActivityIndicator.js +50 -51
  7. package/dist/components/ActivityIndicator.js.map +1 -1
  8. package/dist/components/Animated.d.ts +15 -15
  9. package/dist/components/Animated.js +54 -54
  10. package/dist/components/Animated.js.map +0 -0
  11. package/dist/components/Button.d.ts +119 -119
  12. package/dist/components/Button.js +77 -77
  13. package/dist/components/Button.js.map +1 -1
  14. package/dist/components/Checkbox/index.d.ts +14 -14
  15. package/dist/components/Checkbox/index.js +73 -73
  16. package/dist/components/Checkbox/index.js.map +1 -1
  17. package/dist/components/Checkbox/styles.d.ts +52 -52
  18. package/dist/components/Checkbox/styles.js +48 -48
  19. package/dist/components/Checkbox/styles.js.map +0 -0
  20. package/dist/components/ContentView.d.ts +10 -10
  21. package/dist/components/ContentView.js +50 -50
  22. package/dist/components/ContentView.js.map +0 -0
  23. package/dist/components/FileInput.d.ts +26 -26
  24. package/dist/components/FileInput.js +174 -174
  25. package/dist/components/FileInput.js.map +1 -1
  26. package/dist/components/Icon.d.ts +12 -11
  27. package/dist/components/Icon.js +66 -60
  28. package/dist/components/Icon.js.map +1 -1
  29. package/dist/components/Image.d.ts +18 -17
  30. package/dist/components/Image.js +53 -47
  31. package/dist/components/Image.js.map +1 -1
  32. package/dist/components/List.d.ts +11 -11
  33. package/dist/components/List.js +76 -76
  34. package/dist/components/List.js.map +0 -0
  35. package/dist/components/Modal/index.d.ts +25 -25
  36. package/dist/components/Modal/index.js +108 -108
  37. package/dist/components/Modal/index.js.map +0 -0
  38. package/dist/components/Modal/styles.d.ts +66 -66
  39. package/dist/components/Modal/styles.js +64 -56
  40. package/dist/components/Modal/styles.js.map +1 -1
  41. package/dist/components/Navigation/Navigation.d.ts +3 -3
  42. package/dist/components/Navigation/Navigation.js +83 -75
  43. package/dist/components/Navigation/Navigation.js.map +1 -1
  44. package/dist/components/Navigation/constants.d.ts +5 -5
  45. package/dist/components/Navigation/constants.js +10 -10
  46. package/dist/components/Navigation/constants.js.map +0 -0
  47. package/dist/components/Navigation/index.d.ts +3 -3
  48. package/dist/components/Navigation/index.js +15 -15
  49. package/dist/components/Navigation/index.js.map +0 -0
  50. package/dist/components/Navigation/types.d.ts +26 -26
  51. package/dist/components/Navigation/types.js +7 -7
  52. package/dist/components/Navigation/types.js.map +1 -1
  53. package/dist/components/Navigation/utils.d.ts +3 -3
  54. package/dist/components/Navigation/utils.js +69 -66
  55. package/dist/components/Navigation/utils.js.map +1 -1
  56. package/dist/components/Overlay.d.ts +16 -16
  57. package/dist/components/Overlay.js +65 -65
  58. package/dist/components/Overlay.js.map +1 -1
  59. package/dist/components/Pager/index.d.ts +19 -19
  60. package/dist/components/Pager/index.js +163 -163
  61. package/dist/components/Pager/index.js.map +1 -1
  62. package/dist/components/Pager/styles.d.ts +51 -51
  63. package/dist/components/Pager/styles.js +43 -43
  64. package/dist/components/Pager/styles.js.map +0 -0
  65. package/dist/components/RadioInput/index.d.ts +26 -26
  66. package/dist/components/RadioInput/index.js +68 -68
  67. package/dist/components/RadioInput/index.js.map +1 -1
  68. package/dist/components/RadioInput/styles.d.ts +54 -54
  69. package/dist/components/RadioInput/styles.js +44 -44
  70. package/dist/components/RadioInput/styles.js.map +0 -0
  71. package/dist/components/Scroll.d.ts +11 -11
  72. package/dist/components/Scroll.js +75 -75
  73. package/dist/components/Scroll.js.map +0 -0
  74. package/dist/components/Sections.d.ts +11 -11
  75. package/dist/components/Sections.js +76 -76
  76. package/dist/components/Sections.js.map +0 -0
  77. package/dist/components/Select/index.d.ts +5 -5
  78. package/dist/components/Select/index.js +144 -143
  79. package/dist/components/Select/index.js.map +1 -1
  80. package/dist/components/Select/styles.d.ts +9 -9
  81. package/dist/components/Select/styles.js +56 -56
  82. package/dist/components/Select/styles.js.map +0 -0
  83. package/dist/components/Select/types.d.ts +33 -33
  84. package/dist/components/Select/types.js +2 -2
  85. package/dist/components/Select/types.js.map +0 -0
  86. package/dist/components/Slider/Mark.d.ts +3 -3
  87. package/dist/components/Slider/Mark.js +31 -31
  88. package/dist/components/Slider/Mark.js.map +0 -0
  89. package/dist/components/Slider/Thumb.d.ts +7 -7
  90. package/dist/components/Slider/Thumb.js +29 -29
  91. package/dist/components/Slider/Thumb.js.map +0 -0
  92. package/dist/components/Slider/index.d.ts +3 -3
  93. package/dist/components/Slider/index.js +93 -93
  94. package/dist/components/Slider/index.js.map +0 -0
  95. package/dist/components/Slider/types.d.ts +25 -25
  96. package/dist/components/Slider/types.js +2 -2
  97. package/dist/components/Slider/types.js.map +0 -0
  98. package/dist/components/Switch.d.ts +13 -13
  99. package/dist/components/Switch.js +71 -71
  100. package/dist/components/Switch.js.map +1 -1
  101. package/dist/components/Text.d.ts +12 -12
  102. package/dist/components/Text.js +48 -48
  103. package/dist/components/Text.js.map +0 -0
  104. package/dist/components/TextInput.d.ts +162 -160
  105. package/dist/components/TextInput.js +149 -149
  106. package/dist/components/TextInput.js.map +1 -1
  107. package/dist/components/Touchable.d.ts +14 -14
  108. package/dist/components/Touchable.js +57 -57
  109. package/dist/components/Touchable.js.map +1 -1
  110. package/dist/components/View.d.ts +114 -114
  111. package/dist/components/View.js +50 -50
  112. package/dist/components/View.js.map +0 -0
  113. package/dist/components/components.d.ts +24 -24
  114. package/dist/components/components.js +36 -36
  115. package/dist/components/components.js.map +0 -0
  116. package/dist/index.d.ts +5 -5
  117. package/dist/index.js +24 -24
  118. package/dist/index.js.map +0 -0
  119. package/dist/modules/documentPicker.d.ts +3 -3
  120. package/dist/modules/documentPicker.js +11 -11
  121. package/dist/modules/documentPicker.js.map +1 -1
  122. package/dist/modules/fastImage.d.ts +1 -1
  123. package/dist/modules/fastImage.js +9 -9
  124. package/dist/modules/fastImage.js.map +0 -0
  125. package/dist/modules/reactNavigation.d.ts +3 -3
  126. package/dist/modules/reactNavigation.js +10 -10
  127. package/dist/modules/reactNavigation.js.map +0 -0
  128. package/dist/modules/types/fileTypes.d.ts +138 -138
  129. package/dist/modules/types/fileTypes.js +2 -2
  130. package/dist/modules/types/fileTypes.js.map +0 -0
  131. package/dist/types/utility.d.ts +2 -2
  132. package/dist/types/utility.js +2 -2
  133. package/dist/types/utility.js.map +0 -0
  134. package/dist/utils/OSAlert.d.ts +31 -31
  135. package/dist/utils/OSAlert.js +141 -88
  136. package/dist/utils/OSAlert.js.map +1 -1
  137. package/dist/utils/misc.d.ts +2 -2
  138. package/dist/utils/misc.js +25 -25
  139. package/dist/utils/misc.js.map +0 -0
  140. package/dist/utils/styles.d.ts +1 -1
  141. package/dist/utils/styles.js +12 -12
  142. package/dist/utils/styles.js.map +0 -0
  143. package/package.json +40 -38
  144. package/src/components/ActivityIndicator.tsx +46 -47
  145. package/src/components/Animated.tsx +34 -34
  146. package/src/components/Button.tsx +95 -95
  147. package/src/components/Checkbox/index.tsx +81 -80
  148. package/src/components/Checkbox/styles.ts +72 -72
  149. package/src/components/ContentView.tsx +58 -58
  150. package/src/components/FileInput.tsx +179 -178
  151. package/src/components/Icon.tsx +58 -48
  152. package/src/components/Image.tsx +61 -49
  153. package/src/components/List.tsx +100 -100
  154. package/src/components/Modal/index.tsx +158 -158
  155. package/src/components/Modal/styles.ts +133 -118
  156. package/src/components/Navigation/Navigation.tsx +58 -51
  157. package/src/components/Navigation/constants.ts +8 -8
  158. package/src/components/Navigation/index.tsx +3 -3
  159. package/src/components/Navigation/types.ts +35 -37
  160. package/src/components/Navigation/utils.tsx +59 -54
  161. package/src/components/Overlay.tsx +77 -76
  162. package/src/components/Pager/index.tsx +240 -241
  163. package/src/components/Pager/styles.ts +51 -51
  164. package/src/components/RadioInput/index.tsx +101 -100
  165. package/src/components/RadioInput/styles.ts +67 -67
  166. package/src/components/Scroll.tsx +98 -98
  167. package/src/components/Sections.tsx +100 -0
  168. package/src/components/Select/index.tsx +184 -181
  169. package/src/components/Select/styles.ts +81 -81
  170. package/src/components/Select/types.ts +41 -41
  171. package/src/components/Slider/Mark.tsx +46 -46
  172. package/src/components/Slider/Thumb.tsx +29 -29
  173. package/src/components/Slider/index.tsx +123 -123
  174. package/src/components/Slider/types.ts +25 -25
  175. package/src/components/Switch.tsx +81 -82
  176. package/src/components/Text.tsx +30 -30
  177. package/src/components/TextInput.tsx +204 -203
  178. package/src/components/Touchable.tsx +65 -64
  179. package/src/components/View.tsx +46 -46
  180. package/src/components/components.ts +26 -26
  181. package/src/index.ts +6 -6
  182. package/src/modules/documentPicker.ts +7 -8
  183. package/src/modules/fastImage.ts +2 -2
  184. package/src/modules/index.d.ts +496 -496
  185. package/src/modules/reactNavigation.ts +4 -4
  186. package/src/modules/types/documentPicker.d.ts +215 -215
  187. package/src/modules/types/fileTypes.ts +122 -122
  188. package/src/types/utility.ts +3 -3
  189. package/src/utils/OSAlert.ts +180 -124
  190. package/src/utils/misc.ts +24 -24
  191. package/src/utils/styles.ts +14 -14
@@ -1,76 +1,77 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
- IconPlaceholder,
5
- OverlayComposition,
6
- OverlayStyles,
7
- useDefaultComponentStyle,
8
- } from '@codeleap/common'
9
- import { ReactNode } from 'react'
10
- import { InputLabel } from './TextInput'
11
- import { Button } from './Button'
12
-
13
- import { View } from './View'
14
- import { StylesOf } from '../types/utility'
15
- import { StyleSheet, ViewProps } from 'react-native'
16
- import { AnimatedTouchable } from './Touchable'
17
-
18
- export type OverlayProps = ViewProps & {
19
- title?: ReactNode;
20
- visible?: boolean;
21
- showClose?: boolean;
22
- variants?: ComponentVariants<typeof OverlayStyles>;
23
- styles?: StylesOf<OverlayComposition>;
24
- style?: any;
25
- onPress?: () => void;
26
- } & React.ComponentPropsWithoutRef<typeof AnimatedTouchable>;
27
-
28
- export const Overlay: React.FC<OverlayProps> = (overlayProps) => {
29
- const {
30
- showClose,
31
- title,
32
- children,
33
- visible,
34
- styles = {},
35
- style,
36
- variants,
37
- ...props
38
- } = overlayProps
39
-
40
- const variantStyles = useDefaultComponentStyle('Overlay', {
41
- styles,
42
- transform: StyleSheet.flatten,
43
- variants: variants as any,
44
- }) as StylesOf<OverlayComposition>
45
-
46
- const touchableStyle = [
47
- variantStyles.wrapper,
48
- styles.wrapper,
49
- visible && variantStyles['wrapper:visible'],
50
- visible && styles['wrapper:visible'],
51
- ]
52
-
53
- return (
54
- <AnimatedTouchable
55
- // @ts-ignore
56
- transition={'opacity'}
57
- style={touchableStyle}
58
- {...props}
59
- >
60
- <View>
61
- {(title || showClose) && (
62
- <View style={variantStyles.header}>
63
- <InputLabel style={variantStyles.title} label={title} />
64
- {showClose && (
65
- <Button
66
- variants={['icon']}
67
- icon={'close' as IconPlaceholder}
68
- style={variantStyles.closeButton}
69
- />
70
- )}
71
- </View>
72
- )}
73
- </View>
74
- </AnimatedTouchable>
75
- )
76
- }
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ IconPlaceholder,
5
+ OverlayComposition,
6
+ OverlayStyles,
7
+ useDefaultComponentStyle,
8
+ } from '@codeleap/common'
9
+ import { ReactNode } from 'react'
10
+ import { InputLabel } from './TextInput'
11
+ import { Button } from './Button'
12
+
13
+ import { View } from './View'
14
+ import { StylesOf } from '../types/utility'
15
+ import { StyleSheet, ViewProps } from 'react-native'
16
+ import { AnimatedTouchable } from './Touchable'
17
+
18
+ export type OverlayProps = ViewProps & {
19
+ title?: ReactNode
20
+ visible?: boolean
21
+ showClose?: boolean
22
+ variants?: ComponentVariants<typeof OverlayStyles>
23
+ styles?: StylesOf<OverlayComposition>
24
+ style?: any
25
+ onPress?: () => void
26
+ } & React.ComponentPropsWithoutRef<typeof AnimatedTouchable>
27
+
28
+ export const Overlay: React.FC<OverlayProps> = (overlayProps) => {
29
+ const {
30
+ showClose,
31
+ title,
32
+ children,
33
+ visible,
34
+ styles = {},
35
+ style,
36
+ variants,
37
+ ...props
38
+ } = overlayProps
39
+
40
+ const variantStyles = useDefaultComponentStyle('Overlay', {
41
+ styles,
42
+ transform: StyleSheet.flatten,
43
+ variants: variants as any,
44
+ }) as StylesOf<OverlayComposition>
45
+
46
+ const touchableStyle = [
47
+ variantStyles.wrapper,
48
+ styles.wrapper,
49
+ visible && variantStyles['wrapper:visible'],
50
+ visible && styles['wrapper:visible'],
51
+ ]
52
+
53
+ return (
54
+ <AnimatedTouchable
55
+ // @ts-ignore
56
+ transition={'opacity'}
57
+ style={touchableStyle}
58
+ {...props}
59
+ >
60
+ <View>
61
+ {(title || showClose) && (
62
+ <View style={variantStyles.header}>
63
+ <InputLabel style={variantStyles.title} label={title} />
64
+ {showClose && (
65
+ <Button
66
+ variants={['icon']}
67
+ icon={'close' as IconPlaceholder}
68
+ style={variantStyles.closeButton}
69
+ debugName={'Close icon'}
70
+ />
71
+ )}
72
+ </View>
73
+ )}
74
+ </View>
75
+ </AnimatedTouchable>
76
+ )
77
+ }
@@ -1,241 +1,240 @@
1
- import {
2
- ComponentVariants,
3
- onUpdate,
4
- useDefaultComponentStyle,
5
- useDebounce,
6
- useCodeleapContext,
7
- } from '@codeleap/common'
8
- import React, {
9
- forwardRef,
10
- useImperativeHandle,
11
- useMemo,
12
- useRef,
13
- useState,
14
- } from 'react'
15
- import { StyleSheet } from 'react-native'
16
- import { StylesOf } from '../../types/utility'
17
- import { Animated } from '../Animated'
18
- import { Button } from '../Button'
19
- import { View } from '../View'
20
- import { Text } from '../Text'
21
- import { MobilePagerStyles, PagerComposition } from './styles'
22
-
23
- export * from './styles'
24
-
25
- export type PagerProps = {
26
- variants?: ComponentVariants<typeof MobilePagerStyles>['variants'];
27
- styles?: StylesOf<PagerComposition>;
28
- page?: number;
29
- loop?: boolean;
30
- debug?: boolean;
31
- onPageChange?: (page: number) => void;
32
- };
33
-
34
- export type PagerRef = {
35
- forward(by?: number): void;
36
- back(by?: number): void;
37
- to(index?: number): void;
38
- };
39
-
40
-
41
- export const Pager = forwardRef<PagerRef, PagerProps>((pagerProps, ref) => {
42
- const {
43
- children,
44
- styles,
45
- variants,
46
- page: propPage,
47
- debug,
48
- loop,
49
- onPageChange,
50
- } = pagerProps
51
-
52
- const [page, setPage] = useState(() => propPage ?? 0)
53
-
54
- const variantStyles = useDefaultComponentStyle<'u:Pager', typeof MobilePagerStyles>(
55
- 'u:Pager',
56
- {
57
- styles,
58
- transform: StyleSheet.flatten,
59
- variants,
60
- },
61
- )
62
- const { logger } = useCodeleapContext()
63
- const nChildren = React.Children.count(children)
64
-
65
- const lastPage = nChildren - 1
66
-
67
- const pagerRef = useRef<PagerRef>({
68
- forward: (by = 1) => {
69
- setPage((currentPage) => {
70
- if (currentPage < lastPage) {
71
- return currentPage + by
72
- } else if (loop) {
73
- return by - 1
74
- }
75
- return currentPage
76
- })
77
- },
78
- back: (by = 1) => {
79
- setPage((currentPage) => {
80
- if (currentPage > 0) {
81
- return currentPage - by
82
- } else if (loop) {
83
- return nChildren - by
84
- }
85
- return currentPage
86
- })
87
- },
88
- to: (n: number) => {
89
- if (n >= 0 && n <= lastPage) {
90
- setPage(n)
91
- } else {
92
- logger.warn(
93
- 'Attempted to go to a page which falls outside range',
94
- { currentPage: page, attemptedToGoTo: n, pageRange: [0, lastPage] },
95
- 'Component',
96
- )
97
- }
98
- },
99
- })
100
-
101
- onUpdate(() => {
102
- onPageChange?.(page)
103
- }, [page])
104
-
105
- onUpdate(() => {
106
- if (typeof propPage === 'number') {
107
- setPage(propPage)
108
- }
109
- }, [propPage])
110
-
111
- useImperativeHandle(ref, () => pagerRef.current)
112
-
113
- const pagePoses = useMemo(() => {
114
- return {
115
- current: variantStyles['page:pose:current'],
116
- next: variantStyles['page:pose:next'],
117
- previous: variantStyles['page:pose:previous'],
118
- }
119
- }, [variantStyles])
120
-
121
- return (
122
- <View style={variantStyles.wrapper}>
123
- {React.Children.map(children, (child, idx) => (
124
- <Page
125
- {...pagerProps}
126
- idx={idx}
127
- lastPage={lastPage}
128
- pagePoses={pagePoses}
129
- style={[variantStyles.page]}
130
- page={page}
131
- >
132
- {child}
133
- </Page>
134
- ))}
135
-
136
- {debug && (
137
- <View
138
- variants={['absolute']}
139
- style={{ bottom: 0, left: 0, right: 0 }}
140
- >
141
- <Button text='previous' onPress={pagerRef.current.back} />
142
- <Text text={page.toString()} />
143
- <Button text='next' onPress={pagerRef.current.forward} />
144
- </View>
145
- )}
146
- </View>
147
-
148
- )
149
- })
150
- type PageProps = PagerProps & {
151
- idx: number;
152
- lastPage: number;
153
- page: number;
154
- pagePoses: any;
155
- style: any;
156
- };
157
- const Page: React.FC<PageProps> = (pageProps) => {
158
- const {
159
- children: child,
160
- idx,
161
- loop,
162
- lastPage,
163
- page,
164
- style,
165
- pagePoses,
166
- } = pageProps
167
-
168
- if (!React.isValidElement(child)) return null
169
-
170
- // const isLast = idx === lastPage
171
- // const isFirst = idx === 0
172
-
173
- // const isLoopNext = (loop && isFirst && page === lastPage)
174
- // const isLoopPrevious = (loop && isLast && page === 0)
175
-
176
- // const isCurrent = idx === page
177
- // const isSequenceNext = idx === page + 1
178
- // const isSequencePrevious = idx === page - 1
179
-
180
- // const isNext = isSequenceNext || isLoopNext
181
-
182
- // const isPrevious = isSequencePrevious || isLoopPrevious
183
-
184
- // const isCurrentOrAdjacent = [
185
- // isCurrent,
186
- // isNext,
187
- // isPrevious
188
- // ].includes(true)
189
-
190
- // if(isCurrentOrAdjacent){
191
- // return <Animated
192
- // key={idx}
193
- // component='View'
194
- // config={pagePoses}
195
- // pose={isCurrent ? 'current' : (isNext ? 'next' : 'previous')}
196
- // style={[{
197
- // position: 'absolute',
198
- // top: 0,
199
-
200
- // },style]}
201
- // >
202
- // {child}
203
- // </Animated>
204
- // }
205
- const isCurrent = idx === page
206
- const isNext = idx > page
207
- const [_opacity, setOpacity] = useState(isCurrent ? 1 : 0)
208
-
209
- const [opacity, resetDebounceTimer] = useDebounce(_opacity, 800)
210
-
211
- onUpdate(() => {
212
- if (isCurrent) {
213
- setOpacity(1)
214
- } else {
215
- setOpacity(0)
216
- }
217
-
218
- return resetDebounceTimer
219
- }, [idx, page])
220
-
221
- return (
222
- <Animated
223
- key={idx}
224
- component='View'
225
- config={pagePoses}
226
- pose={isCurrent ? 'current' : isNext ? 'next' : 'previous'}
227
- style={[
228
- {
229
- position: 'absolute',
230
- top: 0,
231
- opacity: isCurrent ? _opacity : opacity,
232
- },
233
- style,
234
- ]}
235
- >
236
- {child}
237
- </Animated>
238
- )
239
-
240
- // return <View style={{display:'none'}} key={idx}>{child}</View>
241
- }
1
+ import {
2
+ ComponentVariants,
3
+ onUpdate,
4
+ useDefaultComponentStyle,
5
+ useDebounce,
6
+ useCodeleapContext,
7
+ } from '@codeleap/common'
8
+ import React, {
9
+ forwardRef,
10
+ useImperativeHandle,
11
+ useMemo,
12
+ useRef,
13
+ useState,
14
+ } from 'react'
15
+ import { StyleSheet } from 'react-native'
16
+ import { StylesOf } from '../../types/utility'
17
+ import { Animated } from '../Animated'
18
+ import { Button } from '../Button'
19
+ import { View } from '../View'
20
+ import { Text } from '../Text'
21
+ import { MobilePagerStyles, PagerComposition } from './styles'
22
+
23
+ export * from './styles'
24
+
25
+ export type PagerProps = {
26
+ variants?: ComponentVariants<typeof MobilePagerStyles>['variants']
27
+ styles?: StylesOf<PagerComposition>
28
+ page?: number
29
+ loop?: boolean
30
+ debug?: boolean
31
+ onPageChange?: (page: number) => void
32
+ }
33
+
34
+ export type PagerRef = {
35
+ forward(by?: number): void
36
+ back(by?: number): void
37
+ to(index?: number): void
38
+ }
39
+
40
+ export const Pager = forwardRef<PagerRef, PagerProps>((pagerProps, ref) => {
41
+ const {
42
+ children,
43
+ styles,
44
+ variants,
45
+ page: propPage,
46
+ debug,
47
+ loop,
48
+ onPageChange,
49
+ } = pagerProps
50
+
51
+ const [page, setPage] = useState(() => propPage ?? 0)
52
+
53
+ const variantStyles = useDefaultComponentStyle<'u:Pager', typeof MobilePagerStyles>(
54
+ 'u:Pager',
55
+ {
56
+ styles,
57
+ transform: StyleSheet.flatten,
58
+ variants,
59
+ },
60
+ )
61
+ const { logger } = useCodeleapContext()
62
+ const nChildren = React.Children.count(children)
63
+
64
+ const lastPage = nChildren - 1
65
+
66
+ const pagerRef = useRef<PagerRef>({
67
+ forward: (by = 1) => {
68
+ setPage((currentPage) => {
69
+ if (currentPage < lastPage) {
70
+ return currentPage + by
71
+ } else if (loop) {
72
+ return by - 1
73
+ }
74
+ return currentPage
75
+ })
76
+ },
77
+ back: (by = 1) => {
78
+ setPage((currentPage) => {
79
+ if (currentPage > 0) {
80
+ return currentPage - by
81
+ } else if (loop) {
82
+ return nChildren - by
83
+ }
84
+ return currentPage
85
+ })
86
+ },
87
+ to: (n: number) => {
88
+ if (n >= 0 && n <= lastPage) {
89
+ setPage(n)
90
+ } else {
91
+ logger.warn(
92
+ 'Attempted to go to a page which falls outside range',
93
+ { currentPage: page, attemptedToGoTo: n, pageRange: [0, lastPage] },
94
+ 'Component',
95
+ )
96
+ }
97
+ },
98
+ })
99
+
100
+ onUpdate(() => {
101
+ onPageChange?.(page)
102
+ }, [page])
103
+
104
+ onUpdate(() => {
105
+ if (typeof propPage === 'number') {
106
+ setPage(propPage)
107
+ }
108
+ }, [propPage])
109
+
110
+ useImperativeHandle(ref, () => pagerRef.current)
111
+
112
+ const pagePoses = useMemo(() => {
113
+ return {
114
+ current: variantStyles['page:pose:current'],
115
+ next: variantStyles['page:pose:next'],
116
+ previous: variantStyles['page:pose:previous'],
117
+ }
118
+ }, [variantStyles])
119
+
120
+ return (
121
+ <View style={variantStyles.wrapper}>
122
+ {React.Children.map(children, (child, idx) => (
123
+ <Page
124
+ {...pagerProps}
125
+ idx={idx}
126
+ lastPage={lastPage}
127
+ pagePoses={pagePoses}
128
+ style={[variantStyles.page]}
129
+ page={page}
130
+ >
131
+ {child}
132
+ </Page>
133
+ ))}
134
+
135
+ {debug && (
136
+ <View
137
+ variants={['absolute']}
138
+ style={{ bottom: 0, left: 0, right: 0 }}
139
+ >
140
+ <Button text='previous' debugName='Previous Pager' onPress={pagerRef.current.back} />
141
+ <Text text={page.toString()} />
142
+ <Button text='next' debugName='Next Pager' onPress={pagerRef.current.forward} />
143
+ </View>
144
+ )}
145
+ </View>
146
+
147
+ )
148
+ })
149
+ type PageProps = PagerProps & {
150
+ idx: number
151
+ lastPage: number
152
+ page: number
153
+ pagePoses: any
154
+ style: any
155
+ }
156
+ const Page: React.FC<PageProps> = (pageProps) => {
157
+ const {
158
+ children: child,
159
+ idx,
160
+ loop,
161
+ lastPage,
162
+ page,
163
+ style,
164
+ pagePoses,
165
+ } = pageProps
166
+
167
+ if (!React.isValidElement(child)) return null
168
+
169
+ // const isLast = idx === lastPage
170
+ // const isFirst = idx === 0
171
+
172
+ // const isLoopNext = (loop && isFirst && page === lastPage)
173
+ // const isLoopPrevious = (loop && isLast && page === 0)
174
+
175
+ // const isCurrent = idx === page
176
+ // const isSequenceNext = idx === page + 1
177
+ // const isSequencePrevious = idx === page - 1
178
+
179
+ // const isNext = isSequenceNext || isLoopNext
180
+
181
+ // const isPrevious = isSequencePrevious || isLoopPrevious
182
+
183
+ // const isCurrentOrAdjacent = [
184
+ // isCurrent,
185
+ // isNext,
186
+ // isPrevious
187
+ // ].includes(true)
188
+
189
+ // if(isCurrentOrAdjacent){
190
+ // return <Animated
191
+ // key={idx}
192
+ // component='View'
193
+ // config={pagePoses}
194
+ // pose={isCurrent ? 'current' : (isNext ? 'next' : 'previous')}
195
+ // style={[{
196
+ // position: 'absolute',
197
+ // top: 0,
198
+
199
+ // },style]}
200
+ // >
201
+ // {child}
202
+ // </Animated>
203
+ // }
204
+ const isCurrent = idx === page
205
+ const isNext = idx > page
206
+ const [_opacity, setOpacity] = useState(isCurrent ? 1 : 0)
207
+
208
+ const [opacity, resetDebounceTimer] = useDebounce(_opacity, 800)
209
+
210
+ onUpdate(() => {
211
+ if (isCurrent) {
212
+ setOpacity(1)
213
+ } else {
214
+ setOpacity(0)
215
+ }
216
+
217
+ return resetDebounceTimer
218
+ }, [idx, page])
219
+
220
+ return (
221
+ <Animated
222
+ key={idx}
223
+ component='View'
224
+ config={pagePoses}
225
+ pose={isCurrent ? 'current' : isNext ? 'next' : 'previous'}
226
+ style={[
227
+ {
228
+ position: 'absolute',
229
+ top: 0,
230
+ opacity: isCurrent ? _opacity : opacity,
231
+ },
232
+ style,
233
+ ]}
234
+ >
235
+ {child}
236
+ </Animated>
237
+ )
238
+
239
+ // return <View style={{display:'none'}} key={idx}>{child}</View>
240
+ }