@codeleap/mobile 1.3.1 → 1.4.0

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 (197) 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.js +9 -6
  6. package/dist/components/ActivityIndicator.js.map +1 -1
  7. package/dist/components/Animated.d.ts +1 -89
  8. package/dist/components/Animated.js +2 -2
  9. package/dist/components/Animated.js.map +1 -1
  10. package/dist/components/Button.d.ts +107 -98
  11. package/dist/components/Button.js +29 -9
  12. package/dist/components/Button.js.map +1 -1
  13. package/dist/components/Checkbox/index.d.ts +1 -1
  14. package/dist/components/Checkbox/index.js +7 -8
  15. package/dist/components/Checkbox/index.js.map +1 -1
  16. package/dist/components/Checkbox/styles.d.ts +47 -43
  17. package/dist/components/Checkbox/styles.js +8 -8
  18. package/dist/components/Checkbox/styles.js.map +1 -1
  19. package/dist/components/ContentView.js +4 -2
  20. package/dist/components/ContentView.js.map +1 -1
  21. package/dist/components/FileInput.d.ts +10 -3
  22. package/dist/components/FileInput.js +94 -32
  23. package/dist/components/FileInput.js.map +1 -1
  24. package/dist/components/Icon.d.ts +4 -6
  25. package/dist/components/Icon.js +25 -11
  26. package/dist/components/Icon.js.map +1 -1
  27. package/dist/components/Image.d.ts +7 -6
  28. package/dist/components/Image.js +4 -4
  29. package/dist/components/Image.js.map +1 -1
  30. package/dist/components/List.d.ts +11 -0
  31. package/dist/components/List.js +77 -0
  32. package/dist/components/List.js.map +1 -0
  33. package/dist/components/Modal/index.d.ts +2 -1
  34. package/dist/components/Modal/index.js +23 -30
  35. package/dist/components/Modal/index.js.map +1 -1
  36. package/dist/components/Modal/styles.d.ts +51 -47
  37. package/dist/components/Modal/styles.js +13 -18
  38. package/dist/components/Modal/styles.js.map +1 -1
  39. package/dist/components/Navigation/Navigation.d.ts +3 -0
  40. package/dist/components/Navigation/Navigation.js +76 -0
  41. package/dist/components/Navigation/Navigation.js.map +1 -0
  42. package/dist/components/Navigation/constants.d.ts +5 -0
  43. package/dist/components/Navigation/constants.js +11 -0
  44. package/dist/components/Navigation/constants.js.map +1 -0
  45. package/dist/components/Navigation/index.d.ts +3 -0
  46. package/dist/components/Navigation/index.js +16 -0
  47. package/dist/components/Navigation/index.js.map +1 -0
  48. package/dist/components/Navigation/types.d.ts +26 -0
  49. package/dist/components/Navigation/types.js +8 -0
  50. package/dist/components/Navigation/types.js.map +1 -0
  51. package/dist/components/Navigation/utils.d.ts +3 -0
  52. package/dist/components/Navigation/utils.js +67 -0
  53. package/dist/components/Navigation/utils.js.map +1 -0
  54. package/dist/components/Overlay.d.ts +5 -5
  55. package/dist/components/Overlay.js +13 -15
  56. package/dist/components/Overlay.js.map +1 -1
  57. package/dist/components/Pager/index.d.ts +19 -0
  58. package/dist/components/Pager/index.js +164 -0
  59. package/dist/components/Pager/index.js.map +1 -0
  60. package/dist/components/Pager/styles.d.ts +51 -0
  61. package/dist/components/Pager/styles.js +44 -0
  62. package/dist/components/Pager/styles.js.map +1 -0
  63. package/dist/components/RadioInput/index.d.ts +1 -0
  64. package/dist/components/RadioInput/index.js +13 -19
  65. package/dist/components/RadioInput/index.js.map +1 -1
  66. package/dist/components/RadioInput/styles.d.ts +48 -44
  67. package/dist/components/RadioInput/styles.js +4 -4
  68. package/dist/components/RadioInput/styles.js.map +1 -1
  69. package/dist/components/Scroll.d.ts +3 -2
  70. package/dist/components/Scroll.js +11 -8
  71. package/dist/components/Scroll.js.map +1 -1
  72. package/dist/components/Sections.d.ts +11 -0
  73. package/dist/components/Sections.js +77 -0
  74. package/dist/components/Sections.js.map +1 -0
  75. package/dist/components/Select/index.d.ts +5 -2
  76. package/dist/components/Select/index.js +118 -5
  77. package/dist/components/Select/index.js.map +1 -1
  78. package/dist/components/Select/styles.d.ts +9 -0
  79. package/dist/components/Select/styles.js +57 -0
  80. package/dist/components/Select/styles.js.map +1 -0
  81. package/dist/components/Select/types.d.ts +33 -0
  82. package/dist/components/Select/types.js +3 -0
  83. package/dist/components/Select/types.js.map +1 -0
  84. package/dist/components/Slider/Mark.d.ts +3 -0
  85. package/dist/components/Slider/Mark.js +32 -0
  86. package/dist/components/Slider/Mark.js.map +1 -0
  87. package/dist/components/Slider/Thumb.d.ts +7 -0
  88. package/dist/components/Slider/Thumb.js +30 -0
  89. package/dist/components/Slider/Thumb.js.map +1 -0
  90. package/dist/components/Slider/index.d.ts +3 -0
  91. package/dist/components/Slider/index.js +94 -0
  92. package/dist/components/Slider/index.js.map +1 -0
  93. package/dist/components/{Slider.d.ts → Slider/types.d.ts} +12 -7
  94. package/dist/components/Slider/types.js +3 -0
  95. package/dist/components/Slider/types.js.map +1 -0
  96. package/dist/components/Switch.d.ts +2 -2
  97. package/dist/components/Switch.js +6 -7
  98. package/dist/components/Switch.js.map +1 -1
  99. package/dist/components/Text.js +5 -5
  100. package/dist/components/Text.js.map +1 -1
  101. package/dist/components/TextInput.d.ts +108 -94
  102. package/dist/components/TextInput.js +28 -25
  103. package/dist/components/TextInput.js.map +1 -1
  104. package/dist/components/Touchable.d.ts +1 -0
  105. package/dist/components/Touchable.js +9 -11
  106. package/dist/components/Touchable.js.map +1 -1
  107. package/dist/components/View.d.ts +97 -175
  108. package/dist/components/View.js +4 -4
  109. package/dist/components/View.js.map +1 -1
  110. package/dist/components/{index.d.ts → components.d.ts} +3 -0
  111. package/dist/components/{index.js → components.js} +4 -1
  112. package/dist/components/components.js.map +1 -0
  113. package/dist/index.d.ts +3 -1
  114. package/dist/index.js +5 -2
  115. package/dist/index.js.map +1 -1
  116. package/dist/modules/documentPicker.d.ts +3 -1
  117. package/dist/modules/documentPicker.js +6 -4
  118. package/dist/modules/documentPicker.js.map +1 -1
  119. package/dist/modules/fastImage.js +1 -1
  120. package/dist/modules/fastImage.js.map +1 -1
  121. package/dist/modules/reactNavigation.d.ts +3 -0
  122. package/dist/modules/reactNavigation.js +11 -0
  123. package/dist/modules/reactNavigation.js.map +1 -0
  124. package/dist/modules/types/fileTypes.d.ts +138 -0
  125. package/dist/modules/types/fileTypes.js +3 -0
  126. package/dist/modules/types/fileTypes.js.map +1 -0
  127. package/dist/types/utility.d.ts +1 -1
  128. package/dist/utils/OSAlert.d.ts +3 -3
  129. package/dist/utils/OSAlert.js.map +1 -1
  130. package/dist/utils/misc.d.ts +2 -0
  131. package/dist/utils/misc.js +26 -0
  132. package/dist/utils/misc.js.map +1 -0
  133. package/dist/utils/styles.js +1 -1
  134. package/dist/utils/styles.js.map +1 -1
  135. package/package.json +6 -3
  136. package/src/components/ActivityIndicator.tsx +38 -28
  137. package/src/components/Animated.tsx +22 -19
  138. package/src/components/Button.tsx +67 -34
  139. package/src/components/Checkbox/index.tsx +60 -48
  140. package/src/components/Checkbox/styles.ts +39 -30
  141. package/src/components/ContentView.tsx +24 -18
  142. package/src/components/FileInput.tsx +161 -52
  143. package/src/components/Icon.tsx +36 -23
  144. package/src/components/Image.tsx +42 -36
  145. package/src/components/List.tsx +100 -0
  146. package/src/components/Modal/index.tsx +109 -94
  147. package/src/components/Modal/styles.ts +62 -66
  148. package/src/components/Navigation/Navigation.tsx +51 -0
  149. package/src/components/Navigation/constants.ts +8 -0
  150. package/src/components/Navigation/index.tsx +3 -0
  151. package/src/components/Navigation/types.ts +37 -0
  152. package/src/components/Navigation/utils.tsx +54 -0
  153. package/src/components/Overlay.tsx +68 -64
  154. package/src/components/Pager/index.tsx +241 -0
  155. package/src/components/Pager/styles.ts +51 -0
  156. package/src/components/RadioInput/index.tsx +76 -52
  157. package/src/components/RadioInput/styles.ts +23 -18
  158. package/src/components/Scroll.tsx +84 -73
  159. package/src/components/Select/index.tsx +179 -6
  160. package/src/components/Select/styles.ts +81 -0
  161. package/src/components/Select/types.ts +41 -0
  162. package/src/components/Slider/Mark.tsx +46 -0
  163. package/src/components/Slider/Thumb.tsx +29 -0
  164. package/src/components/Slider/index.tsx +123 -0
  165. package/src/components/Slider/types.ts +25 -0
  166. package/src/components/Switch.tsx +63 -54
  167. package/src/components/Text.tsx +22 -23
  168. package/src/components/TextInput.tsx +195 -198
  169. package/src/components/Touchable.tsx +43 -30
  170. package/src/components/View.tsx +32 -29
  171. package/src/components/components.ts +26 -0
  172. package/src/index.ts +6 -3
  173. package/src/modules/documentPicker.ts +8 -2
  174. package/src/modules/fastImage.ts +2 -2
  175. package/src/modules/index.d.ts +496 -0
  176. package/src/modules/reactNavigation.ts +4 -0
  177. package/src/modules/types/documentPicker.d.ts +215 -0
  178. package/src/modules/types/fileTypes.ts +138 -0
  179. package/src/types/utility.ts +2 -2
  180. package/src/utils/OSAlert.ts +35 -33
  181. package/src/utils/misc.ts +24 -0
  182. package/src/utils/styles.ts +14 -17
  183. package/dist/components/Drawer.d.ts +0 -23
  184. package/dist/components/Drawer.js +0 -78
  185. package/dist/components/Drawer.js.map +0 -1
  186. package/dist/components/Navigation.d.ts +0 -30
  187. package/dist/components/Navigation.js +0 -126
  188. package/dist/components/Navigation.js.map +0 -1
  189. package/dist/components/Slider.js +0 -130
  190. package/dist/components/Slider.js.map +0 -1
  191. package/dist/components/index.js.map +0 -1
  192. package/dist/modules/cropPicker.d.ts +0 -1
  193. package/dist/modules/cropPicker.js +0 -10
  194. package/dist/modules/cropPicker.js.map +0 -1
  195. package/src/components/Navigation.tsx +0 -125
  196. package/src/components/Slider.tsx +0 -198
  197. package/src/components/index.ts +0 -23
