react-native-inapp-inspector 2.3.18 → 2.3.20

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 (358) hide show
  1. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +57 -0
  2. package/dist/commonjs/analytics.js +1 -24
  3. package/dist/commonjs/bundle.js +1 -16
  4. package/dist/commonjs/capture.d.ts +2 -0
  5. package/dist/commonjs/capture.js +1 -32
  6. package/dist/commonjs/components/AnalyticsDetail.js +92 -623
  7. package/dist/commonjs/components/AnalyticsEventCard.js +54 -350
  8. package/dist/commonjs/components/AnalyticsGraph.js +70 -370
  9. package/dist/commonjs/components/AnimatedEntrance.js +1 -11
  10. package/dist/commonjs/components/AppHeaderLogo.js +7 -134
  11. package/dist/commonjs/components/BrandCircleIcon.js +73 -118
  12. package/dist/commonjs/components/BrandSquareIcon.js +63 -108
  13. package/dist/commonjs/components/CodeSnippet.js +48 -623
  14. package/dist/commonjs/components/ConsoleLogCard.js +63 -537
  15. package/dist/commonjs/components/CopyButton.js +3 -89
  16. package/dist/commonjs/components/DiffViewer.js +19 -83
  17. package/dist/commonjs/components/DomainHeader.js +27 -127
  18. package/dist/commonjs/components/EmptyState.d.ts +1 -0
  19. package/dist/commonjs/components/EmptyState.js +10 -87
  20. package/dist/commonjs/components/EndOfListFooter.js +7 -81
  21. package/dist/commonjs/components/ErrorBoundary.js +72 -566
  22. package/dist/commonjs/components/HeadersSection.js +31 -110
  23. package/dist/commonjs/components/HighlightText.js +17 -58
  24. package/dist/commonjs/components/Inspector/AboutModal.d.ts +6 -0
  25. package/dist/commonjs/components/Inspector/AboutModal.js +351 -0
  26. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +98 -797
  27. package/dist/commonjs/components/Inspector/AnalyticsTab.js +284 -930
  28. package/dist/commonjs/components/Inspector/BundleTab.js +551 -2918
  29. package/dist/commonjs/components/Inspector/ConsoleTab.js +79 -492
  30. package/dist/commonjs/components/Inspector/CrashDetail.js +123 -672
  31. package/dist/commonjs/components/Inspector/CrashFilterModal.js +66 -498
  32. package/dist/commonjs/components/Inspector/CrashTab.js +98 -670
  33. package/dist/commonjs/components/Inspector/DebuggingTab.js +64 -871
  34. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +143 -907
  35. package/dist/commonjs/components/Inspector/FabLauncher.js +85 -54
  36. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +6 -99
  37. package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +9 -0
  38. package/dist/commonjs/components/Inspector/FeedbackModal.js +167 -521
  39. package/dist/commonjs/components/Inspector/InspectorContext.js +1 -21
  40. package/dist/commonjs/components/Inspector/InspectorHeader.js +219 -1093
  41. package/dist/commonjs/components/Inspector/LogDetail.js +168 -994
  42. package/dist/commonjs/components/Inspector/MainScreen.js +60 -332
  43. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +136 -278
  44. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +134 -361
  45. package/dist/commonjs/components/Inspector/NavigationTracker.js +1 -12
  46. package/dist/commonjs/components/Inspector/NetworkDetail.js +96 -432
  47. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +60 -576
  48. package/dist/commonjs/components/Inspector/NetworkTab.js +84 -514
  49. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +17 -433
  50. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +25 -298
  51. package/dist/commonjs/components/Inspector/PerformanceTab.js +182 -1397
  52. package/dist/commonjs/components/Inspector/ReduxDetail.js +188 -1089
  53. package/dist/commonjs/components/Inspector/ReduxTab.js +85 -701
  54. package/dist/commonjs/components/Inspector/SettingsPanel.js +431 -3431
  55. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +11 -180
  56. package/dist/commonjs/components/Inspector/StorageTab.js +93 -826
  57. package/dist/commonjs/components/Inspector/TabBar.js +47 -183
  58. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +34 -408
  59. package/dist/commonjs/components/JsonViewer.js +168 -380
  60. package/dist/commonjs/components/LogCard.js +57 -567
  61. package/dist/commonjs/components/LogSyntaxHighlighter.js +11 -130
  62. package/dist/commonjs/components/MetaAccordion.js +69 -238
  63. package/dist/commonjs/components/MiniBarChart.js +3 -56
  64. package/dist/commonjs/components/MiniLineChart.js +3 -58
  65. package/dist/commonjs/components/NetworkIcons.d.ts +7 -0
  66. package/dist/commonjs/components/NetworkIcons.js +479 -997
  67. package/dist/commonjs/components/QRCodeView.js +5 -79
  68. package/dist/commonjs/components/SectionHeader.js +15 -37
  69. package/dist/commonjs/components/SegmentedTabs.js +7 -61
  70. package/dist/commonjs/components/SkeletonPlaceholder.js +11 -180
  71. package/dist/commonjs/components/Slider.js +15 -243
  72. package/dist/commonjs/components/SourcePageCard.js +30 -89
  73. package/dist/commonjs/components/Toast.js +5 -147
  74. package/dist/commonjs/components/TouchableScale.js +3 -24
  75. package/dist/commonjs/components/TreeNode.js +55 -130
  76. package/dist/commonjs/console.js +1 -16
  77. package/dist/commonjs/constants/index.js +1 -32
  78. package/dist/commonjs/constants/telemetryConfig.js +1 -6
  79. package/dist/commonjs/constants/version.d.ts +1 -1
  80. package/dist/commonjs/constants/version.js +1 -4
  81. package/dist/commonjs/crash.js +1 -23
  82. package/dist/commonjs/customHooks/analyticsLogger.js +1 -250
  83. package/dist/commonjs/customHooks/bundleAnalyzer.js +1 -957
  84. package/dist/commonjs/customHooks/consoleLogger.js +6 -445
  85. package/dist/commonjs/customHooks/crashHandler.js +7 -656
  86. package/dist/commonjs/customHooks/logFilters.js +1 -23
  87. package/dist/commonjs/customHooks/networkLogger.js +2 -536
  88. package/dist/commonjs/customHooks/performanceTracker.js +63 -750
  89. package/dist/commonjs/customHooks/reduxLogger.js +2 -313
  90. package/dist/commonjs/customHooks/storageInspector.js +1 -435
  91. package/dist/commonjs/customHooks/useAccordion.js +1 -18
  92. package/dist/commonjs/decorators/index.js +1 -100
  93. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +1 -148
  94. package/dist/commonjs/helpers/index.js +8 -921
  95. package/dist/commonjs/helpers/memoryManager.js +1 -99
  96. package/dist/commonjs/helpers/qrGenerator.js +1 -367
  97. package/dist/commonjs/helpers/remoteConfig.js +1 -165
  98. package/dist/commonjs/helpers/searchQueryParser.js +1 -62
  99. package/dist/commonjs/helpers/settingsStore.js +1 -144
  100. package/dist/commonjs/helpers/telemetry.js +1 -501
  101. package/dist/commonjs/helpers/toast.js +1 -20
  102. package/dist/commonjs/i18n/index.js +1 -90
  103. package/dist/commonjs/i18n/locales/en.json +1 -1122
  104. package/dist/commonjs/index.js +5 -2153
  105. package/dist/commonjs/metro.js +6 -468
  106. package/dist/commonjs/native/NativeInspector.d.ts +3 -0
  107. package/dist/commonjs/native/NativeInspector.js +1 -402
  108. package/dist/commonjs/native/NativeNetworkInspector.d.ts +1 -0
  109. package/dist/commonjs/native/NativeNetworkInspector.js +1 -4
  110. package/dist/commonjs/network.js +1 -13
  111. package/dist/commonjs/performance.js +1 -29
  112. package/dist/commonjs/redux.js +1 -20
  113. package/dist/commonjs/storage.js +1 -14
  114. package/dist/commonjs/styles/AppColors.js +1 -423
  115. package/dist/commonjs/styles/AppFonts.js +1 -17
  116. package/dist/commonjs/styles/common.js +1 -190
  117. package/dist/commonjs/styles/index.d.ts +6 -0
  118. package/dist/commonjs/styles/index.js +1 -1589
  119. package/dist/commonjs/types/enums.d.ts +2 -1
  120. package/dist/commonjs/types/enums.js +1 -150
  121. package/dist/commonjs/types/index.js +1 -18
  122. package/dist/commonjs/types/interfaces.d.ts +7 -0
  123. package/dist/commonjs/types/interfaces.js +1 -2
  124. package/dist/esm/analytics.js +1 -2
  125. package/dist/esm/bundle.js +1 -2
  126. package/dist/esm/capture.d.ts +2 -0
  127. package/dist/esm/capture.js +1 -29
  128. package/dist/esm/components/AnalyticsDetail.js +171 -664
  129. package/dist/esm/components/AnalyticsEventCard.js +77 -335
  130. package/dist/esm/components/AnalyticsGraph.js +95 -357
  131. package/dist/esm/components/AnimatedEntrance.js +1 -6
  132. package/dist/esm/components/AppHeaderLogo.js +7 -94
  133. package/dist/esm/components/BrandCircleIcon.js +114 -119
  134. package/dist/esm/components/BrandSquareIcon.js +73 -78
  135. package/dist/esm/components/CodeSnippet.js +58 -595
  136. package/dist/esm/components/ConsoleLogCard.js +91 -526
  137. package/dist/esm/components/CopyButton.js +3 -51
  138. package/dist/esm/components/DiffViewer.js +22 -48
  139. package/dist/esm/components/DomainHeader.js +43 -138
  140. package/dist/esm/components/EmptyState.d.ts +1 -0
  141. package/dist/esm/components/EmptyState.js +17 -56
  142. package/dist/esm/components/EndOfListFooter.js +15 -83
  143. package/dist/esm/components/ErrorBoundary.js +125 -582
  144. package/dist/esm/components/HeadersSection.js +52 -93
  145. package/dist/esm/components/HighlightText.js +17 -53
  146. package/dist/esm/components/Inspector/AboutModal.d.ts +6 -0
  147. package/dist/esm/components/Inspector/AboutModal.js +351 -0
  148. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +225 -886
  149. package/dist/esm/components/Inspector/AnalyticsTab.js +296 -904
  150. package/dist/esm/components/Inspector/BundleTab.js +1175 -3502
  151. package/dist/esm/components/Inspector/ConsoleTab.js +113 -488
  152. package/dist/esm/components/Inspector/CrashDetail.js +236 -747
  153. package/dist/esm/components/Inspector/CrashFilterModal.js +149 -541
  154. package/dist/esm/components/Inspector/CrashTab.js +177 -711
  155. package/dist/esm/components/Inspector/DebuggingTab.js +156 -923
  156. package/dist/esm/components/Inspector/DeviceInfoTab.js +199 -924
  157. package/dist/esm/components/Inspector/FabLauncher.js +85 -49
  158. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +14 -70
  159. package/dist/esm/components/Inspector/FeedbackModal.d.ts +9 -0
  160. package/dist/esm/components/Inspector/FeedbackModal.js +182 -499
  161. package/dist/esm/components/Inspector/InspectorContext.js +1 -12
  162. package/dist/esm/components/Inspector/InspectorHeader.js +309 -1145
  163. package/dist/esm/components/Inspector/LogDetail.js +235 -1023
  164. package/dist/esm/components/Inspector/MainScreen.js +86 -320
  165. package/dist/esm/components/Inspector/MediaGalleryTab.js +157 -259
  166. package/dist/esm/components/Inspector/MediaPreviewModal.js +153 -340
  167. package/dist/esm/components/Inspector/NavigationTracker.js +1 -10
  168. package/dist/esm/components/Inspector/NetworkDetail.js +141 -472
  169. package/dist/esm/components/Inspector/NetworkFilterModal.js +122 -597
  170. package/dist/esm/components/Inspector/NetworkTab.js +125 -517
  171. package/dist/esm/components/Inspector/NpmStarPrompt.js +58 -434
  172. package/dist/esm/components/Inspector/NpmUpdateToast.js +45 -281
  173. package/dist/esm/components/Inspector/PerformanceTab.js +393 -1570
  174. package/dist/esm/components/Inspector/ReduxDetail.js +307 -1170
  175. package/dist/esm/components/Inspector/ReduxTab.js +144 -722
  176. package/dist/esm/components/Inspector/SettingsPanel.js +647 -3609
  177. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +30 -163
  178. package/dist/esm/components/Inspector/StorageTab.js +172 -866
  179. package/dist/esm/components/Inspector/TabBar.js +52 -183
  180. package/dist/esm/components/Inspector/UpdateAvailableModal.js +79 -416
  181. package/dist/esm/components/JsonViewer.js +179 -353
  182. package/dist/esm/components/LogCard.js +93 -565
  183. package/dist/esm/components/LogSyntaxHighlighter.js +11 -123
  184. package/dist/esm/components/MetaAccordion.js +136 -267
  185. package/dist/esm/components/MiniBarChart.js +3 -18
  186. package/dist/esm/components/MiniLineChart.js +3 -20
  187. package/dist/esm/components/NetworkIcons.d.ts +7 -0
  188. package/dist/esm/components/NetworkIcons.js +481 -817
  189. package/dist/esm/components/QRCodeView.js +8 -45
  190. package/dist/esm/components/SectionHeader.js +22 -39
  191. package/dist/esm/components/SegmentedTabs.js +8 -57
  192. package/dist/esm/components/SkeletonPlaceholder.js +30 -163
  193. package/dist/esm/components/Slider.js +24 -213
  194. package/dist/esm/components/SourcePageCard.js +65 -86
  195. package/dist/esm/components/Toast.js +10 -117
  196. package/dist/esm/components/TouchableScale.js +3 -19
  197. package/dist/esm/components/TreeNode.js +58 -95
  198. package/dist/esm/console.js +1 -2
  199. package/dist/esm/constants/index.js +1 -28
  200. package/dist/esm/constants/telemetryConfig.js +1 -3
  201. package/dist/esm/constants/version.d.ts +1 -1
  202. package/dist/esm/constants/version.js +1 -1
  203. package/dist/esm/crash.js +1 -2
  204. package/dist/esm/customHooks/analyticsLogger.js +1 -230
  205. package/dist/esm/customHooks/bundleAnalyzer.js +1 -944
  206. package/dist/esm/customHooks/consoleLogger.js +6 -432
  207. package/dist/esm/customHooks/crashHandler.js +7 -630
  208. package/dist/esm/customHooks/logFilters.js +1 -20
  209. package/dist/esm/customHooks/networkLogger.js +2 -519
  210. package/dist/esm/customHooks/performanceTracker.js +63 -723
  211. package/dist/esm/customHooks/reduxLogger.js +2 -293
  212. package/dist/esm/customHooks/storageInspector.js +1 -418
  213. package/dist/esm/customHooks/useAccordion.js +1 -16
  214. package/dist/esm/decorators/index.js +1 -95
  215. package/dist/esm/helpers/gaAnalyticsRegistry.js +1 -143
  216. package/dist/esm/helpers/index.js +8 -861
  217. package/dist/esm/helpers/memoryManager.js +1 -91
  218. package/dist/esm/helpers/qrGenerator.js +1 -364
  219. package/dist/esm/helpers/remoteConfig.js +1 -160
  220. package/dist/esm/helpers/searchQueryParser.js +1 -59
  221. package/dist/esm/helpers/settingsStore.js +1 -134
  222. package/dist/esm/helpers/telemetry.js +1 -489
  223. package/dist/esm/helpers/toast.js +1 -15
  224. package/dist/esm/i18n/index.js +1 -78
  225. package/dist/esm/i18n/locales/en.json +1 -1122
  226. package/dist/esm/index.js +7 -1967
  227. package/dist/esm/metro.js +6 -459
  228. package/dist/esm/native/NativeInspector.d.ts +3 -0
  229. package/dist/esm/native/NativeInspector.js +1 -370
  230. package/dist/esm/native/NativeNetworkInspector.d.ts +1 -0
  231. package/dist/esm/native/NativeNetworkInspector.js +1 -2
  232. package/dist/esm/network.js +1 -1
  233. package/dist/esm/performance.js +1 -2
  234. package/dist/esm/redux.js +1 -1
  235. package/dist/esm/storage.js +1 -1
  236. package/dist/esm/styles/AppColors.js +1 -417
  237. package/dist/esm/styles/AppFonts.js +1 -13
  238. package/dist/esm/styles/common.js +1 -186
  239. package/dist/esm/styles/index.d.ts +6 -0
  240. package/dist/esm/styles/index.js +1 -1551
  241. package/dist/esm/types/enums.d.ts +2 -1
  242. package/dist/esm/types/enums.js +1 -147
  243. package/dist/esm/types/index.js +1 -2
  244. package/dist/esm/types/interfaces.d.ts +7 -0
  245. package/dist/esm/types/interfaces.js +1 -1
  246. package/ios/NetworkInspectorModule.mm +253 -136
  247. package/package.json +5 -3
  248. package/react-native-inapp-inspector.podspec +1 -1
  249. package/src/native/NativeInspector.ts +17 -0
  250. package/src/native/NativeNetworkInspector.ts +1 -0
  251. package/src/analytics.ts +0 -35
  252. package/src/bundle.ts +0 -25
  253. package/src/capture.ts +0 -101
  254. package/src/components/AnalyticsDetail.tsx +0 -870
  255. package/src/components/AnalyticsEventCard.tsx +0 -444
  256. package/src/components/AnalyticsGraph.tsx +0 -583
  257. package/src/components/AnimatedEntrance.tsx +0 -20
  258. package/src/components/AppHeaderLogo.tsx +0 -143
  259. package/src/components/BrandCircleIcon.tsx +0 -144
  260. package/src/components/BrandSquareIcon.tsx +0 -184
  261. package/src/components/CodeSnippet.tsx +0 -725
  262. package/src/components/ConsoleLogCard.tsx +0 -679
  263. package/src/components/CopyButton.tsx +0 -87
  264. package/src/components/DiffViewer.tsx +0 -82
  265. package/src/components/DomainHeader.tsx +0 -224
  266. package/src/components/EmptyState.tsx +0 -95
  267. package/src/components/EndOfListFooter.tsx +0 -100
  268. package/src/components/ErrorBoundary.tsx +0 -688
  269. package/src/components/HeadersSection.tsx +0 -172
  270. package/src/components/HighlightText.tsx +0 -100
  271. package/src/components/Inspector/AnalyticsFilterModal.tsx +0 -1250
  272. package/src/components/Inspector/AnalyticsTab.tsx +0 -1362
  273. package/src/components/Inspector/BundleTab.tsx +0 -4768
  274. package/src/components/Inspector/ConsoleTab.tsx +0 -726
  275. package/src/components/Inspector/CrashDetail.tsx +0 -997
  276. package/src/components/Inspector/CrashFilterModal.tsx +0 -721
  277. package/src/components/Inspector/CrashTab.tsx +0 -933
  278. package/src/components/Inspector/DebuggingTab.tsx +0 -1103
  279. package/src/components/Inspector/DeviceInfoTab.tsx +0 -1397
  280. package/src/components/Inspector/FabLauncher.tsx +0 -80
  281. package/src/components/Inspector/FeatureUnderDevNotice.tsx +0 -94
  282. package/src/components/Inspector/FeedbackModal.tsx +0 -626
  283. package/src/components/Inspector/InspectorContext.tsx +0 -28
  284. package/src/components/Inspector/InspectorHeader.tsx +0 -1545
  285. package/src/components/Inspector/LogDetail.tsx +0 -1431
  286. package/src/components/Inspector/MainScreen.tsx +0 -459
  287. package/src/components/Inspector/MediaGalleryTab.tsx +0 -355
  288. package/src/components/Inspector/MediaPreviewModal.tsx +0 -435
  289. package/src/components/Inspector/NavigationTracker.tsx +0 -13
  290. package/src/components/Inspector/NetworkDetail.tsx +0 -795
  291. package/src/components/Inspector/NetworkFilterModal.tsx +0 -730
  292. package/src/components/Inspector/NetworkTab.tsx +0 -820
  293. package/src/components/Inspector/NpmStarPrompt.tsx +0 -532
  294. package/src/components/Inspector/NpmUpdateToast.tsx +0 -387
  295. package/src/components/Inspector/PerformanceTab.tsx +0 -1967
  296. package/src/components/Inspector/ReduxDetail.tsx +0 -1651
  297. package/src/components/Inspector/ReduxTab.tsx +0 -987
  298. package/src/components/Inspector/SettingsPanel.tsx +0 -4580
  299. package/src/components/Inspector/SkeletonPlaceholder.tsx +0 -206
  300. package/src/components/Inspector/StorageTab.tsx +0 -1159
  301. package/src/components/Inspector/TabBar.tsx +0 -263
  302. package/src/components/Inspector/UpdateAvailableModal.tsx +0 -555
  303. package/src/components/JsonViewer.tsx +0 -547
  304. package/src/components/LogCard.tsx +0 -694
  305. package/src/components/LogSyntaxHighlighter.tsx +0 -178
  306. package/src/components/MetaAccordion.tsx +0 -355
  307. package/src/components/MiniBarChart.tsx +0 -42
  308. package/src/components/MiniLineChart.tsx +0 -33
  309. package/src/components/NetworkIcons.tsx +0 -2599
  310. package/src/components/QRCodeView.tsx +0 -75
  311. package/src/components/SectionHeader.tsx +0 -101
  312. package/src/components/SegmentedTabs.tsx +0 -83
  313. package/src/components/SkeletonPlaceholder.tsx +0 -206
  314. package/src/components/Slider.tsx +0 -300
  315. package/src/components/SourcePageCard.tsx +0 -150
  316. package/src/components/Toast.tsx +0 -131
  317. package/src/components/TouchableScale.tsx +0 -61
  318. package/src/components/TreeNode.tsx +0 -171
  319. package/src/console.ts +0 -24
  320. package/src/constants/index.ts +0 -41
  321. package/src/constants/telemetryConfig.ts +0 -4
  322. package/src/constants/version.ts +0 -3
  323. package/src/crash.ts +0 -32
  324. package/src/customHooks/analyticsLogger.ts +0 -336
  325. package/src/customHooks/bundleAnalyzer.ts +0 -1256
  326. package/src/customHooks/consoleLogger.ts +0 -530
  327. package/src/customHooks/crashHandler.ts +0 -944
  328. package/src/customHooks/logFilters.ts +0 -32
  329. package/src/customHooks/networkLogger.ts +0 -624
  330. package/src/customHooks/performanceTracker.ts +0 -1014
  331. package/src/customHooks/reduxLogger.ts +0 -406
  332. package/src/customHooks/storageInspector.ts +0 -513
  333. package/src/customHooks/useAccordion.tsx +0 -27
  334. package/src/decorators/index.ts +0 -184
  335. package/src/helpers/gaAnalyticsRegistry.ts +0 -204
  336. package/src/helpers/index.ts +0 -1092
  337. package/src/helpers/memoryManager.ts +0 -138
  338. package/src/helpers/qrGenerator.ts +0 -430
  339. package/src/helpers/remoteConfig.ts +0 -212
  340. package/src/helpers/searchQueryParser.ts +0 -84
  341. package/src/helpers/settingsStore.ts +0 -171
  342. package/src/helpers/telemetry.ts +0 -568
  343. package/src/helpers/toast.ts +0 -17
  344. package/src/i18n/index.ts +0 -104
  345. package/src/i18n/locales/en.json +0 -1125
  346. package/src/index.tsx +0 -2635
  347. package/src/metro.ts +0 -598
  348. package/src/network.ts +0 -22
  349. package/src/performance.ts +0 -38
  350. package/src/redux.ts +0 -23
  351. package/src/storage.ts +0 -18
  352. package/src/styles/AppColors.ts +0 -455
  353. package/src/styles/AppFonts.ts +0 -26
  354. package/src/styles/common.ts +0 -209
  355. package/src/styles/index.ts +0 -1606
  356. package/src/types/enums.ts +0 -208
  357. package/src/types/index.ts +0 -34
  358. package/src/types/interfaces.ts +0 -530
