react-native-inapp-inspector 2.3.24 → 2.4.0

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 (207) hide show
  1. package/README.md +26 -5
  2. package/dist/commonjs/components/AnalyticsDetail.js +15 -12
  3. package/dist/commonjs/components/AnalyticsEventCard.js +11 -8
  4. package/dist/commonjs/components/AppHeaderLogo.js +4 -6
  5. package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -0
  6. package/dist/commonjs/components/ConsoleLogCard.js +92 -80
  7. package/dist/commonjs/components/EndOfListFooter.d.ts +5 -1
  8. package/dist/commonjs/components/EndOfListFooter.js +27 -5
  9. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +1 -1
  10. package/dist/commonjs/components/Inspector/AnalyticsTab.js +27 -299
  11. package/dist/commonjs/components/Inspector/ConsoleTab.js +36 -94
  12. package/dist/commonjs/components/Inspector/CrashDetail.js +11 -10
  13. package/dist/commonjs/components/Inspector/CrashTab.js +43 -33
  14. package/dist/commonjs/components/Inspector/DebuggingTab.js +13 -13
  15. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +107 -71
  16. package/dist/commonjs/components/Inspector/FabLauncher.js +8 -9
  17. package/dist/commonjs/components/Inspector/InspectorHeader.js +93 -70
  18. package/dist/commonjs/components/Inspector/LogDetail.js +10 -7
  19. package/dist/commonjs/components/Inspector/MainScreen.js +66 -30
  20. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +1 -1
  21. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +3 -3
  22. package/dist/commonjs/components/Inspector/NetworkDetail.js +29 -28
  23. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +1 -1
  24. package/dist/commonjs/components/Inspector/NetworkTab.js +87 -85
  25. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +3 -3
  26. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +21 -22
  27. package/dist/commonjs/components/Inspector/PushCard.d.ts +4 -0
  28. package/dist/commonjs/components/Inspector/PushCard.js +89 -0
  29. package/dist/commonjs/components/Inspector/PushDetail.d.ts +4 -0
  30. package/dist/commonjs/components/Inspector/PushDetail.js +190 -0
  31. package/dist/commonjs/components/Inspector/PushTab.d.ts +3 -0
  32. package/dist/commonjs/components/Inspector/PushTab.js +45 -0
  33. package/dist/commonjs/components/Inspector/ReduxDetail.js +16 -13
  34. package/dist/commonjs/components/Inspector/ReduxTab.js +109 -106
  35. package/dist/commonjs/components/Inspector/SettingsPanel.js +230 -134
  36. package/dist/commonjs/components/Inspector/StorageTab.js +55 -51
  37. package/dist/commonjs/components/Inspector/TabBar.js +30 -26
  38. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +2 -2
  39. package/dist/commonjs/components/JsonViewer.js +151 -159
  40. package/dist/commonjs/components/LogCard.js +34 -38
  41. package/dist/commonjs/components/LogSyntaxHighlighter.js +3 -3
  42. package/dist/commonjs/components/ModuleErrorBoundary.d.ts +24 -0
  43. package/dist/commonjs/components/ModuleErrorBoundary.js +33 -0
  44. package/dist/commonjs/components/NetworkIcons.d.ts +3 -3
  45. package/dist/commonjs/components/NetworkIcons.js +10 -6
  46. package/dist/commonjs/components/SegmentedTabs.d.ts +8 -2
  47. package/dist/commonjs/components/SegmentedTabs.js +11 -7
  48. package/dist/commonjs/components/ShareButton.d.ts +11 -0
  49. package/dist/commonjs/components/ShareButton.js +6 -0
  50. package/dist/commonjs/constants/index.js +1 -1
  51. package/dist/commonjs/constants/version.d.ts +1 -1
  52. package/dist/commonjs/constants/version.js +1 -1
  53. package/dist/commonjs/customHooks/crashHandler.js +4 -4
  54. package/dist/commonjs/customHooks/networkLogger.js +1 -2
  55. package/dist/commonjs/customHooks/pushNotificationLogger.d.ts +19 -0
  56. package/dist/commonjs/customHooks/pushNotificationLogger.js +1 -0
  57. package/dist/commonjs/helpers/index.d.ts +6 -0
  58. package/dist/commonjs/helpers/index.js +4 -4
  59. package/dist/commonjs/helpers/memoryManager.d.ts +2 -2
  60. package/dist/commonjs/helpers/memoryManager.js +1 -1
  61. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  62. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  63. package/dist/commonjs/helpers/settingsStore.js +1 -1
  64. package/dist/commonjs/helpers/shareFormatter.d.ts +13 -0
  65. package/dist/commonjs/helpers/shareFormatter.js +7 -0
  66. package/dist/commonjs/i18n/index.d.ts +35 -0
  67. package/dist/commonjs/i18n/index.js +1 -1
  68. package/dist/commonjs/i18n/locales/ar.json +1 -0
  69. package/dist/commonjs/i18n/locales/de.json +1 -0
  70. package/dist/commonjs/i18n/locales/en.json +1 -1
  71. package/dist/commonjs/i18n/locales/es.json +1 -0
  72. package/dist/commonjs/i18n/locales/fr.json +1 -0
  73. package/dist/commonjs/i18n/locales/hi.json +1 -0
  74. package/dist/commonjs/i18n/locales/ja.json +1 -0
  75. package/dist/commonjs/i18n/locales/ko.json +1 -0
  76. package/dist/commonjs/i18n/locales/pt.json +1 -0
  77. package/dist/commonjs/i18n/locales/ru.json +1 -0
  78. package/dist/commonjs/i18n/locales/zh.json +1 -0
  79. package/dist/commonjs/index.d.ts +6 -5
  80. package/dist/commonjs/index.js +4 -4
  81. package/dist/commonjs/push.d.ts +4 -0
  82. package/dist/commonjs/push.js +1 -0
  83. package/dist/commonjs/styles/AppColors.d.ts +40 -0
  84. package/dist/commonjs/styles/AppColors.js +1 -1
  85. package/dist/commonjs/styles/index.js +1 -1
  86. package/dist/commonjs/types/enums.d.ts +30 -20
  87. package/dist/commonjs/types/enums.js +1 -1
  88. package/dist/commonjs/types/index.d.ts +10 -0
  89. package/dist/commonjs/types/interfaces.d.ts +63 -7
  90. package/dist/esm/components/AnalyticsDetail.js +84 -81
  91. package/dist/esm/components/AnalyticsEventCard.js +20 -17
  92. package/dist/esm/components/AppHeaderLogo.js +5 -7
  93. package/dist/esm/components/ConsoleLogCard.d.ts +1 -0
  94. package/dist/esm/components/ConsoleLogCard.js +98 -86
  95. package/dist/esm/components/EndOfListFooter.d.ts +5 -1
  96. package/dist/esm/components/EndOfListFooter.js +36 -14
  97. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +14 -14
  98. package/dist/esm/components/Inspector/AnalyticsTab.js +44 -316
  99. package/dist/esm/components/Inspector/ConsoleTab.js +55 -113
  100. package/dist/esm/components/Inspector/CrashDetail.js +53 -52
  101. package/dist/esm/components/Inspector/CrashTab.js +74 -64
  102. package/dist/esm/components/Inspector/DebuggingTab.js +33 -33
  103. package/dist/esm/components/Inspector/DeviceInfoTab.js +174 -138
  104. package/dist/esm/components/Inspector/FabLauncher.js +41 -42
  105. package/dist/esm/components/Inspector/InspectorHeader.js +138 -115
  106. package/dist/esm/components/Inspector/LogDetail.js +24 -21
  107. package/dist/esm/components/Inspector/MainScreen.js +98 -62
  108. package/dist/esm/components/Inspector/MediaGalleryTab.js +1 -1
  109. package/dist/esm/components/Inspector/MediaPreviewModal.js +31 -31
  110. package/dist/esm/components/Inspector/NetworkDetail.js +88 -87
  111. package/dist/esm/components/Inspector/NetworkFilterModal.js +8 -8
  112. package/dist/esm/components/Inspector/NetworkTab.js +132 -130
  113. package/dist/esm/components/Inspector/NpmStarPrompt.js +42 -42
  114. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -46
  115. package/dist/esm/components/Inspector/PushCard.d.ts +4 -0
  116. package/dist/esm/components/Inspector/PushCard.js +89 -0
  117. package/dist/esm/components/Inspector/PushDetail.d.ts +4 -0
  118. package/dist/esm/components/Inspector/PushDetail.js +190 -0
  119. package/dist/esm/components/Inspector/PushTab.d.ts +3 -0
  120. package/dist/esm/components/Inspector/PushTab.js +45 -0
  121. package/dist/esm/components/Inspector/ReduxDetail.js +40 -37
  122. package/dist/esm/components/Inspector/ReduxTab.js +155 -152
  123. package/dist/esm/components/Inspector/SettingsPanel.js +380 -284
  124. package/dist/esm/components/Inspector/StorageTab.js +177 -173
  125. package/dist/esm/components/Inspector/TabBar.js +38 -34
  126. package/dist/esm/components/Inspector/UpdateAvailableModal.js +1 -1
  127. package/dist/esm/components/JsonViewer.js +161 -169
  128. package/dist/esm/components/LogCard.js +38 -42
  129. package/dist/esm/components/LogSyntaxHighlighter.js +1 -1
  130. package/dist/esm/components/ModuleErrorBoundary.d.ts +24 -0
  131. package/dist/esm/components/ModuleErrorBoundary.js +33 -0
  132. package/dist/esm/components/NetworkIcons.d.ts +3 -3
  133. package/dist/esm/components/NetworkIcons.js +7 -3
  134. package/dist/esm/components/SegmentedTabs.d.ts +8 -2
  135. package/dist/esm/components/SegmentedTabs.js +12 -8
  136. package/dist/esm/components/ShareButton.d.ts +11 -0
  137. package/dist/esm/components/ShareButton.js +6 -0
  138. package/dist/esm/constants/index.js +1 -1
  139. package/dist/esm/constants/version.d.ts +1 -1
  140. package/dist/esm/constants/version.js +1 -1
  141. package/dist/esm/customHooks/crashHandler.js +6 -6
  142. package/dist/esm/customHooks/networkLogger.js +1 -2
  143. package/dist/esm/customHooks/pushNotificationLogger.d.ts +19 -0
  144. package/dist/esm/customHooks/pushNotificationLogger.js +1 -0
  145. package/dist/esm/helpers/index.d.ts +6 -0
  146. package/dist/esm/helpers/index.js +4 -4
  147. package/dist/esm/helpers/memoryManager.d.ts +2 -2
  148. package/dist/esm/helpers/memoryManager.js +1 -1
  149. package/dist/esm/helpers/remoteConfig.js +1 -1
  150. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  151. package/dist/esm/helpers/settingsStore.js +1 -1
  152. package/dist/esm/helpers/shareFormatter.d.ts +13 -0
  153. package/dist/esm/helpers/shareFormatter.js +7 -0
  154. package/dist/esm/i18n/index.d.ts +35 -0
  155. package/dist/esm/i18n/index.js +1 -1
  156. package/dist/esm/i18n/locales/ar.json +1 -0
  157. package/dist/esm/i18n/locales/de.json +1 -0
  158. package/dist/esm/i18n/locales/en.json +1 -1
  159. package/dist/esm/i18n/locales/es.json +1 -0
  160. package/dist/esm/i18n/locales/fr.json +1 -0
  161. package/dist/esm/i18n/locales/hi.json +1 -0
  162. package/dist/esm/i18n/locales/ja.json +1 -0
  163. package/dist/esm/i18n/locales/ko.json +1 -0
  164. package/dist/esm/i18n/locales/pt.json +1 -0
  165. package/dist/esm/i18n/locales/ru.json +1 -0
  166. package/dist/esm/i18n/locales/zh.json +1 -0
  167. package/dist/esm/index.d.ts +6 -5
  168. package/dist/esm/index.js +7 -7
  169. package/dist/esm/push.d.ts +4 -0
  170. package/dist/esm/push.js +1 -0
  171. package/dist/esm/styles/AppColors.d.ts +40 -0
  172. package/dist/esm/styles/AppColors.js +1 -1
  173. package/dist/esm/styles/index.js +1 -1
  174. package/dist/esm/types/enums.d.ts +30 -20
  175. package/dist/esm/types/enums.js +1 -1
  176. package/dist/esm/types/index.d.ts +10 -0
  177. package/dist/esm/types/interfaces.d.ts +63 -7
  178. package/package.json +53 -24
  179. package/src/native/NativeInspector.ts +0 -1
  180. package/dist/commonjs/bundle.d.ts +0 -2
  181. package/dist/commonjs/bundle.js +0 -1
  182. package/dist/commonjs/components/BrandSquareIcon.d.ts +0 -5
  183. package/dist/commonjs/components/BrandSquareIcon.js +0 -112
  184. package/dist/commonjs/components/Inspector/BundleTab.d.ts +0 -48
  185. package/dist/commonjs/components/Inspector/BundleTab.js +0 -1297
  186. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +0 -27
  187. package/dist/commonjs/components/Inspector/PerformanceTab.js +0 -454
  188. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -115
  189. package/dist/commonjs/customHooks/bundleAnalyzer.js +0 -1
  190. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -144
  191. package/dist/commonjs/customHooks/performanceTracker.js +0 -63
  192. package/dist/commonjs/performance.d.ts +0 -2
  193. package/dist/commonjs/performance.js +0 -1
  194. package/dist/esm/bundle.d.ts +0 -2
  195. package/dist/esm/bundle.js +0 -1
  196. package/dist/esm/components/BrandSquareIcon.d.ts +0 -5
  197. package/dist/esm/components/BrandSquareIcon.js +0 -112
  198. package/dist/esm/components/Inspector/BundleTab.d.ts +0 -48
  199. package/dist/esm/components/Inspector/BundleTab.js +0 -1297
  200. package/dist/esm/components/Inspector/PerformanceTab.d.ts +0 -27
  201. package/dist/esm/components/Inspector/PerformanceTab.js +0 -454
  202. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -115
  203. package/dist/esm/customHooks/bundleAnalyzer.js +0 -1
  204. package/dist/esm/customHooks/performanceTracker.d.ts +0 -144
  205. package/dist/esm/customHooks/performanceTracker.js +0 -63
  206. package/dist/esm/performance.d.ts +0 -2
  207. package/dist/esm/performance.js +0 -1