@@ -1,72 +1,76 @@
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"
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'
6
11
  import { Button } from './Button'
7
12
 
8
- import { View } from "./View"
9
- import { StylesOf } from "../types/utility"
10
- import { StyleSheet, ViewProps } from "react-native"
11
- import { AnimatedTouchable } from '.'
12
-
13
+ import { View } from './View'
14
+ import { StylesOf } from '../types/utility'
15
+ import { StyleSheet, ViewProps } from 'react-native'
16
+ import { AnimatedTouchable } from './Touchable'
13
17
 
14
18
  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
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>;
37
27
 
38
- const variantStyles = useComponentStyle('Overlay', {
39
- styles,
40
- transform: StyleSheet.flatten,
41
- variants: variants as any
42
- })
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
43
39
 
44
- const touchableStyle = [
45
- variantStyles.wrapper,
46
- styles.wrapper,
47
- visible && variantStyles['wrapper:visible'],
48
- visible && styles['wrapper:visible']
49
- ]
40
+ const variantStyles = useDefaultComponentStyle('Overlay', {
41
+ styles,
42
+ transform: StyleSheet.flatten,
43
+ variants: variants as any,
44
+ }) as StylesOf<OverlayComposition>
50
45
 
46
+ const touchableStyle = [
47
+ variantStyles.wrapper,
48
+ styles.wrapper,
49
+ visible && variantStyles['wrapper:visible'],
50
+ visible && styles['wrapper:visible'],
51
+ ]
51
52
 
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
- }
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
+ }
@@ -0,0 +1,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
+
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
+ }
@@ -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
+ }
@@ -2,75 +2,99 @@ import * as React from 'react'
2
2
  import { ReactNode, useRef, ComponentPropsWithoutRef } from 'react'
