@codeleap/mobile 1.5.1 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/.eslintignore +1 -1
  2. package/.eslintrc.js +3 -3
  3. package/.vscode/settings.json +10 -10
  4. package/CodeLeap-Mobile-Packages.code-workspace +7 -7
  5. package/dist/components/ActivityIndicator.d.ts +13 -13
  6. package/dist/components/ActivityIndicator.js +50 -54
  7. package/dist/components/ActivityIndicator.js.map +1 -1
  8. package/dist/components/Animated.d.ts +15 -15
  9. package/dist/components/Animated.js +54 -58
  10. package/dist/components/Animated.js.map +1 -1
  11. package/dist/components/Button.d.ts +119 -125
  12. package/dist/components/Button.js +78 -82
  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 -77
  16. package/dist/components/Checkbox/index.js.map +1 -1
  17. package/dist/components/Checkbox/styles.d.ts +52 -55
  18. package/dist/components/Checkbox/styles.js +48 -48
  19. package/dist/components/Checkbox/styles.js.map +0 -0
  20. package/dist/components/ContentView.d.ts +10 -10
  21. package/dist/components/ContentView.js +50 -50
  22. package/dist/components/ContentView.js.map +0 -0
  23. package/dist/components/FileInput.d.ts +26 -26
  24. package/dist/components/FileInput.js +174 -178
  25. package/dist/components/FileInput.js.map +1 -1
  26. package/dist/components/Icon.d.ts +12 -12
  27. package/dist/components/Icon.js +66 -70
  28. package/dist/components/Icon.js.map +1 -1
  29. package/dist/components/Image.d.ts +18 -18
  30. package/dist/components/Image.js +55 -57
  31. package/dist/components/Image.js.map +1 -1
  32. package/dist/components/List.d.ts +12 -11
  33. package/dist/components/List.js +77 -80
  34. package/dist/components/List.js.map +1 -1
  35. package/dist/components/Modal/index.d.ts +26 -25
  36. package/dist/components/Modal/index.js +108 -112
  37. package/dist/components/Modal/index.js.map +1 -1
  38. package/dist/components/Modal/styles.d.ts +66 -69
  39. package/dist/components/Modal/styles.js +64 -64
  40. package/dist/components/Modal/styles.js.map +0 -0
  41. package/dist/components/Navigation/Navigation.d.ts +3 -3
  42. package/dist/components/Navigation/Navigation.js +83 -87
  43. package/dist/components/Navigation/Navigation.js.map +1 -1
  44. package/dist/components/Navigation/constants.d.ts +5 -5
  45. package/dist/components/Navigation/constants.js +10 -10
  46. package/dist/components/Navigation/constants.js.map +0 -0
  47. package/dist/components/Navigation/index.d.ts +3 -3
  48. package/dist/components/Navigation/index.js +15 -19
  49. package/dist/components/Navigation/index.js.map +1 -1
  50. package/dist/components/Navigation/types.d.ts +26 -26
  51. package/dist/components/Navigation/types.js +7 -7
  52. package/dist/components/Navigation/types.js.map +0 -0
  53. package/dist/components/Navigation/utils.d.ts +3 -3
  54. package/dist/components/Navigation/utils.js +69 -69
  55. package/dist/components/Navigation/utils.js.map +0 -0
  56. package/dist/components/Overlay.d.ts +16 -16
  57. package/dist/components/Overlay.js +65 -69
  58. package/dist/components/Overlay.js.map +1 -1
  59. package/dist/components/Pager/index.d.ts +19 -19
  60. package/dist/components/Pager/index.js +163 -167
  61. package/dist/components/Pager/index.js.map +1 -1
  62. package/dist/components/Pager/styles.d.ts +51 -54
  63. package/dist/components/Pager/styles.js +43 -43
  64. package/dist/components/Pager/styles.js.map +0 -0
  65. package/dist/components/RadioInput/index.d.ts +26 -26
  66. package/dist/components/RadioInput/index.js +68 -72
  67. package/dist/components/RadioInput/index.js.map +1 -1
  68. package/dist/components/RadioInput/styles.d.ts +54 -57
  69. package/dist/components/RadioInput/styles.js +44 -44
  70. package/dist/components/RadioInput/styles.js.map +0 -0
  71. package/dist/components/Scroll.d.ts +12 -11
  72. package/dist/components/Scroll.js +76 -79
  73. package/dist/components/Scroll.js.map +1 -1
  74. package/dist/components/Sections.d.ts +11 -11
  75. package/dist/components/Sections.js +76 -80
  76. package/dist/components/Sections.js.map +1 -1
  77. package/dist/components/Select/index.d.ts +5 -5
  78. package/dist/components/Select/index.js +144 -148
  79. package/dist/components/Select/index.js.map +1 -1
  80. package/dist/components/Select/styles.d.ts +9 -9
  81. package/dist/components/Select/styles.js +56 -56
  82. package/dist/components/Select/styles.js.map +0 -0
  83. package/dist/components/Select/types.d.ts +33 -33
  84. package/dist/components/Select/types.js +2 -2
  85. package/dist/components/Select/types.js.map +0 -0
  86. package/dist/components/Slider/Mark.d.ts +3 -3
  87. package/dist/components/Slider/Mark.js +31 -31
  88. package/dist/components/Slider/Mark.js.map +0 -0
  89. package/dist/components/Slider/Thumb.d.ts +7 -7
  90. package/dist/components/Slider/Thumb.js +29 -29
  91. package/dist/components/Slider/Thumb.js.map +0 -0
  92. package/dist/components/Slider/index.d.ts +3 -3
  93. package/dist/components/Slider/index.js +93 -97
  94. package/dist/components/Slider/index.js.map +1 -1
  95. package/dist/components/Slider/types.d.ts +25 -25
  96. package/dist/components/Slider/types.js +2 -2
  97. package/dist/components/Slider/types.js.map +0 -0
  98. package/dist/components/Switch.d.ts +13 -13
  99. package/dist/components/Switch.js +71 -75
  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 -52
  103. package/dist/components/Text.js.map +1 -1
  104. package/dist/components/TextInput.d.ts +164 -168
  105. package/dist/components/TextInput.js +157 -153
  106. package/dist/components/TextInput.js.map +1 -1
  107. package/dist/components/Touchable.d.ts +14 -14
  108. package/dist/components/Touchable.js +57 -61
  109. package/dist/components/Touchable.js.map +1 -1
  110. package/dist/components/View.d.ts +114 -120
  111. package/dist/components/View.js +50 -54
  112. package/dist/components/View.js.map +1 -1
  113. package/dist/components/components.d.ts +24 -24
  114. package/dist/components/components.js +36 -40
  115. package/dist/components/components.js.map +1 -1
  116. package/dist/index.d.ts +5 -5
  117. package/dist/index.js +24 -28
  118. package/dist/index.js.map +1 -1
  119. package/dist/modules/documentPicker.d.ts +3 -3
  120. package/dist/modules/documentPicker.js +11 -11
  121. package/dist/modules/documentPicker.js.map +0 -0
  122. package/dist/modules/fastImage.d.ts +1 -1
  123. package/dist/modules/fastImage.js +9 -9
  124. package/dist/modules/fastImage.js.map +0 -0
  125. package/dist/modules/reactNavigation.d.ts +3 -3
  126. package/dist/modules/reactNavigation.js +10 -10
  127. package/dist/modules/reactNavigation.js.map +0 -0
  128. package/dist/modules/types/fileTypes.d.ts +138 -138
  129. package/dist/modules/types/fileTypes.js +2 -2
  130. package/dist/modules/types/fileTypes.js.map +0 -0
  131. package/dist/types/utility.d.ts +2 -2
  132. package/dist/types/utility.js +2 -2
  133. package/dist/types/utility.js.map +0 -0
  134. package/dist/utils/OSAlert.d.ts +31 -31
  135. package/dist/utils/OSAlert.js +141 -141
  136. package/dist/utils/OSAlert.js.map +1 -1
  137. package/dist/utils/misc.d.ts +2 -2
  138. package/dist/utils/misc.js +25 -25
  139. package/dist/utils/misc.js.map +0 -0
  140. package/dist/utils/styles.d.ts +1 -1
  141. package/dist/utils/styles.js +12 -12
  142. package/dist/utils/styles.js.map +0 -0
  143. package/package.json +40 -40
  144. package/src/components/ActivityIndicator.tsx +46 -46
  145. package/src/components/Animated.tsx +34 -34
  146. package/src/components/Button.tsx +95 -95
  147. package/src/components/Checkbox/index.tsx +81 -81
  148. package/src/components/Checkbox/styles.ts +72 -72
  149. package/src/components/ContentView.tsx +58 -58
  150. package/src/components/FileInput.tsx +179 -179
  151. package/src/components/Icon.tsx +58 -58
  152. package/src/components/Image.tsx +61 -59
  153. package/src/components/List.tsx +104 -100
  154. package/src/components/Modal/index.tsx +161 -158
  155. package/src/components/Modal/styles.ts +133 -133
  156. package/src/components/Navigation/Navigation.tsx +58 -58
  157. package/src/components/Navigation/constants.ts +8 -8
  158. package/src/components/Navigation/index.tsx +3 -3
  159. package/src/components/Navigation/types.ts +35 -35
  160. package/src/components/Navigation/utils.tsx +59 -59
  161. package/src/components/Overlay.tsx +77 -77
  162. package/src/components/Pager/index.tsx +240 -240
  163. package/src/components/Pager/styles.ts +51 -51
  164. package/src/components/RadioInput/index.tsx +101 -101
  165. package/src/components/RadioInput/styles.ts +67 -67
  166. package/src/components/Scroll.tsx +102 -98
  167. package/src/components/Sections.tsx +100 -100
  168. package/src/components/Select/index.tsx +185 -184
  169. package/src/components/Select/styles.ts +81 -81
  170. package/src/components/Select/types.ts +41 -41
  171. package/src/components/Slider/Mark.tsx +46 -46
  172. package/src/components/Slider/Thumb.tsx +29 -29
  173. package/src/components/Slider/index.tsx +123 -123
  174. package/src/components/Slider/types.ts +25 -25
  175. package/src/components/Switch.tsx +81 -81
  176. package/src/components/Text.tsx +30 -30
  177. package/src/components/TextInput.tsx +211 -204
  178. package/src/components/Touchable.tsx +64 -64
  179. package/src/components/View.tsx +46 -46
  180. package/src/components/components.ts +26 -26
  181. package/src/index.ts +6 -6
  182. package/src/modules/documentPicker.ts +7 -7
  183. package/src/modules/fastImage.ts +2 -2
  184. package/src/modules/index.d.ts +496 -496
  185. package/src/modules/reactNavigation.ts +4 -4
  186. package/src/modules/types/documentPicker.d.ts +215 -215
  187. package/src/modules/types/fileTypes.ts +138 -138
  188. package/src/types/utility.ts +3 -3
  189. package/src/utils/OSAlert.ts +180 -180
  190. package/src/utils/misc.ts +24 -24
  191. package/src/utils/styles.ts +14 -14
