@codeleap/mobile 2.3.7 → 2.3.10

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 (344) hide show
  1. package/CodeLeap-Mobile-Packages.code-workspace +7 -7
  2. package/dist/components/ActionIcon/index.d.ts +13 -13
  3. package/dist/components/ActionIcon/index.js +54 -54
  4. package/dist/components/ActionIcon/styles.d.ts +65 -65
  5. package/dist/components/ActionIcon/styles.js +60 -60
  6. package/dist/components/ActivityIndicator/index.d.ts +15 -15
  7. package/dist/components/ActivityIndicator/index.js +58 -58
  8. package/dist/components/ActivityIndicator/styles.d.ts +59 -59
  9. package/dist/components/ActivityIndicator/styles.js +51 -51
  10. package/dist/components/Animated.d.ts +124 -124
  11. package/dist/components/Animated.js +58 -58
  12. package/dist/components/AutoComplete/index.d.ts +33 -33
  13. package/dist/components/AutoComplete/index.js +128 -128
  14. package/dist/components/AutoComplete/styles.d.ts +57 -57
  15. package/dist/components/AutoComplete/styles.js +24 -24
  16. package/dist/components/Backdrop/index.d.ts +14 -14
  17. package/dist/components/Backdrop/index.js +62 -62
  18. package/dist/components/Backdrop/styles.d.ts +53 -53
  19. package/dist/components/Backdrop/styles.js +27 -27
  20. package/dist/components/Button/index.d.ts +246 -246
  21. package/dist/components/Button/index.js +118 -118
  22. package/dist/components/Button/styles.d.ts +65 -65
  23. package/dist/components/Button/styles.js +60 -60
  24. package/dist/components/Calendar/index.d.ts +15 -15
  25. package/dist/components/Calendar/index.js +79 -79
  26. package/dist/components/Calendar/style.d.ts +4 -4
  27. package/dist/components/Calendar/style.js +35 -35
  28. package/dist/components/Calendar/types.d.ts +95 -95
  29. package/dist/components/Calendar/types.js +2 -2
  30. package/dist/components/Checkbox/index.d.ts +15 -15
  31. package/dist/components/Checkbox/index.js +84 -84
  32. package/dist/components/Checkbox/styles.d.ts +56 -56
  33. package/dist/components/Checkbox/styles.js +52 -52
  34. package/dist/components/ContentView/index.d.ts +12 -12
  35. package/dist/components/ContentView/index.js +65 -65
  36. package/dist/components/ContentView/styles.d.ts +53 -53
  37. package/dist/components/ContentView/styles.js +25 -25
  38. package/dist/components/Drawer/index.d.ts +7 -7
  39. package/dist/components/Drawer/index.js +69 -69
  40. package/dist/components/Drawer/styles.d.ts +56 -56
  41. package/dist/components/Drawer/styles.js +38 -38
  42. package/dist/components/EmptyPlaceholder/index.d.ts +22 -22
  43. package/dist/components/EmptyPlaceholder/index.js +77 -77
  44. package/dist/components/EmptyPlaceholder/styles.d.ts +55 -55
  45. package/dist/components/EmptyPlaceholder/styles.js +31 -31
  46. package/dist/components/FileInput/index.d.ts +24 -24
  47. package/dist/components/FileInput/index.js +182 -182
  48. package/dist/components/FileInput/styles.d.ts +53 -53
  49. package/dist/components/FileInput/styles.js +18 -18
  50. package/dist/components/Grid/index.d.ts +32 -32
  51. package/dist/components/Grid/index.js +83 -83
  52. package/dist/components/Grid/styles.d.ts +5 -5
  53. package/dist/components/Grid/styles.js +18 -18
  54. package/dist/components/Icon/index.d.ts +14 -14
  55. package/dist/components/Icon/index.js +78 -78
  56. package/dist/components/Icon/styles.d.ts +61 -61
  57. package/dist/components/Icon/styles.js +48 -48
  58. package/dist/components/Image/index.d.ts +20 -20
  59. package/dist/components/Image/index.js +90 -90
  60. package/dist/components/Image/styles.d.ts +54 -54
  61. package/dist/components/Image/styles.js +24 -24
  62. package/dist/components/ImageView/Spotlight.d.ts +25 -25
  63. package/dist/components/ImageView/Spotlight.js +153 -153
  64. package/dist/components/ImageView/component.d.ts +5 -5
  65. package/dist/components/ImageView/component.js +53 -53
  66. package/dist/components/ImageView/index.d.ts +2 -2
  67. package/dist/components/ImageView/index.js +18 -18
  68. package/dist/components/InputLabel/index.d.ts +12 -12
  69. package/dist/components/InputLabel/index.js +61 -61
  70. package/dist/components/InputLabel/styles.d.ts +4 -4
  71. package/dist/components/InputLabel/styles.js +25 -25
  72. package/dist/components/List/PaginationIndicator.d.ts +67 -67
  73. package/dist/components/List/PaginationIndicator.js +50 -50
  74. package/dist/components/List/index.d.ts +31 -31
  75. package/dist/components/List/index.js +80 -80
  76. package/dist/components/List/styles.d.ts +5 -5
  77. package/dist/components/List/styles.js +26 -26
  78. package/dist/components/Modal/index.d.ts +41 -41
  79. package/dist/components/Modal/index.js +143 -143
  80. package/dist/components/Modal/styles.d.ts +58 -58
  81. package/dist/components/Modal/styles.js +74 -74
  82. package/dist/components/MultiSelect/index.d.ts +6 -6
  83. package/dist/components/MultiSelect/index.js +117 -117
  84. package/dist/components/MultiSelect/styles.d.ts +58 -58
  85. package/dist/components/MultiSelect/styles.js +21 -21
  86. package/dist/components/MultiSelect/types.d.ts +35 -35
  87. package/dist/components/MultiSelect/types.js +2 -2
  88. package/dist/components/Navigation/Navigation.d.ts +3 -3
  89. package/dist/components/Navigation/Navigation.js +83 -83
  90. package/dist/components/Navigation/constants.d.ts +5 -5
  91. package/dist/components/Navigation/constants.js +10 -10
  92. package/dist/components/Navigation/index.d.ts +3 -3
  93. package/dist/components/Navigation/index.js +19 -19
  94. package/dist/components/Navigation/types.d.ts +26 -26
  95. package/dist/components/Navigation/types.js +7 -7
  96. package/dist/components/Navigation/utils.d.ts +3 -3
  97. package/dist/components/Navigation/utils.js +68 -68
  98. package/dist/components/Pager/index.d.ts +26 -26
  99. package/dist/components/Pager/index.js +87 -87
  100. package/dist/components/Pager/styles.d.ts +87 -87
  101. package/dist/components/Pager/styles.js +71 -71
  102. package/dist/components/RadioInput/index.d.ts +27 -27
  103. package/dist/components/RadioInput/index.js +75 -75
  104. package/dist/components/RadioInput/styles.d.ts +58 -58
  105. package/dist/components/RadioInput/styles.js +49 -49
  106. package/dist/components/Scroll/index.d.ts +20 -20
  107. package/dist/components/Scroll/index.js +100 -100
  108. package/dist/components/Scroll/styles.d.ts +4 -4
  109. package/dist/components/Scroll/styles.js +26 -26
  110. package/dist/components/Sections/index.d.ts +11 -11
  111. package/dist/components/Sections/index.js +79 -79
  112. package/dist/components/SegmentedControl/index.d.ts +52 -52
  113. package/dist/components/SegmentedControl/index.js +132 -132
  114. package/dist/components/SegmentedControl/styles.d.ts +60 -60
  115. package/dist/components/SegmentedControl/styles.js +42 -42
  116. package/dist/components/Select/index.d.ts +13 -13
  117. package/dist/components/Select/index.js +130 -130
  118. package/dist/components/Select/styles.d.ts +59 -59
  119. package/dist/components/Select/styles.js +31 -31
  120. package/dist/components/Select/types.d.ts +36 -36
  121. package/dist/components/Select/types.js +2 -2
  122. package/dist/components/Slider/Mark.d.ts +3 -3
  123. package/dist/components/Slider/Mark.js +31 -31
  124. package/dist/components/Slider/Thumb.d.ts +7 -7
  125. package/dist/components/Slider/Thumb.js +29 -29
  126. package/dist/components/Slider/index.d.ts +4 -4
  127. package/dist/components/Slider/index.js +102 -102
  128. package/dist/components/Slider/styles.d.ts +54 -54
  129. package/dist/components/Slider/styles.js +60 -60
  130. package/dist/components/Slider/types.d.ts +26 -26
  131. package/dist/components/Slider/types.js +2 -2
  132. package/dist/components/Switch/index.d.ts +14 -14
  133. package/dist/components/Switch/index.js +84 -84
  134. package/dist/components/Switch/styles.d.ts +55 -55
  135. package/dist/components/Switch/styles.js +33 -33
  136. package/dist/components/Text/index.d.ts +23 -23
  137. package/dist/components/Text/index.js +124 -124
  138. package/dist/components/Text/styles.d.ts +70 -70
  139. package/dist/components/Text/styles.js +30 -30
  140. package/dist/components/TextInput/index.d.ts +181 -181
  141. package/dist/components/TextInput/index.js +213 -213
  142. package/dist/components/TextInput/styles.d.ts +63 -63
  143. package/dist/components/TextInput/styles.js +64 -64
  144. package/dist/components/Touchable/index.d.ts +21 -21
  145. package/dist/components/Touchable/index.js +157 -157
  146. package/dist/components/Touchable/styles.d.ts +58 -58
  147. package/dist/components/Touchable/styles.js +23 -23
  148. package/dist/components/View/index.d.ts +132 -132
  149. package/dist/components/View/index.js +101 -101
  150. package/dist/components/View/styles.d.ts +54 -54
  151. package/dist/components/View/styles.js +28 -28
  152. package/dist/components/components.d.ts +38 -38
  153. package/dist/components/components.js +67 -67
  154. package/dist/components/defaultStyles.d.ts +1369 -1369
  155. package/dist/components/defaultStyles.js +64 -64
  156. package/dist/components/legacy/Modal/index.d.ts +28 -28
  157. package/dist/components/legacy/Modal/index.js +113 -113
  158. package/dist/components/legacy/Modal/styles.d.ts +64 -64
  159. package/dist/components/legacy/Modal/styles.js +59 -59
  160. package/dist/components/legacy/Pager/index.d.ts +20 -20
  161. package/dist/components/legacy/Pager/index.js +167 -167
  162. package/dist/components/legacy/Pager/styles.d.ts +54 -54
  163. package/dist/components/legacy/Pager/styles.js +43 -43
  164. package/dist/components/legacy/index.d.ts +2 -2
  165. package/dist/components/legacy/index.js +18 -18
  166. package/dist/index.d.ts +7 -7
  167. package/dist/index.js +42 -42
  168. package/dist/modules/documentPicker.d.ts +3 -3
  169. package/dist/modules/documentPicker.js +11 -11
  170. package/dist/modules/fastImage.d.ts +1 -1
  171. package/dist/modules/fastImage.js +9 -9
  172. package/dist/modules/reactNavigation.d.ts +5 -5
  173. package/dist/modules/reactNavigation.js +25 -25
  174. package/dist/modules/textInputMask.d.ts +10 -10
  175. package/dist/modules/textInputMask.js +22 -22
  176. package/dist/modules/types/fileTypes.d.ts +138 -138
  177. package/dist/modules/types/fileTypes.js +2 -2
  178. package/dist/modules/types/textInputMask.d.ts +7 -7
  179. package/dist/modules/types/textInputMask.js +2 -2
  180. package/dist/types/index.d.ts +1 -1
  181. package/dist/types/index.js +17 -17
  182. package/dist/types/utility.d.ts +8 -8
  183. package/dist/types/utility.js +2 -2
  184. package/dist/utils/KeyboardAware/context.d.ts +13 -13
  185. package/dist/utils/KeyboardAware/context.js +67 -67
  186. package/dist/utils/KeyboardAware/index.d.ts +8 -8
  187. package/dist/utils/KeyboardAware/index.js +32 -32
  188. package/dist/utils/KeyboardAware/keyboardHooks.d.ts +26 -26
  189. package/dist/utils/KeyboardAware/keyboardHooks.js +89 -89
  190. package/dist/utils/KeyboardAware/lib/KeyboardAwareFlatList.d.ts +3 -3
  191. package/dist/utils/KeyboardAware/lib/KeyboardAwareFlatList.js +8 -8
  192. package/dist/utils/KeyboardAware/lib/KeyboardAwareHOC.d.ts +67 -67
  193. package/dist/utils/KeyboardAware/lib/KeyboardAwareHOC.js +450 -450
  194. package/dist/utils/KeyboardAware/lib/KeyboardAwareInterface.d.ts +7 -7
  195. package/dist/utils/KeyboardAware/lib/KeyboardAwareInterface.js +3 -3
  196. package/dist/utils/KeyboardAware/lib/KeyboardAwareScrollView.d.ts +3 -3
  197. package/dist/utils/KeyboardAware/lib/KeyboardAwareScrollView.js +9 -9
  198. package/dist/utils/KeyboardAware/lib/KeyboardAwareSectionList.d.ts +3 -3
  199. package/dist/utils/KeyboardAware/lib/KeyboardAwareSectionList.js +9 -9
  200. package/dist/utils/KeyboardAware/types.d.ts +1 -1
  201. package/dist/utils/KeyboardAware/types.js +6 -6
  202. package/dist/utils/ModalManager/components.d.ts +20 -20
  203. package/dist/utils/ModalManager/components.js +117 -117
  204. package/dist/utils/ModalManager/context.d.ts +48 -48
  205. package/dist/utils/ModalManager/context.js +204 -204
  206. package/dist/utils/ModalManager/index.d.ts +11 -11
  207. package/dist/utils/ModalManager/index.js +12 -12
  208. package/dist/utils/OSAlert.d.ts +32 -32
  209. package/dist/utils/OSAlert.js +142 -142
  210. package/dist/utils/PermissionManager/context.d.ts +52 -52
  211. package/dist/utils/PermissionManager/context.js +315 -315
  212. package/dist/utils/PermissionManager/index.d.ts +4 -4
  213. package/dist/utils/PermissionManager/index.js +8 -8
  214. package/dist/utils/PermissionManager/types.d.ts +13 -13
  215. package/dist/utils/PermissionManager/types.js +2 -2
  216. package/dist/utils/hooks.d.ts +40 -40
  217. package/dist/utils/hooks.js +130 -130
  218. package/dist/utils/index.d.ts +10 -10
  219. package/dist/utils/index.js +39 -39
  220. package/dist/utils/input.d.ts +35 -35
  221. package/dist/utils/input.js +48 -48
  222. package/dist/utils/misc.d.ts +6 -6
  223. package/dist/utils/misc.js +86 -86
  224. package/dist/utils/notifications.d.ts +34 -34
  225. package/dist/utils/notifications.js +267 -267
  226. package/dist/utils/theme.d.ts +42 -42
  227. package/dist/utils/theme.js +52 -52
  228. package/package.json +54 -54
  229. package/src/components/ActionIcon/index.tsx +32 -0
  230. package/src/components/ActionIcon/styles.ts +97 -0
  231. package/src/components/ActivityIndicator/index.tsx +50 -0
  232. package/src/components/ActivityIndicator/styles.ts +68 -0
  233. package/src/components/Animated.tsx +34 -0
  234. package/src/components/AutoComplete/index.tsx +163 -0
  235. package/src/components/AutoComplete/styles.ts +44 -0
  236. package/src/components/Backdrop/index.tsx +48 -0
  237. package/src/components/Backdrop/styles.ts +33 -0
  238. package/src/components/Button/index.tsx +155 -0
  239. package/src/components/Button/styles.ts +129 -0
  240. package/src/components/Calendar/index.tsx +65 -0
  241. package/src/components/Calendar/style.ts +35 -0
  242. package/src/components/Calendar/types.ts +102 -0
  243. package/src/components/Checkbox/index.tsx +91 -0
  244. package/src/components/Checkbox/styles.ts +81 -0
  245. package/src/components/ContentView/index.tsx +63 -0
  246. package/src/components/ContentView/styles.ts +24 -0
  247. package/src/components/Drawer/index.tsx +33 -0
  248. package/src/components/Drawer/styles.ts +43 -0
  249. package/src/components/EmptyPlaceholder/index.tsx +88 -0
  250. package/src/components/EmptyPlaceholder/styles.ts +58 -0
  251. package/src/components/FileInput/index.tsx +181 -0
  252. package/src/components/FileInput/styles.ts +15 -0
  253. package/src/components/Grid/index.tsx +117 -0
  254. package/src/components/Grid/styles.ts +11 -0
  255. package/src/components/Icon/index.tsx +69 -0
  256. package/src/components/Icon/styles.ts +57 -0
  257. package/src/components/Image/index.tsx +91 -0
  258. package/src/components/Image/styles.ts +20 -0
  259. package/src/components/ImageView/Spotlight.tsx +157 -0
  260. package/src/components/ImageView/component.tsx +38 -0
  261. package/src/components/ImageView/index.ts +2 -0
  262. package/src/components/InputLabel/index.tsx +38 -0
  263. package/src/components/InputLabel/styles.ts +19 -0
  264. package/src/components/List/PaginationIndicator.tsx +71 -0
  265. package/src/components/List/index.tsx +114 -0
  266. package/src/components/List/styles.ts +19 -0
  267. package/src/components/Modal/index.tsx +218 -0
  268. package/src/components/Modal/styles.ts +153 -0
  269. package/src/components/MultiSelect/index.tsx +138 -0
  270. package/src/components/MultiSelect/styles.ts +18 -0
  271. package/src/components/MultiSelect/types.ts +42 -0
  272. package/src/components/Navigation/Navigation.tsx +54 -0
  273. package/src/components/Navigation/constants.ts +8 -0
  274. package/src/components/Navigation/index.tsx +3 -0
  275. package/src/components/Navigation/types.ts +35 -0
  276. package/src/components/Navigation/utils.tsx +57 -0
  277. package/src/components/Pager/index.tsx +121 -0
  278. package/src/components/Pager/styles.ts +81 -0
  279. package/src/components/RadioInput/index.tsx +106 -0
  280. package/src/components/RadioInput/styles.ts +67 -0
  281. package/src/components/Scroll/index.tsx +124 -0
  282. package/src/components/Scroll/styles.ts +18 -0
  283. package/src/components/Sections/index.tsx +91 -0
  284. package/src/components/SegmentedControl/index.tsx +204 -0
  285. package/src/components/SegmentedControl/styles.ts +89 -0
  286. package/src/components/Select/index.tsx +167 -0
  287. package/src/components/Select/styles.ts +62 -0
  288. package/src/components/Select/types.ts +43 -0
  289. package/src/components/Slider/Mark.tsx +46 -0
  290. package/src/components/Slider/Thumb.tsx +29 -0
  291. package/src/components/Slider/index.tsx +130 -0
  292. package/src/components/Slider/styles.ts +76 -0
  293. package/src/components/Slider/types.ts +30 -0
  294. package/src/components/Switch/index.tsx +91 -0
  295. package/src/components/Switch/styles.ts +38 -0
  296. package/src/components/Text/index.tsx +124 -0
  297. package/src/components/Text/styles.ts +50 -0
  298. package/src/components/TextInput/index.tsx +319 -0
  299. package/src/components/TextInput/styles.ts +127 -0
  300. package/src/components/Touchable/index.tsx +174 -0
  301. package/src/components/Touchable/styles.ts +28 -0
  302. package/src/components/View/index.tsx +103 -0
  303. package/src/components/View/styles.ts +24 -0
  304. package/src/components/components.ts +42 -0
  305. package/src/components/defaultStyles.ts +62 -0
  306. package/src/components/legacy/Modal/index.tsx +163 -0
  307. package/src/components/legacy/Modal/styles.ts +125 -0
  308. package/src/components/legacy/Pager/index.tsx +242 -0
  309. package/src/components/legacy/Pager/styles.ts +51 -0
  310. package/src/components/legacy/index.ts +2 -0
  311. package/src/index.ts +7 -7
  312. package/src/modules/documentPicker.ts +7 -0
  313. package/src/modules/fastImage.ts +2 -0
  314. package/src/modules/imageCropPicker.d.ts +497 -0
  315. package/src/modules/index.d.ts +682 -0
  316. package/src/modules/reactNavigation.ts +15 -0
  317. package/src/modules/textInputMask.ts +11 -0
  318. package/src/modules/types/documentPicker.d.ts +215 -0
  319. package/src/modules/types/fileTypes.ts +138 -0
  320. package/src/modules/types/textInputMask.ts +9 -0
  321. package/src/types/index.ts +1 -0
  322. package/src/types/utility.ts +9 -0
  323. package/src/utils/KeyboardAware/context.tsx +75 -0
  324. package/src/utils/KeyboardAware/index.ts +17 -0
  325. package/src/utils/KeyboardAware/keyboardHooks.ts +124 -0
  326. package/src/utils/KeyboardAware/lib/KeyboardAwareFlatList.ts +4 -0
  327. package/src/utils/KeyboardAware/lib/KeyboardAwareHOC.tsx +618 -0
  328. package/src/utils/KeyboardAware/lib/KeyboardAwareInterface.ts +13 -0
  329. package/src/utils/KeyboardAware/lib/KeyboardAwareScrollView.ts +6 -0
  330. package/src/utils/KeyboardAware/lib/KeyboardAwareSectionList.ts +6 -0
  331. package/src/utils/KeyboardAware/types.ts +159 -0
  332. package/src/utils/ModalManager/components.tsx +112 -0
  333. package/src/utils/ModalManager/context.tsx +260 -0
  334. package/src/utils/ModalManager/index.ts +16 -0
  335. package/src/utils/OSAlert.ts +180 -0
  336. package/src/utils/PermissionManager/context.tsx +302 -0
  337. package/src/utils/PermissionManager/index.ts +20 -0
  338. package/src/utils/PermissionManager/types.ts +24 -0
  339. package/src/utils/hooks.ts +163 -0
  340. package/src/utils/index.ts +11 -0
  341. package/src/utils/input.ts +51 -0
  342. package/src/utils/misc.ts +83 -0
  343. package/src/utils/notifications.ts +206 -0
  344. package/src/utils/theme.ts +58 -0