3
3
  import { v4 } from 'uuid'
4
4
 
5
- import {Text } from '../Text'
5
+ import { Text } from '../Text'
6
6
  import { Touchable } from '../Touchable'
7
- import { ComponentVariants, StylesOf, useComponentStyle } from '@codeleap/common'
7
+ import {
8
+ ComponentVariants,
9
+ StylesOf,
10
+ useDefaultComponentStyle,
11
+ } from '@codeleap/common'
8
12
  import { View } from '../View'
9
- import { MobileRadioInputStyles, MobileRadioInputComposition} from './styles'
13
+ import { MobileRadioInputStyles, MobileRadioInputComposition } from './styles'
10
14
 
11
15
  export * from './styles'
12
16
 
13
17
  type RadioItem<T extends unknown = any> = {
14
- value: T,
15
- label: ReactNode
16
- }
18
+ value: T;
19
+ label: ReactNode;
20
+ };
17
21
 
18
- const getRadioStyle = (props) => useComponentStyle('RadioInput', props)
22
+ const getRadioStyle = (props) => useDefaultComponentStyle('RadioInput', props)
19
23
 
20
- export type RadioButtonProps = Omit<ComponentPropsWithoutRef<typeof Touchable>, 'style'> & {
21
- item: RadioItem
22
- select: () => void
23
- style: StylesOf<MobileRadioInputComposition>
24
- checked: boolean
25
- }
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
+ };
26
34
 
