@onairos/react-native 3.7.2 → 3.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/api/index.js +219 -9
- package/lib/commonjs/components/BodyText.js +27 -9
- package/lib/commonjs/components/BrandMark.js +111 -10
- package/lib/commonjs/components/CodeInput.js +120 -9
- package/lib/commonjs/components/EmailInput.js +30 -8
- package/lib/commonjs/components/GoogleButton.js +56 -9
- package/lib/commonjs/components/HeadingGroup.js +43 -9
- package/lib/commonjs/components/LLMDataInputModal.js +664 -14
- package/lib/commonjs/components/ModalHeader.js +99 -9
- package/lib/commonjs/components/ModalSheet.js +47 -9
- package/lib/commonjs/components/Onairos.js +380 -14
- package/lib/commonjs/components/OnairosButton.js +313 -13
- package/lib/commonjs/components/OnairosSignInButton.js +130 -12
- package/lib/commonjs/components/Overlay.js +465 -13
- package/lib/commonjs/components/PersonaImage.js +137 -10
- package/lib/commonjs/components/PersonaLoadingScreen.js +318 -12
- package/lib/commonjs/components/PersonalizationConsentScreen.js +467 -13
- package/lib/commonjs/components/PinCreationScreen.js +403 -12
- package/lib/commonjs/components/PinInput.js +464 -9
- package/lib/commonjs/components/PlatformConnectorsStep.js +1311 -23
- package/lib/commonjs/components/PlatformList.js +137 -10
- package/lib/commonjs/components/PlatformToggle.js +180 -9
- package/lib/commonjs/components/PrimaryButton.js +180 -10
- package/lib/commonjs/components/SignInMatchAnimation.js +197 -9
- package/lib/commonjs/components/SignInStep.js +345 -12
- package/lib/commonjs/components/UniversalOnboarding.js +2780 -30
- package/lib/commonjs/components/VerificationStep.js +176 -11
- package/lib/commonjs/components/WelcomeScreen.js +461 -22
- package/lib/commonjs/components/icons/Basicproficon.js +37 -8
- package/lib/commonjs/components/icons/Basicprofile.js +21 -8
- package/lib/commonjs/components/icons/Checkbox.js +21 -8
- package/lib/commonjs/components/icons/Checkmark.js +27 -8
- package/lib/commonjs/components/icons/Contentanalysis.js +21 -8
- package/lib/commonjs/components/icons/Contenticon.js +39 -8
- package/lib/commonjs/components/icons/EnochE.js +41 -8
- package/lib/commonjs/components/icons/Personalityicon.js +30 -8
- package/lib/commonjs/components/icons/Personalityprofile.js +21 -8
- package/lib/commonjs/components/icons/Personalitytraits.js +21 -8
- package/lib/commonjs/components/icons/Userpreferences.js +21 -8
- package/lib/commonjs/components/icons/index.js +84 -17
- package/lib/commonjs/components/onboarding/OAuthWebView.js +1754 -18
- package/lib/commonjs/components/onboarding/OnboardingHeader.js +74 -10
- package/lib/commonjs/components/onboarding/PinInput.js +283 -10
- package/lib/commonjs/components/onboarding/PlatformConnector.js +249 -11
- package/lib/commonjs/config/PLATFORM_APIS.md +849 -0
- package/lib/commonjs/config/api.js +56 -7
- package/lib/commonjs/constants/index.js +120 -7
- package/lib/commonjs/context/AuthContext.js +345 -10
- package/lib/commonjs/hooks/useConnectedAccounts.js +111 -9
- package/lib/commonjs/hooks/useConnections.js +102 -8
- package/lib/commonjs/hooks/useCredentials.js +178 -10
- package/lib/commonjs/hooks/useUserConnections.js +148 -10
- package/lib/commonjs/index.js +439 -34
- package/lib/commonjs/services/apiClient.js +298 -8
- package/lib/commonjs/services/biometricPinService.js +180 -8
- package/lib/commonjs/services/chatGPTConversationExtractor.js +155 -8
- package/lib/commonjs/services/chatGPTConversationService.js +275 -9
- package/lib/commonjs/services/claudeConversationExtractor.js +103 -8
- package/lib/commonjs/services/claudeConversationService.js +158 -9
- package/lib/commonjs/services/connectedAccountsService.js +310 -10
- package/lib/commonjs/services/googleAuthService.js +252 -11
- package/lib/commonjs/services/hingeDataExtractor.js +105 -8
- package/lib/commonjs/services/hingeDataService.js +150 -9
- package/lib/commonjs/services/imageCompressionService.js +260 -7
- package/lib/commonjs/services/instagramDataExtractor.js +126 -8
- package/lib/commonjs/services/instagramDataService.js +163 -9
- package/lib/commonjs/services/jwtStorageService.js +276 -7
- package/lib/commonjs/services/linkedinDOMExtractor.js +245 -7
- package/lib/commonjs/services/linkedinProfileService.js +222 -9
- package/lib/commonjs/services/linkedinScrapingService.js +230 -8
- package/lib/commonjs/services/llmDataStorage.js +294 -8
- package/lib/commonjs/services/mobileTrainingService.js +186 -8
- package/lib/commonjs/services/netflixDataExtractor.js +120 -8
- package/lib/commonjs/services/netflixDataService.js +198 -9
- package/lib/commonjs/services/pinEncryptionService.js +84 -8
- package/lib/commonjs/services/pinStorageUtils.js +105 -7
- package/lib/commonjs/services/platformAuthService.js +1484 -12
- package/lib/commonjs/services/sephoraDataExtractor.js +140 -8
- package/lib/commonjs/services/sephoraDataService.js +200 -9
- package/lib/commonjs/services/spotifyDataExtractor.js +148 -8
- package/lib/commonjs/services/spotifyDataService.js +241 -9
- package/lib/commonjs/services/storageService.js +404 -8
- package/lib/commonjs/services/telegramDataExtractor.js +115 -8
- package/lib/commonjs/services/telegramDataService.js +499 -9
- package/lib/commonjs/services/trainingApiHelpers.js +73 -7
- package/lib/commonjs/services/userConnectionsService.js +340 -10
- package/lib/commonjs/services/youtubeMigrationService.js +416 -10
- package/lib/commonjs/theme/index.js +250 -7
- package/lib/commonjs/types/ambient.d.js +2 -1
- package/lib/commonjs/types/declarations.d.js +2 -1
- package/lib/commonjs/types/index.js +6 -1
- package/lib/commonjs/types/node-fix.d.js +2 -1
- package/lib/commonjs/types/node-override.d.js +2 -1
- package/lib/commonjs/types/opacity.d.js +2 -1
- package/lib/commonjs/types.js +14 -1
- package/lib/commonjs/utils/Portal.js +98 -8
- package/lib/commonjs/utils/api.js +130 -9
- package/lib/commonjs/utils/assetRegistry.js +210 -35
- package/lib/commonjs/utils/auth.js +112 -9
- package/lib/commonjs/utils/connectorTests.js +613 -29
- package/lib/commonjs/utils/crypto.js +62 -8
- package/lib/commonjs/utils/debugHelper.js +64 -1
- package/lib/commonjs/utils/encryption.js +76 -7
- package/lib/commonjs/utils/eventUtils.js +288 -1
- package/lib/commonjs/utils/haptics.js +66 -9
- package/lib/commonjs/utils/imagePreloader.js +6 -1
- package/lib/commonjs/utils/networkDiagnostics.js +226 -8
- package/lib/commonjs/utils/onairosApi.js +350 -9
- package/lib/commonjs/utils/programmaticFlow.js +117 -9
- package/lib/commonjs/utils/retryHelper.js +220 -1
- package/lib/commonjs/utils/secureStorage.js +349 -10
- package/lib/commonjs/utils/webviewScripts/chatgpt.js +551 -1
- package/lib/commonjs/utils/webviewScripts/claude.js +376 -1
- package/lib/commonjs/utils/webviewScripts/hinge.js +411 -1
- package/lib/commonjs/utils/webviewScripts/index.js +698 -15
- package/lib/commonjs/utils/webviewScripts/instagram.js +454 -1
- package/lib/commonjs/utils/webviewScripts/linkedin.js +880 -1
- package/lib/commonjs/utils/webviewScripts/netflix.js +382 -1
- package/lib/commonjs/utils/webviewScripts/sephora.js +516 -1
- package/lib/commonjs/utils/webviewScripts/spotify.js +419 -1
- package/lib/commonjs/utils/webviewScripts/telegram.js +678 -1
- package/lib/module/api/index.js +211 -1
- package/lib/module/components/BodyText.js +20 -1
- package/lib/module/components/BrandMark.js +104 -1
- package/lib/module/components/CodeInput.js +113 -1
- package/lib/module/components/EmailInput.js +23 -1
- package/lib/module/components/GoogleButton.js +49 -1
- package/lib/module/components/HeadingGroup.js +36 -1
- package/lib/module/components/LLMDataInputModal.js +656 -7
- package/lib/module/components/ModalHeader.js +92 -1
- package/lib/module/components/ModalSheet.js +39 -1
- package/lib/module/components/Onairos.js +373 -1
- package/lib/module/components/OnairosButton.js +305 -1
- package/lib/module/components/OnairosSignInButton.js +121 -1
- package/lib/module/components/Overlay.js +456 -1
- package/lib/module/components/PersonaImage.js +129 -1
- package/lib/module/components/PersonaLoadingScreen.js +310 -1
- package/lib/module/components/PersonalizationConsentScreen.js +460 -1
- package/lib/module/components/PinCreationScreen.js +396 -1
- package/lib/module/components/PinInput.js +456 -1
- package/lib/module/components/PlatformConnectorsStep.js +1302 -6
- package/lib/module/components/PlatformList.js +129 -1
- package/lib/module/components/PlatformToggle.js +173 -1
- package/lib/module/components/PrimaryButton.js +172 -1
- package/lib/module/components/SignInMatchAnimation.js +189 -1
- package/lib/module/components/SignInStep.js +338 -1
- package/lib/module/components/UniversalOnboarding.js +2770 -1
- package/lib/module/components/VerificationStep.js +168 -1
- package/lib/module/components/WelcomeScreen.js +453 -1
- package/lib/module/components/icons/Basicproficon.js +30 -1
- package/lib/module/components/icons/Basicprofile.js +14 -1
- package/lib/module/components/icons/Checkbox.js +14 -1
- package/lib/module/components/icons/Checkmark.js +20 -1
- package/lib/module/components/icons/Contentanalysis.js +14 -1
- package/lib/module/components/icons/Contenticon.js +32 -1
- package/lib/module/components/icons/EnochE.js +34 -1
- package/lib/module/components/icons/Personalityicon.js +23 -1
- package/lib/module/components/icons/Personalityprofile.js +14 -1
- package/lib/module/components/icons/Personalitytraits.js +14 -1
- package/lib/module/components/icons/Userpreferences.js +14 -1
- package/lib/module/components/icons/index.js +13 -1
- package/lib/module/components/onboarding/OAuthWebView.js +1746 -1
- package/lib/module/components/onboarding/OnboardingHeader.js +66 -1
- package/lib/module/components/onboarding/PinInput.js +274 -1
- package/lib/module/components/onboarding/PlatformConnector.js +240 -1
- package/lib/module/config/PLATFORM_APIS.md +849 -0
- package/lib/module/config/api.js +47 -1
- package/lib/module/constants/index.js +114 -1
- package/lib/module/context/AuthContext.js +335 -1
- package/lib/module/hooks/useConnectedAccounts.js +106 -1
- package/lib/module/hooks/useConnections.js +95 -1
- package/lib/module/hooks/useCredentials.js +171 -6
- package/lib/module/hooks/useUserConnections.js +140 -1
- package/lib/module/index.js +172 -1
- package/lib/module/services/apiClient.js +295 -1
- package/lib/module/services/biometricPinService.js +169 -1
- package/lib/module/services/chatGPTConversationExtractor.js +149 -1
- package/lib/module/services/chatGPTConversationService.js +268 -1
- package/lib/module/services/claudeConversationExtractor.js +97 -1
- package/lib/module/services/claudeConversationService.js +151 -1
- package/lib/module/services/connectedAccountsService.js +293 -1
- package/lib/module/services/googleAuthService.js +241 -1
- package/lib/module/services/hingeDataExtractor.js +99 -1
- package/lib/module/services/hingeDataService.js +143 -1
- package/lib/module/services/imageCompressionService.js +250 -1
- package/lib/module/services/instagramDataExtractor.js +120 -1
- package/lib/module/services/instagramDataService.js +156 -1
- package/lib/module/services/jwtStorageService.js +257 -1
- package/lib/module/services/linkedinDOMExtractor.js +234 -1
- package/lib/module/services/linkedinProfileService.js +210 -1
- package/lib/module/services/linkedinScrapingService.js +219 -1
- package/lib/module/services/llmDataStorage.js +277 -1
- package/lib/module/services/mobileTrainingService.js +173 -1
- package/lib/module/services/netflixDataExtractor.js +114 -1
- package/lib/module/services/netflixDataService.js +191 -1
- package/lib/module/services/pinEncryptionService.js +74 -6
- package/lib/module/services/pinStorageUtils.js +93 -1
- package/lib/module/services/platformAuthService.js +1461 -1
- package/lib/module/services/sephoraDataExtractor.js +134 -1
- package/lib/module/services/sephoraDataService.js +193 -1
- package/lib/module/services/spotifyDataExtractor.js +142 -1
- package/lib/module/services/spotifyDataService.js +234 -1
- package/lib/module/services/storageService.js +383 -1
- package/lib/module/services/telegramDataExtractor.js +109 -1
- package/lib/module/services/telegramDataService.js +493 -1
- package/lib/module/services/trainingApiHelpers.js +67 -1
- package/lib/module/services/userConnectionsService.js +329 -1
- package/lib/module/services/youtubeMigrationService.js +405 -1
- package/lib/module/theme/index.js +245 -1
- package/lib/module/types.js +10 -1
- package/lib/module/utils/Portal.js +90 -1
- package/lib/module/utils/api.js +118 -1
- package/lib/module/utils/assetRegistry.js +200 -34
- package/lib/module/utils/auth.js +100 -1
- package/lib/module/utils/connectorTests.js +600 -27
- package/lib/module/utils/crypto.js +54 -1
- package/lib/module/utils/debugHelper.js +54 -1
- package/lib/module/utils/encryption.js +67 -1
- package/lib/module/utils/eventUtils.js +270 -1
- package/lib/module/utils/haptics.js +59 -8
- package/lib/module/utils/imagePreloader.js +3 -1
- package/lib/module/utils/networkDiagnostics.js +217 -1
- package/lib/module/utils/onairosApi.js +333 -1
- package/lib/module/utils/programmaticFlow.js +111 -1
- package/lib/module/utils/retryHelper.js +211 -1
- package/lib/module/utils/secureStorage.js +330 -6
- package/lib/module/utils/webviewScripts/chatgpt.js +545 -1
- package/lib/module/utils/webviewScripts/claude.js +370 -1
- package/lib/module/utils/webviewScripts/hinge.js +405 -1
- package/lib/module/utils/webviewScripts/index.js +434 -1
- package/lib/module/utils/webviewScripts/instagram.js +448 -1
- package/lib/module/utils/webviewScripts/linkedin.js +874 -1
- package/lib/module/utils/webviewScripts/netflix.js +376 -1
- package/lib/module/utils/webviewScripts/sephora.js +510 -1
- package/lib/module/utils/webviewScripts/spotify.js +413 -1
- package/lib/module/utils/webviewScripts/telegram.js +672 -1
- package/package.json +2 -2
|
@@ -1,8 +1,657 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLMDataInputModal.tsx
|
|
3
|
+
*
|
|
4
|
+
* Modal for inputting LLM conversation data via file upload or paste.
|
|
5
|
+
* Supports ChatGPT, Claude, Gemini, and Grok data formats.
|
|
6
|
+
*/
|
|
1
7
|
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import React,{useState}from'react';import{View,Text,StyleSheet,Modal,TouchableOpacity,TextInput,ScrollView,ActivityIndicator,Alert,Platform,KeyboardAvoidingView}from'react-native';function _0x53ae(){const _0x38fb82=['log','unknown','CngnP','Connect\x20ChatGPT','Paste\x20your\x20ChatGPT\x20conversation\x20JSON\x20here...','claude','Connect\x20Claude','Connect\x20Gemini','Paste\x20your\x20Gemini\x20conversation\x20JSON\x20here...','grok','Export\x20your\x20Grok\x20conversations\x20from\x20X/Twitter\x20and\x20paste\x20the\x20data\x20below.','Paste\x20your\x20Grok\x20conversation\x20JSON\x20here...','Paste\x20your\x20conversation\x20JSON\x20here...','Authentication\x20required.\x20Please\x20sign\x20in\x20first.','KmPjG','BXQAt','Failed\x20to\x20read\x20file.\x20Please\x20try\x20again\x20or\x20paste\x20data\x20manually.','FaIaR','zMKyk','HOxVG','bbIdg','qBrkf','ydMPp','WQMIK','Imported\x20Conversation','dcsjw','No\x20valid\x20conversations\x20found\x20in\x20the\x20data.\x20Please\x20check\x20the\x20format.','SjjgU','wMcGb','File\x20pick\x20error:','assistant','qBgIN','JVSoV','paste','GXdnZ','human','1|3|4|2|5|0','kcYhg','xMKXl','eowlN','LCmtM','DOCUMENT_PICKER_CANCELED','Please\x20paste\x20or\x20upload\x20conversation\x20data\x20first.','QUiIf','onairos_jwt_token','auth_token','conversation','mobile_app_import','QyVOQ','VQMia','Failed\x20to\x20import\x20data.\x20Please\x20try\x20again.','2|5|4|0|3|1','UxujP','GbYeX','File\x20upload\x20requires\x20additional\x20dependencies.\x20Please\x20paste\x20data\x20instead.','height','handled','Paste\x20Data','Upload\x20File\x20','(N/A)','top','none','...','Import\x20Conversations','nsnbF','hmsxg','xKVsK','aJgek','flwho','MmyOJ','oGqKQ','IEHAF','JznTp','Export\x20your\x20ChatGPT\x20conversations\x20from\x20Settings\x20→\x20Data\x20Controls\x20→\x20Export\x20data.\x20Then\x20upload\x20the\x20JSON\x20file\x20or\x20paste\x20your\x20conversation\x20data.','agajU','mBhwP','DvOay','GoIGU','cIPyD','ytRnr','EssCj','Connect\x20Grok','hPKIi','Connect\x20','push','message','wmTli','author','role','RQoWg','create_time','XNpba','BzxbL','sNgNX','eLfUf','iORfx','IdZmH','lWlNa','gxvqU','parse','isArray','uTbdc','ZDKer','oxrva','forEach','length','KhUYb','conversation_id','conv_','now','title','name','Conversation\x20','ULtny','created_at','update_time','updated_at','conversations','omIzT','MLPNz','FKKcu','USlyi','oPlia','error','ReyvK','jMRYg','wobNl','mapping','messages','mqpvR','msg_','QbbKg','jtJlo','bQLLr','Wphto','iNkfE','KvlaR','lBliX','content','parts','join','trim','zVGEK','NvRaS','toISOString','dImDL','xxXYn','Mhjjj','ORMOR','WPlXT','aTrtI','ZKxHj','tAnny','VVVBa','GjwXd','yjVzY','PzchF','sAjiX','fZBOm','values','yUdUM','kojHi','ZJkSh','QBWKh','Vuima','fvsDK','REkLF','UEwvw','RpQWl','bFvBO','hqPuC','eaMUa','kyKcs','QwwaS','pbCZO','aSmJC','code','YHpjq','YqfEO','UZrgY','znoQt','ERROR','fOyjf','NhfjI','text','sender','hdWvg','JLLrP','user','timestamp','hLreO','BUTTON_PRESS','chat_messages','mpcYw','uuid','mwWzM','vWyib','yjxSV','HyxEd','UEoOM','OHWMV','ghcis','sYtKL','allFiles','Selected\x20file','uri','paWpM','adpRJ','dRHII','UlIwK','split','UEHyy','readFile','utf8','Gjnpm','IgfcF','QzsiU','pEfgN','Error\x20storing\x20conversation:','mrlkQ','fAHKI','YncWF','PmHue','DTTkp','kOTnl','tdXvk','getItem','mobile-','BASE_URL','/llm-data/store','Bearer\x20','stringify','conversationId','context','ihmwF','Version','jAfqd','FaZlK','Failed\x20to\x20store\x20conversation\x20','setItem','@onairos:llm_connected:','SUCCESS','alert','lCFAa','Successfully\x20imported\x20','\x20from\x20','ydEra','aNNzN','hJPCA','eulPp','hcVZg','rvbnM','vyBrM','gFzvH','createElement','slide','container','Nzifb','ios','CaYup','PgWTH','header','closeButton','Cancel','contentContainer','ljZix','instructionsContainer','instructionsText','tabContainer','tab','UAPpN','kcyZm','tQDdc','iMHgt','WsRlI','LlXQV','tabText','KcBTk','file','tabDisabled','vLZZN','FxaIt','rrnDP','RGIJk','SZyWB','lxLMh','tabTextActive','tabTextDisabled','kmXuS','textInput','filePickButton','filePickIcon','Tap\x20to\x20select\x20a\x20file','fileSelectedContainer','errorText','XoZAF','previewContainer','previewTitle','previewText','substring','previewInfo','footer','submitButton','submitButtonDisabled','IeuHG','submitButtonText','YyjAz','create','surface','center','space-between','#E5E7EB','grey800','IBM\x20Plex\x20Sans','Inter','#0369A1','#F3F4F6','#FFFFFF','#000','500','grey500','grey400','grey300','monospace','dashed','grey600','#F0FDF4','#166534','#FEF2F2','#DC2626','600','Menlo'];_0x53ae=function(){return _0x38fb82;};return _0x53ae();}import{COLORS}from'../theme';import{triggerHaptic,HapticType}from'../utils/haptics';import AsyncStorage from'@react-native-async-storage/async-storage';import{API_CONFIG}from'../config/api';function _0x13b8(_0x53ae46,_0x13b888){_0x53ae46=_0x53ae46-0x0;const _0x48bf4=_0x53ae();let _0x28e89b=_0x48bf4[_0x53ae46];return _0x28e89b;}let DocumentPicker=null,RNFS=null;try{DocumentPicker=__ONAIROS_REQ_FUNC__(0x0);}catch(_0xc5a547){console[_0x13b8(0x0)]('react-native-document-picker not available - file upload disabled');}try{RNFS=__ONAIROS_REQ_FUNC__(0x1);}catch(_0x307ed8){console['log']('react-native-fs not available - file upload disabled');}const FILE_UPLOAD_AVAILABLE=DocumentPicker!==null&&RNFS!==null,LLMDataInputModal=({visible:_0x153b08,platform:_0x333df7,platformName:_0x331c89,onClose:_0x4c7ac2,onSuccess:_0x27608a})=>{const _0x3781ac={'wmTli':function(_0x200a5d,_0x590913){return _0x200a5d===_0x590913;},'RQoWg':_0x13b8(0x1),'XNpba':function(_0x526c7c,_0x49d7cd){return _0x526c7c*_0x49d7cd;},'oGqKQ':_0x13b8(0x2),'IEHAF':'chatgpt','JznTp':_0x13b8(0x3),'agajU':_0x13b8(0x4),'mBhwP':_0x13b8(0x5),'DvOay':_0x13b8(0x6),'kpNVs':'Export\x20your\x20Claude\x20conversations\x20and\x20paste\x20the\x20JSON\x20data\x20below,\x20or\x20upload\x20your\x20exported\x20file.','GoIGU':'Paste\x20your\x20Claude\x20conversation\x20JSON\x20here...','cIPyD':_0x13b8(0x7),'huFQc':'Export\x20your\x20Gemini\x20(Google\x20AI)\x20conversations\x20and\x20paste\x20the\x20data\x20below.','ytRnr':_0x13b8(0x8),'EssCj':_0x13b8(0x9),'nxuAb':_0x13b8(0xa),'hPKIi':_0x13b8(0xb),'aknNb':'Paste\x20your\x20conversation\x20data\x20below\x20or\x20upload\x20a\x20JSON\x20file.','UZABq':_0x13b8(0xc),'oxrva':_0x13b8(0xd),'KhUYb':_0x13b8(0xe),'ULtny':function(_0xc8e4b5,_0x30dcc2){return _0xc8e4b5+_0x30dcc2;},'FKKcu':function(_0x1af97f,_0x523675){return _0x1af97f===_0x523675;},'USlyi':_0x13b8(0xf),'oPlia':function(_0x372d54,_0x48448f){return _0x372d54+_0x48448f;},'bQLLr':function(_0xd5a4b8,_0x5123d4){return _0xd5a4b8(_0x5123d4);},'jtJlo':function(_0x26430,_0x1352c2){return _0x26430>_0x1352c2;},'iNkfE':function(_0x4f974d,_0x201119){return _0x4f974d!==_0x201119;},'uTbdc':function(_0x15d4e1,_0x1ca8fb){return _0x15d4e1!==_0x1ca8fb;},'zVGEK':function(_0x21d109,_0x593188){return _0x21d109===_0x593188;},'NvRaS':function(_0x4563ca,_0x3fe194){return _0x4563ca===_0x3fe194;},'sNgNX':function(_0x224051,_0x48bc44){return _0x224051(_0x48bc44);},'eLfUf':_0x13b8(0x10),'iORfx':'user','IdZmH':'Error\x20parsing\x20conversation\x20data:','UedUu':'Invalid\x20JSON\x20format.\x20Please\x20check\x20your\x20data\x20and\x20try\x20again.','lWlNa':_0x13b8(0x11),'gxvqU':'yQIAv','ZDKer':_0x13b8(0x12),'omIzT':_0x13b8(0x13),'MLPNz':'AsgZY','mqpvR':_0x13b8(0x14),'pUACf':_0x13b8(0x15),'RNMvg':_0x13b8(0x16),'KKdeK':_0x13b8(0x17),'Wphto':_0x13b8(0x18),'KvlaR':_0x13b8(0x19),'lBliX':'WpLhw','fZBOm':_0x13b8(0x1a),'hLreO':'file','UEoOM':function(_0x510f60,_0x144937){return _0x510f60(_0x144937);},'hJPCA':'Failed\x20to\x20import\x20any\x20conversations.\x20Please\x20check\x20your\x20data\x20format.','ahWfE':'nKAcY','Mhjjj':_0x13b8(0x1b),'ORMOR':_0x13b8(0x1c),'QBjtB':function(_0x376d69,_0x30f78e){return _0x376d69===_0x30f78e;},'WPlXT':_0x13b8(0x1d),'aTrtI':_0x13b8(0x1e),'UdJEo':_0x13b8(0x1f),'GqqiZ':_0x13b8(0x20),'ZKxHj':'string','nsnbF':_0x13b8(0x21),'VVVBa':_0x13b8(0x22),'GjwXd':_0x13b8(0x23),'yjVzY':function(_0x4f4d2c,_0x511613){return _0x4f4d2c!==_0x511613;},'PzchF':'sAjiX','RpQWl':'YrpEo','yjxSV':_0x13b8(0x24),'BzxbL':function(_0xa948c5){return _0xa948c5();},'HyxEd':_0x13b8(0x25),'OHWMV':function(_0x64f1fb,_0x18b52f){return _0x64f1fb!==_0x18b52f;},'ghcis':'zRkpW','sYtKL':_0x13b8(0x26),'paWpM':'content://','adpRJ':_0x13b8(0x27),'Olwbg':'NfyZI','Gjnpm':_0x13b8(0x28),'QzsiU':'utf8','aJgek':function(_0x876654,_0xf44293){return _0x876654(_0xf44293);},'pEfgN':function(_0x1861da,_0xf775db){return _0x1861da(_0xf775db);},'dYTOQ':function(_0x1475ed,_0x3d3643){return _0x1475ed!==_0x3d3643;},'mrlkQ':_0x13b8(0x29),'aNNzN':function(_0x3f4494,_0x33b6f3){return _0x3f4494!==_0x33b6f3;},'fAHKI':_0x13b8(0x2a),'hmsxg':function(_0x477005,_0x3057ef){return _0x477005(_0x3057ef);},'xKVsK':function(_0xb90fee,_0x28a945){return _0xb90fee(_0x28a945);},'YncWF':function(_0x2d4002,_0x309839){return _0x2d4002===_0x309839;},'PmHue':function(_0x199684,_0x4c2d1f){return _0x199684!==_0x4c2d1f;},'DTTkp':_0x13b8(0x2b),'tdXvk':_0x13b8(0x2c),'iFFfv':_0x13b8(0x2d),'ihmwF':'1.0.0','jAfqd':_0x13b8(0x2e),'FaZlK':_0x13b8(0x2f),'lCFAa':'Success!\x20🎉','JpWdf':function(_0x2c613c,_0x5b143b){return _0x2c613c>_0x5b143b;},'cAEAv':_0x13b8(0x30),'ydEra':_0x13b8(0x31),'eulPp':'Submit\x20error:','hcVZg':function(_0x311659,_0x333dcd){return _0x311659(_0x333dcd);},'rvbnM':_0x13b8(0x32),'vyBrM':function(_0x134029,_0x4e1af8){return _0x134029(_0x4e1af8);},'gFzvH':_0x13b8(0x33),'kcyZm':function(_0x17ab04,_0x217313){return _0x17ab04!==_0x217313;},'iMHgt':_0x13b8(0x34),'WsRlI':function(_0x330b0d,_0xea512){return _0x330b0d(_0xea512);},'LlXQV':function(_0x2baa96,_0x43c274){return _0x2baa96(_0x43c274);},'vLZZN':function(_0x727cb1,_0x24fafe){return _0x727cb1(_0x24fafe);},'FxaIt':function(_0x4d9ef0,_0x309f70){return _0x4d9ef0(_0x309f70);},'rrnDP':function(_0x1af35b,_0x10ad31){return _0x1af35b!==_0x10ad31;},'RGIJk':_0x13b8(0x35),'SZyWB':_0x13b8(0x36),'MwQfp':function(_0x489dc5,_0x4c4251){return _0x489dc5(_0x4c4251);},'flwho':function(_0x38e6eb,_0x1923e4){return _0x38e6eb(_0x1923e4);},'MmyOJ':function(_0xde7bf7,_0x1ea46f){return _0xde7bf7(_0x1ea46f);},'Nzifb':function(_0x340c12,_0x43579b){return _0x340c12===_0x43579b;},'CaYup':'padding','PgWTH':_0x13b8(0x37),'ljZix':_0x13b8(0x38),'UAPpN':function(_0x437b82,_0x2f97c9){return _0x437b82===_0x2f97c9;},'KcBTk':_0x13b8(0x39),'lxLMh':function(_0x2e7e2d,_0x2a7b51){return _0x2e7e2d===_0x2a7b51;},'kmXuS':_0x13b8(0x3a),'cdbJc':function(_0x4977af,_0x49da38){return _0x4977af&&_0x49da38;},'oXhGa':_0x13b8(0x3b),'dlnBQ':_0x13b8(0x3c),'faybT':_0x13b8(0x3d),'uJIhz':function(_0x543eb6,_0xd329fe){return _0x543eb6||_0xd329fe;},'XoZAF':function(_0x4d3e87,_0x313c8f){return _0x4d3e87>_0x313c8f;},'ITtoI':'Data\x20Preview','TCOvL':_0x13b8(0x3e),'IeuHG':'small','YyjAz':_0x13b8(0x3f)},[_0x4f1820,_0x3a14b]=useState(_0x3781ac[_0x13b8(0x40)]),[_0x227483,_0x50d7a8]=_0x3781ac[_0x13b8(0x41)](useState,''),[_0x5594ce,_0x178697]=_0x3781ac[_0x13b8(0x42)](useState,![]),[_0x571e63,_0x2c9290]=_0x3781ac[_0x13b8(0x43)](useState,null),[_0x2468ff,_0x6aa53b]=_0x3781ac[_0x13b8(0x44)](useState,null),[_0x517f92,_0x26ffcc]=_0x3781ac[_0x13b8(0x45)](useState,null),_0x5a7328=()=>{if(_0x3781ac[_0x13b8(0x46)]===_0x13b8(0x2))switch(_0x333df7){case _0x3781ac[_0x13b8(0x47)]:return{'title':_0x3781ac[_0x13b8(0x48)],'instructions':_0x13b8(0x49),'placeholder':_0x3781ac[_0x13b8(0x4a)]};case _0x3781ac[_0x13b8(0x4b)]:return{'title':_0x3781ac[_0x13b8(0x4c)],'instructions':_0x3781ac['kpNVs'],'placeholder':_0x3781ac[_0x13b8(0x4d)]};case'gemini':return{'title':_0x3781ac[_0x13b8(0x4e)],'instructions':_0x3781ac['huFQc'],'placeholder':_0x3781ac[_0x13b8(0x4f)]};case _0x3781ac[_0x13b8(0x50)]:return{'title':_0x13b8(0x51),'instructions':_0x3781ac['nxuAb'],'placeholder':_0x3781ac[_0x13b8(0x52)]};default:return{'title':_0x13b8(0x53)+_0x331c89,'instructions':_0x3781ac['aknNb'],'placeholder':_0x3781ac['UZABq']};}else{var _0x1b0054;_0x4444c2[_0x13b8(0x54)]({'id':_0x375504[_0x13b8(0x55)]['id']||'msg_'+_0x484462,'role':(_0x3781ac[_0x13b8(0x56)](_0x1b0054=_0x2e5e01['message'][_0x13b8(0x57)],null)||_0x3781ac[_0x13b8(0x56)](_0x1b0054,void 0x0)?void 0x0:_0x1b0054[_0x13b8(0x58)])||_0x3781ac[_0x13b8(0x59)],'content':_0x38d120,'timestamp':_0x592768[_0x13b8(0x55)][_0x13b8(0x5a)]?new _0x274c6e(_0x3781ac[_0x13b8(0x5b)](_0x2bcc04[_0x13b8(0x55)][_0x13b8(0x5a)],0x3e8))['toISOString']():_0x99ad2});}},{title:_0x1c8f3a,instructions:_0x55b13e,placeholder:_0x206257}=_0x3781ac[_0x13b8(0x5c)](_0x5a7328),_0x2be217=_0x4391a6=>{const _0x3011c1={'ReyvK':function(_0x41b3f3,_0x366f88){return _0x3781ac[_0x13b8(0x5d)](_0x41b3f3,_0x366f88);},'jMRYg':_0x3781ac[_0x13b8(0x5e)],'wobNl':_0x13b8(0x18),'QbbKg':_0x3781ac[_0x13b8(0x5f)],'dImDL':_0x3781ac[_0x13b8(0x60)],'xxXYn':_0x3781ac['UedUu']};try{if(_0x3781ac[_0x13b8(0x61)]!==_0x3781ac[_0x13b8(0x62)]){const _0x1c429a=JSON[_0x13b8(0x63)](_0x4391a6),_0x2b7a5a=[];if(Array[_0x13b8(0x64)](_0x1c429a)){if(_0x3781ac[_0x13b8(0x65)](_0x3781ac[_0x13b8(0x66)],_0x13b8(0x12)))throw new _0x3cdae2(_0x3781ac[_0x13b8(0x67)]);else _0x1c429a[_0x13b8(0x68)]((_0x5525ac,_0x30ed68)=>{const _0xde78b7=_0x44d43b(_0x5525ac);_0xde78b7[_0x13b8(0x69)]>0x0&&(_0x3781ac[_0x13b8(0x6a)]!==_0x13b8(0xe)?_0x4878f3++:_0x2b7a5a['push']({'conversationId':_0x5525ac['id']||_0x5525ac[_0x13b8(0x6b)]||_0x13b8(0x6c)+_0x30ed68+'_'+Date[_0x13b8(0x6d)](),'messages':_0xde78b7,'context':{'title':_0x5525ac[_0x13b8(0x6e)]||_0x5525ac[_0x13b8(0x6f)]||_0x13b8(0x70)+_0x3781ac[_0x13b8(0x71)](_0x30ed68,0x1),'create_time':_0x5525ac[_0x13b8(0x5a)]||_0x5525ac[_0x13b8(0x72)],'update_time':_0x5525ac[_0x13b8(0x73)]||_0x5525ac[_0x13b8(0x74)]}}));});}else{if(_0x1c429a['conversations']&&Array[_0x13b8(0x64)](_0x1c429a[_0x13b8(0x75)]))_0x3781ac['iNkfE'](_0x3781ac[_0x13b8(0x76)],_0x3781ac[_0x13b8(0x77)])?_0x1c429a[_0x13b8(0x75)][_0x13b8(0x68)]((_0x3789fd,_0x166f89)=>{const _0x1ecc6a=_0x44d43b(_0x3789fd);_0x1ecc6a[_0x13b8(0x69)]>0x0&&(_0x3781ac[_0x13b8(0x78)](_0x3781ac[_0x13b8(0x79)],_0x13b8(0xf))?_0x2b7a5a[_0x13b8(0x54)]({'conversationId':_0x3789fd['id']||_0x13b8(0x6c)+_0x166f89+'_'+Date[_0x13b8(0x6d)](),'messages':_0x1ecc6a,'context':{'title':_0x3789fd['title']||'Conversation\x20'+_0x3781ac[_0x13b8(0x7a)](_0x166f89,0x1),'create_time':_0x3789fd[_0x13b8(0x5a)],'update_time':_0x3789fd['update_time']}}):(_0x236bc3[_0x13b8(0x7b)](_0x13b8(0x1d),_0x18616d),_0x3011c1[_0x13b8(0x7c)](_0x4174a3,_0x3011c1[_0x13b8(0x7d)]),_0x3011c1[_0x13b8(0x7c)](_0x2279df,_0x57ed69['ERROR'])));}):_0x8966dd[_0x13b8(0x54)]({'conversationId':_0x405229['id']||_0x13b8(0x6c)+_0x3c2308[_0x13b8(0x6d)](),'messages':_0x485451,'context':{'title':_0x3f3000['title']||_0x3011c1[_0x13b8(0x7e)],'create_time':_0x373114['create_time'],'update_time':_0x2ec1a3[_0x13b8(0x73)]}});else{if(_0x1c429a[_0x13b8(0x7f)]||_0x1c429a[_0x13b8(0x80)]){if(_0x3781ac[_0x13b8(0x56)](_0x3781ac[_0x13b8(0x81)],_0x3781ac['pUACf']))_0x55a65e[_0x13b8(0x54)]({'id':_0x30da9e['id']||_0x13b8(0x82)+_0x14cbee,'role':_0x303979[_0x13b8(0x58)]||_0x5cafb0[_0x13b8(0x57)]||_0x3011c1[_0x13b8(0x83)],'content':_0x2019b9,'timestamp':_0x106b23['timestamp']||_0x67126c['created_at']});else{const _0x5ef410=_0x44d43b(_0x1c429a);if(_0x3781ac[_0x13b8(0x84)](_0x5ef410[_0x13b8(0x69)],0x0)){if(_0x3781ac['zVGEK'](_0x3781ac['RNMvg'],_0x3781ac['KKdeK'])){const _0x35e225=_0x3781ac[_0x13b8(0x85)](_0x3a8bec,_0x546e94);_0x3781ac[_0x13b8(0x84)](_0x35e225[_0x13b8(0x69)],0x0)&&_0x30995d[_0x13b8(0x54)]({'conversationId':_0x3ec3c3['id']||_0x13b8(0x6c)+_0x199673+'_'+_0xb9fea9[_0x13b8(0x6d)](),'messages':_0x35e225,'context':{'title':_0x582fa4[_0x13b8(0x6e)]||_0x13b8(0x70)+_0x3781ac[_0x13b8(0x71)](_0x433231,0x1),'create_time':_0x3a5d6f[_0x13b8(0x5a)],'update_time':_0x2d36b3['update_time']}});}else _0x2b7a5a['push']({'conversationId':_0x1c429a['id']||_0x13b8(0x6c)+Date['now'](),'messages':_0x5ef410,'context':{'title':_0x1c429a[_0x13b8(0x6e)]||_0x3781ac[_0x13b8(0x86)],'create_time':_0x1c429a[_0x13b8(0x5a)],'update_time':_0x1c429a[_0x13b8(0x73)]}});}}}else{const _0x455c7d=_0x3781ac[_0x13b8(0x5d)](_0x44d43b,_0x1c429a);if(_0x455c7d['length']>0x0){if(_0x3781ac[_0x13b8(0x87)](_0x3781ac[_0x13b8(0x88)],_0x3781ac[_0x13b8(0x89)]))_0x2b7a5a['push']({'conversationId':_0x13b8(0x6c)+Date[_0x13b8(0x6d)](),'messages':_0x455c7d,'context':{'title':_0x1c429a[_0x13b8(0x6e)]||_0x13b8(0x18)}});else{var _0x53150d;if(_0x3781ac[_0x13b8(0x87)](_0x384f35,null)&&_0x3781ac[_0x13b8(0x87)](_0x3b06c7,void 0x0)&&_0x3781ac[_0x13b8(0x65)](_0x53150d=_0x3256c0[_0x13b8(0x55)],null)&&_0x53150d!==void 0x0&&(_0x53150d=_0x53150d[_0x13b8(0x8a)])!==null&&_0x53150d!==void 0x0&&_0x53150d[_0x13b8(0x8b)]){const _0x2f9636=_0x1874d8[_0x13b8(0x55)][_0x13b8(0x8a)][_0x13b8(0x8b)][_0x13b8(0x8c)]('\x0a');if(_0x2f9636[_0x13b8(0x8d)]()){var _0x19c048;_0x5747fc['push']({'id':_0x57a915['message']['id']||_0x13b8(0x82)+_0x508b2f,'role':(_0x3781ac[_0x13b8(0x8e)](_0x19c048=_0x404166['message'][_0x13b8(0x57)],null)||_0x3781ac[_0x13b8(0x8f)](_0x19c048,void 0x0)?void 0x0:_0x19c048[_0x13b8(0x58)])||_0x13b8(0x1),'content':_0x2f9636,'timestamp':_0x25b3ef[_0x13b8(0x55)][_0x13b8(0x5a)]?new _0x441a0e(_0x2c517b[_0x13b8(0x55)][_0x13b8(0x5a)]*0x3e8)[_0x13b8(0x90)]():_0x2f0e5e});}}}}}}}return _0x2b7a5a;}else{_0x489eec[_0x13b8(0x7b)](_0x3011c1[_0x13b8(0x91)],_0x259ee2);throw new _0x2a1ae4(_0x3011c1[_0x13b8(0x92)]);}}catch(_0xf8e0ae){console[_0x13b8(0x7b)](_0x3781ac[_0x13b8(0x60)],_0xf8e0ae);throw new Error(_0x3781ac['UedUu']);}},_0x44d43b=_0x15b8c8=>{const _0x305d47={'UEwvw':_0x3781ac['hJPCA'],'pvFuG':function(_0x1dfa28,_0x1eb46f){return _0x1dfa28*_0x1eb46f;},'yUdUM':function(_0x42cca1,_0x4df0e3){return _0x42cca1===_0x4df0e3;},'lXPnY':_0x3781ac['ahWfE'],'kojHi':function(_0x469976,_0x5e7fe7){return _0x469976!==_0x5e7fe7;},'ZJkSh':_0x3781ac[_0x13b8(0x93)],'QBWKh':_0x3781ac[_0x13b8(0x94)],'REkLF':function(_0x2e3930,_0x22c8b5){return _0x3781ac[_0x13b8(0x78)](_0x2e3930,_0x22c8b5);},'rQnEY':function(_0x3d461b,_0xbe47f2){return _0x3781ac['QBjtB'](_0x3d461b,_0xbe47f2);},'bFvBO':_0x3781ac[_0x13b8(0x95)],'hqPuC':function(_0x392ea1,_0x3cc236){return _0x392ea1(_0x3cc236);},'PbsQv':_0x13b8(0x10),'eaMUa':function(_0x26ec9f,_0x5d7b94){return _0x3781ac['sNgNX'](_0x26ec9f,_0x5d7b94);},'OzDNS':function(_0x59946c,_0x448408){return _0x3781ac[_0x13b8(0x8e)](_0x59946c,_0x448408);},'kyKcs':_0x3781ac[_0x13b8(0x5f)],'CaEel':_0x3781ac[_0x13b8(0x96)],'QwwaS':function(_0x4ceb52,_0x929ed8){return _0x4ceb52===_0x929ed8;},'pbCZO':_0x3781ac['UdJEo'],'aSmJC':_0x3781ac['GqqiZ'],'fOyjf':_0x3781ac[_0x13b8(0x97)],'NhfjI':_0x13b8(0x98),'JLLrP':function(_0x2b691f,_0x1d38f1){return _0x2b691f!==_0x1d38f1;},'vWyib':_0x3781ac[_0x13b8(0x40)],'mpcYw':_0x3781ac[_0x13b8(0x99)],'mwWzM':_0x3781ac[_0x13b8(0x9a)]},_0x29dbb0=[];if(_0x15b8c8['mapping']){if(_0x3781ac[_0x13b8(0x9b)](_0x3781ac[_0x13b8(0x9c)],_0x13b8(0x9d)))throw new _0x40bb4b(_0x3781ac[_0x13b8(0x9e)]);else Object[_0x13b8(0x9f)](_0x15b8c8['mapping'])[_0x13b8(0x68)]((_0xec72f1,_0xeb8813)=>{const _0x5d32b2={'Vuima':function(_0x21eddb,_0x242136){return _0x21eddb===_0x242136;},'fvsDK':function(_0x34262b,_0x469e16){return _0x305d47['pvFuG'](_0x34262b,_0x469e16);}};if(_0x305d47[_0x13b8(0xa0)]('nKAcY',_0x305d47['lXPnY'])){var _0x3d1a75;if(_0x305d47[_0x13b8(0xa1)](_0xec72f1,null)&&_0xec72f1!==void 0x0&&_0x305d47[_0x13b8(0xa1)](_0x3d1a75=_0xec72f1[_0x13b8(0x55)],null)&&_0x3d1a75!==void 0x0&&_0x305d47[_0x13b8(0xa1)](_0x3d1a75=_0x3d1a75[_0x13b8(0x8a)],null)&&_0x3d1a75!==void 0x0&&_0x3d1a75[_0x13b8(0x8b)]){const _0x1451a6=_0xec72f1[_0x13b8(0x55)]['content'][_0x13b8(0x8b)][_0x13b8(0x8c)]('\x0a');if(_0x1451a6[_0x13b8(0x8d)]()){if(_0x305d47[_0x13b8(0xa0)](_0x305d47[_0x13b8(0xa2)],_0x305d47[_0x13b8(0xa3)])){const _0x4a31db=_0x42a29f[_0x13b8(0x55)]['content'][_0x13b8(0x8b)]['join']('\x0a');if(_0x4a31db[_0x13b8(0x8d)]()){var _0x319712;_0x3c4c78['push']({'id':_0x422025[_0x13b8(0x55)]['id']||_0x13b8(0x82)+_0x2fd441,'role':((_0x319712=_0x80d596['message'][_0x13b8(0x57)])===null||_0x5d32b2[_0x13b8(0xa4)](_0x319712,void 0x0)?void 0x0:_0x319712[_0x13b8(0x58)])||_0x13b8(0x1),'content':_0x4a31db,'timestamp':_0x5c6e2e[_0x13b8(0x55)][_0x13b8(0x5a)]?new _0x15e9c0(_0x5d32b2[_0x13b8(0xa5)](_0x161478[_0x13b8(0x55)][_0x13b8(0x5a)],0x3e8))[_0x13b8(0x90)]():_0x2056e6});}}else{var _0x4cc3f9;_0x29dbb0[_0x13b8(0x54)]({'id':_0xec72f1[_0x13b8(0x55)]['id']||_0x13b8(0x82)+_0xeb8813,'role':(_0x305d47[_0x13b8(0xa6)](_0x4cc3f9=_0xec72f1[_0x13b8(0x55)]['author'],null)||_0x305d47['rQnEY'](_0x4cc3f9,void 0x0)?void 0x0:_0x4cc3f9['role'])||_0x13b8(0x1),'content':_0x1451a6,'timestamp':_0xec72f1[_0x13b8(0x55)]['create_time']?new Date(_0xec72f1[_0x13b8(0x55)][_0x13b8(0x5a)]*0x3e8)[_0x13b8(0x90)]():undefined});}}}}else throw new _0x29cbf8(_0x305d47[_0x13b8(0xa7)]);});}return _0x15b8c8[_0x13b8(0x80)]&&Array[_0x13b8(0x64)](_0x15b8c8[_0x13b8(0x80)])&&(_0x3781ac['wmTli'](_0x3781ac[_0x13b8(0xa8)],_0x3781ac[_0x13b8(0xa8)])?_0x15b8c8[_0x13b8(0x80)][_0x13b8(0x68)]((_0x29e434,_0x6acb7a)=>{const _0x490349={'YHpjq':_0x305d47[_0x13b8(0xa9)],'YqfEO':function(_0x46d2fc,_0xc61f94){return _0x305d47[_0x13b8(0xaa)](_0x46d2fc,_0xc61f94);},'UZrgY':_0x305d47['PbsQv'],'znoQt':function(_0x3abe5e,_0x54d6a0){return _0x305d47[_0x13b8(0xab)](_0x3abe5e,_0x54d6a0);},'DHLoD':function(_0x5c07da,_0x21d77f){return _0x305d47['OzDNS'](_0x5c07da,_0x21d77f);},'hdWvg':_0x305d47[_0x13b8(0xac)],'ShKzY':_0x305d47['CaEel']};if(_0x305d47[_0x13b8(0xad)](_0x305d47[_0x13b8(0xae)],_0x305d47[_0x13b8(0xaf)]))_0x4912c6[_0x13b8(0xb0)]!==_0x13b8(0x29)&&(_0x3007e3['error'](_0x490349[_0x13b8(0xb1)],_0x42aee1),_0x490349[_0x13b8(0xb2)](_0x3bdfe7,_0x490349[_0x13b8(0xb3)]),_0x490349[_0x13b8(0xb4)](_0x442efb,_0x3d699b[_0x13b8(0xb5)]));else{var _0x14d1de;const _0x303f68=_0x29e434[_0x13b8(0x8a)]||_0x29e434['text']||_0x29e434[_0x13b8(0x55)]||'';if(_0x305d47[_0x13b8(0xa0)](typeof _0x303f68,_0x305d47[_0x13b8(0xb6)])&&_0x303f68['trim']())_0x305d47['yUdUM'](_0x305d47[_0x13b8(0xb7)],_0x305d47[_0x13b8(0xb7)])?_0x29dbb0[_0x13b8(0x54)]({'id':_0x29e434['id']||_0x13b8(0x82)+_0x6acb7a,'role':_0x29e434[_0x13b8(0x58)]||_0x29e434[_0x13b8(0x57)]||'user','content':_0x303f68,'timestamp':_0x29e434['timestamp']||_0x29e434[_0x13b8(0x72)]}):(_0xb5b2c8[_0x13b8(0xb8)]||_0x2cf577[_0x13b8(0x8a)])&&_0x4ac774[_0x13b8(0x54)]({'id':_0x25d703['uuid']||_0x13b8(0x82)+_0x573fb0,'role':_0x490349['DHLoD'](_0x23f86f[_0x13b8(0xb9)],'human')?_0x490349[_0x13b8(0xba)]:_0x490349['ShKzY'],'content':_0x3f2d81[_0x13b8(0xb8)]||_0x9671ab[_0x13b8(0x8a)],'timestamp':_0x5c79ab['created_at']});else _0x305d47[_0x13b8(0xbb)](_0x14d1de=_0x29e434[_0x13b8(0x8a)],null)&&_0x305d47[_0x13b8(0xbb)](_0x14d1de,void 0x0)&&_0x14d1de[_0x13b8(0x8b)]&&_0x29dbb0[_0x13b8(0x54)]({'id':_0x29e434['id']||_0x13b8(0x82)+_0x6acb7a,'role':_0x29e434[_0x13b8(0x58)]||_0x13b8(0xbc),'content':_0x29e434[_0x13b8(0x8a)][_0x13b8(0x8b)][_0x13b8(0x8c)]('\x0a'),'timestamp':_0x29e434[_0x13b8(0xbd)]});}}):_0x3d9720?(_0x3781ac[_0x13b8(0x5d)](_0x451a97,_0x3781ac[_0x13b8(0xbe)]),_0x3781ac['sNgNX'](_0x306813,_0x7d8d57[_0x13b8(0xbf)])):(_0x28fb18(_0x13b8(0x36)),_0x3781ac['UEoOM'](_0x5ed25f,_0x5eb3a7[_0x13b8(0xb5)]))),_0x15b8c8[_0x13b8(0xc0)]&&Array[_0x13b8(0x64)](_0x15b8c8['chat_messages'])&&_0x15b8c8[_0x13b8(0xc0)][_0x13b8(0x68)]((_0x4747dc,_0x5726e7)=>{(_0x4747dc['text']||_0x4747dc[_0x13b8(0x8a)])&&(_0x305d47['mpcYw']===_0x305d47[_0x13b8(0xc1)]?_0x29dbb0[_0x13b8(0x54)]({'id':_0x4747dc[_0x13b8(0xc2)]||_0x13b8(0x82)+_0x5726e7,'role':_0x4747dc['sender']===_0x305d47[_0x13b8(0xc3)]?_0x13b8(0xbc):_0x305d47['CaEel'],'content':_0x4747dc[_0x13b8(0xb8)]||_0x4747dc[_0x13b8(0x8a)],'timestamp':_0x4747dc[_0x13b8(0x72)]}):(_0x272f88(_0x305d47[_0x13b8(0xc4)]),_0x305d47[_0x13b8(0xab)](_0x4299f7,_0x8af12a['BUTTON_PRESS'])));}),_0x29dbb0;},_0x41aa01=async()=>{const _0x4eadb7={'UlIwK':_0x3781ac[_0x13b8(0xc5)],'prJdT':function(_0x478d0c){return _0x3781ac['BzxbL'](_0x478d0c);},'UEHyy':function(_0x2b1ec3,_0x13e4b7){return _0x2b1ec3(_0x13e4b7);},'IgfcF':_0x3781ac['iORfx']};if(_0x3781ac[_0x13b8(0x87)](_0x3781ac[_0x13b8(0xc6)],_0x13b8(0x25)))_0x58c0d8[_0x13b8(0x54)]({'conversationId':_0x4e5f62['id']||_0x3dc4a0[_0x13b8(0x6b)]||_0x13b8(0x6c)+_0x2aaa1b+'_'+_0x3362c3[_0x13b8(0x6d)](),'messages':_0x41e411,'context':{'title':_0x4a36b4['title']||_0x4b434c[_0x13b8(0x6f)]||_0x13b8(0x70)+_0x3781ac[_0x13b8(0x7a)](_0x34efc6,0x1),'create_time':_0x2423e6[_0x13b8(0x5a)]||_0x4046ca[_0x13b8(0x72)],'update_time':_0x7aa13b[_0x13b8(0x73)]||_0x2cfb21[_0x13b8(0x74)]}});else{if(!FILE_UPLOAD_AVAILABLE){_0x3781ac[_0x13b8(0xc7)](_0x2c9290,'File upload requires react-native-document-picker and react-native-fs. Please paste data instead.');return;}try{if(_0x3781ac[_0x13b8(0xc8)](_0x3781ac[_0x13b8(0xc9)],_0x3781ac[_0x13b8(0xca)])){_0x3781ac[_0x13b8(0x85)](_0x2c9290,null);const {pick:_0x5e62cb,types:_0x327c4e}=DocumentPicker,_0x352bc4=await _0x5e62cb({'type':[_0x327c4e['json'],_0x327c4e['plainText'],_0x327c4e[_0x13b8(0xcb)]]});if(_0x352bc4&&_0x352bc4[0x0]){const _0x44d51c=_0x352bc4[0x0];_0x6aa53b(_0x44d51c['name']||_0x13b8(0xcc));let _0x50bcaa;if(_0x44d51c[_0x13b8(0xcd)]['startsWith'](_0x3781ac[_0x13b8(0xce)])){if(_0x3781ac[_0x13b8(0xcf)]===_0x13b8(0xd0)){const _0xa8ac43=_0x4eadb7[_0x13b8(0xd1)][_0x13b8(0xd2)]('|');let _0x5f21f5=0x0;while(!![]){switch(_0xa8ac43[_0x5f21f5++]){case'0':_0x4eadb7['prJdT'](_0x2e14f3);continue;case'1':_0x4eadb7[_0x13b8(0xd3)](_0x2d9893,'');continue;case'2':_0x38c4c9(null);continue;case'3':_0x4eadb7['UEHyy'](_0xd61505,null);continue;case'4':_0x4eadb7['UEHyy'](_0xd6a427,null);continue;case'5':_0x1ac582(_0x13b8(0x21));continue;}break;}}else _0x50bcaa=await RNFS[_0x13b8(0xd4)](_0x44d51c['uri'],_0x13b8(0xd5));}else _0x3781ac['Olwbg']===_0x3781ac[_0x13b8(0xd6)]?_0x2247d3['push']({'id':_0x10eced['id']||_0x13b8(0x82)+_0x3602b9,'role':_0x593ff6[_0x13b8(0x58)]||_0x4eadb7[_0x13b8(0xd7)],'content':_0x4d265a[_0x13b8(0x8a)][_0x13b8(0x8b)][_0x13b8(0x8c)]('\x0a'),'timestamp':_0x273897[_0x13b8(0xbd)]}):_0x50bcaa=await RNFS[_0x13b8(0xd4)](_0x44d51c['uri'],_0x3781ac[_0x13b8(0xd8)]);_0x3781ac[_0x13b8(0x43)](_0x26ffcc,_0x50bcaa),_0x3781ac['UEoOM'](_0x50d7a8,_0x50bcaa),_0x3781ac[_0x13b8(0xd9)](triggerHaptic,HapticType['SUCCESS']);}}else _0x4864b8[_0x13b8(0x7b)](_0x13b8(0xda),_0x1038fd);}catch(_0x44c994){_0x3781ac['dYTOQ'](_0x44c994['code'],_0x3781ac[_0x13b8(0xdb)])&&(console[_0x13b8(0x7b)](_0x3781ac[_0x13b8(0x95)],_0x44c994),_0x2c9290(_0x3781ac[_0x13b8(0x5e)]),triggerHaptic(HapticType[_0x13b8(0xb5)]));}}},_0x577d78=async()=>{const _0x566adf={'kOTnl':_0x3781ac[_0x13b8(0x86)]},_0x1d2d59=_0x4f1820===_0x3781ac[_0x13b8(0xbe)]&&_0x517f92?_0x517f92:_0x227483;if(!_0x1d2d59['trim']()){_0x3781ac[_0x13b8(0xc7)](_0x2c9290,_0x3781ac[_0x13b8(0xdc)]),_0x3781ac[_0x13b8(0x41)](triggerHaptic,HapticType[_0x13b8(0xb5)]);return;}_0x3781ac[_0x13b8(0xc7)](_0x178697,!![]),_0x3781ac['xKVsK'](_0x2c9290,null);try{const _0x73b734=_0x3781ac[_0x13b8(0xc7)](_0x2be217,_0x1d2d59);if(_0x3781ac[_0x13b8(0xdd)](_0x73b734[_0x13b8(0x69)],0x0)){if(_0x3781ac[_0x13b8(0xde)](_0x3781ac[_0x13b8(0xdf)],_0x3781ac[_0x13b8(0xdf)]))_0x3d1fb7[_0x13b8(0x54)]({'conversationId':_0x13b8(0x6c)+_0x5e6748['now'](),'messages':_0x9fc373,'context':{'title':_0x37a905[_0x13b8(0x6e)]||_0x566adf[_0x13b8(0xe0)]}});else throw new Error(_0x13b8(0x1a));}const _0x4a7f41=await AsyncStorage['getItem'](_0x3781ac[_0x13b8(0xe1)])||await AsyncStorage[_0x13b8(0xe2)]('enoch_token')||await AsyncStorage['getItem'](_0x3781ac['iFFfv']);if(!_0x4a7f41)throw new Error(_0x3781ac['oxrva']);const _0x550c98=_0x13b8(0xe3)+_0x333df7;let _0x6162e1=0x0;for(const _0x338a5a of _0x73b734){try{const _0xdf4eba=await fetch(API_CONFIG[_0x13b8(0xe4)]+_0x13b8(0xe5),{'method':'POST','headers':{'Content-Type':'application/json','Authorization':_0x13b8(0xe6)+_0x4a7f41},'body':JSON[_0x13b8(0xe7)]({'platform':_0x550c98,'conversationData':{'conversationId':_0x338a5a[_0x13b8(0xe8)],'messages':_0x338a5a[_0x13b8(0x80)],'context':_0x338a5a[_0x13b8(0xe9)],'mobileMetadata':{'platform':Platform['OS'],'appVersion':_0x3781ac[_0x13b8(0xea)],'osVersion':Platform[_0x13b8(0xeb)],'isOfflineSync':![]}},'memoryType':_0x3781ac[_0x13b8(0xec)],'metadata':{'source':_0x3781ac[_0x13b8(0xed)],'importedAt':new Date()[_0x13b8(0x90)](),'originalPlatform':_0x333df7}})});if(_0xdf4eba['ok'])_0x6162e1++;else{const _0x37716a=await _0xdf4eba[_0x13b8(0xb8)]();console['error'](_0x13b8(0xee)+_0x338a5a[_0x13b8(0xe8)]+':',_0x37716a);}}catch(_0x14da97){console[_0x13b8(0x7b)]('Error\x20storing\x20conversation:',_0x14da97);}}if(_0x6162e1>0x0)await AsyncStorage[_0x13b8(0xef)](_0x13b8(0xf0)+_0x333df7,JSON['stringify']({'connected':!![],'platform':_0x333df7,'conversationsCount':_0x6162e1,'lastSyncAt':new Date()[_0x13b8(0x90)]()})),triggerHaptic(HapticType[_0x13b8(0xf1)]),Alert[_0x13b8(0xf2)](_0x3781ac[_0x13b8(0xf3)],_0x13b8(0xf4)+_0x6162e1+'\x20conversation'+(_0x3781ac['JpWdf'](_0x6162e1,0x1)?'s':'')+_0x13b8(0xf5)+_0x331c89+'.',[{'text':'OK','onPress':()=>_0x27608a(_0x333df7)}]);else{if(_0x3781ac[_0x13b8(0x78)](_0x3781ac['cAEAv'],_0x3781ac[_0x13b8(0xf6)])){var _0x38e57e;const _0x5c391d=_0x40c9e5['content']||_0x5e6f68[_0x13b8(0xb8)]||_0x2a9da8['message']||'';if(typeof _0x5c391d===_0x3781ac['ZKxHj']&&_0x5c391d['trim']())_0x2f6d4e[_0x13b8(0x54)]({'id':_0x30a062['id']||'msg_'+_0x231d9f,'role':_0x203969[_0x13b8(0x58)]||_0x2fc657['author']||_0x13b8(0xbc),'content':_0x5c391d,'timestamp':_0x942e27['timestamp']||_0x1106d7[_0x13b8(0x72)]});else _0x3781ac[_0x13b8(0xc8)](_0x38e57e=_0x4a1eef['content'],null)&&_0x3781ac[_0x13b8(0xf7)](_0x38e57e,void 0x0)&&_0x38e57e['parts']&&_0x3c9fec['push']({'id':_0x29c97a['id']||_0x13b8(0x82)+_0x25d58e,'role':_0x2fd30d[_0x13b8(0x58)]||_0x3781ac['iORfx'],'content':_0x32731a['content'][_0x13b8(0x8b)][_0x13b8(0x8c)]('\x0a'),'timestamp':_0x4043ee['timestamp']});}else throw new Error(_0x3781ac[_0x13b8(0xf8)]);}}catch(_0x3fecc1){console['error'](_0x3781ac[_0x13b8(0xf9)],_0x3fecc1),_0x3781ac[_0x13b8(0xfa)](_0x2c9290,_0x3fecc1[_0x13b8(0x55)]||_0x3781ac[_0x13b8(0xfb)]),_0x3781ac['bQLLr'](triggerHaptic,HapticType['ERROR']);}finally{_0x3781ac[_0x13b8(0xfc)](_0x178697,![]);}},_0x18524b=()=>{const _0x3405a5=_0x3781ac[_0x13b8(0xfd)]['split']('|');let _0x4bcd5b=0x0;while(!![]){switch(_0x3405a5[_0x4bcd5b++]){case'0':_0x3781ac['hmsxg'](_0x2c9290,null);continue;case'1':_0x3781ac['BzxbL'](_0x4c7ac2);continue;case'2':_0x50d7a8('');continue;case'3':_0x3a14b(_0x3781ac['nsnbF']);continue;case'4':_0x6aa53b(null);continue;case'5':_0x26ffcc(null);continue;}break;}};return React[_0x13b8(0xfe)](Modal,{'visible':_0x153b08,'animationType':_0x13b8(0xff),'presentationStyle':'pageSheet','onRequestClose':_0x18524b},React[_0x13b8(0xfe)](KeyboardAvoidingView,{'style':styles[_0x13b8(0x100)],'behavior':_0x3781ac[_0x13b8(0x101)](Platform['OS'],_0x13b8(0x102))?_0x3781ac[_0x13b8(0x103)]:_0x3781ac[_0x13b8(0x104)]},React[_0x13b8(0xfe)](View,{'style':styles[_0x13b8(0x105)]},React[_0x13b8(0xfe)](TouchableOpacity,{'style':styles[_0x13b8(0x106)],'onPress':_0x18524b},React[_0x13b8(0xfe)](Text,{'style':styles['closeButtonText']},_0x13b8(0x107))),React['createElement'](Text,{'style':styles['headerTitle']},_0x1c8f3a),React['createElement'](View,{'style':styles[_0x13b8(0x106)]})),React[_0x13b8(0xfe)](ScrollView,{'style':styles[_0x13b8(0x8a)],'contentContainerStyle':styles[_0x13b8(0x108)],'keyboardShouldPersistTaps':_0x3781ac[_0x13b8(0x109)]},React[_0x13b8(0xfe)](View,{'style':styles[_0x13b8(0x10a)]},React[_0x13b8(0xfe)](Text,{'style':styles[_0x13b8(0x10b)]},_0x55b13e)),React[_0x13b8(0xfe)](View,{'style':styles[_0x13b8(0x10c)]},React['createElement'](TouchableOpacity,{'style':[styles[_0x13b8(0x10d)],_0x3781ac[_0x13b8(0x10e)](_0x4f1820,_0x13b8(0x21))&&styles['tabActive']],'onPress':()=>{_0x3781ac[_0x13b8(0x10f)](_0x13b8(0x110),_0x3781ac[_0x13b8(0x111)])?(_0x3781ac[_0x13b8(0x112)](_0x3a14b,_0x3781ac[_0x13b8(0x40)]),_0x3781ac[_0x13b8(0x113)](triggerHaptic,HapticType[_0x13b8(0xbf)])):_0x326810[_0x13b8(0x0)]('react-native-fs not available - file upload disabled');}},React[_0x13b8(0xfe)](Text,{'style':[styles[_0x13b8(0x114)],_0x3781ac[_0x13b8(0x101)](_0x4f1820,_0x3781ac[_0x13b8(0x40)])&&styles['tabTextActive']]},_0x3781ac[_0x13b8(0x115)])),React[_0x13b8(0xfe)](TouchableOpacity,{'style':[styles[_0x13b8(0x10d)],_0x3781ac[_0x13b8(0x101)](_0x4f1820,_0x13b8(0x116))&&styles['tabActive'],!FILE_UPLOAD_AVAILABLE&&styles[_0x13b8(0x117)]],'onPress':()=>{const _0x2395b8={'IAhRi':function(_0xc1ad6a,_0x1d373a){return _0x3781ac[_0x13b8(0xfa)](_0xc1ad6a,_0x1d373a);},'CfsDw':function(_0xb9e8b,_0x26e998){return _0x3781ac['oPlia'](_0xb9e8b,_0x26e998);}};if(FILE_UPLOAD_AVAILABLE)_0x3781ac[_0x13b8(0x118)](_0x3a14b,_0x13b8(0x116)),_0x3781ac[_0x13b8(0x119)](triggerHaptic,HapticType[_0x13b8(0xbf)]);else{if(_0x3781ac[_0x13b8(0x11a)](_0x3781ac[_0x13b8(0x11b)],_0x3781ac[_0x13b8(0x11b)])){const _0xc8af29=_0x2395b8['IAhRi'](_0x559a8b,_0x459480);_0xc8af29['length']>0x0&&_0x10b54b['push']({'conversationId':_0x1f9059['id']||_0x344df1[_0x13b8(0x6b)]||'conv_'+_0x55c246+'_'+_0x4a8481[_0x13b8(0x6d)](),'messages':_0xc8af29,'context':{'title':_0x57e609[_0x13b8(0x6e)]||_0x4a9a62['name']||_0x13b8(0x70)+_0x2395b8['CfsDw'](_0x37cc5f,0x1),'create_time':_0x2ada9d[_0x13b8(0x5a)]||_0x7bc47f[_0x13b8(0x72)],'update_time':_0x24e6dc[_0x13b8(0x73)]||_0x922d6d[_0x13b8(0x74)]}});}else _0x3781ac[_0x13b8(0x113)](_0x2c9290,_0x3781ac[_0x13b8(0x11c)]),_0x3781ac['MwQfp'](triggerHaptic,HapticType[_0x13b8(0xb5)]);}}},React[_0x13b8(0xfe)](Text,{'style':[styles[_0x13b8(0x114)],_0x3781ac[_0x13b8(0x11d)](_0x4f1820,_0x3781ac[_0x13b8(0xbe)])&&styles[_0x13b8(0x11e)],!FILE_UPLOAD_AVAILABLE&&styles[_0x13b8(0x11f)]]},_0x3781ac[_0x13b8(0x120)],_0x3781ac['cdbJc'](!FILE_UPLOAD_AVAILABLE,_0x3781ac['oXhGa'])))),_0x3781ac[_0x13b8(0x56)](_0x4f1820,_0x13b8(0x21))?React[_0x13b8(0xfe)](View,{'style':styles['inputContainer']},React[_0x13b8(0xfe)](TextInput,{'style':styles[_0x13b8(0x121)],'multiline':!![],'placeholder':_0x206257,'placeholderTextColor':COLORS['grey400'],'value':_0x227483,'onChangeText':_0x50d7a8,'textAlignVertical':_0x3781ac['dlnBQ'],'autoCapitalize':_0x3781ac['faybT'],'autoCorrect':![]})):React['createElement'](View,{'style':styles['fileInputContainer']},React['createElement'](TouchableOpacity,{'style':styles[_0x13b8(0x122)],'onPress':_0x41aa01},React[_0x13b8(0xfe)](Text,{'style':styles[_0x13b8(0x123)]},'📁'),React['createElement'](Text,{'style':styles['filePickText']},_0x3781ac['uJIhz'](_0x2468ff,_0x13b8(0x124)))),_0x2468ff&&React[_0x13b8(0xfe)](View,{'style':styles[_0x13b8(0x125)]},React['createElement'](Text,{'style':styles['fileSelectedText']},'✓\x20',_0x2468ff))),_0x571e63&&React[_0x13b8(0xfe)](View,{'style':styles['errorContainer']},React[_0x13b8(0xfe)](Text,{'style':styles[_0x13b8(0x126)]},_0x571e63)),_0x3781ac[_0x13b8(0x127)](_0x227483[_0x13b8(0x69)],0x0)&&React[_0x13b8(0xfe)](View,{'style':styles[_0x13b8(0x128)]},React[_0x13b8(0xfe)](Text,{'style':styles[_0x13b8(0x129)]},_0x3781ac['ITtoI']),React['createElement'](Text,{'style':styles[_0x13b8(0x12a)],'numberOfLines':0x5},_0x227483[_0x13b8(0x12b)](0x0,0x1f4),_0x3781ac[_0x13b8(0x127)](_0x227483[_0x13b8(0x69)],0x1f4)?_0x3781ac['TCOvL']:''),React[_0x13b8(0xfe)](Text,{'style':styles[_0x13b8(0x12c)]},_0x227483[_0x13b8(0x69)]['toLocaleString'](),'\x20characters'))),React['createElement'](View,{'style':styles[_0x13b8(0x12d)]},React['createElement'](TouchableOpacity,{'style':[styles[_0x13b8(0x12e)],(!_0x227483['trim']()||_0x5594ce)&&styles[_0x13b8(0x12f)]],'onPress':_0x577d78,'disabled':!_0x227483['trim']()||_0x5594ce},_0x5594ce?React[_0x13b8(0xfe)](ActivityIndicator,{'color':'#FFFFFF','size':_0x3781ac[_0x13b8(0x130)]}):React[_0x13b8(0xfe)](Text,{'style':styles[_0x13b8(0x131)]},_0x3781ac[_0x13b8(0x132)])))));},styles=StyleSheet[_0x13b8(0x133)]({'container':{'flex':0x1,'backgroundColor':COLORS[_0x13b8(0x134)]},'header':{'flexDirection':'row','alignItems':_0x13b8(0x135),'justifyContent':_0x13b8(0x136),'paddingHorizontal':0x10,'paddingTop':Platform['OS']==='ios'?0xc:0x10,'paddingBottom':0xc,'borderBottomWidth':0x1,'borderBottomColor':_0x13b8(0x137)},'headerTitle':{'fontSize':0x11,'fontWeight':'600','color':COLORS[_0x13b8(0x138)],'fontFamily':_0x13b8(0x139)},'closeButton':{'width':0x3c},'closeButtonText':{'fontSize':0x10,'color':'#3B82F6','fontFamily':_0x13b8(0x13a)},'content':{'flex':0x1},'contentContainer':{'padding':0x14,'paddingBottom':0x28},'instructionsContainer':{'backgroundColor':'#F0F9FF','borderRadius':0xc,'padding':0x10,'marginBottom':0x14},'instructionsText':{'fontSize':0xe,'lineHeight':0x14,'color':_0x13b8(0x13b),'fontFamily':_0x13b8(0x13a)},'tabContainer':{'flexDirection':'row','backgroundColor':_0x13b8(0x13c),'borderRadius':0xa,'padding':0x4,'marginBottom':0x14},'tab':{'flex':0x1,'paddingVertical':0xa,'borderRadius':0x8,'alignItems':'center'},'tabActive':{'backgroundColor':_0x13b8(0x13d),'shadowColor':_0x13b8(0x13e),'shadowOffset':{'width':0x0,'height':0x1},'shadowOpacity':0.1,'shadowRadius':0x2,'elevation':0x2},'tabText':{'fontSize':0xe,'fontWeight':_0x13b8(0x13f),'color':COLORS[_0x13b8(0x140)],'fontFamily':_0x13b8(0x13a)},'tabTextActive':{'color':COLORS[_0x13b8(0x138)]},'tabDisabled':{'opacity':0.5},'tabTextDisabled':{'color':COLORS[_0x13b8(0x141)]},'inputContainer':{'marginBottom':0x14},'textInput':{'backgroundColor':'#FFFFFF','borderWidth':0x1,'borderColor':COLORS[_0x13b8(0x142)],'borderRadius':0xc,'padding':0x10,'minHeight':0xc8,'fontSize':0xe,'fontFamily':Platform['OS']===_0x13b8(0x102)?'Menlo':_0x13b8(0x143),'color':COLORS[_0x13b8(0x138)]},'fileInputContainer':{'marginBottom':0x14},'filePickButton':{'backgroundColor':_0x13b8(0x13d),'borderWidth':0x2,'borderColor':COLORS[_0x13b8(0x142)],'borderStyle':_0x13b8(0x144),'borderRadius':0xc,'padding':0x28,'alignItems':_0x13b8(0x135),'justifyContent':_0x13b8(0x135)},'filePickIcon':{'fontSize':0x28,'marginBottom':0xc},'filePickText':{'fontSize':0xf,'color':COLORS[_0x13b8(0x145)],'fontFamily':'Inter'},'fileSelectedContainer':{'marginTop':0xc,'backgroundColor':_0x13b8(0x146),'borderRadius':0x8,'padding':0xc},'fileSelectedText':{'fontSize':0xe,'color':_0x13b8(0x147),'fontFamily':'Inter','fontWeight':_0x13b8(0x13f)},'errorContainer':{'backgroundColor':_0x13b8(0x148),'borderRadius':0x8,'padding':0xc,'marginBottom':0x10},'errorText':{'fontSize':0xe,'color':_0x13b8(0x149),'fontFamily':_0x13b8(0x13a)},'previewContainer':{'backgroundColor':_0x13b8(0x13c),'borderRadius':0xc,'padding':0x10},'previewTitle':{'fontSize':0xe,'fontWeight':_0x13b8(0x14a),'color':COLORS[_0x13b8(0x138)],'marginBottom':0x8,'fontFamily':'Inter'},'previewText':{'fontSize':0xc,'color':COLORS[_0x13b8(0x145)],'fontFamily':Platform['OS']===_0x13b8(0x102)?_0x13b8(0x14b):_0x13b8(0x143),'lineHeight':0x12},'previewInfo':{'fontSize':0xc,'color':COLORS['grey500'],'marginTop':0x8,'fontFamily':_0x13b8(0x13a)},'footer':{'padding':0x14,'paddingBottom':Platform['OS']===_0x13b8(0x102)?0x22:0x14,'borderTopWidth':0x1,'borderTopColor':'#E5E7EB','backgroundColor':COLORS['surface']},'submitButton':{'backgroundColor':'#10B981','borderRadius':0xc,'paddingVertical':0x10,'alignItems':_0x13b8(0x135),'justifyContent':_0x13b8(0x135)},'submitButtonDisabled':{'backgroundColor':COLORS[_0x13b8(0x142)]},'submitButtonText':{'fontSize':0x10,'fontWeight':_0x13b8(0x14a),'color':'#FFFFFF','fontFamily':_0x13b8(0x13a)}});export default LLMDataInputModal;
|
|
8
|
+
import React, { useState } from 'react';
|
|
9
|
+
import { View, Text, StyleSheet, Modal, TouchableOpacity, TextInput, ScrollView, ActivityIndicator, Alert, Platform, KeyboardAvoidingView } from 'react-native';
|
|
10
|
+
import { COLORS } from '../theme';
|
|
11
|
+
import { triggerHaptic, HapticType } from '../utils/haptics';
|
|
12
|
+
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
13
|
+
import { API_CONFIG } from '../config/api';
|
|
14
|
+
|
|
15
|
+
// Optional dependencies - file upload won't work without them
|
|
16
|
+
let DocumentPicker = null;
|
|
17
|
+
let RNFS = null;
|
|
18
|
+
try {
|
|
19
|
+
DocumentPicker = require('react-native-document-picker');
|
|
20
|
+
} catch (e) {
|
|
21
|
+
console.log('react-native-document-picker not available - file upload disabled');
|
|
22
|
+
}
|
|
23
|
+
try {
|
|
24
|
+
RNFS = require('react-native-fs');
|
|
25
|
+
} catch (e) {
|
|
26
|
+
console.log('react-native-fs not available - file upload disabled');
|
|
27
|
+
}
|
|
28
|
+
const FILE_UPLOAD_AVAILABLE = DocumentPicker !== null && RNFS !== null;
|
|
29
|
+
const LLMDataInputModal = ({
|
|
30
|
+
visible,
|
|
31
|
+
platform,
|
|
32
|
+
platformName,
|
|
33
|
+
onClose,
|
|
34
|
+
onSuccess
|
|
35
|
+
}) => {
|
|
36
|
+
const [inputMode, setInputMode] = useState('paste');
|
|
37
|
+
const [pastedData, setPastedData] = useState('');
|
|
38
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
39
|
+
const [error, setError] = useState(null);
|
|
40
|
+
const [selectedFileName, setSelectedFileName] = useState(null);
|
|
41
|
+
const [fileContent, setFileContent] = useState(null);
|
|
42
|
+
|
|
43
|
+
// Get platform-specific instructions
|
|
44
|
+
const getInstructions = () => {
|
|
45
|
+
switch (platform) {
|
|
46
|
+
case 'chatgpt':
|
|
47
|
+
return {
|
|
48
|
+
title: 'Connect ChatGPT',
|
|
49
|
+
instructions: 'Export your ChatGPT conversations from Settings → Data Controls → Export data. Then upload the JSON file or paste your conversation data.',
|
|
50
|
+
placeholder: 'Paste your ChatGPT conversation JSON here...'
|
|
51
|
+
};
|
|
52
|
+
case 'claude':
|
|
53
|
+
return {
|
|
54
|
+
title: 'Connect Claude',
|
|
55
|
+
instructions: 'Export your Claude conversations and paste the JSON data below, or upload your exported file.',
|
|
56
|
+
placeholder: 'Paste your Claude conversation JSON here...'
|
|
57
|
+
};
|
|
58
|
+
case 'gemini':
|
|
59
|
+
return {
|
|
60
|
+
title: 'Connect Gemini',
|
|
61
|
+
instructions: 'Export your Gemini (Google AI) conversations and paste the data below.',
|
|
62
|
+
placeholder: 'Paste your Gemini conversation JSON here...'
|
|
63
|
+
};
|
|
64
|
+
case 'grok':
|
|
65
|
+
return {
|
|
66
|
+
title: 'Connect Grok',
|
|
67
|
+
instructions: 'Export your Grok conversations from X/Twitter and paste the data below.',
|
|
68
|
+
placeholder: 'Paste your Grok conversation JSON here...'
|
|
69
|
+
};
|
|
70
|
+
default:
|
|
71
|
+
return {
|
|
72
|
+
title: `Connect ${platformName}`,
|
|
73
|
+
instructions: 'Paste your conversation data below or upload a JSON file.',
|
|
74
|
+
placeholder: 'Paste your conversation JSON here...'
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const {
|
|
79
|
+
title,
|
|
80
|
+
instructions,
|
|
81
|
+
placeholder
|
|
82
|
+
} = getInstructions();
|
|
83
|
+
|
|
84
|
+
// Parse conversation data based on platform format
|
|
85
|
+
const parseConversationData = data => {
|
|
86
|
+
try {
|
|
87
|
+
const parsed = JSON.parse(data);
|
|
88
|
+
const conversations = [];
|
|
89
|
+
|
|
90
|
+
// Handle ChatGPT export format
|
|
91
|
+
if (Array.isArray(parsed)) {
|
|
92
|
+
// Array of conversations
|
|
93
|
+
parsed.forEach((conv, index) => {
|
|
94
|
+
const messages = extractMessages(conv);
|
|
95
|
+
if (messages.length > 0) {
|
|
96
|
+
conversations.push({
|
|
97
|
+
conversationId: conv.id || conv.conversation_id || `conv_${index}_${Date.now()}`,
|
|
98
|
+
messages,
|
|
99
|
+
context: {
|
|
100
|
+
title: conv.title || conv.name || `Conversation ${index + 1}`,
|
|
101
|
+
create_time: conv.create_time || conv.created_at,
|
|
102
|
+
update_time: conv.update_time || conv.updated_at
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
} else if (parsed.conversations && Array.isArray(parsed.conversations)) {
|
|
108
|
+
// ChatGPT export with conversations array
|
|
109
|
+
parsed.conversations.forEach((conv, index) => {
|
|
110
|
+
const messages = extractMessages(conv);
|
|
111
|
+
if (messages.length > 0) {
|
|
112
|
+
conversations.push({
|
|
113
|
+
conversationId: conv.id || `conv_${index}_${Date.now()}`,
|
|
114
|
+
messages,
|
|
115
|
+
context: {
|
|
116
|
+
title: conv.title || `Conversation ${index + 1}`,
|
|
117
|
+
create_time: conv.create_time,
|
|
118
|
+
update_time: conv.update_time
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
} else if (parsed.mapping || parsed.messages) {
|
|
124
|
+
// Single conversation format
|
|
125
|
+
const messages = extractMessages(parsed);
|
|
126
|
+
if (messages.length > 0) {
|
|
127
|
+
conversations.push({
|
|
128
|
+
conversationId: parsed.id || `conv_${Date.now()}`,
|
|
129
|
+
messages,
|
|
130
|
+
context: {
|
|
131
|
+
title: parsed.title || 'Imported Conversation',
|
|
132
|
+
create_time: parsed.create_time,
|
|
133
|
+
update_time: parsed.update_time
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
// Try to handle as a single object with message array
|
|
139
|
+
const messages = extractMessages(parsed);
|
|
140
|
+
if (messages.length > 0) {
|
|
141
|
+
conversations.push({
|
|
142
|
+
conversationId: `conv_${Date.now()}`,
|
|
143
|
+
messages,
|
|
144
|
+
context: {
|
|
145
|
+
title: parsed.title || 'Imported Conversation'
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return conversations;
|
|
151
|
+
} catch (e) {
|
|
152
|
+
console.error('Error parsing conversation data:', e);
|
|
153
|
+
throw new Error('Invalid JSON format. Please check your data and try again.');
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// Extract messages from various formats
|
|
158
|
+
const extractMessages = conv => {
|
|
159
|
+
const messages = [];
|
|
160
|
+
|
|
161
|
+
// ChatGPT mapping format
|
|
162
|
+
if (conv.mapping) {
|
|
163
|
+
Object.values(conv.mapping).forEach((node, index) => {
|
|
164
|
+
var _node$message;
|
|
165
|
+
if (node !== null && node !== void 0 && (_node$message = node.message) !== null && _node$message !== void 0 && (_node$message = _node$message.content) !== null && _node$message !== void 0 && _node$message.parts) {
|
|
166
|
+
const content = node.message.content.parts.join('\n');
|
|
167
|
+
if (content.trim()) {
|
|
168
|
+
var _node$message$author;
|
|
169
|
+
messages.push({
|
|
170
|
+
id: node.message.id || `msg_${index}`,
|
|
171
|
+
role: ((_node$message$author = node.message.author) === null || _node$message$author === void 0 ? void 0 : _node$message$author.role) || 'unknown',
|
|
172
|
+
content,
|
|
173
|
+
timestamp: node.message.create_time ? new Date(node.message.create_time * 1000).toISOString() : undefined
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Direct messages array
|
|
181
|
+
if (conv.messages && Array.isArray(conv.messages)) {
|
|
182
|
+
conv.messages.forEach((msg, index) => {
|
|
183
|
+
var _msg$content;
|
|
184
|
+
const content = msg.content || msg.text || msg.message || '';
|
|
185
|
+
if (typeof content === 'string' && content.trim()) {
|
|
186
|
+
messages.push({
|
|
187
|
+
id: msg.id || `msg_${index}`,
|
|
188
|
+
role: msg.role || msg.author || 'user',
|
|
189
|
+
content,
|
|
190
|
+
timestamp: msg.timestamp || msg.created_at
|
|
191
|
+
});
|
|
192
|
+
} else if ((_msg$content = msg.content) !== null && _msg$content !== void 0 && _msg$content.parts) {
|
|
193
|
+
messages.push({
|
|
194
|
+
id: msg.id || `msg_${index}`,
|
|
195
|
+
role: msg.role || 'user',
|
|
196
|
+
content: msg.content.parts.join('\n'),
|
|
197
|
+
timestamp: msg.timestamp
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Claude format
|
|
204
|
+
if (conv.chat_messages && Array.isArray(conv.chat_messages)) {
|
|
205
|
+
conv.chat_messages.forEach((msg, index) => {
|
|
206
|
+
if (msg.text || msg.content) {
|
|
207
|
+
messages.push({
|
|
208
|
+
id: msg.uuid || `msg_${index}`,
|
|
209
|
+
role: msg.sender === 'human' ? 'user' : 'assistant',
|
|
210
|
+
content: msg.text || msg.content,
|
|
211
|
+
timestamp: msg.created_at
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
return messages;
|
|
217
|
+
};
|
|
218
|
+
|
|
219
|
+
// Handle file selection
|
|
220
|
+
const handleFilePick = async () => {
|
|
221
|
+
if (!FILE_UPLOAD_AVAILABLE) {
|
|
222
|
+
setError('File upload requires react-native-document-picker and react-native-fs. Please paste data instead.');
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
setError(null);
|
|
227
|
+
const {
|
|
228
|
+
pick,
|
|
229
|
+
types
|
|
230
|
+
} = DocumentPicker;
|
|
231
|
+
const result = await pick({
|
|
232
|
+
type: [types.json, types.plainText, types.allFiles]
|
|
233
|
+
});
|
|
234
|
+
if (result && result[0]) {
|
|
235
|
+
const file = result[0];
|
|
236
|
+
setSelectedFileName(file.name || 'Selected file');
|
|
237
|
+
|
|
238
|
+
// Read file content
|
|
239
|
+
let content;
|
|
240
|
+
if (file.uri.startsWith('content://')) {
|
|
241
|
+
// Android content URI
|
|
242
|
+
content = await RNFS.readFile(file.uri, 'utf8');
|
|
243
|
+
} else {
|
|
244
|
+
content = await RNFS.readFile(file.uri, 'utf8');
|
|
245
|
+
}
|
|
246
|
+
setFileContent(content);
|
|
247
|
+
setPastedData(content);
|
|
248
|
+
triggerHaptic(HapticType.SUCCESS);
|
|
249
|
+
}
|
|
250
|
+
} catch (err) {
|
|
251
|
+
if (err.code !== 'DOCUMENT_PICKER_CANCELED') {
|
|
252
|
+
console.error('File pick error:', err);
|
|
253
|
+
setError('Failed to read file. Please try again or paste data manually.');
|
|
254
|
+
triggerHaptic(HapticType.ERROR);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
// Submit data to backend
|
|
260
|
+
const handleSubmit = async () => {
|
|
261
|
+
const dataToProcess = inputMode === 'file' && fileContent ? fileContent : pastedData;
|
|
262
|
+
if (!dataToProcess.trim()) {
|
|
263
|
+
setError('Please paste or upload conversation data first.');
|
|
264
|
+
triggerHaptic(HapticType.ERROR);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
setIsLoading(true);
|
|
268
|
+
setError(null);
|
|
269
|
+
try {
|
|
270
|
+
// Parse the conversation data
|
|
271
|
+
const conversations = parseConversationData(dataToProcess);
|
|
272
|
+
if (conversations.length === 0) {
|
|
273
|
+
throw new Error('No valid conversations found in the data. Please check the format.');
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Get auth token
|
|
277
|
+
const authToken = (await AsyncStorage.getItem('onairos_jwt_token')) || (await AsyncStorage.getItem('enoch_token')) || (await AsyncStorage.getItem('auth_token'));
|
|
278
|
+
if (!authToken) {
|
|
279
|
+
throw new Error('Authentication required. Please sign in first.');
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Send each conversation to backend
|
|
283
|
+
const mobilePlatform = `mobile-${platform}`;
|
|
284
|
+
let successCount = 0;
|
|
285
|
+
for (const conversation of conversations) {
|
|
286
|
+
try {
|
|
287
|
+
const response = await fetch(`${API_CONFIG.BASE_URL}/llm-data/store`, {
|
|
288
|
+
method: 'POST',
|
|
289
|
+
headers: {
|
|
290
|
+
'Content-Type': 'application/json',
|
|
291
|
+
'Authorization': `Bearer ${authToken}`
|
|
292
|
+
},
|
|
293
|
+
body: JSON.stringify({
|
|
294
|
+
platform: mobilePlatform,
|
|
295
|
+
conversationData: {
|
|
296
|
+
conversationId: conversation.conversationId,
|
|
297
|
+
messages: conversation.messages,
|
|
298
|
+
context: conversation.context,
|
|
299
|
+
mobileMetadata: {
|
|
300
|
+
platform: Platform.OS,
|
|
301
|
+
appVersion: '1.0.0',
|
|
302
|
+
osVersion: Platform.Version,
|
|
303
|
+
isOfflineSync: false
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
memoryType: 'conversation',
|
|
307
|
+
metadata: {
|
|
308
|
+
source: 'mobile_app_import',
|
|
309
|
+
importedAt: new Date().toISOString(),
|
|
310
|
+
originalPlatform: platform
|
|
311
|
+
}
|
|
312
|
+
})
|
|
313
|
+
});
|
|
314
|
+
if (response.ok) {
|
|
315
|
+
successCount++;
|
|
316
|
+
} else {
|
|
317
|
+
const errorText = await response.text();
|
|
318
|
+
console.error(`Failed to store conversation ${conversation.conversationId}:`, errorText);
|
|
319
|
+
}
|
|
320
|
+
} catch (convError) {
|
|
321
|
+
console.error(`Error storing conversation:`, convError);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
if (successCount > 0) {
|
|
325
|
+
// Store connection status locally
|
|
326
|
+
await AsyncStorage.setItem(`@onairos:llm_connected:${platform}`, JSON.stringify({
|
|
327
|
+
connected: true,
|
|
328
|
+
platform,
|
|
329
|
+
conversationsCount: successCount,
|
|
330
|
+
lastSyncAt: new Date().toISOString()
|
|
331
|
+
}));
|
|
332
|
+
triggerHaptic(HapticType.SUCCESS);
|
|
333
|
+
Alert.alert('Success! 🎉', `Successfully imported ${successCount} conversation${successCount > 1 ? 's' : ''} from ${platformName}.`, [{
|
|
334
|
+
text: 'OK',
|
|
335
|
+
onPress: () => onSuccess(platform)
|
|
336
|
+
}]);
|
|
337
|
+
} else {
|
|
338
|
+
throw new Error('Failed to import any conversations. Please check your data format.');
|
|
339
|
+
}
|
|
340
|
+
} catch (err) {
|
|
341
|
+
console.error('Submit error:', err);
|
|
342
|
+
setError(err.message || 'Failed to import data. Please try again.');
|
|
343
|
+
triggerHaptic(HapticType.ERROR);
|
|
344
|
+
} finally {
|
|
345
|
+
setIsLoading(false);
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
// Reset state when modal closes
|
|
350
|
+
const handleClose = () => {
|
|
351
|
+
setPastedData('');
|
|
352
|
+
setFileContent(null);
|
|
353
|
+
setSelectedFileName(null);
|
|
354
|
+
setError(null);
|
|
355
|
+
setInputMode('paste');
|
|
356
|
+
onClose();
|
|
357
|
+
};
|
|
358
|
+
return /*#__PURE__*/React.createElement(Modal, {
|
|
359
|
+
visible: visible,
|
|
360
|
+
animationType: "slide",
|
|
361
|
+
presentationStyle: "pageSheet",
|
|
362
|
+
onRequestClose: handleClose
|
|
363
|
+
}, /*#__PURE__*/React.createElement(KeyboardAvoidingView, {
|
|
364
|
+
style: styles.container,
|
|
365
|
+
behavior: Platform.OS === 'ios' ? 'padding' : 'height'
|
|
366
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
367
|
+
style: styles.header
|
|
368
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
369
|
+
style: styles.closeButton,
|
|
370
|
+
onPress: handleClose
|
|
371
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
372
|
+
style: styles.closeButtonText
|
|
373
|
+
}, "Cancel")), /*#__PURE__*/React.createElement(Text, {
|
|
374
|
+
style: styles.headerTitle
|
|
375
|
+
}, title), /*#__PURE__*/React.createElement(View, {
|
|
376
|
+
style: styles.closeButton
|
|
377
|
+
})), /*#__PURE__*/React.createElement(ScrollView, {
|
|
378
|
+
style: styles.content,
|
|
379
|
+
contentContainerStyle: styles.contentContainer,
|
|
380
|
+
keyboardShouldPersistTaps: "handled"
|
|
381
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
382
|
+
style: styles.instructionsContainer
|
|
383
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
384
|
+
style: styles.instructionsText
|
|
385
|
+
}, instructions)), /*#__PURE__*/React.createElement(View, {
|
|
386
|
+
style: styles.tabContainer
|
|
387
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
388
|
+
style: [styles.tab, inputMode === 'paste' && styles.tabActive],
|
|
389
|
+
onPress: () => {
|
|
390
|
+
setInputMode('paste');
|
|
391
|
+
triggerHaptic(HapticType.BUTTON_PRESS);
|
|
392
|
+
}
|
|
393
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
394
|
+
style: [styles.tabText, inputMode === 'paste' && styles.tabTextActive]
|
|
395
|
+
}, "Paste Data")), /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
396
|
+
style: [styles.tab, inputMode === 'file' && styles.tabActive, !FILE_UPLOAD_AVAILABLE && styles.tabDisabled],
|
|
397
|
+
onPress: () => {
|
|
398
|
+
if (FILE_UPLOAD_AVAILABLE) {
|
|
399
|
+
setInputMode('file');
|
|
400
|
+
triggerHaptic(HapticType.BUTTON_PRESS);
|
|
401
|
+
} else {
|
|
402
|
+
setError('File upload requires additional dependencies. Please paste data instead.');
|
|
403
|
+
triggerHaptic(HapticType.ERROR);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
407
|
+
style: [styles.tabText, inputMode === 'file' && styles.tabTextActive, !FILE_UPLOAD_AVAILABLE && styles.tabTextDisabled]
|
|
408
|
+
}, "Upload File ", !FILE_UPLOAD_AVAILABLE && '(N/A)'))), inputMode === 'paste' ? /*#__PURE__*/React.createElement(View, {
|
|
409
|
+
style: styles.inputContainer
|
|
410
|
+
}, /*#__PURE__*/React.createElement(TextInput, {
|
|
411
|
+
style: styles.textInput,
|
|
412
|
+
multiline: true,
|
|
413
|
+
placeholder: placeholder,
|
|
414
|
+
placeholderTextColor: COLORS.grey400,
|
|
415
|
+
value: pastedData,
|
|
416
|
+
onChangeText: setPastedData,
|
|
417
|
+
textAlignVertical: "top",
|
|
418
|
+
autoCapitalize: "none",
|
|
419
|
+
autoCorrect: false
|
|
420
|
+
})) : /*#__PURE__*/React.createElement(View, {
|
|
421
|
+
style: styles.fileInputContainer
|
|
422
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
423
|
+
style: styles.filePickButton,
|
|
424
|
+
onPress: handleFilePick
|
|
425
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
426
|
+
style: styles.filePickIcon
|
|
427
|
+
}, "\uD83D\uDCC1"), /*#__PURE__*/React.createElement(Text, {
|
|
428
|
+
style: styles.filePickText
|
|
429
|
+
}, selectedFileName || 'Tap to select a file')), selectedFileName && /*#__PURE__*/React.createElement(View, {
|
|
430
|
+
style: styles.fileSelectedContainer
|
|
431
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
432
|
+
style: styles.fileSelectedText
|
|
433
|
+
}, "\u2713 ", selectedFileName))), error && /*#__PURE__*/React.createElement(View, {
|
|
434
|
+
style: styles.errorContainer
|
|
435
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
436
|
+
style: styles.errorText
|
|
437
|
+
}, error)), pastedData.length > 0 && /*#__PURE__*/React.createElement(View, {
|
|
438
|
+
style: styles.previewContainer
|
|
439
|
+
}, /*#__PURE__*/React.createElement(Text, {
|
|
440
|
+
style: styles.previewTitle
|
|
441
|
+
}, "Data Preview"), /*#__PURE__*/React.createElement(Text, {
|
|
442
|
+
style: styles.previewText,
|
|
443
|
+
numberOfLines: 5
|
|
444
|
+
}, pastedData.substring(0, 500), pastedData.length > 500 ? '...' : ''), /*#__PURE__*/React.createElement(Text, {
|
|
445
|
+
style: styles.previewInfo
|
|
446
|
+
}, pastedData.length.toLocaleString(), " characters"))), /*#__PURE__*/React.createElement(View, {
|
|
447
|
+
style: styles.footer
|
|
448
|
+
}, /*#__PURE__*/React.createElement(TouchableOpacity, {
|
|
449
|
+
style: [styles.submitButton, (!pastedData.trim() || isLoading) && styles.submitButtonDisabled],
|
|
450
|
+
onPress: handleSubmit,
|
|
451
|
+
disabled: !pastedData.trim() || isLoading
|
|
452
|
+
}, isLoading ? /*#__PURE__*/React.createElement(ActivityIndicator, {
|
|
453
|
+
color: "#FFFFFF",
|
|
454
|
+
size: "small"
|
|
455
|
+
}) : /*#__PURE__*/React.createElement(Text, {
|
|
456
|
+
style: styles.submitButtonText
|
|
457
|
+
}, "Import Conversations")))));
|
|
458
|
+
};
|
|
459
|
+
const styles = StyleSheet.create({
|
|
460
|
+
container: {
|
|
461
|
+
flex: 1,
|
|
462
|
+
backgroundColor: COLORS.surface
|
|
463
|
+
},
|
|
464
|
+
header: {
|
|
465
|
+
flexDirection: 'row',
|
|
466
|
+
alignItems: 'center',
|
|
467
|
+
justifyContent: 'space-between',
|
|
468
|
+
paddingHorizontal: 16,
|
|
469
|
+
paddingTop: Platform.OS === 'ios' ? 12 : 16,
|
|
470
|
+
paddingBottom: 12,
|
|
471
|
+
borderBottomWidth: 1,
|
|
472
|
+
borderBottomColor: '#E5E7EB' // grey200
|
|
473
|
+
},
|
|
474
|
+
headerTitle: {
|
|
475
|
+
fontSize: 17,
|
|
476
|
+
fontWeight: '600',
|
|
477
|
+
color: COLORS.grey800,
|
|
478
|
+
fontFamily: 'IBM Plex Sans'
|
|
479
|
+
},
|
|
480
|
+
closeButton: {
|
|
481
|
+
width: 60
|
|
482
|
+
},
|
|
483
|
+
closeButtonText: {
|
|
484
|
+
fontSize: 16,
|
|
485
|
+
color: '#3B82F6',
|
|
486
|
+
fontFamily: 'Inter'
|
|
487
|
+
},
|
|
488
|
+
content: {
|
|
489
|
+
flex: 1
|
|
490
|
+
},
|
|
491
|
+
contentContainer: {
|
|
492
|
+
padding: 20,
|
|
493
|
+
paddingBottom: 40
|
|
494
|
+
},
|
|
495
|
+
instructionsContainer: {
|
|
496
|
+
backgroundColor: '#F0F9FF',
|
|
497
|
+
borderRadius: 12,
|
|
498
|
+
padding: 16,
|
|
499
|
+
marginBottom: 20
|
|
500
|
+
},
|
|
501
|
+
instructionsText: {
|
|
502
|
+
fontSize: 14,
|
|
503
|
+
lineHeight: 20,
|
|
504
|
+
color: '#0369A1',
|
|
505
|
+
fontFamily: 'Inter'
|
|
506
|
+
},
|
|
507
|
+
tabContainer: {
|
|
508
|
+
flexDirection: 'row',
|
|
509
|
+
backgroundColor: '#F3F4F6',
|
|
510
|
+
// grey100
|
|
511
|
+
borderRadius: 10,
|
|
512
|
+
padding: 4,
|
|
513
|
+
marginBottom: 20
|
|
514
|
+
},
|
|
515
|
+
tab: {
|
|
516
|
+
flex: 1,
|
|
517
|
+
paddingVertical: 10,
|
|
518
|
+
borderRadius: 8,
|
|
519
|
+
alignItems: 'center'
|
|
520
|
+
},
|
|
521
|
+
tabActive: {
|
|
522
|
+
backgroundColor: '#FFFFFF',
|
|
523
|
+
shadowColor: '#000',
|
|
524
|
+
shadowOffset: {
|
|
525
|
+
width: 0,
|
|
526
|
+
height: 1
|
|
527
|
+
},
|
|
528
|
+
shadowOpacity: 0.1,
|
|
529
|
+
shadowRadius: 2,
|
|
530
|
+
elevation: 2
|
|
531
|
+
},
|
|
532
|
+
tabText: {
|
|
533
|
+
fontSize: 14,
|
|
534
|
+
fontWeight: '500',
|
|
535
|
+
color: COLORS.grey500,
|
|
536
|
+
fontFamily: 'Inter'
|
|
537
|
+
},
|
|
538
|
+
tabTextActive: {
|
|
539
|
+
color: COLORS.grey800
|
|
540
|
+
},
|
|
541
|
+
tabDisabled: {
|
|
542
|
+
opacity: 0.5
|
|
543
|
+
},
|
|
544
|
+
tabTextDisabled: {
|
|
545
|
+
color: COLORS.grey400
|
|
546
|
+
},
|
|
547
|
+
inputContainer: {
|
|
548
|
+
marginBottom: 20
|
|
549
|
+
},
|
|
550
|
+
textInput: {
|
|
551
|
+
backgroundColor: '#FFFFFF',
|
|
552
|
+
borderWidth: 1,
|
|
553
|
+
borderColor: COLORS.grey300,
|
|
554
|
+
borderRadius: 12,
|
|
555
|
+
padding: 16,
|
|
556
|
+
minHeight: 200,
|
|
557
|
+
fontSize: 14,
|
|
558
|
+
fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',
|
|
559
|
+
color: COLORS.grey800
|
|
560
|
+
},
|
|
561
|
+
fileInputContainer: {
|
|
562
|
+
marginBottom: 20
|
|
563
|
+
},
|
|
564
|
+
filePickButton: {
|
|
565
|
+
backgroundColor: '#FFFFFF',
|
|
566
|
+
borderWidth: 2,
|
|
567
|
+
borderColor: COLORS.grey300,
|
|
568
|
+
borderStyle: 'dashed',
|
|
569
|
+
borderRadius: 12,
|
|
570
|
+
padding: 40,
|
|
571
|
+
alignItems: 'center',
|
|
572
|
+
justifyContent: 'center'
|
|
573
|
+
},
|
|
574
|
+
filePickIcon: {
|
|
575
|
+
fontSize: 40,
|
|
576
|
+
marginBottom: 12
|
|
577
|
+
},
|
|
578
|
+
filePickText: {
|
|
579
|
+
fontSize: 15,
|
|
580
|
+
color: COLORS.grey600,
|
|
581
|
+
fontFamily: 'Inter'
|
|
582
|
+
},
|
|
583
|
+
fileSelectedContainer: {
|
|
584
|
+
marginTop: 12,
|
|
585
|
+
backgroundColor: '#F0FDF4',
|
|
586
|
+
borderRadius: 8,
|
|
587
|
+
padding: 12
|
|
588
|
+
},
|
|
589
|
+
fileSelectedText: {
|
|
590
|
+
fontSize: 14,
|
|
591
|
+
color: '#166534',
|
|
592
|
+
fontFamily: 'Inter',
|
|
593
|
+
fontWeight: '500'
|
|
594
|
+
},
|
|
595
|
+
errorContainer: {
|
|
596
|
+
backgroundColor: '#FEF2F2',
|
|
597
|
+
borderRadius: 8,
|
|
598
|
+
padding: 12,
|
|
599
|
+
marginBottom: 16
|
|
600
|
+
},
|
|
601
|
+
errorText: {
|
|
602
|
+
fontSize: 14,
|
|
603
|
+
color: '#DC2626',
|
|
604
|
+
fontFamily: 'Inter'
|
|
605
|
+
},
|
|
606
|
+
previewContainer: {
|
|
607
|
+
backgroundColor: '#F3F4F6',
|
|
608
|
+
// grey100
|
|
609
|
+
borderRadius: 12,
|
|
610
|
+
padding: 16
|
|
611
|
+
},
|
|
612
|
+
previewTitle: {
|
|
613
|
+
fontSize: 14,
|
|
614
|
+
fontWeight: '600',
|
|
615
|
+
color: COLORS.grey800,
|
|
616
|
+
marginBottom: 8,
|
|
617
|
+
fontFamily: 'Inter'
|
|
618
|
+
},
|
|
619
|
+
previewText: {
|
|
620
|
+
fontSize: 12,
|
|
621
|
+
color: COLORS.grey600,
|
|
622
|
+
fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',
|
|
623
|
+
lineHeight: 18
|
|
624
|
+
},
|
|
625
|
+
previewInfo: {
|
|
626
|
+
fontSize: 12,
|
|
627
|
+
color: COLORS.grey500,
|
|
628
|
+
marginTop: 8,
|
|
629
|
+
fontFamily: 'Inter'
|
|
630
|
+
},
|
|
631
|
+
footer: {
|
|
632
|
+
padding: 20,
|
|
633
|
+
paddingBottom: Platform.OS === 'ios' ? 34 : 20,
|
|
634
|
+
borderTopWidth: 1,
|
|
635
|
+
borderTopColor: '#E5E7EB',
|
|
636
|
+
// grey200
|
|
637
|
+
backgroundColor: COLORS.surface
|
|
638
|
+
},
|
|
639
|
+
submitButton: {
|
|
640
|
+
backgroundColor: '#10B981',
|
|
641
|
+
borderRadius: 12,
|
|
642
|
+
paddingVertical: 16,
|
|
643
|
+
alignItems: 'center',
|
|
644
|
+
justifyContent: 'center'
|
|
645
|
+
},
|
|
646
|
+
submitButtonDisabled: {
|
|
647
|
+
backgroundColor: COLORS.grey300
|
|
648
|
+
},
|
|
649
|
+
submitButtonText: {
|
|
650
|
+
fontSize: 16,
|
|
651
|
+
fontWeight: '600',
|
|
652
|
+
color: '#FFFFFF',
|
|
653
|
+
fontFamily: 'Inter'
|
|
654
|
+
}
|
|
655
|
+
});
|
|
656
|
+
export default LLMDataInputModal;
|
|
657
|
+
//# sourceMappingURL=LLMDataInputModal.js.map
|