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,1081 +1,293 @@
1
- import React, { useMemo, useState } from 'react';
2
- import { useTranslation } from '../../i18n';
3
- import { Pressable, ScrollView, StyleSheet, Text, TextInput, View, } from 'react-native';
4
- import { useInspector } from './InspectorContext';
5
- import HighlightText from '../HighlightText';
6
- import JsonViewer from '../JsonViewer';
7
- import CopyButton from '../CopyButton';
8
- import SegmentedTabs from '../SegmentedTabs';
9
- import { ClearIcon, SearchIcon, PrettyIcon, RawIcon, TableIcon, LayersIcon, TerminalIcon, RequestIcon, InfoCircleIcon, DocIcon, ExternalLinkIcon, FolderIcon, } from '../NetworkIcons';
10
- import { AppColors } from '../../styles/AppColors';
11
- import { AppFonts } from '../../styles/AppFonts';
12
- import styles from '../../styles';
13
- import { getJsonContent, getSize, formatDateTime, parseStackLine, openInVSCode, } from '../../helpers';
14
- const getRelativeTime = (timestamp) => {
15
- const now = Date.now();
16
- const diff = now - timestamp;
17
- const seconds = Math.floor(diff / 1000);
18
- const minutes = Math.floor(seconds / 60);
19
- const hours = Math.floor(minutes / 60);
20
- const days = Math.floor(hours / 24);
21
- if (seconds < 60)
22
- return `${seconds}s ago`;
23
- if (minutes < 60)
24
- return `${minutes}m ago`;
25
- if (hours < 24)
26
- return `${hours}h ago`;
27
- return `${days}d ago`;
28
- };
29
- const LogDetail = React.memo(() => {
30
- const { t } = useTranslation();
31
- const { selectedLog } = useInspector();
32
- const [activeTab, setActiveTab] = useState('output');
33
- const [detailSearch, setDetailSearch] = useState('');
34
- const [viewMode, setViewMode] = useState('pretty');
35
- const jsonContent = useMemo(() => (selectedLog ? getJsonContent(selectedLog.message) : null), [selectedLog]);
36
- const [stackViewMode, setStackViewMode] = useState('structured');
37
- const [stackSource, setStackSource] = useState('caller');
38
- const [stackFilter, setStackFilter] = useState('app');
39
- const activeStackString = useMemo(() => {
40
- if (!selectedLog)
41
- return '';
42
- if (stackSource === 'error' && selectedLog.errorStack) {
43
- return selectedLog.errorStack;
44
- }
45
- return selectedLog.stack || selectedLog.caller || '';
46
- }, [selectedLog, stackSource]);
47
- const parsedStackFrames = useMemo(() => {
48
- if (!activeStackString)
49
- return [];
50
- return activeStackString
51
- .split('\n')
52
- .map(l => l.trim())
53
- .filter(l => l.length > 0)
54
- .map((line, idx) => parseStackLine(line, idx === 0));
55
- }, [activeStackString]);
56
- const appStackFrames = useMemo(() => {
57
- return parsedStackFrames.filter(f => f.frameType === 'app' || !f.isRuntimeNoise);
58
- }, [parsedStackFrames]);
59
- const displayedFrames = useMemo(() => {
60
- if (stackFilter === 'app' && appStackFrames.length > 0) {
61
- return appStackFrames;
62
- }
63
- return parsedStackFrames;
64
- }, [stackFilter, appStackFrames, parsedStackFrames]);
65
- const originFrame = useMemo(() => {
66
- if (!selectedLog)
67
- return null;
68
- if (appStackFrames.length > 0) {
69
- return appStackFrames[0];
70
- }
71
- if (selectedLog.caller && selectedLog.caller !== 'Unknown') {
72
- return parseStackLine(selectedLog.caller, true);
73
- }
74
- if (parsedStackFrames.length > 0) {
75
- return parsedStackFrames[0];
76
- }
77
- return null;
78
- }, [selectedLog, appStackFrames, parsedStackFrames]);
79
- if (!selectedLog)
80
- return null;
81
- const isDark = AppColors.primaryLight !== AppColors.white;
82
- const getTypeColors = () => {
83
- const type = (selectedLog.type || 'log').toLowerCase();
84
- const method = (selectedLog.sourceMethod || type).toLowerCase();
85
- if (type === 'error' || method === 'error') {
86
- return {
87
- border: AppColors.red500,
88
- badgeBg: AppColors.red100,
89
- badgeText: AppColors.redErrorText,
90
- label: 'ERROR',
91
- methodBorder: AppColors.errorBorder,
92
- methodBg: AppColors.red100,
93
- methodText: AppColors.redErrorText,
94
- };
95
- }
96
- if (type === 'warn' || method === 'warn') {
97
- return {
98
- border: AppColors.amber500,
99
- badgeBg: AppColors.amber100,
100
- badgeText: AppColors.amber800Warm,
101
- label: 'WARN',
102
- methodBorder: AppColors.amber200,
103
- methodBg: AppColors.amber100,
104
- methodText: AppColors.amber800Warm,
105
- };
106
- }
107
- if (type === 'debug' || method === 'debug') {
108
- return {
109
- border: AppColors.violet500,
110
- badgeBg: AppColors.purple100,
111
- badgeText: AppColors.violet600,
112
- label: 'DEBUG',
113
- methodBorder: AppColors.purple200,
114
- methodBg: AppColors.purple100,
115
- methodText: AppColors.violet600,
116
- };
117
- }
118
- if (type === 'info' || method === 'info') {
119
- return {
120
- border: AppColors.sky500,
121
- badgeBg: AppColors.sky100,
122
- badgeText: AppColors.sky600,
123
- label: 'INFO',
124
- methodBorder: AppColors.sky400,
125
- methodBg: AppColors.sky100,
126
- methodText: AppColors.sky600,
127
- };
128
- }
129
- return {
130
- border: AppColors.indigo500,
131
- badgeBg: AppColors.indigo50,
132
- badgeText: AppColors.indigo600Alt,
133
- label: 'LOG',
134
- methodBorder: AppColors.indigo400,
135
- methodBg: AppColors.indigo50,
136
- methodText: AppColors.indigo600Alt,
137
- };
138
- };
139
- const typeColors = getTypeColors();
140
- const hasMultipleArgs = selectedLog.rawArgs != null && selectedLog.rawArgs.length > 1;
141
- const hasStack = Boolean(selectedLog.stack && selectedLog.stack.trim().length > 0);
142
- const subTabs = [
143
- {
144
- key: 'output',
145
- label: t('console.tabOutput'),
146
- icon: (isActive) => (<TerminalIcon color={isActive ? AppColors.white : AppColors.grayTextWeak} size={12}/>),
147
- },
148
- ...(hasMultipleArgs
149
- ? [
150
- {
151
- key: 'arguments',
152
- label: t('console.tabArgs', { count: selectedLog.rawArgs?.length }),
153
- icon: (isActive) => (<RequestIcon color={isActive ? AppColors.white : AppColors.grayTextWeak} size={12}/>),
154
- },
155
- ]
156
- : []),
157
- ...(hasStack
158
- ? [
159
- {
160
- key: 'stack',
161
- label: t('console.tabStack'),
162
- icon: (isActive) => (<LayersIcon color={isActive ? AppColors.white : AppColors.grayTextWeak} size={12}/>),
163
- },
164
- ]
165
- : []),
166
- {
167
- key: 'metadata',
168
- label: t('console.tabMetadata'),
169
- icon: (isActive) => (<InfoCircleIcon color={isActive ? AppColors.white : AppColors.grayTextWeak} size={12}/>),
170
- },
171
- ];
172
- return (<View style={{ flex: 1 }}>
1
+ import De,{useMemo as A,useState as L}from"react";import{useTranslation as Ie}from"../../i18n";import{Pressable as Q,ScrollView as Ne,StyleSheet as Re,Text as T,TextInput as He,View as C}from"react-native";import{useInspector as Pe}from"./InspectorContext";import X from"../HighlightText";import Ce from"../JsonViewer";import M from"../CopyButton";import Y from"../SegmentedTabs";import{ClearIcon as Ae,SearchIcon as Le,PrettyIcon as Me,RawIcon as Te,TableIcon as Ee,LayersIcon as Se,TerminalIcon as Oe,RequestIcon as Ue,InfoCircleIcon as Je,DocIcon as Ke,ExternalLinkIcon as Ge,FolderIcon as Qe}from"../NetworkIcons";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as B}from"../../styles/AppFonts";import z from"../../styles";import{getJsonContent as Xe,getSize as _,formatDateTime as ee,parseStackLine as Ve,openInVSCode as Ye}from"../../helpers";const Be=S=>{const D=Date.now()-S,E=Math.floor(D/1e3),$=Math.floor(E/60),P=Math.floor($/60),J=Math.floor(P/24);return E<60?`${E}s ago`:$<60?`${$}m ago`:P<24?`${P}h ago`:`${J}d ago`},Ze=De.memo(()=>{const{t:S}=Ie(),{selectedLog:r}=Pe(),[D,E]=L("output"),[$,P]=L(""),[J,ze]=L("pretty"),W=A(()=>r?Xe(r.message):null,[r]),[N,re]=L("structured"),[K,ve]=L("caller"),[Z,We]=L("app"),O=A(()=>r?K==="error"&&r.errorStack?r.errorStack:r.stack||r.caller||"":"",[r,K]),F=A(()=>O?O.split(`
2
+ `).map(t=>t.trim()).filter(t=>t.length>0).map((t,v)=>Ve(t,v===0)):[],[O]),R=A(()=>F.filter(t=>t.frameType==="app"||!t.isRuntimeNoise),[F]),oe=A(()=>Z==="app"&&R.length>0?R:F,[Z,R,F]),V=A(()=>r?R.length>0?R[0]:r.caller&&r.caller!=="Unknown"?Ve(r.caller,!0):F.length>0?F[0]:null:null,[r,R,F]);if(!r)return null;const H=e.primaryLight!==e.white,U=(()=>{const t=(r.type||"log").toLowerCase(),v=(r.sourceMethod||t).toLowerCase();return t==="error"||v==="error"?{border:e.red500,badgeBg:e.red100,badgeText:e.redErrorText,label:"ERROR",methodBorder:e.errorBorder,methodBg:e.red100,methodText:e.redErrorText}:t==="warn"||v==="warn"?{border:e.amber500,badgeBg:e.amber100,badgeText:e.amber800Warm,label:"WARN",methodBorder:e.amber200,methodBg:e.amber100,methodText:e.amber800Warm}:t==="debug"||v==="debug"?{border:e.violet500,badgeBg:e.purple100,badgeText:e.violet600,label:"DEBUG",methodBorder:e.purple200,methodBg:e.purple100,methodText:e.violet600}:t==="info"||v==="info"?{border:e.sky500,badgeBg:e.sky100,badgeText:e.sky600,label:"INFO",methodBorder:e.sky400,methodBg:e.sky100,methodText:e.sky600}:{border:e.indigo500,badgeBg:e.indigo50,badgeText:e.indigo600Alt,label:"LOG",methodBorder:e.indigo400,methodBg:e.indigo50,methodText:e.indigo600Alt}})(),le=r.rawArgs!=null&&r.rawArgs.length>1,$e=!!(r.stack&&r.stack.trim().length>0),Fe=[{key:"output",label:S("console.tabOutput"),icon:t=><Oe color={t?e.white:e.grayTextWeak}size={12}/>},...le?[{key:"arguments",label:S("console.tabArgs",{count:r.rawArgs?.length}),icon:t=><Ue color={t?e.white:e.grayTextWeak}size={12}/>}]:[],...$e?[{key:"stack",label:S("console.tabStack"),icon:t=><Se color={t?e.white:e.grayTextWeak}size={12}/>}]:[],{key:"metadata",label:S("console.tabMetadata"),icon:t=><Je color={t?e.white:e.grayTextWeak}size={12}/>}];return<C style={{flex:1}}>
173
3
 
174
- <View style={styles.detailInfoBar}>
175
- <View style={{ flexDirection: 'column', gap: 10 }}>
4
+ <C style={z.detailInfoBar}>
5
+ <C style={{flexDirection:"column",gap:10}}>
176
6
 
177
- <View style={{
178
- flexDirection: 'row',
179
- alignItems: 'center',
180
- justifyContent: 'space-between',
181
- gap: 8,
182
- }}>
183
- <View style={{
184
- flexDirection: 'row',
185
- alignItems: 'center',
186
- gap: 6,
187
- flex: 1,
188
- flexWrap: 'wrap',
189
- }}>
7
+ <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8}}>
8
+ <C style={{flexDirection:"row",alignItems:"center",gap:6,flex:1,flexWrap:"wrap"}}>
190
9
 
191
- <View style={[
192
- styles.typeChip,
193
- {
194
- backgroundColor: typeColors.badgeBg,
195
- borderWidth: 1,
196
- borderColor: `${typeColors.border}40`,
197
- paddingHorizontal: 8,
198
- paddingVertical: 3,
199
- },
200
- ]}>
201
- <View style={[
202
- styles.typeDot,
203
- { backgroundColor: typeColors.badgeText },
204
- ]}/>
205
- <Text style={[
206
- styles.typeChipText,
207
- { color: typeColors.badgeText, fontSize: 10 },
208
- ]}>
209
- {typeColors.label}
210
- </Text>
211
- </View>
10
+ <C style={[z.metaChip,{backgroundColor:`${e.grayTextWeak}15`,borderColor:`${e.grayTextWeak}33`,paddingHorizontal:7,paddingVertical:3}]}>
11
+ <T style={[z.metaChipText,{color:e.grayTextStrong,fontSize:10,fontFamily:B.interBold}]}>
12
+ #{r.id!=null?r.id+1:1}
13
+ </T>
14
+ </C>
212
15
 
213
16
 
214
- <View style={[
215
- styles.metaChip,
216
- {
217
- backgroundColor: `${AppColors.brandPurple}12`,
218
- borderColor: `${AppColors.brandPurple}30`,
219
- },
220
- ]}>
221
- <Text style={[
222
- styles.metaChipText,
223
- { color: AppColors.brandPurple, fontSize: 10 },
224
- ]}>
17
+ <C style={[z.typeChip,{backgroundColor:U.badgeBg,borderWidth:1,borderColor:`${U.border}40`,paddingHorizontal:8,paddingVertical:3}]}>
18
+ <C style={[z.typeDot,{backgroundColor:U.badgeText}]}/>
19
+ <T style={[z.typeChipText,{color:U.badgeText,fontSize:10}]}>
20
+ {U.label}
21
+ </T>
22
+ </C>
23
+
24
+
25
+ <C style={[z.metaChip,{backgroundColor:`${e.brandPurple}12`,borderColor:`${e.brandPurple}30`}]}>
26
+ <T style={[z.metaChipText,{color:e.brandPurple,fontSize:10}]}>
225
27
  console.
226
- {selectedLog.sourceMethod || selectedLog.type || 'log'}
227
- </Text>
228
- </View>
28
+ {r.sourceMethod||r.type||"log"}
29
+ </T>
30
+ </C>
229
31
 
230
32
 
231
- {jsonContent && (<View style={[
232
- styles.metaChip,
233
- {
234
- backgroundColor: `${AppColors.teal600}12`,
235
- borderColor: `${AppColors.teal600}2B`,
236
- },
237
- ]}>
238
- <Text style={[
239
- styles.metaChipText,
240
- { color: AppColors.teal600, fontSize: 10 },
241
- ]}>
242
- {Array.isArray(jsonContent.data)
243
- ? `Array[${jsonContent.data.length}]`
244
- : `Object{${Object.keys(jsonContent.data).length}}`}
245
- </Text>
246
- </View>)}
33
+ {W&&<C style={[z.metaChip,{backgroundColor:`${e.teal600}12`,borderColor:`${e.teal600}2B`}]}>
34
+ <T style={[z.metaChipText,{color:e.teal600,fontSize:10}]}>
35
+ {Array.isArray(W.data)?`Array[${W.data.length}]`:`Object{${Object.keys(W.data).length}}`}
36
+ </T>
37
+ </C>}
247
38
 
248
39
 
249
- {selectedLog.duplicateCount != null &&
250
- selectedLog.duplicateCount > 1 && (<View style={[
251
- styles.metaChip,
252
- {
253
- backgroundColor: `${AppColors.purple}1A`,
254
- borderColor: `${AppColors.purple}3D`,
255
- },
256
- ]}>
257
- <Text style={[
258
- styles.metaChipText,
259
- { color: AppColors.purple, fontWeight: '700' },
260
- ]}>
261
- {t('console.duplicates', {
262
- count: selectedLog.duplicateCount,
263
- })}
264
- </Text>
265
- </View>)}
266
- </View>
40
+ {r.duplicateCount!=null&&r.duplicateCount>1&&<C style={[z.metaChip,{backgroundColor:`${e.purple}1A`,borderColor:`${e.purple}3D`}]}>
41
+ <T style={[z.metaChipText,{color:e.purple,fontWeight:"700"}]}>
42
+ {S("console.duplicates",{count:r.duplicateCount})}
43
+ </T>
44
+ </C>}
45
+ </C>
267
46
 
268
47
 
269
- <CopyButton value={selectedLog.message} label={t('console.logMessage')}/>
270
- </View>
48
+ <M value={r.message}label={S("console.logMessage")}/>
49
+ </C>
271
50
 
272
51
 
273
- <View style={{ gap: 4 }}>
274
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
275
- {originFrame?.fileExt && originFrame.fileExt !== 'other' && (<View style={{
276
- backgroundColor: originFrame.fileExt === 'tsx' || originFrame.fileExt === 'ts'
277
- ? AppColors.brandPurple
278
- : AppColors.teal600,
279
- borderRadius: 4,
280
- paddingHorizontal: 5,
281
- paddingVertical: 1.5,
282
- }}>
283
- <Text style={{
284
- fontFamily: AppFonts.interBold,
285
- fontSize: 9.5,
286
- color: AppColors.white,
287
- letterSpacing: 0.5,
288
- }}>
289
- {originFrame.fileExt.toUpperCase()}
290
- </Text>
291
- </View>)}
52
+ <C style={{gap:4}}>
53
+ <C style={{flexDirection:"row",alignItems:"center",gap:6,flexWrap:"wrap"}}>
54
+ {V?.fileExt&&V.fileExt!=="other"&&<C style={{backgroundColor:V.fileExt==="tsx"||V.fileExt==="ts"?e.brandPurple:e.teal600,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5}}>
55
+ <T style={{fontFamily:B.interBold,fontSize:9.5,color:e.white,letterSpacing:.5}}>
56
+ {V.fileExt.toUpperCase()}
57
+ </T>
58
+ </C>}
292
59
 
293
- <Text selectable style={{
294
- fontFamily: AppFonts.interBold,
295
- fontSize: 13,
296
- color: AppColors.primaryBlack,
297
- lineHeight: 18,
298
- flexShrink: 1,
299
- }}>
300
- {originFrame?.functionName && originFrame.functionName !== '<anonymous>'
301
- ? `${originFrame.functionName}()`
302
- : originFrame?.fileName || t('console.consoleLog')}
303
- </Text>
60
+ <T selectable style={{fontFamily:B.interBold,fontSize:13,color:e.primaryBlack,lineHeight:18,flexShrink:1}}>
61
+ {V?.functionName&&V.functionName!=="<anonymous>"?`${V.functionName}()`:V?.fileName||S("console.consoleLog")}
62
+ </T>
304
63
 
305
- {originFrame?.fileName && (<Pressable onPress={() => openInVSCode(originFrame.rawFilePath ||
306
- originFrame.fullPath ||
307
- originFrame.fileName, originFrame.lineNumber, originFrame.columnNumber)} hitSlop={8} style={[
308
- styles.metaChip,
309
- {
310
- backgroundColor: `${AppColors.brandPurple}15`,
311
- borderColor: `${AppColors.brandPurple}40`,
312
- paddingHorizontal: 7,
313
- paddingVertical: 2,
314
- },
315
- ]}>
316
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4, flexShrink: 1 }}>
317
- <DocIcon color={AppColors.brandPurple} size={10}/>
318
- <Text style={[
319
- styles.metaChipText,
320
- { color: AppColors.brandPurple, fontSize: 10, fontFamily: AppFonts.interBold, flexShrink: 1 },
321
- ]}>
322
- {originFrame.fileName}
323
- {originFrame.lineNumber ? `:${originFrame.lineNumber}` : ''}
324
- {originFrame.columnNumber ? `:${originFrame.columnNumber}` : ''}
325
- </Text>
326
- <ExternalLinkIcon color={AppColors.brandPurple} size={9}/>
327
- </View>
328
- </Pressable>)}
329
- </View>
64
+ {V?.fileName&&<Q onPress={()=>Ye(V.rawFilePath||V.fullPath||V.fileName,V.lineNumber,V.columnNumber)}hitSlop={8}style={[z.metaChip,{backgroundColor:`${e.brandPurple}15`,borderColor:`${e.brandPurple}40`,paddingHorizontal:7,paddingVertical:2}]}>
65
+ <C style={{flexDirection:"row",alignItems:"center",gap:4,flexShrink:1}}>
66
+ <Ke color={e.brandPurple}size={10}/>
67
+ <T style={[z.metaChipText,{color:e.brandPurple,fontSize:10,fontFamily:B.interBold,flexShrink:1}]}>
68
+ {V.fileName}
69
+ {V.lineNumber?`:${V.lineNumber}`:""}
70
+ {V.columnNumber?`:${V.columnNumber}`:""}
71
+ </T>
72
+ <Ge color={e.brandPurple}size={9}/>
73
+ </C>
74
+ </Q>}
75
+ </C>
330
76
 