@@ -1,190 +1,189 @@
1
- import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";import{Alert as W,Animated as Ee,DevSettings as Oe,Platform as je,ScrollView as A,StatusBar as ao,StyleSheet as rr,Text as S,TextInput as Co,View as C}from"react-native";import So,{Path as Cr}from"react-native-svg";import{animateNextLayout as Q,useInspector as To}from"./InspectorContext";import H from"../TouchableScale";import Vo from"../Slider";import{toggleGlobalTheme as Bo}from"../../styles";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as k}from"../../styles/AppFonts";import{isPersistentStorageAvailable as zo,calculateRamBasedLimits as Ro}from"../../helpers/settingsStore";import{clearNetworkLogs as vo}from"../../customHooks/networkLogger";import{clearConsoleLogs as Ho}from"../../customHooks/consoleLogger";import{clearAnalyticsEvents as Do}from"../../customHooks/analyticsLogger";import{clearCrashRecords as Lo}from"../../customHooks/crashHandler";import{clearCachedBundleAnalysis as Io}from"../../customHooks/bundleAnalyzer";import{clearPerformanceEvents as Fo}from"../../customHooks/performanceTracker";import{isReduxConnected as Wo}from"../../customHooks/reduxLogger";import{isAnalyticsConnected as Ao}from"../../customHooks/analyticsLogger";import{useTranslation as Po}from"../../i18n";import{SignalIcon as Z,TerminalIcon as Ne,AnalyticsIcon as Ge,SettingsIcon as $o,SunIcon as Mo,MoonIcon as Eo,ScreenIcon as Sr,MotionIcon as Oo,LayersIcon as Ce,EyeIcon as Tr,CheckIcon as N,TrashIcon as P,PackageIcon as Se,ReduxIcon as Ue,PerformanceIcon as Je,CrashIcon as Vr,ShieldAlertIcon as Br,ForwardChevronIcon as No,ChevronDownIcon as Go,BrainIcon as Rr,SmartphoneIcon as Uo,DatabaseIcon as Jo,QrCodeIcon as _o,FilmIcon as Ko,ScreencastIcon as Qo,CameraIcon as Hr,VideoCameraIcon as Xo,MicrophoneIcon as Yo,GifIcon as Zo,ImageIcon as Ct}from"../NetworkIcons";import{ScreenCapture as xt}from"../../capture";import{isLocalDebugEnvironment as kt}from"../../helpers";import{showToast as Dr}from"../../helpers/toast";import{pruneAllLogs as St}from"../../helpers/memoryManager";const Tt=()=>{const{t:x}=Po(),{settingsPage:F,setSettingsPage:Te,settingsActiveSubTab:G,setSettingsActiveSubTab:Lr,tabVisibility:T,toggleTabVisibility:Ir,defaultTab:U,setDefaultTab:Fr,isDark:J,setIsDark:Wr,modalHeightPercent:_,setModalHeightPercent:Ar,modalAnimationType:Pr,setModalAnimationType:$r,showDuplicateLogs:Ve,setShowDuplicateLogs:Mr,showUpdateToast:Be,setShowUpdateToast:Er,showConsoleLevels:Or,setShowConsoleLevels:jr,resetToDefaults:Vt,closeModal:Nr,storage:Bt,logs:ze,consoleLogs:Re,analyticsEvents:ve,reduxState:He,maxNetworkLogs:De,setMaxNetworkLogs:Gr,maxConsoleLogs:Le,setMaxConsoleLogs:Ur,maxAnalyticsEventsLimit:_e,setMaxAnalyticsEventsLimit:qr,isAutoRamLimitEnabled:R,setIsAutoRamLimitEnabled:Jr,deviceFreeRamMb:Ie,reduxAutoRefresh:Fe,setReduxAutoRefreshState:_r,reduxExpandDepth:Ke,setReduxExpandDepth:Kr,switchActiveTab:zt,setSelected:Qr,setSelectedEvent:Xr,setReduxState:Yr,crashRecords:We,maxCrashLogs:Qe,setMaxCrashLogs:Zr,updateAvailable:Rt,latestNpmVersion:vt}=To(),[X,Xe]=$e(_);Me(()=>{Xe(_)},[_]);const K=Ro(Ie),Ht=zo(),eo=je.OS==="android"?ao.currentHeight||24:44,Dt=_>=95?eo:0,L=er(()=>[{id:1,key:"apis",label:"APIs (Network)",category:"core",icon:"apis",desc:"HTTP/HTTPS requests, GraphQL, Axios & WebSocket inspector"},{id:2,key:"logs",label:"Console Logs",category:"core",icon:"logs",desc:"Terminal console logs, warnings, errors & stack traces"},{id:3,key:"analytics",label:"Analytics Logger",category:"telemetry",icon:"analytics",desc:"Firebase & custom analytics events, user properties & params"},{id:4,key:"redux",label:"Redux Inspector",category:"telemetry",icon:"redux",desc:"Store state diffing, action history & reducer timeline"},{id:5,key:"storage",label:"Storage Inspector",category:"telemetry",icon:"storage",desc:"AsyncStorage & MMKV key-value store viewer with full CRUD support"},{id:6,key:"device",label:"Device Info",category:"diagnostic",icon:"device",desc:"Hardware specs, IP address, screen metrics, UDID & runtime stats"},{id:7,key:"crash",label:"Crash Protection",category:"diagnostic",icon:"crash",desc:"Runtime exception guard, breadcrumbs & memory snapshot"},{id:8,key:"bundle",label:"Bundle Analyzer",category:"diagnostic",icon:"bundle",desc:"Metro packager dependencies, source maps & asset breakdown"},{id:9,key:"performance",label:"Performance & Tracker",category:"diagnostic",icon:"performance",desc:"60 FPS monitor, Hermes memory telemetry & re-render profiler"},{id:10,key:"debugging",label:"Multi-Device Debugging",category:"diagnostic",icon:"debugging",desc:"QR Code bridge for direct Debug APK download & Metro live-reload sync"},{id:11,key:"media",label:"Screencast",category:"diagnostic",icon:"media",desc:"Screenshots, video recordings, audio narration & animated GIFs"}].filter(r=>r.key==="debugging"?je.OS==="android"&&kt():!0),[]),[M,Ae]=$e(()=>({apis:!0,logs:!!T?.logs,analytics:!!T?.analytics,redux:!!T?.redux,storage:!!T?.storage,device:!!T?.device,crash:!!T?.crash,bundle:!!T?.bundle,performance:!!T?.performance,debugging:!!T?.debugging,media:!!(T?.media??!0)}));Me(()=>{Ae({apis:!0,logs:!!T?.logs,analytics:!!T?.analytics,redux:!!T?.redux,storage:!!T?.storage,device:!!T?.device,crash:!!T?.crash,bundle:!!T?.bundle,performance:!!T?.performance,debugging:!!T?.debugging,media:!!(T?.media??!0)})},[T]);const q=er(()=>L.some(r=>!!M[r.key]!=!!T?.[r.key]),[M,T,L]),ro=L.filter(r=>r.key==="apis"||!!M[r.key]).length,oo=()=>{q&&W.alert("Apply Changes & Reload","Are you sure you want to save module changes? The inspector will close and reload the app to apply the new configuration.",[{text:"Cancel",style:"cancel",onPress:()=>{Ae({apis:!0,logs:!!T?.logs,analytics:!!T?.analytics,redux:!!T?.redux,storage:!!T?.storage,device:!!T?.device,crash:!!T?.crash,bundle:!!T?.bundle,performance:!!T?.performance,debugging:!!T?.debugging,media:!!(T?.media??!0)})}},{text:"Save & Reload",style:"default",onPress:()=>{Q(),L.forEach(r=>{if(r.key!=="apis"){const V=!!M[r.key],D=!!T?.[r.key];V!==D&&Ir(r.key)}}),Nr(),setTimeout(()=>{__DEV__&&Oe&&Oe.reload&&Oe.reload()},350)}}])},[Pe,Ye]=$e(!1),Lt=()=>{Q(),Te("main")},z=r=><C style={{paddingVertical:12,borderBottomWidth:r.isLast?0:1,borderBottomColor:e.dividerColor}}>
2
- <H disabled={!r.onPress}onPress={r.onPress}style={{flexDirection:"row",alignItems:"center",gap:12}}>
1
+ import{useMemo as Qe,useState as G,useEffect as Re,useRef as yo}from"react";import{Alert as O,Animated as Fe,DevSettings as He,Platform as Xe,ScrollView as M,StyleSheet as Ye,Text as S,TextInput as Co,View as C}from"react-native";import So,{Path as Ze}from"react-native-svg";import{animateNextLayout as ie,useInspector as ko}from"./InspectorContext";import V from"../TouchableScale";import To from"../Slider";import{toggleGlobalTheme as Vo}from"../../styles";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as x}from"../../styles/AppFonts";import{calculateRamBasedLimits as Bo}from"../../helpers/settingsStore";import{clearNetworkLogs as zo}from"../../customHooks/networkLogger";import{clearConsoleLogs as Ro}from"../../customHooks/consoleLogger";import{clearAnalyticsEvents as Fo}from"../../customHooks/analyticsLogger";import{clearCrashRecords as Ho}from"../../customHooks/crashHandler";import{isReduxConnected as Io}from"../../customHooks/reduxLogger";import{isAnalyticsConnected as vo}from"../../customHooks/analyticsLogger";import{useTranslation as Do}from"../../i18n";import{SignalIcon as Cr,TerminalIcon as Sr,AnalyticsIcon as Tr,SettingsIcon as Po,SunIcon as $o,MoonIcon as Lo,ScreenIcon as Vr,MotionIcon as Wo,LayersIcon as Q,EyeIcon as Ie,CheckIcon as U,TrashIcon as E,PackageIcon as Ao,ReduxIcon as Br,CrashIcon as Oo,ShieldAlertIcon as Rr,ForwardChevronIcon as Mo,ChevronDownIcon as Eo,BrainIcon as Fr,SmartphoneIcon as No,DatabaseIcon as Go,QrCodeIcon as Uo,FilmIcon as Hr,ScreencastIcon as Jo,CameraIcon as Ce,VideoCameraIcon as Ir,MicrophoneIcon as Dr,GifIcon as Pr,ImageIcon as $r,BellIcon as Lr}from"../NetworkIcons";import{ScreenCapture as ve}from"../../capture";import{triggerNativeHaptic as H}from"../../native/NativeInspector";import{isLocalDebugEnvironment as Ko}from"../../helpers";import{showToast as R}from"../../helpers/toast";import{pruneAllLogs as _o}from"../../helpers/memoryManager";const Qo=()=>{const{t:w}=Do(),{settingsPage:A,setSettingsPage:De,settingsActiveSubTab:q,setSettingsActiveSubTab:Wr,tabVisibility:T,toggleTabVisibility:Ar,defaultTab:J,setDefaultTab:Or,isDark:_,setIsDark:Mr,modalHeightPercent:X,setModalHeightPercent:Er,modalAnimationType:Nr,setModalAnimationType:Gr,showDuplicateLogs:we,setShowDuplicateLogs:jr,showUpdateToast:xe,setShowUpdateToast:Ur,showConsoleLevels:qr,setShowConsoleLevels:Jr,closeModal:Kr,logs:Pe,consoleLogs:$e,analyticsEvents:Le,reduxState:We,maxConsoleLogs:Se,setMaxConsoleLogs:_r,maxAnalyticsEventsLimit:Ae,setMaxAnalyticsEventsLimit:Qr,isAutoRamLimitEnabled:I,setIsAutoRamLimitEnabled:Xr,deviceFreeRamMb:ke,reduxAutoRefresh:Te,setReduxAutoRefreshState:Yr,reduxExpandDepth:Oe,setReduxExpandDepth:Zr,setSelected:eo,setSelectedEvent:ro,setReduxState:oo,crashRecords:Me,maxCrashLogs:Ee,setMaxCrashLogs:to,pushRecords:io,maxPushLogs:lo,setMaxPushLogs:ao,clearAllPushLogs:no,simulatePush:Y}=ko(),[Z,Ne]=G(X),[Ve,Ge]=G("PNG"),[P,ee]=G(!0),[je,Ue]=G("Muted"),[qe,Je]=G("30"),[L,re]=G(!0);Re(()=>{Ne(X)},[X]);const oe=Bo(ke),$=Qe(()=>[{id:1,key:"apis",label:"APIs (Network)",category:"core",icon:"apis",desc:"HTTP/HTTPS requests, GraphQL, Axios & WebSocket inspector"},{id:2,key:"logs",label:"Console Logs",category:"core",icon:"logs",desc:"Terminal console logs, warnings, errors & stack traces"},{id:3,key:"analytics",label:"Analytics Logger",category:"telemetry",icon:"analytics",desc:"Firebase & custom analytics events, user properties & params"},{id:4,key:"redux",label:"Redux Inspector",category:"telemetry",icon:"redux",desc:"Store state diffing, action history & reducer timeline"},{id:5,key:"storage",label:"Storage Inspector",category:"telemetry",icon:"storage",desc:"AsyncStorage & MMKV key-value store viewer with full CRUD support"},{id:6,key:"device",label:"Device Info",category:"diagnostic",icon:"device",desc:"Hardware specs, IP address, screen metrics, UDID & runtime stats"},{id:7,key:"crash",label:"Crash Protection",category:"diagnostic",icon:"crash",desc:"Runtime exception guard, breadcrumbs & memory snapshot"},{id:8,key:"debugging",label:"Multi-Device Debugging",category:"diagnostic",icon:"debugging",desc:"QR Code bridge for direct Debug APK download & Metro live-reload sync"},{id:9,key:"media",label:"Screencast",category:"diagnostic",icon:"media",desc:"Screenshots, video recordings, audio narration & animated GIFs"},{id:10,key:"push",label:"Push Notifications",category:"telemetry",icon:"push",desc:"Universal push & local notification logger (Salesforce, FCM, APNs, Braze, Expo)"}].filter(r=>r.key==="debugging"?Xe.OS==="android"&&Ko():!0),[]),[j,Be]=G(()=>({apis:!0,logs:!!T?.logs,analytics:!!T?.analytics,redux:!!T?.redux,storage:!!T?.storage,device:!!T?.device,crash:!!T?.crash,debugging:!!T?.debugging,media:!!(T?.media??!0),push:!!(T?.push??!0)}));Re(()=>{Be({apis:!0,logs:!!T?.logs,analytics:!!T?.analytics,redux:!!T?.redux,storage:!!T?.storage,device:!!T?.device,crash:!!T?.crash,debugging:!!T?.debugging,media:!!(T?.media??!0),push:!!(T?.push??!0)})},[T]);const K=Qe(()=>$.some(r=>!!j[r.key]!=!!T?.[r.key]),[j,T,$]),so=$.filter(r=>r.key==="apis"||!!j[r.key]).length,co=()=>{K&&O.alert("Apply Changes & Reload","Are you sure you want to save module changes? The inspector will close and reload the app to apply the new configuration.",[{text:"Cancel",style:"cancel",onPress:()=>{Be({apis:!0,logs:!!T?.logs,analytics:!!T?.analytics,redux:!!T?.redux,storage:!!T?.storage,device:!!T?.device,crash:!!T?.crash,debugging:!!T?.debugging,media:!!(T?.media??!0),push:!!(T?.push??!0)})}},{text:"Save & Reload",style:"default",onPress:()=>{ie(),$.forEach(r=>{if(r.key!=="apis"){const k=!!j[r.key],D=!!T?.[r.key];k!==D&&Ar(r.key)}}),Kr(),setTimeout(()=>{__DEV__&&He&&He.reload&&He.reload()},350)}}])},[ze,Ke]=G(!1),z=r=><C style={{paddingVertical:12,borderBottomWidth:r.isLast?0:1,borderBottomColor:e.dividerColor}}>
2
+ <V disabled={!r.onPress}onPress={r.onPress}style={{flexDirection:"row",alignItems:"center",gap:12}}>
3
3
  <C style={{width:36,height:36,borderRadius:10,backgroundColor:e.purpleShade50,borderWidth:1,borderColor:`${e.purple}2E`,alignItems:"center",justifyContent:"center"}}>
4
4
  {r.icon}
5
5
  </C>
6
6
  <C style={{flex:1}}>
7
- <S style={{fontFamily:k.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
7
+ <S style={{fontFamily:x.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
8
8
  {r.label}
9
9
  </S>
10
- {r.description?<S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
10
+ {r.description?<S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
11
11
  {r.description}
12
12
  </S>:null}
13
13
  </C>
14
14
  {r.right||null}
15
- </H>
15
+ </V>
16
16
  {r.numericInput&&<C style={{marginTop:10,gap:6}}>
17
17
  <C style={{flexDirection:"row",alignItems:"center",backgroundColor:e.grayBackground,borderRadius:8,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:12,paddingVertical:4}}>
18
- <Co style={{flex:1,fontFamily:k.interMedium,fontSize:14,lineHeight:18,color:e.primaryBlack,paddingVertical:6}}value={String(r.numericInput.value||"")}onChangeText={V=>{const D=parseInt(V.replace(/[^0-9]/g,""),10);if(!isNaN(D)){const v=Math.max(r.numericInput?.min??1,Math.min(r.numericInput?.max??1e4,D));r.numericInput?.onChange(v)}}}keyboardType={r.numericInput.keyboardType??"number-pad"}placeholder={r.numericInput.placeholder}placeholderTextColor={e.grayTextWeak}maxLength={6}selectTextOnFocus/>
19
- <S style={{fontFamily:k.interBold,fontSize:11,color:e.purple,marginLeft:6}}>
18
+ <Co style={{flex:1,fontFamily:x.interMedium,fontSize:14,lineHeight:18,color:e.primaryBlack,paddingVertical:6}}value={String(r.numericInput.value||"")}onChangeText={k=>{const D=parseInt(k.replace(/[^0-9]/g,""),10);if(!isNaN(D)){const F=Math.max(r.numericInput?.min??1,Math.min(r.numericInput?.max??1e4,D));r.numericInput?.onChange(F)}}}keyboardType={r.numericInput.keyboardType??"number-pad"}placeholder={r.numericInput.placeholder}placeholderTextColor={e.grayTextWeak}maxLength={6}selectTextOnFocus/>
19
+ <S style={{fontFamily:x.interBold,fontSize:11,color:e.purple,marginLeft:6}}>
20
20
  MAX
21
21
  </S>
22
22
  </C>
23
- {r.numericInput.min!==void 0||r.numericInput.max!==void 0?<S style={{fontFamily:k.interRegular,fontSize:10,lineHeight:13,color:e.grayTextWeak}}>
23
+ {r.numericInput.min!==void 0||r.numericInput.max!==void 0?<S style={{fontFamily:x.interRegular,fontSize:10,lineHeight:13,color:e.grayTextWeak}}>
24
24
  Range: {r.numericInput.min??1} -{" "}
25
25
  {r.numericInput.max??"\u221E"}
26
26
  </S>:null}
27
27
  </C>}
28
28
  {r.picker&&<C style={{flexDirection:"row",backgroundColor:e.grayBackground,borderRadius:8,padding:2.5,marginTop:10,borderWidth:1,borderColor:e.dividerColor}}>
29
- {r.picker.options.map(V=>{const D=r.picker.selectedValue===V;return<H key={String(V)}onPress={()=>r.picker.onSelect(V)}style={{flex:1,paddingVertical:6,alignItems:"center",borderRadius:6,backgroundColor:D?e.purple:"transparent"}}>
30
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:D?e.white:e.grayText}}>
31
- {r.picker.formatLabel?r.picker.formatLabel(V):V}
29
+ {r.picker.options.map(k=>{const D=r.picker.selectedValue===k;return<V key={String(k)}onPress={()=>r.picker.onSelect(k)}style={{flex:1,paddingVertical:6,alignItems:"center",borderRadius:6,backgroundColor:D?e.purple:"transparent"}}>
30
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:D?e.white:e.grayText}}>
31
+ {r.picker.formatLabel?r.picker.formatLabel(k):k}
32
32
  </S>
33
- </H>})}
33
+ </V>})}
34
34
  </C>}
35
- </C>,to=()=><C style={{flex:1,backgroundColor:e.grayBackground}}>
36
- <A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:14}}showsVerticalScrollIndicator={!1}>
35
+ </C>,go=()=><C style={{flex:1,backgroundColor:e.grayBackground}}>
36
+ <M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:14}}showsVerticalScrollIndicator={!1}>
37
37
 
