@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
@@ -1,62 +1,95 @@
1
- import * as React from 'react'
2
- import { useComponentStyle, ButtonStyles, ComponentVariants, ButtonComposition } from '@codeleap/common';
3
- import { forwardRef } from 'react'
4
- import { StylesOf } from '../types/utility';
5
- import { Text } from './Text';
6
- import { Touchable, TouchableProps } from './Touchable';
7
- import { Icon } from './Icon';
8
- import { ActivityIndicator } from './ActivityIndicator';
9
- import { IconPlaceholder } from '@codeleap/common';
10
- import { StyleSheet, TouchableOpacity } from 'react-native';
11
-
12
-
13
-
14
-
15
- export type ButtonProps = Omit<TouchableProps,'variants'> & ComponentVariants<typeof ButtonStyles> & {
16
- text?:string
17
- rightIcon?: IconPlaceholder
18
- icon?: IconPlaceholder
19
- styles?: StylesOf<ButtonComposition>
20
- loading?: boolean
21
- }
22
-
23
- export const Button = forwardRef<TouchableOpacity, ButtonProps>( (buttonProps,ref) => {
24
- const {
25
- variants = [],
26
- responsiveVariants = {},
27
- children,
28
- icon,
29
- text,
30
- loading,
31
- styles = {},
32
- onPress,
33
- rightIcon,
34
- ...props
35
- } = buttonProps
36
-
37
-
38
- const variantStyles = useComponentStyle('Button', {
39
- variants,
40
- })
41
-
42
-
43
- function handlePress(e:Parameters<ButtonProps['onPress']>[0]){
44
- onPress && onPress(e)
45
- }
46
-
47
-
48
- return (
49
- <Touchable
50
- style={[variantStyles.wrapper, styles.wrapper]}
51
- onPress={handlePress}
52
- ref={ref}
53
- {...props}
54
- >
55
- {loading && <ActivityIndicator style={[variantStyles.loader, styles.loader]} />}
56
- {!loading && <Icon name={icon} style={StyleSheet.flatten([variantStyles.icon, styles.icon, variantStyles.leftIcon, styles.leftIcon])}/>}
57
- {text ? <Text text={text} style={[variantStyles.text, styles.text]}/> : null}
58
- {children}
59
- <Icon name={rightIcon} style={StyleSheet.flatten([variantStyles.icon, styles.icon, variantStyles.rightIcon, styles.rightIcon])}/>
60
- </Touchable>
61
- )
62
- })
1
+ import * as React from 'react'
2
+ import {
3
+ useDefaultComponentStyle,
4
+ ButtonStyles,
5
+ ComponentVariants,
6
+ ButtonComposition,
7
+ ButtonParts,
8
+ IconPlaceholder,
9
+ } from '@codeleap/common'
10
+ import { forwardRef } from 'react'
11
+ import { StylesOf } from '../types/utility'
12
+ import { Text } from './Text'
13
+ import { Touchable, TouchableProps } from './Touchable'
14
+ import { Icon } from './Icon'
15
+ import { ActivityIndicator } from './ActivityIndicator'
16
+ import { StyleSheet, TouchableOpacity } from 'react-native'
17
+
18
+ export type ButtonProps = Omit<TouchableProps, 'variants'> &
19
+ ComponentVariants<typeof ButtonStyles> & {
20
+ text?: string
21
+ rightIcon?: IconPlaceholder
22
+ icon?: IconPlaceholder
23
+ styles?: StylesOf<ButtonComposition>
24
+ loading?: boolean
25
+ debounce?: number
26
+ debugName: string // NOTE this should not be optional
27
+ }
28
+
29
+ export const Button = forwardRef<TouchableOpacity, ButtonProps>((buttonProps, ref) => {
30
+ const {
31
+ variants = [],
32
+ children,
33
+ icon,
34
+ text,
35
+ loading,
36
+ styles = {},
37
+ onPress,
38
+ disabled,
39
+ rightIcon,
40
+ debugName,
41
+ debounce = 600,
42
+ ...props
43
+ } = buttonProps
44
+ const [pressed, setPressed] = React.useState(false)
45
+
46
+ const variantStyles = useDefaultComponentStyle('Button', {
47
+ variants,
48
+ transform: StyleSheet.flatten,
49
+ styles,
50
+ })
51
+
52
+ function handlePress() {
53
+ if (!pressed) {
54
+ setPressed(true)
55
+
56
+ setTimeout(() => setPressed(false), debounce)
57
+
58
+ onPress && onPress()
59
+ }
60
+ }
61
+
62
+ function getStyles(key: ButtonParts) {
63
+ return [
64
+ variantStyles[key],
65
+ disabled && variantStyles[key + ':disabled'],
66
+ styles[key],
67
+ disabled && styles[key + ':disabled'],
68
+ ]
69
+ }
70
+
71
+ const iconStyle = getStyles('icon')
72
+
73
+ const leftIconStyle = StyleSheet.flatten([iconStyle, getStyles('leftIcon')])
74
+ const rightIconStyle = StyleSheet.flatten([iconStyle, getStyles('rightIcon')])
75
+
76
+ const hasText = !!(text || children)
77
+ return (
78
+ <Touchable
79
+ style={getStyles('wrapper')}
80
+ onPress={handlePress}
81
+ ref={ref}
82
+ disabled={disabled}
83
+ debugComponent={'Button'}
84
+ {...props}
85
+ debugName={debugName || text || icon || 'Some button'}
86
+ >
87
+
88
+ {loading && <ActivityIndicator style={getStyles('loader')} />}
89
+ {!loading && <Icon name={icon} style={leftIconStyle} renderEmptySpace={hasText}/>}
90
+ {text ? <Text text={text} style={getStyles('text')} /> : null}
91
+ {children}
92
+ <Icon name={rightIcon} style={rightIconStyle} renderEmptySpace={hasText} />
93
+ </Touchable>
94
+ )
95
+ })
@@ -1,68 +1,81 @@
1
- import * as React from 'react'
2
- import { ComponentVariants, useComponentStyle, StylesOf, Form, useValidate } from '@codeleap/common'
3
- import { ComponentPropsWithRef, forwardRef, ReactNode } from 'react'
4
- import { Switch as NativeCheckbox } from 'react-native'
5
- import { InputLabel, FormError } from '../TextInput'
6
- import { View } from '../View'
7
- import { Touchable } from '../Touchable'
8
- import {
9
- MobileCheckboxStyles as CheckboxStyles, MobileCheckboxComposition as CheckboxComposition
10
- } from './styles'
11
- export * from './styles'
12
-
13
- type NativeCheckboxProps = Omit<
14
- ComponentPropsWithRef<typeof NativeCheckbox>,
15
- 'thumbColor'|'trackColor'
16
- >
17
- type CheckboxProps = NativeCheckboxProps & {
18
- variants?: ComponentVariants<typeof CheckboxStyles>['variants']
19
- label?: ReactNode
20
- styles?: StylesOf<CheckboxComposition>
21
- validate?: Form.ValidatorFunction | string
22
- }
23
-
24
- export const Checkbox = forwardRef<NativeCheckbox,CheckboxProps>((checkboxProps,ref) => {
25
- const {
26
- variants = [],
27
- style = {},
28
- styles = {},
29
- label,
30
- value,
31
- onValueChange,
32
- validate,
33
- ...props
34
- } = checkboxProps
35
-
36
- const variantStyles = useComponentStyle('Checkbox', {
37
- // @ts-ignore
38
- variants,
39
- })
40
-
41
- const {error, showError} = useValidate(value,validate)
42
-
43
-
44
- function getStyles(key:CheckboxComposition){
45
- return [
46
- variantStyles[key],
47
- variantStyles[key],
48
- key === 'wrapper' ? style : {},
49
- value ? variantStyles[key + ':checked'] : {},
50
- value ? styles[key + ':checked'] : {},
51
- showError ? variantStyles[key + ':error'] : {},
52
- showError ? styles[key + ':error'] : {},
53
- checkboxProps.disabled ? variantStyles[key + ':disabled'] : {},
54
- checkboxProps.disabled ? styles[key + ':disabled'] : {},
55
- ]
56
- }
57
-
58
- return <View style={getStyles('wrapper')} {...props}>
59
- <Touchable style={getStyles('input')} onPress={() => onValueChange(!value)}>
60
- <View style={getStyles('checkmarkWrapper')}>
61
- <View style={getStyles('checkmark')}/>
62
- </View>
63
- <InputLabel label={label} style={getStyles('label')}/>
64
-
65
- </Touchable>
66
- <FormError message={error.message} style={getStyles('error')} />
67
- </View>
68
- })
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ useDefaultComponentStyle,
5
+ StylesOf,
6
+ Form,
7
+ useValidate,
8
+ } from '@codeleap/common'
9
+ import { ComponentPropsWithRef, forwardRef, ReactNode } from 'react'
10
+ import { Switch as NativeCheckbox } from 'react-native'
11
+ import { InputLabel, FormError } from '../TextInput'
12
+ import { View } from '../View'
13
+ import { Touchable } from '../Touchable'
14
+ import {
15
+ MobileCheckboxStyles as CheckboxStyles,
16
+ MobileCheckboxComposition as CheckboxComposition,
17
+ } from './styles'
18
+ export * from './styles'
19
+
20
+ type NativeCheckboxProps = Omit<
21
+ ComponentPropsWithRef<typeof NativeCheckbox>,
22
+ 'thumbColor' | 'trackColor'
23
+ >
24
+ type CheckboxProps = NativeCheckboxProps & {
25
+ variants?: ComponentVariants<typeof CheckboxStyles>['variants']
26
+ label?: ReactNode
27
+ styles?: StylesOf<CheckboxComposition>
28
+ validate?: Form.ValidatorFunctionWithoutForm | string
29
+ }
30
+
31
+ export const Checkbox = forwardRef<NativeCheckbox, CheckboxProps>(
32
+ (checkboxProps, ref) => {
33
+ const {
34
+ variants = [],
35
+ style = {},
36
+ styles = {},
37
+ label,
38
+ value,
39
+ onValueChange,
40
+ validate,
41
+ ...props
42
+ } = checkboxProps
43
+
44
+ const variantStyles = useDefaultComponentStyle('Checkbox', {
45
+ // @ts-ignore
46
+ variants,
47
+ })
48
+
49
+ const { error, showError } = useValidate(value, validate)
50
+
51
+ function getStyles(key: CheckboxComposition) {
52
+ return [
53
+ variantStyles[key],
54
+ variantStyles[key],
55
+ key === 'wrapper' ? style : {},
56
+ value ? variantStyles[key + ':checked'] : {},
57
+ value ? styles[key + ':checked'] : {},
58
+ showError ? variantStyles[key + ':error'] : {},
59
+ showError ? styles[key + ':error'] : {},
60
+ checkboxProps.disabled ? variantStyles[key + ':disabled'] : {},
61
+ checkboxProps.disabled ? styles[key + ':disabled'] : {},
62
+ ]
63
+ }
64
+
65
+ return (
66
+ <View style={getStyles('wrapper')} {...props}>
67
+ <Touchable
68
+ debugName={`Set checkbox value to ${!value}`}
69
+ style={getStyles('input')}
70
+ onPress={() => onValueChange(!value)}
71
+ >
72
+ <View style={getStyles('checkmarkWrapper')}>
73
+ <View style={getStyles('checkmark')} />
74
+ </View>
75
+ <InputLabel label={label} style={getStyles('label')} />
76
+ </Touchable>
77
+ <FormError message={error.message} style={getStyles('error')} />
78
+ </View>
79
+ )
80
+ },
81
+ )
@@ -1,63 +1,72 @@
1
- import {createDefaultVariantFactory, includePresets} from '@codeleap/common'
2
-
3
- type CheckboxParts = 'wrapper' | 'label' | 'input' | 'checkmark' | 'checkmarkWrapper' | 'error'
4
-
5
- export type MobileCheckboxComposition = CheckboxParts | `${CheckboxParts}:checked` | `${CheckboxParts}:disabled` | `${CheckboxParts}:error`;
6
- const createCheckboxStyle = createDefaultVariantFactory<MobileCheckboxComposition>()
7
-
8
- const presets = includePresets((styles) => createCheckboxStyle(() => ({ wrapper: styles })))
9
-
10
- export const MobileCheckboxStyles = {
11
- ...presets,
12
- default: createCheckboxStyle((theme) => {
13
- const size = theme.typography.baseFontSize * 1.2
14
-
15
- const markHeight = size * 0.5
16
- const markWidth = size * 0.25
17
-
18
- const translateX = -(markWidth/2)
19
- const translateY = -(markHeight/2)
20
- return {
21
- wrapper: {
22
-
23
- },
24
- input: {
25
- flexDirection: 'row',
26
- ...theme.presets.alignCenter,
27
- borderRadius: theme.borderRadius.small
28
- },
29
- label: {
30
- ...theme.spacing.marginLeft(0.5),
31
- },
32
-
33
- checkmark: {
34
- position: 'absolute',
35
- top: '40%',
36
- left: '50%',
37
-
38
- height: markHeight,
39
- width: markWidth,
40
- transform: [{translateX}, {translateY}, {rotate: '45deg'},]
41
- },
42
- "checkmark:checked": {
43
- ...theme.border.white({
44
- width: 2,
45
- directions: ['right','bottom']
46
- }),
47
- },
48
- checkmarkWrapper: {
49
- position: 'relative',
50
- width: size,
51
- height: size,
52
- ...theme.border.gray(1)
53
- },
54
- "checkmarkWrapper:checked": {
55
- backgroundColor: theme.colors.primary
56
- },
57
- error: {
58
- color: theme.colors.negative
59
- }
60
- }
61
- }),
62
-
63
- }
1
+ import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
+
3
+ type CheckboxParts =
4
+ | 'wrapper'
5
+ | 'label'
6
+ | 'input'
7
+ | 'checkmark'
8
+ | 'checkmarkWrapper'
9
+ | 'error'
10
+
11
+ export type MobileCheckboxComposition =
12
+ | CheckboxParts
13
+ | `${CheckboxParts}:checked`
14
+ | `${CheckboxParts}:disabled`
15
+ | `${CheckboxParts}:error`
16
+ const createCheckboxStyle =
17
+ createDefaultVariantFactory<MobileCheckboxComposition>()
18
+
19
+ const presets = includePresets((styles) => createCheckboxStyle(() => ({ wrapper: styles })),
20
+ )
21
+
22
+ export const MobileCheckboxStyles = {
23
+ ...presets,
24
+ default: createCheckboxStyle((theme) => {
25
+ const size = theme.typography.baseFontSize * 1.2
26
+
27
+ const markHeight = size * 0.5
28
+ const markWidth = size * 0.25
29
+
30
+ const translateX = -(markWidth / 2)
31
+ const translateY = -(markHeight / 2)
32
+ return {
33
+ wrapper: {},
34
+ input: {
35
+ flexDirection: 'row',
36
+ ...theme.presets.alignCenter,
37
+ borderRadius: theme.borderRadius.small,
38
+ },
39
+ label: {
40
+ ...theme.spacing.marginLeft(0.5),
41
+ },
42
+
43
+ checkmark: {
44
+ position: 'absolute',
45
+ top: '40%',
46
+ left: '50%',
47
+
48
+ height: markHeight,
49
+ width: markWidth,
50
+ transform: [{ translateX }, { translateY }, { rotate: '45deg' }],
51
+ },
52
+ 'checkmark:checked': {
53
+ ...theme.border.white({
54
+ width: 2,
55
+ directions: ['right', 'bottom'],
56
+ }),
57
+ },
58
+ checkmarkWrapper: {
59
+ position: 'relative',
60
+ width: size,
61
+ height: size,
62
+ ...theme.border.neutral(1),
63
+ },
64
+ 'checkmarkWrapper:checked': {
65
+ backgroundColor: theme.colors.primary,
66
+ },
67
+ error: {
68
+ color: theme.colors.negative,
69
+ },
70
+ }
71
+ }),
72
+ }
@@ -1,52 +1,58 @@
1
- import React from 'react'
2
- import { ComponentVariants, ContentViewStyles, useComponentStyle, ViewComposition } from '@codeleap/common'
3
- import { ViewProps, View } from './View'
4
- import { Text } from './Text'
5
- import { StylesOf } from '../types/utility'
6
- import { ActivityIndicator } from './ActivityIndicator'
7
-
8
- export type ContentViewProps = Omit<ViewProps, 'variants' | 'responsiveVariants'> & {
9
- placeholderMsg: string
10
- loading?: boolean
11
- styles?: StylesOf<ViewComposition>
12
- } & ComponentVariants<typeof ContentViewStyles>
13
-
14
- const WrapContent = ({ children, ...props }) => <View {...props}>{children}</View>
15
-
16
- export const ContentView: React.FC<ContentViewProps> = (rawProps) => {
17
- const {
18
- children,
19
- placeholderMsg,
20
- loading,
21
- variants,
22
- styles,
23
- ...props
24
- } = rawProps
25
-
26
- const variantStyle = useComponentStyle('ContentView', {
27
- variants,
28
- styles,
29
- })
30
-
31
- if (loading) {
32
- return (
33
- <WrapContent {...props} style={variantStyle.wrapper}>
34
- <ActivityIndicator styles={{wrapper: variantStyle.loader}}/>
35
- </WrapContent>
36
- )
37
- }
38
- const hasChildren = Object.keys(children || {}).length > 0
39
- if (hasChildren) {
40
- return (
41
- <WrapContent {...props} style={variantStyle.wrapper}>
42
- {children}
43
- </WrapContent>
44
- )
45
- }
46
-
47
- return (
48
- <WrapContent {...props} style={styles}>
49
- <Text text={placeholderMsg} />
50
- </WrapContent>
51
- )
52
- }
1
+ import React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ ContentViewStyles,
5
+ useDefaultComponentStyle,
6
+ ViewComposition,
7
+ } from '@codeleap/common'
8
+ import { ViewProps, View } from './View'
9
+ import { Text } from './Text'
10
+ import { StylesOf } from '../types/utility'
11
+ import { ActivityIndicator } from './ActivityIndicator'
12
+ import { StyleSheet } from 'react-native'
13
+
14
+ export type ContentViewProps = Omit<
15
+ ViewProps,
16
+ 'variants' | 'responsiveVariants'
17
+ > & {
18
+ placeholderMsg: string
19
+ loading?: boolean
20
+ styles?: StylesOf<ViewComposition>
21
+ } & ComponentVariants<typeof ContentViewStyles>
22
+
23
+ const WrapContent = ({ children, ...props }) => (
24
+ <View {...props}>{children}</View>
25
+ )
26
+
27
+ export const ContentView: React.FC<ContentViewProps> = (rawProps) => {
28
+ const { children, placeholderMsg, loading, variants, styles, ...props } =
29
+ rawProps
30
+
31
+ const variantStyle = useDefaultComponentStyle('ContentView', {
32
+ variants,
33
+ transform: StyleSheet.flatten,
34
+ styles,
35
+ })
36
+
37
+ if (loading) {
38
+ return (
39
+ <WrapContent {...props} style={variantStyle.wrapper}>
40
+ <ActivityIndicator styles={{ wrapper: variantStyle.loader }} />
41
+ </WrapContent>
42
+ )
43
+ }
44
+ const hasChildren = Object.keys(children || {}).length > 0
45
+ if (hasChildren) {
46
+ return (
47
+ <WrapContent {...props} style={variantStyle.wrapper}>
48
+ {children}
49
+ </WrapContent>
50
+ )
51
+ }
52
+
53
+ return (
54
+ <WrapContent {...props} style={styles}>
55
+ <Text text={placeholderMsg} />
56
+ </WrapContent>
57
+ )
58
+ }