@codeleap/mobile 1.3.0 → 1.4.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 (206) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +3 -0
  3. package/.vscode/settings.json +11 -0
  4. package/CodeLeap-Mobile-Packages.code-workspace +8 -0
  5. package/dist/components/ActivityIndicator.d.ts +13 -13
  6. package/dist/components/ActivityIndicator.js +50 -48
  7. package/dist/components/ActivityIndicator.js.map +1 -1
  8. package/dist/components/Animated.d.ts +15 -103
  9. package/dist/components/Animated.js +54 -54
  10. package/dist/components/Animated.js.map +1 -1
  11. package/dist/components/Button.d.ts +119 -110
  12. package/dist/components/Button.js +77 -57
  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 -74
  16. package/dist/components/Checkbox/index.js.map +1 -1
  17. package/dist/components/Checkbox/styles.d.ts +52 -48
  18. package/dist/components/Checkbox/styles.js +48 -48
  19. package/dist/components/Checkbox/styles.js.map +1 -1
  20. package/dist/components/ContentView.d.ts +10 -10
  21. package/dist/components/ContentView.js +50 -48
  22. package/dist/components/ContentView.js.map +1 -1
  23. package/dist/components/FileInput.d.ts +26 -19
  24. package/dist/components/FileInput.js +174 -112
  25. package/dist/components/FileInput.js.map +1 -1
  26. package/dist/components/Icon.d.ts +12 -13
  27. package/dist/components/Icon.js +66 -46
  28. package/dist/components/Icon.js.map +1 -1
  29. package/dist/components/Image.d.ts +18 -16
  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 -0
  33. package/dist/components/List.js +77 -0
  34. package/dist/components/List.js.map +1 -0
  35. package/dist/components/Modal/index.d.ts +25 -24
  36. package/dist/components/Modal/index.js +108 -115
  37. package/dist/components/Modal/index.js.map +1 -1
  38. package/dist/components/Modal/styles.d.ts +66 -62
  39. package/dist/components/Modal/styles.js +64 -61
  40. package/dist/components/Modal/styles.js.map +1 -1
  41. package/dist/components/Navigation/Navigation.d.ts +3 -0
  42. package/dist/components/Navigation/Navigation.js +84 -0
  43. package/dist/components/Navigation/Navigation.js.map +1 -0
  44. package/dist/components/Navigation/constants.d.ts +5 -0
  45. package/dist/components/Navigation/constants.js +11 -0
  46. package/dist/components/Navigation/constants.js.map +1 -0
  47. package/dist/components/Navigation/index.d.ts +3 -0
  48. package/dist/components/Navigation/index.js +16 -0
  49. package/dist/components/Navigation/index.js.map +1 -0
  50. package/dist/components/Navigation/types.d.ts +26 -0
  51. package/dist/components/Navigation/types.js +8 -0
  52. package/dist/components/Navigation/types.js.map +1 -0
  53. package/dist/components/Navigation/utils.d.ts +3 -0
  54. package/dist/components/Navigation/utils.js +70 -0
  55. package/dist/components/Navigation/utils.js.map +1 -0
  56. package/dist/components/Overlay.d.ts +16 -16
  57. package/dist/components/Overlay.js +65 -67
  58. package/dist/components/Overlay.js.map +1 -1
  59. package/dist/components/Pager/index.d.ts +19 -0
  60. package/dist/components/Pager/index.js +164 -0
  61. package/dist/components/Pager/index.js.map +1 -0
  62. package/dist/components/Pager/styles.d.ts +51 -0
  63. package/dist/components/Pager/styles.js +44 -0
  64. package/dist/components/Pager/styles.js.map +1 -0
  65. package/dist/components/RadioInput/index.d.ts +26 -25
  66. package/dist/components/RadioInput/index.js +68 -74
  67. package/dist/components/RadioInput/index.js.map +1 -1
  68. package/dist/components/RadioInput/styles.d.ts +54 -50
  69. package/dist/components/RadioInput/styles.js +44 -44
  70. package/dist/components/RadioInput/styles.js.map +1 -1
  71. package/dist/components/Scroll.d.ts +11 -10
  72. package/dist/components/Scroll.js +75 -72
  73. package/dist/components/Scroll.js.map +1 -1
  74. package/dist/components/Sections.d.ts +11 -0
  75. package/dist/components/Sections.js +77 -0
  76. package/dist/components/Sections.js.map +1 -0
  77. package/dist/components/Select/index.d.ts +5 -2
  78. package/dist/components/Select/index.js +144 -30
  79. package/dist/components/Select/index.js.map +1 -1
  80. package/dist/components/Select/styles.d.ts +9 -0
  81. package/dist/components/Select/styles.js +57 -0
  82. package/dist/components/Select/styles.js.map +1 -0
  83. package/dist/components/Select/types.d.ts +33 -0
  84. package/dist/components/Select/types.js +3 -0
  85. package/dist/components/Select/types.js.map +1 -0
  86. package/dist/components/Slider/Mark.d.ts +3 -0
  87. package/dist/components/Slider/Mark.js +32 -0
  88. package/dist/components/Slider/Mark.js.map +1 -0
  89. package/dist/components/Slider/Thumb.d.ts +7 -0
  90. package/dist/components/Slider/Thumb.js +30 -0
  91. package/dist/components/Slider/Thumb.js.map +1 -0
  92. package/dist/components/Slider/index.d.ts +3 -0
  93. package/dist/components/Slider/index.js +94 -0
  94. package/dist/components/Slider/index.js.map +1 -0
  95. package/dist/components/{Slider.d.ts → Slider/types.d.ts} +25 -20
  96. package/dist/components/Slider/types.js +3 -0
  97. package/dist/components/Slider/types.js.map +1 -0
  98. package/dist/components/Switch.d.ts +13 -13
  99. package/dist/components/Switch.js +71 -72
  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 +1 -1
  104. package/dist/components/TextInput.d.ts +162 -146
  105. package/dist/components/TextInput.js +149 -146
  106. package/dist/components/TextInput.js.map +1 -1
  107. package/dist/components/Touchable.d.ts +14 -13
  108. package/dist/components/Touchable.js +57 -59
  109. package/dist/components/Touchable.js.map +1 -1
  110. package/dist/components/View.d.ts +114 -192
  111. package/dist/components/View.js +50 -50
  112. package/dist/components/View.js.map +1 -1
  113. package/dist/components/{index.d.ts → components.d.ts} +24 -21
  114. package/dist/components/{index.js → components.js} +37 -34
  115. package/dist/components/components.js.map +1 -0
  116. package/dist/index.d.ts +5 -3
  117. package/dist/index.js +24 -21
  118. package/dist/index.js.map +1 -1
  119. package/dist/modules/documentPicker.d.ts +3 -1
  120. package/dist/modules/documentPicker.js +11 -9
  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 +1 -1
  125. package/dist/modules/reactNavigation.d.ts +3 -0
  126. package/dist/modules/reactNavigation.js +11 -0
  127. package/dist/modules/reactNavigation.js.map +1 -0
  128. package/dist/modules/types/fileTypes.d.ts +138 -0
  129. package/dist/modules/types/fileTypes.js +3 -0
  130. package/dist/modules/types/fileTypes.js.map +1 -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 -0
  138. package/dist/utils/misc.js +26 -0
  139. package/dist/utils/misc.js.map +1 -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 +1 -1
  143. package/package.json +40 -35
  144. package/src/components/ActivityIndicator.tsx +46 -37
  145. package/src/components/Animated.tsx +34 -31
  146. package/src/components/Button.tsx +95 -62
  147. package/src/components/Checkbox/index.tsx +81 -68
  148. package/src/components/Checkbox/styles.ts +72 -63
  149. package/src/components/ContentView.tsx +58 -52
  150. package/src/components/FileInput.tsx +179 -69
  151. package/src/components/Icon.tsx +58 -35
  152. package/src/components/Image.tsx +59 -43
  153. package/src/components/List.tsx +100 -0
  154. package/src/components/Modal/index.tsx +158 -143
  155. package/src/components/Modal/styles.ts +133 -122
  156. package/src/components/Navigation/Navigation.tsx +58 -0
  157. package/src/components/Navigation/constants.ts +8 -0
  158. package/src/components/Navigation/index.tsx +3 -0
  159. package/src/components/Navigation/types.ts +35 -0
  160. package/src/components/Navigation/utils.tsx +59 -0
  161. package/src/components/Overlay.tsx +77 -72
  162. package/src/components/Pager/index.tsx +240 -0
  163. package/src/components/Pager/styles.ts +51 -0
  164. package/src/components/RadioInput/index.tsx +101 -76
  165. package/src/components/RadioInput/styles.ts +67 -62
  166. package/src/components/Scroll.tsx +98 -87
  167. package/src/components/Sections.tsx +100 -0
  168. package/src/components/Select/index.tsx +184 -8
  169. package/src/components/Select/styles.ts +81 -0
  170. package/src/components/Select/types.ts +41 -0
  171. package/src/components/Slider/Mark.tsx +46 -0
  172. package/src/components/Slider/Thumb.tsx +29 -0
  173. package/src/components/Slider/index.tsx +123 -0
  174. package/src/components/Slider/types.ts +25 -0
  175. package/src/components/Switch.tsx +81 -73
  176. package/src/components/Text.tsx +30 -31
  177. package/src/components/TextInput.tsx +204 -206
  178. package/src/components/Touchable.tsx +65 -51
  179. package/src/components/View.tsx +46 -43
  180. package/src/components/components.ts +26 -0
  181. package/src/index.ts +6 -3
  182. package/src/modules/documentPicker.ts +7 -2
  183. package/src/modules/fastImage.ts +2 -2
  184. package/src/modules/index.d.ts +496 -0
  185. package/src/modules/reactNavigation.ts +4 -0
  186. package/src/modules/types/documentPicker.d.ts +215 -0
  187. package/src/modules/types/fileTypes.ts +138 -0
  188. package/src/types/utility.ts +3 -3
  189. package/src/utils/OSAlert.ts +180 -122
  190. package/src/utils/misc.ts +24 -0
  191. package/src/utils/styles.ts +14 -17
  192. package/dist/components/Drawer.d.ts +0 -23
  193. package/dist/components/Drawer.js +0 -78
  194. package/dist/components/Drawer.js.map +0 -1
  195. package/dist/components/Navigation.d.ts +0 -30
  196. package/dist/components/Navigation.js +0 -126
  197. package/dist/components/Navigation.js.map +0 -1
  198. package/dist/components/Slider.js +0 -130
  199. package/dist/components/Slider.js.map +0 -1
  200. package/dist/components/index.js.map +0 -1
  201. package/dist/modules/cropPicker.d.ts +0 -1
  202. package/dist/modules/cropPicker.js +0 -10
  203. package/dist/modules/cropPicker.js.map +0 -1
  204. package/src/components/Navigation.tsx +0 -125
  205. package/src/components/Slider.tsx +0 -198
  206. package/src/components/index.ts +0 -23