38
38
 
39
39
  <C style={{backgroundColor:e.primaryLight,borderRadius:13,paddingVertical:4,paddingHorizontal:4,borderWidth:1,borderColor:e.grayBorderSecondary,shadowColor:e.black,shadowOpacity:.04,shadowRadius:4,shadowOffset:{width:0,height:2}}}>
40
- <A horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:2}}>
41
- {[{key:"module",label:x("settings.modulesAndTools","Modules & Tools"),Icon:Ce,badge:`${L.filter(r=>M?.[r.key]||r.key==="apis").length}/${L.length}`},{key:"ui",label:x("settings.uiPreferences","UI Preferences"),Icon:Sr},{key:"limits",label:x("settings.ramLimits","RAM & Limits"),Icon:Rr},{key:"capture",label:x("settings.screenVideoCapture","Screen & Video Capture"),Icon:Hr}].map(r=>{const V=G===r.key,D=r.Icon;return<H key={r.key}accessible={!0}accessibilityRole="tab"accessibilityLabel={r.label}accessibilityState={{selected:V}}onPress={()=>{Q(),Lr(r.key)}}style={{paddingVertical:8,paddingHorizontal:14,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,borderRadius:9,backgroundColor:V?e.purple:"transparent"}}>
42
- <D color={V?e.white:e.grayText}size={13}/>
43
- <S style={{fontFamily:k.interBold,fontSize:12.5,lineHeight:16,color:V?e.white:e.grayText}}>
40
+ <M horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:2}}>
41
+ {[{key:"module",label:w("settings.modulesAndTools","Modules & Tools"),Icon:Q,badge:`${$.filter(r=>j?.[r.key]||r.key==="apis").length}/${$.length}`},{key:"ui",label:w("settings.uiPreferences","UI Preferences"),Icon:Vr},{key:"limits",label:w("settings.ramLimits","RAM & Limits"),Icon:Fr},{key:"capture",label:w("settings.screenVideoCapture","Screen & Video Capture"),Icon:Ce}].map(r=>{const k=q===r.key,D=r.Icon;return<V key={r.key}accessible={!0}accessibilityRole="tab"accessibilityLabel={r.label}accessibilityState={{selected:k}}onPress={()=>{ie(),Wr(r.key)}}style={{paddingVertical:8,paddingHorizontal:14,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,borderRadius:9,backgroundColor:k?e.purple:"transparent"}}>
42
+ <D color={k?e.white:e.grayText}size={13}/>
43
+ <S style={{fontFamily:x.interBold,fontSize:12.5,lineHeight:16,color:k?e.white:e.grayText}}>
44
44
  {r.label}
45
45
  </S>
46
- {r.badge&&<C style={{backgroundColor:V?"rgba(255,255,255,0.25)":`${e.purple}18`,paddingHorizontal:5.5,paddingVertical:1,borderRadius:10}}>
47
- <S style={{fontFamily:k.interBold,fontSize:9.5,color:V?e.white:e.purple}}>
46
+ {r.badge&&<C style={{backgroundColor:k?"rgba(255,255,255,0.25)":`${e.purple}18`,paddingHorizontal:5.5,paddingVertical:1,borderRadius:10}}>
47
+ <S style={{fontFamily:x.interBold,fontSize:9.5,color:k?e.white:e.purple}}>
48
48
  {r.badge}
49
49
  </S>
50
50
  </C>}
51
- </H>})}
52
- </A>
51
+ </V>})}
52
+ </M>
53
53
  </C>
54
54
 