331
77
 
332
- <View style={{
333
- flexDirection: 'row',
334
- alignItems: 'center',
335
- gap: 8,
336
- flexWrap: 'wrap',
337
- }}>
338
- <Text style={{
339
- fontFamily: AppFonts.interBold,
340
- fontSize: 10,
341
- color: AppColors.grayTextWeak,
342
- }}>
343
- #{selectedLog.id + 1}
344
- </Text>
345
- <Text style={detailStyles.metaDot}>•</Text>
346
- <Text style={{
347
- fontFamily: AppFonts.interRegular,
348
- fontSize: 10,
349
- color: AppColors.grayTextWeak,
350
- }}>
351
- {formatDateTime(selectedLog.timestamp)} ({getRelativeTime(selectedLog.timestamp)})
352
- </Text>
353
- <Text style={detailStyles.metaDot}>•</Text>
354
- <Text style={{
355
- fontFamily: AppFonts.interRegular,
356
- fontSize: 10,
357
- color: AppColors.grayTextWeak,
358
- }}>
359
- {getSize(selectedLog.message)}
360
- </Text>
361
- </View>
362
- </View>
363
- </View>
364
- </View>
78
+ <C style={{flexDirection:"row",alignItems:"center",gap:8,flexWrap:"wrap"}}>
79
+ <T style={{fontFamily:B.interBold,fontSize:10,color:e.grayTextWeak}}>
80
+ #{r.id+1}
81
+ </T>
82
+ <T style={te.metaDot}>•</T>
83
+ <T style={{fontFamily:B.interRegular,fontSize:10,color:e.grayTextWeak}}>
84
+ {ee(r.timestamp)} ({Be(r.timestamp)})
85
+ </T>
86
+ <T style={te.metaDot}>•</T>
87
+ <T style={{fontFamily:B.interRegular,fontSize:10,color:e.grayTextWeak}}>
88
+ {_(r.message)}
89
+ </T>
90
+ </C>
91
+ </C>
92
+ </C>
93
+ </C>
365
94
 
