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,794 +1,283 @@
1
- import React, { useMemo, useState } from 'react';
2
- import { Platform, ScrollView, StyleSheet, Text, TextInput, View, } from 'react-native';
3
- import { useTranslation } from '../../i18n';
4
- import { useInspector } from './InspectorContext';
5
- import TouchableScale from '../TouchableScale';
6
- import SegmentedTabs from '../SegmentedTabs';
7
- import HighlightText from '../HighlightText';
8
- import JsonViewer from '../JsonViewer';
9
- import CopyButton from '../CopyButton';
10
- import { AppColors } from '../../styles/AppColors';
11
- import { AppFonts } from '../../styles/AppFonts';
12
- import { exportCrashReport, parseCrashStackTrace, } from '../../customHooks/crashHandler';
13
- import { copyToClipboard } from '../../helpers';
14
- import { SearchIcon, ClearIcon, CopyIcon, TerminalIcon, LayersIcon, ClockIcon, CircleCheckIcon, GlobeIcon, AppleIcon, AndroidIcon, StackTraceIcon, DiagnosticsIcon, TrailIcon, RawJsonIcon, AppFramesIcon, AllFramesIcon, } from '../NetworkIcons';
15
- const CrashDetail = React.memo(() => {
16
- const { t } = useTranslation();
17
- const { selectedCrash } = useInspector();
18
- const [activeSubTab, setActiveSubTab] = useState('stack');
19
- const [searchQuery, setSearchQuery] = useState('');
20
- const [stackFilter, setStackFilter] = useState('app');
21
- const [copiedSuccess, setCopiedSuccess] = useState(false);
22
- const [copiedFrameIndex, setCopiedFrameIndex] = useState(null);
23
- if (!selectedCrash)
24
- return null;
25
- const stackFrames = useMemo(() => {
26
- if (selectedCrash.parsedStack && selectedCrash.parsedStack.length > 0) {
27
- return selectedCrash.parsedStack;
28
- }
29
- if (selectedCrash.stack) {
30
- return parseCrashStackTrace(selectedCrash.stack);
31
- }
32
- return [];
33
- }, [selectedCrash]);
34
- const rawCrashData = useMemo(() => {
35
- try {
36
- return JSON.parse(JSON.stringify(selectedCrash));
37
- }
38
- catch {
39
- return selectedCrash;
40
- }
41
- }, [selectedCrash]);
42
- const appStackFrames = useMemo(() => {
43
- return stackFrames.filter(f => f.isAppCode);
44
- }, [stackFrames]);
45
- const displayedFrames = useMemo(() => {
46
- if (stackFilter === 'app' && appStackFrames.length > 0) {
47
- return appStackFrames;
48
- }
49
- return stackFrames;
50
- }, [stackFilter, appStackFrames, stackFrames]);
51
- const originFrame = useMemo(() => {
52
- return appStackFrames[0] || stackFrames[0] || null;
53
- }, [appStackFrames, stackFrames]);
54
- const handleCopyReport = () => {
55
- const report = exportCrashReport(selectedCrash);
56
- copyToClipboard(report, 'Crash Report');
57
- setCopiedSuccess(true);
58
- setTimeout(() => setCopiedSuccess(false), 2000);
59
- };
60
- const handleCopyFrame = (frame, index) => {
61
- const text = frame.raw || `${frame.method}@${frame.file}:${frame.lineNumber}:${frame.column}`;
62
- copyToClipboard(text, 'Stack Frame');
63
- setCopiedFrameIndex(index);
64
- setTimeout(() => setCopiedFrameIndex(null), 1500);
65
- };
66
- const tabsConfig = [
67
- {
68
- key: 'stack',
69
- label: t('crash.tabStack', { count: stackFrames.length }),
70
- icon: (isActive) => (<StackTraceIcon size={12} color={isActive ? AppColors.white : AppColors.grayText}/>),
71
- },
72
- {
73
- key: 'diagnostics',
74
- label: t('crash.tabDiagnostics'),
75
- icon: (isActive) => (<DiagnosticsIcon size={12} color={isActive ? AppColors.white : AppColors.grayText}/>),
76
- },
77
- {
78
- key: 'breadcrumbs',
79
- label: t('crash.tabTrail', { count: selectedCrash.breadcrumbs?.length || 0 }),
80
- icon: (isActive) => (<TrailIcon size={12} color={isActive ? AppColors.white : AppColors.grayText}/>),
81
- },
82
- {
83
- key: 'raw',
84
- label: t('crash.tabRawJson'),
85
- icon: (isActive) => (<RawJsonIcon size={12} color={isActive ? AppColors.white : AppColors.grayText}/>),
86
- },
87
- ];
88
- return (<View style={{ flex: 1, backgroundColor: AppColors.grayBackground }}>
1
+ import ae,{useMemo as L,useState as D}from"react";import{Platform as W,ScrollView as U,StyleSheet as ie,Text as S,TextInput as Ce,View as C}from"react-native";import{useTranslation as Te}from"../../i18n";import{useInspector as xe}from"./InspectorContext";import H from"../TouchableScale";import Se from"../SegmentedTabs";import Q from"../HighlightText";import _ from"../JsonViewer";import $ from"../CopyButton";import{AppColors as e}from"../../styles/AppColors";import{AppFonts as B}from"../../styles/AppFonts";import{exportCrashReport as Ve,parseCrashStackTrace as Be}from"../../customHooks/crashHandler";import{copyToClipboard as q}from"../../helpers";import{SearchIcon as Ie,ClearIcon as Fe,CopyIcon as K,TerminalIcon as Re,LayersIcon as X,ClockIcon as Le,CircleCheckIcon as Y,GlobeIcon as De,AppleIcon as He,AndroidIcon as Ae,StackTraceIcon as We,DiagnosticsIcon as $e,TrailIcon as Oe,RawJsonIcon as Me,AppFramesIcon as Ee,AllFramesIcon as Ge}from"../NetworkIcons";const je=ae.memo(()=>{const{t:V}=Te(),{selectedCrash:T}=xe(),[F,Z]=D("stack"),[R,E]=D(""),[I,G]=D("app"),[A,j]=D(!1),[J,N]=D(null);if(!T)return null;const z=L(()=>T.parsedStack&&T.parsedStack.length>0?T.parsedStack:T.stack?Be(T.stack):[],[T]),ee=L(()=>{try{return JSON.parse(JSON.stringify(T))}catch{return T}},[T]),v=L(()=>z.filter(x=>x.isAppCode),[z]),P=L(()=>I==="app"&&v.length>0?v:z,[I,v,z]),O=L(()=>v[0]||z[0]||null,[v,z]),re=()=>{const x=Ve(T);q(x,"Crash Report"),j(!0),setTimeout(()=>j(!1),2e3)},te=(x,k)=>{const M=x.raw||`${x.method}@${x.file}:${x.lineNumber}:${x.column}`;q(M,"Stack Frame"),N(k),setTimeout(()=>N(null),1500)},oe=[{key:"stack",label:V("crash.tabStack",{count:z.length}),icon:x=><We size={12}color={x?e.white:e.grayText}/>},{key:"diagnostics",label:V("crash.tabDiagnostics"),icon:x=><$e size={12}color={x?e.white:e.grayText}/>},{key:"breadcrumbs",label:V("crash.tabTrail",{count:T.breadcrumbs?.length||0}),icon:x=><Oe size={12}color={x?e.white:e.grayText}/>},{key:"raw",label:V("crash.tabRawJson"),icon:x=><Me size={12}color={x?e.white:e.grayText}/>}];return<C style={{flex:1,backgroundColor:e.grayBackground}}>
89
2
 
90
- <View style={{ paddingHorizontal: 8, paddingTop: 6 }}>
91
- <View style={localStyles.infoBar}>
3
+ <C style={{paddingHorizontal:8,paddingTop:6}}>
4
+ <C style={r.infoBar}>
92
5
 
93
- <View style={localStyles.badgeRow}>
6
+ <C style={r.badgeRow}>
94
7
 
95
- <View style={[
96
- localStyles.pillBadge,
97
- {
98
- backgroundColor: selectedCrash.isFatal
99
- ? AppColors.errorCardBg
100
- : AppColors.amberBg,
101
- borderColor: selectedCrash.isFatal
102
- ? AppColors.errorBorder
103
- : AppColors.amberWarmBorder,
104
- },
105
- ]}>
106
- <View style={[
107
- localStyles.statusDot,
108
- {
109
- backgroundColor: selectedCrash.isFatal
110
- ? AppColors.red600
111
- : AppColors.amber600,
112
- },
113
- ]}/>
114
- <Text style={[
115
- localStyles.pillBadgeText,
116
- {
117
- color: selectedCrash.isFatal
118
- ? AppColors.redErrorText
119
- : AppColors.amberWarmText,
120
- },
121
- ]}>
122
- {selectedCrash.isFatal ? t('crash.fatalCrash') : t('crash.handledException')}
123
- </Text>
124
- </View>
8
+ <C style={[r.pillBadge,{backgroundColor:T.isFatal?e.errorCardBg:e.amberBg,borderColor:T.isFatal?e.errorBorder:e.amberWarmBorder}]}>
9
+ <C style={[r.statusDot,{backgroundColor:T.isFatal?e.red600:e.amber600}]}/>
10
+ <S style={[r.pillBadgeText,{color:T.isFatal?e.redErrorText:e.amberWarmText}]}>
11
+ {T.isFatal?V("crash.fatalCrash"):V("crash.handledException")}
12
+ </S>
13
+ </C>
125
14
 
126
15
 
127
- <View style={[
128
- localStyles.pillBadge,
129
- {
130
- backgroundColor: AppColors.violetSoftBg,
131
- borderColor: AppColors.violetSoftBorder,
132
- },
133
- ]}>
134
- <Text style={[localStyles.pillBadgeText, { color: AppColors.purple700 }]}>
135
- {selectedCrash.type.toUpperCase()}
136
- </Text>
137
- </View>
16
+ <C style={[r.pillBadge,{backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder}]}>
17
+ <S style={[r.pillBadgeText,{color:e.purple700}]}>
18
+ {T.type.toUpperCase()}
19
+ </S>
20
+ </C>
138
21
 
139
- <View style={{ flex: 1 }}/>
22
+ <C style={{flex:1}}/>
140
23
 
141
24
 
142
- <TouchableScale onPress={handleCopyReport} hitSlop={10} style={[
143
- localStyles.actionButton,
144
- copiedSuccess && { backgroundColor: AppColors.mintGreenBg, borderColor: AppColors.mintGreenBorder },
145
- ]}>
146
- {copiedSuccess ? (<CircleCheckIcon color={AppColors.mintGreenText} size={12}/>) : (<CopyIcon color={AppColors.purple} size={12}/>)}
147
- <Text style={[
148
- localStyles.actionButtonText,
149
- copiedSuccess && { color: AppColors.mintGreenText },
150
- ]}>
151
- {copiedSuccess ? t('crash.copied') : t('crash.copyReport')}
152
- </Text>
153
- </TouchableScale>
154
- </View>
25
+ <H onPress={re}hitSlop={10}style={[r.actionButton,A&&{backgroundColor:e.mintGreenBg,borderColor:e.mintGreenBorder}]}>
26
+ {A?<Y color={e.mintGreenText}size={12}/>:<K color={e.purple}size={12}/>}
27
+ <S style={[r.actionButtonText,A&&{color:e.mintGreenText}]}>
28
+ {V(A?"crash.copied":"crash.copyReport")}
29
+ </S>
30
+ </H>
31
+ </C>
155
32
 
156
33
 
157
- <Text style={localStyles.titleText}>
158
- {selectedCrash.message}
159
- </Text>
34
+ <S style={r.titleText}>
35
+ {T.message}
36
+ </S>
160
37
 
161
38
 
162
- <ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={localStyles.metaRow}>
163
- {originFrame && (<View style={localStyles.metaChip}>
164
- <TerminalIcon color={AppColors.grayText} size={11}/>
165
- <Text style={localStyles.metaChipText} numberOfLines={2}>
166
- {originFrame.file}:{originFrame.lineNumber}
167
- </Text>
168
- </View>)}
39
+ <U horizontal showsHorizontalScrollIndicator={!1}contentContainerStyle={r.metaRow}>
40
+ {O&&<C style={r.metaChip}>
41
+ <Re color={e.grayText}size={11}/>
42
+ <S style={r.metaChipText}numberOfLines={2}>
43
+ {O.file}:{O.lineNumber}
44
+ </S>
45
+ </C>}
169
46
 
170
- <View style={localStyles.metaChip}>
171
- <ClockIcon color={AppColors.grayText} size={11}/>
172
- <Text style={localStyles.metaChipText}>
173
- {selectedCrash.timeStr || new Date(selectedCrash.timestamp).toLocaleTimeString()}
174
- </Text>
175
- </View>
47
+ <C style={r.metaChip}>
48
+ <Le color={e.grayText}size={11}/>
49
+ <S style={r.metaChipText}>
50
+ {T.timeStr||new Date(T.timestamp).toLocaleTimeString()}
51
+ </S>
52
+ </C>
176
53
 
177
- {selectedCrash.deviceInfo?.platform && (<View style={localStyles.metaChip}>
178
- {selectedCrash.deviceInfo.platform === 'ios' ? (<AppleIcon color={AppColors.grayText} size={11}/>) : (<AndroidIcon color={AppColors.grayText} size={11}/>)}
179
- <Text style={localStyles.metaChipText}>
180
- {selectedCrash.deviceInfo.platform.toUpperCase()} {selectedCrash.deviceInfo.osVersion}
181
- </Text>
182
- </View>)}
183
- </ScrollView>
184
- </View>
185
- </View>
54
+ {T.deviceInfo?.platform&&<C style={r.metaChip}>
55
+ {T.deviceInfo.platform==="ios"?<He color={e.grayText}size={11}/>:<Ae color={e.grayText}size={11}/>}
56
+ <S style={r.metaChipText}>
57
+ {T.deviceInfo.platform.toUpperCase()} {T.deviceInfo.osVersion}
58
+ </S>
59
+ </C>}
60
+ </U>
61
+ </C>
62
+ </C>
186
63
 
187
64
 
188
- <View style={{ paddingHorizontal: 8, paddingTop: 6, paddingBottom: 4 }}>
189
- <SegmentedTabs tabs={tabsConfig} activeKey={activeSubTab} onChange={tab => setActiveSubTab(tab)}/>
190
- </View>
65
+ <C style={{paddingHorizontal:8,paddingTop:6,paddingBottom:4}}>
66
+ <Se tabs={oe}activeKey={F}onChange={x=>Z(x)}/>
67
+ </C>
191
68
 
192
69
 
193
- {(activeSubTab === 'stack' || activeSubTab === 'raw') && (<View style={{ paddingHorizontal: 12, paddingBottom: 6 }}>
194
- <View style={localStyles.searchContainer}>
195
- <SearchIcon color={AppColors.grayText} size={14}/>
196
- <TextInput style={localStyles.searchInput} placeholder={t('crash.searchDetailPlaceholder')} placeholderTextColor={AppColors.grayTextWeak} value={searchQuery} onChangeText={setSearchQuery} autoCapitalize="none" autoCorrect={false}/>
197
- {searchQuery.length > 0 && (<TouchableScale onPress={() => setSearchQuery('')} hitSlop={10}>
198
- <ClearIcon color={AppColors.grayText} size={13}/>
199
- </TouchableScale>)}
200
- </View>
201
- </View>)}
70
+ {(F==="stack"||F==="raw")&&<C style={{paddingHorizontal:12,paddingBottom:6}}>
71
+ <C style={r.searchContainer}>
72
+ <Ie color={e.grayText}size={14}/>
73
+ <Ce style={r.searchInput}placeholder={V("crash.searchDetailPlaceholder")}placeholderTextColor={e.grayTextWeak}value={R}onChangeText={E}autoCapitalize="none"autoCorrect={!1}/>
74
+ {R.length>0&&<H onPress={()=>E("")}hitSlop={10}>
75
+ <Fe color={e.grayText}size={13}/>
76
+ </H>}
77
+ </C>
78
+ </C>}
202
79
 
203
80
 
204
- <ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 12, paddingBottom: 40, gap: 12 }}>
81
+ <U style={{flex:1}}contentContainerStyle={{padding:12,paddingBottom:40,gap:12}}>
205
82
 
206
- {activeSubTab === 'stack' && (<View style={{ gap: 10 }}>
83
+ {F==="stack"&&<C style={{gap:10}}>
207
84
 
208
- <View style={localStyles.filterChipsRow}>
209
- <TouchableScale onPress={() => setStackFilter('app')} style={[
210
- localStyles.filterChip,
211
- stackFilter === 'app' && localStyles.filterChipActive,
212
- ]}>
213
- <AppFramesIcon size={12} color={stackFilter === 'app'
214
- ? AppColors.white
215
- : AppColors.purple}/>
216
- <Text style={[
217
- localStyles.filterChipText,
218
- stackFilter === 'app' && localStyles.filterChipTextActive,
219
- ]}>
220
- {t('crash.appFrames', { count: appStackFrames.length })}
221
- </Text>
222
- </TouchableScale>
85
+ <C style={r.filterChipsRow}>
86
+ <H onPress={()=>G("app")}style={[r.filterChip,I==="app"&&r.filterChipActive]}>
87
+ <Ee size={12}color={I==="app"?e.white:e.purple}/>
88
+ <S style={[r.filterChipText,I==="app"&&r.filterChipTextActive]}>
89
+ {V("crash.appFrames",{count:v.length})}
90
+ </S>
91
+ </H>
223
92
 
224
- <TouchableScale onPress={() => setStackFilter('all')} style={[
225
- localStyles.filterChip,
226
- stackFilter === 'all' && localStyles.filterChipActive,
227
- ]}>
228
- <AllFramesIcon size={12} color={stackFilter === 'all'
229
- ? AppColors.white
230
- : AppColors.purple}/>
231
- <Text style={[
232
- localStyles.filterChipText,
233
- stackFilter === 'all' && localStyles.filterChipTextActive,
234
- ]}>
235
- {t('crash.allFrames', { count: stackFrames.length })}
236
- </Text>
237
- </TouchableScale>
238
- </View>
93
+ <H onPress={()=>G("all")}style={[r.filterChip,I==="all"&&r.filterChipActive]}>
94
+ <Ge size={12}color={I==="all"?e.white:e.purple}/>
95
+ <S style={[r.filterChipText,I==="all"&&r.filterChipTextActive]}>
96
+ {V("crash.allFrames",{count:z.length})}
97
+ </S>
98
+ </H>
99
+ </C>
239
100
 
240
101
 
241
- {displayedFrames.length > 0 ? (displayedFrames
242
- .filter(frame => {
243
- if (!searchQuery.trim())
244
- return true;
245
- const q = searchQuery.toLowerCase();
246
- return (frame.method.toLowerCase().includes(q) ||
247
- frame.file.toLowerCase().includes(q));
248
- })
249
- .map((frame, index) => {
250
- const isOrigin = index === 0 && frame.isAppCode;
251
- return (<View key={`frame_${index}`} style={[
252
- localStyles.frameCard,
253
- isOrigin && localStyles.originFrameCard,
254
- ]}>
255
- <View style={localStyles.frameCardHeader}>
256
- <View style={localStyles.frameIndexBadge}>
257
- <Text style={localStyles.frameIndexBadgeText}>
258
- #{index + 1}
259
- </Text>
260
- </View>
261
- <View style={[
262
- localStyles.frameTypeBadge,
263
- frame.isAppCode
264
- ? { backgroundColor: '#ECFDF5', borderColor: '#A7F3D0' }
265
- : { backgroundColor: '#F1F5F9', borderColor: '#E2E8F0' },
266
- ]}>
267
- <Text style={[
268
- localStyles.frameTypeBadgeText,
269
- frame.isAppCode
270
- ? { color: '#059669' }
271
- : { color: '#64748B' },
272
- ]}>
273
- {frame.isAppCode ? t('crash.frameApp') : t('crash.frameLib')}
274
- </Text>
275
- </View>
102
+ {P.length>0?P.filter(x=>{if(!R.trim())return!0;const k=R.toLowerCase();return x.method.toLowerCase().includes(k)||x.file.toLowerCase().includes(k)}).map((x,k)=>{const M=k===0&&x.isAppCode;return<C key={`frame_${k}`}style={[r.frameCard,M&&r.originFrameCard]}>
103
+ <C style={r.frameCardHeader}>
104
+ <C style={r.frameIndexBadge}>
105
+ <S style={r.frameIndexBadgeText}>
106
+ #{k+1}
107
+ </S>
108
+ </C>
109
+ <C style={[r.frameTypeBadge,x.isAppCode?{backgroundColor:"#ECFDF5",borderColor:"#A7F3D0"}:{backgroundColor:"#F1F5F9",borderColor:"#E2E8F0"}]}>
110
+ <S style={[r.frameTypeBadgeText,x.isAppCode?{color:"#059669"}:{color:"#64748B"}]}>
111
+ {x.isAppCode?V("crash.frameApp"):V("crash.frameLib")}
112
+ </S>
113
+ </C>
276
114
 
277
- <Text style={localStyles.frameMethodText} numberOfLines={1}>
278
- <HighlightText text={frame.method || t('crash.anonymous')} highlight={searchQuery}/>
279
- </Text>
115
+ <S style={r.frameMethodText}numberOfLines={1}>
116
+ <Q text={x.method||V("crash.anonymous")}highlight={R}/>
117
+ </S>
280
118
 
281
- <TouchableScale onPress={() => handleCopyFrame(frame, index)} hitSlop={8} style={localStyles.frameCopyBtn}>
282
- {copiedFrameIndex === index ? (<CircleCheckIcon color={AppColors.greenColor} size={12}/>) : (<CopyIcon color={AppColors.grayText} size={12}/>)}
283
- <Text style={localStyles.frameCopyBtnText}>
284
- {copiedFrameIndex === index
285
- ? t('crash.frameCopied')
286
- : t('crash.frameCopy')}
287
- </Text>
288
- </TouchableScale>
289
- </View>
119
+ <H onPress={()=>te(x,k)}hitSlop={8}style={r.frameCopyBtn}>
120
+ {J===k?<Y color={e.greenColor}size={12}/>:<K color={e.grayText}size={12}/>}
121
+ <S style={r.frameCopyBtnText}>
122
+ {V(J===k?"crash.frameCopied":"crash.frameCopy")}
123
+ </S>
124
+ </H>
125
+ </C>
290
126
 
291
- <View style={localStyles.frameLocationRow}>
292
- <Text style={localStyles.frameFileText} numberOfLines={1}>
293
- <HighlightText text={frame.file} highlight={searchQuery}/>
294
- </Text>
295
- <Text style={localStyles.frameLineText}>
296
- :{frame.lineNumber}
297
- {frame.column ? `:${frame.column}` : ''}
298
- </Text>
299
- </View>
127
+ <C style={r.frameLocationRow}>
128
+ <S style={r.frameFileText}numberOfLines={1}>
129
+ <Q text={x.file}highlight={R}/>
130
+ </S>
131
+ <S style={r.frameLineText}>
132
+ :{x.lineNumber}
133
+ {x.column?`:${x.column}`:""}
134
+ </S>
135
+ </C>
300
136
 
301
- {frame.raw && (<Text style={localStyles.frameRawText} numberOfLines={2}>
302
- {frame.raw}
303
- </Text>)}
304
- </View>);
305
- })) : (<View style={localStyles.emptyContainer}>
306
- <Text style={localStyles.emptyText}>
307
- {selectedCrash.stack
308
- ? selectedCrash.stack
309
- : t('crash.noStackTrace')}
310
- </Text>
311
- </View>)}
137
+ {x.raw&&<S style={r.frameRawText}numberOfLines={2}>
138
+ {x.raw}
139
+ </S>}
140
+ </C>}):<C style={r.emptyContainer}>
141
+ <S style={r.emptyText}>
142
+ {T.stack?T.stack:V("crash.noStackTrace")}
143
+ </S>
144
+ </C>}
312
145
 
313
- {selectedCrash.componentStack && (<View style={localStyles.sectionCard}>
314
- <View style={localStyles.sectionCardHeader}>
315
- <LayersIcon color={AppColors.purple} size={14}/>
316
- <Text style={localStyles.sectionCardTitle}>
317
- {t('crash.componentHierarchy')}
318
- </Text>
319
- </View>
320
- <Text style={localStyles.componentStackText}>
321
- {selectedCrash.componentStack}
322
- </Text>
323
- </View>)}
324
- </View>)}
146
+ {T.componentStack&&<C style={r.sectionCard}>
147
+ <C style={r.sectionCardHeader}>
148
+ <X color={e.purple}size={14}/>
149
+ <S style={r.sectionCardTitle}>
150
+ {V("crash.componentHierarchy")}
151
+ </S>
152
+ </C>
153
+ <S style={r.componentStackText}>
154
+ {T.componentStack}
155
+ </S>
156
+ </C>}
157
+ </C>}
325
158
 
326
159
 
327
- {activeSubTab === 'diagnostics' && (<View style={{ gap: 12 }}>
160
+ {F==="diagnostics"&&<C style={{gap:12}}>
328
161
 
329
- <View style={localStyles.sectionCard}>
330
- <View style={[
331
- localStyles.sectionCardHeader,
332
- { justifyContent: 'space-between' },
333
- ]}>
334
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
335
- <GlobeIcon color={AppColors.purple} size={14}/>
336
- <Text style={localStyles.sectionCardTitle}>
337
- {t('crash.deviceEnvironment')}
338
- </Text>
339
- </View>
340
- <CopyButton value={selectedCrash.deviceInfo || {
341
- platform: Platform.OS,
342
- osVersion: String(Platform.Version),
343
- }} label="Diagnostics"/>
344
- </View>
162
+ <C style={r.sectionCard}>
163
+ <C style={[r.sectionCardHeader,{justifyContent:"space-between"}]}>
164
+ <C style={{flexDirection:"row",alignItems:"center",gap:6}}>
165
+ <De color={e.purple}size={14}/>
166
+ <S style={r.sectionCardTitle}>
167
+ {V("crash.deviceEnvironment")}
168
+ </S>
169
+ </C>
170
+ <$ value={T.deviceInfo||{platform:W.OS,osVersion:String(W.Version)}}label="Diagnostics"/>
171
+ </C>
345
172
 
346
- <View style={localStyles.diagGrid}>
347
- <View style={localStyles.diagItem}>
348
- <Text style={localStyles.diagLabel}>{t('crash.platform')}</Text>
349
- <Text style={localStyles.diagValue}>
350
- {selectedCrash.deviceInfo?.platform?.toUpperCase() || Platform.OS.toUpperCase()}
351
- </Text>
352
- </View>
173
+ <C style={r.diagGrid}>
174
+ <C style={r.diagItem}>
175
+ <S style={r.diagLabel}>{V("crash.platform")}</S>
176
+ <S style={r.diagValue}>
177
+ {T.deviceInfo?.platform?.toUpperCase()||W.OS.toUpperCase()}
178
+ </S>
179
+ </C>
353
180
 
354
- <View style={localStyles.diagItem}>
355
- <Text style={localStyles.diagLabel}>{t('crash.osVersion')}</Text>
356
- <Text style={localStyles.diagValue}>
357
- {selectedCrash.deviceInfo?.osVersion || String(Platform.Version)}
358
- </Text>
359
- </View>
181
+ <C style={r.diagItem}>
182
+ <S style={r.diagLabel}>{V("crash.osVersion")}</S>
183
+ <S style={r.diagValue}>
184
+ {T.deviceInfo?.osVersion||String(W.Version)}
185
+ </S>
186
+ </C>
360
187
 
361
- <View style={localStyles.diagItem}>
362
- <Text style={localStyles.diagLabel}>{t('crash.reactNative')}</Text>
363
- <Text style={localStyles.diagValue}>
364
- {selectedCrash.deviceInfo?.rnVersion || '0.74+'}
365
- </Text>
366
- </View>
188
+ <C style={r.diagItem}>
189
+ <S style={r.diagLabel}>{V("crash.reactNative")}</S>
190
+ <S style={r.diagValue}>
191
+ {T.deviceInfo?.rnVersion||"0.74+"}
192
+ </S>
193
+ </C>
367
194
 
368
- <View style={localStyles.diagItem}>
369
- <Text style={localStyles.diagLabel}>{t('crash.jsEngine')}</Text>
370
- <Text style={localStyles.diagValue}>
371
- {selectedCrash.deviceInfo?.isHermes ? t('crash.hermesEngine') : t('crash.jsc')}
372
- </Text>
373
- </View>
195
+ <C style={r.diagItem}>
196
+ <S style={r.diagLabel}>{V("crash.jsEngine")}</S>
197
+ <S style={r.diagValue}>
198
+ {T.deviceInfo?.isHermes?V("crash.hermesEngine"):V("crash.jsc")}
199
+ </S>
200
+ </C>
374
201
 
375
- <View style={localStyles.diagItem}>
376
- <Text style={localStyles.diagLabel}>{t('crash.architecture')}</Text>
377
- <Text style={localStyles.diagValue}>
378
- {selectedCrash.deviceInfo?.isFabric ? t('crash.fabricNewArch') : t('crash.paperLegacy')}
379
- </Text>
380
- </View>
202
+ <C style={r.diagItem}>
203
+ <S style={r.diagLabel}>{V("crash.architecture")}</S>
204
+ <S style={r.diagValue}>
205
+ {T.deviceInfo?.isFabric?V("crash.fabricNewArch"):V("crash.paperLegacy")}
206
+ </S>
207
+ </C>
381
208
 
382
- <View style={localStyles.diagItem}>
383
- <Text style={localStyles.diagLabel}>{t('crash.appState')}</Text>
384
- <Text style={localStyles.diagValue}>
385
- {selectedCrash.deviceInfo?.appState || 'active'}
386
- </Text>
387
- </View>
388
- </View>
389
- </View>
209
+ <C style={r.diagItem}>
210
+ <S style={r.diagLabel}>{V("crash.appState")}</S>
211
+ <S style={r.diagValue}>
212
+ {T.deviceInfo?.appState||"active"}
213
+ </S>
214
+ </C>
215
+ </C>
216
+ </C>
390
217
 
391
218
 
392
- {selectedCrash.memoryInfo && (<View style={localStyles.sectionCard}>
393
- <View style={[
394
- localStyles.sectionCardHeader,
395
- { justifyContent: 'space-between' },
396
- ]}>
397
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
398
- <LayersIcon color={AppColors.purple} size={14}/>
399
- <Text style={localStyles.sectionCardTitle}>
400
- {t('crash.jsHeapMemory')}
401
- </Text>
402
- </View>
403
- <CopyButton value={selectedCrash.memoryInfo} label="Memory Info"/>
404
- </View>
219
+ {T.memoryInfo&&<C style={r.sectionCard}>
220
+ <C style={[r.sectionCardHeader,{justifyContent:"space-between"}]}>
221
+ <C style={{flexDirection:"row",alignItems:"center",gap:6}}>
222
+ <X color={e.purple}size={14}/>
223
+ <S style={r.sectionCardTitle}>
224
+ {V("crash.jsHeapMemory")}
225
+ </S>
226
+ </C>
227
+ <$ value={T.memoryInfo}label="Memory Info"/>
228
+ </C>
405
229
 
406
- <View style={localStyles.diagGrid}>
407
- <View style={localStyles.diagItem}>
408
- <Text style={localStyles.diagLabel}>{t('crash.usedHeap')}</Text>
409
- <Text style={localStyles.diagValue}>
410
- {selectedCrash.memoryInfo.usedJSHeapSize} MB
411
- </Text>
412
- </View>
230
+ <C style={r.diagGrid}>
231
+ <C style={r.diagItem}>
232
+ <S style={r.diagLabel}>{V("crash.usedHeap")}</S>
233
+ <S style={r.diagValue}>
234
+ {T.memoryInfo.usedJSHeapSize} MB
235
+ </S>
236
+ </C>
413
237
 
414
- <View style={localStyles.diagItem}>
415
- <Text style={localStyles.diagLabel}>{t('crash.totalHeap')}</Text>
416
- <Text style={localStyles.diagValue}>
417
- {selectedCrash.memoryInfo.totalJSHeapSize} MB
418
- </Text>
419
- </View>
420
- </View>
421
- </View>)}
422
- </View>)}
238
+ <C style={r.diagItem}>
239
+ <S style={r.diagLabel}>{V("crash.totalHeap")}</S>
240
+ <S style={r.diagValue}>
241
+ {T.memoryInfo.totalJSHeapSize} MB
242
+ </S>
243
+ </C>
244
+ </C>
245
+ </C>}
246
+ </C>}
423
247
 
424
248
 
425
- {activeSubTab === 'breadcrumbs' && (<View style={{ gap: 10 }}>
426
- {selectedCrash.breadcrumbs && selectedCrash.breadcrumbs.length > 0 && (<View style={{
427
- flexDirection: 'row',
428
- justifyContent: 'flex-end',
429
- marginBottom: 2,
430
- }}>
431
- <CopyButton value={selectedCrash.breadcrumbs} label="All Breadcrumbs"/>
432
- </View>)}
433
- {selectedCrash.breadcrumbs && selectedCrash.breadcrumbs.length > 0 ? (selectedCrash.breadcrumbs.map((b, idx) => (<View key={`crumb_${idx}`} style={localStyles.breadcrumbCard}>
434
- <View style={localStyles.breadcrumbHeader}>
435
- <View style={localStyles.breadcrumbTag}>
436
- <Text style={localStyles.breadcrumbTagText}>
437
- {b.type.toUpperCase()}
438
- </Text>
439
- </View>
440
- <View style={{
441
- flexDirection: 'row',
442
- alignItems: 'center',
443
- gap: 8,
444
- }}>
445
- <Text style={localStyles.breadcrumbTime}>
446
- {new Date(b.timestamp).toLocaleTimeString()}
447
- </Text>
448
- <CopyButton value={`${new Date(b.timestamp).toLocaleTimeString()} [${b.type.toUpperCase()}] ${b.message}${b.data ? ' ' + JSON.stringify(b.data) : ''}`} label="Breadcrumb"/>
449
- </View>
450
- </View>
451
- <Text style={localStyles.breadcrumbMessage}>{b.message}</Text>
452
- {b.data && (<View style={{ marginTop: 6 }}>
453
- <JsonViewer data={b.data} search="" wrap/>
454
- </View>)}
455
- </View>))) : (<View style={localStyles.emptyContainer}>
456
- <Text style={localStyles.emptyText}>
457
- {t('crash.noBreadcrumbs')}
458
- </Text>
459
- </View>)}
460
- </View>)}
249
+ {F==="breadcrumbs"&&<C style={{gap:10}}>
250
+ {T.breadcrumbs&&T.breadcrumbs.length>0&&<C style={{flexDirection:"row",justifyContent:"flex-end",marginBottom:2}}>
251
+ <$ value={T.breadcrumbs}label="All Breadcrumbs"/>
252
+ </C>}
253
+ {T.breadcrumbs&&T.breadcrumbs.length>0?T.breadcrumbs.map((x,k)=><C key={`crumb_${k}`}style={r.breadcrumbCard}>
254
+ <C style={r.breadcrumbHeader}>
255
+ <C style={r.breadcrumbTag}>
256
+ <S style={r.breadcrumbTagText}>
257
+ {x.type.toUpperCase()}
258
+ </S>
259
+ </C>
260
+ <C style={{flexDirection:"row",alignItems:"center",gap:8}}>
261
+ <S style={r.breadcrumbTime}>
262
+ {new Date(x.timestamp).toLocaleTimeString()}
263
+ </S>
264
+ <$ value={`${new Date(x.timestamp).toLocaleTimeString()} [${x.type.toUpperCase()}] ${x.message}${x.data?" "+JSON.stringify(x.data):""}`}label="Breadcrumb"/>
265
+ </C>
266
+ </C>
267
+ <S style={r.breadcrumbMessage}>{x.message}</S>
268
+ {x.data&&<C style={{marginTop:6}}>
269
+ <_ data={x.data}search=""wrap/>
270
+ </C>}
271
+ </C>):<C style={r.emptyContainer}>
272
+ <S style={r.emptyText}>
273
+ {V("crash.noBreadcrumbs")}
274
+ </S>
275
+ </C>}
276
+ </C>}
461
277
 
462
278
 
463
- {activeSubTab === 'raw' && (<View style={localStyles.rawContainer}>
464
- <JsonViewer data={rawCrashData} search={searchQuery} wrap/>
465
- </View>)}
466
- </ScrollView>
467
- </View>);
468
- });
469
- export default CrashDetail;
470
- const localStyles = StyleSheet.create({
471
- infoBar: {
472
- backgroundColor: AppColors.primaryLight,
473
- borderRadius: 12,
474
- padding: 12,
475
- borderWidth: 1,
476
- borderColor: AppColors.grayBorderSecondary,
477
- shadowColor: AppColors.black,
478
- shadowOffset: { width: 0, height: 1 },
479
- shadowOpacity: 0.05,
480
- shadowRadius: 3,
481
- elevation: 2,
482
- gap: 8,
483
- },
484
- badgeRow: {
485
- flexDirection: 'row',
486
- alignItems: 'center',
487
- gap: 8,
488
- },
489
- pillBadge: {
490
- flexDirection: 'row',
491
- alignItems: 'center',
492
- paddingHorizontal: 8,
493
- paddingVertical: 3,
494
- borderRadius: 12,
495
- borderWidth: 1,
496
- gap: 5,
497
- },
498
- statusDot: {
499
- width: 6,
500
- height: 6,
501
- borderRadius: 3,
502
- },
503
- pillBadgeText: {
504
- fontFamily: AppFonts.interBold,
505
- fontSize: 9.5,
506
- letterSpacing: 0.4,
507
- },
508
- actionButton: {
509
- flexDirection: 'row',
510
- alignItems: 'center',
511
- gap: 4,
512
- backgroundColor: `${AppColors.purple}14`,
513
- borderColor: `${AppColors.purple}33`,
514
- borderWidth: 1,
515
- paddingHorizontal: 8,
516
- paddingVertical: 4,
517
- borderRadius: 8,
518
- },
519
- actionButtonText: {
520
- fontFamily: AppFonts.interBold,
521
- fontSize: 10.5,
522
- color: AppColors.purple,
523
- },
524
- titleText: {
525
- fontFamily: AppFonts.interBold,
526
- fontSize: 14,
527
- color: AppColors.primaryBlack,
528
- lineHeight: 19,
529
- },
530
- metaRow: {
531
- flexDirection: 'row',
532
- alignItems: 'center',
533
- gap: 6,
534
- paddingVertical: 2,
535
- },
536
- metaChip: {
537
- flexDirection: 'row',
538
- alignItems: 'center',
539
- gap: 4,
540
- backgroundColor: AppColors.grayBackground,
541
- paddingHorizontal: 7,
542
- paddingVertical: 3,
543
- borderRadius: 6,
544
- borderWidth: 1,
545
- borderColor: AppColors.dividerColor,
546
- },
547
- metaChipText: {
548
- fontFamily: AppFonts.interMedium,
549
- fontSize: 10,
550
- color: AppColors.grayText,
551
- },
552
- searchContainer: {
553
- flexDirection: 'row',
554
- alignItems: 'center',
555
- backgroundColor: AppColors.primaryLight,
556
- borderWidth: 1,
557
- borderColor: AppColors.grayBorderSecondary,
558
- borderRadius: 8,
559
- paddingHorizontal: 10,
560
- height: 36,
561
- gap: 8,
562
- },
563
- searchInput: {
564
- flex: 1,
565
- fontFamily: AppFonts.interRegular,
566
- fontSize: 12,
567
- color: AppColors.primaryBlack,
568
- paddingVertical: 0,
569
- },
570
- filterChipsRow: {
571
- flexDirection: 'row',
572
- alignItems: 'center',
573
- gap: 8,
574
- },
575
- filterChip: {
576
- flexDirection: 'row',
577
- alignItems: 'center',
578
- gap: 5,
579
- paddingHorizontal: 10,
580
- paddingVertical: 5,
581
- borderRadius: 8,
582
- backgroundColor: AppColors.primaryLight,
583
- borderWidth: 1,
584
- borderColor: AppColors.grayBorderSecondary,
585
- },
586
- filterChipActive: {
587
- backgroundColor: AppColors.purple,
588
- borderColor: AppColors.purple,
589
- },
590
- filterChipText: {
591
- fontFamily: AppFonts.interMedium,
592
- fontSize: 11,
593
- color: AppColors.grayText,
594
- },
595
- filterChipTextActive: {
596
- fontFamily: AppFonts.interBold,
597
- color: AppColors.white,
598
- },
599
- frameCard: {
600
- backgroundColor: AppColors.primaryLight,
601
- borderRadius: 8,
602
- padding: 10,
603
- borderWidth: 1,
604
- borderColor: AppColors.grayBorderSecondary,
605
- gap: 4,
606
- },
607
- originFrameCard: {
608
- borderColor: '#6EE7B7',
609
- backgroundColor: '#F0FDF4',
610
- },
611
- frameCardHeader: {
612
- flexDirection: 'row',
613
- alignItems: 'center',
614
- gap: 8,
615
- },
616
- frameIndexBadge: {
617
- minWidth: 24,
618
- height: 18,
619
- paddingHorizontal: 4,
620
- borderRadius: 4,
621
- backgroundColor: `${AppColors.purple}14`,
622
- alignItems: 'center',
623
- justifyContent: 'center',
624
- },
625
- frameIndexBadgeText: {
626
- fontFamily: AppFonts.interBold,
627
- fontSize: 9,
628
- color: AppColors.purple,
629
- },
630
- frameTypeBadge: {
631
- paddingHorizontal: 5,
632
- paddingVertical: 2,
633
- borderRadius: 4,
634
- borderWidth: 1,
635
- },
636
- frameTypeBadgeText: {
637
- fontFamily: AppFonts.interBold,
638
- fontSize: 8.5,
639
- },
640
- frameMethodText: {
641
- fontFamily: AppFonts.interBold,
642
- fontSize: 12,
643
- color: AppColors.primaryBlack,
644
- flex: 1,
645
- },
646
- frameLocationRow: {
647
- flexDirection: 'row',
648
- alignItems: 'center',
649
- },
650
- frameFileText: {
651
- fontFamily: AppFonts.interRegular,
652
- fontSize: 11,
653
- color: AppColors.grayText,
654
- flex: 1,
655
- },
656
- frameLineText: {
657
- fontFamily: AppFonts.interBold,
658
- fontSize: 11,
659
- color: AppColors.purple,
660
- },
661
- frameCopyBtn: {
662
- flexDirection: 'row',
663
- alignItems: 'center',
664
- gap: 3,
665
- paddingHorizontal: 6,
666
- paddingVertical: 3,
667
- borderRadius: 5,
668
- backgroundColor: AppColors.grayBackground,
669
- borderWidth: 1,
670
- borderColor: AppColors.dividerColor,
671
- },
672
- frameCopyBtnText: {
673
- fontFamily: AppFonts.interBold,
674
- fontSize: 9,
675
- color: AppColors.grayText,
676
- },
677
- frameRawText: {
678
- fontFamily: AppFonts.interRegular,
679
- fontSize: 9.5,
680
- color: AppColors.grayTextWeak,
681
- backgroundColor: `${AppColors.primaryBlack}06`,
682
- borderRadius: 5,
683
- paddingHorizontal: 7,
684
- paddingVertical: 4,
685
- overflow: 'hidden',
686
- },
687
- componentStackText: {
688
- fontFamily: AppFonts.interRegular,
689
- fontSize: 11,
690
- lineHeight: 16,
691
- color: AppColors.grayText,
692
- backgroundColor: `${AppColors.primaryBlack}06`,
693
- borderRadius: 6,
694
- padding: 10,
695
- },
696
- sectionCard: {
697
- backgroundColor: AppColors.primaryLight,
698
- borderRadius: 10,
699
- padding: 12,
700
- borderWidth: 1,
701
- borderColor: AppColors.grayBorderSecondary,
702
- gap: 10,
703
- },
704
- sectionCardHeader: {
705
- flexDirection: 'row',
706
- alignItems: 'center',
707
- gap: 6,
708
- paddingBottom: 6,
709
- borderBottomWidth: 1,
710
- borderBottomColor: AppColors.dividerColor,
711
- },
712
- sectionCardTitle: {
713
- fontFamily: AppFonts.interBold,
714
- fontSize: 12.5,
715
- color: AppColors.primaryBlack,
716
- },
717
- diagGrid: {
718
- flexDirection: 'row',
719
- flexWrap: 'wrap',
720
- rowGap: 8,
721
- columnGap: 12,
722
- },
723
- diagItem: {
724
- width: '47%',
725
- gap: 2,
726
- },
727
- diagLabel: {
728
- fontFamily: AppFonts.interRegular,
729
- fontSize: 10,
730
- color: AppColors.grayTextWeak,
731
- },
732
- diagValue: {
733
- fontFamily: AppFonts.interBold,
734
- fontSize: 11.5,
735
- color: AppColors.primaryBlack,
736
- },
737
- breadcrumbCard: {
738
- backgroundColor: AppColors.primaryLight,
739
- borderRadius: 8,
740
- padding: 10,
741
- borderWidth: 1,
742
- borderColor: AppColors.grayBorderSecondary,
743
- gap: 4,
744
- },
745
- breadcrumbHeader: {
746
- flexDirection: 'row',
747
- alignItems: 'center',
748
- justifyContent: 'space-between',
749
- },
750
- breadcrumbTag: {
751
- backgroundColor: `${AppColors.purple}14`,
752
- paddingHorizontal: 6,
753
- paddingVertical: 2,
754
- borderRadius: 4,
755
- },
756
- breadcrumbTagText: {
757
- fontFamily: AppFonts.interBold,
758
- fontSize: 9,
759
- color: AppColors.purple,
760
- },
761
- breadcrumbTime: {
762
- fontFamily: AppFonts.interRegular,
763
- fontSize: 10,
764
- color: AppColors.grayTextWeak,
765
- },
766
- breadcrumbMessage: {
767
- fontFamily: AppFonts.interRegular,
768
- fontSize: 11.5,
769
- color: AppColors.primaryBlack,
770
- marginTop: 2,
771
- },
772
- rawContainer: {
773
- backgroundColor: AppColors.primaryLight,
774
- borderRadius: 10,
775
- padding: 10,
776
- borderWidth: 1,
777
- borderColor: AppColors.grayBorderSecondary,
778
- },
779
- emptyContainer: {
780
- padding: 16,
781
- alignItems: 'center',
782
- justifyContent: 'center',
783
- backgroundColor: AppColors.primaryLight,
784
- borderRadius: 8,
785
- borderWidth: 1,
786
- borderColor: AppColors.grayBorderSecondary,
787
- },
788
- emptyText: {
789
- fontFamily: AppFonts.interRegular,
790
- fontSize: 11,
791
- color: AppColors.grayText,
792
- textAlign: 'center',
793
- },
794
- });
279
+ {F==="raw"&&<C style={r.rawContainer}>
280
+ <_ data={ee}search={R}wrap/>
281
+ </C>}
282
+ </U>
283
+ </C>});export default je;const r=ie.create({infoBar:{backgroundColor:e.primaryLight,borderRadius:12,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,shadowColor:e.black,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:2,gap:8},badgeRow:{flexDirection:"row",alignItems:"center",gap:8},pillBadge:{flexDirection:"row",alignItems:"center",paddingHorizontal:8,paddingVertical:3,borderRadius:12,borderWidth:1,gap:5},statusDot:{width:6,height:6,borderRadius:3},pillBadgeText:{fontFamily:B.interBold,fontSize:9.5,letterSpacing:.4},actionButton:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:`${e.purple}14`,borderColor:`${e.purple}33`,borderWidth:1,paddingHorizontal:8,paddingVertical:4,borderRadius:8},actionButtonText:{fontFamily:B.interBold,fontSize:10.5,color:e.purple},titleText:{fontFamily:B.interBold,fontSize:14,color:e.primaryBlack,lineHeight:19},metaRow:{flexDirection:"row",alignItems:"center",gap:6,paddingVertical:2},metaChip:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:e.grayBackground,paddingHorizontal:7,paddingVertical:3,borderRadius:6,borderWidth:1,borderColor:e.dividerColor},metaChipText:{fontFamily:B.interMedium,fontSize:10,color:e.grayText},searchContainer:{flexDirection:"row",alignItems:"center",backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary,borderRadius:8,paddingHorizontal:10,height:36,gap:8},searchInput:{flex:1,fontFamily:B.interRegular,fontSize:12,color:e.primaryBlack,paddingVertical:0},filterChipsRow:{flexDirection:"row",alignItems:"center",gap:8},filterChip:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:e.primaryLight,borderWidth:1,borderColor:e.grayBorderSecondary},filterChipActive:{backgroundColor:e.purple,borderColor:e.purple},filterChipText:{fontFamily:B.interMedium,fontSize:11,color:e.grayText},filterChipTextActive:{fontFamily:B.interBold,color:e.white},frameCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},originFrameCard:{borderColor:"#6EE7B7",backgroundColor:"#F0FDF4"},frameCardHeader:{flexDirection:"row",alignItems:"center",gap:8},frameIndexBadge:{minWidth:24,height:18,paddingHorizontal:4,borderRadius:4,backgroundColor:`${e.purple}14`,alignItems:"center",justifyContent:"center"},frameIndexBadgeText:{fontFamily:B.interBold,fontSize:9,color:e.purple},frameTypeBadge:{paddingHorizontal:5,paddingVertical:2,borderRadius:4,borderWidth:1},frameTypeBadgeText:{fontFamily:B.interBold,fontSize:8.5},frameMethodText:{fontFamily:B.interBold,fontSize:12,color:e.primaryBlack,flex:1},frameLocationRow:{flexDirection:"row",alignItems:"center"},frameFileText:{fontFamily:B.interRegular,fontSize:11,color:e.grayText,flex:1},frameLineText:{fontFamily:B.interBold,fontSize:11,color:e.purple},frameCopyBtn:{flexDirection:"row",alignItems:"center",gap:3,paddingHorizontal:6,paddingVertical:3,borderRadius:5,backgroundColor:e.grayBackground,borderWidth:1,borderColor:e.dividerColor},frameCopyBtnText:{fontFamily:B.interBold,fontSize:9,color:e.grayText},frameRawText:{fontFamily:B.interRegular,fontSize:9.5,color:e.grayTextWeak,backgroundColor:`${e.primaryBlack}06`,borderRadius:5,paddingHorizontal:7,paddingVertical:4,overflow:"hidden"},componentStackText:{fontFamily:B.interRegular,fontSize:11,lineHeight:16,color:e.grayText,backgroundColor:`${e.primaryBlack}06`,borderRadius:6,padding:10},sectionCard:{backgroundColor:e.primaryLight,borderRadius:10,padding:12,borderWidth:1,borderColor:e.grayBorderSecondary,gap:10},sectionCardHeader:{flexDirection:"row",alignItems:"center",gap:6,paddingBottom:6,borderBottomWidth:1,borderBottomColor:e.dividerColor},sectionCardTitle:{fontFamily:B.interBold,fontSize:12.5,color:e.primaryBlack},diagGrid:{flexDirection:"row",flexWrap:"wrap",rowGap:8,columnGap:12},diagItem:{width:"47%",gap:2},diagLabel:{fontFamily:B.interRegular,fontSize:10,color:e.grayTextWeak},diagValue:{fontFamily:B.interBold,fontSize:11.5,color:e.primaryBlack},breadcrumbCard:{backgroundColor:e.primaryLight,borderRadius:8,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary,gap:4},breadcrumbHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},breadcrumbTag:{backgroundColor:`${e.purple}14`,paddingHorizontal:6,paddingVertical:2,borderRadius:4},breadcrumbTagText:{fontFamily:B.interBold,fontSize:9,color:e.purple},breadcrumbTime:{fontFamily:B.interRegular,fontSize:10,color:e.grayTextWeak},breadcrumbMessage:{fontFamily:B.interRegular,fontSize:11.5,color:e.primaryBlack,marginTop:2},rawContainer:{backgroundColor:e.primaryLight,borderRadius:10,padding:10,borderWidth:1,borderColor:e.grayBorderSecondary},emptyContainer:{padding:16,alignItems:"center",justifyContent:"center",backgroundColor:e.primaryLight,borderRadius:8,borderWidth:1,borderColor:e.grayBorderSecondary},emptyText:{fontFamily:B.interRegular,fontSize:11,color:e.grayText,textAlign:"center"}});