@onairos/react-native 3.7.2 → 3.7.3

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 (237) hide show
  1. package/lib/commonjs/api/index.js +219 -9
  2. package/lib/commonjs/components/BodyText.js +27 -9
  3. package/lib/commonjs/components/BrandMark.js +111 -10
  4. package/lib/commonjs/components/CodeInput.js +116 -9
  5. package/lib/commonjs/components/EmailInput.js +30 -8
  6. package/lib/commonjs/components/GoogleButton.js +56 -9
  7. package/lib/commonjs/components/HeadingGroup.js +43 -9
  8. package/lib/commonjs/components/LLMDataInputModal.js +664 -14
  9. package/lib/commonjs/components/ModalHeader.js +99 -9
  10. package/lib/commonjs/components/ModalSheet.js +47 -9
  11. package/lib/commonjs/components/Onairos.js +380 -14
  12. package/lib/commonjs/components/OnairosButton.js +313 -13
  13. package/lib/commonjs/components/OnairosSignInButton.js +130 -12
  14. package/lib/commonjs/components/Overlay.js +465 -13
  15. package/lib/commonjs/components/PersonaImage.js +137 -10
  16. package/lib/commonjs/components/PersonaLoadingScreen.js +318 -12
  17. package/lib/commonjs/components/PersonalizationConsentScreen.js +467 -13
  18. package/lib/commonjs/components/PinCreationScreen.js +403 -12
  19. package/lib/commonjs/components/PinInput.js +464 -9
  20. package/lib/commonjs/components/PlatformConnectorsStep.js +1311 -23
  21. package/lib/commonjs/components/PlatformList.js +137 -10
  22. package/lib/commonjs/components/PlatformToggle.js +180 -9
  23. package/lib/commonjs/components/PrimaryButton.js +180 -10
  24. package/lib/commonjs/components/SignInMatchAnimation.js +197 -9
  25. package/lib/commonjs/components/SignInStep.js +345 -12
  26. package/lib/commonjs/components/UniversalOnboarding.js +2780 -30
  27. package/lib/commonjs/components/VerificationStep.js +176 -11
  28. package/lib/commonjs/components/WelcomeScreen.js +461 -22
  29. package/lib/commonjs/components/icons/Basicproficon.js +37 -8
  30. package/lib/commonjs/components/icons/Basicprofile.js +21 -8
  31. package/lib/commonjs/components/icons/Checkbox.js +21 -8
  32. package/lib/commonjs/components/icons/Checkmark.js +27 -8
  33. package/lib/commonjs/components/icons/Contentanalysis.js +21 -8
  34. package/lib/commonjs/components/icons/Contenticon.js +39 -8
  35. package/lib/commonjs/components/icons/EnochE.js +41 -8
  36. package/lib/commonjs/components/icons/Personalityicon.js +30 -8
  37. package/lib/commonjs/components/icons/Personalityprofile.js +21 -8
  38. package/lib/commonjs/components/icons/Personalitytraits.js +21 -8
  39. package/lib/commonjs/components/icons/Userpreferences.js +21 -8
  40. package/lib/commonjs/components/icons/index.js +84 -17
  41. package/lib/commonjs/components/onboarding/OAuthWebView.js +1754 -18
  42. package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -10
  43. package/lib/commonjs/components/onboarding/PinInput.js +283 -10
  44. package/lib/commonjs/components/onboarding/PlatformConnector.js +249 -11
  45. package/lib/commonjs/config/PLATFORM_APIS.md +849 -0
  46. package/lib/commonjs/config/api.js +56 -7
  47. package/lib/commonjs/constants/index.js +120 -7
  48. package/lib/commonjs/context/AuthContext.js +345 -10
  49. package/lib/commonjs/hooks/useConnectedAccounts.js +111 -9
  50. package/lib/commonjs/hooks/useConnections.js +102 -8
  51. package/lib/commonjs/hooks/useCredentials.js +178 -10
  52. package/lib/commonjs/hooks/useUserConnections.js +148 -10
  53. package/lib/commonjs/index.js +439 -34
  54. package/lib/commonjs/services/apiClient.js +298 -8
  55. package/lib/commonjs/services/biometricPinService.js +180 -8
  56. package/lib/commonjs/services/chatGPTConversationExtractor.js +155 -8
  57. package/lib/commonjs/services/chatGPTConversationService.js +275 -9
  58. package/lib/commonjs/services/claudeConversationExtractor.js +103 -8
  59. package/lib/commonjs/services/claudeConversationService.js +158 -9
  60. package/lib/commonjs/services/connectedAccountsService.js +310 -10
  61. package/lib/commonjs/services/googleAuthService.js +252 -11
  62. package/lib/commonjs/services/hingeDataExtractor.js +105 -8
  63. package/lib/commonjs/services/hingeDataService.js +150 -9
  64. package/lib/commonjs/services/imageCompressionService.js +260 -7
  65. package/lib/commonjs/services/instagramDataExtractor.js +126 -8
  66. package/lib/commonjs/services/instagramDataService.js +163 -9
  67. package/lib/commonjs/services/jwtStorageService.js +276 -7
  68. package/lib/commonjs/services/linkedinDOMExtractor.js +245 -7
  69. package/lib/commonjs/services/linkedinProfileService.js +222 -9
  70. package/lib/commonjs/services/linkedinScrapingService.js +230 -8
  71. package/lib/commonjs/services/llmDataStorage.js +294 -8
  72. package/lib/commonjs/services/mobileTrainingService.js +186 -8
  73. package/lib/commonjs/services/netflixDataExtractor.js +120 -8
  74. package/lib/commonjs/services/netflixDataService.js +198 -9
  75. package/lib/commonjs/services/pinEncryptionService.js +84 -8
  76. package/lib/commonjs/services/pinStorageUtils.js +105 -7
  77. package/lib/commonjs/services/platformAuthService.js +1484 -12
  78. package/lib/commonjs/services/sephoraDataExtractor.js +140 -8
  79. package/lib/commonjs/services/sephoraDataService.js +200 -9
  80. package/lib/commonjs/services/spotifyDataExtractor.js +148 -8
  81. package/lib/commonjs/services/spotifyDataService.js +241 -9
  82. package/lib/commonjs/services/storageService.js +404 -8
  83. package/lib/commonjs/services/telegramDataExtractor.js +115 -8
  84. package/lib/commonjs/services/telegramDataService.js +499 -9
  85. package/lib/commonjs/services/trainingApiHelpers.js +73 -7
  86. package/lib/commonjs/services/userConnectionsService.js +340 -10
  87. package/lib/commonjs/services/youtubeMigrationService.js +416 -10
  88. package/lib/commonjs/theme/index.js +250 -7
  89. package/lib/commonjs/types/ambient.d.js +2 -1
  90. package/lib/commonjs/types/declarations.d.js +2 -1
  91. package/lib/commonjs/types/index.js +6 -1
  92. package/lib/commonjs/types/node-fix.d.js +2 -1
  93. package/lib/commonjs/types/node-override.d.js +2 -1
  94. package/lib/commonjs/types/opacity.d.js +2 -1
  95. package/lib/commonjs/types.js +14 -1
  96. package/lib/commonjs/utils/Portal.js +98 -8
  97. package/lib/commonjs/utils/api.js +130 -9
  98. package/lib/commonjs/utils/assetRegistry.js +210 -35
  99. package/lib/commonjs/utils/auth.js +112 -9
  100. package/lib/commonjs/utils/connectorTests.js +613 -29
  101. package/lib/commonjs/utils/crypto.js +62 -8
  102. package/lib/commonjs/utils/debugHelper.js +64 -1
  103. package/lib/commonjs/utils/encryption.js +76 -7
  104. package/lib/commonjs/utils/eventUtils.js +288 -1
  105. package/lib/commonjs/utils/haptics.js +66 -9
  106. package/lib/commonjs/utils/imagePreloader.js +6 -1
  107. package/lib/commonjs/utils/networkDiagnostics.js +226 -8
  108. package/lib/commonjs/utils/onairosApi.js +350 -9
  109. package/lib/commonjs/utils/programmaticFlow.js +117 -9
  110. package/lib/commonjs/utils/retryHelper.js +220 -1
  111. package/lib/commonjs/utils/secureStorage.js +349 -10
  112. package/lib/commonjs/utils/webviewScripts/chatgpt.js +551 -1
  113. package/lib/commonjs/utils/webviewScripts/claude.js +376 -1
  114. package/lib/commonjs/utils/webviewScripts/hinge.js +411 -1
  115. package/lib/commonjs/utils/webviewScripts/index.js +698 -15
  116. package/lib/commonjs/utils/webviewScripts/instagram.js +454 -1
  117. package/lib/commonjs/utils/webviewScripts/linkedin.js +880 -1
  118. package/lib/commonjs/utils/webviewScripts/netflix.js +382 -1
  119. package/lib/commonjs/utils/webviewScripts/sephora.js +516 -1
  120. package/lib/commonjs/utils/webviewScripts/spotify.js +419 -1
  121. package/lib/commonjs/utils/webviewScripts/telegram.js +678 -1
  122. package/lib/module/api/index.js +211 -1
  123. package/lib/module/components/BodyText.js +20 -1
  124. package/lib/module/components/BrandMark.js +104 -1
  125. package/lib/module/components/CodeInput.js +109 -1
  126. package/lib/module/components/EmailInput.js +23 -1
  127. package/lib/module/components/GoogleButton.js +49 -1
  128. package/lib/module/components/HeadingGroup.js +36 -1
  129. package/lib/module/components/LLMDataInputModal.js +656 -7
  130. package/lib/module/components/ModalHeader.js +92 -1
  131. package/lib/module/components/ModalSheet.js +39 -1
  132. package/lib/module/components/Onairos.js +373 -1
  133. package/lib/module/components/OnairosButton.js +305 -1
  134. package/lib/module/components/OnairosSignInButton.js +121 -1
  135. package/lib/module/components/Overlay.js +456 -1
  136. package/lib/module/components/PersonaImage.js +129 -1
  137. package/lib/module/components/PersonaLoadingScreen.js +310 -1
  138. package/lib/module/components/PersonalizationConsentScreen.js +460 -1
  139. package/lib/module/components/PinCreationScreen.js +396 -1
  140. package/lib/module/components/PinInput.js +456 -1
  141. package/lib/module/components/PlatformConnectorsStep.js +1302 -6
  142. package/lib/module/components/PlatformList.js +129 -1
  143. package/lib/module/components/PlatformToggle.js +173 -1
  144. package/lib/module/components/PrimaryButton.js +172 -1
  145. package/lib/module/components/SignInMatchAnimation.js +189 -1
  146. package/lib/module/components/SignInStep.js +338 -1
  147. package/lib/module/components/UniversalOnboarding.js +2770 -1
  148. package/lib/module/components/VerificationStep.js +168 -1
  149. package/lib/module/components/WelcomeScreen.js +453 -1
  150. package/lib/module/components/icons/Basicproficon.js +30 -1
  151. package/lib/module/components/icons/Basicprofile.js +14 -1
  152. package/lib/module/components/icons/Checkbox.js +14 -1
  153. package/lib/module/components/icons/Checkmark.js +20 -1
  154. package/lib/module/components/icons/Contentanalysis.js +14 -1
  155. package/lib/module/components/icons/Contenticon.js +32 -1
  156. package/lib/module/components/icons/EnochE.js +34 -1
  157. package/lib/module/components/icons/Personalityicon.js +23 -1
  158. package/lib/module/components/icons/Personalityprofile.js +14 -1
  159. package/lib/module/components/icons/Personalitytraits.js +14 -1
  160. package/lib/module/components/icons/Userpreferences.js +14 -1
  161. package/lib/module/components/icons/index.js +13 -1
  162. package/lib/module/components/onboarding/OAuthWebView.js +1746 -1
  163. package/lib/module/components/onboarding/OnboardingHeader.js +66 -1
  164. package/lib/module/components/onboarding/PinInput.js +274 -1
  165. package/lib/module/components/onboarding/PlatformConnector.js +240 -1
  166. package/lib/module/config/PLATFORM_APIS.md +849 -0
  167. package/lib/module/config/api.js +47 -1
  168. package/lib/module/constants/index.js +114 -1
  169. package/lib/module/context/AuthContext.js +335 -1
  170. package/lib/module/hooks/useConnectedAccounts.js +106 -1
  171. package/lib/module/hooks/useConnections.js +95 -1
  172. package/lib/module/hooks/useCredentials.js +171 -6
  173. package/lib/module/hooks/useUserConnections.js +140 -1
  174. package/lib/module/index.js +172 -1
  175. package/lib/module/services/apiClient.js +295 -1
  176. package/lib/module/services/biometricPinService.js +169 -1
  177. package/lib/module/services/chatGPTConversationExtractor.js +149 -1
  178. package/lib/module/services/chatGPTConversationService.js +268 -1
  179. package/lib/module/services/claudeConversationExtractor.js +97 -1
  180. package/lib/module/services/claudeConversationService.js +151 -1
  181. package/lib/module/services/connectedAccountsService.js +293 -1
  182. package/lib/module/services/googleAuthService.js +241 -1
  183. package/lib/module/services/hingeDataExtractor.js +99 -1
  184. package/lib/module/services/hingeDataService.js +143 -1
  185. package/lib/module/services/imageCompressionService.js +250 -1
  186. package/lib/module/services/instagramDataExtractor.js +120 -1
  187. package/lib/module/services/instagramDataService.js +156 -1
  188. package/lib/module/services/jwtStorageService.js +257 -1
  189. package/lib/module/services/linkedinDOMExtractor.js +234 -1
  190. package/lib/module/services/linkedinProfileService.js +210 -1
  191. package/lib/module/services/linkedinScrapingService.js +219 -1
  192. package/lib/module/services/llmDataStorage.js +277 -1
  193. package/lib/module/services/mobileTrainingService.js +173 -1
  194. package/lib/module/services/netflixDataExtractor.js +114 -1
  195. package/lib/module/services/netflixDataService.js +191 -1
  196. package/lib/module/services/pinEncryptionService.js +74 -6
  197. package/lib/module/services/pinStorageUtils.js +93 -1
  198. package/lib/module/services/platformAuthService.js +1461 -1
  199. package/lib/module/services/sephoraDataExtractor.js +134 -1
  200. package/lib/module/services/sephoraDataService.js +193 -1
  201. package/lib/module/services/spotifyDataExtractor.js +142 -1
  202. package/lib/module/services/spotifyDataService.js +234 -1
  203. package/lib/module/services/storageService.js +383 -1
  204. package/lib/module/services/telegramDataExtractor.js +109 -1
  205. package/lib/module/services/telegramDataService.js +493 -1
  206. package/lib/module/services/trainingApiHelpers.js +67 -1
  207. package/lib/module/services/userConnectionsService.js +329 -1
  208. package/lib/module/services/youtubeMigrationService.js +405 -1
  209. package/lib/module/theme/index.js +245 -1
  210. package/lib/module/types.js +10 -1
  211. package/lib/module/utils/Portal.js +90 -1
  212. package/lib/module/utils/api.js +118 -1
  213. package/lib/module/utils/assetRegistry.js +200 -34
  214. package/lib/module/utils/auth.js +100 -1
  215. package/lib/module/utils/connectorTests.js +600 -27
  216. package/lib/module/utils/crypto.js +54 -1
  217. package/lib/module/utils/debugHelper.js +54 -1
  218. package/lib/module/utils/encryption.js +67 -1
  219. package/lib/module/utils/eventUtils.js +270 -1
  220. package/lib/module/utils/haptics.js +59 -8
  221. package/lib/module/utils/imagePreloader.js +3 -1
  222. package/lib/module/utils/networkDiagnostics.js +217 -1
  223. package/lib/module/utils/onairosApi.js +333 -1
  224. package/lib/module/utils/programmaticFlow.js +111 -1
  225. package/lib/module/utils/retryHelper.js +211 -1
  226. package/lib/module/utils/secureStorage.js +330 -6
  227. package/lib/module/utils/webviewScripts/chatgpt.js +545 -1
  228. package/lib/module/utils/webviewScripts/claude.js +370 -1
  229. package/lib/module/utils/webviewScripts/hinge.js +405 -1
  230. package/lib/module/utils/webviewScripts/index.js +434 -1
  231. package/lib/module/utils/webviewScripts/instagram.js +448 -1
  232. package/lib/module/utils/webviewScripts/linkedin.js +874 -1
  233. package/lib/module/utils/webviewScripts/netflix.js +376 -1
  234. package/lib/module/utils/webviewScripts/sephora.js +510 -1
  235. package/lib/module/utils/webviewScripts/spotify.js +413 -1
  236. package/lib/module/utils/webviewScripts/telegram.js +672 -1
  237. package/package.json +2 -2