366
95
 
367
- <View style={detailStyles.tabsHeaderWrap}>
368
- <SegmentedTabs tabs={subTabs} activeKey={activeTab} onChange={key => setActiveTab(key)}/>
369
- </View>
96
+ <C style={te.tabsHeaderWrap}>
97
+ <Y tabs={Fe}activeKey={D}onChange={t=>E(t)}/>
98
+ </C>
370
99
 
371
100
 
372
- {activeTab !== 'metadata' && (<View style={{ paddingHorizontal: 12, paddingTop: 6, paddingBottom: 4 }}>
373
- <View style={[styles.detailSearchRow, { marginBottom: 0 }]}>
374
- <View style={[
375
- styles.detailSearchBox,
376
- {
377
- backgroundColor: isDark
378
- ? `${AppColors.brandPurple}10`
379
- : AppColors.purpleShade50,
380
- borderWidth: 1,
381
- borderColor: AppColors.dividerColor,
382
- },
383
- ]}>
384
- <SearchIcon color={AppColors.grayTextWeak} size={15}/>
385
- <TextInput placeholder="Search in log details..." placeholderTextColor={AppColors.grayTextWeak} value={detailSearch} onChangeText={setDetailSearch} style={styles.detailSearchInput} autoCorrect={false} autoCapitalize="none"/>
386
- {detailSearch.length > 0 && (<Pressable onPress={() => setDetailSearch('')} hitSlop={10} style={{ padding: 6 }}>
387
- <ClearIcon color={AppColors.grayTextWeak} size={13}/>
388
- </Pressable>)}
389
- </View>
390
- </View>
391
- </View>)}
101
+ {D!=="metadata"&&<C style={{paddingHorizontal:12,paddingTop:6,paddingBottom:4}}>
102
+ <C style={[z.detailSearchRow,{marginBottom:0}]}>
103
+ <C style={[z.detailSearchBox,{backgroundColor:H?`${e.brandPurple}10`:e.purpleShade50,borderWidth:1,borderColor:e.dividerColor}]}>
104
+ <Le color={e.grayTextWeak}size={15}/>
105
+ <He placeholder="Search in log details..."placeholderTextColor={e.grayTextWeak}value={$}onChangeText={P}style={z.detailSearchInput}autoCorrect={!1}autoCapitalize="none"/>
106
+ {$.length>0&&<Q onPress={()=>P("")}hitSlop={10}style={{padding:6}}>
107
+ <Ae color={e.grayTextWeak}size={13}/>
108
+ </Q>}
109
+ </C>
110
+ </C>
111
+ </C>}
392
112
 
