@oxyhq/services 5.7.5 → 5.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (303) hide show
  1. package/README.md +76 -76
  2. package/lib/commonjs/core/index.js +177 -102
  3. package/lib/commonjs/core/index.js.map +1 -1
  4. package/lib/commonjs/index.js +69 -28
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/ui/components/Avatar.js +15 -6
  7. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  8. package/lib/commonjs/ui/components/FollowButton.js +100 -12
  9. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  10. package/lib/commonjs/ui/components/GroupedItem.js +58 -13
  11. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  12. package/lib/commonjs/ui/components/GroupedSection.js +7 -1
  13. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
  14. package/lib/commonjs/ui/components/Header.js +356 -0
  15. package/lib/commonjs/ui/components/Header.js.map +1 -0
  16. package/lib/commonjs/ui/components/OxyProvider.js +28 -7
  17. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  18. package/lib/commonjs/ui/components/index.js +7 -0
  19. package/lib/commonjs/ui/components/index.js.map +1 -1
  20. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +1 -1
  21. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
  22. package/lib/commonjs/ui/components/internal/TextField.js +606 -546
  23. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
  24. package/lib/commonjs/ui/components/internal/TextField.md +436 -0
  25. package/lib/commonjs/ui/context/OxyContext.js +181 -199
  26. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  27. package/lib/commonjs/ui/hooks/index.js +6 -0
  28. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  29. package/lib/commonjs/ui/hooks/useFollow.js +59 -2
  30. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  31. package/lib/commonjs/ui/hooks/useSessionSocket.js +5 -2
  32. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  33. package/lib/commonjs/ui/navigation/OxyRouter.js +11 -1
  34. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  35. package/lib/commonjs/ui/screens/AccountCenterScreen.js +6 -6
  36. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  37. package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
  38. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +241 -598
  40. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +1160 -406
  42. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +135 -237
  44. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/AppInfoScreen.js +246 -463
  46. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/FeedbackScreen.js +3 -3
  48. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +808 -650
  50. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/ProfileScreen.js +214 -37
  52. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +51 -72
  54. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/SessionManagementScreen.js +11 -29
  56. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/SignInScreen.js +30 -303
  58. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/SignUpScreen.js +4 -4
  60. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/UserLinksScreen.js +90 -0
  62. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -0
  63. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +19 -31
  64. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  65. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +7 -10
  66. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  67. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +11 -5
  68. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  69. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +11 -4
  70. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  71. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +9 -6
  72. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +3 -30
  74. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  75. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +37 -46
  76. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  77. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +9 -12
  78. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +9 -12
  80. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +9 -12
  82. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  83. package/lib/commonjs/ui/stores/authStore.js +36 -6
  84. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  85. package/lib/commonjs/ui/stores/followStore.js +106 -1
  86. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  87. package/lib/commonjs/ui/styles/authStyles.js +337 -0
  88. package/lib/commonjs/ui/styles/authStyles.js.map +1 -0
  89. package/lib/commonjs/ui/styles/index.js +11 -0
  90. package/lib/commonjs/ui/styles/index.js.map +1 -1
  91. package/lib/module/core/index.js +177 -41
  92. package/lib/module/core/index.js.map +1 -1
  93. package/lib/module/index.js +24 -4
  94. package/lib/module/index.js.map +1 -1
  95. package/lib/module/ui/components/Avatar.js +15 -6
  96. package/lib/module/ui/components/Avatar.js.map +1 -1
  97. package/lib/module/ui/components/FollowButton.js +101 -13
  98. package/lib/module/ui/components/FollowButton.js.map +1 -1
  99. package/lib/module/ui/components/GroupedItem.js +59 -14
  100. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  101. package/lib/module/ui/components/GroupedSection.js +7 -1
  102. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  103. package/lib/module/ui/components/Header.js +351 -0
  104. package/lib/module/ui/components/Header.js.map +1 -0
  105. package/lib/module/ui/components/OxyProvider.js +30 -9
  106. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  107. package/lib/module/ui/components/index.js +1 -0
  108. package/lib/module/ui/components/index.js.map +1 -1
  109. package/lib/module/ui/components/internal/GroupedPillButtons.js +1 -1
  110. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
  111. package/lib/module/ui/components/internal/TextField.js +607 -547
  112. package/lib/module/ui/components/internal/TextField.js.map +1 -1
  113. package/lib/module/ui/components/internal/TextField.md +436 -0
  114. package/lib/module/ui/context/OxyContext.js +180 -198
  115. package/lib/module/ui/context/OxyContext.js.map +1 -1
  116. package/lib/module/ui/hooks/index.js +1 -1
  117. package/lib/module/ui/hooks/index.js.map +1 -1
  118. package/lib/module/ui/hooks/useFollow.js +57 -1
  119. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  120. package/lib/module/ui/hooks/useSessionSocket.js +5 -2
  121. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  122. package/lib/module/ui/navigation/OxyRouter.js +11 -1
  123. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  124. package/lib/module/ui/screens/AccountCenterScreen.js +6 -6
  125. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  126. package/lib/module/ui/screens/AccountManagementDemo.js +3 -3
  127. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
  128. package/lib/module/ui/screens/AccountOverviewScreen.js +242 -597
  129. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  130. package/lib/module/ui/screens/AccountSettingsScreen.js +1161 -407
  131. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  132. package/lib/module/ui/screens/AccountSwitcherScreen.js +135 -237
  133. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  134. package/lib/module/ui/screens/AppInfoScreen.js +248 -465
  135. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  136. package/lib/module/ui/screens/FeedbackScreen.js +3 -3
  137. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  138. package/lib/module/ui/screens/PaymentGatewayScreen.js +809 -651
  139. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  140. package/lib/module/ui/screens/ProfileScreen.js +214 -37
  141. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  142. package/lib/module/ui/screens/RecoverAccountScreen.js +53 -74
  143. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
  144. package/lib/module/ui/screens/SessionManagementScreen.js +11 -29
  145. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  146. package/lib/module/ui/screens/SignInScreen.js +32 -305
  147. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  148. package/lib/module/ui/screens/SignUpScreen.js +5 -5
  149. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  150. package/lib/module/ui/screens/UserLinksScreen.js +85 -0
  151. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -0
  152. package/lib/module/ui/screens/internal/SignInPasswordStep.js +19 -31
  153. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  154. package/lib/module/ui/screens/internal/SignInUsernameStep.js +7 -10
  155. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  156. package/lib/module/ui/screens/internal/SignUpIdentityStep.js +11 -5
  157. package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  158. package/lib/module/ui/screens/internal/SignUpSecurityStep.js +11 -4
  159. package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  160. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +9 -6
  161. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  162. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +3 -30
  163. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  164. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +37 -46
  165. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  166. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +9 -12
  167. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  168. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +9 -12
  169. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  170. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +9 -12
  171. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  172. package/lib/module/ui/stores/authStore.js +36 -6
  173. package/lib/module/ui/stores/authStore.js.map +1 -1
  174. package/lib/module/ui/stores/followStore.js +106 -1
  175. package/lib/module/ui/stores/followStore.js.map +1 -1
  176. package/lib/module/ui/styles/authStyles.js +332 -0
  177. package/lib/module/ui/styles/authStyles.js.map +1 -0
  178. package/lib/module/ui/styles/index.js +1 -0
  179. package/lib/module/ui/styles/index.js.map +1 -1
  180. package/lib/typescript/core/index.d.ts +68 -24
  181. package/lib/typescript/core/index.d.ts.map +1 -1
  182. package/lib/typescript/index.d.ts +13 -3
  183. package/lib/typescript/index.d.ts.map +1 -1
  184. package/lib/typescript/ui/components/Avatar.d.ts.map +1 -1
  185. package/lib/typescript/ui/components/FollowButton.d.ts +1 -0
  186. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
  187. package/lib/typescript/ui/components/GroupedItem.d.ts +6 -0
  188. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  189. package/lib/typescript/ui/components/GroupedSection.d.ts +6 -0
  190. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -1
  191. package/lib/typescript/ui/components/Header.d.ts +24 -0
  192. package/lib/typescript/ui/components/Header.d.ts.map +1 -0
  193. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  194. package/lib/typescript/ui/components/index.d.ts +1 -0
  195. package/lib/typescript/ui/components/index.d.ts.map +1 -1
  196. package/lib/typescript/ui/components/internal/TextField.d.ts +31 -16
  197. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
  198. package/lib/typescript/ui/context/OxyContext.d.ts +5 -2
  199. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  200. package/lib/typescript/ui/hooks/index.d.ts +1 -1
  201. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  202. package/lib/typescript/ui/hooks/useFollow.d.ts +20 -0
  203. package/lib/typescript/ui/hooks/useFollow.d.ts.map +1 -1
  204. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  205. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  206. package/lib/typescript/ui/navigation/types.d.ts +9 -2
  207. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  208. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  209. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  210. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  211. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  212. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  213. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  214. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +5 -1
  215. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
  216. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  217. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  218. package/lib/typescript/ui/screens/UserLinksScreen.d.ts +15 -0
  219. package/lib/typescript/ui/screens/UserLinksScreen.d.ts.map +1 -0
  220. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +1 -1
  221. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
  222. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +0 -1
  223. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -1
  224. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +1 -1
  225. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +1 -1
  226. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  227. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  228. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  229. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -1
  230. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  231. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -1
  232. package/lib/typescript/ui/stores/authStore.d.ts +3 -1
  233. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  234. package/lib/typescript/ui/stores/followStore.d.ts +10 -0
  235. package/lib/typescript/ui/stores/followStore.d.ts.map +1 -1
  236. package/lib/typescript/ui/styles/authStyles.d.ts +326 -0
  237. package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -0
  238. package/lib/typescript/ui/styles/index.d.ts +1 -0
  239. package/lib/typescript/ui/styles/index.d.ts.map +1 -1
  240. package/package.json +1 -4
  241. package/src/core/index.ts +195 -41
  242. package/src/index.ts +64 -4
  243. package/src/ui/components/Avatar.tsx +11 -5
  244. package/src/ui/components/FollowButton.tsx +95 -11
  245. package/src/ui/components/GroupedItem.tsx +57 -9
  246. package/src/ui/components/GroupedSection.tsx +12 -0
  247. package/src/ui/components/Header.tsx +405 -0
  248. package/src/ui/components/OxyProvider.tsx +37 -15
  249. package/src/ui/components/index.ts +1 -0
  250. package/src/ui/components/internal/GroupedPillButtons.tsx +1 -1
  251. package/src/ui/components/internal/TextField.md +436 -0
  252. package/src/ui/components/internal/TextField.tsx +720 -620
  253. package/src/ui/context/OxyContext.tsx +211 -195
  254. package/src/ui/hooks/index.ts +1 -1
  255. package/src/ui/hooks/useFollow.ts +63 -0
  256. package/src/ui/hooks/useSessionSocket.ts +5 -2
  257. package/src/ui/navigation/OxyRouter.tsx +11 -1
  258. package/src/ui/navigation/types.ts +10 -2
  259. package/src/ui/screens/AccountCenterScreen.tsx +5 -5
  260. package/src/ui/screens/AccountManagementDemo.tsx +9 -9
  261. package/src/ui/screens/AccountOverviewScreen.tsx +265 -414
  262. package/src/ui/screens/AccountSettingsScreen.tsx +1173 -403
  263. package/src/ui/screens/AccountSwitcherScreen.tsx +158 -202
  264. package/src/ui/screens/AppInfoScreen.tsx +270 -497
  265. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  266. package/src/ui/screens/PaymentGatewayScreen.tsx +668 -365
  267. package/src/ui/screens/ProfileScreen.tsx +196 -33
  268. package/src/ui/screens/RecoverAccountScreen.tsx +46 -74
  269. package/src/ui/screens/SessionManagementScreen.tsx +14 -22
  270. package/src/ui/screens/SignInScreen.tsx +27 -294
  271. package/src/ui/screens/SignUpScreen.tsx +5 -5
  272. package/src/ui/screens/UserLinksScreen.tsx +96 -0
  273. package/src/ui/screens/internal/SignInPasswordStep.tsx +11 -22
  274. package/src/ui/screens/internal/SignInUsernameStep.tsx +3 -10
  275. package/src/ui/screens/internal/SignUpIdentityStep.tsx +2 -5
  276. package/src/ui/screens/internal/SignUpSecurityStep.tsx +3 -4
  277. package/src/ui/screens/karma/KarmaAboutScreen.tsx +9 -2
  278. package/src/ui/screens/karma/KarmaCenterScreen.tsx +1 -20
  279. package/src/ui/screens/karma/KarmaFAQScreen.tsx +40 -24
  280. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +9 -3
  281. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +9 -3
  282. package/src/ui/screens/karma/KarmaRulesScreen.tsx +9 -3
  283. package/src/ui/stores/authStore.ts +34 -7
  284. package/src/ui/stores/followStore.ts +102 -1
  285. package/src/ui/styles/authStyles.ts +352 -0
  286. package/src/ui/styles/index.ts +1 -0
  287. package/lib/commonjs/core/auth-manager.js +0 -440
  288. package/lib/commonjs/core/auth-manager.js.map +0 -1
  289. package/lib/commonjs/core/use-auth.js +0 -244
  290. package/lib/commonjs/core/use-auth.js.map +0 -1
  291. package/lib/module/core/auth-manager.js +0 -432
  292. package/lib/module/core/auth-manager.js.map +0 -1
  293. package/lib/module/core/use-auth.js +0 -235
  294. package/lib/module/core/use-auth.js.map +0 -1
  295. package/lib/typescript/core/auth-manager.d.ts +0 -136
  296. package/lib/typescript/core/auth-manager.d.ts.map +0 -1
  297. package/lib/typescript/core/use-auth.d.ts +0 -79
  298. package/lib/typescript/core/use-auth.d.ts.map +0 -1
  299. package/src/__tests__/middleware.test.ts +0 -105
  300. package/src/__tests__/setup.ts +0 -10
  301. package/src/__tests__/zero-config-auth.test.ts +0 -607
  302. package/src/core/auth-manager.ts +0 -500
  303. package/src/core/use-auth.tsx +0 -245