55
- {G==="module"&&<C style={{gap:12}}>
55
+ {q==="module"&&<C style={{gap:12}}>
56
56
 
57
57
  <C style={{gap:10}}>
58
- {L.map(r=>{const V=Wo(),D=Ao(),v=r.key==="redux"&&!V||r.key==="analytics"&&!D,I=r.key==="apis"||v,B=r.key==="apis"||!!M?.[r.key]&&!v,io=r.key==="apis"?`${ze.length} requests \u2022 Limit: ${De}`:r.key==="logs"?`${Re.length} logs \u2022 Limit: ${Le}`:r.key==="performance"?"60 FPS Target \u2022 Memory Telemetry":r.key==="bundle"?"Metro Packager \u2022 Dependency Map":r.key==="crash"?`${We?.length||0} crashes recorded \u2022 Crash Guard`:r.key==="analytics"?`${ve.length} events logged`:r.key==="redux"?`${Object.keys(He||{}).length} slices \u2022 Depth: ${Ke}`:"";return<C key={r.key}style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1.5,borderColor:B?`${e.purple}38`:e.grayBorderSecondary,padding:14,gap:10,shadowColor:e.black,shadowOpacity:B?.04:.02,shadowRadius:5,shadowOffset:{width:0,height:2}}}>
58
+ {$.map(r=>{const k=Io(),D=vo(),F=r.key==="redux"&&!k||r.key==="analytics"&&!D,W=r.key==="apis"||F,B=r.key==="apis"||!!j?.[r.key]&&!F,po=r.key==="apis"?`${Pe.length} requests`:r.key==="logs"?`${$e.length} logs \u2022 Limit: ${Se}`:r.key==="crash"?`${Me?.length||0} crashes recorded \u2022 Crash Guard`:r.key==="analytics"?`${Le.length} events logged`:r.key==="redux"?`${Object.keys(We||{}).length} slices \u2022 Depth: ${Oe}`:"";return<C key={r.key}style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1.5,borderColor:B?`${e.purple}38`:e.grayBorderSecondary,padding:14,gap:10,shadowColor:e.black,shadowOpacity:B?.04:.02,shadowRadius:5,shadowOffset:{width:0,height:2}}}>
59
59
 
60
60
  <C style={{flexDirection:"row",alignItems:"flex-start",gap:10}}>
61
61
 
62
- <H accessible={!0}accessibilityRole="checkbox"accessibilityLabel={`Select ${r.label}`}accessibilityState={{checked:B,disabled:I}}disabled={I}onPress={()=>{I||Ae(Ze=>({...Ze,[r.key]:!Ze[r.key]}))}}hitSlop={8}style={{width:22,height:22,borderRadius:6,borderWidth:B?0:1.8,borderColor:I?e.dividerColor:e.grayBorderSecondary,backgroundColor:r.key==="apis"?`${e.blue500}22`:B?e.purple:e.grayBackground,alignItems:"center",justifyContent:"center",marginTop:7,shadowColor:B?e.purple:"transparent",shadowOpacity:B?.25:0,shadowRadius:2,elevation:B?2:0}}>
63
- {r.key==="apis"?<N size={12}color={e.blue500}/>:B?<N size={12}color={e.white}/>:I?<So width={10}height={10}viewBox="0 0 24 24"fill="none">
64
- <Cr d="M7 10V7a5 5 0 0 1 10 0v3"stroke={e.grayText}strokeWidth="2.2"strokeLinecap="round"/>
65
- <Cr d="M5 10h14v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1z"fill={e.grayText}/>
62
+ <V accessible={!0}accessibilityRole="checkbox"accessibilityLabel={`Select ${r.label}`}accessibilityState={{checked:B,disabled:W}}disabled={W}onPress={()=>{W||Be(_e=>({..._e,[r.key]:!_e[r.key]}))}}hitSlop={8}style={{width:22,height:22,borderRadius:6,borderWidth:B?0:1.8,borderColor:W?e.dividerColor:e.grayBorderSecondary,backgroundColor:r.key==="apis"?`${e.blue500}22`:B?e.purple:e.grayBackground,alignItems:"center",justifyContent:"center",marginTop:7,shadowColor:B?e.purple:"transparent",shadowOpacity:B?.25:0,shadowRadius:2,elevation:B?2:0}}>
63
+ {r.key==="apis"?<U size={12}color={e.blue500}/>:B?<U size={12}color={e.white}/>:W?<So width={10}height={10}viewBox="0 0 24 24"fill="none">
64
+ <Ze d="M7 10V7a5 5 0 0 1 10 0v3"stroke={e.grayText}strokeWidth="2.2"strokeLinecap="round"/>
65
+ <Ze d="M5 10h14v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1z"fill={e.grayText}/>
66
66
  </So>:null}
67
- </H>
67
+ </V>
68
68
 
69
69
 
70
- <H accessible={!0}accessibilityRole="button"accessibilityLabel={`${r.label} settings`}disabled={v}onPress={()=>{Q(),Te(r.key)}}style={{flex:1,flexDirection:"row",alignItems:"flex-start",gap:10}}>
70
+ <V accessible={!0}accessibilityRole="button"accessibilityLabel={`${r.label} settings`}disabled={F}onPress={()=>{ie(),De(r.key)}}style={{flex:1,flexDirection:"row",alignItems:"flex-start",gap:10}}>
71
71
 
72
- <C style={{width:36,height:36,borderRadius:10,backgroundColor:I?`${e.grayBorderSecondary}4D`:B?`${e.purple}14`:e.grayBackground,borderWidth:1,borderColor:I?e.dividerColor:B?`${e.purple}33`:e.grayBorderSecondary,alignItems:"center",justifyContent:"center",marginTop:1}}>
73
- {r.icon==="apis"&&<Z color={B?e.purple:e.grayTextWeak}size={16}/>}
74
- {r.icon==="logs"&&<Ne color={B?e.purple:e.grayTextWeak}size={16}/>}
75
- {r.icon==="performance"&&<Je color={B?e.purple:e.grayTextWeak}size={16}/>}
76
- {r.icon==="bundle"&&<Se color={B?e.purple:e.grayTextWeak}size={16}/>}
77
- {r.icon==="crash"&&<Vr color={B?e.purple:e.grayTextWeak}size={16}/>}
78
- {r.icon==="analytics"&&<Ge color={B?e.purple:e.grayTextWeak}size={16}/>}
79
- {r.icon==="redux"&&<Ue color={B?e.purple:e.grayTextWeak}size={16}/>}
80
- {r.icon==="device"&&<Uo color={B?e.purple:e.grayTextWeak}size={16}/>}
81
- {r.icon==="storage"&&<Jo color={B?e.purple:e.grayTextWeak}size={16}/>}
82
- {r.icon==="debugging"&&<_o color={B?e.purple:e.grayTextWeak}size={16}/>}
83
- {r.icon==="media"&&<Qo color={B?e.purple:e.grayTextWeak}size={16}/>}
72
+ <C style={{width:36,height:36,borderRadius:10,backgroundColor:W?`${e.grayBorderSecondary}4D`:B?`${e.purple}14`:e.grayBackground,borderWidth:1,borderColor:W?e.dividerColor:B?`${e.purple}33`:e.grayBorderSecondary,alignItems:"center",justifyContent:"center",marginTop:1}}>
73
+ {r.icon==="apis"&&<Cr color={B?e.purple:e.grayTextWeak}size={16}/>}
74
+ {r.icon==="logs"&&<Sr color={B?e.purple:e.grayTextWeak}size={16}/>}
75
+ {r.icon==="crash"&&<Oo color={B?e.purple:e.grayTextWeak}size={16}/>}
76
+ {r.icon==="analytics"&&<Tr color={B?e.purple:e.grayTextWeak}size={16}/>}
77
+ {r.icon==="redux"&&<Br color={B?e.purple:e.grayTextWeak}size={16}/>}
78
+ {r.icon==="device"&&<No color={B?e.purple:e.grayTextWeak}size={16}/>}
79
+ {r.icon==="storage"&&<Go color={B?e.purple:e.grayTextWeak}size={16}/>}
80
+ {r.icon==="debugging"&&<Uo color={B?e.purple:e.grayTextWeak}size={16}/>}
81
+ {r.icon==="media"&&<Jo color={B?e.purple:e.grayTextWeak}size={16}/>}
82
+ {r.icon==="push"&&<Lr color={B?e.purple:e.grayTextWeak}size={16}/>}
84
83
  </C>
85
84
 
86
85
 
87
86
  <C style={{flex:1,gap:2}}>
88
87
  <C style={{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"}}>
89
88
  <C style={{minWidth:22,height:22,paddingHorizontal:5,borderRadius:11,backgroundColor:B?`${e.purple}1C`:`${e.grayBorderSecondary}80`,borderWidth:1,borderColor:B?`${e.purple}44`:e.grayBorderSecondary,alignItems:"center",justifyContent:"center"}}>
90
- <S style={{fontFamily:k.interBold,fontSize:10,lineHeight:13,color:B?e.purple:e.grayText}}>
89
+ <S style={{fontFamily:x.interBold,fontSize:10,lineHeight:13,color:B?e.purple:e.grayText}}>
91
90
  #{r.id}
92
91
  </S>
93
92
  </C>
94
- <S style={{fontFamily:k.interBold,fontSize:14,lineHeight:18,color:I?e.grayText:e.primaryBlack}}>
93
+ <S style={{fontFamily:x.interBold,fontSize:14,lineHeight:18,color:W?e.grayText:e.primaryBlack}}>
95
94
  {r.label}
96
95
  </S>
97
96
 
98
97
 
99
- {r.key===U&&!v&&<C style={{flexDirection:"row",alignItems:"center",backgroundColor:`${e.purple}14`,borderRadius:12,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.purple}2E`,gap:3}}>
98
+ {r.key===J&&!F&&<C style={{flexDirection:"row",alignItems:"center",backgroundColor:`${e.purple}14`,borderRadius:12,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.purple}2E`,gap:3}}>
100
99
  <C style={{width:4,height:4,borderRadius:2,backgroundColor:e.purple}}/>
101
- <S style={{fontFamily:k.interBold,fontSize:8,lineHeight:11,color:e.purple,letterSpacing:.4}}>
102
- {x("settings.defaultBadge")}
100
+ <S style={{fontFamily:x.interBold,fontSize:8,lineHeight:11,color:e.purple,letterSpacing:.4}}>
101
+ {w("settings.defaultBadge")}
103
102
  </S>
104
103
  </C>}
105
104
 
106
105
 
107
106
  {r.key==="apis"?<C style={{backgroundColor:`${e.blue500}14`,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.blue500}33`}}>
108
- <S style={{fontFamily:k.interBold,fontSize:8,lineHeight:11,color:e.blue500,letterSpacing:.3}}>
109
- {x("settings.coreBadge")}
107
+ <S style={{fontFamily:x.interBold,fontSize:8,lineHeight:11,color:e.blue500,letterSpacing:.3}}>
108
+ {w("settings.coreBadge")}
110
109
  </S>
111
- </C>:v?<C style={{backgroundColor:`${e.amber500}18`,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.amber500}35`}}>
112
- <S style={{fontFamily:k.interBold,fontSize:8,lineHeight:11,color:e.amber700,letterSpacing:.3}}>
113
- {r.key==="redux"?x("settings.notConnectedBadge"):x("settings.notDetectedBadge")}
110
+ </C>:F?<C style={{backgroundColor:`${e.amber500}18`,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.amber500}35`}}>
111
+ <S style={{fontFamily:x.interBold,fontSize:8,lineHeight:11,color:e.amber700,letterSpacing:.3}}>
112
+ {r.key==="redux"?w("settings.notConnectedBadge"):w("settings.notDetectedBadge")}
114
113
  </S>
115
114
  </C>:B?<C style={{backgroundColor:`${e.liveGreen}18`,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.liveGreen}38`}}>
116
- <S style={{fontFamily:k.interBold,fontSize:8,lineHeight:11,color:e.green700,letterSpacing:.3}}>
117
- {x("settings.activeBadge")}
115
+ <S style={{fontFamily:x.interBold,fontSize:8,lineHeight:11,color:e.green700,letterSpacing:.3}}>
116
+ {w("settings.activeBadge")}
118
117
  </S>
119
118
  </C>:<C style={{backgroundColor:`${e.grayTextWeak}18`,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5,borderWidth:1,borderColor:`${e.grayTextWeak}2E`}}>
120
- <S style={{fontFamily:k.interBold,fontSize:8,lineHeight:11,color:e.grayTextWeak,letterSpacing:.3}}>
121
- {x("settings.dormantBadge")}
119
+ <S style={{fontFamily:x.interBold,fontSize:8,lineHeight:11,color:e.grayTextWeak,letterSpacing:.3}}>
120
+ {w("settings.dormantBadge")}
122
121
  </S>
123
122
  </C>}
124
123
  </C>
125
124
 
126
- <S style={{fontFamily:k.interRegular,fontSize:11,color:e.grayText,lineHeight:15,marginTop:1}}>
125
+ <S style={{fontFamily:x.interRegular,fontSize:11,color:e.grayText,lineHeight:15,marginTop:1}}>
127
126
  {r.desc}
128
127
  </S>
129
128
  </C>
130
- </H>
129
+ </V>
131
130
  </C>
132
131
 
133
132
 
134
- {!v&&<C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingTop:8,borderTopWidth:1,borderTopColor:e.dividerColor}}>
133
+ {!F&&<C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingTop:8,borderTopWidth:1,borderTopColor:e.dividerColor}}>
135
134
 
136
135
  <C style={{flexDirection:"row",alignItems:"center",gap:6,flex:1}}>
137
136
  <C style={{width:6,height:6,borderRadius:3,backgroundColor:B?e.liveGreen:e.grayTextWeak}}/>
138
- <S style={{fontFamily:k.interMedium,fontSize:11,color:e.grayText,lineHeight:14}}>
139
- {io}
137
+ <S style={{fontFamily:x.interMedium,fontSize:11,color:e.grayText,lineHeight:14}}>
138
+ {po}
140
139
  </S>
141
140
  </C>
142
141
 
143
142
 
144
- <H accessible={!0}accessibilityRole="button"accessibilityLabel={`Configure ${r.label} settings`}onPress={()=>{Q(),Te(r.key)}}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${e.purple}12`,paddingHorizontal:10,paddingVertical:5,borderRadius:8,borderWidth:1,borderColor:`${e.purple}26`}}>
145
- <$o color={e.purple}size={11}/>
146
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.purple}}>
147
- {x("settings.configure")}
143
+ <V accessible={!0}accessibilityRole="button"accessibilityLabel={`Configure ${r.label} settings`}onPress={()=>{ie(),De(r.key)}}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${e.purple}12`,paddingHorizontal:10,paddingVertical:5,borderRadius:8,borderWidth:1,borderColor:`${e.purple}26`}}>
144
+ <Po color={e.purple}size={11}/>
145
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.purple}}>
146
+ {w("settings.configure")}
148
147
  </S>
149
- <No color={e.purple}size={9}/>
150
- </H>
148
+ <Mo color={e.purple}size={9}/>
149
+ </V>
151
150
  </C>}
152
151
  </C>})}
153
152
  </C>
154
153
  </C>}
155
154
 
156
- {G==="ui"&&<C style={{gap:14}}>
155
+ {q==="ui"&&<C style={{gap:14}}>
157
156
 
158
157
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:14,gap:12}}>
159
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
160
- {x("settings.appearanceTheme")}
158
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
159
+ {w("settings.appearanceTheme")}
161
160
  </S>
162
161
 
163
162
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between"}}>
164
163
  <C style={{flexDirection:"row",alignItems:"center",gap:10,flex:1}}>
165
164
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
166
- {J?<Mo color={e.purple}size={15}/>:<Eo color={e.purple}size={15}/>}
165
+ {_?<$o color={e.purple}size={15}/>:<Lo color={e.purple}size={15}/>}
167
166
  </C>
168
167
  <C style={{flex:1}}>
169
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
170
- {x("settings.general.darkMode")}
168
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
169
+ {w("settings.general.darkMode")}
171
170
  </S>
172
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
173
- {x("settings.general.darkModeDescription")}
171
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
172
+ {w("settings.general.darkModeDescription")}
174
173
  </S>
175
174
  </C>
176
175
  </C>
177
176
 
178
- <H accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle Dark Theme"accessibilityState={{checked:J}}onPress={()=>{const r=!J;Wr(r),Bo(r)}}style={{width:42,height:24,borderRadius:12,backgroundColor:J?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:J?"flex-end":"flex-start"}}>
177
+ <V accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle Dark Theme"accessibilityState={{checked:_}}onPress={()=>{const r=!_;Mr(r),Vo(r)}}style={{width:42,height:24,borderRadius:12,backgroundColor:_?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:_?"flex-end":"flex-start"}}>
179
178
  <C style={{width:20,height:20,borderRadius:10,backgroundColor:e.white,shadowColor:e.black,shadowOpacity:.18,shadowRadius:2,shadowOffset:{width:0,height:1}}}/>
180
- </H>
179
+ </V>
181
180
  </C>
182
181
  </C>
183
182
 
184
183
 
185
184
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:14,gap:14}}>
186
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
187
- {x("settings.windowLayout")}
185
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
186
+ {w("settings.windowLayout")}
188
187
  </S>
189
188
 
190
189
 
@@ -192,28 +191,28 @@ import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";imp
192
191
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:10}}>
193
192
  <C style={{flexDirection:"row",alignItems:"center",gap:10,flex:1}}>
194
193
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
195
- <Sr color={e.purple}size={15}/>
194
+ <Vr color={e.purple}size={15}/>
196
195
  </C>
197
196
  <C style={{flex:1}}>
198
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
199
- {x("settings.general.modalHeight")}
197
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
198
+ {w("settings.general.modalHeight")}
200
199
  </S>
201
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
202
- {x("settings.general.modalHeightDescription")}
200
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
201
+ {w("settings.general.modalHeightDescription")}
203
202
  </S>
204
203
  </C>
205
204
  </C>
206
205
 
207
- {X!==_&&<H onPress={()=>{Ar(X)}}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:e.purple,paddingHorizontal:10,paddingVertical:5,borderRadius:7,shadowColor:e.purple,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2,elevation:2}}>
208
- <N size={11}color={e.white}/>
209
- <S style={{fontFamily:k.interBold,fontSize:11,color:e.white}}>
210
- Save ({X}%)
206
+ {Z!==X&&<V onPress={()=>{Er(Z)}}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:e.purple,paddingHorizontal:10,paddingVertical:5,borderRadius:7,shadowColor:e.purple,shadowOffset:{width:0,height:1},shadowOpacity:.28,shadowRadius:2,elevation:2}}>
207
+ <U size={11}color={e.white}/>
208
+ <S style={{fontFamily:x.interBold,fontSize:11,color:e.white}}>
209
+ Save ({Z}%)
211
210
  </S>
212
- </H>}
211
+ </V>}
213
212
  </C>
214
213
 
215
214
  <C style={{marginTop:6}}>
216
- <Vo value={X}onValueChange={Xe}min={50}max={90}step={5}quickPresets={[50,60,70,80,90]}formatLabel={r=>`${Math.round(r)}%`}/>
215
+ <To value={Z}onValueChange={Ne}min={50}max={90}step={5}quickPresets={[50,60,70,80,90]}formatLabel={r=>`${Math.round(r)}%`}/>
217
216
  </C>
218
217
  </C>
219
218
 
@@ -223,116 +222,116 @@ import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";imp
223
222
  <C style={{gap:8}}>
224
223
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
225
224
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
226
- <Oo color={e.purple}size={15}/>
225
+ <Wo color={e.purple}size={15}/>
227
226
  </C>
228
227
  <C style={{flex:1}}>
229
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
230
- {x("settings.general.modalAnimation")}
228
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
229
+ {w("settings.general.modalAnimation")}
231
230
  </S>
232
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
233
- {x("settings.general.modalAnimationDescription")}
231
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
232
+ {w("settings.general.modalAnimationDescription")}
234
233
  </S>
235
234
  </C>
236
235
  </C>
237
236
 
238
237
  <C style={{flexDirection:"row",backgroundColor:e.grayBackground,borderRadius:10,padding:3,borderWidth:1,borderColor:e.dividerColor}}>
239
- {[{key:"slide",label:"Slide Up"},{key:"fade",label:"Fade"},{key:"none",label:"None"}].map(r=>{const V=Pr===r.key;return<H key={r.key}accessible={!0}accessibilityRole="button"accessibilityLabel={`Set transition animation to ${r.label}`}accessibilityState={{selected:V}}onPress={()=>$r(r.key)}style={{flex:1,paddingVertical:7,alignItems:"center",borderRadius:8,backgroundColor:V?e.purple:"transparent"}}>
240
- <S style={{fontFamily:k.interBold,fontSize:11.5,lineHeight:15,color:V?e.white:e.grayText}}>
238
+ {[{key:"slide",label:"Slide Up"},{key:"fade",label:"Fade"},{key:"none",label:"None"}].map(r=>{const k=Nr===r.key;return<V key={r.key}accessible={!0}accessibilityRole="button"accessibilityLabel={`Set transition animation to ${r.label}`}accessibilityState={{selected:k}}onPress={()=>Gr(r.key)}style={{flex:1,paddingVertical:7,alignItems:"center",borderRadius:8,backgroundColor:k?e.purple:"transparent"}}>
239
+ <S style={{fontFamily:x.interBold,fontSize:11.5,lineHeight:15,color:k?e.white:e.grayText}}>
241
240
  {r.label}
242
241
  </S>
243
- </H>})}
242
+ </V>})}
244
243
  </C>
245
244
  </C>
246
245
  </C>