@@ -0,0 +1,59 @@
1
+ import React from 'react'
2
+ import { Navigation } from './Navigation'
3
+
4
+ export function createAppNavigation(Scenes:any) {
5
+
6
+ console.log('Creating app navigation', { Scenes }, 'PACKAGES')
7
+
8
+ const AllScenes = Object.entries<any>(Scenes).reduce((allScenes, [moduleName, content]) => {
9
+
10
+ const subScenes = []
11
+
12
+ for (const [name, sceneContent] of Object.entries(content.scenes)) {
13
+ subScenes.push(
14
+ [`${moduleName}.${name}`, sceneContent],
15
+ )
16
+ }
17
+
18
+ return [
19
+ ...allScenes,
20
+ ...subScenes,
21
+ ]
22
+ }, [])
23
+
24
+ const AppScenes = Object.fromEntries(AllScenes)
25
+
26
+ const SCENES_RESULT = Object.fromEntries(
27
+ Object.entries<any>(Scenes)
28
+ .map(([S, { _ig_scenes, exclude, type, navigationProps, ...otherProps }]) => {
29
+ let filterScenes = null
30
+
31
+ if (exclude) {
32
+ filterScenes = Object.fromEntries(
33
+ AllScenes.filter(([path]) => !exclude.some(param => path.startsWith(param))),
34
+ )
35
+ }
36
+
37
+ const Component = () => <Navigation
38
+ type={type || 'Stack'}
39
+ scenes={filterScenes || AppScenes}
40
+ screenOptions={{
41
+ headerShown: false,
42
+ ...navigationProps?.screenOptions,
43
+ }}
44
+ {...navigationProps}
45
+ />
46
+ // console.log('SCENES_RESULT create', { _ig_scenes, exclude, type, navigationProps, otherProps })
47
+
48
+ return [S, {
49
+ ...otherProps,
50
+ component: Component,
51
+ }]
52
+ }),
53
+ )
54
+
55
+ // console.log('SCENES_RESULT', SCENES_RESULT)
56
+
57
+ return SCENES_RESULT
58
+ }
59
+
@@ -1,72 +1,77 @@
1
- import * as React from 'react'
2
- import * as Animatable from 'react-native-animatable'
3
- import { ComponentVariants, IconPlaceholder, OverlayComposition, OverlayStyles, useComponentStyle } from "@codeleap/common"
4
- import { ReactNode } from "react"
5
- import { InputLabel } from "./TextInput"
6
- import { Button } from './Button'
7
-
8
- import { View } from "./View"
9
- import { StylesOf } from "../types/utility"
10
- import { StyleSheet, ViewProps } from "react-native"
11
- import { AnimatedTouchable } from '.'
12
-
13
-
14
- export type OverlayProps = ViewProps & {
15
- title?: ReactNode
16
- visible?: boolean
17
- showClose?: boolean
18
- variants?: ComponentVariants<typeof OverlayStyles>
19
- styles?: StylesOf<OverlayComposition>
20
- style?: any
21
- onPress?:() => void
22
- } & React.ComponentPropsWithoutRef<typeof AnimatedTouchable>
23
-
24
-
25
- export const Overlay:React.FC<OverlayProps> = (overlayProps) => {
26
-
27
- const {
28
- showClose,
29
- title,
30
- children,
31
- visible,
32
- styles,
33
- style,
34
- variants,
35
- ...props
36
- } = overlayProps
37
-
38
- const variantStyles = useComponentStyle('Overlay', {
39
- styles,
40
- transform: StyleSheet.flatten,
41
- variants: variants as any
42
- })
43
-
44
- const touchableStyle = [
45
- variantStyles.wrapper,
46
- styles.wrapper,
47
- visible && variantStyles['wrapper:visible'],
48
- visible && styles['wrapper:visible']
49
- ]
50
-
51
-
52
- return <AnimatedTouchable
53
- // @ts-ignore
54
- transition={'opacity'}
55
- style={touchableStyle}
56
- {...props}
57
- >
58
- <View>
59
-
60
- { (title || showClose) && (
61
- <View style={variantStyles.header}>
62
- <InputLabel style={variantStyles.title} label={title}/>
63
- {
64
- showClose && <Button variants={['icon']} icon={'close' as IconPlaceholder} style={variantStyles.closeButton}/>
65
- }
66
- </View>
67
- )}
68
-
69
- </View>
70
- </AnimatedTouchable>
71
-
72
- }
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
+ }
@@ -0,0 +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
+ }
@@ -0,0 +1,51 @@
1
+ import {
2
+ createDefaultVariantFactory,
3
+ includePresets,
4
+ } from '@codeleap/common'
5
+
6
+ export type PagerComposition =
7
+ | 'page'
8
+ | 'page:transition'
9
+ | 'page:pose:previous'
10
+ | 'page:pose:next'
11
+ | 'page:pose:current'
12
+ | 'wrapper'
13
+
14
+ const createPagerStyle = createDefaultVariantFactory<PagerComposition>()
15
+
16
+ const presets = includePresets((style) => createPagerStyle(() => ({ wrapper: style })),
17
+ )
18
+
19
+ export const MobilePagerStyles = {
20
+ ...presets,
21
+ default: createPagerStyle((Theme) => {
22
+ const transition = {
23
+ duration: 500,
24
+ ease: 'easeInOut',
25
+ useNativeDriver: true,
26
+ }
27
+
28
+ return {
29
+ wrapper: {
30
+ ...Theme.presets.full,
31
+ },
32
+ 'page:pose:next': {
33
+ left: Theme.values.width * 1.8,
34
+ transition: transition,
35
+ },
36
+ 'page:pose:current': {
37
+ left: 0,
38
+ transition: transition,
39
+ },
40
+ 'page:pose:previous': {
41
+ left: -Theme.values.width * 1.8,
42
+ transition: transition,
43
+ },
44
+ page: {
45
+ width: '100%',
46
+ height: '100%',
47
+ },
48
+ }
49
+ }),
50
+ pageless: createPagerStyle(() => ({})),
51
+ }
@@ -1,76 +1,101 @@
1
- import * as React from 'react'
2
- import { ReactNode, useRef, ComponentPropsWithoutRef } from 'react'
3
- import { v4 } from 'uuid'
4
-
5
- import {Text } from '../Text'
6
- import { Touchable } from '../Touchable'
7
- import { ComponentVariants, StylesOf, useComponentStyle } from '@codeleap/common'
8
- import { View } from '../View'
9
- import { MobileRadioInputStyles, MobileRadioInputComposition} from './styles'
10
-
11
- export * from './styles'
12
-
13
- type RadioItem<T extends unknown = any> = {
14
- value: T,
15
- label: ReactNode
16
- }
17
-
18
- const getRadioStyle = (props) => useComponentStyle('RadioInput', props)
19
-
20
- export type RadioButtonProps = Omit<ComponentPropsWithoutRef<typeof Touchable>, 'style'> & {
21
- item: RadioItem
22
- select: () => void
23
- style: StylesOf<MobileRadioInputComposition>
24
- checked: boolean
25
- }
26
-
27
- export type RadioGroupProps<T> = {
28
- options: RadioItem<T>[]
29
- value: T
30
- onValueChange(value:T):void
31
- label:ReactNode
32
- styles?: StylesOf<MobileRadioInputComposition>
33
- } & ComponentVariants<typeof MobileRadioInputStyles>
34
-
35
-
36
- export const RadioButton:React.FC<RadioButtonProps> = ({item, select, style, checked, ...props}) => {
37
-
38
- return <Touchable onPress={select} style={style.itemWrapper} >
39
- <View style={[
40
- style.button,
41
- checked && style['button:checked'],
42
- ]}>
43
- <View style={[
44
- style['buttonMark'],
45
- checked && style['buttonMark:checked'],
46
- ]} />
47
- </View>
48
- {typeof item.label === 'string' ? <Text text={item.label} style={style.text}/> : item.label }
49
- </Touchable>
50
- }
51
-
52
-
53
- export const RadioGroup = <T extends unknown>(radioGroupProps:RadioGroupProps<T>) => {
54
- const {options, value, onValueChange, label, responsiveVariants, variants, styles} = radioGroupProps
55
-
56
- const radioStyle = getRadioStyle({
57
- responsiveVariants,
58
- variants,
59
- styles,
60
- })
61
- return <View style={radioStyle.wrapper}>
62
- {typeof label === 'string' ? <Text text={label}/> : label }
63
- <View style={radioStyle.listWrapper}>
64
- {
65
- options?.map((item, idx) => <RadioButton
66
- item={item}
67
- key={idx}
68
- style={radioStyle}
69
-
70
- checked={value === item.value}
71
- select={() => onValueChange(item.value)}
72
- />)
73
- }
74
- </View>
75
- </View>
76
- }
1
+ import * as React from 'react'
2
+ import { ReactNode, useRef, ComponentPropsWithoutRef } from 'react'
3
+ import { v4 } from 'uuid'
4
+
5
+ import { Text } from '../Text'
6
+ import { Touchable } from '../Touchable'
7
+ import {
8
+ ComponentVariants,
9
+ StylesOf,
10
+ useDefaultComponentStyle,
11
+ } from '@codeleap/common'
12
+ import { View } from '../View'
13
+ import { MobileRadioInputStyles, MobileRadioInputComposition } from './styles'
14
+
15
+ export * from './styles'
16
+
17
+ type RadioItem<T extends unknown = any> = {
18
+ value: T
19
+ label: ReactNode
20
+ }
21
+
22
+ const getRadioStyle = (props) => useDefaultComponentStyle('RadioInput', props)
23
+
24
+ export type RadioButtonProps = Omit<
25
+ ComponentPropsWithoutRef<typeof Touchable>,
26
+ 'style'
27
+ > & {
28
+ item: RadioItem
29
+ select: () => void
30
+ style: StylesOf<MobileRadioInputComposition>
31
+ checked: boolean
32
+ defaultValue?: number
33
+ }
34
+
35
+ export type RadioGroupProps<T> = {
36
+ options: RadioItem<T>[]
37
+ value: T
38
+ onValueChange(value: T): void
39
+ label: ReactNode
40
+ styles?: StylesOf<MobileRadioInputComposition>
41
+ } & ComponentVariants<typeof MobileRadioInputStyles>
42
+
43
+ export const RadioButton: React.FC<RadioButtonProps> = ({
44
+ item,
45
+ select,
46
+ style,
47
+ checked,
48
+ ...props
49
+ }) => {
50
+ return (
51
+ <Touchable onPress={select} style={style.itemWrapper} debugName={'Change radioButton value'}>
52
+ <View style={[style.button, checked && style['button:checked']]}>
53
+ <View
54
+ style={[style.buttonMark, checked && style['buttonMark:checked']]}
55
+ />
56
+ </View>
57
+ {typeof item.label === 'string' ? (
58
+ <Text text={item.label} style={style.text} />
59
+ ) : (
60
+ item.label
61
+ )}
62
+ </Touchable>
63
+ )
64
+ }
65
+
66
+ export const RadioGroup = <T extends unknown>(
67
+ radioGroupProps: RadioGroupProps<T>,
68
+ ) => {
69
+ const {
70
+ options,
71
+ value,
72
+ onValueChange,
73
+ label,
74
+ responsiveVariants,
75
+ variants,
76
+ styles,
77
+ } = radioGroupProps
78
+
79
+ const radioStyle = getRadioStyle({
80
+ responsiveVariants,
81
+ variants,
82
+ styles,
83
+ })
84
+ return (
85
+ <View style={radioStyle.wrapper}>
86
+ {typeof label === 'string' ? <Text text={label} /> : label}
87
+ <View style={radioStyle.listWrapper}>
88
+ {options?.map((item, idx) => (
89
+ <RadioButton
90
+ debugName={'RadioButton'}
91
+ item={item}
92
+ key={idx}
93
+ style={radioStyle}
94
+ checked={value === item.value}
95
+ select={() => onValueChange(item.value)}
96
+ />
97
+ ))}
98
+ </View>
99
+ </View>
100
+ )
101
+ }