@codeleap/mobile 1.5.3 → 1.8.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 (192) hide show
  1. package/CodeLeap-Mobile-Packages.code-workspace +7 -7
  2. package/dist/components/ActivityIndicator.d.ts +13 -13
  3. package/dist/components/ActivityIndicator.js +54 -50
  4. package/dist/components/ActivityIndicator.js.map +1 -1
  5. package/dist/components/Animated.d.ts +15 -15
  6. package/dist/components/Animated.js +58 -54
  7. package/dist/components/Animated.js.map +1 -1
  8. package/dist/components/Button.d.ts +125 -119
  9. package/dist/components/Button.js +82 -77
  10. package/dist/components/Button.js.map +1 -1
  11. package/dist/components/Checkbox/index.d.ts +14 -14
  12. package/dist/components/Checkbox/index.js +77 -73
  13. package/dist/components/Checkbox/index.js.map +1 -1
  14. package/dist/components/Checkbox/styles.d.ts +55 -52
  15. package/dist/components/Checkbox/styles.js +48 -48
  16. package/dist/components/Checkbox/styles.js.map +0 -0
  17. package/dist/components/ContentView.d.ts +10 -10
  18. package/dist/components/ContentView.js +50 -50
  19. package/dist/components/ContentView.js.map +0 -0
  20. package/dist/components/FileInput.d.ts +26 -26
  21. package/dist/components/FileInput.js +178 -174
  22. package/dist/components/FileInput.js.map +1 -1
  23. package/dist/components/Icon.d.ts +12 -12
  24. package/dist/components/Icon.js +70 -66
  25. package/dist/components/Icon.js.map +1 -1
  26. package/dist/components/Icon.js3278065646 +71 -0
  27. package/dist/components/Image.d.ts +18 -18
  28. package/dist/components/Image.js +59 -53
  29. package/dist/components/Image.js.map +1 -1
  30. package/dist/components/List.d.ts +12 -11
  31. package/dist/components/List.js +82 -76
  32. package/dist/components/List.js.map +1 -1
  33. package/dist/components/Modal/index.d.ts +26 -25
  34. package/dist/components/Modal/index.js +112 -108
  35. package/dist/components/Modal/index.js.map +1 -1
  36. package/dist/components/Modal/styles.d.ts +69 -66
  37. package/dist/components/Modal/styles.js +64 -64
  38. package/dist/components/Modal/styles.js.map +0 -0
  39. package/dist/components/Navigation/Navigation.d.ts +2 -3
  40. package/dist/components/Navigation/Navigation.js +87 -83
  41. package/dist/components/Navigation/Navigation.js.map +1 -1
  42. package/dist/components/Navigation/constants.d.ts +5 -5
  43. package/dist/components/Navigation/constants.js +10 -10
  44. package/dist/components/Navigation/constants.js.map +0 -0
  45. package/dist/components/Navigation/index.d.ts +3 -3
  46. package/dist/components/Navigation/index.js +19 -15
  47. package/dist/components/Navigation/index.js.map +1 -1
  48. package/dist/components/Navigation/types.d.ts +26 -26
  49. package/dist/components/Navigation/types.js +7 -7
  50. package/dist/components/Navigation/types.js.map +0 -0
  51. package/dist/components/Navigation/utils.d.ts +3 -3
  52. package/dist/components/Navigation/utils.js +69 -69
  53. package/dist/components/Navigation/utils.js.map +0 -0
  54. package/dist/components/Overlay.d.ts +16 -16
  55. package/dist/components/Overlay.js +69 -65
  56. package/dist/components/Overlay.js.map +1 -1
  57. package/dist/components/Pager/index.d.ts +20 -19
  58. package/dist/components/Pager/index.js +167 -163
  59. package/dist/components/Pager/index.js.map +1 -1
  60. package/dist/components/Pager/styles.d.ts +54 -51
  61. package/dist/components/Pager/styles.js +43 -43
  62. package/dist/components/Pager/styles.js.map +0 -0
  63. package/dist/components/RadioInput/index.d.ts +26 -26
  64. package/dist/components/RadioInput/index.js +72 -68
  65. package/dist/components/RadioInput/index.js.map +1 -1
  66. package/dist/components/RadioInput/styles.d.ts +57 -54
  67. package/dist/components/RadioInput/styles.js +44 -44
  68. package/dist/components/RadioInput/styles.js.map +0 -0
  69. package/dist/components/Scroll.d.ts +12 -11
  70. package/dist/components/Scroll.js +80 -75
  71. package/dist/components/Scroll.js.map +1 -1
  72. package/dist/components/Sections.d.ts +11 -11
  73. package/dist/components/Sections.js +80 -76
  74. package/dist/components/Sections.js.map +1 -1
  75. package/dist/components/Select/index.d.ts +4 -5
  76. package/dist/components/Select/index.js +150 -144
  77. package/dist/components/Select/index.js.map +1 -1
  78. package/dist/components/Select/styles.d.ts +9 -9
  79. package/dist/components/Select/styles.js +56 -56
  80. package/dist/components/Select/styles.js.map +0 -0
  81. package/dist/components/Select/types.d.ts +39 -33
  82. package/dist/components/Select/types.js +2 -2
  83. package/dist/components/Select/types.js.map +0 -0
  84. package/dist/components/Slider/Mark.d.ts +3 -3
  85. package/dist/components/Slider/Mark.js +31 -31
  86. package/dist/components/Slider/Mark.js.map +0 -0
  87. package/dist/components/Slider/Thumb.d.ts +6 -7
  88. package/dist/components/Slider/Thumb.js +29 -29
  89. package/dist/components/Slider/Thumb.js.map +0 -0
  90. package/dist/components/Slider/index.d.ts +3 -3
  91. package/dist/components/Slider/index.js +97 -93
  92. package/dist/components/Slider/index.js.map +1 -1
  93. package/dist/components/Slider/types.d.ts +25 -25
  94. package/dist/components/Slider/types.js +2 -2
  95. package/dist/components/Slider/types.js.map +0 -0
  96. package/dist/components/Switch.d.ts +13 -13
  97. package/dist/components/Switch.js +75 -71
  98. package/dist/components/Switch.js.map +1 -1
  99. package/dist/components/Text.d.ts +12 -12
  100. package/dist/components/Text.js +52 -48
  101. package/dist/components/Text.js.map +1 -1
  102. package/dist/components/TextInput.d.ts +171 -162
  103. package/dist/components/TextInput.js +161 -149
  104. package/dist/components/TextInput.js.map +1 -1
  105. package/dist/components/Touchable.d.ts +14 -14
  106. package/dist/components/Touchable.js +61 -57
  107. package/dist/components/Touchable.js.map +1 -1
  108. package/dist/components/View.d.ts +120 -114
  109. package/dist/components/View.js +54 -50
  110. package/dist/components/View.js.map +1 -1
  111. package/dist/components/components.d.ts +25 -24
  112. package/dist/components/components.js +41 -36
  113. package/dist/components/components.js.map +1 -1
  114. package/dist/index.d.ts +5 -5
  115. package/dist/index.js +28 -24
  116. package/dist/index.js.map +1 -1
  117. package/dist/modules/documentPicker.d.ts +3 -3
  118. package/dist/modules/documentPicker.js +11 -11
  119. package/dist/modules/documentPicker.js.map +0 -0
  120. package/dist/modules/fastImage.d.ts +1 -1
  121. package/dist/modules/fastImage.js +9 -9
  122. package/dist/modules/fastImage.js.map +0 -0
  123. package/dist/modules/reactNavigation.d.ts +3 -3
  124. package/dist/modules/reactNavigation.js +10 -10
  125. package/dist/modules/reactNavigation.js.map +0 -0
  126. package/dist/modules/types/fileTypes.d.ts +138 -138
  127. package/dist/modules/types/fileTypes.js +2 -2
  128. package/dist/modules/types/fileTypes.js.map +0 -0
  129. package/dist/types/utility.d.ts +2 -2
  130. package/dist/types/utility.js +2 -2
  131. package/dist/types/utility.js.map +0 -0
  132. package/dist/utils/OSAlert.d.ts +31 -31
  133. package/dist/utils/OSAlert.js +141 -141
  134. package/dist/utils/OSAlert.js.map +1 -1
  135. package/dist/utils/misc.d.ts +2 -2
  136. package/dist/utils/misc.js +25 -25
  137. package/dist/utils/misc.js.map +0 -0
  138. package/dist/utils/styles.d.ts +1 -1
  139. package/dist/utils/styles.js +12 -12
  140. package/dist/utils/styles.js.map +0 -0
  141. package/package.json +38 -40
  142. package/src/components/ActivityIndicator.tsx +46 -46
  143. package/src/components/Animated.tsx +34 -34
  144. package/src/components/Button.tsx +95 -95
  145. package/src/components/Checkbox/index.tsx +81 -81
  146. package/src/components/Checkbox/styles.ts +72 -72
  147. package/src/components/ContentView.tsx +58 -58
  148. package/src/components/FileInput.tsx +179 -179
  149. package/src/components/Icon.tsx +58 -58
  150. package/src/components/Image.tsx +61 -61
  151. package/src/components/List.tsx +109 -104
  152. package/src/components/Modal/index.tsx +161 -161
  153. package/src/components/Modal/styles.ts +133 -133
  154. package/src/components/Navigation/Navigation.tsx +58 -58
  155. package/src/components/Navigation/constants.ts +8 -8
  156. package/src/components/Navigation/index.tsx +3 -3
  157. package/src/components/Navigation/types.ts +35 -35
  158. package/src/components/Navigation/utils.tsx +59 -59
  159. package/src/components/Overlay.tsx +77 -77
  160. package/src/components/Pager/index.tsx +242 -240
  161. package/src/components/Pager/styles.ts +51 -51
  162. package/src/components/RadioInput/index.tsx +101 -101
  163. package/src/components/RadioInput/styles.ts +67 -67
  164. package/src/components/Scroll.tsx +104 -102
  165. package/src/components/Sections.tsx +101 -100
  166. package/src/components/Select/index.tsx +195 -184
  167. package/src/components/Select/styles.ts +81 -81
  168. package/src/components/Select/types.ts +45 -41
  169. package/src/components/Slider/Mark.tsx +46 -46
  170. package/src/components/Slider/Thumb.tsx +29 -29
  171. package/src/components/Slider/index.tsx +123 -123
  172. package/src/components/Slider/types.ts +25 -25
  173. package/src/components/Switch.tsx +81 -81
  174. package/src/components/Text.tsx +30 -30
  175. package/src/components/TextInput.tsx +216 -211
  176. package/src/components/Touchable.tsx +64 -64
  177. package/src/components/View.tsx +46 -46
  178. package/src/components/components.ts +26 -26
  179. package/src/index.ts +6 -6
  180. package/src/modules/documentPicker.ts +7 -7
  181. package/src/modules/fastImage.ts +2 -2
  182. package/src/modules/index.d.ts +496 -496
  183. package/src/modules/reactNavigation.ts +4 -4
  184. package/src/modules/types/documentPicker.d.ts +215 -215
  185. package/src/modules/types/fileTypes.ts +138 -138
  186. package/src/types/utility.ts +3 -3
  187. package/src/utils/OSAlert.ts +180 -180
  188. package/src/utils/misc.ts +24 -24
  189. package/src/utils/styles.ts +14 -14
  190. package/.eslintignore +0 -2
  191. package/.eslintrc.js +0 -3
  192. package/.vscode/settings.json +0 -11
@@ -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,61 +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
- // @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
-
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
+