247
246
 
248
247
 
249
248
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:14,gap:12}}>
250
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
251
- {x("settings.startupDefault")}
249
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
250
+ {w("settings.startupDefault")}
252
251
  </S>
253
252
 
254
253
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
255
254
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
256
- <Ce color={e.purple}size={15}/>
255
+ <Q color={e.purple}size={15}/>
257
256
  </C>
258
257
  <C style={{flex:1}}>
259
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
260
- {x("settings.general.defaultOpeningTab")}
258
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
259
+ {w("settings.general.defaultOpeningTab")}
261
260
  </S>
262
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
263
- {x("settings.general.defaultOpeningTabDesc")}
261
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
262
+ {w("settings.general.defaultOpeningTabDesc")}
264
263
  </S>
265
264
  </C>
266
265
  </C>
267
266
 
268
267
 
269
268
  <C style={{marginTop:6,gap:6}}>
270
- <H accessible={!0}accessibilityRole="button"accessibilityLabel={`Default opening tab: ${L.find(r=>r.key===U)?.label||"APIs"}`}onPress={()=>Ye(r=>!r)}style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:e.grayBackground,borderRadius:10,borderWidth:1.5,borderColor:Pe?e.purple:e.grayBorderSecondary,paddingHorizontal:14,paddingVertical:11}}>
269
+ <V accessible={!0}accessibilityRole="button"accessibilityLabel={`Default opening tab: ${$.find(r=>r.key===J)?.label||"APIs"}`}onPress={()=>Ke(r=>!r)}style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:e.grayBackground,borderRadius:10,borderWidth:1.5,borderColor:ze?e.purple:e.grayBorderSecondary,paddingHorizontal:14,paddingVertical:11}}>
271
270
  <C style={{flexDirection:"row",alignItems:"center",gap:10,flex:1}}>
272
271
  <C style={{width:8,height:8,borderRadius:4,backgroundColor:e.purple}}/>
273
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
274
- {L.find(r=>r.key===U)?`#${L.find(r=>r.key===U)?.id} ${L.find(r=>r.key===U)?.label}`:"#1 APIs (Network)"}
272
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
273
+ {$.find(r=>r.key===J)?`#${$.find(r=>r.key===J)?.id} ${$.find(r=>r.key===J)?.label}`:"#1 APIs (Network)"}
275
274
  </S>
276
275
  <C style={{backgroundColor:`${e.purple}14`,paddingHorizontal:6,paddingVertical:1.5,borderRadius:6}}>
277
- <S style={{fontFamily:k.interBold,fontSize:8.5,color:e.purple}}>
276
+ <S style={{fontFamily:x.interBold,fontSize:8.5,color:e.purple}}>
278
277
  DEFAULT
279
278
  </S>
280
279
  </C>
281
280
  </C>
282
281
 
283
- <C style={{transform:[{rotate:Pe?"180deg":"0deg"}]}}>
284
- <Go color={e.grayText}size={15}/>
282
+ <C style={{transform:[{rotate:ze?"180deg":"0deg"}]}}>
283
+ <Eo color={e.grayText}size={15}/>
285
284
  </C>
286
- </H>
285
+ </V>
287
286
 
288
287
 
289
- {Pe&&<C style={{backgroundColor:e.primaryLight,borderRadius:10,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",shadowColor:e.black,shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:3},elevation:4}}>
290
- {L.filter(r=>r.key==="apis"||M?.[r.key]||T?.[r.key]).map((r,V,D)=>{const v=U===r.key,I=V===D.length-1;return<H key={r.key}accessible={!0}accessibilityRole="button"accessibilityLabel={`Select ${r.label} as default tab`}onPress={()=>{Fr(r.key),Ye(!1)}}style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:14,paddingVertical:11,backgroundColor:v?`${e.purple}0F`:"transparent",borderBottomWidth:I?0:1,borderBottomColor:e.dividerColor}}>
288
+ {ze&&<C style={{backgroundColor:e.primaryLight,borderRadius:10,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",shadowColor:e.black,shadowOpacity:.08,shadowRadius:6,shadowOffset:{width:0,height:3},elevation:4}}>
289
+ {$.filter(r=>r.key==="apis"||j?.[r.key]||T?.[r.key]).map((r,k,D)=>{const F=J===r.key,W=k===D.length-1;return<V key={r.key}accessible={!0}accessibilityRole="button"accessibilityLabel={`Select ${r.label} as default tab`}onPress={()=>{Or(r.key),Ke(!1)}}style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:14,paddingVertical:11,backgroundColor:F?`${e.purple}0F`:"transparent",borderBottomWidth:W?0:1,borderBottomColor:e.dividerColor}}>
291
290
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
292
- <C style={{width:6,height:6,borderRadius:3,backgroundColor:v?e.purple:e.grayTextWeak}}/>
293
- <S style={{fontFamily:v?k.interBold:k.interMedium,fontSize:13,color:v?e.purple:e.primaryBlack}}>
291
+ <C style={{width:6,height:6,borderRadius:3,backgroundColor:F?e.purple:e.grayTextWeak}}/>
292
+ <S style={{fontFamily:F?x.interBold:x.interMedium,fontSize:13,color:F?e.purple:e.primaryBlack}}>
294
293
  #{r.id} {r.label}
295
294
  </S>
296
295
  </C>
297
- {v&&<N size={14}color={e.purple}/>}
298
- </H>})}
296
+ {F&&<U size={14}color={e.purple}/>}
297
+ </V>})}
299
298
  </C>}
300
299
  </C>
301
300
  </C>
302
301
 
303
302
 
304
303
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:14,gap:12}}>
305
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
304
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
306
305
  NOTIFICATIONS & TOASTS
307
306
  </S>
308
307
 
309
308
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between"}}>
310
309
  <C style={{flexDirection:"row",alignItems:"center",gap:10,flex:1,marginRight:10}}>
311
310
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
312
- <Se color={e.purple}size={15}/>
311
+ <Ao color={e.purple}size={15}/>
313
312
  </C>
314
313
  <C style={{flex:1}}>
315
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
314
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
316
315
  NPM Update Toast
317
316
  </S>
318
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
317
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
319
318
  Show a floating toast banner with countdown progress when
320
319
  a newer release is published on npm.
321
320
  </S>
322
321
  </C>
323
322
  </C>
324
323
 
325
- <H accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle NPM Update Toast"accessibilityState={{checked:Be}}onPress={()=>Er(r=>!r)}style={{width:42,height:24,borderRadius:12,backgroundColor:Be?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:Be?"flex-end":"flex-start"}}>
324
+ <V accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle NPM Update Toast"accessibilityState={{checked:xe}}onPress={()=>Ur(r=>!r)}style={{width:42,height:24,borderRadius:12,backgroundColor:xe?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:xe?"flex-end":"flex-start"}}>
326
325
  <C style={{width:20,height:20,borderRadius:10,backgroundColor:e.white,shadowColor:e.black,shadowOpacity:.18,shadowRadius:2,shadowOffset:{width:0,height:1}}}/>
327
- </H>
326
+ </V>
328
327
  </C>
329
328
  </C>
330
329
  </C>}
331
330
 
332
- {G==="limits"&&<C style={{gap:14}}>
331
+ {q==="limits"&&<C style={{gap:14}}>
333
332
 
334
333
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:14,gap:12}}>
335
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
334
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
336
335
  DEVICE MEMORY & AUTO PROFILES
337
336
  </S>
338
337
 
@@ -340,42 +339,42 @@ import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";imp
340
339
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between"}}>
341
340
  <C style={{flexDirection:"row",alignItems:"center",gap:10,flex:1}}>
342
341
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
343
- <Rr color={e.purple}size={16}/>
342
+ <Fr color={e.purple}size={16}/>
344
343
  </C>
345
344
  <C style={{flex:1}}>
346
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
345
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
347
346
  Auto-Calculate Limits from RAM
348
347
  </S>
349
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
348
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
350
349
  Dynamically sets log limits according to available device
351
350
  memory
352
351
  </S>
353
352
  </C>
354
353
  </C>
355
354
 
356
- <H accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle auto RAM limit calculation"accessibilityState={{checked:R}}onPress={()=>Jr(r=>!r)}style={{width:42,height:24,borderRadius:12,backgroundColor:R?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:R?"flex-end":"flex-start"}}>
355
+ <V accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle auto RAM limit calculation"accessibilityState={{checked:I}}onPress={()=>Xr(r=>!r)}style={{width:42,height:24,borderRadius:12,backgroundColor:I?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:I?"flex-end":"flex-start"}}>
357
356
  <C style={{width:20,height:20,borderRadius:10,backgroundColor:e.white,shadowColor:e.black,shadowOpacity:.18,shadowRadius:2,shadowOffset:{width:0,height:1}}}/>
358
- </H>
357
+ </V>
359
358
  </C>
360
359
 
361
360
  <C style={{height:1,backgroundColor:e.dividerColor}}/>
362
361
 
363
362
 
364
363
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
365
- <C style={{width:32,height:32,borderRadius:8,backgroundColor:R?`${e.purple}14`:e.grayBackground,alignItems:"center",justifyContent:"center"}}>
366
- <Z color={R?e.purple:e.grayTextWeak}size={15}/>
364
+ <C style={{width:32,height:32,borderRadius:8,backgroundColor:I?`${e.purple}14`:e.grayBackground,alignItems:"center",justifyContent:"center"}}>
365
+ <Cr color={I?e.purple:e.grayTextWeak}size={15}/>
367
366
  </C>
368
367
  <C style={{flex:1}}>
369
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:R?e.primaryBlack:e.grayText}}>
368
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:I?e.primaryBlack:e.grayText}}>
370
369
  Detected Available RAM
371
370
  </S>
372
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
373
- {Ie} MB available on device
371
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
372
+ {ke} MB available on device
374
373
  </S>
375
374
  </C>
376
- <C style={{paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:R?`${e.purple}12`:e.grayBackground,borderWidth:1,borderColor:R?`${e.purple}26`:e.dividerColor}}>
377
- <S style={{fontFamily:k.interBold,fontSize:12,lineHeight:15,color:R?e.purple:e.grayText}}>
378
- {Ie} MB
375
+ <C style={{paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:I?`${e.purple}12`:e.grayBackground,borderWidth:1,borderColor:I?`${e.purple}26`:e.dividerColor}}>
376
+ <S style={{fontFamily:x.interBold,fontSize:12,lineHeight:15,color:I?e.purple:e.grayText}}>
377
+ {ke} MB
379
378
  </S>
380
379
  </C>
381
380
  </C>
@@ -383,22 +382,22 @@ import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";imp
383
382
 
384
383
  <C style={{marginTop:4,paddingTop:8,borderTopWidth:1,borderTopColor:e.dividerColor,gap:6}}>
385
384
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between"}}>
386
- <S style={{fontFamily:k.interBold,fontSize:11.5,lineHeight:15,color:e.purple}}>
387
- Profile: {K.profileName}
385
+ <S style={{fontFamily:x.interBold,fontSize:11.5,lineHeight:15,color:e.purple}}>
386
+ Profile: {oe.profileName}
388
387
  </S>
389
- <C style={{backgroundColor:R?`${e.emerald500}18`:`${e.purple}18`,paddingHorizontal:7,paddingVertical:2.5,borderRadius:4}}>
390
- <S style={{fontFamily:k.interBold,fontSize:9.5,color:R?e.emerald500:e.purple}}>
391
- {R?"AUTO-TUNED":"MANUAL"}
388
+ <C style={{backgroundColor:I?`${e.emerald500}18`:`${e.purple}18`,paddingHorizontal:7,paddingVertical:2.5,borderRadius:4}}>
389
+ <S style={{fontFamily:x.interBold,fontSize:9.5,color:I?e.emerald500:e.purple}}>
390
+ {I?"AUTO-TUNED":"MANUAL"}
392
391
  </S>
393
392
  </C>
394
393
  </C>
395
394
 
396
395
  <C style={{flexDirection:"row",flexWrap:"wrap",gap:8,marginTop:4}}>
397
- {[{label:"APIs",value:R?K.maxNetworkLogs:De,color:e.blue500},{label:"Logs",value:R?K.maxConsoleLogs:Le,color:e.sky500},{label:"Analytics",value:R?K.maxAnalyticsEvents:_e,color:e.purple},{label:"Crash",value:R?K.maxCrashRecords:Qe,color:e.errorColor}].map(r=><C key={r.label}style={{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${r.color}14`,borderWidth:1,borderColor:`${r.color}33`}}>
398
- <S style={{fontFamily:k.interBold,fontSize:10.5,lineHeight:14,color:r.color}}>
396
+ {[{label:"Logs",value:I?oe.maxConsoleLogs:Se,color:e.sky500},{label:"Analytics",value:I?oe.maxAnalyticsEvents:Ae,color:e.purple},{label:"Crash",value:I?oe.maxCrashRecords:Ee,color:e.errorColor}].map(r=><C key={r.label}style={{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${r.color}14`,borderWidth:1,borderColor:`${r.color}33`}}>
397
+ <S style={{fontFamily:x.interBold,fontSize:10.5,lineHeight:14,color:r.color}}>
399
398
  {r.label}:
400
399
  </S>
401
- <S style={{fontFamily:k.interBold,fontSize:10.5,lineHeight:14,color:r.color}}>
400
+ <S style={{fontFamily:x.interBold,fontSize:10.5,lineHeight:14,color:r.color}}>
402
401
  {r.value} max
403
402
  </S>
404
403
  </C>)}
@@ -408,25 +407,25 @@ import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";imp
408
407
 
409
408
 
410
409
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:14,gap:12}}>
411
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
410
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
412
411
  LOW MEMORY PRESSURE PROTECTION
413
412
  </S>
414
413
 
415
414
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
416
415
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:`${e.emerald500}14`,alignItems:"center",justifyContent:"center"}}>
417
- <Br color={e.emerald500}size={15}/>
416
+ <Rr color={e.emerald500}size={15}/>
418
417
  </C>
419
418
  <C style={{flex:1}}>
420
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
419
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
421
420
  OS Memory Warning Guard
422
421
  </S>
423
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
422
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
424
423
  Automatically prunes in-memory buffers by 50% when the OS
425
424
  signals low memory
426
425
  </S>
427
426
  </C>
428
427
  <C style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:`${e.emerald500}18`}}>
429
- <S style={{fontFamily:k.interBold,fontSize:10,color:e.emerald500}}>
428
+ <S style={{fontFamily:x.interBold,fontSize:10,color:e.emerald500}}>
430
429
  ACTIVE
431
430
  </S>
432
431
  </C>
@@ -437,290 +436,387 @@ import{useMemo as er,useState as $e,useEffect as Me,useRef as lo}from"react";imp
437
436
 
438
437
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:10}}>
439
438
  <C style={{flex:1}}>
440
- <S style={{fontFamily:k.interBold,fontSize:13,color:e.primaryBlack}}>
439
+ <S style={{fontFamily:x.interBold,fontSize:13,color:e.primaryBlack}}>
441
440
  Manual Memory Cleanup