393
113
 
394
- <ScrollView style={{ flex: 1 }} contentContainerStyle={{
395
- paddingHorizontal: 12,
396
- paddingTop: 6,
397
- paddingBottom: 28,
398
- flexGrow: 1,
399
- }} showsVerticalScrollIndicator={true} keyboardShouldPersistTaps="handled">
114
+ <Ne style={{flex:1}}contentContainerStyle={{paddingHorizontal:12,paddingTop:6,paddingBottom:28,flexGrow:1}}showsVerticalScrollIndicator={!0}keyboardShouldPersistTaps="handled">
400
115
 
401
- {activeTab === 'output' && (<View style={[
402
- styles.sectionContainer,
403
- {
404
- backgroundColor: isDark
405
- ? `${AppColors.purple}12`
406
- : AppColors.purpleShade50,
407
- borderWidth: 1,
408
- borderColor: AppColors.dividerColor,
409
- borderRadius: 12,
410
- overflow: 'hidden',
411
- flex: 1,
412
- },
413
- ]}>
116
+ {D==="output"&&<C style={[z.sectionContainer,{backgroundColor:H?`${e.purple}12`:e.purpleShade50,borderWidth:1,borderColor:e.dividerColor,borderRadius:12,overflow:"hidden",flex:1}]}>
414
117
 
415
- <View style={{
416
- flexDirection: 'column',
417
- gap: 8,
418
- paddingHorizontal: 12,
419
- paddingVertical: 10,
420
- borderBottomWidth: 1,
421
- borderBottomColor: AppColors.dividerColor,
422
- backgroundColor: isDark
423
- ? AppColors.primaryLight
424
- : AppColors.grayBackground,
425
- }}>
426
- <View style={{
427
- flexDirection: 'row',
428
- justifyContent: 'space-between',
429
- alignItems: 'center',
430
- }}>
431
- <Text style={{
432
- fontFamily: AppFonts.interBold,
433
- fontSize: 11.5,
434
- color: AppColors.purple,
435
- letterSpacing: 0.4,
436
- textTransform: 'uppercase',
437
- }}>
438
- {jsonContent
439
- ? t('console.jsonTitle')
440
- : t('console.messageTitle')}
441
- </Text>
442
- <CopyButton value={selectedLog.message} label={t('console.logMessage')}/>
443
- </View>
118
+ <C style={{flexDirection:"column",gap:8,paddingHorizontal:12,paddingVertical:10,borderBottomWidth:1,borderBottomColor:e.dividerColor,backgroundColor:H?e.primaryLight:e.grayBackground}}>
119
+ <C style={{flexDirection:"row",justifyContent:"space-between",alignItems:"center"}}>
120
+ <T style={{fontFamily:B.interBold,fontSize:11.5,color:e.purple,letterSpacing:.4,textTransform:"uppercase"}}>
121
+ {S(W?"console.jsonTitle":"console.messageTitle")}
122
+ </T>
123
+ <M value={r.message}label={S("console.logMessage")}/>
124
+ </C>
444
125
 
445
- {jsonContent && (<SegmentedTabs tabs={[
446
- {
447
- key: 'pretty',
448
- label: t('network.jsonViewer.pretty'),
449
- icon: (isActive) => (<PrettyIcon color={isActive
450
- ? AppColors.white
451
- : AppColors.grayTextWeak} size={12}/>),
452
- },
453
- {
454
- key: 'raw',
455
- label: t('network.jsonViewer.raw'),
456
- icon: (isActive) => (<RawIcon color={isActive
457
- ? AppColors.white
458
- : AppColors.grayTextWeak} size={12}/>),
459
- },
460
- {
461
- key: 'table',
462
- label: t('network.jsonViewer.table'),
463
- icon: (isActive) => (<TableIcon color={isActive
464
- ? AppColors.white
465
- : AppColors.grayTextWeak} size={12}/>),
466
- },
467
- ]} activeKey={viewMode} onChange={key => setViewMode(key)}/>)}
468
- </View>
126
+ {W&&<Y tabs={[{key:"pretty",label:S("network.jsonViewer.pretty"),icon:t=><Me color={t?e.white:e.grayTextWeak}size={12}/>},{key:"raw",label:S("network.jsonViewer.raw"),icon:t=><Te color={t?e.white:e.grayTextWeak}size={12}/>},{key:"table",label:S("network.jsonViewer.table"),icon:t=><Ee color={t?e.white:e.grayTextWeak}size={12}/>}]}activeKey={J}onChange={t=>ze(t)}/>}
127
+ </C>
469
128
 
470
129
 
471
- <View style={{ padding: 12, flex: 1 }}>
472
- {jsonContent ? (<>
473
- {jsonContent.header ? (<View style={{
474
- backgroundColor: AppColors.primaryLight,
475
- borderRadius: 8,
476
- borderWidth: 1,
477
- borderColor: AppColors.dividerColor,
478
- padding: 10,
479
- marginBottom: 8,
480
- }}>
481
- <Text selectable style={{
482
- fontFamily: AppFonts.interRegular,
483
- fontSize: 12,
484
- color: AppColors.primaryBlack,
485
- lineHeight: 17,
486
- }}>
487
- {jsonContent.header}
488
- </Text>
489
- </View>) : null}
490
- <JsonViewer data={jsonContent.data} search={detailSearch} wrap forceOpen hideTabs fullHeight mode={viewMode} defaultExpandDepth={jsonContent.data &&
491
- typeof jsonContent.data === 'object' &&
492
- Object.keys(jsonContent.data).length > 10
493
- ? 1
494
- : 2}/>
495
- </>) : (<View style={{
496
- backgroundColor: AppColors.primaryLight,
497
- borderRadius: 8,
498
- borderWidth: 1,
499
- borderColor: AppColors.dividerColor,
500
- padding: 10,
501
- }}>
502
- <HighlightText text={selectedLog.message} search={detailSearch} style={{
503
- fontFamily: AppFonts.interRegular,
504
- fontSize: 12,
505
- color: AppColors.primaryBlack,
506
- lineHeight: 18,
507
- }} highlightStyle={{
508
- backgroundColor: AppColors.yellowHighlight,
509
- color: AppColors.primaryBlack,
510
- borderRadius: 3,
511
- paddingHorizontal: 2,
512
- }} detectLinks={true}/>
513
- </View>)}
514
- </View>
515
- </View>)}
130
+ <C style={{padding:12,flex:1}}>
131
+ {W?<>
132
+ {W.header?<C style={{backgroundColor:e.primaryLight,borderRadius:8,borderWidth:1,borderColor:e.dividerColor,padding:10,marginBottom:8}}>
133
+ <T selectable style={{fontFamily:B.interRegular,fontSize:12,color:e.primaryBlack,lineHeight:17}}>
134
+ {W.header}
135
+ </T>
136
+ </C>:null}
137
+ <Ce data={W.data}search={$}wrap forceOpen hideTabs fullHeight mode={J}defaultExpandDepth={W.data&&typeof W.data=="object"&&Object.keys(W.data).length>10?1:2}/>
138
+ </>:<C style={{backgroundColor:e.primaryLight,borderRadius:8,borderWidth:1,borderColor:e.dividerColor,padding:10}}>
139
+ <X text={r.message}search={$}style={{fontFamily:B.interRegular,fontSize:12,color:e.primaryBlack,lineHeight:18}}highlightStyle={{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:3,paddingHorizontal:2}}detectLinks={!0}/>
140
+ </C>}
141
+ </C>
142
+ </C>}
516
143
 
