react-native-inapp-inspector 2.3.19 → 2.3.21

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