442
441
  </S>
443
- <S style={{fontFamily:k.interRegular,fontSize:11,color:e.grayText,marginTop:1}}>
442
+ <S style={{fontFamily:x.interRegular,fontSize:11,color:e.grayText,marginTop:1}}>
444
443
  Prune older entries across all log stores and free RAM
445
444
  </S>
446
445
  </C>
447
- <H onPress={()=>{const r=St("manual",.5);Dr(`Pruned ${r.totalPruned} items from memory`)}}style={{backgroundColor:e.purple,paddingHorizontal:12,paddingVertical:8,borderRadius:8,flexDirection:"row",alignItems:"center",gap:5}}>
448
- <P size={13}color={e.white}/>
449
- <S style={{fontFamily:k.interBold,fontSize:11.5,color:e.white}}>
446
+ <V onPress={()=>{const r=_o("manual",.5);R(`Pruned ${r.totalPruned} items from memory`)}}style={{backgroundColor:e.purple,paddingHorizontal:12,paddingVertical:8,borderRadius:8,flexDirection:"row",alignItems:"center",gap:5}}>
447
+ <E size={13}color={e.white}/>
448
+ <S style={{fontFamily:x.interBold,fontSize:11.5,color:e.white}}>
450
449
  Prune Now
451
450
  </S>
452
- </H>
451
+ </V>
453
452
  </C>
454
453
  </C>
455
454
  </C>}
456
- {G==="capture"&&<C style={{gap:12}}>
455
+ {q==="capture"&&<C style={{gap:12}}>
457
456
 
458
457
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:12}}>
459
458
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
460
459
  <C style={{width:36,height:36,borderRadius:10,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
461
- <Hr color={e.purple}size={16}/>
460
+ <Ce color={e.purple}size={16}/>
462
461
  </C>
463
462
  <C style={{flex:1}}>
464
- <S style={{fontFamily:k.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
465
- {x("settings.media.screenshotCardTitle","Screenshot Capture Settings")}
463
+ <S style={{fontFamily:x.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
464
+ {w("settings.media.screenshotCardTitle","Screenshot Capture Settings")}
466
465
  </S>
467
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
468
- {x("settings.media.screenshotCardDesc","Image encoding format, compression quality and overlay auto-hide")}
466
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
467
+ {w("settings.media.screenshotCardDesc","Image encoding format, compression quality and overlay auto-hide")}
469
468
  </S>
470
469
  </C>
471
470
  </C>
472
471
 
473
- {z({icon:<Ct color={e.purple}size={16}/>,label:x("settings.media.imageFormat","Image Format"),description:x("settings.media.imageFormatDesc","Export formats (PNG lossless, JPEG lossy, WebP)"),right:<C style={{flexDirection:"row",gap:4}}>
474
- {["PNG","JPEG","WEBP"].map(r=><C key={r}style={{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:r==="PNG"?e.purple:`${e.purple}1A`}}>
475
- <S style={{fontFamily:k.interBold,fontSize:10,color:r==="PNG"?e.white:e.purple}}>
476
- {r}
477
- </S>
478
- </C>)}
472
+ {z({icon:<$r color={e.purple}size={16}/>,label:w("settings.media.imageFormat","Image Format"),description:w("settings.media.imageFormatDesc","Export formats (PNG lossless, JPEG lossy, WebP)"),right:<C style={{flexDirection:"row",gap:5}}>
473
+ {["PNG","JPEG","WEBP"].map(r=>{const k=Ve===r;return<V key={r}onPress={()=>{H("light"),Ge(r),R(`Screenshot format: ${r}`)}}style={{paddingHorizontal:9,paddingVertical:5,borderRadius:7,backgroundColor:k?e.purple:`${e.purple}14`,borderWidth:1,borderColor:k?e.purple:`${e.purple}2E`}}>
474
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:k?e.white:e.purple}}>
475
+ {r}
476
+ </S>
477
+ </V>})}
479
478
  </C>})}
480
479
 
481
- {z({icon:<Tr color={e.purple}size={16}/>,label:x("settings.media.autoHide","Auto-Hide Inspector During Capture"),description:x("settings.media.autoHideDesc","Temporarily hides the inspector overlay during screen capture"),isLast:!0,right:<C style={{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.emerald500}26`}}>
482
- <S style={{fontFamily:k.interBold,fontSize:10,color:e.emerald500}}>
483
- {x("settings.media.enabled","ON")}
480
+ {z({icon:<Ie color={e.purple}size={16}/>,label:w("settings.media.autoHide","Auto-Hide Inspector During Capture"),description:w("settings.media.autoHideDesc","Temporarily hides the inspector overlay during screen capture"),isLast:!0,onPress:()=>{H("light"),ee(r=>!r),R(`Auto-hide overlay: ${P?"OFF":"ON"}`)},right:<V onPress={()=>{H("light"),ee(r=>!r),R(`Auto-hide overlay: ${P?"OFF":"ON"}`)}}style={{paddingHorizontal:10,paddingVertical:5,borderRadius:7,backgroundColor:P?`${e.emerald500}26`:`${e.grayText}20`,borderWidth:1,borderColor:P?`${e.emerald500}4D`:`${e.grayText}33`}}>
481
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:P?e.emerald500:e.grayText}}>
482
+ {P?w("settings.media.enabled","ON"):"OFF"}
484
483
  </S>
485
- </C>})}
484
+ </V>})}
486
485
  </C>
487
486
 
488
487
 
489
488
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:12}}>
490
489
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
491
490
  <C style={{width:36,height:36,borderRadius:10,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
492
- <Xo color={e.purple}size={16}/>
491
+ <Ir color={e.purple}size={16}/>
493
492
  </C>
494
493
  <C style={{flex:1}}>
495
- <S style={{fontFamily:k.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
496
- {x("settings.media.videoCardTitle","Video Recording & GIF Conversion")}
494
+ <S style={{fontFamily:x.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
495
+ {w("settings.media.videoCardTitle","Video Recording & GIF Conversion")}
497
496
  </S>
498
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
499
- {x("settings.media.videoCardDesc","ReplayKit hardware encoding, frame capture fallback and GIF generation")}
497
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
498
+ {w("settings.media.videoCardDesc","ReplayKit hardware encoding, frame capture fallback and GIF generation")}
500
499
  </S>
501
500
  </C>
502
501
  </C>
503
502
 
504
- {z({icon:<Yo color={e.purple}size={16}/>,label:x("settings.media.audioMode","Audio Source"),description:x("settings.media.audioModeDesc","Record video with muted, app audio, or microphone commentary"),right:<C style={{flexDirection:"row",gap:4}}>
505
- {["Muted","App","Mic"].map((r,V)=><C key={r}style={{paddingHorizontal:7,paddingVertical:4,borderRadius:6,backgroundColor:V===0?e.purple:`${e.purple}1A`}}>
506
- <S style={{fontFamily:k.interBold,fontSize:10,color:V===0?e.white:e.purple}}>
507
- {r}
508
- </S>
509
- </C>)}
503
+ {z({icon:<Dr color={e.purple}size={16}/>,label:w("settings.media.audioMode","Audio Source"),description:w("settings.media.audioModeDesc","Record video with muted, app audio, or microphone commentary"),right:<C style={{flexDirection:"row",gap:5}}>
504
+ {["Muted","App","Mic"].map(r=>{const k=je===r;return<V key={r}onPress={()=>{H("light"),Ue(r),R(`Audio source: ${r}`)}}style={{paddingHorizontal:8,paddingVertical:5,borderRadius:7,backgroundColor:k?e.purple:`${e.purple}14`,borderWidth:1,borderColor:k?e.purple:`${e.purple}2E`}}>
505
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:k?e.white:e.purple}}>
506
+ {r}
507
+ </S>
508
+ </V>})}
510
509
  </C>})}
511
510
 
512
- {z({icon:<Ko color={e.purple}size={16}/>,label:x("settings.media.frameRate","Recording Frame Rate (FPS)"),description:x("settings.media.frameRateDesc","Target video smoothness: 15, 24, 30, or 60 FPS"),right:<C style={{flexDirection:"row",gap:4}}>
513
- {["15","24","30","60"].map(r=><C key={r}style={{paddingHorizontal:6,paddingVertical:4,borderRadius:6,backgroundColor:r==="24"?e.purple:`${e.purple}1A`}}>
514
- <S style={{fontFamily:k.interBold,fontSize:10,color:r==="24"?e.white:e.purple}}>
515
- {r}fps
516
- </S>
517
- </C>)}
511
+ {z({icon:<Hr color={e.purple}size={16}/>,label:w("settings.media.frameRate","Recording Frame Rate (FPS)"),description:w("settings.media.frameRateDesc","Target video smoothness: 15, 24, 30, or 60 FPS"),right:<C style={{flexDirection:"row",gap:5}}>
512
+ {["15","24","30","60"].map(r=>{const k=qe===r;return<V key={r}onPress={()=>{H("light"),Je(r),R(`Recording FPS: ${r}`)}}style={{paddingHorizontal:7,paddingVertical:5,borderRadius:7,backgroundColor:k?e.purple:`${e.purple}14`,borderWidth:1,borderColor:k?e.purple:`${e.purple}2E`}}>
513
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:k?e.white:e.purple}}>
514
+ {r}fps
515
+ </S>
516
+ </V>})}
518
517
  </C>})}
519
518
 
520
- {z({icon:<Zo color={e.purple}size={16}/>,label:x("settings.media.gifAutoOpt","Auto GIF Optimization"),description:x("settings.media.gifAutoOptDesc","Automatic palette reduction and frame skip for lightweight animated GIFs"),isLast:!0,right:<C style={{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.emerald500}26`}}>
521
- <S style={{fontFamily:k.interBold,fontSize:10,color:e.emerald500}}>
522
- ON
519
+ {z({icon:<Pr color={e.purple}size={16}/>,label:w("settings.media.gifAutoOpt","Auto GIF Optimization"),description:w("settings.media.gifAutoOptDesc","Automatic palette reduction and frame skip for lightweight animated GIFs"),isLast:!0,onPress:()=>{H("light"),re(r=>!r),R(`GIF optimization: ${L?"OFF":"ON"}`)},right:<V onPress={()=>{H("light"),re(r=>!r),R(`GIF optimization: ${L?"OFF":"ON"}`)}}style={{paddingHorizontal:10,paddingVertical:5,borderRadius:7,backgroundColor:L?`${e.emerald500}26`:`${e.grayText}20`,borderWidth:1,borderColor:L?`${e.emerald500}4D`:`${e.grayText}33`}}>
520
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:L?e.emerald500:e.grayText}}>
521
+ {L?"ON":"OFF"}
523
522
  </S>
524
- </C>})}
523
+ </V>})}
525
524
  </C>
526
525
 
527
526
 
528
527
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
529
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.media.purgeAll","Purge Captured Media Cache"),description:x("settings.media.purgeAllDesc","Delete all local screenshots, screen recordings and converted GIFs"),isLast:!0,onPress:()=>{W.alert(x("settings.media.purgeConfirmTitle","Purge Media Storage?"),x("settings.media.purgeConfirmMessage","This will permanently delete all captured screenshots and videos from disk."),[{text:x("common.cancel","Cancel"),style:"cancel"},{text:x("settings.media.purgeCacheBtn","Purge All"),style:"destructive",onPress:async()=>{await xt.clearAllMedia(),Dr(x("settings.media.purgedSuccess","Media cache cleared successfully"))}}])},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
530
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
531
- {x("settings.media.purgeCacheBtn","Purge All")}
528
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.media.purgeAll","Purge Captured Media Cache"),description:w("settings.media.purgeAllDesc","Delete all local screenshots, screen recordings and converted GIFs"),isLast:!0,onPress:()=>{O.alert(w("settings.media.purgeConfirmTitle","Purge Media Storage?"),w("settings.media.purgeConfirmMessage","This will permanently delete all captured screenshots and videos from disk."),[{text:w("common.cancel","Cancel"),style:"cancel"},{text:w("settings.media.purgeCacheBtn","Purge All"),style:"destructive",onPress:async()=>{await ve.clearAllMedia(),R(w("settings.media.purgedSuccess","Media cache cleared successfully"))}}])},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
529
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
530
+ {w("settings.media.purgeCacheBtn","Purge All")}
532
531
  </S>
533
532
  </C>})}
534
533
  </C>
535
534
  </C>}
536
535
  <C style={{height:48}}/>
537
- </A>
536
+ </M>
538
537
 
539
538
 
540
- {G==="module"&&<C style={{paddingHorizontal:16,paddingTop:12,paddingBottom:je.OS==="ios"?36:24,backgroundColor:e.primaryLight,borderTopWidth:1,borderTopColor:e.dividerColor,flexDirection:"row",alignItems:"center",gap:12,shadowColor:e.black,shadowOpacity:.08,shadowRadius:8,shadowOffset:{width:0,height:-3},elevation:8}}>
539
+ {q==="module"&&<C style={{paddingHorizontal:16,paddingTop:12,paddingBottom:Xe.OS==="ios"?36:24,backgroundColor:e.primaryLight,borderTopWidth:1,borderTopColor:e.dividerColor,flexDirection:"row",alignItems:"center",gap:12,shadowColor:e.black,shadowOpacity:.08,shadowRadius:8,shadowOffset:{width:0,height:-3},elevation:8}}>
541
540
  <C style={{flex:1}}>
542
- <S style={{fontFamily:k.interBold,fontSize:13,lineHeight:17,color:e.primaryBlack}}>
543
- {ro} of {L.length} Modules Active
541
+ <S style={{fontFamily:x.interBold,fontSize:13,lineHeight:17,color:e.primaryBlack}}>
542
+ {so} of {$.length} Modules Active
544
543
  </S>
545
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:q?e.purple:e.grayText,marginTop:1}}>
546
- {x(q?"settings.unsavedPending":"settings.allSynchronized")}
544
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:K?e.purple:e.grayText,marginTop:1}}>
545
+ {w(K?"settings.unsavedPending":"settings.allSynchronized")}
547
546
  </S>
548
547
  </C>
549
548
 
550
- <H accessible={!0}accessibilityRole="button"accessibilityLabel="Save Changes"onPress={oo}style={{flexDirection:"row",alignItems:"center",gap:6,backgroundColor:q?e.purple:`${e.purple}22`,paddingHorizontal:18,paddingVertical:10,borderRadius:10}}>
551
- <N size={14}color={q?e.white:e.purple}/>
552
- <S style={{fontFamily:k.interBold,fontSize:13,lineHeight:17,color:q?e.white:e.purple}}>
553
- {x("settings.saveChanges")}
549
+ <V accessible={!0}accessibilityRole="button"accessibilityLabel="Save Changes"onPress={co}style={{flexDirection:"row",alignItems:"center",gap:6,backgroundColor:K?e.purple:`${e.purple}22`,paddingHorizontal:18,paddingVertical:10,borderRadius:10}}>
550
+ <U size={14}color={K?e.white:e.purple}/>
551
+ <S style={{fontFamily:x.interBold,fontSize:13,lineHeight:17,color:K?e.white:e.purple}}>
552
+ {w("settings.saveChanges")}
554
553
  </S>