517
144
 
518
- {activeTab === 'arguments' && selectedLog.rawArgs && (<View style={{ gap: 10 }}>
519
- {selectedLog.rawArgs.map((arg, idx) => {
520
- const argType = arg === null
521
- ? 'null'
522
- : Array.isArray(arg)
523
- ? `Array[${arg.length}]`
524
- : typeof arg === 'object'
525
- ? `Object{${Object.keys(arg).length}}`
526
- : typeof arg;
527
- const isObj = arg != null &&
528
- (typeof arg === 'object' || Array.isArray(arg));
529
- const argStr = isObj
530
- ? JSON.stringify(arg, null, 2)
531
- : String(arg);
532
- return (<View key={idx} style={[
533
- styles.sectionContainer,
534
- {
535
- backgroundColor: AppColors.primaryLight,
536
- borderRadius: 10,
537
- borderWidth: 1,
538
- borderColor: AppColors.dividerColor,
539
- overflow: 'hidden',
540
- },
541
- ]}>
542
- <View style={{
543
- flexDirection: 'row',
544
- alignItems: 'center',
545
- justifyContent: 'space-between',
546
- paddingHorizontal: 12,
547
- paddingVertical: 8,
548
- backgroundColor: AppColors.grayBackground,
549
- borderBottomWidth: 1,
550
- borderBottomColor: AppColors.dividerColor,
551
- }}>
552
- <View style={{
553
- flexDirection: 'row',
554
- alignItems: 'center',
555
- gap: 6,
556
- }}>
557
- <Text style={{
558
- fontFamily: AppFonts.interBold,
559
- fontSize: 11,
560
- color: AppColors.purple,
561
- }}>
562
- Arg #{idx + 1}
563
- </Text>
564
- <View style={[
565
- styles.metaChip,
566
- {
567
- backgroundColor: `${AppColors.teal600}12`,
568
- borderColor: `${AppColors.teal600}2B`,
569
- paddingHorizontal: 5,
570
- paddingVertical: 1.5,
571
- },
572
- ]}>
573
- <Text style={[
574
- styles.metaChipText,
575
- { color: AppColors.teal600, fontSize: 9 },
576
- ]}>
577
- {argType}
578
- </Text>
579
- </View>
580
- </View>
581
- <CopyButton value={argStr} label={`Arg #${idx + 1}`}/>
582
- </View>
145
+ {D==="arguments"&&r.rawArgs&&<C style={{gap:10}}>
146
+ {r.rawArgs.map((t,v)=>{const I=t===null?"null":Array.isArray(t)?`Array[${t.length}]`:typeof t=="object"?`Object{${Object.keys(t).length}}`:typeof t,G=t!=null&&(typeof t=="object"||Array.isArray(t)),q=G?JSON.stringify(t,null,2):String(t);return<C key={v}style={[z.sectionContainer,{backgroundColor:e.primaryLight,borderRadius:10,borderWidth:1,borderColor:e.dividerColor,overflow:"hidden"}]}>
147
+ <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:8,backgroundColor:e.grayBackground,borderBottomWidth:1,borderBottomColor:e.dividerColor}}>
148
+ <C style={{flexDirection:"row",alignItems:"center",gap:6}}>
149
+ <T style={{fontFamily:B.interBold,fontSize:11,color:e.purple}}>
150
+ Arg #{v+1}
151
+ </T>
152
+ <C style={[z.metaChip,{backgroundColor:`${e.teal600}12`,borderColor:`${e.teal600}2B`,paddingHorizontal:5,paddingVertical:1.5}]}>
153
+ <T style={[z.metaChipText,{color:e.teal600,fontSize:9}]}>
154
+ {I}
155
+ </T>
156
+ </C>
157
+ </C>
158
+ <M value={q}label={`Arg #${v+1}`}/>
159
+ </C>
583
160
 
584
- <View style={{ padding: 10 }}>
585
- {isObj ? (<JsonViewer data={arg} search={detailSearch} wrap forceOpen hideTabs defaultExpandDepth={2}/>) : (<HighlightText text={argStr} search={detailSearch} style={{
586
- fontFamily: AppFonts.interRegular,
587
- fontSize: 12,
588
- color: AppColors.primaryBlack,
589
- lineHeight: 17,
590
- }} highlightStyle={{
591
- backgroundColor: AppColors.yellowHighlight,
592
- color: AppColors.primaryBlack,
593
- }}/>)}
594
- </View>
595
- </View>);
596
- })}
597
- </View>)}
161
+ <C style={{padding:10}}>
162
+ {G?<Ce data={t}search={$}wrap forceOpen hideTabs defaultExpandDepth={2}/>:<X text={q}search={$}style={{fontFamily:B.interRegular,fontSize:12,color:e.primaryBlack,lineHeight:17}}highlightStyle={{backgroundColor:e.yellowHighlight,color:e.primaryBlack}}/>}
163
+ </C>
164
+ </C>})}
165
+ </C>}
598
166
 
599
167
 