@@ -1,9 +1,464 @@
1
- 'use strict';
2
- // Onairos SDK - Asset Registry (auto-generated)
3
- var __ONAIROS_REQ_REGISTRY__ = [
4
- require("react"),
5
- require("react-native"),
6
- require("../services/biometricPinService")
7
- ];
8
- function __ONAIROS_REQ_FUNC__(i) { return __ONAIROS_REQ_REGISTRY__[i]; }
9
- Object['defineProperty'](exports,_0x27aa(0x0),{'value':!![]}),exports['PinInput']=void 0x0;function _0x27aa(_0x12243a,_0x27aa9c){_0x12243a=_0x12243a-0x0;const _0x41e16c=_0x1224();let _0x169cf7=_0x41e16c[_0x12243a];return _0x169cf7;}var _react=_interopRequireWildcard(__ONAIROS_REQ_FUNC__(0x0)),_reactNative=__ONAIROS_REQ_FUNC__(0x1),_biometricPinService=__ONAIROS_REQ_FUNC__(0x2);function _interopRequireWildcard(_0x543b9a,_0x477ddb){const _0x8cac60={'Thxad':function(_0x237f96,_0x311fe5){return _0x237f96(_0x311fe5);},'mdsAQ':function(_0x17914a,_0x4c4ba7){return _0x17914a===_0x4c4ba7;},'iNLGD':function(_0x2912e5,_0x41a551){return _0x2912e5!=_0x41a551;},'AVVDP':_0x27aa(0x1),'qERbU':function(_0x3e5399,_0x2fc3ad){return _0x3e5399!=_0x2fc3ad;},'Dcybt':_0x27aa(0x2),'OQVQH':_0x27aa(0x3),'SOQvT':function(_0x5ee040,_0x23087c){return _0x5ee040!==_0x23087c;},'PVRMN':function(_0x7042ae,_0x1e1e5d,_0x3d54e6,_0x5be0ee){return _0x7042ae(_0x1e1e5d,_0x3d54e6,_0x5be0ee);}};if(_0x8cac60[_0x27aa(0x4)]==typeof WeakMap)var _0x4655b0=new WeakMap(),_0x20a576=new WeakMap();return(_interopRequireWildcard=function(_0x36a97f,_0x13e90c){const _0x324aa8={'CEkOL':function(_0xd2bf32,_0x1e982b){return _0x8cac60[_0x27aa(0x5)](_0xd2bf32,_0x1e982b);}};if(!_0x13e90c&&_0x36a97f&&_0x36a97f[_0x27aa(0x0)])return _0x36a97f;var _0x5b8353,_0x39ae66,_0x3681f9={'__proto__':null,'default':_0x36a97f};if(_0x8cac60['mdsAQ'](null,_0x36a97f)||_0x8cac60['iNLGD'](_0x8cac60[_0x27aa(0x6)],typeof _0x36a97f)&&_0x8cac60[_0x27aa(0x7)](_0x8cac60[_0x27aa(0x4)],typeof _0x36a97f))return _0x3681f9;if(_0x5b8353=_0x13e90c?_0x20a576:_0x4655b0){if(_0x8cac60[_0x27aa(0x8)](_0x8cac60[_0x27aa(0x9)],_0x8cac60[_0x27aa(0x9)])){if(_0x5b8353[_0x27aa(0xa)](_0x36a97f))return _0x5b8353[_0x27aa(0xb)](_0x36a97f);_0x5b8353['set'](_0x36a97f,_0x3681f9);}else _0x5f0220[_0x27aa(0xc)]('\u274C [PIN INPUT] Background training failed:',_0x43b1b8),_0x324aa8['CEkOL'](_0x585de2,![]);}for(const _0x54ff8e in _0x36a97f)_0x8cac60['SOQvT'](_0x27aa(0xd),_0x54ff8e)&&{}[_0x27aa(0xe)][_0x27aa(0xf)](_0x36a97f,_0x54ff8e)&&((_0x39ae66=(_0x5b8353=Object[_0x27aa(0x10)])&&Object[_0x27aa(0x11)](_0x36a97f,_0x54ff8e))&&(_0x39ae66['get']||_0x39ae66[_0x27aa(0x12)])?_0x8cac60[_0x27aa(0x13)](_0x5b8353,_0x3681f9,_0x54ff8e,_0x39ae66):_0x3681f9[_0x54ff8e]=_0x36a97f[_0x54ff8e]);return _0x3681f9;})(_0x543b9a,_0x477ddb);}function _0x1224(){const _0x3bb60e=['__esModule','object','function','RoHxO','Dcybt','Thxad','AVVDP','qERbU','mdsAQ','OQVQH','has','get','error','default','hasOwnProperty','call','defineProperty','getOwnPropertyDescriptor','set','PVRMN','Dimensions','PIN\x20must\x20include\x20a\x20number','Rowls','cdWRF','AwbTd','biometric-unavailable','Biometric\x20Authentication\x20Not\x20Available','Biometric\x20Authentication\x20Failed','An\x20error\x20occurred\x20while\x20securing\x20your\x20PIN.\x20Would\x20you\x20like\x20to\x20try\x20again?','Authenticating...','Please\x20complete\x20biometric\x20authentication\x20to\x20secure\x20your\x20PIN.','info','Secure\x20PIN\x20Storage','Your\x20PIN\x20will\x20be\x20securely\x20stored\x20locally\x20on\x20your\x20device\x20using\x20biometric\x20authentication\x20(Face\x20ID\x20or\x20Touch\x20ID)\x20for\x20enhanced\x20security.','tIHjq','MFNDw','jkqCD','storage-error','VSnxG','yZlFF','This\x20device\x20does\x20not\x20support\x20Face\x20ID\x20or\x20Touch\x20ID.\x20Please\x20enable\x20biometric\x20authentication\x20in\x20your\x20device\x20settings\x20to\x20secure\x20your\x20PIN.','Biometric\x20authentication\x20was\x20cancelled\x20or\x20failed.\x20Your\x20PIN\x20needs\x20to\x20be\x20secured\x20with\x20biometric\x20authentication\x20to\x20proceed.','A\x20PIN\x20so\x20only\x20you\x20have\x20access\x20to\x20your\x20data','#007AFF','done','👁️','👁️‍🗨️','PIN\x20Requirements:','•\x20At\x20least\x20','\x20characters','•\x20Include\x20a\x20special\x20character','•\x20Include\x20a\x20number','Continue\x20Without\x20Biometric','Back','Continue','useState','useEffect','wRRYo','rfsBd','gQKYg','ypmQw','hQwfO','nfzEy','WNMqa','fqycc','YNhKp','vJdwx','PIN\x20must\x20include\x20a\x20special\x20character','HFOmn','length','test','PYpeK','zbPGI','cRSRv','RpQyS','EBczr','BlDhq','Plxyh','yEfKI','vfgZJ','vCATm','EiIlY','bjmpW','wToEY','log','uFQnf','HOkGo','DdNGz','snQgl','QHMmA','ShiDS','TctIx','biometricPinService','FUGpi','gaGrb','bPCAZ','YrwgH','catch','Lzklv','storePinWithBiometric','isPinStored','vaaHf','YuDzD','dwbZX','FNAxb','warn','dZeOu','rMNln','wxPaz','QYmyZ','rptZY','gaoaE','MNWwP','ctPin','nXcPF','vxfdY','nCXCl','lzGGb','aulaC','koMrj','uGFGy','iKIVa','NRvqV','GSrOJ','useCallback','OifJR','cvowa','warning','Storage\x20Error','Ivppo','NQMAb','createElement','View','container','inputSection','header','TouchableOpacity','backButton','Text','title','RtOPo','subtitle','LVgbK','backgroundProgressContainer','backgroundProgressText','ActivityIndicator','small','vyBSz','inputContainer','none','iNdKh','Keyboard','dismiss','ILGag','requirements','requirementTitle','GRLsH','requirement','DocLq','cwECl','requirementMet','WkbRi','infoContainer','type','infoContainerInfo','infoContainerWarning','infoTitleInfo','infoTitleWarning','infoTitleError','infoMessageWarning','infoMessageError','message','showActions','infoActions','infoActionButtonText','Try\x20Again','infoActionButtonSecondary','infoActionButtonSecondaryText','ZuvCt','cancelButton','cancelButtonText','submitButton','cEXSB','fztjO','submitButtonText','YhRhB','PinInput','StyleSheet','flex-start','100%','row','space-between','#666','center','#CCCCCC','#2196F3','#FF9800','600','#1976D2','#F57C00','#1565C0','#E65100','transparent','#fff','#FF3B30','#333','#34C759','#eee','#000000'];_0x1224=function(){return _0x3bb60e;};return _0x1224();}const {width}=_reactNative[_0x27aa(0x14)][_0x27aa(0xb)]('window'),PinInput=({onSubmit:_0x2902cb,minLength:minLength=0x8,requireSpecialChar:requireSpecialChar=!![],requireNumber:requireNumber=!![],onBack:_0x4a4c05,enableBiometricStorage:enableBiometricStorage=!![],onBackgroundTrainingStart:_0x28d79a,showBackgroundProgress:showBackgroundProgress=![],backgroundProgressText:backgroundProgressText='Training\x20is\x20starting\x20in\x20the\x20background...'})=>{const _0x41818d={'hQwfO':function(_0x4675cb,_0x24bd57){return _0x4675cb(_0x24bd57);},'nfzEy':_0x27aa(0x15),'wRRYo':function(_0x5df814,_0x2fa5da){return _0x5df814&&_0x2fa5da;},'rfsBd':_0x27aa(0x16),'gQKYg':_0x27aa(0x17),'ypmQw':function(_0x10ae54,_0x4144f7){return _0x10ae54(_0x4144f7);},'ifuxd':function(_0x404ed3){return _0x404ed3();},'WNMqa':function(_0xfe9c0b,_0x3b9988){return _0xfe9c0b<_0x3b9988;},'fqycc':'PIN\x20must\x20include\x20a\x20special\x20character','maQaW':function(_0x331566,_0x3ceaa4){return _0x331566!==_0x3ceaa4;},'YNhKp':_0x27aa(0x18),'vJdwx':'ZYugd','cRSRv':function(_0x511372,_0x230b36){return _0x511372(_0x230b36);},'RpQyS':function(_0x570441){return _0x570441();},'EBczr':_0x27aa(0x19),'BlDhq':_0x27aa(0x1a),'Plxyh':'warning','yEfKI':'biometric-failed','vfgZJ':_0x27aa(0x1b),'LFITb':_0x27aa(0x1c),'vCATm':'error','Ivppo':_0x27aa(0x1d),'NQMAb':_0x27aa(0x1e),'EiIlY':_0x27aa(0x1f),'bjmpW':_0x27aa(0x20),'wToEY':_0x27aa(0x21),'DdNGz':function(_0x5c8a9a,_0x155bca){return _0x5c8a9a(_0x155bca);},'uFQnf':function(_0x3f28fc,_0x5c6090){return _0x3f28fc===_0x5c6090;},'HOkGo':_0x27aa(0x22),'snQgl':'authenticating','QHMmA':function(_0x2b4f58,_0x3d7152){return _0x2b4f58!==_0x3d7152;},'ShiDS':_0x27aa(0x23),'TctIx':_0x27aa(0x24),'FUGpi':function(_0x2cb9c9,_0x1bd550){return _0x2cb9c9!==_0x1bd550;},'Lzklv':function(_0x62f385,_0x19ada4){return _0x62f385(_0x19ada4);},'cEXSB':function(_0x138131,_0x445f5b){return _0x138131(_0x445f5b);},'vaaHf':function(_0x2ef165,_0x7d2d7c){return _0x2ef165(_0x7d2d7c);},'JiDhJ':function(_0x4252b2,_0x4cebd5){return _0x4252b2(_0x4cebd5);},'YuDzD':_0x27aa(0x25),'dwbZX':function(_0x1d9951,_0x5c49a8){return _0x1d9951!==_0x5c49a8;},'FNAxb':_0x27aa(0x26),'rMNln':function(_0x4fa6a4,_0x149842){return _0x4fa6a4===_0x149842;},'wxPaz':_0x27aa(0x27),'OifJR':_0x27aa(0xd),'Iimyu':function(_0x1c1219,_0x3f940a){return _0x1c1219(_0x3f940a);},'rWirB':_0x27aa(0x28),'cvowa':_0x27aa(0x29),'RtOPo':'Create\x20a\x20PIN','LVgbK':_0x27aa(0x2a),'vyBSz':_0x27aa(0x2b),'ZSCsD':'e.g.\x20MyPin123!','iNdKh':_0x27aa(0x2c),'ILGag':_0x27aa(0x2d),'InepI':_0x27aa(0x2e),'GRLsH':_0x27aa(0x2f),'DocLq':function(_0x3ca209,_0x1878a5){return _0x3ca209>=_0x1878a5;},'cwECl':_0x27aa(0x30),'eZNtu':_0x27aa(0x31),'WkbRi':_0x27aa(0x32),'uraEk':_0x27aa(0x33),'ukJpO':function(_0x580cc0,_0x1b128b){return _0x580cc0===_0x1b128b;},'ZuvCt':_0x27aa(0x34),'Qvgyx':_0x27aa(0x35),'fztjO':function(_0x2fc75a,_0x224798){return _0x2fc75a||_0x224798;},'YhRhB':_0x27aa(0x36)},[_0x4c2539,_0x4d2dfd]=(0x0,_react[_0x27aa(0x37)])(''),[_0xf65f1,_0x4d5ed4]=(0x0,_react[_0x27aa(0x37)])(null),[_0x5efbc9,_0x27a2a0]=(0x0,_react['useState'])(![]),[_0xfdda4c,_0x1a4112]=(0x0,_react[_0x27aa(0x37)])(![]),[_0x3def5c,_0x460309]=(0x0,_react['useState'])(_0x41818d['OifJR']),[_0x2611f5,_0x183e62]=(0x0,_react[_0x27aa(0x37)])(![]);_react[_0x27aa(0xd)][_0x27aa(0x38)](()=>{if(_0x41818d[_0x27aa(0x39)](_0x28d79a,!_0x2611f5)&&showBackgroundProgress){if(_0x41818d[_0x27aa(0x3a)]!==_0x41818d[_0x27aa(0x3b)])console['log']('\uD83D\uDE80 [PIN INPUT] Background training explicitly requested...'),_0x41818d[_0x27aa(0x3c)](_0x183e62,!![]),_0x41818d['ifuxd'](_0x28d79a)['catch'](_0x32876c=>{console[_0x27aa(0xc)]('\u274C [PIN INPUT] Background training failed:',_0x32876c),_0x41818d[_0x27aa(0x3d)](_0x183e62,![]);});else return _0x41818d[_0x27aa(0x3e)];}},[_0x28d79a,_0x2611f5,showBackgroundProgress]);const _0x4c1ad6=(0x0,_react['useCallback'])(_0x4ed6e9=>{const _0x18b98d={'HFOmn':function(_0x2ad28f,_0x43bc3a){return _0x41818d[_0x27aa(0x3f)](_0x2ad28f,_0x43bc3a);},'PYpeK':_0x41818d[_0x27aa(0x40)],'zbPGI':_0x27aa(0x15)};if(_0x41818d['maQaW'](_0x41818d[_0x27aa(0x41)],_0x41818d[_0x27aa(0x42)])){if(_0x41818d['WNMqa'](_0x4ed6e9['length'],minLength))return'PIN\x20must\x20be\x20at\x20least\x20'+minLength+_0x27aa(0x31);if(requireSpecialChar&&!/[!@#$%^&*(),.?":{}|<>]/['test'](_0x4ed6e9))return _0x27aa(0x43);if(requireNumber&&!/\d/['test'](_0x4ed6e9))return _0x41818d[_0x27aa(0x3e)];return null;}else{if(_0x18b98d[_0x27aa(0x44)](_0x25f8c7[_0x27aa(0x45)],_0x2a846f))return'PIN\x20must\x20be\x20at\x20least\x20'+_0x81a7a1+_0x27aa(0x31);if(_0x1620d9&&!/[!@#$%^&*(),.?":{}|<>]/[_0x27aa(0x46)](_0x23bd33))return _0x18b98d[_0x27aa(0x47)];if(_0x2e4299&&!/\d/[_0x27aa(0x46)](_0x356d89))return _0x18b98d[_0x27aa(0x48)];return null;}},[minLength,requireSpecialChar,requireNumber]),_0x34163d=(0x0,_react['useCallback'])(async()=>{const _0x8e4516={'bPCAZ':function(_0x20fa9b,_0x130419){return _0x41818d[_0x27aa(0x49)](_0x20fa9b,_0x130419);},'YrwgH':function(_0x1cd7e0){return _0x41818d[_0x27aa(0x4a)](_0x1cd7e0);},'dZeOu':_0x27aa(0xd),'QYmyZ':_0x41818d[_0x27aa(0x4b)],'rptZY':_0x41818d[_0x27aa(0x4c)],'gaoaE':_0x27aa(0x28),'MNWwP':_0x41818d[_0x27aa(0x4d)],'ctPin':_0x41818d[_0x27aa(0x4e)],'nXcPF':_0x41818d[_0x27aa(0x4f)],'vxfdY':_0x27aa(0x29),'nCXCl':'storage-error','lzGGb':_0x41818d['LFITb'],'aulaC':_0x41818d[_0x27aa(0x50)],'koMrj':_0x41818d['Ivppo'],'uGFGy':_0x41818d['NQMAb'],'iKIVa':_0x41818d[_0x27aa(0x51)],'NRvqV':_0x41818d[_0x27aa(0x52)],'GSrOJ':_0x41818d[_0x27aa(0x53)]};console[_0x27aa(0x54)]('\uD83D\uDD0D [PIN INPUT] handleSubmit called with PIN length:',_0x4c2539[_0x27aa(0x45)]);const _0x5398d2=_0x41818d['DdNGz'](_0x4c1ad6,_0x4c2539);if(_0x5398d2){console['log']('\u274C [PIN INPUT] Validation failed:',_0x5398d2),_0x41818d[_0x27aa(0x3d)](_0x4d5ed4,_0x5398d2);return;}console['log']('\u2705 [PIN INPUT] PIN validation passed');if(enableBiometricStorage){if(_0x41818d[_0x27aa(0x55)](_0x41818d[_0x27aa(0x56)],_0x41818d[_0x27aa(0x56)])){console[_0x27aa(0x54)]('\uD83D\uDD10 [PIN INPUT] Biometric storage enabled, starting biometric flow...'),_0x41818d['cRSRv'](_0x1a4112,!![]),_0x41818d[_0x27aa(0x57)](_0x460309,_0x41818d[_0x27aa(0x58)]);try{if(_0x41818d[_0x27aa(0x59)](_0x41818d[_0x27aa(0x5a)],_0x41818d[_0x27aa(0x5b)])){const _0x4d0bd4=await _biometricPinService[_0x27aa(0x5c)]['isBiometricAvailable']();console[_0x27aa(0x54)]('\uD83D\uDCF1 [PIN INPUT] Biometric available:',_0x4d0bd4);if(!_0x4d0bd4){if(_0x41818d[_0x27aa(0x5d)](_0x27aa(0x5e),_0x27aa(0x5e)))_0x47d781['log']('\uD83D\uDE80 [PIN INPUT] Background training explicitly requested...'),_0x8e4516[_0x27aa(0x5f)](_0xa2fb7b,!![]),_0x8e4516[_0x27aa(0x60)](_0x57bb3b)[_0x27aa(0x61)](_0x46431b=>{_0x401ba1['error']('\u274C [PIN INPUT] Background training failed:',_0x46431b),_0x8e4516['bPCAZ'](_0x39051b,![]);});else{console[_0x27aa(0xc)]('\u274C [PIN INPUT] Face ID not available on this device'),_0x41818d[_0x27aa(0x62)](_0x460309,_0x41818d[_0x27aa(0x4b)]),_0x41818d['cEXSB'](_0x1a4112,![]);return;}}console[_0x27aa(0x54)]('\uD83D\uDD10 [PIN INPUT] Triggering biometric authentication for PIN storage...');const _0x53f5e8=await _biometricPinService[_0x27aa(0x5c)][_0x27aa(0x63)](_0x4c2539);if(_0x53f5e8){console[_0x27aa(0x54)]('\u2705 [PIN INPUT] PIN stored successfully with biometric protection');const _0x1144b3=await _biometricPinService[_0x27aa(0x5c)][_0x27aa(0x64)]();_0x1144b3?(console[_0x27aa(0x54)]('\u2705 [PIN INPUT] PIN storage verified - proceeding with onboarding'),_0x41818d[_0x27aa(0x65)](_0x2902cb,_0x4c2539)):(console[_0x27aa(0xc)]('\u274C [PIN INPUT] PIN storage verification failed'),_0x41818d['JiDhJ'](_0x460309,_0x41818d[_0x27aa(0x66)]),_0x41818d['cEXSB'](_0x1a4112,![]));}else _0x41818d[_0x27aa(0x67)](_0x41818d[_0x27aa(0x68)],'VSnxG')?(_0x451cb9[_0x27aa(0x69)]('\u26A0️ [PIN INPUT] User chose to continue without biometric security'),_0x41818d['ypmQw'](_0x23903f,_0x126dee)):(console[_0x27aa(0x69)]('\u26A0️ [PIN INPUT] Biometric authentication failed or was cancelled'),_0x41818d[_0x27aa(0x3d)](_0x460309,_0x41818d[_0x27aa(0x4e)]),_0x41818d[_0x27aa(0x49)](_0x1a4112,![]));}else{if(_0x8ba8cb[_0x27aa(0xa)](_0x3cac25))return _0x5abeea[_0x27aa(0xb)](_0x136a90);_0x2ec870[_0x27aa(0x12)](_0x4682d0,_0x1780a4);}}catch(_0x24f15d){console[_0x27aa(0xc)]('\u274C [PIN INPUT] Error handling biometric PIN storage:',_0x24f15d),_0x460309(_0x41818d[_0x27aa(0x66)]),_0x41818d[_0x27aa(0x3d)](_0x1a4112,![]);}}else _0x8e4516['bPCAZ'](_0x59a687,_0x8e4516[_0x27aa(0x6a)]),_0x8e4516[_0x27aa(0x60)](_0x136987);}else{if(_0x41818d[_0x27aa(0x6b)](_0x41818d[_0x27aa(0x6c)],_0x41818d[_0x27aa(0x6c)]))console[_0x27aa(0x54)]('\uD83D\uDD10 [PIN INPUT] Biometric storage disabled, proceeding normally'),_0x2902cb(_0x4c2539);else switch(_0x201a00){case _0x8e4516[_0x27aa(0x6d)]:return{'title':_0x8e4516[_0x27aa(0x6e)],'message':_0x8e4516[_0x27aa(0x6f)],'type':_0x8e4516[_0x27aa(0x70)],'showActions':!![]};case _0x8e4516[_0x27aa(0x71)]:return{'title':_0x8e4516[_0x27aa(0x72)],'message':_0x8e4516[_0x27aa(0x73)],'type':_0x8e4516[_0x27aa(0x70)],'showActions':!![]};case _0x8e4516[_0x27aa(0x74)]:return{'title':'Storage\x20Error','message':_0x8e4516[_0x27aa(0x75)],'type':_0x8e4516[_0x27aa(0x76)],'showActions':!![]};case'authenticating':return{'title':_0x8e4516[_0x27aa(0x77)],'message':_0x8e4516[_0x27aa(0x78)],'type':_0x8e4516[_0x27aa(0x79)],'showActions':![]};default:return{'title':_0x8e4516[_0x27aa(0x7a)],'message':_0x8e4516[_0x27aa(0x7b)],'type':_0x27aa(0x1f),'showActions':![]};}}},[_0x4c2539,_0x4c1ad6,_0x2902cb,enableBiometricStorage]),_0x39c37f=(0x0,_react[_0x27aa(0x7c)])(_0x458791=>{_0x4d2dfd(_0x458791),_0x4d5ed4(null),_0x41818d[_0x27aa(0x62)](_0x460309,_0x41818d[_0x27aa(0x7d)]),console[_0x27aa(0x54)]('\uD83D\uDD0D [PIN INPUT] PIN changed:',{'length':_0x458791[_0x27aa(0x45)],'hasSpecialChar':/[!@#$%^&*(),.?":{}|<>]/[_0x27aa(0x46)](_0x458791),'hasNumber':/\d/['test'](_0x458791),'isValid':!_0x41818d[_0x27aa(0x3c)](_0x4c1ad6,_0x458791)});},[_0x4c1ad6]),_0x2b14d2=(0x0,_react['useCallback'])(()=>{console[_0x27aa(0x69)]('\u26A0️ [PIN INPUT] User chose to continue without biometric security'),_0x41818d['Iimyu'](_0x2902cb,_0x4c2539);},[_0x4c2539,_0x2902cb]),_0x15b7b4=(0x0,_react[_0x27aa(0x7c)])(()=>{_0x460309(_0x27aa(0xd)),_0x34163d();},[_0x34163d]),_0x366c3b=()=>{switch(_0x3def5c){case _0x41818d['EBczr']:return{'title':_0x41818d[_0x27aa(0x4c)],'message':_0x41818d['rWirB'],'type':_0x41818d[_0x27aa(0x4d)],'showActions':!![]};case _0x41818d['yEfKI']:return{'title':_0x41818d[_0x27aa(0x4f)],'message':_0x41818d[_0x27aa(0x7e)],'type':_0x27aa(0x7f),'showActions':!![]};case _0x41818d['YuDzD']:return{'title':_0x27aa(0x80),'message':_0x27aa(0x1c),'type':_0x41818d[_0x27aa(0x50)],'showActions':!![]};case _0x41818d[_0x27aa(0x58)]:return{'title':_0x41818d[_0x27aa(0x81)],'message':_0x41818d[_0x27aa(0x82)],'type':_0x41818d[_0x27aa(0x51)],'showActions':![]};default:return{'title':_0x27aa(0x20),'message':_0x41818d[_0x27aa(0x53)],'type':_0x41818d[_0x27aa(0x51)],'showActions':![]};}},_0x1b36c3=_0x41818d[_0x27aa(0x4a)](_0x366c3b);return _react['default'][_0x27aa(0x83)](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0x85)]},_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0x86)]},_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0x87)]},_0x4a4c05&&_react['default'][_0x27aa(0x83)](_reactNative[_0x27aa(0x88)],{'style':styles[_0x27aa(0x89)],'onPress':_0x4a4c05},_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x8a)],{'style':{'fontSize':0x18}},'←')),_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x8a)],{'style':styles[_0x27aa(0x8b)]},_0x41818d[_0x27aa(0x8c)])),_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x8a)],{'style':styles[_0x27aa(0x8d)]},_0x41818d[_0x27aa(0x8e)]),_0x41818d[_0x27aa(0x39)](showBackgroundProgress,_0x2611f5)&&_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0x8f)]},_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative['Text'],{'style':styles[_0x27aa(0x90)]},backgroundProgressText),_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x84)],{'style':styles['backgroundProgressIndicator']},_react['default']['createElement'](_reactNative[_0x27aa(0x91)],{'size':_0x27aa(0x92),'color':_0x41818d[_0x27aa(0x93)]}))),_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0x94)]},_react[_0x27aa(0xd)]['createElement'](_reactNative['TextInput'],{'style':styles['input'],'value':_0x4c2539,'onChangeText':_0x39c37f,'secureTextEntry':!_0x5efbc9,'placeholder':_0x41818d['ZSCsD'],'keyboardType':_0x27aa(0xd),'maxLength':0x14,'autoCapitalize':_0x27aa(0x95),'autoCorrect':![],'returnKeyType':_0x41818d[_0x27aa(0x96)],'onSubmitEditing':()=>_reactNative[_0x27aa(0x97)][_0x27aa(0x98)]()}),_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative['TouchableOpacity'],{'style':styles['visibilityButton'],'onPress':()=>_0x27a2a0(!_0x5efbc9)},_react['default'][_0x27aa(0x83)](_reactNative[_0x27aa(0x8a)],null,_0x5efbc9?_0x41818d[_0x27aa(0x99)]:_0x41818d['InepI'])))),_0xf65f1&&_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x8a)],{'style':styles['error']},_0xf65f1),_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0x9a)]},_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x8a)],{'style':styles[_0x27aa(0x9b)]},_0x41818d[_0x27aa(0x9c)]),_react['default']['createElement'](_reactNative['Text'],{'style':[styles[_0x27aa(0x9d)],_0x41818d[_0x27aa(0x9e)](_0x4c2539['length'],minLength)&&styles['requirementMet']]},_0x41818d[_0x27aa(0x9f)],minLength,_0x41818d['eZNtu']),requireSpecialChar&&_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative['Text'],{'style':[styles[_0x27aa(0x9d)],/[!@#$%^&*(),.?":{}|<>]/[_0x27aa(0x46)](_0x4c2539)&&styles[_0x27aa(0xa0)]]},_0x41818d[_0x27aa(0xa1)]),requireNumber&&_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x8a)],{'style':[styles['requirement'],/\d/[_0x27aa(0x46)](_0x4c2539)&&styles[_0x27aa(0xa0)]]},_0x41818d['uraEk'])),_react['default']['createElement'](_reactNative['View'],{'style':[styles[_0x27aa(0xa2)],_0x41818d[_0x27aa(0x6b)](_0x1b36c3[_0x27aa(0xa3)],_0x41818d[_0x27aa(0x51)])&&styles[_0x27aa(0xa4)],_0x1b36c3[_0x27aa(0xa3)]===_0x41818d[_0x27aa(0x4d)]&&styles[_0x27aa(0xa5)],_0x41818d['uFQnf'](_0x1b36c3[_0x27aa(0xa3)],_0x41818d[_0x27aa(0x50)])&&styles['infoContainerError']]},_react['default']['createElement'](_reactNative['Text'],{'style':[styles['infoTitle'],_0x1b36c3[_0x27aa(0xa3)]===_0x41818d[_0x27aa(0x51)]&&styles[_0x27aa(0xa6)],_0x41818d[_0x27aa(0x6b)](_0x1b36c3[_0x27aa(0xa3)],_0x41818d[_0x27aa(0x4d)])&&styles[_0x27aa(0xa7)],_0x41818d[_0x27aa(0x6b)](_0x1b36c3[_0x27aa(0xa3)],_0x41818d[_0x27aa(0x50)])&&styles[_0x27aa(0xa8)]]},_0x1b36c3[_0x27aa(0x8b)]),_react['default'][_0x27aa(0x83)](_reactNative[_0x27aa(0x8a)],{'style':[styles['infoMessage'],_0x41818d[_0x27aa(0x6b)](_0x1b36c3[_0x27aa(0xa3)],_0x41818d[_0x27aa(0x51)])&&styles['infoMessageInfo'],_0x1b36c3[_0x27aa(0xa3)]===_0x27aa(0x7f)&&styles[_0x27aa(0xa9)],_0x41818d['ukJpO'](_0x1b36c3[_0x27aa(0xa3)],_0x27aa(0xc))&&styles[_0x27aa(0xaa)]]},_0x1b36c3[_0x27aa(0xab)]),_0x1b36c3[_0x27aa(0xac)]&&_react['default']['createElement'](_reactNative[_0x27aa(0x84)],{'style':styles[_0x27aa(0xad)]},_react['default'][_0x27aa(0x83)](_reactNative['TouchableOpacity'],{'style':styles['infoActionButton'],'onPress':_0x15b7b4},_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative[_0x27aa(0x8a)],{'style':styles[_0x27aa(0xae)]},_0x27aa(0xaf))),_react['default'][_0x27aa(0x83)](_reactNative[_0x27aa(0x88)],{'style':[styles['infoActionButton'],styles[_0x27aa(0xb0)]],'onPress':_0x2b14d2},_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x8a)],{'style':[styles['infoActionButtonText'],styles[_0x27aa(0xb1)]]},_0x41818d[_0x27aa(0xb2)])))),_react['default'][_0x27aa(0x83)](_reactNative[_0x27aa(0x84)],{'style':styles['footer']},_0x4a4c05&&_react[_0x27aa(0xd)][_0x27aa(0x83)](_reactNative['TouchableOpacity'],{'style':styles[_0x27aa(0xb3)],'onPress':_0x4a4c05},_react[_0x27aa(0xd)]['createElement'](_reactNative['Text'],{'style':styles[_0x27aa(0xb4)]},_0x41818d['Qvgyx'])),_react[_0x27aa(0xd)]['createElement'](_reactNative['TouchableOpacity'],{'style':[styles[_0x27aa(0xb5)],(!_0x4c2539||_0xfdda4c||_0x41818d[_0x27aa(0xb6)](_0x4c1ad6,_0x4c2539))&&styles['submitButtonDisabled']],'onPress':_0x34163d,'disabled':_0x41818d[_0x27aa(0xb7)](!_0x4c2539,_0xfdda4c)||!!_0x41818d[_0x27aa(0x3c)](_0x4c1ad6,_0x4c2539)},_react[_0x27aa(0xd)]['createElement'](_reactNative[_0x27aa(0x8a)],{'style':styles[_0x27aa(0xb8)]},_0xfdda4c?_0x41818d[_0x27aa(0x81)]:_0x41818d[_0x27aa(0xb9)]))));};exports[_0x27aa(0xba)]=PinInput;const styles=_reactNative[_0x27aa(0xbb)]['create']({'container':{'flex':0x1,'padding':0x10,'width':width,'backgroundColor':'#fff','justifyContent':_0x27aa(0xbc)},'inputSection':{'width':_0x27aa(0xbd),'marginTop':0x0,'paddingTop':0x0},'header':{'flexDirection':_0x27aa(0xbe),'alignItems':'center','justifyContent':_0x27aa(0xbf),'marginBottom':0x10,'paddingVertical':0x8},'backButton':{'padding':0x8},'title':{'fontSize':0x14,'fontWeight':'600','color':'#333','textAlign':'center','flex':0x1,'marginBottom':0x8},'subtitle':{'fontSize':0xe,'color':_0x27aa(0xc0),'marginBottom':0x18,'textAlign':_0x27aa(0xc1)},'inputContainer':{'flexDirection':_0x27aa(0xbe),'alignItems':_0x27aa(0xc1),'borderWidth':0x1,'borderColor':_0x27aa(0xc2),'borderRadius':0x8,'marginBottom':0x10},'input':{'flex':0x1,'padding':0xc,'fontSize':0x10},'visibilityButton':{'padding':0xc},'infoContainer':{'padding':0x10,'borderRadius':0xc,'marginBottom':0x10,'borderWidth':0x1},'infoContainerInfo':{'backgroundColor':'#E3F2FD','borderColor':_0x27aa(0xc3)},'infoContainerWarning':{'backgroundColor':'#FFF3E0','borderColor':_0x27aa(0xc4)},'infoContainerError':{'backgroundColor':'#FFEBEE','borderColor':'#F44336'},'infoTitle':{'fontSize':0x10,'fontWeight':_0x27aa(0xc5),'marginBottom':0x8},'infoTitleInfo':{'color':_0x27aa(0xc6)},'infoTitleWarning':{'color':_0x27aa(0xc7)},'infoTitleError':{'color':'#D32F2F'},'infoMessage':{'fontSize':0xe,'lineHeight':0x14,'marginBottom':0xc},'infoMessageInfo':{'color':_0x27aa(0xc8)},'infoMessageWarning':{'color':_0x27aa(0xc9)},'infoMessageError':{'color':'#C62828'},'infoActions':{'flexDirection':_0x27aa(0xbe),'justifyContent':_0x27aa(0xbf),'marginTop':0x8},'infoActionButton':{'flex':0x1,'paddingVertical':0xa,'paddingHorizontal':0x10,'borderRadius':0x8,'backgroundColor':_0x27aa(0x2b),'marginHorizontal':0x4,'alignItems':_0x27aa(0xc1)},'infoActionButtonSecondary':{'backgroundColor':_0x27aa(0xca),'borderWidth':0x1,'borderColor':'#007AFF'},'infoActionButtonText':{'color':_0x27aa(0xcb),'fontSize':0xe,'fontWeight':'600'},'infoActionButtonSecondaryText':{'color':'#007AFF'},'error':{'color':_0x27aa(0xcc),'marginBottom':0x10},'requirements':{'marginBottom':0x18},'requirementTitle':{'fontSize':0xe,'fontWeight':_0x27aa(0xc5),'marginBottom':0x8,'color':_0x27aa(0xcd)},'requirement':{'fontSize':0xe,'color':'#666','marginBottom':0x4},'requirementMet':{'color':_0x27aa(0xce)},'footer':{'flexDirection':'row','alignItems':'center','justifyContent':_0x27aa(0xbf),'marginTop':0x18,'borderTopWidth':0x1,'borderTopColor':_0x27aa(0xcf),'paddingTop':0x10},'cancelButton':{'paddingVertical':0x8,'paddingHorizontal':0x10},'cancelButtonText':{'color':_0x27aa(0xc0),'fontSize':0x10},'submitButton':{'paddingVertical':0x10,'paddingHorizontal':0x20,'borderRadius':0x10,'backgroundColor':_0x27aa(0xd0),'alignItems':_0x27aa(0xc1)},'submitButtonDisabled':{'opacity':0.5},'submitButtonText':{'color':'#fff','fontSize':0x10,'fontWeight':_0x27aa(0xc5)},'backgroundProgressContainer':{'flexDirection':'row','alignItems':_0x27aa(0xc1),'justifyContent':_0x27aa(0xc1),'marginBottom':0x10},'backgroundProgressText':{'fontSize':0xe,'color':'#666','marginRight':0xa},'backgroundProgressIndicator':{'padding':0x5}});
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.PinInput = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _biometricPinService = require("../services/biometricPinService");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ const {
12
+ width
13
+ } = _reactNative.Dimensions.get('window');
14
+ const PinInput = ({
15
+ onSubmit,
16
+ minLength = 8,
17
+ requireSpecialChar = true,
18
+ requireNumber = true,
19
+ onBack,
20
+ enableBiometricStorage = true,
21
+ // ✅ NEW: Background training optimization props
22
+ onBackgroundTrainingStart,
23
+ showBackgroundProgress = false,
24
+ backgroundProgressText = "Training is starting in the background..."
25
+ }) => {
26
+ const [pin, setPin] = (0, _react.useState)('');
27
+ const [error, setError] = (0, _react.useState)(null);
28
+ const [showPin, setShowPin] = (0, _react.useState)(false);
29
+ const [isStoringPin, setIsStoringPin] = (0, _react.useState)(false);
30
+ const [infoStatus, setInfoStatus] = (0, _react.useState)('default');
31
+ // ✅ NEW: Background training state
32
+ const [isBackgroundTrainingStarted, setIsBackgroundTrainingStarted] = (0, _react.useState)(false);
33
+
34
+ // ✅ UPDATED: Make background training conditional, not automatic on mount
35
+ _react.default.useEffect(() => {
36
+ // Only start background training if explicitly requested and not already started
37
+ // This prevents automatic training on component mount
38
+ if (onBackgroundTrainingStart && !isBackgroundTrainingStarted && showBackgroundProgress) {
39
+ console.log('🚀 [PIN INPUT] Background training explicitly requested...');
40
+ setIsBackgroundTrainingStarted(true);
41
+ onBackgroundTrainingStart().catch(error => {
42
+ console.error('❌ [PIN INPUT] Background training failed:', error);
43
+ setIsBackgroundTrainingStarted(false);
44
+ });
45
+ }
46
+ }, [onBackgroundTrainingStart, isBackgroundTrainingStarted, showBackgroundProgress]);
47
+ const validatePin = (0, _react.useCallback)(value => {
48
+ if (value.length < minLength) {
49
+ return `PIN must be at least ${minLength} characters`;
50
+ }
51
+ if (requireSpecialChar && !/[!@#$%^&*(),.?":{}|<>]/.test(value)) {
52
+ return 'PIN must include a special character';
53
+ }
54
+ if (requireNumber && !/\d/.test(value)) {
55
+ return 'PIN must include a number';
56
+ }
57
+ return null;
58
+ }, [minLength, requireSpecialChar, requireNumber]);
59
+ const handleSubmit = (0, _react.useCallback)(async () => {
60
+ console.log('🔍 [PIN INPUT] handleSubmit called with PIN length:', pin.length);
61
+ const validationError = validatePin(pin);
62
+ if (validationError) {
63
+ console.log('❌ [PIN INPUT] Validation failed:', validationError);
64
+ setError(validationError);
65
+ return;
66
+ }
67
+ console.log('✅ [PIN INPUT] PIN validation passed');
68
+
69
+ // If biometric storage is enabled, store PIN securely
70
+ if (enableBiometricStorage) {
71
+ console.log('🔐 [PIN INPUT] Biometric storage enabled, starting biometric flow...');
72
+ setIsStoringPin(true);
73
+ setInfoStatus('authenticating');
74
+ try {
75
+ // Check if biometric is available
76
+ const biometricAvailable = await _biometricPinService.biometricPinService.isBiometricAvailable();
77
+ console.log('📱 [PIN INPUT] Biometric available:', biometricAvailable);
78
+ if (!biometricAvailable) {
79
+ console.error('❌ [PIN INPUT] Face ID not available on this device');
80
+ setInfoStatus('biometric-unavailable');
81
+ setIsStoringPin(false);
82
+ return;
83
+ }
84
+
85
+ // Immediately attempt to store PIN with biometric authentication
86
+ console.log('🔐 [PIN INPUT] Triggering biometric authentication for PIN storage...');
87
+ const stored = await _biometricPinService.biometricPinService.storePinWithBiometric(pin);
88
+ if (stored) {
89
+ console.log('✅ [PIN INPUT] PIN stored successfully with biometric protection');
90
+
91
+ // Verify the PIN was actually stored by checking if it can be retrieved
92
+ const isStored = await _biometricPinService.biometricPinService.isPinStored();
93
+ if (isStored) {
94
+ console.log('✅ [PIN INPUT] PIN storage verified - proceeding with onboarding');
95
+ onSubmit(pin);
96
+ } else {
97
+ console.error('❌ [PIN INPUT] PIN storage verification failed');
98
+ setInfoStatus('storage-error');
99
+ setIsStoringPin(false);
100
+ }
101
+ } else {
102
+ // Biometric authentication was cancelled or failed
103
+ console.warn('⚠️ [PIN INPUT] Biometric authentication failed or was cancelled');
104
+ setInfoStatus('biometric-failed');
105
+ setIsStoringPin(false);
106
+ }
107
+ } catch (error) {
108
+ console.error('❌ [PIN INPUT] Error handling biometric PIN storage:', error);
109
+ setInfoStatus('storage-error');
110
+ setIsStoringPin(false);
111
+ }
112
+ } else {
113
+ // Biometric storage disabled, proceed normally
114
+ console.log('🔐 [PIN INPUT] Biometric storage disabled, proceeding normally');
115
+ onSubmit(pin);
116
+ }
117
+ }, [pin, validatePin, onSubmit, enableBiometricStorage]);
118
+ const handlePinChange = (0, _react.useCallback)(value => {
119
+ setPin(value);
120
+ setError(null);
121
+ setInfoStatus('default');
122
+
123
+ // Debug logging to help troubleshoot
124
+ console.log('🔍 [PIN INPUT] PIN changed:', {
125
+ length: value.length,
126
+ hasSpecialChar: /[!@#$%^&*(),.?":{}|<>]/.test(value),
127
+ hasNumber: /\d/.test(value),
128
+ isValid: !validatePin(value)
129
+ });
130
+ }, [validatePin]);
131
+ const handleContinueWithoutBiometric = (0, _react.useCallback)(() => {
132
+ console.warn('⚠️ [PIN INPUT] User chose to continue without biometric security');
133
+ onSubmit(pin);
134
+ }, [pin, onSubmit]);
135
+ const handleRetry = (0, _react.useCallback)(() => {
136
+ setInfoStatus('default');
137
+ handleSubmit();
138
+ }, [handleSubmit]);
139
+ const getInfoMessage = () => {
140
+ switch (infoStatus) {
141
+ case 'biometric-unavailable':
142
+ return {
143
+ title: 'Biometric Authentication Not Available',
144
+ message: 'This device does not support Face ID or Touch ID. Please enable biometric authentication in your device settings to secure your PIN.',
145
+ type: 'warning',
146
+ showActions: true
147
+ };
148
+ case 'biometric-failed':
149
+ return {
150
+ title: 'Biometric Authentication Failed',
151
+ message: 'Biometric authentication was cancelled or failed. Your PIN needs to be secured with biometric authentication to proceed.',
152
+ type: 'warning',
153
+ showActions: true
154
+ };
155
+ case 'storage-error':
156
+ return {
157
+ title: 'Storage Error',
158
+ message: 'An error occurred while securing your PIN. Would you like to try again?',
159
+ type: 'error',
160
+ showActions: true
161
+ };
162
+ case 'authenticating':
163
+ return {
164
+ title: 'Authenticating...',
165
+ message: 'Please complete biometric authentication to secure your PIN.',
166
+ type: 'info',
167
+ showActions: false
168
+ };
169
+ default:
170
+ return {
171
+ title: 'Secure PIN Storage',
172
+ message: 'Your PIN will be securely stored locally on your device using biometric authentication (Face ID or Touch ID) for enhanced security.',
173
+ type: 'info',
174
+ showActions: false
175
+ };
176
+ }
177
+ };
178
+ const infoMessage = getInfoMessage();
179
+ return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
180
+ style: styles.container
181
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
182
+ style: styles.inputSection
183
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
184
+ style: styles.header
185
+ }, onBack && /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
186
+ style: styles.backButton,
187
+ onPress: onBack
188
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
189
+ style: {
190
+ fontSize: 24
191
+ }
192
+ }, "\u2190")), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
193
+ style: styles.title
194
+ }, "Create a PIN")), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
195
+ style: styles.subtitle
196
+ }, "A PIN so only you have access to your data"), showBackgroundProgress && isBackgroundTrainingStarted && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
197
+ style: styles.backgroundProgressContainer
198
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
199
+ style: styles.backgroundProgressText
200
+ }, backgroundProgressText), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
201
+ style: styles.backgroundProgressIndicator
202
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.ActivityIndicator, {
203
+ size: "small",
204
+ color: "#007AFF"
205
+ }))), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
206
+ style: styles.inputContainer
207
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.TextInput, {
208
+ style: styles.input,
209
+ value: pin,
210
+ onChangeText: handlePinChange,
211
+ secureTextEntry: !showPin,
212
+ placeholder: "e.g. MyPin123!",
213
+ keyboardType: "default",
214
+ maxLength: 20,
215
+ autoCapitalize: "none",
216
+ autoCorrect: false,
217
+ returnKeyType: "done",
218
+ onSubmitEditing: () => _reactNative.Keyboard.dismiss()
219
+ }), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
220
+ style: styles.visibilityButton,
221
+ onPress: () => setShowPin(!showPin)
222
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, null, showPin ? '👁️' : '👁️‍🗨️')))), error && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
223
+ style: styles.error
224
+ }, error), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
225
+ style: styles.requirements
226
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
227
+ style: styles.requirementTitle
228
+ }, "PIN Requirements:"), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
229
+ style: [styles.requirement, pin.length >= minLength && styles.requirementMet]
230
+ }, "\u2022 At least ", minLength, " characters"), requireSpecialChar && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
231
+ style: [styles.requirement, /[!@#$%^&*(),.?":{}|<>]/.test(pin) && styles.requirementMet]
232
+ }, "\u2022 Include a special character"), requireNumber && /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
233
+ style: [styles.requirement, /\d/.test(pin) && styles.requirementMet]
234
+ }, "\u2022 Include a number")), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
235
+ style: [styles.infoContainer, infoMessage.type === 'info' && styles.infoContainerInfo, infoMessage.type === 'warning' && styles.infoContainerWarning, infoMessage.type === 'error' && styles.infoContainerError]
236
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
237
+ style: [styles.infoTitle, infoMessage.type === 'info' && styles.infoTitleInfo, infoMessage.type === 'warning' && styles.infoTitleWarning, infoMessage.type === 'error' && styles.infoTitleError]
238
+ }, infoMessage.title), /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
239
+ style: [styles.infoMessage, infoMessage.type === 'info' && styles.infoMessageInfo, infoMessage.type === 'warning' && styles.infoMessageWarning, infoMessage.type === 'error' && styles.infoMessageError]
240
+ }, infoMessage.message), infoMessage.showActions && /*#__PURE__*/_react.default.createElement(_reactNative.View, {
241
+ style: styles.infoActions
242
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
243
+ style: styles.infoActionButton,
244
+ onPress: handleRetry
245
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
246
+ style: styles.infoActionButtonText
247
+ }, "Try Again")), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
248
+ style: [styles.infoActionButton, styles.infoActionButtonSecondary],
249
+ onPress: handleContinueWithoutBiometric
250
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
251
+ style: [styles.infoActionButtonText, styles.infoActionButtonSecondaryText]
252
+ }, "Continue Without Biometric")))), /*#__PURE__*/_react.default.createElement(_reactNative.View, {
253
+ style: styles.footer
254
+ }, onBack && /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
255
+ style: styles.cancelButton,
256
+ onPress: onBack
257
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
258
+ style: styles.cancelButtonText
259
+ }, "Back")), /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
260
+ style: [styles.submitButton, (!pin || isStoringPin || validatePin(pin)) && styles.submitButtonDisabled],
261
+ onPress: handleSubmit,
262
+ disabled: !pin || isStoringPin || !!validatePin(pin)
263
+ }, /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
264
+ style: styles.submitButtonText
265
+ }, isStoringPin ? 'Authenticating...' : 'Continue'))));
266
+ };
267
+ exports.PinInput = PinInput;
268
+ const styles = _reactNative.StyleSheet.create({
269
+ container: {
270
+ flex: 1,
271
+ padding: 16,
272
+ width: width,
273
+ backgroundColor: '#fff',
274
+ justifyContent: 'flex-start'
275
+ },
276
+ inputSection: {
277
+ width: '100%',
278
+ marginTop: 0,
279
+ paddingTop: 0
280
+ },
281
+ header: {
282
+ flexDirection: 'row',
283
+ alignItems: 'center',
284
+ justifyContent: 'space-between',
285
+ marginBottom: 16,
286
+ paddingVertical: 8
287
+ },
288
+ backButton: {
289
+ padding: 8
290
+ },
291
+ title: {
292
+ fontSize: 20,
293
+ fontWeight: '600',
294
+ color: '#333',
295
+ textAlign: 'center',
296
+ flex: 1,
297
+ marginBottom: 8
298
+ },
299
+ subtitle: {
300
+ fontSize: 14,
301
+ color: '#666',
302
+ marginBottom: 24,
303
+ textAlign: 'center'
304
+ },
305
+ inputContainer: {
306
+ flexDirection: 'row',
307
+ alignItems: 'center',
308
+ borderWidth: 1,
309
+ borderColor: '#CCCCCC',
310
+ borderRadius: 8,
311
+ marginBottom: 16
312
+ },
313
+ input: {
314
+ flex: 1,
315
+ padding: 12,
316
+ fontSize: 16
317
+ },
318
+ visibilityButton: {
319
+ padding: 12
320
+ },
321
+ // Info Container Styles
322
+ infoContainer: {
323
+ padding: 16,
324
+ borderRadius: 12,
325
+ marginBottom: 16,
326
+ borderWidth: 1
327
+ },
328
+ infoContainerInfo: {
329
+ backgroundColor: '#E3F2FD',
330
+ borderColor: '#2196F3'
331
+ },
332
+ infoContainerWarning: {
333
+ backgroundColor: '#FFF3E0',
334
+ borderColor: '#FF9800'
335
+ },
336
+ infoContainerError: {
337
+ backgroundColor: '#FFEBEE',
338
+ borderColor: '#F44336'
339
+ },
340
+ infoTitle: {
341
+ fontSize: 16,
342
+ fontWeight: '600',
343
+ marginBottom: 8
344
+ },
345
+ infoTitleInfo: {
346
+ color: '#1976D2'
347
+ },
348
+ infoTitleWarning: {
349
+ color: '#F57C00'
350
+ },
351
+ infoTitleError: {
352
+ color: '#D32F2F'
353
+ },
354
+ infoMessage: {
355
+ fontSize: 14,
356
+ lineHeight: 20,
357
+ marginBottom: 12
358
+ },
359
+ infoMessageInfo: {
360
+ color: '#1565C0'
361
+ },
362
+ infoMessageWarning: {
363
+ color: '#E65100'
364
+ },
365
+ infoMessageError: {
366
+ color: '#C62828'
367
+ },
368
+ infoActions: {
369
+ flexDirection: 'row',
370
+ justifyContent: 'space-between',
371
+ marginTop: 8
372
+ },
373
+ infoActionButton: {
374
+ flex: 1,
375
+ paddingVertical: 10,
376
+ paddingHorizontal: 16,
377
+ borderRadius: 8,
378
+ backgroundColor: '#007AFF',
379
+ marginHorizontal: 4,
380
+ alignItems: 'center'
381
+ },
382
+ infoActionButtonSecondary: {
383
+ backgroundColor: 'transparent',
384
+ borderWidth: 1,
385
+ borderColor: '#007AFF'
386
+ },
387
+ infoActionButtonText: {
388
+ color: '#fff',
389
+ fontSize: 14,
390
+ fontWeight: '600'
391
+ },
392
+ infoActionButtonSecondaryText: {
393
+ color: '#007AFF'
394
+ },
395
+ error: {
396
+ color: '#FF3B30',
397
+ marginBottom: 16
398
+ },
399
+ requirements: {
400
+ marginBottom: 24
401
+ },
402
+ requirementTitle: {
403
+ fontSize: 14,
404
+ fontWeight: '600',
405
+ marginBottom: 8,
406
+ color: '#333'
407
+ },
408
+ requirement: {
409
+ fontSize: 14,
410
+ color: '#666',
411
+ marginBottom: 4
412
+ },
413
+ requirementMet: {
414
+ color: '#34C759'
415
+ },
416
+ footer: {
417
+ flexDirection: 'row',
418
+ alignItems: 'center',
419
+ justifyContent: 'space-between',
420
+ marginTop: 24,
421
+ borderTopWidth: 1,
422
+ borderTopColor: '#eee',
423
+ paddingTop: 16
424
+ },
425
+ cancelButton: {
426
+ paddingVertical: 8,
427
+ paddingHorizontal: 16
428
+ },
429
+ cancelButtonText: {
430
+ color: '#666',
431
+ fontSize: 16
432
+ },
433
+ submitButton: {
434
+ paddingVertical: 16,
435
+ paddingHorizontal: 32,
436
+ borderRadius: 16,
437
+ backgroundColor: '#000000',
438
+ alignItems: 'center'
439
+ },
440
+ submitButtonDisabled: {
441
+ opacity: 0.5
442
+ },
443
+ submitButtonText: {
444
+ color: '#fff',
445
+ fontSize: 16,
446
+ fontWeight: '600'
447
+ },
448
+ // ✅ NEW: Background training progress styles
449
+ backgroundProgressContainer: {
450
+ flexDirection: 'row',
451
+ alignItems: 'center',
452
+ justifyContent: 'center',
453
+ marginBottom: 16
454
+ },
455
+ backgroundProgressText: {
456
+ fontSize: 14,
457
+ color: '#666',
458
+ marginRight: 10
459
+ },
460
+ backgroundProgressIndicator: {
461
+ padding: 5
462
+ }
463
+ });
464
+ //# sourceMappingURL=PinInput.js.map