@@ -0,0 +1,436 @@
1
+ # TextField Component
2
+
3
+ A comprehensive, production-ready text input component with advanced features, validation, and accessibility support.
4
+
5
+ ## Features
6
+
7
+ ### ✨ Core Features
8
+ - **Floating Labels**: Animated labels that float above the input when focused or filled
9
+ - **Material Design**: Follows Material Design principles with outlined and filled variants
10
+ - **Cross-Platform**: Optimized for both React Native and Web platforms
11
+ - **Accessibility**: Full accessibility support with proper labels, hints, and roles
12
+ - **Customizable**: Extensive theming and styling options
13
+
14
+ ### 🎯 Advanced Features
15
+ - **Input Masking**: Built-in masks for phone numbers, credit cards, and currency
16
+ - **Password Strength**: Real-time password strength indicator
17
+ - **Character Counting**: Optional character count display
18
+ - **Debounced Validation**: Configurable debounced validation with loading states
19
+ - **Clear Button**: Optional clear button for easy input clearing
20
+ - **Custom Components**: Support for custom left and right components
21
+ - **Disabled State**: Full disabled state support
22
+ - **Helper Text**: Optional helper text below inputs
23
+ - **Validation States**: Error, success, and loading states with visual indicators
24
+
25
+ ### 🔧 Technical Features
26
+ - **TypeScript**: Full TypeScript support with comprehensive type definitions
27
+ - **Performance**: Optimized with proper memoization and debouncing
28
+ - **Ref Forwarding**: Proper ref forwarding for focus management
29
+ - **Event Handling**: Comprehensive event handling with proper cleanup
30
+ - **State Management**: Robust internal state management
31
+
32
+ ## Props
33
+
34
+ ### Basic Props
35
+ | Prop | Type | Default | Description |
36
+ |------|------|---------|-------------|
37
+ | `label` | `string` | - | The label text for the input |
38
+ | `icon` | `string` | - | Ionicons icon name |
39
+ | `iconColor` | `string` | - | Custom icon color |
40
+ | `error` | `string` | - | Error message to display |
41
+ | `success` | `boolean` | `false` | Whether to show success state |
42
+ | `loading` | `boolean` | `false` | Whether to show loading state |
43
+ | `variant` | `'outlined' \| 'filled'` | `'outlined'` | Input variant style |
44
+ | `disabled` | `boolean` | `false` | Whether the input is disabled |
45
+
46
+ ### Enhanced Features
47
+ | Prop | Type | Default | Description |
48
+ |------|------|---------|-------------|
49
+ | `helperText` | `string` | - | Helper text displayed below input |
50
+ | `maxLength` | `number` | - | Maximum character limit |
51
+ | `showCharacterCount` | `boolean` | `false` | Show character count |
52
+ | `inputMask` | `'phone' \| 'creditCard' \| 'currency' \| 'custom'` | - | Input masking type |
53
+ | `customMask` | `(value: string) => string` | - | Custom masking function |
54
+ | `formatValue` | `(value: string) => string` | - | Custom value formatting |
55
+ | `validateOnChange` | `boolean` | `false` | Enable real-time validation |
56
+ | `debounceMs` | `number` | `300` | Debounce delay for validation |
57
+ | `passwordStrength` | `boolean` | `false` | Show password strength indicator |
58
+ | `clearable` | `boolean` | `false` | Show clear button |
59
+
60
+ ### Accessibility Props
61
+ | Prop | Type | Default | Description |
62
+ |------|------|---------|-------------|
63
+ | `accessibilityLabel` | `string` | - | Accessibility label |
64
+ | `accessibilityHint` | `string` | - | Accessibility hint |
65
+ | `accessibilityRole` | `string` | `'text'` | Accessibility role |
66
+
67
+ ### Advanced Props
68
+ | Prop | Type | Default | Description |
69
+ |------|------|---------|-------------|
70
+ | `onValidationChange` | `(isValid: boolean, value: string) => void` | - | Validation change callback |
71
+ | `onClear` | `() => void` | - | Clear button callback |
72
+ | `autoFocus` | `boolean` | `false` | Auto focus on mount |
73
+ | `returnKeyType` | `'done' \| 'go' \| 'next' \| 'search' \| 'send'` | - | Return key type |
74
+ | `blurOnSubmit` | `boolean` | - | Blur on submit |
75
+ | `keyboardType` | `KeyboardTypeOptions` | - | Keyboard type |
76
+
77
+ ### Styling Props
78
+ | Prop | Type | Default | Description |
79
+ |------|------|---------|-------------|
80
+ | `colors` | `object` | - | Color theme object |
81
+ | `containerStyle` | `StyleProp<ViewStyle>` | - | Container style |
82
+ | `inputStyle` | `StyleProp<TextStyle>` | - | Input style |
83
+ | `labelStyle` | `StyleProp<TextStyle>` | - | Label style |
84
+ | `errorStyle` | `StyleProp<ViewStyle>` | - | Error container style |
85
+
86
+ ### Component Props
87
+ | Prop | Type | Default | Description |
88
+ |------|------|---------|-------------|
89
+ | `leftComponent` | `ReactNode` | - | Custom left component |
90
+ | `rightComponent` | `ReactNode` | - | Custom right component |
91
+
92
+ ## Color Theme Object
93
+
94
+ ```typescript
95
+ interface ColorTheme {
96
+ primary: string; // Primary color for focus states
97
+ secondaryText: string; // Secondary text color
98
+ text: string; // Main text color
99
+ error: string; // Error color
100
+ success: string; // Success color
101
+ border: string; // Border color
102
+ inputBackground: string; // Input background color
103
+ disabled: string; // Disabled text color
104
+ disabledBackground: string; // Disabled background color
105
+ }
106
+ ```
107
+
108
+ ## Usage Examples
109
+
110
+ ### Basic Usage
111
+ ```tsx
112
+ import TextField from './TextField';
113
+
114
+ <TextField
115
+ label="Username"
116
+ value={username}
117
+ onChangeText={setUsername}
118
+ colors={colors}
119
+ />
120
+ ```
121
+
122
+ ### With Icon and Validation
123
+ ```tsx
124
+ <TextField
125
+ label="Email"
126
+ icon="mail-outline"
127
+ value={email}
128
+ onChangeText={setEmail}
129
+ error={emailError}
130
+ success={isEmailValid}
131
+ colors={colors}
132
+ variant="filled"
133
+ />
134
+ ```
135
+
136
+ ### Password with Strength Indicator
137
+ ```tsx
138
+ <TextField
139
+ label="Password"
140
+ icon="lock-closed-outline"
141
+ value={password}
142
+ onChangeText={setPassword}
143
+ secureTextEntry={true}
144
+ passwordStrength={true}
145
+ colors={colors}
146
+ helperText="Enter a strong password"
147
+ />
148
+ ```
149
+
150
+ ### Phone Number with Mask
151
+ ```tsx
152
+ <TextField
153
+ label="Phone Number"
154
+ icon="call-outline"
155
+ value={phone}
156
+ onChangeText={setPhone}
157
+ inputMask="phone"
158
+ keyboardType="phone-pad"
159
+ colors={colors}
160
+ />
161
+ ```
162
+
163
+ ### Credit Card with Character Count
164
+ ```tsx
165
+ <TextField
166
+ label="Credit Card"
167
+ icon="card-outline"
168
+ value={creditCard}
169
+ onChangeText={setCreditCard}
170
+ inputMask="creditCard"
171
+ keyboardType="numeric"
172
+ maxLength={19}
173
+ showCharacterCount={true}
174
+ colors={colors}
175
+ />
176
+ ```
177
+
178
+ ### Real-time Validation
179
+ ```tsx
180
+ <TextField
181
+ label="Username"
182
+ icon="person-outline"
183
+ value={username}
184
+ onChangeText={setUsername}
185
+ error={usernameError}
186
+ success={isUsernameValid}
187
+ loading={isValidating}
188
+ validateOnChange={true}
189
+ debounceMs={500}
190
+ onValidationChange={(isValid, value) => {
191
+ // Handle validation result
192
+ }}
193
+ colors={colors}
194
+ />
195
+ ```
196
+
197
+ ### Disabled State
198
+ ```tsx
199
+ <TextField
200
+ label="Disabled Field"
201
+ value="This field is disabled"
202
+ onChangeText={() => {}}
203
+ disabled={true}
204
+ colors={colors}
205
+ helperText="This field cannot be edited"
206
+ />
207
+ ```
208
+
209
+ ### Custom Right Component
210
+ ```tsx
211
+ <TextField
212
+ label="With Custom Button"
213
+ icon="add-circle-outline"
214
+ value={value}
215
+ onChangeText={setValue}
216
+ colors={colors}
217
+ rightComponent={
218
+ <TouchableOpacity
219
+ style={styles.customButton}
220
+ onPress={handleCustomAction}
221
+ >
222
+ <Text style={styles.customButtonText}>Add</Text>
223
+ </TouchableOpacity>
224
+ }
225
+ />
226
+ ```
227
+
228
+ ### Multiline Input
229
+ ```tsx
230
+ <TextField
231
+ label="Bio"
232
+ icon="document-text-outline"
233
+ value={bio}
234
+ onChangeText={setBio}
235
+ multiline={true}
236
+ numberOfLines={4}
237
+ maxLength={500}
238
+ showCharacterCount={true}
239
+ colors={colors}
240
+ helperText="Tell us about yourself"
241
+ />
242
+ ```
243
+
244
+ ## Input Masks
245
+
246
+ ### Built-in Masks
247
+
248
+ #### Phone Number
249
+ ```tsx
250
+ inputMask="phone"
251
+ // Input: 1234567890
252
+ // Output: (123) 456-7890
253
+ ```
254
+
255
+ #### Credit Card
256
+ ```tsx
257
+ inputMask="creditCard"
258
+ // Input: 1234567890123456
259
+ // Output: 1234 5678 9012 3456
260
+ ```
261
+
262
+ #### Currency
263
+ ```tsx
264
+ inputMask="currency"
265
+ // Input: 123.45
266
+ // Output: $123.45
267
+ ```
268
+
269
+ ### Custom Mask
270
+ ```tsx
271
+ const customMask = (value: string) => {
272
+ // Your custom formatting logic
273
+ return formattedValue;
274
+ };
275
+
276
+ <TextField
277
+ inputMask="custom"
278
+ customMask={customMask}
279
+ // ... other props
280
+ />
281
+ ```
282
+
283
+ ## Password Strength
284
+
285
+ The password strength indicator provides real-time feedback on password strength:
286
+
287
+ - **Weak (0-25%)**: Red
288
+ - **Fair (26-50%)**: Orange
289
+ - **Good (51-75%)**: Blue
290
+ - **Strong (76-100%)**: Green
291
+
292
+ ```tsx
293
+ <TextField
294
+ label="Password"
295
+ secureTextEntry={true}
296
+ passwordStrength={true}
297
+ // ... other props
298
+ />
299
+ ```
300
+
301
+ ## Validation
302
+
303
+ ### Real-time Validation
304
+ ```tsx
305
+ const [emailError, setEmailError] = useState('');
306
+ const [isEmailValid, setIsEmailValid] = useState(false);
307
+
308
+ <TextField
309
+ label="Email"
310
+ value={email}
311
+ onChangeText={setEmail}
312
+ error={emailError}
313
+ success={isEmailValid}
314
+ validateOnChange={true}
315
+ debounceMs={500}
316
+ onValidationChange={(isValid, value) => {
317
+ if (isValid) {
318
+ setIsEmailValid(true);
319
+ setEmailError('');
320
+ } else {
321
+ setIsEmailValid(false);
322
+ setEmailError('Please enter a valid email address');
323
+ }
324
+ }}
325
+ />
326
+ ```
327
+
328
+ ## Accessibility
329
+
330
+ The component includes comprehensive accessibility support:
331
+
332
+ - Proper accessibility labels and hints
333
+ - Keyboard navigation support
334
+ - Screen reader compatibility
335
+ - Focus management
336
+ - Disabled state handling
337
+
338
+ ```tsx
339
+ <TextField
340
+ label="Username"
341
+ accessibilityLabel="Enter your username"
342
+ accessibilityHint="Username must be at least 3 characters long"
343
+ accessibilityRole="text"
344
+ // ... other props
345
+ />
346
+ ```
347
+
348
+ ## Focus Management
349
+
350
+ ```tsx
351
+ const inputRef = useRef<TextInput>(null);
352
+
353
+ <TextField
354
+ ref={inputRef}
355
+ label="Username"
356
+ // ... other props
357
+ />
358
+
359
+ // Focus the input
360
+ inputRef.current?.focus();
361
+ ```
362
+
363
+ ## Styling
364
+
365
+ ### Custom Colors
366
+ ```tsx
367
+ const colors = {
368
+ primary: '#d169e5',
369
+ secondaryText: '#666666',
370
+ text: '#000000',
371
+ error: '#D32F2F',
372
+ success: '#2E7D32',
373
+ border: '#E0E0E0',
374
+ inputBackground: '#F5F5F5',
375
+ disabled: '#E0E0E0',
376
+ disabledBackground: '#F5F5F5',
377
+ };
378
+
379
+ <TextField
380
+ colors={colors}
381
+ // ... other props
382
+ />
383
+ ```
384
+
385
+ ### Custom Styles
386
+ ```tsx
387
+ <TextField
388
+ containerStyle={{ marginBottom: 20 }}
389
+ inputStyle={{ fontSize: 18 }}
390
+ labelStyle={{ fontWeight: 'bold' }}
391
+ errorStyle={{ backgroundColor: '#ffebee' }}
392
+ // ... other props
393
+ />
394
+ ```
395
+
396
+ ## Best Practices
397
+
398
+ 1. **Always provide labels** for accessibility
399
+ 2. **Use appropriate keyboard types** for different input types
400
+ 3. **Implement proper validation** with user-friendly error messages
401
+ 4. **Use debouncing** for real-time validation to avoid performance issues
402
+ 5. **Provide helper text** for complex inputs
403
+ 6. **Handle disabled states** appropriately
404
+ 7. **Use consistent color themes** across your app
405
+ 8. **Test accessibility** with screen readers
406
+
407
+ ## Performance Considerations
408
+
409
+ - The component uses `useCallback` and `useMemo` for performance optimization
410
+ - Debouncing is built-in for validation to prevent excessive re-renders
411
+ - Proper cleanup of timers and animations
412
+ - Efficient state management to minimize re-renders
413
+
414
+ ## Browser Support
415
+
416
+ - React Native: All supported platforms
417
+ - Web: Modern browsers with React Native Web support
418
+ - Mobile: iOS and Android with proper keyboard handling
419
+
420
+ ## Dependencies
421
+
422
+ - React Native
423
+ - @expo/vector-icons (for icons)
424
+ - react-native-svg (for border rendering)
425
+
426
+ ## Migration from Previous Version
427
+
428
+ The improved TextField component is mostly backward compatible. Key changes:
429
+
430
+ 1. **New props**: Added many new features while maintaining existing API
431
+ 2. **Better TypeScript**: Improved type definitions
432
+ 3. **Enhanced accessibility**: Better accessibility support
433
+ 4. **Performance improvements**: Optimized rendering and state management
434
+ 5. **Removed web-specific code**: Unified implementation for all platforms
435
+
436
+ Existing code should continue to work with minimal changes.