600
- {activeTab === 'stack' && (<View style={[
601
- styles.sectionContainer,
602
- {
603
- backgroundColor: isDark
604
- ? `${AppColors.purple}12`
605
- : AppColors.purpleShade50,
606
- borderWidth: 1,
607
- borderColor: AppColors.dividerColor,
608
- borderRadius: 12,
609
- overflow: 'hidden',
610
- },
611
- ]}>
168
+ {D==="stack"&&<C style={[z.sectionContainer,{backgroundColor:H?`${e.purple}12`:e.purpleShade50,borderWidth:1,borderColor:e.dividerColor,borderRadius:12,overflow:"hidden"}]}>
612
169
 
613
- <View style={{
614
- flexDirection: 'column',
615
- gap: 8,
616
- paddingHorizontal: 12,
617
- paddingVertical: 10,
618
- borderBottomWidth: 1,
619
- borderBottomColor: AppColors.dividerColor,
620
- backgroundColor: isDark
621
- ? AppColors.primaryLight
622
- : AppColors.grayBackground,
623
- }}>
170
+ <C style={{flexDirection:"column",gap:8,paddingHorizontal:12,paddingVertical:10,borderBottomWidth:1,borderBottomColor:e.dividerColor,backgroundColor:H?e.primaryLight:e.grayBackground}}>
624
171
 
625
- <View style={{
626
- flexDirection: 'row',
627
- alignItems: 'center',
628
- justifyContent: 'space-between',
629
- gap: 8,
630
- }}>
631
- <Text style={{
632
- fontFamily: AppFonts.interBold,
633
- fontSize: 11.5,
634
- color: AppColors.purple,
635
- textTransform: 'uppercase',
636
- letterSpacing: 0.4,
637
- }}>
638
- {stackSource === 'error'
639
- ? t('console.errorStack', { count: parsedStackFrames.length })
640
- : t('console.callStack', { count: parsedStackFrames.length })}
641
- </Text>
172
+ <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:8}}>
173
+ <T style={{fontFamily:B.interBold,fontSize:11.5,color:e.purple,textTransform:"uppercase",letterSpacing:.4}}>
174
+ {K==="error"?S("console.errorStack",{count:F.length}):S("console.callStack",{count:F.length})}
175
+ </T>
642
176
 
643
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
644
- <View style={{
645
- flexDirection: 'row',
646
- backgroundColor: isDark ? AppColors.primaryLight : AppColors.white,
647
- borderRadius: 7,
648
- padding: 2,
649
- borderWidth: 1,
650
- borderColor: AppColors.dividerColor,
651
- }}>
652
- <Pressable onPress={() => setStackViewMode('structured')} style={{
653
- flexDirection: 'row',
654
- alignItems: 'center',
655
- gap: 3,
656
- paddingVertical: 3.5,
657
- paddingHorizontal: 7,
658
- borderRadius: 5,
659
- backgroundColor: stackViewMode === 'structured'
660
- ? AppColors.brandPurple
661
- : 'transparent',
662
- }}>
663
- <LayersIcon color={stackViewMode === 'structured'
664
- ? AppColors.white
665
- : AppColors.grayTextWeak} size={11}/>
666
- <Text style={{
667
- fontFamily: AppFonts.interBold,
668
- fontSize: 10,
669
- color: stackViewMode === 'structured'
670
- ? AppColors.white
671
- : AppColors.grayTextStrong,
672
- }}>
673
- {t('console.cardsView')}
674
- </Text>
675
- </Pressable>
177
+ <C style={{flexDirection:"row",alignItems:"center",gap:5}}>
178
+ <C style={{flexDirection:"row",backgroundColor:H?e.primaryLight:e.white,borderRadius:7,padding:2,borderWidth:1,borderColor:e.dividerColor}}>
179
+ <Q onPress={()=>re("structured")}style={{flexDirection:"row",alignItems:"center",gap:3,paddingVertical:3.5,paddingHorizontal:7,borderRadius:5,backgroundColor:N==="structured"?e.brandPurple:"transparent"}}>
180
+ <Se color={N==="structured"?e.white:e.grayTextWeak}size={11}/>
181
+ <T style={{fontFamily:B.interBold,fontSize:10,color:N==="structured"?e.white:e.grayTextStrong}}>
182
+ {S("console.cardsView")}
183
+ </T>
184
+ </Q>
676
185
 
677
- <Pressable onPress={() => setStackViewMode('raw')} style={{
678
- flexDirection: 'row',
679
- alignItems: 'center',
680
- gap: 3,
681
- paddingVertical: 3.5,
682
- paddingHorizontal: 7,
683
- borderRadius: 5,
684
- backgroundColor: stackViewMode === 'raw'
685
- ? AppColors.brandPurple
686
- : 'transparent',
687
- }}>
688
- <RawIcon color={stackViewMode === 'raw'
689
- ? AppColors.white
690
- : AppColors.grayTextWeak} size={11}/>
691
- <Text style={{
692
- fontFamily: AppFonts.interBold,
693
- fontSize: 10,
694
- color: stackViewMode === 'raw'
695
- ? AppColors.white
696
- : AppColors.grayTextStrong,
697
- }}>
698
- {t('console.rawTraceView')}
699
- </Text>
700
- </Pressable>
701
- </View>
186
+ <Q onPress={()=>re("raw")}style={{flexDirection:"row",alignItems:"center",gap:3,paddingVertical:3.5,paddingHorizontal:7,borderRadius:5,backgroundColor:N==="raw"?e.brandPurple:"transparent"}}>
187
+ <Te color={N==="raw"?e.white:e.grayTextWeak}size={11}/>
188
+ <T style={{fontFamily:B.interBold,fontSize:10,color:N==="raw"?e.white:e.grayTextStrong}}>
189
+ {S("console.rawTraceView")}
190
+ </T>
191
+ </Q>
192
+ </C>
702
193
 
703
- <CopyButton value={activeStackString} label={t('console.fullStackTrace')}/>
704
- </View>
705
- </View>
194
+ <M value={O}label={S("console.fullStackTrace")}/>
195
+ </C>
196
+ </C>
706
197
 
707
198
 
708
- {selectedLog.errorStack && (<SegmentedTabs tabs={[
709
- {
710
- key: 'caller',
711
- label: t('console.callOriginStack'),
712
- },
713
- {
714
- key: 'error',
715
- label: t('console.errorThrownStack'),
716
- },
717
- ]} activeKey={stackSource} onChange={key => setStackSource(key)}/>)}
199
+ {r.errorStack&&<Y tabs={[{key:"caller",label:S("console.callOriginStack")},{key:"error",label:S("console.errorThrownStack")}]}activeKey={K}onChange={t=>ve(t)}/>}
718
200
 
719
201
 
720
- <SegmentedTabs tabs={[
721
- {
722
- key: 'app',
723
- label: t('console.appCodeScope', { count: appStackFrames.length }),
724
- },
725
- {
726
- key: 'all',
727
- label: t('console.allFramesScope', { count: parsedStackFrames.length }),
728
- },
729
- ]} activeKey={stackFilter} onChange={key => setStackFilter(key)}/>
730
- </View>
202
+ <Y tabs={[{key:"app",label:S("console.appCodeScope",{count:R.length})},{key:"all",label:S("console.allFramesScope",{count:F.length})}]}activeKey={Z}onChange={t=>We(t)}/>
203
+ </C>
731
204
 
732
205
 
733
- {stackViewMode === 'structured' ? (<View style={{ padding: 12, gap: 10 }}>
734
- {displayedFrames.length > 0 ? (displayedFrames.map((frame, frameIdx) => {
735
- const isTopFrame = frameIdx === 0;
736
- const frameBadgeBg = frame.frameType === 'app'
737
- ? `${AppColors.brandPurple}15`
738
- : frame.frameType === 'dependency'
739
- ? `${AppColors.amber500}18`
740
- : frame.frameType === 'native'
741
- ? `${AppColors.sky500}18`
742
- : AppColors.grayBorderSecondary;
743
- const frameBadgeText = frame.frameType === 'app'
744
- ? AppColors.brandPurple
745
- : frame.frameType === 'dependency'
746
- ? AppColors.amber700
747
- : frame.frameType === 'native'
748
- ? AppColors.sky500
749
- : AppColors.grayTextWeak;
750
- return (<View key={frameIdx} style={{
751
- backgroundColor: isTopFrame
752
- ? `${AppColors.brandPurple}0A`
753
- : AppColors.primaryLight,
754
- borderRadius: 10,
755
- borderWidth: 1,
756
- borderColor: isTopFrame
757
- ? `${AppColors.brandPurple}35`
758
- : AppColors.dividerColor,
759
- padding: 11,
760
- gap: 6,
761
- }}>
206
+ {N==="structured"?<C style={{padding:12,gap:10}}>
207
+ {oe.length>0?oe.map((t,v)=>{const I=v===0,G=t.frameType==="app"?`${e.brandPurple}15`:t.frameType==="dependency"?`${e.amber500}18`:t.frameType==="native"?`${e.sky500}18`:e.grayBorderSecondary,q=t.frameType==="app"?e.brandPurple:t.frameType==="dependency"?e.amber700:t.frameType==="native"?e.sky500:e.grayTextWeak;return<C key={v}style={{backgroundColor:I?`${e.brandPurple}0A`:e.primaryLight,borderRadius:10,borderWidth:1,borderColor:I?`${e.brandPurple}35`:e.dividerColor,padding:11,gap:6}}>
762
208
 
763
- <View style={{
764
- flexDirection: 'row',
765
- alignItems: 'center',
766
- justifyContent: 'space-between',
767
- gap: 6,
768
- }}>
769
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, flex: 1, flexWrap: 'wrap' }}>
770
- {isTopFrame && (<View style={{
771
- backgroundColor: AppColors.brandPurple,
772
- borderRadius: 4,
773
- paddingHorizontal: 5,
774
- paddingVertical: 1.5,
775
- }}>
776
- <Text style={{
777
- fontFamily: AppFonts.interBold,
778
- fontSize: 8.5,
779
- color: AppColors.white,
780
- }}>
781
- {t('console.originBadge')}
782
- </Text>
783
- </View>)}
209
+ <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6}}>
210
+ <C style={{flexDirection:"row",alignItems:"center",gap:5,flex:1,flexWrap:"wrap"}}>
211
+ {I&&<C style={{backgroundColor:e.brandPurple,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5}}>
212
+ <T style={{fontFamily:B.interBold,fontSize:8.5,color:e.white}}>
213
+ {S("console.originBadge")}
214
+ </T>
215
+ </C>}
784
216
 
785
- {frame.fileExt && frame.fileExt !== 'other' && (<View style={{
786
- backgroundColor: frame.fileExt === 'tsx' || frame.fileExt === 'ts'
787
- ? `${AppColors.brandPurple}18`
788
- : `${AppColors.teal600}18`,
789
- borderRadius: 4,
790
- paddingHorizontal: 4.5,
791
- paddingVertical: 1.5,
792
- }}>
793
- <Text style={{
794
- fontFamily: AppFonts.interBold,
795
- fontSize: 8.5,
796
- color: frame.fileExt === 'tsx' || frame.fileExt === 'ts'
797
- ? AppColors.brandPurple
798
- : AppColors.teal600,
799
- }}>
800
- {frame.fileExt.toUpperCase()}
801
- </Text>
802
- </View>)}
217
+ {t.fileExt&&t.fileExt!=="other"&&<C style={{backgroundColor:t.fileExt==="tsx"||t.fileExt==="ts"?`${e.brandPurple}18`:`${e.teal600}18`,borderRadius:4,paddingHorizontal:4.5,paddingVertical:1.5}}>
218
+ <T style={{fontFamily:B.interBold,fontSize:8.5,color:t.fileExt==="tsx"||t.fileExt==="ts"?e.brandPurple:e.teal600}}>
219
+ {t.fileExt.toUpperCase()}
220
+ </T>
221
+ </C>}
803
222
 
804
- <Text style={{
805
- fontFamily: AppFonts.interBold,
806
- fontSize: 11.5,
807
- color: isTopFrame
808
- ? AppColors.brandPurple
809
- : AppColors.primaryBlack,
810
- }}>
811
- {frame.fileName}
812
- </Text>
813
- </View>
223
+ <T style={{fontFamily:B.interBold,fontSize:11.5,color:I?e.brandPurple:e.primaryBlack}}>
224
+ {t.fileName}
225
+ </T>
226
+ </C>
814
227
 
815
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
816
- {frame.lineNumber && (<View style={{
817
- backgroundColor: `${AppColors.teal600}15`,
818
- borderColor: `${AppColors.teal600}30`,
819
- borderWidth: 1,
820
- borderRadius: 4,
821
- paddingHorizontal: 5,
822
- paddingVertical: 1.5,
823
- }}>
824
- <Text style={{
825
- fontFamily: AppFonts.interBold,
826
- fontSize: 9.5,
827
- color: AppColors.teal600,
828
- }}>
829
- L{frame.lineNumber}{frame.columnNumber ? `:C${frame.columnNumber}` : ''}
830
- </Text>
831
- </View>)}
832
- <CopyButton value={frame.copyableLocation} label={frame.fileName}/>
833
- </View>
834
- </View>
228
+ <C style={{flexDirection:"row",alignItems:"center",gap:4}}>
229
+ {t.lineNumber&&<C style={{backgroundColor:`${e.teal600}15`,borderColor:`${e.teal600}30`,borderWidth:1,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5}}>
230
+ <T style={{fontFamily:B.interBold,fontSize:9.5,color:e.teal600}}>
231
+ L{t.lineNumber}{t.columnNumber?`:C${t.columnNumber}`:""}
232
+ </T>
233
+ </C>}
234
+ <M value={t.copyableLocation}label={t.fileName}/>
235
+ </C>
236
+ </C>
835
237
 
836
238
 
837
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5 }}>
838
- <HighlightText text={frame.functionName !== '<anonymous>' ? `${frame.functionName}()` : '<anonymous>'} search={detailSearch} style={{
839
- fontFamily: AppFonts.interBold,
840
- fontSize: 12.5,
841
- color: AppColors.primaryBlack,
842
- }} highlightStyle={{
843
- backgroundColor: AppColors.yellowHighlight,
844
- color: AppColors.primaryBlack,
845
- }}/>
846
- </View>
239
+ <C style={{flexDirection:"row",alignItems:"center",gap:5}}>
240
+ <X text={t.functionName!=="<anonymous>"?`${t.functionName}()`:"<anonymous>"}search={$}style={{fontFamily:B.interBold,fontSize:12.5,color:e.primaryBlack}}highlightStyle={{backgroundColor:e.yellowHighlight,color:e.primaryBlack}}/>
241
+ </C>
847
242
 
848
243
 
849
- <View style={{
850
- flexDirection: 'row',
851
- alignItems: 'center',
852
- justifyContent: 'space-between',
853
- backgroundColor: isDark ? `${AppColors.primaryBlack}25` : AppColors.grayBackground,
854
- borderRadius: 6,
855
- paddingHorizontal: 8,
856
- paddingVertical: 4.5,
857
- gap: 6,
858
- }}>
859
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, flex: 1 }}>
860
- <FolderIcon size={12} color={AppColors.grayTextWeak}/>
861
- <Text selectable style={{
862
- fontFamily: AppFonts.interRegular,
863
- fontSize: 9.5,
864
- color: AppColors.grayTextStrong,
865
- flex: 1,
866
- }} numberOfLines={1}>
867
- {frame.fullPath}
868
- </Text>
869
- </View>
244
+ <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:H?`${e.primaryBlack}25`:e.grayBackground,borderRadius:6,paddingHorizontal:8,paddingVertical:4.5,gap:6}}>
245
+ <C style={{flexDirection:"row",alignItems:"center",gap:5,flex:1}}>
246
+ <Qe size={12}color={e.grayTextWeak}/>
247
+ <T selectable style={{fontFamily:B.interRegular,fontSize:9.5,color:e.grayTextStrong,flex:1}}numberOfLines={1}>
248
+ {t.fullPath}
249
+ </T>
250
+ </C>
870
251
 
871
- <View style={{
872
- backgroundColor: frameBadgeBg,
873
- borderRadius: 4,
874
- paddingHorizontal: 5,
875
- paddingVertical: 1.5,
876
- }}>
877
- <Text style={{
878
- fontFamily: AppFonts.interBold,
879
- fontSize: 8.5,
880
- color: frameBadgeText,
881
- }}>
882
- {frame.frameType === 'app'
883
- ? t('console.appCodeBadge')
884
- : frame.frameType === 'dependency'
885
- ? t('console.dependencyBadge')
886
- : frame.frameType === 'native'
887
- ? t('console.nativeBadge')
888
- : t('console.hermesVmBadge')}
889
- </Text>
890
- </View>
891
- </View>
892
- </View>);
893
- })) : (<Text style={{
894
- fontFamily: AppFonts.interRegular,
895
- fontSize: 11.5,
896
- color: AppColors.grayTextWeak,
897
- textAlign: 'center',
898
- paddingVertical: 16,
899
- }}>
900
- {t('console.noStackAvailable')}
901
- </Text>)}
902
- </View>) : (<View style={{
903
- backgroundColor: AppColors.primaryLight,
904
- padding: 12,
905
- }}>
906
- {activeStackString.split('\n').filter(l => l.trim().length > 0).map((line, lineIdx) => (<View key={lineIdx} style={{
907
- flexDirection: 'row',
908
- alignItems: 'flex-start',
909
- paddingVertical: 2,
910
- }}>
911
- <Text style={{
912
- width: 28,
913
- textAlign: 'right',
914
- paddingRight: 8,
915
- fontFamily: AppFonts.interRegular,
916
- fontSize: 11,
917
- color: AppColors.grayTextWeak,
918
- lineHeight: 17,
919
- }}>
920
- {lineIdx + 1}
921
- </Text>
922
- <HighlightText text={line.trim()} search={detailSearch} style={{
923
- flex: 1,
924
- fontFamily: AppFonts.interRegular,
925
- fontSize: 12,
926
- color: AppColors.primaryBlack,
927
- lineHeight: 17,
928
- }} highlightStyle={{
929
- backgroundColor: AppColors.yellowHighlight,
930
- color: AppColors.primaryBlack,
931
- }}/>
932
- </View>))}
933
- </View>)}
934
- </View>)}
252
+ <C style={{backgroundColor:G,borderRadius:4,paddingHorizontal:5,paddingVertical:1.5}}>
253
+ <T style={{fontFamily:B.interBold,fontSize:8.5,color:q}}>
254
+ {t.frameType==="app"?S("console.appCodeBadge"):t.frameType==="dependency"?S("console.dependencyBadge"):t.frameType==="native"?S("console.nativeBadge"):S("console.hermesVmBadge")}
255
+ </T>
256
+ </C>
257
+ </C>
258
+ </C>}):<T style={{fontFamily:B.interRegular,fontSize:11.5,color:e.grayTextWeak,textAlign:"center",paddingVertical:16}}>
259
+ {S("console.noStackAvailable")}
260
+ </T>}
261
+ </C>:<C style={{backgroundColor:e.primaryLight,padding:12}}>
262
+ {O.split(`
263
+ `).filter(t=>t.trim().length>0).map((t,v)=><C key={v}style={{flexDirection:"row",alignItems:"flex-start",paddingVertical:2}}>
264
+ <T style={{width:28,textAlign:"right",paddingRight:8,fontFamily:B.interRegular,fontSize:11,color:e.grayTextWeak,lineHeight:17}}>
265
+ {v+1}
266
+ </T>
267
+ <X text={t.trim()}search={$}style={{flex:1,fontFamily:B.interRegular,fontSize:12,color:e.primaryBlack,lineHeight:17}}highlightStyle={{backgroundColor:e.yellowHighlight,color:e.primaryBlack}}/>
268
+ </C>)}
269
+ </C>}
270
+ </C>}
935
271
 