@@ -1,1176 +1,340 @@
1
- import React, { useMemo } from 'react';
2
- import { Alert, Animated, Linking, Platform, Pressable, Text, TouchableOpacity, useWindowDimensions, View, } from 'react-native';
3
- import LinearGradient from 'react-native-linear-gradient';
4
- import { useInspector } from './InspectorContext';
5
- import TouchableScale from '../TouchableScale';
6
- import AppHeaderLogo from '../AppHeaderLogo';
7
- import styles from '../../styles';
8
- import { AppColors } from '../../styles/AppColors';
9
- import { AppFonts } from '../../styles/AppFonts';
10
- import { METHOD_COLORS } from '../../constants';
11
- import { LIB_VERSION } from '../../constants';
12
- import { getStatusColor, getAppName, formatTime, getSize, getAppVersionAndBuild, } from '../../helpers';
13
- import { triggerNativeHaptic, } from '../../native/NativeInspector';
14
- import { ScreenCapture } from '../../capture';
15
- import { showToast } from '../../helpers/toast';
16
- import { UpdateAvailableModal } from './UpdateAvailableModal';
17
- import { MediaPreviewModal } from './MediaPreviewModal';
18
- import { WhiteBackNavigation, TrashIcon, SettingsIcon, CloseWhite, ClockIcon, SizeIcon, AppleIcon, AndroidIcon, NpmIcon, ResetIcon, BoltIcon, InfoCircleIcon, CameraIcon, VideoCameraIcon, } from '../NetworkIcons';
19
- import { useTranslation } from '../../i18n';
20
- const InspectorHeader = React.memo(() => {
21
- const { t } = useTranslation();
22
- const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, setSettingsActiveSubTab, isFeedbackOpen, setIsFeedbackOpen, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = useInspector();
23
- const { width: windowWidth } = useWindowDimensions();
24
- const isNarrow = windowWidth < 360;
25
- const isCompact = windowWidth < 400;
26
- const isTablet = windowWidth >= 600;
27
- const [showUpdateModal, setShowUpdateModal] = React.useState(false);
28
- const [appVersionString, setAppVersionString] = React.useState(() => {
29
- return getAppVersionAndBuild().formatted;
30
- });
31
- const [isRecording, setIsRecording] = React.useState(false);
32
- const [recordingSeconds, setRecordingSeconds] = React.useState(0);
33
- const recordingTimerRef = React.useRef(null);
34
- React.useEffect(() => {
35
- ScreenCapture.isRecording()
36
- .then(active => {
37
- setIsRecording(active);
38
- })
39
- .catch(() => { });
40
- }, []);
41
- React.useEffect(() => {
42
- if (isRecording) {
43
- setRecordingSeconds(0);
44
- recordingTimerRef.current = setInterval(() => {
45
- setRecordingSeconds(s => s + 1);
46
- }, 1000);
47
- }
48
- else {
49
- if (recordingTimerRef.current) {
50
- clearInterval(recordingTimerRef.current);
51
- recordingTimerRef.current = null;
52
- }
53
- setRecordingSeconds(0);
54
- }
55
- return () => {
56
- if (recordingTimerRef.current) {
57
- clearInterval(recordingTimerRef.current);
58
- }
59
- };
60
- }, [isRecording]);
61
- const [previewMediaItem, setPreviewMediaItem] = React.useState(null);
62
- const handleTakeScreenshot = React.useCallback(async () => {
63
- try {
64
- triggerNativeHaptic('light');
65
- const result = await ScreenCapture.takeScreenshot({
66
- format: 'png',
67
- quality: 0.9,
68
- hideInspector: true,
69
- });
70
- if (result) {
71
- triggerNativeHaptic('success');
72
- const newItem = {
73
- id: `screenshot_${result.timestamp}.png`,
74
- type: 'image',
75
- format: result.format,
76
- uri: result.uri,
77
- filename: result.uri.split('/').pop() || `screenshot_${result.timestamp}.png`,
78
- sizeBytes: result.sizeBytes,
79
- timestamp: result.timestamp,
80
- width: result.width,
81
- height: result.height,
82
- };
83
- setPreviewMediaItem(newItem);
84
- showToast(t('header.screenshotCaptured'));
85
- }
86
- else {
87
- showToast(t('header.screenshotFailed'));
88
- }
89
- }
90
- catch {
91
- showToast(t('header.screenshotError'));
92
- }
93
- }, [t]);
94
- const handleToggleVideoRecording = React.useCallback(async () => {
95
- try {
96
- if (isRecording) {
97
- triggerNativeHaptic('medium');
98
- const result = await ScreenCapture.stopRecording();
99
- setIsRecording(false);
100
- if (result) {
101
- triggerNativeHaptic('success');
102
- const newItem = {
103
- id: `video_${result.timestamp}.${result.format}`,
104
- type: result.format === 'gif' ? 'gif' : 'video',
105
- format: result.format,
106
- uri: result.uri,
107
- filename: result.uri.split('/').pop() ||
108
- `video_${result.timestamp}.${result.format}`,
109
- sizeBytes: result.sizeBytes,
110
- timestamp: result.timestamp,
111
- durationMs: result.durationMs,
112
- width: result.width,
113
- height: result.height,
114
- hasAudio: result.hasAudio,
115
- };
116
- setPreviewMediaItem(newItem);
117
- showToast(t('header.recordingSaved', {
118
- duration: (result.durationMs / 1000).toFixed(1),
119
- }));
120
- }
121
- }
122
- else {
123
- triggerNativeHaptic('medium');
124
- const started = await ScreenCapture.startRecording({
125
- fps: 24,
126
- audioSource: 'none',
127
- });
128
- if (started) {
129
- setIsRecording(true);
130
- showToast(t('header.recordingStarted'));
131
- }
132
- else {
133
- showToast(t('header.recordingStartFailed'));
134
- }
135
- }
136
- }
137
- catch {
138
- showToast(t('header.recordingError'));
139
- setIsRecording(false);
140
- }
141
- }, [isRecording, t]);
142
- const formatTimer = (totalSeconds) => {
143
- const mins = Math.floor(totalSeconds / 60);
144
- const secs = totalSeconds % 60;
145
- return `${mins.toString().padStart(2, '0')}:${secs
146
- .toString()
147
- .padStart(2, '0')}`;
148
- };
149
- const envConfig = useMemo(() => {
150
- const rawEnv = (environment || (__DEV__ ? 'DEV' : 'PROD')).trim();
151
- const clean = rawEnv.toUpperCase();
152
- if (clean === 'DEV' || clean.includes('DEV') || clean === 'LOCAL') {
153
- return {
154
- label: rawEnv,
155
- bg: `${AppColors.emerald500}40`,
156
- border: `${AppColors.emerald400}8C`,
157
- text: AppColors.mintGreenBorder,
158
- };
159
- }
160
- if (clean === 'UAT' || clean === 'QA' || clean === 'TEST') {
161
- return {
162
- label: rawEnv,
163
- bg: `${AppColors.amber500}47`,
164
- border: `${AppColors.amber400}99`,
165
- text: AppColors.amberWarmBorder,
166
- };
167
- }
168
- if (clean === 'PREPROD' || clean === 'STAGE' || clean === 'STAGING') {
169
- return {
170
- label: rawEnv,
171
- bg: `${AppColors.purple500}47`,
172
- border: `${AppColors.purple400}99`,
173
- text: AppColors.violetSoftBorder,
174
- };
175
- }
176
- return {
177
- label: rawEnv,
178
- bg: `${AppColors.rose500}40`,
179
- border: `${AppColors.roseBorder}8C`,
180
- text: AppColors.errorBorder,
181
- };
182
- }, [environment]);
183
- const isDetailView = (activeTab === 'apis' && selected != null) ||
184
- (activeTab === 'analytics' && selectedEvent != null) ||
185
- (activeTab === 'logs' && selectedLog != null) ||
186
- (activeTab === 'redux' &&
187
- (selectedReduxSlice != null || selectedReduxAction != null)) ||
188
- (activeTab === 'crash' && selectedCrash != null);
189
- const isSettingsView = settingsPage !== null;
190
- const isAnySelected = isDetailView || isSettingsView || isFeedbackOpen;
191
- const settingsModuleTitle = useMemo(() => {
192
- switch (settingsPage) {
193
- case 'apis':
194
- return 'APIs (Network)';
195
- case 'logs':
196
- return 'Console Logs';
197
- case 'performance':
198
- return 'Performance Tracker';
199
- case 'bundle':
200
- return 'Bundle Analyzer';
201
- case 'crash':
202
- return 'Crash Protection';
203
- case 'analytics':
204
- return 'Analytics Logger';
205
- case 'redux':
206
- return 'Redux Inspector';
207
- default:
208
- return 'Settings & Modules';
209
- }
210
- }, [settingsPage]);
211
- const headerTopPadding = Platform.OS === 'ios' && modalHeightPercent >= 95 ? 44 : 0;
212
- const buttonSize = isNarrow ? 28 : isCompact ? 30 : 32;
213
- const logoSize = isNarrow ? 36 : isCompact ? 40 : 44;
214
- return (<>
215
- <View style={[
216
- styles.headerGradient,
217
- {
218
- minHeight: (isNarrow ? 48 : 52) + headerTopPadding,
219
- },
220
- ]}>
1
+ import B,{useMemo as de}from"react";import{Alert as ke,Animated as Z,Linking as at,Platform as ce,Pressable as He,StatusBar as nt,Text as C,TouchableOpacity as Ae,useWindowDimensions as st,View as S}from"react-native";import St from"react-native-linear-gradient";import{useInspector as Tt}from"./InspectorContext";import O from"../TouchableScale";import Ct from"../AppHeaderLogo";import i from"../../styles";import{AppColors as t}from"../../styles/AppColors";import{AppFonts as D}from"../../styles/AppFonts";import{METHOD_COLORS as Vt}from"../../constants";import{LIB_VERSION as ee}from"../../constants";import{getStatusColor as he,getAppName as Rt,formatTime as Dt,getSize as Be,getAppVersionAndBuild as It}from"../../helpers";import{triggerNativeHaptic as G}from"../../native/NativeInspector";import{ScreenCapture as E}from"../../capture";import{showToast as L}from"../../helpers/toast";import{UpdateAvailableModal as $t}from"./UpdateAvailableModal";import{MediaPreviewModal as Ht}from"./MediaPreviewModal";import{WhiteBackNavigation as At,TrashIcon as Bt,SettingsIcon as Mt,CloseWhite as Ot,ChevronDownIcon as Lt,ClockIcon as Se,SizeIcon as Pt,AppleIcon as Ft,AndroidIcon as Et,NpmIcon as Wt,ResetIcon as _t,BoltIcon as Nt,InfoCircleIcon as Ut,CameraIcon as Me,VideoCameraIcon as Oe}from"../NetworkIcons";import{useTranslation as Gt}from"../../i18n";const qt=B.memo(()=>{const{t:R}=Gt(),{modalHeightPercent:te,appIcon:Le,selected:I,setSelected:Pe,selectedEvent:v,setSelectedEvent:Fe,selectedLog:M,setSelectedLog:Ee,selectedReduxSlice:W,setSelectedReduxSlice:We,selectedReduxAction:q,setSelectedReduxAction:je,reduxState:_e,reduxLastActionMap:Ne,showHeaderInfo:Qt,setShowHeaderInfo:Jt,updateAvailable:ie,latestNpmVersion:Ue,clearAnim:Te,activePulseAnim:Ge,unreadPulseAnim:qe,runClearAllWithAnimation:Qe,settingsPage:P,setSettingsPage:re,isFeedbackOpen:oe,setIsFeedbackOpen:Je,isAboutOpen:le,setIsAboutOpen:xe,resetToDefaults:Ke,closeModal:ze,minimizeInspector:Xe,detailTitle:Ye,activeTab:A,environment:Ce,visible:Kt,selectedCrash:$,setSelectedCrash:Ze,refreshMediaCount:j}=Tt(),{width:_}=st(),e=_<360,Q=_<400,Xt=_>=600,[et,ae]=B.useState(!1),[tt,Yt]=B.useState(()=>It().formatted),[k,J]=B.useState(!1),[it,ne]=B.useState(0),F=B.useRef(null);B.useEffect(()=>{E.isRecording().then(T=>{J(T)}).catch(()=>{})},[]),B.useEffect(()=>(k?(ne(0),F.current=setInterval(()=>{ne(T=>T+1)},1e3)):(F.current&&(clearInterval(F.current),F.current=null),ne(0)),()=>{F.current&&clearInterval(F.current)}),[k]);const[Ve,N]=B.useState(null),Re=B.useCallback(async()=>{try{G("light");const T=await E.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(T){G("success");const V={id:`screenshot_${T.timestamp}.png`,type:"image",format:T.format,uri:T.uri,filename:T.uri.split("/").pop()||`screenshot_${T.timestamp}.png`,sizeBytes:T.sizeBytes,timestamp:T.timestamp,width:T.width,height:T.height};N(V),j?.().catch(()=>{}),L(R("header.screenshotCaptured"))}else L(R("header.screenshotFailed"))}catch{L(R("header.screenshotError"))}},[j,R]),De=B.useCallback(async()=>{try{if(k){G("medium");const T=await E.stopRecording();if(J(!1),T){G("success");const V={id:`video_${T.timestamp}.${T.format}`,type:T.format==="gif"?"gif":"video",format:T.format,uri:T.uri,filename:T.uri.split("/").pop()||`video_${T.timestamp}.${T.format}`,sizeBytes:T.sizeBytes,timestamp:T.timestamp,durationMs:T.durationMs,width:T.width,height:T.height,hasAudio:T.hasAudio};N(V),j?.().catch(()=>{}),L(R("header.recordingSaved",{duration:(T.durationMs/1e3).toFixed(1)}))}}else G("medium"),await E.startRecording({fps:24,audioSource:"none"})?(J(!0),L(R("header.recordingStarted"))):L(R("header.recordingStartFailed"))}catch{L(R("header.recordingError")),J(!1)}},[k,R]),rt=T=>{const V=Math.floor(T/60),se=T%60;return`${V.toString().padStart(2,"0")}:${se.toString().padStart(2,"0")}`},K=de(()=>{const T=(Ce||(__DEV__?"DEV":"PROD")).trim(),V=T.toUpperCase();return V==="DEV"||V.includes("DEV")||V==="LOCAL"?{label:T,bg:`${t.emerald500}40`,border:`${t.emerald400}8C`,text:t.mintGreenBorder}:V==="UAT"||V==="QA"||V==="TEST"?{label:T,bg:`${t.amber500}47`,border:`${t.amber400}99`,text:t.amberWarmBorder}:V==="PREPROD"||V==="STAGE"||V==="STAGING"?{label:T,bg:`${t.purple500}47`,border:`${t.purple400}99`,text:t.violetSoftBorder}:{label:T,bg:`${t.rose500}40`,border:`${t.roseBorder}8C`,text:t.errorBorder}},[Ce]),X=A==="apis"&&I!=null||A==="analytics"&&v!=null||A==="logs"&&M!=null||A==="redux"&&(W!=null||q!=null)||A==="crash"&&$!=null,Y=P!==null,U=X||Y||oe||le,ot=de(()=>{switch(P){case"apis":return"APIs (Network)";case"logs":return"Console Logs";case"performance":return"Performance Tracker";case"bundle":return"Bundle Analyzer";case"crash":return"Crash Protection";case"analytics":return"Analytics Logger";case"redux":return"Redux Inspector";default:return"Settings & Modules"}},[P]),Ie=de(()=>ce.OS==="ios"?te>=98?_>=390?50:44:0:ce.OS==="android"&&te>=98?nt.currentHeight||24:0,[te,_]),H=e?28:Q?30:32,lt=e?42:Q?46:50;return<>
2
+ <S style={[i.headerGradient,{minHeight:(e?58:62)+Ie}]}>
221
3
 
222
- <LinearGradient colors={[AppColors.indigo600, AppColors.violet600]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={{
223
- position: 'absolute',
224
- top: 0,
225
- left: 0,
226
- right: 0,
227
- bottom: 0,
228
- borderTopLeftRadius: 20,
229
- borderTopRightRadius: 20,
230
- }} pointerEvents="none"/>
231
- <View style={{ paddingTop: headerTopPadding, width: '100%' }}>
232
- <View style={[
233
- styles.header,
234
- {
235
- paddingHorizontal: isNarrow ? 8 : 12,
236
- paddingVertical: isNarrow ? 6 : 8,
237
- minHeight: isNarrow ? 48 : 52,
238
- },
239
- ]}>
240
- <View style={{
241
- flexDirection: 'row',
242
- alignItems: 'center',
243
- gap: isNarrow ? 6 : 8,
244
- flexShrink: 0,
245
- flex: isAnySelected ? undefined : 1,
246
- minWidth: isAnySelected ? (isNarrow ? 32 : 36) : 0,
247
- }}>
248
- {isAnySelected && (<TouchableScale onPress={() => {
249
- if (isFeedbackOpen) {
250
- setIsFeedbackOpen(false);
251
- return;
252
- }
253
- if (isSettingsView) {
254
- if (settingsPage === 'main') {
255
- setSettingsPage(null);
256
- }
257
- else {
258
- setSettingsPage('main');
259
- }
260
- return;
261
- }
262
- setSelected(null);
263
- setSelectedEvent(null);
264
- setSelectedLog(null);
265
- setSelectedReduxSlice(null);
266
- setSelectedReduxAction(null);
267
- setSelectedCrash(null);
268
- }} hitSlop={15} style={{
269
- width: isNarrow ? 32 : 36,
270
- height: isNarrow ? 32 : 36,
271
- borderRadius: isNarrow ? 16 : 18,
272
- alignItems: 'center',
273
- justifyContent: 'center',
274
- backgroundColor: `${AppColors.white}2E`,
275
- borderWidth: 1,
276
- borderColor: `${AppColors.white}4D`,
277
- }}>
278
- <View style={{
279
- position: 'absolute',
280
- width: isNarrow ? 40 : 44,
281
- height: isNarrow ? 40 : 44,
282
- borderRadius: 22,
283
- backgroundColor: `${AppColors.white}1A`,
284
- }}/>
285
- <WhiteBackNavigation />
286
- </TouchableScale>)}
4
+ <St colors={[t.indigo600,t.violet600]}start={{x:0,y:0}}end={{x:1,y:1}}style={{position:"absolute",top:0,left:0,right:0,bottom:0,borderTopLeftRadius:20,borderTopRightRadius:20}}pointerEvents="none"/>
5
+ <S style={{paddingTop:Ie,width:"100%"}}>
6
+ <S style={[i.header,{width:"100%",justifyContent:"space-between",paddingHorizontal:e?12:16,paddingVertical:e?8:10,minHeight:e?52:56}]}>
7
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?8:10,flex:X?void 0:1,flexShrink:X?0:1,minWidth:0}}>
8
+ {U&&<O onPress={()=>{if(le){xe(!1);return}if(oe){Je(!1);return}if(Y){re(P==="main"?null:"main");return}Pe(null),Fe(null),Ee(null),We(null),je(null),Ze(null)}}hitSlop={15}style={{width:e?32:36,height:e?32:36,borderRadius:e?16:18,alignItems:"center",justifyContent:"center",backgroundColor:`${t.white}2E`,borderWidth:1,borderColor:`${t.white}4D`}}>
9
+ <S style={{position:"absolute",width:e?40:44,height:e?40:44,borderRadius:22,backgroundColor:`${t.white}1A`}}/>
10
+ <At/>
11
+ </O>}
287
12
 
288
- {isFeedbackOpen ? (<View style={{ gap: 2, flex: 1, minWidth: 0 }}>
289
- <View style={{
290
- flexDirection: 'row',
291
- alignItems: 'center',
292
- gap: 6,
293
- }}>
294
- <Text style={{
295
- fontFamily: AppFonts.interBold,
296
- fontSize: isNarrow ? 14 : 16,
297
- color: AppColors.white,
298
- letterSpacing: -0.2,
299
- }} numberOfLines={1}>
13
+ {le?<S style={{gap:3,flex:1,minWidth:0,justifyContent:"center"}}>
14
+ <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
15
+ <C style={{fontFamily:D.interBold,fontSize:e?15:16.5,lineHeight:e?19:21,color:t.white,letterSpacing:-.2}}numberOfLines={1}>
16
+ About & Specs
17
+ </C>
18
+ <S style={{backgroundColor:`${t.white}26`,paddingHorizontal:e?5:6,paddingVertical:2,borderRadius:8,borderWidth:1,borderColor:`${t.white}20`}}>
19
+ <C style={{fontFamily:D.interBold,fontSize:e?8.5:9.5,lineHeight:12,color:t.white}}>
20
+ v{ee}
21
+ </C>
22
+ </S>
23
+ </S>
24
+ <C style={{fontFamily:D.interRegular,fontSize:e?10:11,lineHeight:e?14:15,color:`${t.white}CC`,marginTop:1}}numberOfLines={1}>
25
+ Package info, runtime specs & diagnostic payload
26
+ </C>
27
+ </S>:oe?<S style={{gap:3,flex:1,minWidth:0,justifyContent:"center"}}>
28
+ <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
29
+ <C style={{fontFamily:D.interBold,fontSize:e?15:16.5,lineHeight:e?19:21,color:t.white,letterSpacing:-.2}}numberOfLines={1}>
300
30
  Support & Feedback
301
- </Text>
302
- <View style={{
303
- backgroundColor: `${AppColors.white}26`,
304
- paddingHorizontal: isNarrow ? 4 : 6,
305
- paddingVertical: 1.5,
306
- borderRadius: 10,
307
- borderWidth: 1,
308
- borderColor: `${AppColors.white}20`,
309
- }}>
310
- <Text style={{
311
- fontFamily: AppFonts.interBold,
312
- fontSize: isNarrow ? 8 : 9,
313
- color: AppColors.white,
314
- }}>
315
- v{LIB_VERSION}
316
- </Text>
317
- </View>
318
- </View>
319
- <Text style={{
320
- fontFamily: AppFonts.interRegular,
321
- fontSize: isNarrow ? 9.5 : 10.5,
322
- color: `${AppColors.white}CC`,
323
- }} numberOfLines={1}>
31
+ </C>
32
+ <S style={{backgroundColor:`${t.white}26`,paddingHorizontal:e?5:6,paddingVertical:2,borderRadius:8,borderWidth:1,borderColor:`${t.white}20`}}>
33
+ <C style={{fontFamily:D.interBold,fontSize:e?8.5:9.5,lineHeight:12,color:t.white}}>
34
+ v{ee}
35
+ </C>
36
+ </S>
37
+ </S>
38
+ <C style={{fontFamily:D.interRegular,fontSize:e?10:11,lineHeight:e?14:15,color:`${t.white}CC`,marginTop:1}}numberOfLines={1}>
324
39
  Direct line to maintainers & developers
325
- </Text>
326
- </View>) : isSettingsView ? (<View style={{ gap: 2, flex: 1, minWidth: 0 }}>
327
- <View style={{
328
- flexDirection: 'row',
329
- alignItems: 'center',
330
- gap: 6,
331
- }}>
332
- <Text style={{
333
- fontFamily: AppFonts.interBold,
334
- fontSize: isNarrow ? 14 : 16,
335
- color: AppColors.white,
336
- letterSpacing: -0.2,
337
- }} numberOfLines={1}>
338
- {settingsModuleTitle}
339
- </Text>
340
- {settingsPage === 'main' && (<View style={{
341
- backgroundColor: `${AppColors.white}26`,
342
- paddingHorizontal: isNarrow ? 4 : 6,
343
- paddingVertical: 1.5,
344
- borderRadius: 10,
345
- borderWidth: 1,
346
- borderColor: `${AppColors.white}20`,
347
- }}>
348
- <Text style={{
349
- fontFamily: AppFonts.interBold,
350
- fontSize: isNarrow ? 8 : 9,
351
- color: AppColors.white,
352
- }}>
353
- v{LIB_VERSION}
354
- </Text>
355
- </View>)}
356
- </View>
357
- <Text style={{
358
- fontFamily: AppFonts.interRegular,
359
- fontSize: isNarrow ? 9.5 : 10.5,
360
- color: `${AppColors.white}CC`,
361
- }} numberOfLines={1}>
362
- {settingsPage === 'main'
363
- ? 'Manage modules and preferences'
364
- : 'Configure module parameters'}
365
- </Text>
366
- </View>) : !isAnySelected ? (<View style={{
367
- flexDirection: 'row',
368
- alignItems: 'center',
369
- gap: isNarrow ? 6 : 8,
370
- flex: 1,
371
- minWidth: 0,
372
- marginRight: 4,
373
- }}>
374
- <AppHeaderLogo size={logoSize} customIcon={appIcon}/>
375
- <View style={{ gap: 2, flex: 1, minWidth: 0 }}>
376
- <View style={{
377
- flexDirection: 'row',
378
- alignItems: 'center',
379
- gap: isNarrow ? 4 : 6,
380
- minWidth: 0,
381
- }}>
382
- <Text style={[
383
- styles.headerTitle,
384
- {
385
- fontSize: isNarrow ? 13.5 : isCompact ? 14.5 : 15.5,
386
- flexShrink: 1,
387
- paddingBottom: 0,
388
- },
389
- ]} numberOfLines={1} ellipsizeMode="tail">
390
- {getAppName()}
391
- </Text>
392
- <View style={[
393
- styles.envBadge,
394
- {
395
- backgroundColor: envConfig.bg,
396
- borderColor: envConfig.border,
397
- flexShrink: 0,
398
- paddingHorizontal: isNarrow ? 4.5 : 6,
399
- paddingVertical: 1.5,
400
- marginBottom: 0,
401
- },
402
- ]}>
403
- <Text style={[
404
- styles.envBadgeText,
405
- {
406
- color: envConfig.text,
407
- fontSize: isNarrow ? 8.5 : 9.5,
408
- },
409
- ]}>
410
- {envConfig.label}
411
- </Text>
412
- </View>
413
- {updateAvailable && (<Pressable hitSlop={10} onPress={() => setShowUpdateModal(true)} style={{
414
- flexDirection: 'row',
415
- alignItems: 'center',
416
- backgroundColor: AppColors.warningAmber,
417
- borderRadius: 5,
418
- paddingHorizontal: isNarrow ? 4 : 5.5,
419
- paddingVertical: 1.5,
420
- gap: 3,
421
- shadowColor: AppColors.warningAmber,
422
- shadowOffset: { width: 0, height: 1.5 },
423
- shadowOpacity: 0.35,
424
- shadowRadius: 3,
425
- elevation: 3,
426
- flexShrink: 0,
427
- }}>
428
- <Animated.View style={{
429
- width: 5,
430
- height: 5,
431
- borderRadius: 2.5,
432
- backgroundColor: AppColors.white,
433
- opacity: activePulseAnim,
434
- transform: [{ scale: unreadPulseAnim }],
435
- }}/>
436
- {!isNarrow && (<Text style={{
437
- fontFamily: AppFonts.interBold,
438
- fontSize: 8.5,
439
- color: AppColors.white,
440
- letterSpacing: 0.3,
441
- }}>
40
+ </C>
41
+ </S>:Y?<S style={{gap:3,flex:1,minWidth:0,justifyContent:"center"}}>
42
+ <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
43
+ <C style={{fontFamily:D.interBold,fontSize:e?15:16.5,lineHeight:e?19:21,color:t.white,letterSpacing:-.2}}numberOfLines={1}>
44
+ {ot}
45
+ </C>
46
+ {P==="main"&&<S style={{backgroundColor:`${t.white}26`,paddingHorizontal:e?5:6,paddingVertical:2,borderRadius:8,borderWidth:1,borderColor:`${t.white}20`}}>
47
+ <C style={{fontFamily:D.interBold,fontSize:e?8.5:9.5,lineHeight:12,color:t.white}}>
48
+ v{ee}
49
+ </C>
50
+ </S>}
51
+ </S>
52
+ <C style={{fontFamily:D.interRegular,fontSize:e?10:11,lineHeight:e?14:15,color:`${t.white}CC`,marginTop:1}}numberOfLines={1}>
53
+ {P==="main"?"Manage modules and preferences":"Configure module parameters"}
54
+ </C>
55
+ </S>:U?null:<S style={{flexDirection:"row",alignItems:"center",gap:e?10:12,flex:1,minWidth:0,marginRight:4}}>
56
+ <Ct size={lt}customIcon={Le}/>
57
+ <S style={{gap:4,flex:1,minWidth:0,justifyContent:"center"}}>
58
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?6:7,minWidth:0}}>
59
+ <C style={[i.headerTitle,{fontSize:e?15:Q?16:17,lineHeight:e?20:Q?22:23,flexShrink:1,paddingBottom:0}]}numberOfLines={1}ellipsizeMode="tail">
60
+ {Rt()}
61
+ </C>
62
+ <S style={[i.envBadge,{backgroundColor:K.bg,borderColor:K.border,flexShrink:0,paddingHorizontal:e?6:7,paddingVertical:2.5,borderRadius:6,marginBottom:0}]}>
63
+ <C style={[i.envBadgeText,{color:K.text,fontSize:e?9:10,lineHeight:13}]}>
64
+ {K.label}
65
+ </C>
66
+ </S>
67
+ {ie&&<He hitSlop={10}onPress={()=>ae(!0)}style={{flexDirection:"row",alignItems:"center",backgroundColor:t.warningAmber,borderRadius:6,paddingHorizontal:e?5:6.5,paddingVertical:2.5,gap:3.5,shadowColor:t.warningAmber,shadowOffset:{width:0,height:1.5},shadowOpacity:.35,shadowRadius:3,elevation:3,flexShrink:0}}>
68
+ <Z.View style={{width:5,height:5,borderRadius:2.5,backgroundColor:t.white,opacity:Ge,transform:[{scale:qe}]}}/>
69
+ {!e&&<C style={{fontFamily:D.interBold,fontSize:8.5,lineHeight:11,color:t.white,letterSpacing:.3}}>
442
70
  UPDATE
443
- </Text>)}
444
- <BoltIcon size={isNarrow ? 8 : 9} color={AppColors.white}/>
445
- </Pressable>)}
446
- </View>
71
+ </C>}
72
+ <Nt size={e?8:9}color={t.white}/>
73
+ </He>}
74
+ </S>
447
75
 
448
76
 
449
- <View style={{
450
- flexDirection: 'row',
451
- alignItems: 'center',
452
- gap: isNarrow ? 4 : 5,
453
- minWidth: 0,
454
- }}>
455
- <View style={{
456
- flexDirection: 'row',
457
- alignItems: 'center',
458
- backgroundColor: `${AppColors.white}1F`,
459
- borderRadius: 5,
460
- paddingHorizontal: isNarrow ? 4.5 : 6,
461
- paddingVertical: 2,
462
- gap: 3.5,
463
- borderWidth: 1,
464
- borderColor: `${AppColors.white}2E`,
465
- flexShrink: 1,
466
- minWidth: 0,
467
- }}>
468
- {Platform.OS === 'ios' ? (<AppleIcon color={`${AppColors.white}E6`} size={isNarrow ? 9 : 10}/>) : (<AndroidIcon color={`${AppColors.white}E6`} size={isNarrow ? 9 : 10}/>)}
469
- <Text style={{
470
- fontFamily: AppFonts.interMedium,
471
- fontSize: isNarrow ? 8.5 : 9.5,
472
- color: `${AppColors.white}EB`,
473
- letterSpacing: 0.1,
474
- }} numberOfLines={1} ellipsizeMode="tail">
475
- {appVersionString}
476
- </Text>
477
- </View>
77
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?5:6,minWidth:0,marginTop:2}}>
78
+ <S style={{flexDirection:"row",alignItems:"center",backgroundColor:`${t.white}1F`,borderRadius:6,paddingHorizontal:e?6:7,paddingVertical:3,gap:4,borderWidth:1,borderColor:`${t.white}2E`,flexShrink:1,minWidth:0}}>
79
+ {ce.OS==="ios"?<Ft color={`${t.white}E6`}size={e?9.5:10.5}/>:<Et color={`${t.white}E6`}size={e?9.5:10.5}/>}
80
+ <C style={{fontFamily:D.interMedium,fontSize:e?9:10,lineHeight:13,color:`${t.white}EB`,letterSpacing:.1}}numberOfLines={1}ellipsizeMode="tail">
81
+ {tt}
82
+ </C>
83
+ </S>
478
84
 
479
- <Pressable onPress={() => {
480
- if (updateAvailable) {
481
- setShowUpdateModal(true);
482
- }
483
- else {
484
- Linking.openURL('https://www.npmjs.com/package/react-native-inapp-inspector').catch(() => { });
485
- }
486
- }} style={{
487
- flexDirection: 'row',
488
- alignItems: 'center',
489
- backgroundColor: `${AppColors.white}1F`,
490
- borderRadius: 5,
491
- paddingHorizontal: isNarrow ? 4.5 : 6,
492
- paddingVertical: 2,
493
- gap: 3.5,
494
- borderWidth: 1,
495
- borderColor: `${AppColors.white}2E`,
496
- flexShrink: 0,
497
- }}>
498
- <NpmIcon size={isNarrow ? 9 : 10} color={AppColors.npmRedLight}/>
499
- <Text style={{
500
- fontFamily: AppFonts.interMedium,
501
- fontSize: isNarrow ? 8.5 : 9.5,
502
- color: `${AppColors.white}EB`,
503
- letterSpacing: 0.1,
504
- }} numberOfLines={1}>
505
- v{LIB_VERSION}
506
- </Text>
507
- {updateAvailable && (<Text style={{
508
- fontFamily: AppFonts.interBold,
509
- fontSize: 8.5,
510
- color: AppColors.warningAmber,
511
- }}>
85
+ <He onPress={()=>{ie?ae(!0):at.openURL("https://www.npmjs.com/package/react-native-inapp-inspector").catch(()=>{})}}style={{flexDirection:"row",alignItems:"center",backgroundColor:`${t.white}1F`,borderRadius:6,paddingHorizontal:e?6:7,paddingVertical:3,gap:4,borderWidth:1,borderColor:`${t.white}2E`,flexShrink:0}}>
86
+ <Wt size={e?9.5:10.5}color={t.npmRedLight}/>
87
+ <C style={{fontFamily:D.interMedium,fontSize:e?9:10,lineHeight:13,color:`${t.white}EB`,letterSpacing:.1}}numberOfLines={1}>
88
+ v{ee}
89
+ </C>
90
+ {ie&&<C style={{fontFamily:D.interBold,fontSize:8.5,color:t.warningAmber}}>
512
91
  ●
513
- </Text>)}
514
- </Pressable>
515
- </View>
516
- </View>
517
- </View>) : null}
518
- </View>
92
+ </C>}
93
+ </He>
94
+ </S>
95
+ </S>
96
+ </S>}
97
+ </S>
519
98
 