@@ -0,0 +1,319 @@
1
+ import * as React from 'react'
2
+ import {
3
+ ComponentVariants,
4
+ FormTypes,
5
+ getNestedStylesByKey,
6
+ IconPlaceholder,
7
+
8
+ TypeGuards,
9
+
10
+ useBooleanToggle,
11
+ useDefaultComponentStyle,
12
+ useValidate,
13
+ } from '@codeleap/common'
14
+ import { ComponentPropsWithoutRef, forwardRef, useImperativeHandle, useRef, useState } from 'react'
15
+ import { Text, TextProps } from '../Text'
16
+ import { View, ViewProps } from '../View'
17
+ import { StylesOf } from '../../types'
18
+ import { NativeSyntheticEvent, StyleSheet, TextInput as NativeTextInput, TextInputChangeEventData } from 'react-native'
19
+ import { Touchable, TouchableProps } from '../Touchable'
20
+ import { MaskedTextInput, TextInputMaskProps } from '../../modules/textInputMask'
21
+ import { InputLabel } from '../InputLabel'
22
+
23
+ export * from './styles'
24
+
25
+ import {
26
+ InputIconComposition,
27
+ TextInputComposition,
28
+ TextInputStyles,
29
+ } from './styles'
30
+ import { ActionIcon, ActionIconParts, ActionIconProps } from '../ActionIcon'
31
+
32
+ type NativeProps = ComponentPropsWithoutRef<typeof NativeTextInput>
33
+
34
+ type SubtitleProps = {
35
+ errorProps: TextProps
36
+ styles: Record<'wrapper'|'error'|'subtitle', any>
37
+ }
38
+
39
+ export type TextInputProps =
40
+ Partial<TextInputMaskProps> &
41
+ ComponentVariants<typeof TextInputStyles> &
42
+ Omit<NativeProps, 'value'> &
43
+ {
44
+ multiline?: boolean
45
+ onChangeText?: (text: string) => void
46
+ disabled?: boolean
47
+ edited?: boolean
48
+ type?: string
49
+ label?: React.ReactNode
50
+ debugName: string
51
+ leftIcon?: Partial<ActionIconProps>
52
+ rightIcon?: Partial<ActionIconProps>
53
+ styles?: StylesOf<TextInputComposition>
54
+ validate?: FormTypes.ValidatorFunctionWithoutForm | string
55
+ value?: string
56
+ password?: boolean
57
+ visibilityToggle?: boolean
58
+ touchableWrapper?: boolean
59
+ subtitle?: string | ((props: SubtitleProps) => React.ReactElement)
60
+ onPress?: () => void
61
+ masking?: FormTypes.TextField['masking']
62
+ innerWrapperProps?: ViewProps
63
+ wrapperProps?: TouchableProps
64
+ onChangeMask?: TextInputMaskProps['onChangeText']
65
+ required?:boolean
66
+ }
67
+
68
+ export const TextInput = forwardRef<NativeTextInput, TextInputProps>((rawprops, inputRef) => {
69
+ const {
70
+ onChange,
71
+ value,
72
+ onChangeText,
73
+ disabled,
74
+ edited,
75
+ onFocus,
76
+ onBlur,
77
+ variants,
78
+ label,
79
+ wrapperProps,
80
+ leftIcon,
81
+ rightIcon,
82
+ styles,
83
+ validate,
84
+ password,
85
+ visibilityToggle,
86
+ innerWrapperProps,
87
+ masking,
88
+ subtitle = '',
89
+ onChangeMask,
90
+ debugName,
91
+ required = false,
92
+ ...props
93
+ } = rawprops
94
+
95
+ const [isFocused, setFocus] = useState(false)
96
+ const [editedState, setEdited] = useState(edited)
97
+
98
+ const input = useRef<any>(null)
99
+ const maskInputRef = useRef<any>(null)
100
+ const [textIsVisible, setTextVisible] = useBooleanToggle(false)
101
+ const variantStyles = useDefaultComponentStyle<'u:TextInput', typeof TextInputStyles>('u:TextInput', {
102
+ variants,
103
+ styles,
104
+ transform: StyleSheet.flatten,
105
+ })
106
+ const InputElement = masking ? MaskedTextInput : NativeTextInput
107
+
108
+ const handleBlur: TextInputProps['onBlur'] = (e) => {
109
+ if (!editedState && value) setEdited(true)
110
+ setFocus(false)
111
+
112
+ if (onBlur) {
113
+ onBlur(e)
114
+ }
115
+ }
116
+
117
+ const handleFocus: TextInputProps['onFocus'] = (e) => {
118
+ setFocus(true)
119
+ if (onFocus) {
120
+ onFocus(e)
121
+ }
122
+ }
123
+ const handleMaskChange = (masked, unmasked) => {
124
+
125
+ if (onChangeText) onChangeText(masking?.saveFormatted ? masked : masked)
126
+ if (onChangeMask) onChangeMask(masked, unmasked)
127
+ }
128
+ const handleChange = (event: NativeSyntheticEvent<TextInputChangeEventData>) => {
129
+ const text = event.nativeEvent.text
130
+
131
+ if (onChange) onChange(event)
132
+ if (onChangeText) onChangeText(text)
133
+ }
134
+
135
+ useImperativeHandle(inputRef, () => {
136
+ return {
137
+ ...input.current,
138
+ focus: () => {
139
+ input.current?.focus?.()
140
+ },
141
+ isTextInput: true,
142
+ }
143
+
144
+ }, [!!masking, !!input?.current?.focus])
145
+
146
+ const { showError, error } = useValidate(value, validate)
147
+
148
+ const commonIconStyles = getNestedStylesByKey('icon', variantStyles)
149
+
150
+ const leftIconStyles = getNestedStylesByKey('leftIcon', variantStyles)
151
+
152
+ const rightIconStyles = getNestedStylesByKey('rightIcon', variantStyles)
153
+
154
+ function getStyles(key: TextInputComposition) {
155
+ const requestedStyles = [
156
+ variantStyles[key],
157
+ isFocused ? variantStyles[key + ':focus'] : {},
158
+ showError ? variantStyles[key + ':error'] : {},
159
+ ]
160
+ return StyleSheet.flatten(requestedStyles)
161
+ }
162
+
163
+ function handlePress() {
164
+ if (props.onPress) {
165
+ props.onPress()
166
+ } else {
167
+ input.current?.focus?.()
168
+ }
169
+ }
170
+
171
+ const visibilityToggleProps = visibilityToggle ? {
172
+ onPress: () => setTextVisible(),
173
+ icon: (textIsVisible ? 'input-visiblity:visible' : 'input-visiblity:hidden') as IconPlaceholder,
174
+ debugName: `${debugName} toggle visibility`,
175
+ } : {}
176
+
177
+ const subtitleStyles = {
178
+ error: getStyles('error'),
179
+ wrapper: getStyles('subtitleWrapper'),
180
+ subtitle: getStyles('subtitle'),
181
+
182
+ }
183
+ const errorProps = { text: error.message, style: subtitleStyles.error }
184
+
185
+ const subtitleContent = TypeGuards.isFunction(subtitle) ? subtitle({ styles: subtitleStyles, errorProps }) : <View style={subtitleStyles.wrapper}>
186
+ <FormError {...errorProps}/>
187
+ {TypeGuards.isString(subtitle) ? <Text text={subtitle} style={subtitleStyles.subtitle}/> : (subtitle || null)}
188
+ </View>
189
+ return (
190
+ <Touchable
191
+ style={getStyles('wrapper')}
192
+ debugName={debugName}
193
+ onPress={handlePress}
194
+ {...wrapperProps}
195
+ android_ripple={null}
196
+ noFeedback
197
+ >
198
+ <InputLabel
199
+ label={label}
200
+ styles={{
201
+ wrapper: getStyles('labelWrapper'),
202
+ asterisk: getStyles('labelAsterisk'),
203
+ text: getStyles('labelText'),
204
+ }}
205
+ required={required}
206
+ />
207
+ <View style={getStyles('innerWrapper')} {...innerWrapperProps}>
208
+ <InputIcon
209
+ isFocused={isFocused}
210
+ showError={showError}
211
+ styles={leftIconStyles}
212
+ commonStyles={commonIconStyles}
213
+ debugName={`${debugName} left icon`}
214
+ onPress={() => {}}
215
+ noFeedback={!leftIcon?.onPress}
216
+ {...leftIcon}
217
+ />
218
+ {/* @ts-ignore */}
219
+ <InputElement
220
+
221
+ secureTextEntry={password && !textIsVisible}
222
+ onChange={(e) => masking ? onChange?.(e) : handleChange(e)}
223
+ value={value}
224
+ editable={disabled}
225
+ onFocus={handleFocus}
226
+ onBlur={handleBlur}
227
+ placeholderTextColor={StyleSheet.flatten(getStyles('placeholder'))?.color}
228
+ selectionColor={StyleSheet.flatten(getStyles('selection'))?.color}
229
+ includeRawValueInChangeText={true}
230
+ {...props}
231
+ {...masking}
232
+ {...(!!masking ? {
233
+ onChangeText: handleMaskChange,
234
+ ref: maskInputRef,
235
+ refInput: (inputRef) => {
236
+ // console.log(inputRef)
237
+ if (!!inputRef) {
238
+ input.current = inputRef
239
+
240
+ }
241
+ },
242
+ ...masking,
243
+ } : {
244
+ ref: input,
245
+ })}
246
+ style={getStyles('textField')}
247
+ />
248
+ <InputIcon
249
+ isFocused={isFocused}
250
+ showError={showError}
251
+ styles={rightIconStyles}
252
+ commonStyles={commonIconStyles}
253
+ debugName={`${debugName} right icon`}
254
+ onPress={() => {}}
255
+ noFeedback={!rightIcon?.onPress}
256
+ {...rightIcon}
257
+ {...visibilityToggleProps}
258
+ />
259
+
260
+ </View>
261
+ {subtitleContent}
262
+ </Touchable>
263
+ )
264
+ })
265
+
266
+ export const FormError:React.FC<TextProps> = ({ text, ...props }) => {
267
+ let message = text
268
+ if (TypeGuards.isNumber(message)) {
269
+ message = message.toString()
270
+ }
271
+ if (typeof message === 'undefined') {
272
+ message = ''
273
+ }
274
+
275
+ if (TypeGuards.isString(message)) {
276
+ const text = message ? `${message.charAt(0).toUpperCase() + message.slice(1)}` : ' '
277
+ return <Text text={text} {...props} />
278
+ }
279
+ return <>
280
+ {text}
281
+ </>
282
+ }
283
+
284
+ type InputIconProps = {
285
+ styles: StylesOf<InputIconComposition>
286
+ commonStyles: StylesOf<InputIconComposition>
287
+ isFocused: boolean
288
+ showError: boolean
289
+ } & Omit<ActionIconProps, 'styles'>
290
+
291
+ export const InputIcon:React.FC<InputIconProps> = ({ styles, commonStyles, isFocused, showError, ...props }) => {
292
+ if (!props.icon) return null
293
+
294
+ function getStyles(k: ActionIconParts | '') {
295
+ let key = k
296
+ if (key === 'icon') key = ''
297
+ const requestedStyles = [
298
+ commonStyles[key],
299
+ isFocused ? commonStyles[key + ':focus'] : {},
300
+ showError ? commonStyles[key + ':error'] : {},
301
+ styles[key],
302
+ isFocused ? styles[key + ':focus'] : {},
303
+ showError ? styles[key + ':error'] : {},
304
+ ]
305
+
306
+ return StyleSheet.flatten(requestedStyles)
307
+ }
308
+ const iconStyles = {
309
+ icon: getStyles('icon'),
310
+ touchablePressable: getStyles('touchablePressable'),
311
+ touchableWrapper: getStyles('touchableWrapper'),
312
+ touchableFeedback: getStyles('touchableFeedback'),
313
+ }
314
+
315
+ return <ActionIcon
316
+ styles={iconStyles}
317
+ {...props}
318
+ />
319
+ }
@@ -0,0 +1,127 @@
1
+ import { assignTextStyle, createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
+ import { ActionIconParts } from '../ActionIcon'
3
+ import { InputLabelComposition } from '../InputLabel'
4
+
5
+ export type IconParts = Exclude<ActionIconParts, 'icon' | 'icon:disabled'>
6
+ type InputIcons = 'icon' | 'leftIcon' | 'rightIcon'
7
+
8
+ export type InputIconComposition = `${InputIcons}${Capitalize<IconParts>}`
9
+ | InputIcons
10
+
11
+ type TextInputParts =
12
+ | 'wrapper'
13
+ | InputIconComposition
14
+ | 'textField'
15
+ | 'innerWrapper'
16
+ | 'error'
17
+ | 'subtitle'
18
+ | 'subtitleWrapper'
19
+ | 'placeholder'
20
+ | 'selection'
21
+ | `label${Capitalize<InputLabelComposition>}`
22
+
23
+ export type TextInputComposition =
24
+ | `${TextInputParts}:error`
25
+ | `${TextInputParts}:focus`
26
+ | TextInputParts
27
+
28
+ const createTextInputStyle =
29
+ createDefaultVariantFactory<TextInputComposition>()
30
+
31
+ const presets = includePresets((styles) => createTextInputStyle(() => ({ wrapper: styles })))
32
+
33
+ export const TextInputStyles = {
34
+ ...presets,
35
+ default: createTextInputStyle((theme) => ({
36
+ textField: {
37
+ ...theme.spacing.padding(0),
38
+ ...theme.spacing.paddingHorizontal(1),
39
+ ...assignTextStyle('p1')(theme).text,
40
+ minWidth: 1,
41
+ backgroundColor: 'transparent',
42
+ flex: 1,
43
+ },
44
+ placeholder: {
45
+ color: theme.colors.lightGray,
46
+ },
47
+ selection: {
48
+ color: theme.colors.primary,
49
+ },
50
+ wrapper: {
51
+ display: 'flex',
52
+ flexDirection: 'column',
53
+
54
+ },
55
+ innerWrapper: {
56
+ ...theme.spacing.paddingVertical(0.5),
57
+ ...theme.spacing.paddingHorizontal(1),
58
+ ...theme.presets.row,
59
+ ...theme.border.neutral(1),
60
+ display: 'flex',
61
+ alignItems: 'center',
62
+ },
63
+
64
+ labelWrapper: {
65
+ ...theme.spacing.marginBottom(1),
66
+
67
+ },
68
+ labelText: {
69
+ ...assignTextStyle('h5')(theme).text,
70
+ },
71
+ 'icon': {
72
+ color: theme.colors.neutral,
73
+ },
74
+ 'icon:error': {
75
+ color: theme.colors.negative,
76
+ },
77
+ 'icon:focus': {
78
+ color: theme.colors.primary,
79
+ },
80
+ leftIconTouchableWrapper: {
81
+ // ...theme.spacing.marginRight(0.5),
82
+ },
83
+ rightIconTouchableWrapper: {
84
+ // ...theme.spacing.marginLeft(0.5),
85
+ },
86
+ error: {
87
+ color: theme.colors.negative,
88
+
89
+ },
90
+ subtitleWrapper: {
91
+ ...theme.spacing.marginTop(0.2),
92
+ ...theme.presets.row,
93
+ ...theme.presets.justifySpaceBetween,
94
+ ...theme.presets.alignCenter,
95
+ },
96
+ subtitle: {
97
+ ...theme.presets.textRight,
98
+ },
99
+ 'labelText:error': {
100
+ color: theme.colors.negative,
101
+ },
102
+
103
+ 'innerWrapper:error': {
104
+ ...theme.border.negative(1),
105
+ },
106
+ 'innerWrapper:focus': {
107
+ ...theme.border.primary(1),
108
+ },
109
+
110
+ })),
111
+ line: createTextInputStyle((theme) => ({
112
+ innerWrapper: {
113
+ ...theme.border.neutral({ width: 1, directions: ['bottom'] }),
114
+ },
115
+ })),
116
+ box: createTextInputStyle((theme) => ({
117
+ innerWrapper: {
118
+ ...theme.border.neutral(1),
119
+ },
120
+ })),
121
+ pill: createTextInputStyle((theme) => ({
122
+ innerWrapper: {
123
+ ...theme.border.neutral(1),
124
+ borderRadius: 15,
125
+ },
126
+ })),
127
+ }
@@ -0,0 +1,174 @@
1
+ import * as React from 'react'
2
+ import { ComponentPropsWithoutRef, forwardRef } from 'react'
3
+ import {
4
+ ComponentVariants,
5
+ useDefaultComponentStyle,
6
+ BaseViewProps,
7
+
8
+ useCodeleapContext,
9
+ AnyFunction,
10
+ TypeGuards,
11
+ } from '@codeleap/common'
12
+ import { Pressable, StyleSheet, View as RNView } from 'react-native'
13
+
14
+ import { createAnimatableComponent } from 'react-native-animatable'
15
+ import { TouchableComposition, TouchableStyles } from './styles'
16
+ import { StylesOf } from '../../types'
17
+ import { View } from '../View'
18
+ import { usePressableFeedback } from '../../utils'
19
+ export type TouchableProps = Omit<
20
+ ComponentPropsWithoutRef<typeof Pressable>,
21
+ 'onPress'
22
+ > & {
23
+ variants?: ComponentVariants<typeof TouchableStyles>['variants']
24
+ component?: any
25
+ ref?: React.Ref<RNView>
26
+ debugName: string
27
+ activeOpacity?: number
28
+ debugComponent?: string
29
+ onPress?: AnyFunction
30
+ noFeedback?: boolean
31
+ debounce?: number
32
+ styles?: StylesOf<TouchableComposition>
33
+ } & BaseViewProps
34
+ export * from './styles'
35
+
36
+ export const Touchable: React.FC<TouchableProps> = forwardRef<
37
+ RNView,
38
+ TouchableProps
39
+ >((touchableProps, ref) => {
40
+ const {
41
+ variants = [],
42
+ children,
43
+ onPress,
44
+ style,
45
+ debugName,
46
+ debugComponent,
47
+ debounce = 1000,
48
+ noFeedback = false,
49
+ styles,
50
+ ...props
51
+ } = touchableProps
52
+ const pressed = React.useRef(false)
53
+ const variantStyles = useDefaultComponentStyle<'u:Touchable', typeof TouchableStyles>('u:Touchable', {
54
+ variants,
55
+ transform: StyleSheet.flatten,
56
+ rootElement: 'wrapper',
57
+ styles,
58
+ })
59
+
60
+ const { logger } = useCodeleapContext()
61
+
62
+ const press = () => {
63
+ if (!onPress) {
64
+ logger.warn('No onPress passed to touchable', {
65
+ touchableProps,
66
+ }, 'User Interaction')
67
+ return
68
+ }
69
+ const _onPress = () => {
70
+ logger.log(
71
+ `<${debugComponent || 'Touchable'}/> pressed`,
72
+ debugName || variants,
73
+ 'User interaction',
74
+ )
75
+ onPress && onPress()
76
+ }
77
+ if (TypeGuards.isNumber(debounce)) {
78
+ if (pressed.current) {
79
+ return
80
+ }
81
+ pressed.current = true
82
+ _onPress()
83
+ setTimeout(() => {
84
+ pressed.current = false
85
+ }, debounce)
86
+ } else {
87
+ _onPress()
88
+ }
89
+
90
+ }
91
+
92
+ const _styles = StyleSheet.flatten([variantStyles.wrapper, style])
93
+
94
+ const disableFeedback = !onPress || noFeedback
95
+
96
+ const { rippleConfig, getFeedbackStyle } = usePressableFeedback(_styles, {
97
+ hightlightPropertyIn: 'backgroundColor',
98
+ hightlightPropertyOut: 'backgroundColor',
99
+ disabled: disableFeedback,
100
+ feedbackConfig: variantStyles?.feedback,
101
+ })
102
+
103
+ const Wrapper = View
104
+
105
+ const { wrapperStyle, pressableStyle } = React.useMemo(() => {
106
+ const wrapperkeys = [
107
+ 'margin',
108
+ 'alignSelf',
109
+ 'border',
110
+ 'top!',
111
+ 'left!',
112
+ 'right!',
113
+ 'bottom!',
114
+ 'position!',
115
+ // 'flex!',
116
+ ]
117
+ const sharedKeys = [
118
+ 'width!',
119
+ 'height!',
120
+ 'flex!',
121
+ 'backgroundColor!',
122
+
123
+ ]
124
+
125
+ const wrapperStyle = {} as any
126
+ const pressableStyle = {} as any
127
+ const match = (k, key) => {
128
+ if (k.endsWith('!')) {
129
+ return key === k.substring(0, k.length - 1)
130
+ } else {
131
+
132
+ return key.startsWith(k)
133
+ }
134
+ }
135
+ Object.entries(_styles).forEach(([key, value]) => {
136
+
137
+ if (wrapperkeys.some(k => match(k, key))) {
138
+ wrapperStyle[key] = value
139
+ } else if (sharedKeys.some(k => match(k, key))) {
140
+ wrapperStyle[key] = value
141
+
142
+ pressableStyle[key] = value
143
+ } else {
144
+ pressableStyle[key] = value
145
+ }
146
+ })
147
+
148
+ wrapperStyle.overflow = 'hidden'
149
+ // wrapperStyle.flexDirection = 'row'
150
+ // wrapperStyle.alignItems = 'stretch'
151
+
152
+ return {
153
+ wrapperStyle,
154
+ pressableStyle,
155
+ }
156
+ }, [JSON.stringify(_styles)])
157
+
158
+ return (
159
+ <Wrapper style={[wrapperStyle]}>
160
+ <Pressable onPress={press} style={({ pressed }) => ([
161
+
162
+ // defaultPressableStyles,
163
+ pressableStyle,
164
+ // !!rippleConfig && ripplePressableStyles,
165
+ getFeedbackStyle(pressed),
166
+ variantStyles.pressable,
167
+ ])} android_ripple={rippleConfig} {...props} ref={ref}>
168
+ {children}
169
+ </Pressable>
170
+ </Wrapper>
171
+ )
172
+ })
173
+
174
+ export const AnimatedTouchable = createAnimatableComponent(Touchable) as unknown as typeof Touchable
@@ -0,0 +1,28 @@
1
+ import { createDefaultVariantFactory, includePresets } from '@codeleap/common'
2
+ import { StylesOf } from '../../types'
3
+ import { TouchableFeedbackConfig } from '../../utils'
4
+
5
+ export type TouchableComposition = 'wrapper' | 'feedback' | 'pressable'
6
+
7
+ export type TouchableStylesGen<TCSS = any> = StylesOf<Exclude<TouchableComposition, 'feedback'>> & {
8
+ feedback?: TouchableFeedbackConfig
9
+ }
10
+
11
+ const createTouchableStyle = createDefaultVariantFactory<
12
+ TouchableComposition,
13
+ TouchableStylesGen
14
+ >()
15
+
16
+ const presets = includePresets((styles) => createTouchableStyle(() => ({ wrapper: styles, pressable: styles })),
17
+ )
18
+
19
+ export const TouchableStyles = {
20
+ ...presets,
21
+ default: createTouchableStyle((t) => ({
22
+ feedback: {
23
+ type: 'opacity',
24
+ value: 0.5,
25
+ },
26
+ })),
27
+
28
+ }