27
35
  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
-
36
+ options: RadioItem<T>[];
37
+ value: T;
38
+ onValueChange(value: T): void;
39
+ label: ReactNode;
40
+ styles?: StylesOf<MobileRadioInputComposition>;
41
+ } & ComponentVariants<typeof MobileRadioInputStyles>;
35
42
 
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>
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}>
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
+ )
50
64
  }
51
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
52
78
 
53
- export const RadioGroup = <T extends unknown>(radioGroupProps:RadioGroupProps<T>) => {
54
- const {options, value, onValueChange, label, responsiveVariants, variants, styles} = radioGroupProps
55
-
56
79
  const radioStyle = getRadioStyle({
57
80
  responsiveVariants,
58
81
  variants,
59
- styles,
82
+ styles,
60
83
  })
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
- }
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
+ item={item}
91
+ key={idx}
92
+ style={radioStyle}
93
+ checked={value === item.value}
94
+ select={() => onValueChange(item.value)}
95
+ />
96
+ ))}
97
+ </View>
74
98
  </View>
75
- </View>
99
+ )
76
100
  }
@@ -1,11 +1,18 @@
1
- import { createDefaultVariantFactory, RadioInputStyles } from '@codeleap/common';
2
- type RadioParts = 'button' | 'itemWrapper' | 'text' | 'buttonMark'
3
-
4
- type RadioGroupParts = 'label' |'wrapper' |'list'
1
+ import {
2
+ createDefaultVariantFactory,
3
+ RadioInputStyles,
4
+ } from '@codeleap/common'
5
+ type RadioParts = 'button' | 'itemWrapper' | 'text' | 'buttonMark';
5
6
 
6
- export type MobileRadioInputComposition = `${RadioParts}:checked` | RadioParts | RadioGroupParts
7
+ type RadioGroupParts = 'label' | 'wrapper' | 'list';
7
8
 
8
- const createRadioStyle = createDefaultVariantFactory<MobileRadioInputComposition>()
9
+ export type MobileRadioInputComposition =
10
+ | `${RadioParts}:checked`
11
+ | RadioParts
12
+ | RadioGroupParts;
13
+
14
+ const createRadioStyle =
15
+ createDefaultVariantFactory<MobileRadioInputComposition>()
9
16
 
10
17
  const defaultStyles = RadioInputStyles.default
11
18
 
@@ -16,47 +23,45 @@ export const MobileRadioInputStyles = {
16
23
 
17
24
  const itemHeight = theme.typography.baseFontSize * 1.2
18
25
  const markHeight = itemHeight / 2
19
- const translateX = -(markHeight/2)
20
- const translateY = -(markHeight/2)
26
+ const translateX = -(markHeight / 2)
27
+ const translateY = -(markHeight / 2)
21
28
  return {
22
29
  ...style,
23
30
  itemWrapper: {
24
31
  ...style.itemWrapper,
25
32
  },
26
- button: {
33
+ button: {
27
34
  height: itemHeight,
28
35
  width: itemHeight,
29
36
  ...theme.border.primary(1),
30
37
  borderRadius: theme.borderRadius.large,
31
-
38
+
32
39
  position: 'relative',
33
40
  ...theme.spacing.marginRight(1),
34
-
35
41
  },
36
- 'buttonMark': {
42
+ buttonMark: {
37
43
  backgroundColor: theme.colors.primary,
38
44
  position: 'absolute',
39
45
  left: '50%',
40
46
  top: '50%',
41
47
  height: markHeight,
42
48
  width: markHeight,
43
-
44
- transform: [{translateX},{translateY}],
49
+
50
+ transform: [{ translateX }, { translateY }],
45
51
  borderRadius: theme.borderRadius.large,
46
- opacity: 0
52
+ opacity: 0,
47
53
  },
48
54
  'buttonMark:checked': {
49
- opacity: 1
55
+ opacity: 1,
50
56
  },
51
57
  }
52
58
  }),
53
59
  square: createRadioStyle(() => ({
54
- 'buttonMark': {
60
+ buttonMark: {
55
61
  borderRadius: 0,
56
62
  },
57
63
  button: {
58
64
  borderRadius: 0,
59
-
60
65
  },
61
66
  })),
62
67
  }