520
- {isDetailView && (<View style={[
521
- styles.headerCenter,
522
- { paddingHorizontal: isNarrow ? 2 : 6 },
523
- ]}>
524
- {activeTab === 'apis' && selected != null ? (<View style={styles.headerDetailCenter}>
525
- <View style={styles.headerDetailRow}>
526
- <View style={[
527
- styles.headerMethodBadge,
528
- {
529
- backgroundColor: METHOD_COLORS[selected.method] ??
530
- AppColors.grayText,
531
- paddingHorizontal: isNarrow ? 5 : 6,
532
- paddingVertical: isNarrow ? 2 : 3,
533
- },
534
- ]}>
535
- <Text style={[
536
- styles.headerMethodText,
537
- { fontSize: isNarrow ? 9 : 10 },
538
- ]}>
539
- {selected.method}
540
- </Text>
541
- </View>
542
- <Text style={[
543
- styles.headerDetailTitle,
544
- { fontSize: isNarrow ? 13.5 : 15 },
545
- ]} numberOfLines={1} ellipsizeMode="middle">
546
- {detailTitle}
547
- </Text>
548
- </View>
549
- <View style={{
550
- flexDirection: 'row',
551
- alignItems: 'center',
552
- gap: isNarrow ? 4 : 6,
553
- marginTop: 3,
554
- paddingVertical: 1,
555
- }}>
556
- <View style={{
557
- flexDirection: 'row',
558
- alignItems: 'center',
559
- gap: 4,
560
- paddingHorizontal: isNarrow ? 6 : 8,
561
- paddingVertical: 2.5,
562
- borderRadius: 20,
563
- backgroundColor: `${getStatusColor(selected.status)}26`,
564
- borderWidth: 1,
565
- borderColor: `${getStatusColor(selected.status)}55`,
566
- }}>
567
- <View style={[
568
- styles.headerStatusDot,
569
- {
570
- backgroundColor: getStatusColor(selected.status),
571
- width: isNarrow ? 6 : 7,
572
- height: isNarrow ? 6 : 7,
573
- },
574
- ]}/>
575
- <Text style={[
576
- styles.headerSubTitle,
577
- {
578
- fontFamily: AppFonts.interBold,
579
- fontSize: isNarrow ? 10 : 11,
580
- },
581
- ]}>
582
- {selected.status === 0
583
- ? 'Failed'
584
- : selected.status ?? 'Pending'}
585
- </Text>
586
- </View>
587
- <View style={{
588
- flexDirection: 'row',
589
- alignItems: 'center',
590
- gap: 4,
591
- paddingHorizontal: isNarrow ? 6 : 8,
592
- paddingVertical: 2.5,
593
- borderRadius: 20,
594
- backgroundColor: `${AppColors.white}29`,
595
- }}>
596
- <ClockIcon color={AppColors.white} size={isNarrow ? 10 : 11}/>
597
- <Text style={[
598
- styles.headerSubTitle,
599
- { fontSize: isNarrow ? 10 : 11 },
600
- ]}>
601
- {selected.duration != null
602
- ? `${selected.duration}ms`
603
- : '—'}
604
- </Text>
605
- </View>
606
- {selected.response != null && (<View style={{
607
- flexDirection: 'row',
608
- alignItems: 'center',
609
- gap: 4,
610
- paddingHorizontal: isNarrow ? 6 : 8,
611
- paddingVertical: 2.5,
612
- borderRadius: 20,
613
- backgroundColor: `${AppColors.white}29`,
614
- }}>
615
- <SizeIcon color={AppColors.white} size={isNarrow ? 10 : 11}/>
616
- <Text style={[
617
- styles.headerSubTitle,
618
- { fontSize: isNarrow ? 10 : 11 },
619
- ]}>
620
- {getSize(selected.response)}
621
- </Text>
622
- </View>)}
623
- </View>
624
- </View>) : activeTab === 'analytics' && selectedEvent != null ? (<View style={styles.headerDetailCenter}>
625
- <View style={styles.headerDetailRow}>
626
- <View style={[
627
- styles.headerMethodBadge,
628
- {
629
- backgroundColor: selectedEvent.source === 'firebase'
630
- ? `${AppColors.firebaseOrange}4D`
631
- : `${AppColors.purple}4D`,
632
- paddingHorizontal: isNarrow ? 5 : 6,
633
- paddingVertical: isNarrow ? 2 : 3,
634
- },
635
- ]}>
636
- <Text style={[
637
- styles.headerMethodText,
638
- { fontSize: isNarrow ? 9 : 10 },
639
- ]}>
640
- {selectedEvent.source === 'firebase' ? 'FB' : 'MAN'}
641
- </Text>
642
- </View>
643
- <Text style={[
644
- styles.headerDetailTitle,
645
- { fontSize: isNarrow ? 13.5 : 15 },
646
- ]} numberOfLines={1} ellipsizeMode="middle">
647
- {selectedEvent.name}
648
- </Text>
649
- </View>
650
- <View style={{
651
- flexDirection: 'row',
652
- alignItems: 'center',
653
- gap: isNarrow ? 4 : 6,
654
- marginTop: 3,
655
- paddingVertical: 1,
656
- }}>
657
- <View style={[
658
- styles.headerStatusDot,
659
- {
660
- backgroundColor: selectedEvent.source === 'firebase'
661
- ? AppColors.firebaseOrange
662
- : AppColors.purple,
663
- width: isNarrow ? 6 : 7,
664
- height: isNarrow ? 6 : 7,
665
- },
666
- ]}/>
667
- <Text style={[
668
- styles.headerSubTitle,
669
- { fontSize: isNarrow ? 10 : 11 },
670
- ]}>
671
- {Object.keys(selectedEvent.params).length} param
672
- {Object.keys(selectedEvent.params).length !== 1
673
- ? 's'
674
- : ''}
675
- {' · '}
676
- {selectedEvent.source}
677
- </Text>
678
- </View>
679
- </View>) : activeTab === 'logs' && selectedLog != null ? (<View style={styles.headerDetailCenter}>
680
- <View style={styles.headerDetailRow}>
681
- <View style={[
682
- styles.headerMethodBadge,
683
- {
684
- backgroundColor: selectedLog.type === 'error'
685
- ? `${AppColors.errorColor}4D`
686
- : selectedLog.type === 'warn'
687
- ? `${AppColors.lightOrange}4D`
688
- : `${AppColors.purple}4D`,
689
- paddingHorizontal: isNarrow ? 5 : 6,
690
- paddingVertical: isNarrow ? 2 : 3,
691
- },
692
- ]}>
693
- <Text style={[
694
- styles.headerMethodText,
695
- { fontSize: isNarrow ? 9 : 10 },
696
- ]}>
697
- {selectedLog.type.toUpperCase()}
698
- </Text>
699
- </View>
700
- <Text style={[
701
- styles.headerDetailTitle,
702
- { fontSize: isNarrow ? 13.5 : 15 },
703
- ]} numberOfLines={1} ellipsizeMode="middle">
99
+ {X&&<S style={[i.headerCenter,{paddingHorizontal:e?2:6}]}>
100
+ {A==="apis"&&I!=null?<S style={i.headerDetailCenter}>
101
+ <S style={i.headerDetailRow}>
102
+ <S style={[i.headerMethodBadge,{backgroundColor:Vt[I.method]??t.grayText,paddingHorizontal:e?5:6,paddingVertical:e?2:3}]}>
103
+ <C style={[i.headerMethodText,{fontSize:e?9:10}]}>
104
+ {I.method}
105
+ </C>
106
+ </S>
107
+ <C style={[i.headerDetailTitle,{fontSize:e?13.5:15}]}numberOfLines={1}ellipsizeMode="middle">
108
+ {Ye}
109
+ </C>
110
+ </S>
111
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
112
+ <S style={{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:e?6:8,paddingVertical:2.5,borderRadius:20,backgroundColor:`${he(I.status)}26`,borderWidth:1,borderColor:`${he(I.status)}55`}}>
113
+ <S style={[i.headerStatusDot,{backgroundColor:he(I.status),width:e?6:7,height:e?6:7}]}/>
114
+ <C style={[i.headerSubTitle,{fontFamily:D.interBold,fontSize:e?10:11}]}>
115
+ {I.status===0?"Failed":I.status??"Pending"}
116
+ </C>
117
+ </S>
118
+ <S style={{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:e?6:8,paddingVertical:2.5,borderRadius:20,backgroundColor:`${t.white}29`}}>
119
+ <Se color={t.white}size={e?10:11}/>
120
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
121
+ {I.duration!=null?`${I.duration}ms`:"\u2014"}
122
+ </C>
123
+ </S>
124
+ {I.response!=null&&<S style={{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:e?6:8,paddingVertical:2.5,borderRadius:20,backgroundColor:`${t.white}29`}}>
125
+ <Pt color={t.white}size={e?10:11}/>
126
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
127
+ {Be(I.response)}
128
+ </C>
129
+ </S>}
130
+ </S>
131
+ </S>:A==="analytics"&&v!=null?<S style={i.headerDetailCenter}>
132
+ <S style={i.headerDetailRow}>
133
+ <S style={[i.headerMethodBadge,{backgroundColor:v.source==="firebase"?`${t.firebaseOrange}4D`:`${t.purple}4D`,paddingHorizontal:e?5:6,paddingVertical:e?2:3}]}>
134
+ <C style={[i.headerMethodText,{fontSize:e?9:10}]}>
135
+ {v.source==="firebase"?"FB":"MAN"}
136
+ </C>
137
+ </S>
138
+ <C style={[i.headerDetailTitle,{fontSize:e?13.5:15}]}numberOfLines={1}ellipsizeMode="middle">
139
+ #{v.id!=null?v.id+1:1}{" "}
140
+ {v.name}
141
+ </C>
142
+ </S>
143
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
144
+ <S style={[i.headerStatusDot,{backgroundColor:v.source==="firebase"?t.firebaseOrange:t.purple,width:e?6:7,height:e?6:7}]}/>
145
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
146
+ {Object.keys(v.params).length} param
147
+ {Object.keys(v.params).length!==1?"s":""}
148
+ {" \xB7 "}
149
+ {v.source}
150
+ </C>
151
+ </S>
152
+ </S>:A==="logs"&&M!=null?<S style={i.headerDetailCenter}>
153
+ <S style={i.headerDetailRow}>
154
+ <S style={[i.headerMethodBadge,{backgroundColor:M.type==="error"?`${t.errorColor}4D`:M.type==="warn"?`${t.lightOrange}4D`:`${t.purple}4D`,paddingHorizontal:e?5:6,paddingVertical:e?2:3}]}>
155
+ <C style={[i.headerMethodText,{fontSize:e?9:10}]}>
156
+ {M.type.toUpperCase()}
157
+ </C>
158
+ </S>
159
+ <C style={[i.headerDetailTitle,{fontSize:e?13.5:15}]}numberOfLines={1}ellipsizeMode="middle">
160
+ #{M.id!=null?M.id+1:1}{" "}
704
161
  console.
705
- {selectedLog.sourceMethod || selectedLog.type || 'log'}
706
- </Text>
707
- </View>
708
- <View style={{
709
- flexDirection: 'row',
710
- alignItems: 'center',
711
- gap: isNarrow ? 4 : 6,
712
- marginTop: 3,
713
- paddingVertical: 1,
714
- }}>
715
- <View style={{
716
- flexDirection: 'row',
717
- alignItems: 'center',
718
- gap: 4,
719
- paddingHorizontal: isNarrow ? 6 : 8,
720
- paddingVertical: 2.5,
721
- borderRadius: 20,
722
- backgroundColor: `${AppColors.white}29`,
723
- }}>
724
- <ClockIcon color={AppColors.white} size={isNarrow ? 10 : 11}/>
725
- <Text style={[
726
- styles.headerSubTitle,
727
- { fontSize: isNarrow ? 10 : 11 },
728
- ]}>
729
- {formatTime(selectedLog.timestamp)}
730
- </Text>
731
- </View>
732
- </View>
733
- </View>) : activeTab === 'redux' && selectedReduxSlice != null ? ((() => {
734
- const sliceData = reduxState?.[selectedReduxSlice];
735
- const keyCount = sliceData && typeof sliceData === 'object'
736
- ? Object.keys(sliceData).length
737
- : typeof sliceData !== 'undefined'
738
- ? 1
739
- : 0;
740
- const sliceSize = getSize(sliceData);
741
- const lastAction = reduxLastActionMap[selectedReduxSlice];
742
- return (<View style={styles.headerDetailCenter}>
743
- <View style={styles.headerDetailRow}>
744
- <View style={[
745
- styles.headerMethodBadge,
746
- {
747
- backgroundColor: `${AppColors.purple}4D`,
748
- paddingHorizontal: isNarrow ? 5 : 6,
749
- paddingVertical: isNarrow ? 2 : 3,
750
- },
751
- ]}>
752
- <Text style={[
753
- styles.headerMethodText,
754
- { fontSize: isNarrow ? 9 : 10 },
755
- ]}>
162
+ {M.sourceMethod||M.type||"log"}
163
+ </C>
164
+ </S>
165
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
166
+ <S style={{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:e?6:8,paddingVertical:2.5,borderRadius:20,backgroundColor:`${t.white}29`}}>
167
+ <Se color={t.white}size={e?10:11}/>
168
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
169
+ {Dt(M.timestamp)}
170
+ </C>
171
+ </S>
172
+ </S>
173
+ </S>:A==="redux"&&W!=null?(()=>{const T=_e?.[W],V=T&&typeof T=="object"?Object.keys(T).length:typeof T<"u"?1:0,se=Be(T),$e=Ne[W];return<S style={i.headerDetailCenter}>
174
+ <S style={i.headerDetailRow}>
175
+ <S style={[i.headerMethodBadge,{backgroundColor:`${t.purple}4D`,paddingHorizontal:e?5:6,paddingVertical:e?2:3}]}>
176
+ <C style={[i.headerMethodText,{fontSize:e?9:10}]}>
756
177
  SLICE
757
- </Text>
758
- </View>
759
- <Text style={[
760
- styles.headerDetailTitle,
761
- { fontSize: isNarrow ? 13.5 : 15 },
762
- ]} numberOfLines={1} ellipsizeMode="middle">
763
- {selectedReduxSlice}
764
- </Text>
765
- </View>
766
- <View style={{
767
- flexDirection: 'row',
768
- alignItems: 'center',
769
- gap: isNarrow ? 4 : 6,
770
- marginTop: 3,
771
- paddingVertical: 1,
772
- }}>
773
- <View style={[
774
- styles.headerStatusDot,
775
- {
776
- backgroundColor: AppColors.liveGreen,
777
- width: isNarrow ? 6 : 7,
778
- height: isNarrow ? 6 : 7,
779
- },
780
- ]}/>
781
- <Text style={[
782
- styles.headerSubTitle,
783
- { fontSize: isNarrow ? 10 : 11 },
784
- ]}>
178
+ </C>
179
+ </S>
180
+ <C style={[i.headerDetailTitle,{fontSize:e?13.5:15}]}numberOfLines={1}ellipsizeMode="middle">
181
+ {W}
182
+ </C>
183
+ </S>
184
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
185
+ <S style={[i.headerStatusDot,{backgroundColor:t.liveGreen,width:e?6:7,height:e?6:7}]}/>
186
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
785
187
  Live
786
- </Text>
787
- <Text style={[
788
- styles.headerSubTitle,
789
- { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
790
- ]}>
188
+ </C>
189
+ <C style={[i.headerSubTitle,{opacity:.6,fontSize:e?10:11}]}>
791
190
  •
792
- </Text>
793
- <Text style={[
794
- styles.headerSubTitle,
795
- { fontSize: isNarrow ? 10 : 11 },
796
- ]}>
797
- {keyCount} keys
798
- </Text>
799
- <Text style={[
800
- styles.headerSubTitle,
801
- { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
802
- ]}>
191
+ </C>
192
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
193
+ {V} keys
194
+ </C>
195
+ <C style={[i.headerSubTitle,{opacity:.6,fontSize:e?10:11}]}>
803
196
  •
804
- </Text>
805
- <Text style={[
806
- styles.headerSubTitle,
807
- { fontSize: isNarrow ? 10 : 11 },
808
- ]}>
809
- {sliceSize}
810
- </Text>
811
- {lastAction?.timestamp && (<>
812
- <Text style={[
813
- styles.headerSubTitle,
814
- { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
815
- ]}>
197
+ </C>
198
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
199
+ {se}
200
+ </C>
201
+ {$e?.timestamp&&<>
202
+ <C style={[i.headerSubTitle,{opacity:.6,fontSize:e?10:11}]}>
816
203
  •
817
- </Text>
818
- <View style={{
819
- flexDirection: 'row',
820
- alignItems: 'center',
821
- gap: 3,
822
- }}>
823
- <ClockIcon color={AppColors.white} size={isNarrow ? 9 : 10}/>
824
- <Text style={[
825
- styles.headerSubTitle,
826
- { fontSize: isNarrow ? 10 : 11 },
827
- ]}>
828
- {lastAction.timestamp}
829
- </Text>
830
- </View>
831
- </>)}
832
- </View>
833
- </View>);
834
- })()) : activeTab === 'redux' && selectedReduxAction != null ? (<View style={styles.headerDetailCenter}>
835
- <View style={styles.headerDetailRow}>
836
- <View style={[
837
- styles.headerMethodBadge,
838
- {
839
- backgroundColor: `${AppColors.brandPurple}4D`,
840
- paddingHorizontal: isNarrow ? 5 : 6,
841
- paddingVertical: isNarrow ? 2 : 3,
842
- },
843
- ]}>
844
- <Text style={[
845
- styles.headerMethodText,
846
- { fontSize: isNarrow ? 9 : 10 },
847
- ]}>
204
+ </C>
205
+ <S style={{flexDirection:"row",alignItems:"center",gap:3}}>
206
+ <Se color={t.white}size={e?9:10}/>
207
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
208
+ {$e.timestamp}
209
+ </C>
210
+ </S>
211
+ </>}
212
+ </S>
213
+ </S>})():A==="redux"&&q!=null?<S style={i.headerDetailCenter}>
214
+ <S style={i.headerDetailRow}>
215
+ <S style={[i.headerMethodBadge,{backgroundColor:`${t.brandPurple}4D`,paddingHorizontal:e?5:6,paddingVertical:e?2:3}]}>
216
+ <C style={[i.headerMethodText,{fontSize:e?9:10}]}>
848
217
  ACTION
849
- </Text>
850
- </View>
851
- <Text style={[
852
- styles.headerDetailTitle,
853
- { fontSize: isNarrow ? 13.5 : 15 },
854
- ]} numberOfLines={1} ellipsizeMode="middle">
855
- {selectedReduxAction.type}
856
- </Text>
857
- </View>
858
- <View style={{
859
- flexDirection: 'row',
860
- alignItems: 'center',
861
- gap: isNarrow ? 4 : 6,
862
- marginTop: 3,
863
- paddingVertical: 1,
864
- }}>
865
- <View style={[
866
- styles.headerStatusDot,
867
- {
868
- backgroundColor: AppColors.purple,
869
- width: isNarrow ? 6 : 7,
870
- height: isNarrow ? 6 : 7,
871
- },
872
- ]}/>
873
- <Text style={[
874
- styles.headerSubTitle,
875
- { fontSize: isNarrow ? 10 : 11 },
876
- ]}>
877
- {selectedReduxAction.timestamp || 'Dispatched'}
878
- </Text>
879
- </View>
880
- </View>) : activeTab === 'crash' && selectedCrash != null ? (<View style={styles.headerDetailCenter}>
881
- <View style={styles.headerDetailRow}>
882
- <View style={[
883
- styles.headerMethodBadge,
884
- {
885
- backgroundColor: selectedCrash.isFatal
886
- ? AppColors.red600
887
- : AppColors.amber600,
888
- paddingHorizontal: isNarrow ? 5 : 6,
889
- paddingVertical: isNarrow ? 2 : 3,
890
- },
891
- ]}>
892
- <Text style={[
893
- styles.headerMethodText,
894
- { fontSize: isNarrow ? 9 : 10 },
895
- ]}>
896
- {selectedCrash.isFatal
897
- ? 'FATAL'
898
- : selectedCrash.type.toUpperCase()}
899
- </Text>
900
- </View>
901
- <Text style={[
902
- styles.headerDetailTitle,
903
- { fontSize: isNarrow ? 13.5 : 15 },
904
- ]} numberOfLines={1} ellipsizeMode="middle">
905
- {selectedCrash.name || selectedCrash.message}
906
- </Text>
907
- </View>
908
- <View style={{
909
- flexDirection: 'row',
910
- alignItems: 'center',
911
- gap: isNarrow ? 4 : 6,
912
- marginTop: 3,
913
- paddingVertical: 1,
914
- }}>
915
- <View style={[
916
- styles.headerStatusDot,
917
- {
918
- backgroundColor: selectedCrash.isFatal
919
- ? AppColors.red600
920
- : AppColors.amber500,
921
- width: isNarrow ? 6 : 7,
922
- height: isNarrow ? 6 : 7,
923
- },
924
- ]}/>
925
- <Text style={[
926
- styles.headerSubTitle,
927
- { fontSize: isNarrow ? 10 : 11 },
928
- ]}>
929
- {selectedCrash.timeStr ||
930
- new Date(selectedCrash.timestamp).toLocaleTimeString()}
931
- </Text>
932
- {selectedCrash.deviceInfo?.platform && (<>
933
- <Text style={[
934
- styles.headerSubTitle,
935
- { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
936
- ]}>
218
+ </C>
219
+ </S>
220
+ <C style={[i.headerDetailTitle,{fontSize:e?13.5:15}]}numberOfLines={1}ellipsizeMode="middle">
221
+ {q.type}
222
+ </C>
223
+ </S>
224
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
225
+ <S style={[i.headerStatusDot,{backgroundColor:t.purple,width:e?6:7,height:e?6:7}]}/>
226
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
227
+ {q.timestamp||"Dispatched"}
228
+ </C>
229
+ </S>
230
+ </S>:A==="crash"&&$!=null?<S style={i.headerDetailCenter}>
231
+ <S style={i.headerDetailRow}>
232
+ <S style={[i.headerMethodBadge,{backgroundColor:$.isFatal?t.red600:t.amber600,paddingHorizontal:e?5:6,paddingVertical:e?2:3}]}>
233
+ <C style={[i.headerMethodText,{fontSize:e?9:10}]}>
234
+ {$.isFatal?"FATAL":$.type.toUpperCase()}
235
+ </C>
236
+ </S>
237
+ <C style={[i.headerDetailTitle,{fontSize:e?13.5:15}]}numberOfLines={1}ellipsizeMode="middle">
238
+ {$.name||$.message}
239
+ </C>
240
+ </S>
241
+ <S style={{flexDirection:"row",alignItems:"center",gap:e?4:6,marginTop:3,paddingVertical:1}}>
242
+ <S style={[i.headerStatusDot,{backgroundColor:$.isFatal?t.red600:t.amber500,width:e?6:7,height:e?6:7}]}/>
243
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
244
+ {$.timeStr||new Date($.timestamp).toLocaleTimeString()}
245
+ </C>
246
+ {$.deviceInfo?.platform&&<>
247
+ <C style={[i.headerSubTitle,{opacity:.6,fontSize:e?10:11}]}>
937
248
  •
938
- </Text>
939
- <Text style={[
940
- styles.headerSubTitle,
941
- { fontSize: isNarrow ? 10 : 11 },
942
- ]}>
943
- {selectedCrash.deviceInfo.platform.toUpperCase()}
944
- </Text>
945
- </>)}
946
- </View>
947
- </View>) : null}
948
- </View>)}
249
+ </C>
250
+ <C style={[i.headerSubTitle,{fontSize:e?10:11}]}>
251
+ {$.deviceInfo.platform.toUpperCase()}
252
+ </C>
253
+ </>}
254
+ </S>
255
+ </S>:null}
256
+ </S>}
949
257
 
950
- <View style={[
951
- styles.headerRight,
952
- {
953
- flexDirection: 'row',
954
- alignItems: 'center',
955
- justifyContent: 'flex-end',
956
- flexShrink: 0,
957
- gap: isNarrow ? 5 : 7,
958
- },
959
- ]}>
960
- {isSettingsView && (<TouchableScale onPress={() => {
961
- Alert.alert('Reset All Settings', 'This restores all module visibility and UI preferences to defaults. Continue?', [
962
- { text: 'Cancel', style: 'cancel' },
963
- {
964
- text: 'Reset',
965
- style: 'destructive',
966
- onPress: resetToDefaults,
967
- },
968
- ]);
969
- }} hitSlop={15} style={[
970
- styles.closeButtonSquare,
971
- {
972
- width: buttonSize,
973
- height: buttonSize,
974
- borderRadius: isNarrow ? 6 : 7,
975
- },
976
- ]}>
977
- <ResetIcon color={AppColors.white} size={isNarrow ? 12 : 14}/>
978
- </TouchableScale>)}
258
+ <S style={[i.headerRight,{flexDirection:"row",alignItems:"center",justifyContent:"flex-end",flexShrink:0,gap:e?4:5}]}>
259
+
260
+ {U&&<>
261
+
262
+ <O accessible={!0}accessibilityRole="button"accessibilityLabel={R("header.photo","Photo")}onPress={Re}hitSlop={10}style={[i.closeButtonSquare,{width:H,height:H,borderRadius:e?6:7}]}>
263
+ <Me size={e?12:13}color={t.white}/>
264
+ </O>
979
265
 
980
- {!isAnySelected && (<TouchableScale accessible={true} accessibilityRole="button" accessibilityLabel="Settings" onPress={() => setSettingsPage('main')} hitSlop={15} style={[
981
- styles.closeButtonSquare,
982
- {
983
- width: buttonSize,
984
- height: buttonSize,
985
- borderRadius: isNarrow ? 6 : 7,
986
- },
987
- ]}>
988
- <SettingsIcon color={AppColors.white} size={isNarrow ? 12 : 14}/>
989
- </TouchableScale>)}
266
+
267
+ <O accessible={!0}accessibilityRole="button"accessibilityLabel={R("header.record","Record")}onPress={De}hitSlop={10}style={[i.closeButtonSquare,{width:H,height:H,borderRadius:e?6:7,backgroundColor:k?`${t.red500}40`:`${t.white}24`,borderColor:k?t.red500:`${t.white}33`}]}>
268
+ {k?<Z.View style={{width:6,height:6,borderRadius:3,backgroundColor:t.red500}}/>:<Oe size={e?12:13}color={t.white}/>}
269
+ </O>
270
+ </>}
990
271
 
991
- <TouchableOpacity onPress={closeModal} hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }} activeOpacity={0.6} style={[
992
- styles.closeButtonSquare,
993
- {
994
- width: buttonSize,
995
- height: buttonSize,
996
- borderRadius: isNarrow ? 6 : 7,
997
- },
998
- ]}>
999
- <CloseWhite size={isNarrow ? 12 : 14}/>
1000
- </TouchableOpacity>
1001
- </View>
1002
- </View>
272
+ {Y&&<O onPress={()=>{ke.alert("Reset All Settings","This restores all module visibility and UI preferences to defaults. Continue?",[{text:"Cancel",style:"cancel"},{text:"Reset",style:"destructive",onPress:Ke}])}}hitSlop={15}style={[i.closeButtonSquare,{width:H,height:H,borderRadius:e?6:7}]}>
273
+ <_t color={t.white}size={e?12:14}/>
274
+ </O>}
275
+
276
+ {!U&&<O accessible={!0}accessibilityRole="button"accessibilityLabel="Settings"onPress={()=>re("main")}hitSlop={15}style={[i.closeButtonSquare,{width:H,height:H,borderRadius:e?6:7}]}>
277
+ <Mt color={t.white}size={e?12:14}/>
278
+ </O>}
279
+
280
+
281
+ <Ae onPress={Xe||ze}hitSlop={{top:12,bottom:12,left:12,right:12}}activeOpacity={.6}accessibilityRole="button"accessibilityLabel={R("common.minimize","Minimize")}style={[i.closeButtonSquare,{width:H,height:H,borderRadius:e?6:7}]}>
282
+ <Lt size={e?14:16}color={t.white}/>
283
+ </Ae>
284
+
285
+
286
+ <Ae onPress={ze}hitSlop={{top:12,bottom:12,left:12,right:12}}activeOpacity={.6}accessibilityRole="button"accessibilityLabel={R("common.close","Close")}style={[i.closeButtonSquare,{width:H,height:H,borderRadius:e?6:7}]}>
287
+ <Ot size={e?12:14}/>
288
+ </Ae>
289
+ </S>
290
+ </S>
1003
291
 
1004
292
 
1005
- {!isAnySelected && (<View style={{
1006
- flexDirection: 'row',
1007
- alignItems: 'center',
1008
- justifyContent: 'space-between',
1009
- paddingHorizontal: isNarrow ? 8 : 12,
1010
- paddingBottom: isNarrow ? 6 : 8,
1011
- paddingTop: 0,
1012
- gap: 6,
1013
- }}>
1014
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
1015
-
1016
- <TouchableScale onPress={handleTakeScreenshot} style={{
1017
- flexDirection: 'row',
1018
- alignItems: 'center',
1019
- gap: 4.5,
1020
- backgroundColor: `${AppColors.white}24`,
1021
- paddingHorizontal: isNarrow ? 8 : 10,
1022
- paddingVertical: isNarrow ? 4 : 5,
1023
- borderRadius: 6,
1024
- borderWidth: 1,
1025
- borderColor: `${AppColors.white}33`,
1026
- }}>
1027
- <CameraIcon size={isNarrow ? 12 : 13} color={AppColors.white}/>
1028
- <Text style={{
1029
- fontFamily: AppFonts.interSemiBold,
1030
- fontSize: isNarrow ? 10 : 11,
1031
- color: AppColors.white,
1032
- }}>
1033
- {t('header.photo')}
1034
- </Text>
1035
- </TouchableScale>
293
+ {!U&&<S style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:e?10:14,paddingBottom:e?8:10,paddingTop:2,gap:6}}>
294
+ <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
295
+
296
+ <O onPress={Re}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${t.white}24`,paddingHorizontal:e?9:11,paddingVertical:e?5:6,borderRadius:7,borderWidth:1,borderColor:`${t.white}33`}}>
297
+ <Me size={e?12:13}color={t.white}/>
298
+ <C style={{fontFamily:D.interSemiBold,fontSize:e?10.5:11.5,lineHeight:e?13:14,color:t.white}}>
299
+ {R("header.photo")}
300
+ </C>
301
+ </O>
1036
302
 
1037
-
1038
- <TouchableScale onPress={handleToggleVideoRecording} style={{
1039
- flexDirection: 'row',
1040
- alignItems: 'center',
1041
- gap: 4.5,
1042
- backgroundColor: isRecording
1043
- ? `${AppColors.red500}33`
1044
- : `${AppColors.white}24`,
1045
- paddingHorizontal: isNarrow ? 8 : 10,
1046
- paddingVertical: isNarrow ? 4 : 5,
1047
- borderRadius: 6,
1048
- borderWidth: 1,
1049
- borderColor: isRecording
1050
- ? AppColors.red500
1051
- : `${AppColors.white}33`,
1052
- }}>
1053
- {isRecording ? (<Animated.View style={{
1054
- width: 6,
1055
- height: 6,
1056
- borderRadius: 3,
1057
- backgroundColor: AppColors.red500,
1058
- }}/>) : (<VideoCameraIcon size={isNarrow ? 12 : 13} color={AppColors.white}/>)}
1059
- <Text style={{
1060
- fontFamily: AppFonts.interSemiBold,
1061
- fontSize: isNarrow ? 10 : 11,
1062
- color: isRecording ? AppColors.red300 : AppColors.white,
1063
- }}>
1064
- {isRecording
1065
- ? `${t('header.rec')} ${formatTimer(recordingSeconds)}`
1066
- : t('header.record')}
1067
- </Text>
1068
- </TouchableScale>
1069
- </View>
303
+
304
+ <O onPress={De}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:k?`${t.red500}33`:`${t.white}24`,paddingHorizontal:e?9:11,paddingVertical:e?5:6,borderRadius:7,borderWidth:1,borderColor:k?t.red500:`${t.white}33`}}>
305
+ {k?<Z.View style={{width:6,height:6,borderRadius:3,backgroundColor:t.red500}}/>:<Oe size={e?12:13}color={t.white}/>}
306
+ <C style={{fontFamily:D.interSemiBold,fontSize:e?10.5:11.5,lineHeight:e?13:14,color:k?t.red300:t.white}}>
307
+ {k?`${R("header.rec")} ${rt(it)}`:R("header.record")}
308
+ </C>
309
+ </O>
310
+ </S>
1070
311
 
1071
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
1072
-
1073
- <TouchableScale onPress={() => {
1074
- Alert.alert(t('header.clearEverythingTitle'), t('header.clearEverythingMessage'), [
1075
- { text: t('common.cancel'), style: 'cancel' },
1076
- {
1077
- text: t('common.clearAll'),
1078
- onPress: runClearAllWithAnimation,
1079
- style: 'destructive',
1080
- },
1081
- ]);
1082
- }} style={{
1083
- flexDirection: 'row',
1084
- alignItems: 'center',
1085
- gap: 4,
1086
- backgroundColor: `${AppColors.white}1A`,
1087
- paddingHorizontal: isNarrow ? 7 : 9,
1088
- paddingVertical: isNarrow ? 4 : 5,
1089
- borderRadius: 6,
1090
- borderWidth: 1,
1091
- borderColor: `${AppColors.white}26`,
1092
- }}>
1093
- <Animated.View style={{
1094
- transform: [
1095
- {
1096
- rotate: clearAnim.interpolate({
1097
- inputRange: [0, 1],
1098
- outputRange: ['0deg', '-25deg'],
1099
- }),
1100
- },
1101
- {
1102
- scale: clearAnim.interpolate({
1103
- inputRange: [0, 0.5, 1],
1104
- outputRange: [1, 1.25, 1],
1105
- }),
1106
- },
1107
- ],
1108
- }}>
1109
- <TrashIcon color={AppColors.white} size={isNarrow ? 11 : 12}/>
1110
- </Animated.View>
1111
- <Text style={{
1112
- fontFamily: AppFonts.interMedium,
1113
- fontSize: isNarrow ? 10 : 11,
1114
- color: `${AppColors.white}E6`,
1115
- }}>
1116
- {t('header.clear')}
1117
- </Text>
1118
- </TouchableScale>
312
+ <S style={{flexDirection:"row",alignItems:"center",gap:6}}>
313
+
314
+ <O accessible={!0}accessibilityRole="button"accessibilityLabel={R("common.clearAll")}onPress={()=>{ke.alert(R("header.clearEverythingTitle"),R("header.clearEverythingMessage"),[{text:R("common.cancel"),style:"cancel"},{text:R("common.clearAll"),onPress:Qe,style:"destructive"}])}}hitSlop={10}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${t.white}24`,paddingHorizontal:e?9:11,paddingVertical:e?5:6,borderRadius:7,borderWidth:1,borderColor:`${t.white}33`}}>
315
+ <Z.View style={{transform:[{rotate:Te.interpolate({inputRange:[0,1],outputRange:["0deg","-25deg"]})},{scale:Te.interpolate({inputRange:[0,.5,1],outputRange:[1,1.25,1]})}]}}>
316
+ <Bt color={t.white}size={e?12:13}/>
317
+ </Z.View>
318
+ <C style={{fontFamily:D.interSemiBold,fontSize:e?10.5:11.5,lineHeight:e?13:14,color:t.white}}>
319
+ {R("common.clearAll")}
320
+ </C>
321
+ </O>
1119
322
 
1120
323
 
1121
- <TouchableScale onPress={() => {
1122
- setSettingsActiveSubTab('about');
1123
- setSettingsPage('main');
1124
- }} style={{
1125
- flexDirection: 'row',
1126
- alignItems: 'center',
1127
- gap: 4,
1128
- backgroundColor: `${AppColors.white}1A`,
1129
- paddingHorizontal: isNarrow ? 7 : 9,
1130
- paddingVertical: isNarrow ? 4 : 5,
1131
- borderRadius: 6,
1132
- borderWidth: 1,
1133
- borderColor: `${AppColors.white}26`,
1134
- }}>
1135
- <InfoCircleIcon color={AppColors.white} size={isNarrow ? 11 : 12}/>
1136
- <Text style={{
1137
- fontFamily: AppFonts.interMedium,
1138
- fontSize: isNarrow ? 10 : 11,
1139
- color: `${AppColors.white}E6`,
1140
- }}>
1141
- {t('header.about')}
1142
- </Text>
1143
- </TouchableScale>
1144
- </View>
1145
- </View>)}
1146
- </View>
1147
- </View>
324
+ <O accessible={!0}accessibilityRole="button"accessibilityLabel={R("header.about")}onPress={()=>{xe(!0)}}hitSlop={10}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${t.white}24`,paddingHorizontal:e?9:11,paddingVertical:e?5:6,borderRadius:7,borderWidth:1,borderColor:`${t.white}33`}}>
325
+ <Ut color={t.white}size={e?12:13}/>
326
+ <C style={{fontFamily:D.interSemiBold,fontSize:e?10.5:11.5,lineHeight:e?13:14,color:t.white}}>
327
+ {R("header.about")}
328
+ </C>
329
+ </O>
330
+ </S>
331
+ </S>}
332
+ </S>
333
+ </S>
1148
334
 
1149
335
 
1150
- <UpdateAvailableModal visible={showUpdateModal} latestVersion={latestNpmVersion} onClose={() => setShowUpdateModal(false)}/>
336
+ <$t visible={et}latestVersion={Ue}onClose={()=>ae(!1)}/>
1151
337
 
1152
338
 
1153
- <MediaPreviewModal item={previewMediaItem} visible={!!previewMediaItem} onClose={() => setPreviewMediaItem(null)} onDelete={async (item) => {
1154
- await ScreenCapture.deleteMedia(item.uri);
1155
- setPreviewMediaItem(null);
1156
- }} onConvertToGif={async (item) => {
1157
- const gif = await ScreenCapture.convertToGif(item.uri, {
1158
- fps: 12,
1159
- width: 480,
1160
- });
1161
- if (gif) {
1162
- setPreviewMediaItem({
1163
- id: `anim_${gif.timestamp}.gif`,
1164
- type: 'gif',
1165
- format: 'gif',
1166
- uri: gif.uri,
1167
- filename: gif.uri.split('/').pop() || `anim_${gif.timestamp}.gif`,
1168
- sizeBytes: gif.sizeBytes,
1169
- timestamp: gif.timestamp,
1170
- durationMs: gif.durationMs,
1171
- });
1172
- }
1173
- }}/>
1174
- </>);
1175
- });
1176
- export default InspectorHeader;
339
+ <Ht item={Ve}visible={!!Ve}onClose={()=>N(null)}onDelete={async T=>{await E.deleteMedia(T.uri),j?.().catch(()=>{}),N(null)}}onConvertToGif={async T=>{const V=await E.convertToGif(T.uri,{fps:12,width:480});V&&(j?.().catch(()=>{}),N({id:`anim_${V.timestamp}.gif`,type:"gif",format:"gif",uri:V.uri,filename:V.uri.split("/").pop()||`anim_${V.timestamp}.gif`,sizeBytes:V.sizeBytes,timestamp:V.timestamp,durationMs:V.durationMs}))}}/>
340
+ </>});export default qt;