936
272
 
937
- {activeTab === 'metadata' && (<View style={[
938
- styles.sectionContainer,
939
- {
940
- backgroundColor: AppColors.primaryLight,
941
- borderRadius: 10,
942
- borderWidth: 1,
943
- borderColor: AppColors.dividerColor,
944
- overflow: 'hidden',
945
- },
946
- ]}>
947
- <View style={{
948
- flexDirection: 'row',
949
- alignItems: 'center',
950
- justifyContent: 'space-between',
951
- paddingHorizontal: 12,
952
- paddingVertical: 9,
953
- backgroundColor: AppColors.grayBackground,
954
- borderBottomWidth: 1,
955
- borderBottomColor: AppColors.dividerColor,
956
- }}>
957
- <Text style={{
958
- fontFamily: AppFonts.interBold,
959
- fontSize: 11.5,
960
- color: AppColors.purple,
961
- textTransform: 'uppercase',
962
- letterSpacing: 0.4,
963
- }}>
273
+ {D==="metadata"&&<C style={[z.sectionContainer,{backgroundColor:e.primaryLight,borderRadius:10,borderWidth:1,borderColor:e.dividerColor,overflow:"hidden"}]}>
274
+ <C style={{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:12,paddingVertical:9,backgroundColor:e.grayBackground,borderBottomWidth:1,borderBottomColor:e.dividerColor}}>
275
+ <T style={{fontFamily:B.interBold,fontSize:11.5,color:e.purple,textTransform:"uppercase",letterSpacing:.4}}>
964
276
  Log Properties
965
- </Text>
966
- <CopyButton value={JSON.stringify({
967
- id: selectedLog.id + 1,
968
- type: selectedLog.type,
969
- sourceMethod: selectedLog.sourceMethod || 'log',
970
- timestamp: selectedLog.timestamp,
971
- dateTime: formatDateTime(selectedLog.timestamp),
972
- caller: selectedLog.caller,
973
- triggerFile: originFrame?.fileName,
974
- triggerLine: originFrame?.lineNumber,
975
- triggerFunction: originFrame?.functionName,
976
- charCount: selectedLog.message.length,
977
- size: getSize(selectedLog.message),
978
- duplicates: selectedLog.duplicateCount || 1,
979
- }, null, 2)} label="Metadata JSON"/>
980
- </View>
277
+ </T>
278
+ <M value={JSON.stringify({id:r.id+1,type:r.type,sourceMethod:r.sourceMethod||"log",timestamp:r.timestamp,dateTime:ee(r.timestamp),caller:r.caller,triggerFile:V?.fileName,triggerLine:V?.lineNumber,triggerFunction:V?.functionName,charCount:r.message.length,size:_(r.message),duplicates:r.duplicateCount||1},null,2)}label="Metadata JSON"/>
279
+ </C>
981
280
 
982
- <View style={{ paddingHorizontal: 12, paddingVertical: 4 }}>
983
- {[
984
- { label: 'Log ID', value: `#${selectedLog.id + 1}` },
985
- { label: 'Level', value: selectedLog.type.toUpperCase() },
986
- {
987
- label: 'Source Method',
988
- value: `console.${selectedLog.sourceMethod || selectedLog.type || 'log'}`,
989
- },
990
- {
991
- label: 'Triggered At',
992
- value: `${formatDateTime(selectedLog.timestamp)} (${getRelativeTime(selectedLog.timestamp)})`,
993
- },
994
- { label: 'Timestamp (ms)', value: String(selectedLog.timestamp) },
995
- {
996
- label: 'Trigger File',
997
- value: originFrame?.fileName || 'Unknown',
998
- },
999
- ...(originFrame?.lineNumber
1000
- ? [
1001
- {
1002
- label: 'Trigger Location',
1003
- value: `Line ${originFrame.lineNumber}, Col ${originFrame.columnNumber || 0}`,
1004
- },
1005
- ]
1006
- : []),
1007
- ...(originFrame?.functionName && originFrame.functionName !== '<anonymous>'
1008
- ? [
1009
- {
1010
- label: 'Trigger Function',
1011
- value: `${originFrame.functionName}()`,
1012
- },
1013
- ]
1014
- : []),
1015
- {
1016
- label: 'Full Location',
1017
- value: selectedLog.caller || 'Unknown',
1018
- },
1019
- {
1020
- label: 'Character Length',
1021
- value: `${selectedLog.message.length} chars`,
1022
- },
1023
- {
1024
- label: 'Approx. Size',
1025
- value: getSize(selectedLog.message),
1026
- },
1027
- {
1028
- label: 'Duplicate Count',
1029
- value: String(selectedLog.duplicateCount || 1),
1030
- },
1031
- ...(hasMultipleArgs
1032
- ? [
1033
- {
1034
- label: 'Arguments Count',
1035
- value: `${selectedLog.rawArgs?.length} arguments`,
1036
- },
1037
- ]
1038
- : []),
1039
- ].map((row, rIdx, arr) => (<View key={rIdx} style={{
1040
- flexDirection: 'row',
1041
- justifyContent: 'space-between',
1042
- alignItems: 'center',
1043
- paddingVertical: 8,
1044
- borderBottomWidth: rIdx < arr.length - 1 ? 1 : 0,
1045
- borderBottomColor: AppColors.grayBorderSecondary,
1046
- }}>
1047
- <Text style={{
1048
- fontFamily: AppFonts.interMedium,
1049
- fontSize: 11.5,
1050
- color: AppColors.grayTextWeak,
1051
- }}>
1052
- {row.label}
1053
- </Text>
1054
- <Text selectable style={{
1055
- fontFamily: AppFonts.interBold,
1056
- fontSize: 11.5,
1057
- color: AppColors.primaryBlack,
1058
- maxWidth: '60%',
1059
- textAlign: 'right',
1060
- }} numberOfLines={2}>
1061
- {row.value}
1062
- </Text>
1063
- </View>))}
1064
- </View>
1065
- </View>)}
1066
- </ScrollView>
1067
- </View>);
1068
- });
1069
- const detailStyles = StyleSheet.create({
1070
- metaDot: {
1071
- fontSize: 10,
1072
- color: AppColors.grayTextWeak,
1073
- opacity: 0.7,
1074
- },
1075
- tabsHeaderWrap: {
1076
- paddingHorizontal: 12,
1077
- paddingTop: 8,
1078
- paddingBottom: 4,
1079
- },
1080
- });
1081
- export default LogDetail;
281
+ <C style={{paddingHorizontal:12,paddingVertical:4}}>
282
+ {[{label:"Log ID",value:`#${r.id+1}`},{label:"Level",value:r.type.toUpperCase()},{label:"Source Method",value:`console.${r.sourceMethod||r.type||"log"}`},{label:"Triggered At",value:`${ee(r.timestamp)} (${Be(r.timestamp)})`},{label:"Timestamp (ms)",value:String(r.timestamp)},{label:"Trigger File",value:V?.fileName||"Unknown"},...V?.lineNumber?[{label:"Trigger Location",value:`Line ${V.lineNumber}, Col ${V.columnNumber||0}`}]:[],...V?.functionName&&V.functionName!=="<anonymous>"?[{label:"Trigger Function",value:`${V.functionName}()`}]:[],{label:"Full Location",value:r.caller||"Unknown"},{label:"Character Length",value:`${r.message.length} chars`},{label:"Approx. Size",value:_(r.message)},{label:"Duplicate Count",value:String(r.duplicateCount||1)},...le?[{label:"Arguments Count",value:`${r.rawArgs?.length} arguments`}]:[]].map((t,v,I)=><C key={v}style={{flexDirection:"row",justifyContent:"space-between",alignItems:"center",paddingVertical:8,borderBottomWidth:v<I.length-1?1:0,borderBottomColor:e.grayBorderSecondary}}>
283
+ <T style={{fontFamily:B.interMedium,fontSize:11.5,color:e.grayTextWeak}}>
284
+ {t.label}
285
+ </T>
286
+ <T selectable style={{fontFamily:B.interBold,fontSize:11.5,color:e.primaryBlack,maxWidth:"60%",textAlign:"right"}}numberOfLines={2}>
287
+ {t.value}
288
+ </T>
289
+ </C>)}
290
+ </C>
291
+ </C>}
292
+ </Ne>
293
+ </C>}),te=Re.create({metaDot:{fontSize:10,color:e.grayTextWeak,opacity:.7},tabsHeaderWrap:{paddingHorizontal:12,paddingTop:8,paddingBottom:4}});export default Ze;