@codeleap/mobile 1.3.1 → 1.4.2

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
@@ -1,143 +1,158 @@
1
- import * as React from 'react'
2
- import {
3
- View,
4
- ViewProps,
5
- AnimatedView
6
- } from '../View'
7
- import { Button, ButtonProps } from '../Button'
8
- import { Scroll } from '../Scroll'
9
- import { capitalize, ComponentVariants, IconPlaceholder, onUpdate, useComponentStyle, useStyle } from '@codeleap/common'
10
- import { MobileModalComposition, MobileModalStyles, MobileModalParts } from './styles'
11
- import { StyleSheet } from 'react-native'
12
- import { StylesOf } from '../../types/utility'
13
-
14
- import { Touchable } from '../Touchable'
15
- import { Text } from '../Text'
16
- import { Animated } from '../Animated'
17
-
18
-
19
- export * from './styles'
20
-
21
- export type ModalProps = Omit<ViewProps, 'variants'|'styles'> & {
22
- variants?: ComponentVariants<typeof MobileModalStyles>['variants']
23
- styles?: StylesOf<MobileModalComposition>
24
- dismissOnBackdrop?: boolean
25
- buttonProps?: ButtonProps
26
- accessible?:boolean
27
- showClose?: boolean
28
- closable?: boolean
29
- footer?: React.ReactNode
30
- title?: React.ReactNode;
31
- debugName?: string
32
- closeIconName?: IconPlaceholder
33
- visible: boolean
34
- toggle: () => void
35
- }
36
-
37
- export const Modal:React.FC<ModalProps> = (modalProps) => {
38
-
39
- const {
40
- variants = [],
41
- styles = { },
42
- style,
43
- visible,
44
- showClose,
45
- closable = true,
46
- title,
47
- footer,
48
- children,
49
- toggle,
50
- dismissOnBackdrop = true,
51
- closeIconName = 'close',
52
- debugName,
53
- ...props
54
- } = modalProps
55
-
56
- const variantStyles = useComponentStyle('Modal', {
57
- variants: variants as any,
58
- transform: StyleSheet.flatten,
59
- styles
60
- }) as ModalProps['styles']
61
-
62
-
63
- function getStyles(key:MobileModalParts){
64
- const s = [
65
- variantStyles[key],
66
- styles[key],
67
- visible ? variantStyles[key + ':visible'] : {},
68
- visible ? styles[key + ':visible'] : {},
69
- ]
70
-
71
- return s
72
- }
73
-
74
- const buttonStyles = React.useMemo(() => {
75
- const buttonEntries = {}
76
-
77
- for(const [key,style] of Object.entries(variantStyles)){
78
- if(key.startsWith('closeButton')){
79
- buttonEntries[capitalize(key.replace('closeButton', ''), true)] = style
80
- }
81
- }
82
- return buttonEntries
83
- }, [variantStyles])
84
-
85
- const boxAnimation = {
86
- hidden : {
87
- ...variantStyles['box:pose'],
88
- ...styles['box:pose'],
89
- },
90
- visible : {
91
- ...variantStyles['box:pose:visible'],
92
- ...styles['box:pose:visible'],
93
- }
94
- }
95
-
96
- return (
97
-
98
- <View style={getStyles('wrapper')} pointerEvents={visible ? 'auto' : 'none'} >
99
- <AnimatedView style={getStyles('overlay')} transition={'opacity'}/>
100
- <Scroll style={getStyles('innerWrapper')} contentContainerStyle={getStyles('innerWrapperScroll')}>
101
- {
102
- dismissOnBackdrop &&
103
- <Touchable
104
- debugName={`${debugName} modal backdrop`}
105
- activeOpacity={1}
106
- onPress={() => toggle()}
107
- style={getStyles('touchableBackdrop')}
108
-
109
- />
110
- }
111
- <Animated component='View' config={boxAnimation} pose={visible ? 'visible' : 'hidden'} style={getStyles('box')}>
112
- {
113
- (title || showClose) &&
114
-
115
- <View style={getStyles('header')}>
116
-
117
- {typeof title === 'string' ? <Text text={title} style={getStyles('title')}/> : title}
118
-
119
- {
120
- (showClose && closable) &&
121
- <Button debugName={`${debugName} modal close button`} icon={closeIconName as IconPlaceholder} variants={['icon']} onPress={toggle} styles={buttonStyles}/>
122
- }
123
- </View>
124
- }
125
-
126
- <View style={getStyles('body')}>
127
- {children}
128
- </View>
129
- {
130
- footer && <View style={getStyles('footer')}>
131
- {footer}
132
- </View>
133
- }
134
- </Animated>
135
-
136
- </Scroll>
137
- </View>
138
- )
139
- }
140
-
141
-
142
-
143
- export default Modal
1
+ import * as React from 'react'
2
+ import { View, ViewProps, AnimatedView } from '../View'
3
+ import { Button, ButtonProps } from '../Button'
4
+ import { Scroll } from '../Scroll'
5
+ import {
6
+ capitalize,
7
+ ComponentVariants,
8
+ IconPlaceholder,
9
+ onUpdate,
10
+ useDefaultComponentStyle,
11
+ useCodeleapContext,
12
+ } from '@codeleap/common'
13
+ import {
14
+ MobileModalComposition,
15
+ MobileModalStyles,
16
+ MobileModalParts,
17
+ } from './styles'
18
+ import { StyleSheet } from 'react-native'
19
+ import { StylesOf } from '../../types/utility'
20
+
21
+ import { Touchable } from '../Touchable'
22
+ import { Text } from '../Text'
23
+ import { Animated } from '../Animated'
24
+
25
+ export * from './styles'
26
+
27
+ export type ModalProps = Omit<ViewProps, 'variants' | 'styles'> & {
28
+ variants?: ComponentVariants<typeof MobileModalStyles>['variants']
29
+ styles?: StylesOf<MobileModalComposition>
30
+ dismissOnBackdrop?: boolean
31
+ buttonProps?: ButtonProps
32
+ accessible?: boolean
33
+ showClose?: boolean
34
+ closable?: boolean
35
+ footer?: React.ReactNode
36
+ title?: React.ReactNode
37
+ debugName?: string
38
+ closeIconName?: IconPlaceholder
39
+ visible: boolean
40
+ toggle?: () => void
41
+ scroll?: boolean
42
+ }
43
+
44
+ export const Modal: React.FC<ModalProps> = (modalProps) => {
45
+ const {
46
+ variants = [],
47
+ styles = {},
48
+ visible,
49
+ showClose,
50
+ closable = true,
51
+ title,
52
+ footer,
53
+ children,
54
+ toggle = () => null,
55
+ dismissOnBackdrop = true,
56
+ closeIconName = 'close',
57
+ debugName,
58
+ scroll = true,
59
+ ...props
60
+ } = modalProps
61
+
62
+ const variantStyles = useDefaultComponentStyle('Modal', {
63
+ variants: variants as any,
64
+ transform: StyleSheet.flatten,
65
+ styles,
66
+ }) as ModalProps['styles']
67
+
68
+ function getStyles(key: MobileModalParts) {
69
+ const s = [
70
+ variantStyles[key],
71
+ styles[key],
72
+ visible ? variantStyles[key + ':visible'] : {},
73
+ visible ? styles[key + ':visible'] : {},
74
+ ]
75
+
76
+ return s
77
+ }
78
+
79
+ const buttonStyles = React.useMemo(() => {
80
+ const buttonEntries = {}
81
+
82
+ for (const [key, style] of Object.entries(variantStyles)) {
83
+ if (key.startsWith('closeButton')) {
84
+ buttonEntries[capitalize(key.replace('closeButton', ''), true)] = style
85
+ }
86
+ }
87
+ return buttonEntries
88
+ }, [variantStyles])
89
+
90
+ const boxAnimation = {
91
+ hidden: {
92
+ ...variantStyles['box:pose'],
93
+ ...styles['box:pose'],
94
+ },
95
+ visible: {
96
+ ...variantStyles['box:pose:visible'],
97
+ ...styles['box:pose:visible'],
98
+ },
99
+ }
100
+
101
+ return (
102
+ <View
103
+ style={getStyles('wrapper')}
104
+ pointerEvents={visible ? 'auto' : 'none'}
105
+ >
106
+ <AnimatedView style={getStyles('overlay')} transition={'opacity'} />
107
+ <Scroll
108
+ style={getStyles('innerWrapper')}
109
+ contentContainerStyle={getStyles('innerWrapperScroll')}
110
+ scrollEnabled={scroll}
111
+ >
112
+ {dismissOnBackdrop && (
113
+ <Touchable
114
+ debugName={`${debugName} modal backdrop`}
115
+ activeOpacity={1}
116
+ onPress={() => toggle()}
117
+ style={getStyles('touchableBackdrop')}
118
+ />
119
+ )}
120
+ <Animated
121
+ component='View'
122
+ config={boxAnimation}
123
+ pose={visible ? 'visible' : 'hidden'}
124
+ style={getStyles('box')}
125
+ >
126
+ {(title || showClose) && (
127
+ <View style={getStyles('header')}>
128
+ {typeof title === 'string' ? (
129
+ <Text text={title} style={getStyles('title')} />
130
+ ) : (
131
+ title
132
+ )}
133
+
134
+ {showClose && closable && (
135
+ <Button
136
+ debugName={`${debugName} modal close button`}
137
+ icon={closeIconName as IconPlaceholder}
138
+ variants={['icon']}
139
+ onPress={toggle}
140
+ styles={buttonStyles}
141
+ />
142
+ )}
143
+ </View>
144
+ )}
145
+
146
+ <View style={getStyles('body')}>{children}</View>
147
+ {footer && (
148
+ <View style={getStyles('footer')}>
149
+ {typeof footer === 'string' ? <Text text={footer} /> : footer}
150
+ </View>
151
+ )}
152
+ </Animated>
153
+ </Scroll>
154
+ </View>
155
+ )
156
+ }
157
+
158
+ export default Modal
@@ -1,122 +1,133 @@
1
- import { ButtonComposition, createDefaultVariantFactory, includePresets, ModalComposition, ModalStyles } from '@codeleap/common'
2
-
3
-
4
- export const backgroundTransition = {
5
- duration: 200,
6
- ease: 'easeOut',
7
- useNativeDriver: false,
8
- }
9
-
10
- export const modalTransition = {
11
- duration: 150,
12
- ease: 'easeOut',
13
- useNativeDriver: false,
14
- }
15
-
16
-
17
- export type MobileModalParts =
18
- | 'wrapper'
19
- | 'overlay'
20
- | 'innerWrapper'
21
- | 'innerWrapperScroll'
22
- | 'box'
23
- | 'footer'
24
- | 'body'
25
- | 'header'
26
- | 'touchableBackdrop'
27
- | 'box:pose'
28
-
29
- | 'title'
30
- | `closeButton${Capitalize<ButtonComposition>}`
31
-
32
- export type MobileModalComposition = MobileModalParts | `${MobileModalParts}:visible`
33
-
34
- const createModalStyle = createDefaultVariantFactory<MobileModalComposition>()
35
-
36
- const presets = includePresets((style ) => createModalStyle(() => ({wrapper: style})))
37
-
38
- const defaultModalStyles = ModalStyles
39
-
40
- export const MobileModalStyles = {
41
- ...presets,
42
- ...defaultModalStyles,
43
- default: createModalStyle((Theme) => {
44
-
45
- const fullSize = {
46
- ...Theme.presets.whole,
47
- position: 'absolute',
48
- width: Theme?.values?.width,
49
- height: Theme?.values?.height,
50
- }
51
-
52
- return {
53
- wrapper: {
54
- zIndex:1,
55
-
56
- ...fullSize
57
- },
58
-
59
- overlay: {
60
- opacity: 0,
61
- zIndex: 2,
62
-
63
- backgroundColor: Theme.colors.black,
64
- ...fullSize
65
- },
66
- "overlay:visible": {
67
- opacity: 0.5
68
- },
69
- innerWrapper: {
70
-
71
- zIndex: 3,
72
- },
73
- innerWrapperScroll: {
74
- display: 'flex',
75
- alignItems: 'center',
76
- ...Theme.presets.justifyCenter,
77
- minHeight: Theme.values.height,
78
- zIndex: 3
79
- },
80
- box: {
81
- width: '80%',
82
- backgroundColor: Theme.colors.white,
83
- zIndex: 10,
84
- borderRadius: Theme.borderRadius.medium,
85
- ...Theme.spacing.padding(1)
86
-
87
- },
88
- touchableBackdrop: {
89
- ...fullSize,
90
-
91
- zIndex:5
92
- },
93
- "box:pose": {
94
- opacity: 0,
95
- scale: 0.8,
96
- y: Theme.values.height * 0.15,
97
- transition: modalTransition,
98
- },
99
- "box:pose:visible": {
100
- y: 0,
101
- opacity: 1,
102
- scale: 1,
103
- transition: modalTransition,
104
- },
105
- header: {
106
- flexDirection: 'row',
107
- ...Theme.presets.justifySpaceBetween,
108
- ...Theme.presets.alignCenter
109
- },
110
- closeButtonWrapper: {
111
- alignSelf: 'center',
112
-
113
- }
114
-
115
-
116
- }
117
-
118
- }),
119
- popup: createModalStyle((Theme) => ({
120
-
121
- }))
122
- }
1
+ import {
2
+ ButtonComposition,
3
+ createDefaultVariantFactory,
4
+ includePresets,
5
+ ModalComposition,
6
+ ModalStyles,
7
+ assignTextStyle,
8
+ } from '@codeleap/common'
9
+
10
+ export const backgroundTransition = {
11
+ duration: 200,
12
+ ease: 'easeOut',
13
+ useNativeDriver: false,
14
+ }
15
+
16
+ export const modalTransition = {
17
+ duration: 150,
18
+ ease: 'easeOut',
19
+ useNativeDriver: false,
20
+ }
21
+
22
+ export type MobileModalParts =
23
+ | 'wrapper'
24
+ | 'overlay'
25
+ | 'innerWrapper'
26
+ | 'innerWrapperScroll'
27
+ | 'box'
28
+ | 'footer'
29
+ | 'body'
30
+ | 'header'
31
+ | 'touchableBackdrop'
32
+ | 'box:pose'
33
+ | 'title'
34
+ | `closeButton${Capitalize<ButtonComposition>}`
35
+
36
+ export type MobileModalComposition =
37
+ | MobileModalParts
38
+ | `${MobileModalParts}:visible`
39
+
40
+ const createModalStyle = createDefaultVariantFactory<MobileModalComposition>()
41
+
42
+ const presets = includePresets((style) => createModalStyle(() => ({ body: style })),
43
+ )
44
+
45
+ const defaultModalStyles = ModalStyles
46
+
47
+ export const MobileModalStyles = {
48
+ ...defaultModalStyles,
49
+ ...presets,
50
+ default: createModalStyle((Theme) => {
51
+ const fullSize = {
52
+ ...Theme.presets.whole,
53
+ position: 'absolute',
54
+ width: Theme?.values?.width,
55
+ height: Theme?.values?.height,
56
+ }
57
+
58
+ return {
59
+ wrapper: {
60
+ zIndex: 1,
61
+
62
+ ...fullSize,
63
+ },
64
+
65
+ overlay: {
66
+ opacity: 0,
67
+
68
+ backgroundColor: Theme.colors.black,
69
+ ...fullSize,
70
+ },
71
+ 'overlay:visible': {
72
+ opacity: 0.5,
73
+ },
74
+ innerWrapper: {},
75
+ innerWrapperScroll: {
76
+ display: 'flex',
77
+ alignItems: 'center',
78
+ ...Theme.presets.justifyCenter,
79
+ minHeight: Theme.values.height,
80
+ },
81
+ box: {
82
+ width: '80%',
83
+ backgroundColor: Theme.colors.background,
84
+ borderRadius: Theme.borderRadius.medium,
85
+ ...Theme.spacing.padding(2),
86
+ },
87
+ touchableBackdrop: {
88
+ ...fullSize,
89
+ },
90
+ 'box:pose': {
91
+ opacity: 0,
92
+ scale: 0.8,
93
+ transition: modalTransition,
94
+ },
95
+ 'box:pose:visible': {
96
+ opacity: 1,
97
+ scale: 1,
98
+ transition: modalTransition,
99
+ },
100
+ header: {
101
+ flexDirection: 'row',
102
+ ...Theme.presets.justifySpaceBetween,
103
+ ...Theme.presets.alignCenter,
104
+ },
105
+ closeButtonWrapper: {
106
+ alignSelf: 'center',
107
+ ...Theme.spacing.marginLeft('auto'),
108
+ },
109
+ title: {
110
+ ...Theme.presets.textCenter,
111
+ ...assignTextStyle('h3')(Theme).text,
112
+ ...Theme.spacing.paddingBottom(1),
113
+ flex: 1,
114
+ },
115
+ }
116
+ }),
117
+ popup: createModalStyle((theme) => ({})),
118
+ fullscreen: createModalStyle((theme) => ({
119
+ overlay: {
120
+ backgroundColor: theme.colors.background,
121
+ },
122
+ 'overlay:visible': {
123
+ opacity: 1,
124
+ },
125
+ box: {
126
+ flex: 1,
127
+ borderRadius: 0,
128
+ width: theme.values.width,
129
+ height: theme.values.height,
130
+ ...theme.presets.center,
131
+ },
132
+ })),
133
+ }
@@ -0,0 +1,58 @@
1
+ // @ts-nocheck
2
+ import * as React from 'react'
3
+ import {
4
+ TypeGuards,
5
+ } from '@codeleap/common'
6
+ import { Icon } from '../Icon'
7
+ import { NavigationProps, NavigatorType, PropTypes, TNavigators } from './types'
8
+ import { Navigators } from './constants'
9
+
10
+ export const Navigation = <T extends NavigatorType>({ type, scenes, ...props }: NavigationProps<T>) => {
11
+ const NavigationComponent = Navigators[type] as TNavigators[T]
12
+
13
+ const defaultProps = {}
14
+ if (type === 'Tab') {
15
+ defaultProps.screenOptions = { headerShown: false }
16
+ }
17
+ // console.log('render Navigation', { type, scenes, props, defaultProps })
18
+
19
+ return <NavigationComponent.Navigator {...(props as any)} {...defaultProps}>
20
+ {
21
+ Object.entries(scenes).map(([name, content], idx) => {
22
+ const isFunction = TypeGuards.isFunction(content)
23
+
24
+ let screenProps = {
25
+ name,
26
+ } as PropTypes[T]['Screen']
27
+
28
+ if (isFunction) {
29
+ screenProps.component = content
30
+ // console.log('Render NavigationScreen', { scenes, screenProps, content, isFunction }, 'PACKAGES')
31
+ } else {
32
+ screenProps.component = content?.component?.default || content?.component || content?.default
33
+ const nameParts = name.split('.')
34
+ const title = content?.title || nameParts[nameParts.length - 1] || name.replace('.', '')
35
+
36
+ screenProps = {
37
+ ...screenProps,
38
+ options: (optionProps) => ({
39
+ title,
40
+ tabBarIcon: (style) => <Icon name={content?.icon} style={style}/>,
41
+ tabBarIconFocused: content?.iconFocused ? (style) => <Icon name={content?.iconFocused} style={style}/> : null,
42
+ ...(TypeGuards.isFunction(content.options) ? content.options(optionProps) : content.options),
43
+ }),
44
+ }
45
+ // console.log('Render NavigationScreen loop', { scenes, screenProps, content, title, isFunction, props }, 'PACKAGES')
46
+ }
47
+
48
+ return (
49
+ // @ts-ignore
50
+ <NavigationComponent.Screen
51
+ key={idx}
52
+ {...screenProps}
53
+ />
54
+ )
55
+ })
56
+ }
57
+ </NavigationComponent.Navigator>
58
+ }
@@ -0,0 +1,8 @@
1
+ // @ts-nocheck
2
+ import { createBottomTabNavigator, createDrawerNavigator, createStackNavigator } from '../../modules/reactNavigation'
3
+
4
+ export const Navigators = {
5
+ Drawer: createDrawerNavigator(),
6
+ Stack: createStackNavigator(),
7
+ Tab: createBottomTabNavigator(),
8
+ }
@@ -0,0 +1,3 @@
1
+ export * from './Navigation'
2
+ export * from './types'
3
+ export * from './utils'
@@ -0,0 +1,35 @@
1
+ import { IconPlaceholder } from '@codeleap/common'
2
+ import { Navigators } from './constants'
3
+
4
+ export type TNavigators = typeof Navigators
5
+ export type NavigatorType = keyof TNavigators
6
+
7
+ export type PropTypes = {
8
+ [P in NavigatorType] : {
9
+ Screen: Omit<React.ComponentPropsWithRef<TNavigators[P]['Screen']>, 'children'|'name'>
10
+ Navigator: Omit<React.ComponentPropsWithRef<TNavigators[P]['Navigator']>, 'children'|'name'>
11
+ Group: Omit<React.ComponentPropsWithRef<TNavigators[P]['Group']>, 'children'|'name'>
12
+ }
13
+ }
14
+ export type SceneComponent<K extends NavigatorType> = PropTypes[K]['Screen']['component']
15
+ export type SceneOptions<K extends NavigatorType> =
16
+ { icon?: IconPlaceholder; default?:SceneComponent<K> } & PropTypes[K]['Screen']
17
+ export type Scene<K extends NavigatorType> = SceneComponent<K> | SceneOptions<K>
18
+
19
+ export type Scenes<K extends NavigatorType> = {
20
+ [x:string] : Scene<K>
21
+ }
22
+
23
+ export type SceneProps = any
24
+
25
+ export type NavigationProps<T extends NavigatorType> = {
26
+ type: T
27
+ scenes: Scenes<T>
28
+ } & PropTypes[T]['Navigator']
29
+
30
+ // export type NavigationStructure = {
31
+ // [module:string] : {
32
+ // scenes: Scenes,
33
+
34
+ // }
35
+ // }