555
- </H>
554
+ </V>
556
555
  </C>}
557
- </C>;let $=null,E="",O=null,j="";F==="apis"?(E=x("settings.apis.title"),O=<Z color={e.white}size={16}/>,j=x("settings.apis.total",{count:ze.length}),$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
558
- <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary}}>
559
- {z({icon:<Z color={e.purple}size={16}/>,label:x("settings.apis.maxRequestLogs"),description:x("settings.apis.maxRequestLogsDescription"),numericInput:{value:De,onChange:Gr,min:10,max:100,placeholder:"Enter max requests (10-100)"},isLast:!0})}
560
- </C>
556
+ </C>;let N=null;A==="apis"?N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
561
557
 
562
558
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
563
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.apis.clearNetworkLogs"),description:x("settings.apis.clearNetworkLogsDescription",{count:ze.length}),isLast:!0,onPress:()=>{vo(),Qr(null),W.alert(x("common.success"),x("settings.apis.networkLogsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
564
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
565
- {x("common.clear")}
559
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.apis.clearNetworkLogs"),description:w("settings.apis.clearNetworkLogsDescription",{count:Pe.length}),isLast:!0,onPress:()=>{zo(),eo(null),O.alert(w("common.success"),w("settings.apis.networkLogsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
560
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
561
+ {w("common.clear")}
566
562
  </S>
567
563
  </C>})}
568
564
  </C>
569
565
  <C style={{height:48}}/>
570
- </A>):F==="logs"?(E=x("settings.logs.title"),O=<Ne color={e.white}size={16}/>,j=x("settings.logs.total",{count:Re.length}),$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
566
+ </M>:A==="logs"?N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
571
567
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4}}>
572
- {z({icon:<Ne color={e.purple}size={16}/>,label:x("settings.logs.maxConsoleLogs"),description:x("settings.logs.maxConsoleLogsDescription"),numericInput:{value:Le,onChange:Ur,min:10,max:100,placeholder:"Enter max logs (10-100)"}})}
568
+ {z({icon:<Sr color={e.purple}size={16}/>,label:w("settings.logs.maxConsoleLogs"),description:w("settings.logs.maxConsoleLogsDescription"),numericInput:{value:Se,onChange:_r,min:10,max:100,placeholder:"Enter max logs (10-100)"}})}
573
569
  <C style={{height:1,backgroundColor:e.dividerColor}}/>
574
- <S style={{fontFamily:k.interBold,fontSize:13,lineHeight:17,color:e.primaryBlack,paddingTop:6}}>
575
- {x("settings.logs.logLevels")}
570
+ <S style={{fontFamily:x.interBold,fontSize:13,lineHeight:17,color:e.primaryBlack,paddingTop:6}}>
571
+ {w("settings.logs.logLevels")}
576
572
  </S>
577
- {["info","warn","error"].map(r=>{const V=Or?.[r],D=r==="error"?e.errorColor:r==="warn"?e.warningIconGold:e.skyBlue,v=x(r==="info"?"settings.logs.showInfo":r==="warn"?"settings.logs.showWarn":"settings.logs.showError"),I=x(r==="info"?"settings.logs.showInfoDesc":r==="warn"?"settings.logs.showWarnDesc":"settings.logs.showErrorDesc");return z({icon:<C style={{width:12,height:12,borderRadius:6,backgroundColor:D}}/>,label:v,description:I,isLast:r==="error",onPress:()=>jr(B=>({...B,[r]:!B[r]})),right:<C style={{width:22,height:22,borderRadius:6,borderWidth:2,borderColor:V?e.purple:e.grayTextWeak,backgroundColor:V?`${e.purple}1A`:"transparent",alignItems:"center",justifyContent:"center"}}>
578
- {V&&<N size={12}color={e.purple}/>}
573
+ {["info","warn","error"].map(r=>{const k=qr?.[r],D=r==="error"?e.errorColor:r==="warn"?e.warningIconGold:e.skyBlue,F=w(r==="info"?"settings.logs.showInfo":r==="warn"?"settings.logs.showWarn":"settings.logs.showError"),W=w(r==="info"?"settings.logs.showInfoDesc":r==="warn"?"settings.logs.showWarnDesc":"settings.logs.showErrorDesc");return z({icon:<C style={{width:12,height:12,borderRadius:6,backgroundColor:D}}/>,label:F,description:W,isLast:r==="error",onPress:()=>Jr(B=>({...B,[r]:!B[r]})),right:<C style={{width:22,height:22,borderRadius:6,borderWidth:2,borderColor:k?e.purple:e.grayTextWeak,backgroundColor:k?`${e.purple}1A`:"transparent",alignItems:"center",justifyContent:"center"}}>
574
+ {k&&<U size={12}color={e.purple}/>}
579
575
  </C>})})}
580
576
  </C>
581
577
 
582
578
 
583
579
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,overflow:"hidden",padding:16,gap:14}}>
584
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
585
- {x("settings.logFiltersDeduplication")}
580
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.grayTextWeak,letterSpacing:.8}}>
581
+ {w("settings.logFiltersDeduplication")}
586
582
  </S>
587
583
 
588
584
 
589
585
  <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between"}}>
590
586
  <C style={{flexDirection:"row",alignItems:"center",gap:10,flex:1}}>
591
587
  <C style={{width:32,height:32,borderRadius:8,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
592
- <Tr color={e.purple}size={15}/>
588
+ <Ie color={e.purple}size={15}/>
593
589
  </C>
594
590
  <C style={{flex:1}}>
595
- <S style={{fontFamily:k.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
596
- {x("settings.general.duplicateLogs")}
591
+ <S style={{fontFamily:x.interBold,fontSize:13.5,lineHeight:18,color:e.primaryBlack}}>
592
+ {w("settings.general.duplicateLogs")}
597
593
  </S>
598
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
599
- {x("settings.general.duplicateLogsDescription")}
594
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
595
+ {w("settings.general.duplicateLogsDescription")}
600
596
  </S>
601
597
  </C>
602
598
  </C>
603
599
 
604
- <H accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle show duplicate logs"accessibilityState={{checked:Ve}}onPress={()=>Mr(r=>!r)}style={{width:42,height:24,borderRadius:12,backgroundColor:Ve?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:Ve?"flex-end":"flex-start"}}>
600
+ <V accessible={!0}accessibilityRole="switch"accessibilityLabel="Toggle show duplicate logs"accessibilityState={{checked:we}}onPress={()=>jr(r=>!r)}style={{width:42,height:24,borderRadius:12,backgroundColor:we?e.purple:e.grayBorderSecondary,padding:2,justifyContent:"center",alignItems:we?"flex-end":"flex-start"}}>
605
601
  <C style={{width:20,height:20,borderRadius:10,backgroundColor:e.white,shadowColor:e.black,shadowOpacity:.18,shadowRadius:2,shadowOffset:{width:0,height:1}}}/>
606
- </H>
602
+ </V>
607
603
  </C>
608
604
  </C>
609
605
 
610
606
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
611
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.logs.clearConsoleLogs"),description:x("settings.logs.clearConsoleLogsDescription",{count:Re.length}),isLast:!0,onPress:()=>{Ho(),W.alert(x("common.success"),x("settings.logs.consoleLogsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
612
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
613
- {x("common.clear")}
607
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.logs.clearConsoleLogs"),description:w("settings.logs.clearConsoleLogsDescription",{count:$e.length}),isLast:!0,onPress:()=>{Ro(),O.alert(w("common.success"),w("settings.logs.consoleLogsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
608
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
609
+ {w("common.clear")}
614
610
  </S>
615
611
  </C>})}
616
612
  </C>
617
613
  <C style={{height:48}}/>
618
- </A>):F==="analytics"?(E=x("settings.analytics.title"),O=<Ge color={e.white}size={16}/>,j=x("settings.analytics.total",{count:ve.length}),$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
614
+ </M>:A==="analytics"?N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
619
615
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary}}>
620
- {z({icon:<Ge color={e.purple}size={16}/>,label:x("settings.analytics.maxAnalyticsEvents"),description:x("settings.analytics.maxAnalyticsEventsDescription",{count:ve.length}),numericInput:{value:_e,onChange:qr,min:10,max:75,placeholder:"Enter max events (10-75)"},isLast:!0})}
616
+ {z({icon:<Tr color={e.purple}size={16}/>,label:w("settings.analytics.maxAnalyticsEvents"),description:w("settings.analytics.maxAnalyticsEventsDescription",{count:Le.length}),numericInput:{value:Ae,onChange:Qr,min:10,max:75,placeholder:"Enter max events (10-75)"},isLast:!0})}
621
617
  </C>
622
618
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
623
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.analytics.clearAnalyticsEvents"),description:x("settings.analytics.clearAnalyticsEventsDescription"),isLast:!0,onPress:()=>{Do(),Xr(null),W.alert(x("common.success"),x("settings.analytics.analyticsEventsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
624
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
625
- {x("common.clear")}
619
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.analytics.clearAnalyticsEvents"),description:w("settings.analytics.clearAnalyticsEventsDescription"),isLast:!0,onPress:()=>{Fo(),ro(null),O.alert(w("common.success"),w("settings.analytics.analyticsEventsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
620
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
621
+ {w("common.clear")}
626
622
  </S>
627
623
  </C>})}
628
624
  </C>
629
625
  <C style={{height:48}}/>
630
- </A>):F==="redux"?(E=x("settings.redux.title"),O=<Ue color={e.white}size={16}/>,j=x("settings.redux.reducers",{count:Object.keys(He||{}).length}),$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
626
+ </M>:A==="redux"?N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
631
627
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4}}>
632
- {z({icon:<Ue color={e.purple}size={16}/>,label:x("settings.redux.autoRefresh"),description:x("settings.redux.autoRefreshDescription"),onPress:()=>_r(r=>!r),right:<C style={{width:22,height:22,borderRadius:6,borderWidth:2,borderColor:Fe?e.purple:e.grayTextWeak,backgroundColor:Fe?`${e.purple}1A`:"transparent",alignItems:"center",justifyContent:"center"}}>
633
- {Fe&&<N size={12}color={e.purple}/>}
628
+ {z({icon:<Br color={e.purple}size={16}/>,label:w("settings.redux.autoRefresh"),description:w("settings.redux.autoRefreshDescription"),onPress:()=>Yr(r=>!r),right:<C style={{width:22,height:22,borderRadius:6,borderWidth:2,borderColor:Te?e.purple:e.grayTextWeak,backgroundColor:Te?`${e.purple}1A`:"transparent",alignItems:"center",justifyContent:"center"}}>
629
+ {Te&&<U size={12}color={e.purple}/>}
634
630
  </C>})}
635
631
  <C style={{height:1,backgroundColor:e.dividerColor}}/>
636
- {z({icon:<Ce color={e.purple}size={16}/>,label:x("settings.redux.defaultJsonExpandDepth"),description:x("settings.redux.defaultJsonExpandDepthDescription"),picker:{options:[1,2,3,5],selectedValue:Ke,onSelect:Kr},isLast:!0})}
632
+ {z({icon:<Q color={e.purple}size={16}/>,label:w("settings.redux.defaultJsonExpandDepth"),description:w("settings.redux.defaultJsonExpandDepthDescription"),picker:{options:[1,2,3,5],selectedValue:Oe,onSelect:Zr},isLast:!0})}
637
633
  </C>
638
634
 
639
635
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
640
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.redux.clearReduxState"),description:x(He?"settings.redux.clearReduxStateDescription":"settings.redux.clearReduxStateEmpty"),isLast:!0,onPress:()=>{Yr(null),W.alert(x("common.success"),x("settings.redux.reduxStateCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
641
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
642
- {x("common.clear")}
636
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.redux.clearReduxState"),description:w(We?"settings.redux.clearReduxStateDescription":"settings.redux.clearReduxStateEmpty"),isLast:!0,onPress:()=>{oo(null),O.alert(w("common.success"),w("settings.redux.reduxStateCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
637
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
638
+ {w("common.clear")}
643
639
  </S>
644
640
  </C>})}
645
641
  </C>
646
642
  <C style={{height:48}}/>
647
- </A>):F==="crash"?(E=x("settings.crash.title"),O=<Vr color={e.white}size={16}/>,j=`Total: ${We?.length||0}`,$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
643
+ </M>:A==="crash"?N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
648
644
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4}}>
649
- {z({icon:<Ce color={e.purple}size={16}/>,label:x("settings.crash.maxCrashLogs"),description:x("settings.crash.maxCrashLogsDesc"),numericInput:{value:Qe,onChange:Zr,min:5,max:50,placeholder:"Enter max crashes (5-50)"}})}
645
+ {z({icon:<Q color={e.purple}size={16}/>,label:w("settings.crash.maxCrashLogs"),description:w("settings.crash.maxCrashLogsDesc"),numericInput:{value:Ee,onChange:to,min:5,max:50,placeholder:"Enter max crashes (5-50)"}})}
650
646
  <C style={{height:1,backgroundColor:e.dividerColor}}/>
651
- {z({icon:<Br color={e.greenColor}size={16}/>,label:x("settings.crash.globalGuard"),description:x("settings.crash.globalGuardDesc"),isLast:!0,right:<C style={{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.greenColor}1F`}}>
652
- <S style={{fontFamily:k.interBold,fontSize:10,lineHeight:13,color:e.greenColor}}>
653
- {x("settings.protectedBadge")}
647
+ {z({icon:<Rr color={e.greenColor}size={16}/>,label:w("settings.crash.globalGuard"),description:w("settings.crash.globalGuardDesc"),isLast:!0,right:<C style={{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.greenColor}1F`}}>
648
+ <S style={{fontFamily:x.interBold,fontSize:10,lineHeight:13,color:e.greenColor}}>
649
+ {w("settings.protectedBadge")}
654
650
  </S>
655
651
  </C>})}
656
652
  </C>
657
653
 
658
654
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
659
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.crash.clearHistory"),description:x("settings.crash.clearHistoryDesc",{count:We?.length||0}),isLast:!0,onPress:()=>{Lo(),W.alert(x("common.success"),x("settings.crash.historyCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
660
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
661
- {x("common.clear")}
655
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.crash.clearHistory"),description:w("settings.crash.clearHistoryDesc",{count:Me?.length||0}),isLast:!0,onPress:()=>{Ho(),O.alert(w("common.success"),w("settings.crash.historyCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
656
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
657
+ {w("common.clear")}
662
658
  </S>
663
659
  </C>})}
664
660
  </C>
665
661
  <C style={{height:48}}/>