@@ -1,179 +1,179 @@
1
- import React, { forwardRef, useImperativeHandle } from 'react'
2
- import { DocumentPicker, ImageCropPicker } from '../modules/documentPicker'
3
- import {
4
- ComponentVariants,
5
- FileInputComposition,
6
- FileInputStyles,
7
- IconPlaceholder,
8
- MobileInputFile,
9
- parseFilePathData,
10
- useDefaultComponentStyle,
11
- useCodeleapContext,
12
- } from '@codeleap/common'
13
- import { StylesOf } from '../types/utility'
14
- import { Button, ButtonProps } from './Button'
15
- import { View } from './View'
16
- import { InputLabel } from './TextInput'
17
- import OSAlert from '../utils/OSAlert'
18
- import { Options } from 'react-native-image-crop-picker'
19
- import { DocumentPickerOptions } from '../modules/types/documentPicker'
20
-
21
- export type FileInputRef = {
22
- openFilePicker: () => void
23
- }
24
-
25
- export type FileInputProps = {
26
- label?: string
27
- iconName?: IconPlaceholder
28
- styles?: StylesOf<FileInputComposition>
29
- mode: 'hidden' | 'button'
30
- variants?: ComponentVariants<typeof FileInputStyles>['variants']
31
- onFileSelect(files: MobileInputFile[]): void
32
- options?: DocumentPickerOptions<any>
33
- buttonProps?: ButtonProps
34
- ref?: FileInputRef
35
- placeholder?: string
36
- type?: 'image' | 'anyFile'
37
- alertProps?: Parameters<typeof OSAlert.ask>[0]
38
- pickerOptions?: Partial<Options>
39
- }
40
-
41
- const pickerDefaults = {
42
- width: 300,
43
- height: 400,
44
- cropping: true,
45
- }
46
-
47
- function parsePickerData(data:any):MobileInputFile {
48
-
49
- const filePathData = parseFilePathData(data.path)
50
- const d:MobileInputFile['file'] = {
51
- name: filePathData.name,
52
- size: data.size,
53
- type: data.mime,
54
- uri: data.path,
55
- fileCopyUri: data.path,
56
- }
57
-
58
- return {
59
- file: d,
60
- preview: data.path,
61
- }
62
- }
63
-
64
- export const FileInput = forwardRef<
65
- FileInputRef,
66
- FileInputProps
67
- >((fileInputProps, ref) => {
68
- const {
69
- mode = 'hidden',
70
- onFileSelect,
71
- iconName,
72
- styles,
73
- label,
74
- variants,
75
- options,
76
- type = 'image',
77
- alertProps,
78
- placeholder = 'Select a file',
79
- pickerOptions,
80
- buttonProps,
81
- } = fileInputProps
82
-
83
- const [file, setFile] = React.useState(null)
84
-
85
- const { logger } = useCodeleapContext()
86
-
87
- async function openFileSystem() {
88
- try {
89
- let files = await DocumentPicker.pick(options)
90
- if (!Array.isArray(files)) {
91
- files = [files]
92
- }
93
- setFile(files)
94
- onFileSelect(files.map((file) => ({ preview: file.uri, file })))
95
- } catch (err) {
96
- if (DocumentPicker.isCancel(err)) {
97
- logger.log('User cancelled the picker.', null, 'Component')
98
- } else {
99
- throw err
100
- }
101
- }
102
- }
103
-
104
- const mergedOptions = {
105
- ...pickerDefaults,
106
- ...pickerOptions,
107
- } as Options
108
-
109
- const handlePickerResolution = data => {
110
- onFileSelect(mergedOptions.multiple ? data.map(parsePickerData) : [
111
- parsePickerData(data),
112
- ])
113
- }
114
-
115
- const openFilePicker = async () => {
116
-
117
- if (type === 'image') {
118
- OSAlert.ask({
119
- title: 'Change Image',
120
- body: 'Do you want to take a new picture or select an existing one?',
121
- ...alertProps,
122
- options: [
123
- {
124
- text: alertProps?.options?.[0]?.text || 'Camera',
125
- onPress: () => {
126
- ImageCropPicker.openCamera(mergedOptions).then(handlePickerResolution)
127
- },
128
- ...alertProps?.options[1],
129
- },
130
- {
131
- text: 'Library',
132
- onPress: () => {
133
- ImageCropPicker.openPicker(mergedOptions).then(handlePickerResolution)
134
- },
135
- ...alertProps?.options[2],
136
- },
137
- {
138
- text: 'Cancel',
139
- style: 'cancel',
140
- onPress: () => {},
141
- ...alertProps?.options[0],
142
- },
143
-
144
- ],
145
- })
146
- } else {
147
- openFileSystem()
148
- }
149
-
150
- }
151
-
152
- const variantStyles = useDefaultComponentStyle('FileInput', {
153
- styles,
154
- variants,
155
- })
156
-
157
- useImperativeHandle(ref, () => ({
158
- openFilePicker,
159
- }))
160
-
161
- const filenames = file ? file.map((f) => f.name) : ''
162
- if (mode === 'button') {
163
- return (
164
- <View style={variantStyles.wrapper}>
165
- <InputLabel label={label} style={variantStyles.label} />
166
- <Button
167
- onPress={() => openFilePicker()}
168
- text={filenames || placeholder}
169
- debugName={'Open file picker'}
170
- icon={iconName || ('fileInputButton' as IconPlaceholder)}
171
- variants={filenames ? '' : 'icon'}
172
- {...buttonProps}
173
- />
174
- </View>
175
- )
176
- }
177
-
178
- return null
179
- })
1
+ import React, { forwardRef, useImperativeHandle } from 'react'
2
+ import { DocumentPicker, ImageCropPicker } from '../modules/documentPicker'
3
+ import {
4
+ ComponentVariants,
5
+ FileInputComposition,
6
+ FileInputStyles,
7
+ IconPlaceholder,
8
+ MobileInputFile,
9
+ parseFilePathData,
10
+ useDefaultComponentStyle,
11
+ useCodeleapContext,
12
+ } from '@codeleap/common'
13
+ import { StylesOf } from '../types/utility'
14
+ import { Button, ButtonProps } from './Button'
15
+ import { View } from './View'
16
+ import { InputLabel } from './TextInput'
17
+ import OSAlert from '../utils/OSAlert'
18
+ import { Options } from 'react-native-image-crop-picker'
19
+ import { DocumentPickerOptions } from '../modules/types/documentPicker'
20
+
21
+ export type FileInputRef = {
22
+ openFilePicker: () => void
23
+ }
24
+
25
+ export type FileInputProps = {
26
+ label?: string
27
+ iconName?: IconPlaceholder
28
+ styles?: StylesOf<FileInputComposition>
29
+ mode: 'hidden' | 'button'
30
+ variants?: ComponentVariants<typeof FileInputStyles>['variants']
31
+ onFileSelect(files: MobileInputFile[]): void
32
+ options?: DocumentPickerOptions<any>
33
+ buttonProps?: ButtonProps
34
+ ref?: FileInputRef
35
+ placeholder?: string
36
+ type?: 'image' | 'anyFile'
37
+ alertProps?: Parameters<typeof OSAlert.ask>[0]
38
+ pickerOptions?: Partial<Options>
39
+ }
40
+
41
+ const pickerDefaults = {
42
+ width: 300,
43
+ height: 400,
44
+ cropping: true,
45
+ }
46
+
47
+ function parsePickerData(data:any):MobileInputFile {
48
+
49
+ const filePathData = parseFilePathData(data.path)
50
+ const d:MobileInputFile['file'] = {
51
+ name: filePathData.name,
52
+ size: data.size,
53
+ type: data.mime,
54
+ uri: data.path,
55
+ fileCopyUri: data.path,
56
+ }
57
+
58
+ return {
59
+ file: d,
60
+ preview: data.path,
61
+ }
62
+ }
63
+
64
+ export const FileInput = forwardRef<
65
+ FileInputRef,
66
+ FileInputProps
67
+ >((fileInputProps, ref) => {
68
+ const {
69
+ mode = 'hidden',
70
+ onFileSelect,
71
+ iconName,
72
+ styles,
73
+ label,
74
+ variants,
75
+ options,
76
+ type = 'image',
77
+ alertProps,
78
+ placeholder = 'Select a file',
79
+ pickerOptions,
80
+ buttonProps,
81
+ } = fileInputProps
82
+
83
+ const [file, setFile] = React.useState(null)
84
+
85
+ const { logger } = useCodeleapContext()
86
+
87
+ async function openFileSystem() {
88
+ try {
89
+ let files = await DocumentPicker.pick(options)
90
+ if (!Array.isArray(files)) {
91
+ files = [files]
92
+ }
93
+ setFile(files)
94
+ onFileSelect(files.map((file) => ({ preview: file.uri, file })))
95
+ } catch (err) {
96
+ if (DocumentPicker.isCancel(err)) {
97
+ logger.log('User cancelled the picker.', null, 'Component')
98
+ } else {
99
+ throw err
100
+ }
101
+ }
102
+ }
103
+
104
+ const mergedOptions = {
105
+ ...pickerDefaults,
106
+ ...pickerOptions,
107
+ } as Options
108
+
109
+ const handlePickerResolution = data => {
110
+ onFileSelect(mergedOptions.multiple ? data.map(parsePickerData) : [
111
+ parsePickerData(data),
112
+ ])
113
+ }
114
+
115
+ const openFilePicker = async () => {
116
+
117
+ if (type === 'image') {
118
+ OSAlert.ask({
119
+ title: 'Change Image',
120
+ body: 'Do you want to take a new picture or select an existing one?',
121
+ ...alertProps,
122
+ options: [
123
+ {
124
+ text: alertProps?.options?.[0]?.text || 'Camera',
125
+ onPress: () => {
126
+ ImageCropPicker.openCamera(mergedOptions).then(handlePickerResolution)
127
+ },
128
+ ...alertProps?.options[1],
129
+ },
130
+ {
131
+ text: 'Library',
132
+ onPress: () => {
133
+ ImageCropPicker.openPicker(mergedOptions).then(handlePickerResolution)
134
+ },
135
+ ...alertProps?.options[2],
136
+ },
137
+ {
138
+ text: 'Cancel',
139
+ style: 'cancel',
140
+ onPress: () => {},
141
+ ...alertProps?.options[0],
142
+ },
143
+
144
+ ],
145
+ })
146
+ } else {
147
+ openFileSystem()
148
+ }
149
+
150
+ }
151
+
152
+ const variantStyles = useDefaultComponentStyle('FileInput', {
153
+ styles,
154
+ variants,
155
+ })
156
+
157
+ useImperativeHandle(ref, () => ({
158
+ openFilePicker,
159
+ }))
160
+
161
+ const filenames = file ? file.map((f) => f.name) : ''
162
+ if (mode === 'button') {
163
+ return (
164
+ <View style={variantStyles.wrapper}>
165
+ <InputLabel label={label} style={variantStyles.label} />
166
+ <Button
167
+ onPress={() => openFilePicker()}
168
+ text={filenames || placeholder}
169
+ debugName={'Open file picker'}
170
+ icon={iconName || ('fileInputButton' as IconPlaceholder)}
171
+ variants={filenames ? '' : 'icon'}
172
+ {...buttonProps}
173
+ />
174
+ </View>
175
+ )
176
+ }
177
+
178
+ return null
179
+ })
@@ -1,58 +1,58 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
- IconPlaceholder,
5
- IconStyles,
6
- useDefaultComponentStyle,
7
- useCodeleapContext,
8
- arePropsEqual,
9
- } from '@codeleap/common'
10
- import { StyleSheet } from 'react-native'
11
- import { View } from './View'
12
-
13
- export type IconProps = {
14
- name: IconPlaceholder
15
- style?: any
16
- color?: string
17
- variants?: ComponentVariants<typeof IconStyles>['variants']
18
- renderEmptySpace?: boolean
19
- size?: number
20
- }
21
-
22
- export const IconComponent: React.FC<IconProps> = ({ name, style, variants, renderEmptySpace, ...otherProps }) => {
23
- const { Theme, logger } = useCodeleapContext()
24
-
25
- const variantStyles = useDefaultComponentStyle('Icon', {
26
- variants,
27
- transform: StyleSheet.flatten,
28
- styles: {
29
- icon: style,
30
- },
31
- rootElement: 'icon',
32
- })
33
-
34
- if (!name) {
35
- return renderEmptySpace ? <View style={variantStyles.icon}/> : null
36
- }
37
-
38
- const Component = Theme?.icons?.[name]
39
-
40
- if (!Component) {
41
- logger.warn(
42
- `Icon: No icon found in theme for name "${name}".`,
43
- { props: { style, name, variants, variantStyles }},
44
- 'Component',
45
- )
46
- return null
47
- }
48
- return <Component {...otherProps} style={variantStyles.icon} />
49
- }
50
-
51
- function areEqual(prevProps, nextProps) {
52
- const check = ['name', 'style', 'variants', 'renderEmptySpace']
53
- const res = arePropsEqual(prevProps, nextProps, { check })
54
- return res
55
- }
56
-
57
- export const Icon = React.memo(IconComponent, areEqual)
58
-
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ IconPlaceholder,
5
+ IconStyles,
6
+ useDefaultComponentStyle,
7
+ useCodeleapContext,
8
+ arePropsEqual,
9
+ } from '@codeleap/common'
10
+ import { StyleSheet } from 'react-native'
11
+ import { View } from './View'
12
+
13
+ export type IconProps = {
14
+ name: IconPlaceholder
15
+ style?: any
16
+ color?: string
17
+ variants?: ComponentVariants<typeof IconStyles>['variants']
18
+ renderEmptySpace?: boolean
19
+ size?: number
20
+ }
21
+
22
+ export const IconComponent: React.FC<IconProps> = ({ name, style, variants, renderEmptySpace, ...otherProps }) => {
23
+ const { Theme, logger } = useCodeleapContext()
24
+
25
+ const variantStyles = useDefaultComponentStyle('Icon', {
26
+ variants,
27
+ transform: StyleSheet.flatten,
28
+ styles: {
29
+ icon: style,
30
+ },
31
+ rootElement: 'icon',
32
+ })
33
+
34
+ if (!name) {
35
+ return renderEmptySpace ? <View style={variantStyles.icon}/> : null
36
+ }
37
+
38
+ const Component = Theme?.icons?.[name]
39
+
40
+ if (!Component) {
41
+ logger.warn(
42
+ `Icon: No icon found in theme for name "${name}".`,
43
+ { props: { style, name, variants, variantStyles }},
44
+ 'Component',
45
+ )
46
+ return null
47
+ }
48
+ return <Component {...otherProps} style={variantStyles.icon} />
49
+ }
50
+
51
+ function areEqual(prevProps, nextProps) {
52
+ const check = ['name', 'style', 'variants', 'renderEmptySpace']
53
+ const res = arePropsEqual(prevProps, nextProps, { check })
54
+ return res
55
+ }
56
+
57
+ export const Icon = React.memo(IconComponent, areEqual)
58
+
@@ -1,59 +1,61 @@
1
- import * as React from 'react'
2
- import {
3
- ComponentVariants,
4
- ImageStyles,
5
- MobileInputFile,
6
- useDefaultComponentStyle,
7
- arePropsEqual,
8
- } from '@codeleap/common'
9
- import { ComponentPropsWithoutRef } from 'react'
10
- import {
11
- Image as NativeImage,
12
- ImageStyle,
13
- StyleProp,
14
- TextStyle,
15
- ViewStyle,
16
- } from 'react-native'
17
- import { FastImage } from '../modules/fastImage'
18
-
19
- type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>
20
- export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
21
- variants?: ComponentVariants<typeof ImageStyles>['variants']
22
- fast?: boolean
23
- style?: StyleProp<ImageStyle | TextStyle | ViewStyle>
24
- source:
25
- | (NativeImageProps['source'] & {
26
- priority?: keyof typeof FastImage.priority
27
- })
28
- | MobileInputFile
29
- | string
30
- resizeMode?: keyof typeof FastImage.resizeMode
31
- }
32
-
33
- export const ImageComponent: React.FC<ImageProps> = (props) => {
34
- const { variants, style, fast = true, resizeMode = 'contain', ...imageProps } = props
35
-
36
- const variantStyles = useDefaultComponentStyle('Image', { variants })
37
-
38
- const styles = [variantStyles.wrapper, style]
39
-
40
- if (fast) {
41
- return (
42
- <FastImage
43
- style={styles}
44
- resizeMode={FastImage.resizeMode[resizeMode || 'contain']}
45
- {...imageProps}
46
- />
47
- )
48
- }
49
- return <NativeImage style={styles} resizeMode={resizeMode} {...(imageProps as any)} />
50
- }
51
-
52
- function areEqual(prevProps, nextProps) {
53
- const check = ['source', 'style', 'variants', 'resizeMode', 'fast']
54
- const res = arePropsEqual(prevProps, nextProps, { check })
55
- return res
56
- }
57
-
58
- export const Image = React.memo(ImageComponent, areEqual)
59
-
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ ImageStyles,
5
+ MobileInputFile,
6
+ useDefaultComponentStyle,
7
+ arePropsEqual,
8
+ } from '@codeleap/common'
9
+ import { ComponentPropsWithoutRef } from 'react'
10
+ import {
11
+ Image as NativeImage,
12
+ ImageStyle,
13
+ StyleProp,
14
+ TextStyle,
15
+ ViewStyle,
16
+ } from 'react-native'
17
+ import { FastImage } from '../modules/fastImage'
18
+
19
+ type NativeImageProps = ComponentPropsWithoutRef<typeof NativeImage>
20
+ export type ImageProps = Omit<NativeImageProps, 'source' | 'style'> & {
21
+ variants?: ComponentVariants<typeof ImageStyles>['variants']
22
+ fast?: boolean
23
+ style?: StyleProp<ImageStyle | TextStyle | ViewStyle>
24
+ source:
25
+ | (NativeImageProps['source'] & {
26
+ priority?: keyof typeof FastImage.priority
27
+ })
28
+ | MobileInputFile
29
+ | string
30
+ resizeMode?: keyof typeof FastImage.resizeMode
31
+ }
32
+
33
+ export const ImageComponent: React.FC<ImageProps> = (props) => {
34
+ const { variants, style, fast = true, resizeMode = 'contain', ...imageProps } = props
35
+
36
+ const variantStyles = useDefaultComponentStyle('Image', { variants })
37
+
38
+ const styles = [variantStyles.wrapper, style]
39
+
40
+ if (fast) {
41
+ return (
42
+ <FastImage
43
+ style={styles}
44
+ // @ts-ignore
45
+ tintColor={style?.tintColor}
46
+ resizeMode={FastImage.resizeMode[resizeMode || 'contain']}
47
+ {...imageProps}
48
+ />
49
+ )
50
+ }
51
+ return <NativeImage style={styles} resizeMode={resizeMode} {...(imageProps as any)} />
52
+ }
53
+
54
+ function areEqual(prevProps, nextProps) {
55
+ const check = ['source', 'style', 'variants', 'resizeMode', 'fast']
56
+ const res = arePropsEqual(prevProps, nextProps, { check })
57
+ return res
58
+ }
59
+
60
+ export const Image = React.memo(ImageComponent, areEqual)
61
+