@codeleap/mobile 1.4.3 → 1.5.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 (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 +54 -50
  7. package/dist/components/ActivityIndicator.js.map +1 -1
  8. package/dist/components/Animated.d.ts +15 -15
  9. package/dist/components/Animated.js +58 -54
  10. package/dist/components/Animated.js.map +1 -1
  11. package/dist/components/Button.d.ts +125 -119
  12. package/dist/components/Button.js +82 -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 +77 -73
  16. package/dist/components/Checkbox/index.js.map +1 -1
  17. package/dist/components/Checkbox/styles.d.ts +55 -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 +178 -174
  25. package/dist/components/FileInput.js.map +1 -1
  26. package/dist/components/Icon.d.ts +12 -12
  27. package/dist/components/Icon.js +70 -66
  28. package/dist/components/Icon.js.map +1 -1
  29. package/dist/components/Image.d.ts +18 -18
  30. package/dist/components/Image.js +57 -53
  31. package/dist/components/Image.js.map +1 -1
  32. package/dist/components/List.d.ts +11 -11
  33. package/dist/components/List.js +80 -76
  34. package/dist/components/List.js.map +1 -1
  35. package/dist/components/Modal/index.d.ts +25 -25
  36. package/dist/components/Modal/index.js +112 -108
  37. package/dist/components/Modal/index.js.map +1 -1
  38. package/dist/components/Modal/styles.d.ts +69 -66
  39. package/dist/components/Modal/styles.js +64 -64
  40. package/dist/components/Modal/styles.js.map +0 -0
  41. package/dist/components/Navigation/Navigation.d.ts +3 -3
  42. package/dist/components/Navigation/Navigation.js +87 -83
  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 +19 -15
  49. package/dist/components/Navigation/index.js.map +1 -1
  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 +0 -0
  53. package/dist/components/Navigation/utils.d.ts +3 -3
  54. package/dist/components/Navigation/utils.js +69 -69
  55. package/dist/components/Navigation/utils.js.map +0 -0
  56. package/dist/components/Overlay.d.ts +16 -16
  57. package/dist/components/Overlay.js +69 -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 +167 -163
  61. package/dist/components/Pager/index.js.map +1 -1
  62. package/dist/components/Pager/styles.d.ts +54 -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 +72 -68
  67. package/dist/components/RadioInput/index.js.map +1 -1
  68. package/dist/components/RadioInput/styles.d.ts +57 -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 +79 -75
  73. package/dist/components/Scroll.js.map +1 -1
  74. package/dist/components/Sections.d.ts +11 -11
  75. package/dist/components/Sections.js +80 -76
  76. package/dist/components/Sections.js.map +1 -1
  77. package/dist/components/Select/index.d.ts +5 -5
  78. package/dist/components/Select/index.js +148 -144
  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 +97 -93
  94. package/dist/components/Slider/index.js.map +1 -1
  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 +75 -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 +52 -48
  103. package/dist/components/Text.js.map +1 -1
  104. package/dist/components/TextInput.d.ts +168 -162
  105. package/dist/components/TextInput.js +153 -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 +61 -57
  109. package/dist/components/Touchable.js.map +1 -1
  110. package/dist/components/View.d.ts +120 -114
  111. package/dist/components/View.js +54 -50
  112. package/dist/components/View.js.map +1 -1
  113. package/dist/components/components.d.ts +24 -24
  114. package/dist/components/components.js +40 -36
  115. package/dist/components/components.js.map +1 -1
  116. package/dist/index.d.ts +5 -5
  117. package/dist/index.js +28 -24
  118. package/dist/index.js.map +1 -1
  119. package/dist/modules/documentPicker.d.ts +3 -3
  120. package/dist/modules/documentPicker.js +11 -11
  121. package/dist/modules/documentPicker.js.map +0 -0
  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 -141
  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 -40
  144. package/src/components/ActivityIndicator.tsx +46 -46
  145. package/src/components/Animated.tsx +34 -34
  146. package/src/components/Button.tsx +95 -95
  147. package/src/components/Checkbox/index.tsx +81 -81
  148. package/src/components/Checkbox/styles.ts +72 -72
  149. package/src/components/ContentView.tsx +58 -58
  150. package/src/components/FileInput.tsx +179 -179
  151. package/src/components/Icon.tsx +58 -58
  152. package/src/components/Image.tsx +59 -61
  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 -133
  156. package/src/components/Navigation/Navigation.tsx +58 -58
  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 -35
  160. package/src/components/Navigation/utils.tsx +59 -59
  161. package/src/components/Overlay.tsx +77 -77
  162. package/src/components/Pager/index.tsx +240 -240
  163. package/src/components/Pager/styles.ts +51 -51
  164. package/src/components/RadioInput/index.tsx +101 -101
  165. package/src/components/RadioInput/styles.ts +67 -67
  166. package/src/components/Scroll.tsx +98 -98
  167. package/src/components/Sections.tsx +100 -100
  168. package/src/components/Select/index.tsx +184 -184
  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 -81
  176. package/src/components/Text.tsx +30 -30
  177. package/src/components/TextInput.tsx +204 -204
  178. package/src/components/Touchable.tsx +64 -65
  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 -7
  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 +138 -138
  188. package/src/types/utility.ts +3 -3
  189. package/src/utils/OSAlert.ts +180 -180
  190. package/src/utils/misc.ts +24 -24
  191. package/src/utils/styles.ts +14 -14
@@ -1,77 +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
- debugName={'Close icon'}
70
- />
71
- )}
72
- </View>
73
- )}
74
- </View>
75
- </AnimatedTouchable>
76
- )
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
+ debugName={'Close icon'}
70
+ />
71
+ )}
72
+ </View>
73
+ )}
74
+ </View>
75
+ </AnimatedTouchable>
76
+ )
77
+ }
@@ -1,240 +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
- 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
- }
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
+ }