666
- </A>):F==="bundle"?(E=x("settings.bundle.title"),O=<Se color={e.white}size={16}/>,j="Metro",$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
662
+ </M>:A==="push"?N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
663
+
664
+ <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4}}>
665
+ {z({icon:<Q color={e.purple}size={16}/>,label:"Max Push Notification Logs",description:"Buffer size limit for recorded push payloads (10-200)",numericInput:{value:lo,onChange:ao,min:10,max:200,placeholder:"Enter max logs (10-200)"}})}
666
+ <C style={{height:1,backgroundColor:e.dividerColor}}/>
667
+ {z({icon:<Lr color={e.greenColor}size={16}/>,label:"Universal Ingestion Engine",description:"Captures any push domain (Salesforce, FCM, APNs, Expo, Braze, Custom)",isLast:!0,right:<C style={{paddingHorizontal:8,paddingVertical:4,borderRadius:6,backgroundColor:`${e.greenColor}1F`}}>
668
+ <S style={{fontFamily:x.interBold,fontSize:10,lineHeight:13,color:e.greenColor}}>
669
+ ACTIVE
670
+ </S>
671
+ </C>})}
672
+ </C>
673
+
674
+
667
675
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:8}}>
668
- <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
669
- <C style={{width:36,height:36,borderRadius:10,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
670
- <Se color={e.purple}size={16}/>
671
- </C>
672
- <C style={{flex:1}}>
673
- <S style={{fontFamily:k.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
674
- {x("settings.bundle.sourceBundler")}
676
+ <S style={{fontFamily:x.interBold,fontSize:12,color:e.primaryBlack,marginBottom:4}}>
677
+ ⚡ SIMULATE TEST PUSH NOTIFICATIONS
678
+ </S>
679
+
680
+ <C style={{flexDirection:"row",flexWrap:"wrap",gap:6}}>
681
+ <V onPress={()=>{Y("salesforce"),R("Simulated Salesforce Marketing Cloud push")}}style={{backgroundColor:`${e.sky600}14`,borderColor:`${e.sky600}33`,borderWidth:1,paddingHorizontal:10,paddingVertical:6,borderRadius:8}}>
682
+ <S style={{fontSize:11,fontFamily:x.interSemiBold,color:e.sky600}}>
683
+ + Salesforce MC
675
684
  </S>
676
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
677
- {x("settings.bundle.sourceBundlerDesc")}
685
+ </V>
686
+
687
+ <V onPress={()=>{Y("fcm"),R("Simulated Firebase FCM push")}}style={{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}33`,borderWidth:1,paddingHorizontal:10,paddingVertical:6,borderRadius:8}}>
688
+ <S style={{fontSize:11,fontFamily:x.interSemiBold,color:e.darkOrange}}>
689
+ + Firebase FCM
678
690
  </S>
679
- </C>
691
+ </V>
692
+
693
+ <V onPress={()=>{Y("apns"),R("Simulated Apple APNs push")}}style={{backgroundColor:`${e.primaryBlack}10`,borderColor:`${e.primaryBlack}25`,borderWidth:1,paddingHorizontal:10,paddingVertical:6,borderRadius:8}}>
694
+ <S style={{fontSize:11,fontFamily:x.interSemiBold,color:e.primaryBlack}}>
695
+ + Apple APNs
696
+ </S>
697
+ </V>
698
+
699
+ <V onPress={()=>{Y("deeplink"),R("Simulated Deep Link push")}}style={{backgroundColor:`${e.brandPurple}14`,borderColor:`${e.brandPurple}33`,borderWidth:1,paddingHorizontal:10,paddingVertical:6,borderRadius:8}}>
700
+ <S style={{fontSize:11,fontFamily:x.interSemiBold,color:e.brandPurple}}>
701
+ + Deep Link
702
+ </S>
703
+ </V>
680
704
  </C>
681
705
  </C>
682
706
 
707
+
683
708
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
684
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.bundle.clearCache"),description:x("settings.bundle.clearCacheDesc"),isLast:!0,onPress:()=>{Io(),W.alert(x("common.success"),x("settings.bundle.cacheCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
685
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
686
- {x("common.clear")}
709
+ {z({icon:<E color={e.errorColor}size={16}/>,label:"Clear Push History",description:`Permanently remove all ${io?.length||0} recorded notifications`,isLast:!0,onPress:()=>{no(),O.alert("Success","Push notification history cleared")},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
710
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
711
+ {w("common.clear")}
687
712
  </S>
688
713
  </C>})}
689
714
  </C>
690
715
  <C style={{height:48}}/>
691
- </A>):F==="performance"&&(E=x("settings.performance.title"),O=<Je color={e.white}size={16}/>,j="60 FPS Target",$=<A style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
716
+ </M>:A==="media"&&(N=<M style={{flex:1}}contentContainerStyle={{padding:16,paddingBottom:100,gap:12}}>
717
+
692
718
  <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:8}}>
719
+ <S style={{fontFamily:x.interBold,fontSize:12,color:e.primaryBlack,marginBottom:4}}>
720
+ ⚡ DIRECT CAPTURE SHORTCUTS
721
+ </S>
722
+
723
+ <C style={{flexDirection:"row",flexWrap:"wrap",gap:8}}>
724
+ <V onPress={async()=>{H("light"),await ve.takeScreenshot({format:Ve.toLowerCase(),quality:.9,hideInspector:P})&&(H("success"),R("Screenshot captured and saved!"))}}style={{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}33`,borderWidth:1,paddingHorizontal:12,paddingVertical:7,borderRadius:8,flexDirection:"row",alignItems:"center",gap:6}}>
725
+ <Ce color={e.purple}size={14}/>
726
+ <S style={{fontSize:11,fontFamily:x.interBold,color:e.purple}}>
727
+ Take Screenshot
728
+ </S>
729
+ </V>
730
+ </C>
731
+ </C>
732
+
733
+
734
+ <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:12}}>
735
+ <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
736
+ <C style={{width:36,height:36,borderRadius:10,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
737
+ <Ce color={e.purple}size={16}/>
738
+ </C>
739
+ <C style={{flex:1}}>
740
+ <S style={{fontFamily:x.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
741
+ {w("settings.media.screenshotCardTitle","Screenshot Capture Settings")}
742
+ </S>
743
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
744
+ {w("settings.media.screenshotCardDesc","Image encoding format, compression quality and overlay auto-hide")}
745
+ </S>
746
+ </C>
747
+ </C>
748
+
749
+ {z({icon:<$r color={e.purple}size={16}/>,label:w("settings.media.imageFormat","Image Format"),description:w("settings.media.imageFormatDesc","Export formats (PNG lossless, JPEG lossy, WebP)"),right:<C style={{flexDirection:"row",gap:5}}>
750
+ {["PNG","JPEG","WEBP"].map(r=>{const k=Ve===r;return<V key={r}onPress={()=>{H("light"),Ge(r),R(`Screenshot format: ${r}`)}}style={{paddingHorizontal:9,paddingVertical:5,borderRadius:7,backgroundColor:k?e.purple:`${e.purple}14`,borderWidth:1,borderColor:k?e.purple:`${e.purple}2E`}}>
751
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:k?e.white:e.purple}}>
752
+ {r}
753
+ </S>
754
+ </V>})}
755
+ </C>})}
756
+
757
+ {z({icon:<Ie color={e.purple}size={16}/>,label:w("settings.media.autoHide","Auto-Hide Inspector During Capture"),description:w("settings.media.autoHideDesc","Temporarily hides the inspector overlay during screen capture"),isLast:!0,onPress:()=>{H("light"),ee(r=>!r),R(`Auto-hide overlay: ${P?"OFF":"ON"}`)},right:<V onPress={()=>{H("light"),ee(r=>!r),R(`Auto-hide overlay: ${P?"OFF":"ON"}`)}}style={{paddingHorizontal:10,paddingVertical:5,borderRadius:7,backgroundColor:P?`${e.emerald500}26`:`${e.grayText}20`,borderWidth:1,borderColor:P?`${e.emerald500}4D`:`${e.grayText}33`}}>
758
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:P?e.emerald500:e.grayText}}>
759
+ {P?w("settings.media.enabled","ON"):"OFF"}
760
+ </S>
761
+ </V>})}
762
+ </C>
763
+
764
+
765
+ <C style={{backgroundColor:e.primaryLight,padding:16,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,gap:12}}>
693
766
  <C style={{flexDirection:"row",alignItems:"center",gap:10}}>
694
767
  <C style={{width:36,height:36,borderRadius:10,backgroundColor:e.purpleShade50,alignItems:"center",justifyContent:"center"}}>
695
- <Je color={e.purple}size={16}/>
768
+ <Ir color={e.purple}size={16}/>
696
769
  </C>
697
770
  <C style={{flex:1}}>
698
- <S style={{fontFamily:k.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
699
- {x("settings.performance.frameMeasurement")}
771
+ <S style={{fontFamily:x.interBold,fontSize:14,lineHeight:18,color:e.primaryBlack}}>
772
+ {w("settings.media.videoCardTitle","Video Recording & GIF Conversion")}
700
773
  </S>
701
- <S style={{fontFamily:k.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
702
- {x("settings.performance.frameMeasurementDesc")}
774
+ <S style={{fontFamily:x.interRegular,fontSize:11,lineHeight:15,color:e.grayText,marginTop:1}}>
775
+ {w("settings.media.videoCardDesc","ReplayKit hardware encoding, frame capture fallback and GIF generation")}
703
776
  </S>
704
777
  </C>
705
778
  </C>
779
+
780
+ {z({icon:<Dr color={e.purple}size={16}/>,label:w("settings.media.audioMode","Audio Source"),description:w("settings.media.audioModeDesc","Record video with muted, app audio, or microphone commentary"),right:<C style={{flexDirection:"row",gap:5}}>
781
+ {["Muted","App","Mic"].map(r=>{const k=je===r;return<V key={r}onPress={()=>{H("light"),Ue(r),R(`Audio source: ${r}`)}}style={{paddingHorizontal:8,paddingVertical:5,borderRadius:7,backgroundColor:k?e.purple:`${e.purple}14`,borderWidth:1,borderColor:k?e.purple:`${e.purple}2E`}}>
782
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:k?e.white:e.purple}}>
783
+ {r}
784
+ </S>
785
+ </V>})}
786
+ </C>})}
787
+
788
+ {z({icon:<Hr color={e.purple}size={16}/>,label:w("settings.media.frameRate","Recording Frame Rate (FPS)"),description:w("settings.media.frameRateDesc","Target video smoothness: 15, 24, 30, or 60 FPS"),right:<C style={{flexDirection:"row",gap:5}}>
789
+ {["15","24","30","60"].map(r=>{const k=qe===r;return<V key={r}onPress={()=>{H("light"),Je(r),R(`Recording FPS: ${r}`)}}style={{paddingHorizontal:7,paddingVertical:5,borderRadius:7,backgroundColor:k?e.purple:`${e.purple}14`,borderWidth:1,borderColor:k?e.purple:`${e.purple}2E`}}>
790
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:k?e.white:e.purple}}>
791
+ {r}fps
792
+ </S>
793
+ </V>})}
794
+ </C>})}
795
+
796
+ {z({icon:<Pr color={e.purple}size={16}/>,label:w("settings.media.gifAutoOpt","Auto GIF Optimization"),description:w("settings.media.gifAutoOptDesc","Automatic palette reduction and frame skip for lightweight animated GIFs"),isLast:!0,onPress:()=>{H("light"),re(r=>!r),R(`GIF optimization: ${L?"OFF":"ON"}`)},right:<V onPress={()=>{H("light"),re(r=>!r),R(`GIF optimization: ${L?"OFF":"ON"}`)}}style={{paddingHorizontal:10,paddingVertical:5,borderRadius:7,backgroundColor:L?`${e.emerald500}26`:`${e.grayText}20`,borderWidth:1,borderColor:L?`${e.emerald500}4D`:`${e.grayText}33`}}>
797
+ <S style={{fontFamily:x.interBold,fontSize:10.5,color:L?e.emerald500:e.grayText}}>
798
+ {L?"ON":"OFF"}
799
+ </S>
800
+ </V>})}
706
801
  </C>
707
802
 
803
+
708
804
  <C style={{backgroundColor:e.primaryLight,borderRadius:14,borderWidth:1,borderColor:e.grayBorderSecondary,padding:16}}>
709
- {z({icon:<P color={e.errorColor}size={16}/>,label:x("settings.performance.clearEvents"),description:x("settings.performance.clearEventsDesc"),isLast:!0,onPress:()=>{Fo(),W.alert(x("common.success"),x("settings.performance.eventsCleared"))},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
710
- <S style={{fontFamily:k.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
711
- {x("common.clear")}
805
+ {z({icon:<E color={e.errorColor}size={16}/>,label:w("settings.media.purgeAll","Purge Captured Media Cache"),description:w("settings.media.purgeAllDesc","Delete all local screenshots, screen recordings and converted GIFs"),isLast:!0,onPress:()=>{O.alert(w("settings.media.purgeConfirmTitle","Purge Media Storage?"),w("settings.media.purgeConfirmMessage","This will permanently delete all captured screenshots and videos from disk."),[{text:w("common.cancel","Cancel"),style:"cancel"},{text:w("settings.media.purgeCacheBtn","Purge All"),style:"destructive",onPress:async()=>{await ve.clearAllMedia(),R(w("settings.media.purgedSuccess","Media cache cleared successfully"))}}])},right:<C style={{paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:`${e.errorColor}14`,borderWidth:1,borderColor:`${e.errorColor}33`}}>
806
+ <S style={{fontFamily:x.interBold,fontSize:11,lineHeight:14,color:e.errorColor}}>
807
+ {w("settings.media.purgeCacheBtn","Purge All")}
712
808
  </S>
713
809
  </C>})}
714
810
  </C>
715
811
  <C style={{height:48}}/>
716
- </A>);const Y=lo(new Ee.Value(0)).current;return Me(()=>{F!=="main"&&(Y.setValue(0),Ee.spring(Y,{toValue:1,friction:8,tension:65,useNativeDriver:!0}).start())},[F]),<C style={{flex:1,backgroundColor:e.grayBackground}}>
812
+ </M>);const te=yo(new Fe.Value(0)).current;return Re(()=>{A!=="main"&&(te.setValue(0),Fe.spring(te,{toValue:1,friction:8,tension:65,useNativeDriver:!0}).start())},[A]),<C style={{flex:1,backgroundColor:e.grayBackground}}>
717
813
 
718
- <C style={[rr.absoluteFill,F!=="main"&&{pointerEvents:"none"}]}>
719
- {to()}
814
+ <C style={[Ye.absoluteFill,A!=="main"&&{pointerEvents:"none"}]}>
815
+ {go()}
720
816
  </C>
721
817
 
722
818
 
723
- {F!=="main"&&<Ee.View style={[rr.absoluteFill,{backgroundColor:e.grayBackground,opacity:Y,transform:[{translateX:Y.interpolate({inputRange:[0,1],outputRange:[30,0]})}]}]}>
724
- {$}
725
- </Ee.View>}
726
- </C>};export default Tt;
819
+ {A!=="main"&&<Fe.View style={[Ye.absoluteFill,{backgroundColor:e.grayBackground,opacity:te,transform:[{translateX:te.interpolate({inputRange:[0,1],outputRange:[30,0]})}]}]}>
820
+ {N}
821
+ </Fe.View>}
822
+ </C>};export default Qo;