react-native-inapp-inspector 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.ar.md +163 -0
  2. package/README.de.md +163 -0
  3. package/README.es.md +164 -0
  4. package/README.fr.md +163 -0
  5. package/README.hi.md +163 -0
  6. package/README.ja.md +180 -0
  7. package/README.ko.md +163 -0
  8. package/README.md +340 -243
  9. package/README.pt-BR.md +163 -0
  10. package/README.ru.md +163 -0
  11. package/README.zh-CN.md +387 -0
  12. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +605 -23
  13. package/assets/banner_dark.svg +186 -0
  14. package/assets/banner_light.svg +186 -0
  15. package/assets/icon_circle.svg +148 -0
  16. package/assets/icon_square.svg +369 -0
  17. package/assets/inapp_inspector_icon.gif +0 -0
  18. package/assets/inapp_inspector_icon_original.gif +0 -0
  19. package/assets/social_preview.png +0 -0
  20. package/assets/walkthrough.gif +0 -0
  21. package/dist/commonjs/capture.d.ts +2 -0
  22. package/dist/commonjs/capture.js +1 -1
  23. package/dist/commonjs/components/AnalyticsDetail.js +23 -23
  24. package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
  25. package/dist/commonjs/components/AnalyticsGraph.js +44 -44
  26. package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
  27. package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
  28. package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
  29. package/dist/commonjs/components/AppHeaderLogo.js +5 -3
  30. package/dist/commonjs/components/BrandCircleIcon.js +28 -28
  31. package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
  32. package/dist/commonjs/components/BrandSquareIcon.js +139 -0
  33. package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
  34. package/dist/commonjs/components/ConsoleLogCard.js +23 -39
  35. package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
  36. package/dist/commonjs/components/Inspector/AnalyticsTab.js +6 -6
  37. package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
  38. package/dist/commonjs/components/Inspector/ConfirmationModal.js +30 -0
  39. package/dist/commonjs/components/Inspector/ConsoleTab.js +12 -12
  40. package/dist/commonjs/components/Inspector/CrashTab.js +44 -9
  41. package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
  42. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
  43. package/dist/commonjs/components/Inspector/FabLauncher.js +30 -33
  44. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
  45. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  46. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
  47. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  48. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
  49. package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
  50. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  51. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +172 -0
  52. package/dist/commonjs/components/Inspector/MainScreen.js +55 -35
  53. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +40 -35
  54. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
  55. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +341 -135
  56. package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
  57. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
  58. package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
  59. package/dist/commonjs/components/Inspector/PushCard.js +5 -4
  60. package/dist/commonjs/components/Inspector/PushDetail.js +41 -32
  61. package/dist/commonjs/components/Inspector/PushTab.js +12 -12
  62. package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
  63. package/dist/commonjs/components/Inspector/ReduxTab.js +10 -8
  64. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  65. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  66. package/dist/commonjs/components/Inspector/SettingsPanel.js +287 -139
  67. package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
  68. package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
  69. package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
  70. package/dist/commonjs/components/Inspector/SocketDetail.js +327 -0
  71. package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
  72. package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
  73. package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
  74. package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
  75. package/dist/commonjs/components/Inspector/StorageTab.js +39 -37
  76. package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
  77. package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
  78. package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
  79. package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
  80. package/dist/commonjs/components/Inspector/TabBar.js +24 -23
  81. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
  82. package/dist/commonjs/components/JsonViewer.js +50 -48
  83. package/dist/commonjs/components/LogCard.d.ts +3 -2
  84. package/dist/commonjs/components/LogCard.js +27 -25
  85. package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
  86. package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
  87. package/dist/commonjs/components/NetworkIcons.d.ts +42 -0
  88. package/dist/commonjs/components/NetworkIcons.js +139 -6
  89. package/dist/commonjs/components/SegmentedTabs.js +1 -1
  90. package/dist/commonjs/constants/version.d.ts +1 -1
  91. package/dist/commonjs/constants/version.js +1 -1
  92. package/dist/commonjs/crash.d.ts +1 -1
  93. package/dist/commonjs/crash.js +1 -1
  94. package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
  95. package/dist/commonjs/customHooks/crashHandler.js +7 -7
  96. package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
  97. package/dist/commonjs/customHooks/socketLogger.js +2 -0
  98. package/dist/commonjs/editor.d.ts +13 -0
  99. package/dist/commonjs/editor.js +1 -0
  100. package/dist/commonjs/helpers/index.d.ts +1 -0
  101. package/dist/commonjs/helpers/index.js +3 -3
  102. package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
  103. package/dist/commonjs/helpers/memoryManager.js +1 -1
  104. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  105. package/dist/commonjs/helpers/searchQueryParser.js +5 -1
  106. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  107. package/dist/commonjs/helpers/settingsStore.js +1 -1
  108. package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
  109. package/dist/commonjs/helpers/shareFormatter.js +8 -7
  110. package/dist/commonjs/helpers/telemetry.js +1 -1
  111. package/dist/commonjs/i18n/index.d.ts +99 -1
  112. package/dist/commonjs/i18n/index.js +1 -1
  113. package/dist/commonjs/i18n/locales/ar.json +1 -1
  114. package/dist/commonjs/i18n/locales/bn.json +1 -0
  115. package/dist/commonjs/i18n/locales/de.json +1 -1
  116. package/dist/commonjs/i18n/locales/en.json +1 -1
  117. package/dist/commonjs/i18n/locales/es.json +1 -1
  118. package/dist/commonjs/i18n/locales/fr.json +1 -1
  119. package/dist/commonjs/i18n/locales/gu.json +1 -0
  120. package/dist/commonjs/i18n/locales/hi.json +1 -1
  121. package/dist/commonjs/i18n/locales/id.json +1 -0
  122. package/dist/commonjs/i18n/locales/it.json +1 -0
  123. package/dist/commonjs/i18n/locales/ja.json +1 -1
  124. package/dist/commonjs/i18n/locales/kn.json +1 -0
  125. package/dist/commonjs/i18n/locales/ko.json +1 -1
  126. package/dist/commonjs/i18n/locales/ml.json +1 -0
  127. package/dist/commonjs/i18n/locales/mr.json +1 -0
  128. package/dist/commonjs/i18n/locales/nl.json +1 -0
  129. package/dist/commonjs/i18n/locales/pa.json +1 -0
  130. package/dist/commonjs/i18n/locales/pl.json +1 -0
  131. package/dist/commonjs/i18n/locales/pt.json +1 -1
  132. package/dist/commonjs/i18n/locales/ru.json +1 -1
  133. package/dist/commonjs/i18n/locales/ta.json +1 -0
  134. package/dist/commonjs/i18n/locales/te.json +1 -0
  135. package/dist/commonjs/i18n/locales/tr.json +1 -0
  136. package/dist/commonjs/i18n/locales/vi.json +1 -0
  137. package/dist/commonjs/i18n/locales/zh.json +1 -1
  138. package/dist/commonjs/index.d.ts +16 -13
  139. package/dist/commonjs/index.js +5 -4
  140. package/dist/commonjs/native/NativeInspector.d.ts +4 -0
  141. package/dist/commonjs/native/NativeInspector.js +1 -1
  142. package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
  143. package/dist/commonjs/socket.d.ts +4 -0
  144. package/dist/commonjs/socket.js +1 -0
  145. package/dist/commonjs/styles/AppColors.d.ts +42 -2
  146. package/dist/commonjs/styles/AppColors.js +1 -1
  147. package/dist/commonjs/styles/common.js +1 -1
  148. package/dist/commonjs/styles/index.d.ts +30 -0
  149. package/dist/commonjs/styles/index.js +1 -1
  150. package/dist/commonjs/types/editor.d.ts +96 -0
  151. package/dist/commonjs/types/editor.js +1 -0
  152. package/dist/commonjs/types/enums.d.ts +40 -0
  153. package/dist/commonjs/types/enums.js +1 -1
  154. package/dist/commonjs/types/interfaces.d.ts +143 -1
  155. package/dist/esm/capture.d.ts +2 -0
  156. package/dist/esm/capture.js +1 -1
  157. package/dist/esm/components/AnalyticsDetail.js +31 -31
  158. package/dist/esm/components/AnalyticsEventCard.js +1 -1
  159. package/dist/esm/components/AnalyticsGraph.js +74 -74
  160. package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
  161. package/dist/esm/components/AnimatedBrandOwl.js +175 -0
  162. package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
  163. package/dist/esm/components/AppHeaderLogo.js +7 -5
  164. package/dist/esm/components/BrandCircleIcon.js +70 -70
  165. package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
  166. package/dist/esm/components/BrandSquareIcon.js +139 -0
  167. package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
  168. package/dist/esm/components/ConsoleLogCard.js +61 -77
  169. package/dist/esm/components/Inspector/AboutModal.js +85 -95
  170. package/dist/esm/components/Inspector/AnalyticsTab.js +24 -24
  171. package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
  172. package/dist/esm/components/Inspector/ConfirmationModal.js +30 -0
  173. package/dist/esm/components/Inspector/ConsoleTab.js +48 -48
  174. package/dist/esm/components/Inspector/CrashTab.js +203 -168
  175. package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
  176. package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
  177. package/dist/esm/components/Inspector/FabLauncher.js +57 -60
  178. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
  179. package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  180. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
  181. package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  182. package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
  183. package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
  184. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  185. package/dist/esm/components/Inspector/LanguageSelectorModal.js +172 -0
  186. package/dist/esm/components/Inspector/MainScreen.js +130 -110
  187. package/dist/esm/components/Inspector/MediaGalleryTab.js +83 -78
  188. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
  189. package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -139
  190. package/dist/esm/components/Inspector/NetworkTab.js +130 -130
  191. package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
  192. package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
  193. package/dist/esm/components/Inspector/PushCard.js +23 -22
  194. package/dist/esm/components/Inspector/PushDetail.js +45 -36
  195. package/dist/esm/components/Inspector/PushTab.js +23 -23
  196. package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
  197. package/dist/esm/components/Inspector/ReduxTab.js +20 -18
  198. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  199. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  200. package/dist/esm/components/Inspector/SettingsPanel.js +526 -378
  201. package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
  202. package/dist/esm/components/Inspector/SocketCard.js +116 -0
  203. package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
  204. package/dist/esm/components/Inspector/SocketDetail.js +327 -0
  205. package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
  206. package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
  207. package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
  208. package/dist/esm/components/Inspector/SocketTab.js +112 -0
  209. package/dist/esm/components/Inspector/StorageTab.js +139 -137
  210. package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
  211. package/dist/esm/components/Inspector/SupportModal.js +125 -0
  212. package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
  213. package/dist/esm/components/Inspector/SupportPage.js +227 -0
  214. package/dist/esm/components/Inspector/TabBar.js +36 -35
  215. package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
  216. package/dist/esm/components/JsonViewer.js +66 -64
  217. package/dist/esm/components/LogCard.d.ts +3 -2
  218. package/dist/esm/components/LogCard.js +57 -55
  219. package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
  220. package/dist/esm/components/ModuleErrorBoundary.js +23 -23
  221. package/dist/esm/components/NetworkIcons.d.ts +42 -0
  222. package/dist/esm/components/NetworkIcons.js +139 -6
  223. package/dist/esm/components/SegmentedTabs.js +7 -7
  224. package/dist/esm/constants/version.d.ts +1 -1
  225. package/dist/esm/constants/version.js +1 -1
  226. package/dist/esm/crash.d.ts +1 -1
  227. package/dist/esm/crash.js +1 -1
  228. package/dist/esm/customHooks/crashHandler.d.ts +2 -1
  229. package/dist/esm/customHooks/crashHandler.js +7 -7
  230. package/dist/esm/customHooks/socketLogger.d.ts +26 -0
  231. package/dist/esm/customHooks/socketLogger.js +2 -0
  232. package/dist/esm/editor.d.ts +13 -0
  233. package/dist/esm/editor.js +1 -0
  234. package/dist/esm/helpers/index.d.ts +1 -0
  235. package/dist/esm/helpers/index.js +4 -4
  236. package/dist/esm/helpers/memoryManager.d.ts +1 -0
  237. package/dist/esm/helpers/memoryManager.js +1 -1
  238. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  239. package/dist/esm/helpers/searchQueryParser.js +5 -1
  240. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  241. package/dist/esm/helpers/settingsStore.js +1 -1
  242. package/dist/esm/helpers/shareFormatter.d.ts +3 -1
  243. package/dist/esm/helpers/shareFormatter.js +8 -7
  244. package/dist/esm/helpers/telemetry.js +1 -1
  245. package/dist/esm/i18n/index.d.ts +99 -1
  246. package/dist/esm/i18n/index.js +1 -1
  247. package/dist/esm/i18n/locales/ar.json +1 -1
  248. package/dist/esm/i18n/locales/bn.json +1 -0
  249. package/dist/esm/i18n/locales/de.json +1 -1
  250. package/dist/esm/i18n/locales/en.json +1 -1
  251. package/dist/esm/i18n/locales/es.json +1 -1
  252. package/dist/esm/i18n/locales/fr.json +1 -1
  253. package/dist/esm/i18n/locales/gu.json +1 -0
  254. package/dist/esm/i18n/locales/hi.json +1 -1
  255. package/dist/esm/i18n/locales/id.json +1 -0
  256. package/dist/esm/i18n/locales/it.json +1 -0
  257. package/dist/esm/i18n/locales/ja.json +1 -1
  258. package/dist/esm/i18n/locales/kn.json +1 -0
  259. package/dist/esm/i18n/locales/ko.json +1 -1
  260. package/dist/esm/i18n/locales/ml.json +1 -0
  261. package/dist/esm/i18n/locales/mr.json +1 -0
  262. package/dist/esm/i18n/locales/nl.json +1 -0
  263. package/dist/esm/i18n/locales/pa.json +1 -0
  264. package/dist/esm/i18n/locales/pl.json +1 -0
  265. package/dist/esm/i18n/locales/pt.json +1 -1
  266. package/dist/esm/i18n/locales/ru.json +1 -1
  267. package/dist/esm/i18n/locales/ta.json +1 -0
  268. package/dist/esm/i18n/locales/te.json +1 -0
  269. package/dist/esm/i18n/locales/tr.json +1 -0
  270. package/dist/esm/i18n/locales/vi.json +1 -0
  271. package/dist/esm/i18n/locales/zh.json +1 -1
  272. package/dist/esm/index.d.ts +16 -13
  273. package/dist/esm/index.js +8 -7
  274. package/dist/esm/native/NativeInspector.d.ts +4 -0
  275. package/dist/esm/native/NativeInspector.js +1 -1
  276. package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
  277. package/dist/esm/socket.d.ts +4 -0
  278. package/dist/esm/socket.js +1 -0
  279. package/dist/esm/styles/AppColors.d.ts +42 -2
  280. package/dist/esm/styles/AppColors.js +1 -1
  281. package/dist/esm/styles/common.js +1 -1
  282. package/dist/esm/styles/index.d.ts +30 -0
  283. package/dist/esm/styles/index.js +1 -1
  284. package/dist/esm/types/editor.d.ts +96 -0
  285. package/dist/esm/types/editor.js +1 -0
  286. package/dist/esm/types/enums.d.ts +40 -0
  287. package/dist/esm/types/enums.js +1 -1
  288. package/dist/esm/types/interfaces.d.ts +143 -1
  289. package/editor.d.ts +1 -0
  290. package/editor.js +1 -0
  291. package/ios/NetworkInspectorModule.mm +531 -12
  292. package/package.json +213 -2
  293. package/react-native-inapp-inspector.podspec +1 -1
  294. package/src/native/NativeInspector.ts +65 -4
  295. package/src/native/NativeNetworkInspector.ts +4 -0
@@ -1,74 +1,76 @@
1
- import Q,{useState as D,useEffect as le,useMemo as G,useCallback as He}from"react";import{ScrollView as O,View as T,Text as V,StyleSheet as Ie,TouchableOpacity as Te,Platform as We}from"react-native";import{useTranslation as Ae}from"../i18n";import Pe from"./TreeNode";import X from"./HighlightText";import E from"./TouchableScale";import{PrettyIcon as Ne,RawIcon as Oe,TableIcon as De,ChevronIcon as Ee,CopyIcon as Le,CheckIcon as Ke}from"./NetworkIcons";import{AppColors as t}from"../styles/AppColors";import{AppFonts as N}from"../styles/AppFonts";import{getSize as Me,copyToClipboard as ve}from"../helpers";import{triggerNativeHaptic as Je}from"../native/NativeInspector";const I=We.select({ios:"Menlo",android:"monospace",default:"monospace"}),$e=o=>o===null?{label:"null",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:o===void 0?{label:"undef",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:Array.isArray(o)?{label:`arr[${o.length}]`,color:t.blue600,bg:t.blueBg,border:t.sky100}:typeof o=="object"?{label:`obj{${Object.keys(o).length}}`,color:t.violet600,bg:t.purple50,border:t.purple200}:typeof o=="number"?{label:"num",color:t.amber600,bg:t.amber100,border:t.amber200}:typeof o=="boolean"?{label:"bool",color:t.pink600,bg:t.roseBg,border:t.roseBorder}:{label:"str",color:t.emerald600,bg:t.emeraldBg,border:t.emeraldBorder},Se=Q.memo(({text:o,search:S,detectLinks:A})=>{const B=o.trim();let F=e.rawMonospaceText;return B.startsWith('"')?F=e.syntaxString:B==="null"||B.startsWith("null,")||B==="undefined"?F=e.syntaxNull:B==="true"||B.startsWith("true,")||B==="false"||B.startsWith("false,")?F=e.syntaxBoolean:/^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?,?$/.test(B)&&(F=e.syntaxNumber),<X text={o}search={S}detectLinks={A}style={F}selectable={!0}highlightStyle={e.highlight}/>}),Ge=Q.memo(({line:o,search:S,detectLinks:A})=>{const B=o.match(/^(\s+)(.*)$/),F=B?B[1]:"",P=B?B[2]:o,j=F?F.replace(/ /g,"\xB7 ").replace(/ /g,"\xB7"):"",z=P.match(/^("(?:[^"\\]|\\.)*")(\s*:\s*)(.*)$/);if(z){const k=z[1],K=z[2],H=z[3];return<T style={e.rawLineContentRow}>
2
- {j.length>0&&<V style={e.indentDots}>{j}</V>}
3
- <X text={k}search={S}style={e.syntaxKey}selectable={!0}highlightStyle={e.highlight}/>
1
+ import Q,{useState as L,useEffect as ne,useMemo as G,useCallback as Ie}from"react";import{ScrollView as O,View as T,Text as V,StyleSheet as We,TouchableOpacity as Te,Platform as Fe}from"react-native";import{useTranslation as je}from"../i18n";import Pe from"./TreeNode";import X from"./HighlightText";import D from"./TouchableScale";import{PrettyIcon as Ae,RawIcon as Ne,TableIcon as Oe,ChevronIcon as Le,CopyIcon as De,CheckIcon as Ee}from"./NetworkIcons";import{AppColors as t}from"../styles/AppColors";import{AppFonts as N}from"../styles/AppFonts";import{getSize as Ke,copyToClipboard as Me}from"../helpers";import{triggerNativeHaptic as ve}from"../native/NativeInspector";const W=Fe.select({ios:"Menlo",android:"monospace",default:"monospace"}),Je=o=>o===null?{label:"null",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:o===void 0?{label:"undef",color:t.errorColor,bg:t.errorCardBg,border:t.errorBorder}:Array.isArray(o)?{label:`arr[${o.length}]`,color:t.blue600,bg:t.blueBg,border:t.sky100}:typeof o=="object"?{label:`obj{${Object.keys(o).length}}`,color:t.violet600,bg:t.purple50,border:t.purple200}:typeof o=="number"?{label:"num",color:t.amber600,bg:t.amber100,border:t.amber200}:typeof o=="boolean"?{label:"bool",color:t.pink600,bg:t.roseBg,border:t.roseBorder}:{label:"str",color:t.emerald600,bg:t.emeraldBg,border:t.emeraldBorder},Se=Q.memo(({text:o,search:S,detectLinks:j})=>{const B=o.trim();let k=e.rawMonospaceText;return B.startsWith('"')?k=e.syntaxString:B==="null"||B.startsWith("null,")||B==="undefined"?k=e.syntaxNull:B==="true"||B.startsWith("true,")||B==="false"||B.startsWith("false,")?k=e.syntaxBoolean:/^-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?,?$/.test(B)&&(k=e.syntaxNumber),<X text={o}search={S}detectLinks={j}style={k}selectable={!0}highlightStyle={e.highlight}/>}),$e=Q.memo(({line:o,search:S,detectLinks:j})=>{const B=o.match(/^(\s+)(.*)$/),k=B?B[1]:"",P=B?B[2]:o,A=k?k.replace(/ /g,"\xB7 ").replace(/ /g,"\xB7"):"",R=P.match(/^("(?:[^"\\]|\\.)*")(\s*:\s*)(.*)$/);if(R){const I=R[1],K=R[2],z=R[3];return<T style={e.rawLineContentRow}>
2
+ {A.length>0&&<V style={e.indentDots}>{A}</V>}
3
+ <X text={I}search={S}style={e.syntaxKey}selectable={!0}highlightStyle={e.highlight}/>
4
4
  <V style={e.syntaxColon}>{K}</V>
5
- <Se text={H}search={S}detectLinks={A}/>
5
+ <Se text={z}search={S}detectLinks={j}/>
6
6
  </T>}return<T style={e.rawLineContentRow}>
7
- {j.length>0&&<V style={e.indentDots}>{j}</V>}
8
- <Se text={P}search={S}detectLinks={A}/>
9
- </T>}),Ye=Q.memo(({itemKey:o,val:S,search:A,index:B})=>{const[F,P]=D(!1),j=S!==null&&typeof S=="object",z=$e(S);let k="";if(S===null)k="null";else if(S===void 0)k="undefined";else if(j)try{k=JSON.stringify(S,null,2)}catch{k=String(S)}else k=String(S);const K=k.includes(`
10
- `)||k.length>80;return<T style={[e.tableRow,B%2===1&&e.tableRowAlt]}>
7
+ {A.length>0&&<V style={e.indentDots}>{A}</V>}
8
+ <Se text={P}search={S}detectLinks={j}/>
9
+ </T>}),Ge=Q.memo(({itemKey:o,val:S,search:j,index:B})=>{const[k,P]=L(!1),A=S!==null&&typeof S=="object",R=Je(S);let I="";if(S===null)I="null";else if(S===void 0)I="undefined";else if(A)try{I=JSON.stringify(S,null,2)}catch{I=String(S)}else I=String(S);const K=I.includes(`
10
+ `)||I.length>80;return<T style={[e.tableRow,B%2===1&&e.tableRowAlt]}>
11
11
 
12
12
  <T style={e.tableColKey}>
13
- <X text={o}search={A}style={e.tableCellKey}highlightStyle={e.highlight}/>
14
- <T style={[e.typePill,{backgroundColor:z.bg,borderColor:z.border}]}>
15
- <V style={[e.typePillText,{color:z.color}]}>
16
- {z.label}
13
+ <X text={o}search={j}style={e.tableCellKey}highlightStyle={e.highlight}/>
14
+ <T style={[e.typePill,{backgroundColor:R.bg,borderColor:R.border}]}>
15
+ <V style={[e.typePillText,{color:R.color}]}>
16
+ {R.label}
17
17
  </V>
18
18
  </T>
19
19
  </T>
20
20
 
21
21
 
22
22
  <T style={e.tableColVal}>
23
- <T style={j?e.tableCodeBox:void 0}>
24
- <X text={k}search={A}style={[e.tableCellValue,S==null?e.syntaxNull:void 0,typeof S=="number"?e.syntaxNumber:void 0,typeof S=="boolean"?e.syntaxBoolean:void 0,typeof S=="string"?e.syntaxString:void 0]}highlightStyle={e.highlight}numberOfLines={F?void 0:3}selectable={!0}/>
23
+ <T style={A?e.tableCodeBox:void 0}>
24
+ <X text={I}search={j}style={[e.tableCellValue,S==null?e.syntaxNull:void 0,typeof S=="number"?e.syntaxNumber:void 0,typeof S=="boolean"?e.syntaxBoolean:void 0,typeof S=="string"?e.syntaxString:void 0]}highlightStyle={e.highlight}numberOfLines={k?void 0:3}selectable={!0}/>
25
25
  </T>
26
- {K&&<Te onPress={()=>P(H=>!H)}hitSlop={6}style={e.showMoreBtn}>
26
+ {K&&<Te onPress={()=>P(z=>!z)}hitSlop={6}style={e.showMoreBtn}>
27
27
  <V style={e.showMoreText}>
28
- {F?"Collapse":"Expand"}
28
+ {k?"Collapse":"Expand"}
29
29
  </V>
30
- <Ee direction={F?"up":"down"}size={9}color="#4F46E5"/>
30
+ <Le direction={k?"up":"down"}size={9}color={t.purple}/>
31
31
  </Te>}
32
32
  </T>
33
- </T>}),qe=Q.memo(({data:o,search:S,forceOpen:A,defaultExpandDepth:B=1,wrap:F,fullHeight:P=!1,maxHeight:j,mode:z,onModeChange:k,hideTabs:K=!1})=>{const{t:H}=Ae(),[Ce,ne]=D(z??"raw"),[ie,ae]=D(!1),[M,se]=D(F??!0),[v,Ve]=D("compact"),[J,ce]=D(A),[Be,Fe]=D(!1),R=k&&z?z:Ce,Z=C=>{ne(C),k&&k(C)};le(()=>{F!==void 0&&se(F)},[F]),le(()=>{A!==void 0&&ce(A)},[A]),le(()=>{z&&ne(z)},[z]);const L=G(()=>{if(o==null)return"";if(typeof o=="string"){const C=o.trim();try{const W=JSON.parse(C);return JSON.stringify(W,null,2)}catch{return o}}try{return JSON.stringify(o,null,2)??""}catch{return String(o)||""}},[o]),ee=G(()=>{if(typeof o=="string"){const C=o.trim();try{const W=JSON.parse(C);return JSON.stringify(W)}catch{return o}}try{return JSON.stringify(o)??""}catch{return String(o)||""}},[o]),de=v==="formatted"?L:ee,ge=5e4,$=typeof de=="string"?de:"",ye=$.length>ge&&!Be,te=ye?$.slice(0,ge):$,oe=G(()=>te?te.split(`
34
- `):[""],[te]),Ue=G(()=>R==="raw"?oe.length:L?L.split(`
35
- `).length:1,[R,oe.length,L]),_e=G(()=>Me(o),[o]),ze=He(()=>{Je("success"),ve(v==="compact"?ee:L,"JSON"),ae(!0),setTimeout(()=>ae(!1),1200)},[v,ee,L]),re=typeof o=="object"&&o!==null,Re=o==null||re&&Object.keys(o).length===0,pe=()=>{if(!re)return<T style={e.tableRow}>
33
+ </T>}),Ye=Q.memo(({data:o,search:S,forceOpen:j,defaultExpandDepth:B=1,wrap:k,fullHeight:P=!1,maxHeight:A,mode:R,onModeChange:I,hideTabs:K=!1})=>{const{t:z}=je(),[Ce,le]=L(R??"raw"),[ie,ae]=L(!1),[M,se]=L(k??!0),[v,Ve]=L("compact"),[J,ce]=L(j),[Be,ke]=L(!1),H=I&&R?R:Ce,Z=C=>{le(C),I&&I(C)};ne(()=>{k!==void 0&&se(k)},[k]),ne(()=>{j!==void 0&&ce(j)},[j]),ne(()=>{R&&le(R)},[R]);const E=G(()=>{if(o==null)return"";if(typeof o=="string"){const C=o.trim();try{const F=JSON.parse(C);return JSON.stringify(F,null,2)}catch{return o}}try{return JSON.stringify(o,null,2)??""}catch{return String(o)||""}},[o]),ee=G(()=>{if(typeof o=="string"){const C=o.trim();try{const F=JSON.parse(C);return JSON.stringify(F)}catch{return o}}try{return JSON.stringify(o)??""}catch{return String(o)||""}},[o]),de=v==="formatted"?E:ee,ge=5e4,$=typeof de=="string"?de:"",ye=$.length>ge&&!Be,te=ye?$.slice(0,ge):$,oe=G(()=>te?te.split(`
34
+ `):[""],[te]),qe=G(()=>H==="raw"?oe.length:E?E.split(`
35
+ `).length:1,[H,oe.length,E]),Ue=G(()=>Ke(o),[o]),ze=Ie(()=>{ve("success"),Me(v==="compact"?ee:E,"JSON"),ae(!0),setTimeout(()=>ae(!1),1200)},[v,ee,E]),re=typeof o=="object"&&o!==null,Re=o==null||re&&Object.keys(o).length===0,pe=()=>{if(!re)return<T style={e.tableRow}>
36
36
  <T style={e.tableColKey}>
37
37
  <V style={e.tableCellKey}>
38
- {H("network.jsonViewer.value")}
38
+ {z("network.jsonViewer.value")}
39
39
  </V>
40
40
  </T>
41
41
  <T style={e.tableColVal}>
42
42
  <V style={e.tableCellValue}>{String(o)}</V>
43
43
  </T>
44
- </T>;let C=Object.keys(o);if(S&&S.trim().length>0){const W=S.trim().toLowerCase();C=C.filter(U=>{const _=o[U],ke=typeof _=="object"&&_!==null?JSON.stringify(_):String(_);return U.toLowerCase().includes(W)||ke.toLowerCase().includes(W)})}return C.length===0?<T style={e.emptyContainer}>
44
+ </T>;let C=Object.keys(o);if(S&&S.trim().length>0){const F=S.trim().toLowerCase();C=C.filter(U=>{const _=o[U],He=typeof _=="object"&&_!==null?JSON.stringify(_):String(_);return U.toLowerCase().includes(F)||He.toLowerCase().includes(F)})}return C.length===0?<T style={e.emptyContainer}>
45
45
  <V style={e.emptyText}>
46
- {S&&S.trim().length>0?"No matching keys or values found":H("network.jsonViewer.emptyTable")}
46
+ {S&&S.trim().length>0?z("network.jsonViewer.noMatchingKeys","No matching keys or values found"):z("network.jsonViewer.emptyTable")}
47
47
  </V>
48
48
  </T>:<T style={e.tableView}>
49
49
 
50
50
  <T style={e.tableHeaderRow}>
51
51
  <V style={[e.tableHeaderCell,{flex:2}]}>
52
- KEY / PROPERTY
52
+ {z("network.jsonViewer.keyProperty","KEY / PROPERTY")}
53
+ </V>
54
+ <V style={[e.tableHeaderCell,{flex:3}]}>
55
+ {z("network.jsonViewer.value","VALUE")}
53
56
  </V>
54
- <V style={[e.tableHeaderCell,{flex:3}]}>VALUE</V>
55
57
  </T>
56
- {C.map((W,U)=><Ye key={W}index={U}itemKey={W}val={o[W]}search={S}/>)}
58
+ {C.map((F,U)=><Ge key={F}index={U}itemKey={F}val={o[F]}search={S}/>)}
57
59
  </T>},Y=<Pe data={o}search={S}forceOpen={J}defaultExpandDepth={J?99:B}/>,q=()=><T style={e.rawLinesWrapper}>
58
- {oe.map((C,W)=><T key={W}style={e.rawCodeLineRow}>
60
+ {oe.map((C,F)=><T key={F}style={e.rawCodeLineRow}>
59
61
 
60
62
  <T style={e.gutterCell}>
61
63
  <V style={e.gutterNumber}selectable={!1}>
62
- {W+1}
64
+ {F+1}
63
65
  </V>
64
66
  </T>
65
67
 
66
68
 
67
69
  <T style={e.rawTextCell}>
68
- <Ge line={C}search={S}detectLinks={$.length<2e4}/>
70
+ <$e line={C}search={S}detectLinks={$.length<2e4}/>
69
71
  </T>
70
72
  </T>)}
71
- </T>,ue=()=>ye?<Te onPress={()=>Fe(!0)}activeOpacity={.8}style={e.truncationBanner}>
73
+ </T>,ue=()=>ye?<Te onPress={()=>ke(!0)}activeOpacity={.8}style={e.truncationBanner}>
72
74
  <V style={e.truncationText}>
73
75
  Showing first 50 KB ({Math.round($.length/1024)} KB
74
76
  total) · Tap to load full payload
@@ -78,65 +80,65 @@ import Q,{useState as D,useEffect as le,useMemo as G,useCallback as He}from"reac
78
80
  <T style={e.snippetHeader}>
79
81
 
80
82
  {!K&&<T style={e.snippetTabs}>
81
- <E onPress={()=>Z("raw")}style={[e.snippetTabBtn,R==="raw"&&e.snippetTabBtnActive]}>
82
- <Oe color={R==="raw"?t.white:t.grayText}size={11.5}/>
83
- <V style={[e.snippetTabText,R==="raw"&&e.snippetTabTextActive]}>
84
- {H("network.jsonViewer.raw","Raw")}
83
+ <D onPress={()=>Z("raw")}style={[e.snippetTabBtn,H==="raw"&&e.snippetTabBtnActive]}>
84
+ <Ne color={H==="raw"?t.white:t.grayText}size={11.5}/>
85
+ <V style={[e.snippetTabText,H==="raw"&&e.snippetTabTextActive]}>
86
+ {z("network.jsonViewer.raw","Raw")}
85
87
  </V>
86
- </E>
88
+ </D>
87
89
 
88
- <E onPress={()=>Z("pretty")}style={[e.snippetTabBtn,R==="pretty"&&e.snippetTabBtnActive]}>
89
- <Ne color={R==="pretty"?t.white:t.grayText}size={11.5}/>
90
- <V style={[e.snippetTabText,R==="pretty"&&e.snippetTabTextActive]}>
91
- {H("network.jsonViewer.pretty","Pretty")}
90
+ <D onPress={()=>Z("pretty")}style={[e.snippetTabBtn,H==="pretty"&&e.snippetTabBtnActive]}>
91
+ <Ae color={H==="pretty"?t.white:t.grayText}size={11.5}/>
92
+ <V style={[e.snippetTabText,H==="pretty"&&e.snippetTabTextActive]}>
93
+ {z("network.jsonViewer.pretty","Pretty")}
92
94
  </V>
93
- </E>
95
+ </D>
94
96
 
95
- <E onPress={()=>Z("table")}style={[e.snippetTabBtn,R==="table"&&e.snippetTabBtnActive]}>
96
- <De color={R==="table"?t.white:t.grayText}size={11.5}/>
97
- <V style={[e.snippetTabText,R==="table"&&e.snippetTabTextActive]}>
98
- {H("network.jsonViewer.table","Table")}
97
+ <D onPress={()=>Z("table")}style={[e.snippetTabBtn,H==="table"&&e.snippetTabBtnActive]}>
98
+ <Oe color={H==="table"?t.white:t.grayText}size={11.5}/>
99
+ <V style={[e.snippetTabText,H==="table"&&e.snippetTabTextActive]}>
100
+ {z("network.jsonViewer.table","Table")}
99
101
  </V>
100
- </E>
102
+ </D>
101
103
  </T>}
102
104
 
103
105
 
104
106
  <T style={e.headerRight}>
105
107
 
106
- {R==="raw"&&<>
107
- <E onPress={()=>Ve(C=>C==="compact"?"formatted":"compact")}style={[e.toolToggleBtn,v==="compact"&&e.toolToggleBtnActive]}>
108
+ {H==="raw"&&<>
109
+ <D onPress={()=>Ve(C=>C==="compact"?"formatted":"compact")}style={[e.toolToggleBtn,v==="compact"&&e.toolToggleBtnActive]}>
108
110
  <V style={[e.toolToggleText,v==="compact"&&e.toolToggleTextActive]}>
109
- {H("jsonViewer.min","Min")}
111
+ {z("jsonViewer.min","Min")}
110
112
  </V>
111
- </E>
113
+ </D>
112
114
 
113
- <E onPress={()=>se(C=>!C)}style={[e.toolToggleBtn,M&&e.toolToggleBtnActive]}>
115
+ <D onPress={()=>se(C=>!C)}style={[e.toolToggleBtn,M&&e.toolToggleBtnActive]}>
114
116
  <V style={[e.toolToggleText,M&&e.toolToggleTextActive]}>
115
- {H("jsonViewer.wrap","Wrap")}
117
+ {z("jsonViewer.wrap","Wrap")}
116
118
  </V>
117
- </E>
119
+ </D>
118
120
  </>}
119
121
 
120
122
 
121
- {R==="pretty"&&re&&<E onPress={()=>ce(C=>!C)}style={[e.toolToggleBtn,J&&e.toolToggleBtnActive]}>
123
+ {H==="pretty"&&re&&<D onPress={()=>ce(C=>!C)}style={[e.toolToggleBtn,J&&e.toolToggleBtnActive]}>
122
124
  <V style={[e.toolToggleText,J&&e.toolToggleTextActive]}>
123
- {J?H("jsonViewer.fold","Fold"):H("jsonViewer.expand","Expand")}
125
+ {J?z("jsonViewer.fold","Fold"):z("jsonViewer.expand","Expand")}
124
126
  </V>
125
- </E>}
127
+ </D>}
126
128
 
127
129
 
128
- <E onPress={ze}hitSlop={6}style={[e.copyBtn,ie&&e.copyBtnSuccess]}>
129
- {ie?<Ke color={t.emerald500}size={13}/>:<Le color={t.grayText}size={13}/>}
130
- </E>
130
+ <D onPress={ze}hitSlop={6}style={[e.copyBtn,ie&&e.copyBtnSuccess]}>
131
+ {ie?<Ee color={t.emerald500}size={13}/>:<De color={t.grayText}size={13}/>}
132
+ </D>
131
133
  </T>
132
134
  </T>
133
135
 
134
136
 
135
- <T style={[e.editorBody,P&&{flex:1,maxHeight:void 0},!P&&j!=null&&{maxHeight:j}]}>
137
+ <T style={[e.editorBody,P&&{flex:1,maxHeight:void 0},!P&&A!=null&&{maxHeight:A}]}>
136
138
 
137
- {R==="pretty"&&(Re?<T style={e.emptyContainer}>
139
+ {H==="pretty"&&(Re?<T style={e.emptyContainer}>
138
140
  <V style={e.emptyText}>
139
- {H("network.jsonViewer.emptyPayload")}
141
+ {z("network.jsonViewer.emptyPayload")}
140
142
  </V>
141
143
  </T>:M?P?<O style={{flex:1}}contentContainerStyle={e.prettyContainer}showsVerticalScrollIndicator={!0}>
142
144
  {Y}
@@ -149,7 +151,7 @@ import Q,{useState as D,useEffect as le,useMemo as G,useCallback as He}from"reac
149
151
  </O>)}
150
152
 
151
153
 
152
- {R==="raw"&&(P?<O style={e.fullHeightScrollView}contentContainerStyle={e.fullHeightScrollContent}showsVerticalScrollIndicator={!0}showsHorizontalScrollIndicator={!1}>
154
+ {H==="raw"&&(P?<O style={e.fullHeightScrollView}contentContainerStyle={e.fullHeightScrollContent}showsVerticalScrollIndicator={!0}showsHorizontalScrollIndicator={!1}>
153
155
  {M?<T style={e.rawEditorFullWidth}>
154
156
  {q()}
155
157
  </T>:<O horizontal showsHorizontalScrollIndicator={!0}contentContainerStyle={e.rawHorizontalContent}>
@@ -170,8 +172,8 @@ import Q,{useState as D,useEffect as le,useMemo as G,useCallback as He}from"reac
170
172
  </T>)}
171
173
 
172
174
 
173
- {R==="table"&&(P?<O style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
175
+ {H==="table"&&(P?<O style={{flex:1}}contentContainerStyle={{flexGrow:1}}showsVerticalScrollIndicator={!0}>
174
176
  {pe()}
175
177
  </O>:<T style={e.tableView}>{pe()}</T>)}
176
178
  </T>
177
- </T>}),e=Ie.create({container:{backgroundColor:t.white,borderRadius:12,borderWidth:1,borderColor:t.grayBorderSecondary,overflow:"hidden",shadowColor:t.brandPurple,shadowOpacity:.04,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2,width:"100%"},snippetHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:t.grayBackground,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary,paddingHorizontal:8,paddingVertical:5,gap:6,minHeight:38},headerLeft:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:1,minWidth:0},langBadge:{flexDirection:"row",alignItems:"center",backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,gap:4.5},langDot:{width:5,height:5,borderRadius:2.5,backgroundColor:t.emerald500},langBadgeText:{fontFamily:I,fontSize:9.5,color:t.primaryBlack,fontWeight:"700",letterSpacing:.3},metaBadge:{backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,flexShrink:1},metaBadgeText:{fontFamily:I,fontSize:9.5,color:t.grayTextWeak,fontWeight:"600"},headerRight:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},snippetTabs:{flexDirection:"row",alignItems:"center",backgroundColor:`${t.slate200}80`,borderRadius:8,padding:2.5,borderWidth:1,borderColor:t.dividerColor,gap:2},snippetTabBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:3.5,paddingHorizontal:8,borderRadius:6},snippetTabBtnActive:{backgroundColor:t.brandPurple,shadowColor:t.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:2,elevation:1},snippetTabText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.grayText},snippetTabTextActive:{color:t.white,fontFamily:N.interBold},toolToggleBtn:{paddingHorizontal:8,paddingVertical:3.5,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},toolToggleBtnActive:{backgroundColor:t.purpleShade50,borderColor:`${t.brandPurple}60`},toolToggleText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.grayText},toolToggleTextActive:{color:t.brandPurple,fontFamily:N.interBold},copyBtn:{width:27,height:27,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},copyBtnSuccess:{borderColor:t.greenMintBorder,backgroundColor:t.greenMintBg},editorBody:{backgroundColor:"#FFFFFF",minHeight:80},prettyContainer:{padding:10,minWidth:"100%",backgroundColor:"#FFFFFF"},fullHeightScrollView:{flex:1},fullHeightScrollContent:{flexGrow:1},rawEditorAutoHeight:{width:"100%"},rawEditorFullWidth:{width:"100%"},rawHorizontalContent:{minWidth:"100%"},rawLinesWrapper:{paddingVertical:6,backgroundColor:"#FFFFFF",width:"100%"},rawCodeLineRow:{flexDirection:"row",alignItems:"flex-start",minHeight:20,width:"100%"},gutterCell:{width:38,paddingRight:8,paddingTop:1,alignItems:"flex-end",justifyContent:"flex-start",borderRightWidth:1,borderRightColor:"#E2E8F0",backgroundColor:"#F8FAFC",userSelect:"none"},gutterNumber:{fontFamily:I,fontSize:11,lineHeight:18,color:"#94A3B8",textAlign:"right"},rawTextCell:{flex:1,paddingLeft:8,paddingRight:8,paddingTop:1,alignItems:"flex-start"},rawLineContentRow:{flexDirection:"row",alignItems:"flex-start",flexWrap:"wrap",minHeight:18},indentDots:{fontFamily:I,fontSize:11.5,lineHeight:18,color:"#CBD5E1",letterSpacing:.5},rawMonospaceText:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.slate900},syntaxKey:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxKey,fontWeight:"700"},syntaxColon:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxColon,marginRight:4},syntaxString:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxString},syntaxNumber:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxNumber},syntaxBoolean:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxBoolean},syntaxNull:{fontFamily:I,fontSize:11.5,lineHeight:18,color:t.syntaxNull,fontStyle:"italic"},truncationBanner:{margin:10,backgroundColor:t.purple50,paddingVertical:8,paddingHorizontal:12,borderRadius:6,alignItems:"center",borderWidth:1,borderColor:t.purple200},truncationText:{fontFamily:N.interSemiBold,fontSize:11,color:t.brandPurple},tableView:{flex:1,width:"100%"},tableHeaderRow:{flexDirection:"row",backgroundColor:t.slate100,borderBottomWidth:1,borderBottomColor:t.slate200,paddingVertical:7,paddingHorizontal:12},tableHeaderCell:{fontFamily:N.interBold,fontSize:10.5,color:t.slate600,letterSpacing:.5,textTransform:"uppercase"},tableRow:{flexDirection:"row",borderBottomWidth:1,borderBottomColor:t.slate100,paddingVertical:8,paddingHorizontal:12,alignItems:"flex-start",backgroundColor:t.white},tableRowAlt:{backgroundColor:t.slate50},tableColKey:{flex:2,paddingRight:8},tableColVal:{flex:3},tableCellKey:{fontFamily:I,fontSize:11.5,fontWeight:"700",color:t.brandPurple},typePill:{alignSelf:"flex-start",borderRadius:4,borderWidth:1,paddingHorizontal:4,paddingVertical:1,marginTop:3},typePillText:{fontFamily:N.interBold,fontSize:9},tableCellValue:{fontFamily:I,fontSize:11.5,color:t.slate900,lineHeight:17},tableCodeBox:{backgroundColor:t.slate100,borderRadius:6,borderWidth:1,borderColor:t.slate200,padding:6},showMoreBtn:{flexDirection:"row",alignItems:"center",gap:4,alignSelf:"flex-start",marginTop:4,paddingVertical:2,paddingHorizontal:4},showMoreText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.brandPurple},emptyContainer:{padding:24,alignItems:"center",justifyContent:"center"},emptyText:{fontFamily:N.interMedium,fontSize:12,color:t.slate500},highlight:{backgroundColor:t.yellow200,color:t.yellow800,fontFamily:I,fontWeight:"700",borderRadius:2,paddingHorizontal:2}});export default qe;
179
+ </T>}),e=We.create({container:{backgroundColor:t.white,borderRadius:12,borderWidth:1,borderColor:t.grayBorderSecondary,overflow:"hidden",shadowColor:t.brandPurple,shadowOpacity:.04,shadowRadius:6,shadowOffset:{width:0,height:2},elevation:2,width:"100%"},snippetHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",backgroundColor:t.grayBackground,borderBottomWidth:1,borderBottomColor:t.grayBorderSecondary,paddingHorizontal:8,paddingVertical:5,gap:6,minHeight:38},headerLeft:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:1,minWidth:0},langBadge:{flexDirection:"row",alignItems:"center",backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,gap:4.5},langDot:{width:5,height:5,borderRadius:2.5,backgroundColor:t.emerald500},langBadgeText:{fontFamily:W,fontSize:9.5,color:t.primaryBlack,fontWeight:"700",letterSpacing:.3},metaBadge:{backgroundColor:t.white,borderRadius:6,borderWidth:1,borderColor:t.grayBorderSecondary,paddingHorizontal:6,paddingVertical:2.5,flexShrink:1},metaBadgeText:{fontFamily:W,fontSize:9.5,color:t.grayTextWeak,fontWeight:"600"},headerRight:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},snippetTabs:{flexDirection:"row",alignItems:"center",backgroundColor:`${t.slate200}80`,borderRadius:8,padding:2.5,borderWidth:1,borderColor:t.dividerColor,gap:2},snippetTabBtn:{flexDirection:"row",alignItems:"center",gap:4,paddingVertical:3.5,paddingHorizontal:8,borderRadius:6},snippetTabBtnActive:{backgroundColor:t.brandPurple,shadowColor:t.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:2,elevation:1},snippetTabText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.grayText},snippetTabTextActive:{color:t.white,fontFamily:N.interBold},toolToggleBtn:{paddingHorizontal:8,paddingVertical:3.5,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},toolToggleBtnActive:{backgroundColor:t.purpleShade50,borderColor:`${t.brandPurple}60`},toolToggleText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.grayText},toolToggleTextActive:{color:t.brandPurple,fontFamily:N.interBold},copyBtn:{width:27,height:27,borderRadius:6,backgroundColor:t.white,borderWidth:1,borderColor:t.grayBorderSecondary,alignItems:"center",justifyContent:"center"},copyBtnSuccess:{borderColor:t.greenMintBorder,backgroundColor:t.greenMintBg},editorBody:{backgroundColor:t.white,minHeight:80},prettyContainer:{padding:10,minWidth:"100%",backgroundColor:t.white},fullHeightScrollView:{flex:1},fullHeightScrollContent:{flexGrow:1},rawEditorAutoHeight:{width:"100%"},rawEditorFullWidth:{width:"100%"},rawHorizontalContent:{minWidth:"100%"},rawLinesWrapper:{paddingVertical:6,backgroundColor:t.white,width:"100%"},rawCodeLineRow:{flexDirection:"row",alignItems:"flex-start",minHeight:20,width:"100%"},gutterCell:{width:38,paddingRight:8,paddingTop:1,alignItems:"flex-end",justifyContent:"flex-start",borderRightWidth:1,borderRightColor:t.grayBorderSecondary,backgroundColor:t.grayBackground,userSelect:"none"},gutterNumber:{fontFamily:W,fontSize:11,lineHeight:18,color:t.slate400,textAlign:"right"},rawTextCell:{flex:1,paddingLeft:8,paddingRight:8,paddingTop:1,alignItems:"flex-start"},rawLineContentRow:{flexDirection:"row",alignItems:"flex-start",flexWrap:"wrap",minHeight:18},indentDots:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.gray300,letterSpacing:.5},rawMonospaceText:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.slate900},syntaxKey:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.syntaxKey,fontWeight:"700"},syntaxColon:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.syntaxColon,marginRight:4},syntaxString:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.syntaxString},syntaxNumber:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.syntaxNumber},syntaxBoolean:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.syntaxBoolean},syntaxNull:{fontFamily:W,fontSize:11.5,lineHeight:18,color:t.syntaxNull,fontStyle:"italic"},truncationBanner:{margin:10,backgroundColor:t.purple50,paddingVertical:8,paddingHorizontal:12,borderRadius:6,alignItems:"center",borderWidth:1,borderColor:t.purple200},truncationText:{fontFamily:N.interSemiBold,fontSize:11,color:t.brandPurple},tableView:{flex:1,width:"100%"},tableHeaderRow:{flexDirection:"row",backgroundColor:t.slate100,borderBottomWidth:1,borderBottomColor:t.slate200,paddingVertical:7,paddingHorizontal:12},tableHeaderCell:{fontFamily:N.interBold,fontSize:10.5,color:t.slate600,letterSpacing:.5,textTransform:"uppercase"},tableRow:{flexDirection:"row",borderBottomWidth:1,borderBottomColor:t.slate100,paddingVertical:8,paddingHorizontal:12,alignItems:"flex-start",backgroundColor:t.white},tableRowAlt:{backgroundColor:t.slate50},tableColKey:{flex:2,paddingRight:8},tableColVal:{flex:3},tableCellKey:{fontFamily:W,fontSize:11.5,fontWeight:"700",color:t.brandPurple},typePill:{alignSelf:"flex-start",borderRadius:4,borderWidth:1,paddingHorizontal:4,paddingVertical:1,marginTop:3},typePillText:{fontFamily:N.interBold,fontSize:9},tableCellValue:{fontFamily:W,fontSize:11.5,color:t.slate900,lineHeight:17},tableCodeBox:{backgroundColor:t.slate100,borderRadius:6,borderWidth:1,borderColor:t.slate200,padding:6},showMoreBtn:{flexDirection:"row",alignItems:"center",gap:4,alignSelf:"flex-start",marginTop:4,paddingVertical:2,paddingHorizontal:4},showMoreText:{fontFamily:N.interSemiBold,fontSize:10.5,color:t.brandPurple},emptyContainer:{padding:24,alignItems:"center",justifyContent:"center"},emptyText:{fontFamily:N.interMedium,fontSize:12,color:t.slate500},highlight:{backgroundColor:t.yellow200,color:t.yellow800,fontFamily:W,fontWeight:"700",borderRadius:2,paddingHorizontal:2}});export default Ye;
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
2
  import { LogCardProps } from '../types';
3
- declare const LogCard: React.NamedExoticComponent<LogCardProps>;
4
- export default LogCard;
3
+ declare function LogCard({ item, onPress, timelineMinStart, timelineTotalRange, isNew, isSelected, onToggleSelect, searchStr, }: LogCardProps): React.JSX.Element;
4
+ declare const _default: React.MemoExoticComponent<typeof LogCard>;
5
+ export default _default;
@@ -1,99 +1,101 @@
1
- import ee,{useEffect as re,useRef as oe,useMemo as te}from"react";import{Alert as ne,Animated as O,Linking as W,View as C,Pressable as M,Text as T,StyleSheet as A}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as e}from"../styles/AppColors";import{METHOD_COLORS as U}from"../constants";import{getStatusColor as Be,getDurationColor as Se,formatDateTime as Re,getSize as He,getPath as Ve,getBaseUrl as ze}from"../helpers";import{CalendarIcon as Ie,ClockIcon as E,SizeIcon as Le,CircleCheckIcon as $e,CircleAlertIcon as Oe,CircleXIcon as We,RepeatIcon as De,ForwardChevronIcon as Fe,GlobeIcon as Pe}from"./NetworkIcons";import{AppFonts as B}from"../styles/AppFonts";import Me from"./HighlightText";import Ae from"./TouchableScale";import{useTranslation as Ue}from"../i18n";const Ee=ee.memo(function({item:r,onPress:q,timelineMinStart:Ne,timelineTotalRange:Ge,isNew:L,isSelected:D,onToggleSelect:N,searchStr:G}){const{t:V}=Ue(),F=U[r.method]??U.ALL,R=te(()=>{try{const t=new URL(r.url),I=t.host,v=t.pathname+(t.search?t.search:""),Z=t.protocol==="https:";return{host:I,path:v||"/",isHttps:Z}}catch{const t=r.url.toLowerCase().startsWith("https:"),I=Ve(r.url);return{host:ze(r.url).replace(/^https?:\/\//,""),path:I||r.url,isHttps:t}}},[r.url]),J=t=>{t?.stopPropagation?.(),ne.alert(V("common.openInBrowser")||"Open in Browser",`${V("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
1
+ import re,{useEffect as te,useRef as oe,useMemo as ne}from"react";import{Alert as le,Animated as W,Linking as F,View as C,Pressable as A,Text as T,StyleSheet as E}from"react-native";import Ce,{Path as Te}from"react-native-svg";import{AppColors as e}from"../styles/AppColors";import{METHOD_COLORS as U}from"../constants";import{getStatusColor as Se,getDurationColor as Be,formatDateTime as Re,getSize as He,getPath as Ve,getBaseUrl as ze}from"../helpers";import{CalendarIcon as Ie,ClockIcon as N,SizeIcon as Le,CircleCheckIcon as $e,CircleAlertIcon as De,CircleXIcon as Oe,RepeatIcon as We,ForwardChevronIcon as Fe,GlobeIcon as Pe}from"./NetworkIcons";import{AppFonts as S}from"../styles/AppFonts";import G from"./HighlightText";import Me from"./TouchableScale";import{useTranslation as ve}from"../i18n";function Ae({item:r,onPress:B,timelineMinStart:Ue,timelineTotalRange:qe,isNew:$,isSelected:P,onToggleSelect:J,searchStr:j}){const{t:z}=ve(),M=U[r.method]??U.ALL,H=ne(()=>{try{const o=new URL(r.url),L=o.host,v=o.pathname+(o.search?o.search:""),ee=o.protocol==="https:";return{host:L,path:v||"/",isHttps:ee}}catch{const o=r.url.toLowerCase().startsWith("https:"),L=Ve(r.url);return{host:ze(r.url).replace(/^https?:\/\//,""),path:L||r.url,isHttps:o}}},[r.url]),K=o=>{o?.stopPropagation?.(),le.alert(z("common.openInBrowser")||"Open in Browser",`${z("common.openInBrowserPrompt")||"Are you sure you want to open this URL in your external browser?"}
2
2
 
3
- ${r.url}`,[{text:V("common.cancel")||"Cancel",style:"cancel"},{text:V("common.open")||"Open",onPress:()=>{W.canOpenURL(r.url).then(I=>{I?W.openURL(r.url):W.openURL(r.url).catch(()=>{})}).catch(()=>{})}}])},S=r.status===0||r.status!=null&&r.status>=400,H=r.status==null,$=Be(r.status),z=Se(r.duration),K=H?e.darkOrange:S?e.errorColor:e.greenColor,P=oe(new O.Value(L?.35:0)).current;re(()=>{L&&O.timing(P,{toValue:0,duration:1200,useNativeDriver:!1}).start()},[L]);const Q=()=>{if(H)return"...";if(r.status===0||r.status==null)return V("network.statusFailed")||"FAILED";const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t===200?"200 OK":t===201?"201 Created":t===204?"204 No Content":t===304?"304 Not Modified":t===400?"400 Bad Req":t===401?"401 Unauth":t===403?"403 Forbidden":t===404?"404 Not Found":t===500?"500 Error":String(r.status)},X=()=>{if(H)return<E color={e.darkOrange}size={10}/>;const t=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return t>=200&&t<300?<$e color={e.greenColor}size={10}/>:t>=300&&t<400?<De color={e.amber700}size={10}/>:t>=400&&t<500?<Oe color={e.darkOrange}size={10}/>:<We color={e.errorColor}size={10}/>},_=Re(r.startTime),Y=r.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={o.container}>
4
- <Ae onPress={q}style={[o.card,{borderLeftWidth:3.5,borderLeftColor:K,backgroundColor:S?e.errorCardBg:e.white}]}>
5
- <C style={o.cardBody}>
3
+ ${r.url}`,[{text:z("common.cancel")||"Cancel",style:"cancel"},{text:z("common.open")||"Open",onPress:()=>{F.canOpenURL(r.url).then(L=>{L?F.openURL(r.url):F.openURL(r.url).catch(()=>{})}).catch(()=>{})}}])},R=r.status===0||r.status!=null&&r.status>=400,V=r.status==null,D=Se(r.status),I=Be(r.duration),Q=V?e.darkOrange:R?e.errorColor:e.greenColor,O=oe(new W.Value($?.35:0)).current;te(()=>{$&&W.timing(O,{toValue:0,duration:1200,useNativeDriver:!0}).start()},[$,O]);const X=()=>{if(V)return"...";if(r.status===0||r.status==null)return z("network.statusFailed")||"FAILED";const o=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return o===200?"200 OK":o===201?"201 Created":o===204?"204 No Content":o===304?"304 Not Modified":o===400?"400 Bad Req":o===401?"401 Unauth":o===403?"403 Forbidden":o===404?"404 Not Found":o===500?"500 Error":String(r.status)},_=()=>{if(V)return<N color={e.darkOrange}size={10}/>;const o=typeof r.status=="number"?r.status:parseInt(String(r.status||0),10);return o>=200&&o<300?<$e color={e.greenColor}size={10}/>:o>=300&&o<400?<We color={e.amber700}size={10}/>:o>=400&&o<500?<De color={e.darkOrange}size={10}/>:<Oe color={e.errorColor}size={10}/>},Y=Re(r.startTime),Z=r.url.split("?")[0].toLowerCase().endsWith(".json");return<C style={t.container}>
4
+ <Me onPress={B}style={[t.card,{borderLeftWidth:3.5,borderLeftColor:Q,backgroundColor:R?e.errorCardBg:e.white}]}>
5
+ <C style={t.cardBody}>
6
6
 
7
- <C style={o.cardHeaderRow}>
8
- <C style={o.cardHeaderLeft}>
9
- <M onPress={()=>N(r.id)}hitSlop={12}style={[o.smallCheckbox,D&&o.smallCheckboxChecked]}>
10
- {D&&<Ce width={9}height={9}viewBox="0 0 24 24"fill="none">
7
+ <C style={t.cardHeaderRow}>
8
+ <C style={t.cardHeaderLeft}>
9
+ <A onPress={()=>J(r.id)}hitSlop={12}style={[t.smallCheckbox,P&&t.smallCheckboxChecked]}>
10
+ {P&&<Ce width={9}height={9}viewBox="0 0 24 24"fill="none">
11
11
  <Te d="M20 6L9 17l-5-5"stroke={e.white}strokeWidth="4"strokeLinecap="round"strokeLinejoin="round"/>
12
12
  </Ce>}
13
- </M>
13
+ </A>
14
14
 
15
- <T style={o.serialNumber}>#{r.id+1}</T>
15
+ <T style={t.serialNumber}>#{r.id+1}</T>
16
16
 
17
- <C style={[o.methodBadge,{backgroundColor:F}]}>
18
- <T style={o.methodBadgeText}>
17
+ <C style={[t.methodBadge,{backgroundColor:M}]}>
18
+ <T style={t.methodBadgeText}>
19
19
  {r.method}
20
20
  </T>
21
21
  </C>
22
22
 
23
- {r.client&&<C style={[o.chip,{backgroundColor:r.client==="axios"?`${e.purple}14`:r.client==="apollo"||r.client==="graphql"?`${e.pink500}14`:r.client==="xhr"?`${e.amber500}14`:`${e.sky500}14`,borderColor:r.client==="axios"?`${e.purple}30`:r.client==="apollo"||r.client==="graphql"?`${e.pink500}30`:r.client==="xhr"?`${e.amber500}30`:`${e.sky500}30`}]}>
24
- <T style={[o.chipText,{color:r.client==="axios"?e.purple:r.client==="apollo"||r.client==="graphql"?e.pink500:r.client==="xhr"?e.amber700:e.sky600}]}>
23
+ {r.client&&<C style={[t.chip,{backgroundColor:r.client==="axios"?`${e.purple}14`:r.client==="apollo"||r.client==="graphql"?`${e.pink500}14`:r.client==="xhr"?`${e.amber500}14`:`${e.sky500}14`,borderColor:r.client==="axios"?`${e.purple}30`:r.client==="apollo"||r.client==="graphql"?`${e.pink500}30`:r.client==="xhr"?`${e.amber500}30`:`${e.sky500}30`}]}>
24
+ <T style={[t.chipText,{color:r.client==="axios"?e.purple:r.client==="apollo"||r.client==="graphql"?e.pink500:r.client==="xhr"?e.amber700:e.sky600}]}>
25
25
  {r.client.toUpperCase()}
26
26
  </T>
27
27
  </C>}
28
28
 
29
29
 
30
- {(r.url.toLowerCase().includes("graphql")||r.client==="apollo"||r.client==="graphql")&&<C style={[o.chip,{backgroundColor:e.roseBg,borderColor:e.roseBorder}]}>
31
- <T style={[o.chipText,{color:e.pink600}]}>
30
+ {(r.url.toLowerCase().includes("graphql")||r.client==="apollo"||r.client==="graphql")&&<C style={[t.chip,{backgroundColor:e.roseBg,borderColor:e.roseBorder}]}>
31
+ <T style={[t.chipText,{color:e.pink600}]}>
32
32
  GQL
33
33
  </T>
34
34
  </C>}
35
35
  </C>
36
36
 
37
- <C style={o.cardHeaderRight}>
38
- <C style={[o.statusPill,{backgroundColor:S?`${e.errorColor}14`:H?`${e.darkOrange}14`:`${$}14`,borderColor:S?`${e.errorColor}33`:H?`${e.darkOrange}33`:`${$}33`}]}>
39
- {X()}
40
- <T style={[o.statusPillText,{color:S?e.errorColor:H?e.darkOrange:$}]}>
41
- {Q()}
37
+ <C style={t.cardHeaderRight}>
38
+ <C style={[t.statusPill,{backgroundColor:R?`${e.errorColor}14`:V?`${e.darkOrange}14`:`${D}14`,borderColor:R?`${e.errorColor}33`:V?`${e.darkOrange}33`:`${D}33`}]}>
39
+ {_()}
40
+ <T style={[t.statusPillText,{color:R?e.errorColor:V?e.darkOrange:D}]}>
41
+ {X()}
42
42
  </T>
43
43
  </C>
44
- <M onPress={J}hitSlop={8}style={o.globeBtn}accessibilityRole="button"accessibilityLabel="Open in Browser">
44
+ <A onPress={K}hitSlop={8}style={t.globeBtn}accessibilityRole="button"accessibilityLabel="Open in Browser">
45
45
  <Pe color={e.grayTextWeak}size={12}/>
46
- </M>
46
+ </A>
47
47
  <Fe color={e.grayTextWeak}size={13}/>
48
48
  </C>
49
49
  </C>
50
50
 
51
51
 
52
- <C style={o.urlBox}>
53
- <C style={o.urlMainRow}>
54
- <Me text={R.path}search={G}style={o.pathText}highlightStyle={o.highlight}numberOfLines={1}ellipsizeMode="middle"/>
55
- <C style={o.urlBadgeRow}>
56
- {Y&&<C style={o.jsonBadge}>
57
- <T style={o.jsonBadgeText}>.json</T>
52
+ <C style={t.urlBox}>
53
+
54
+ <C style={t.urlMainRow}>
55
+ <C style={t.hostRow}>
56
+ <C style={[t.protoBadge,{backgroundColor:H.isHttps?`${e.emerald600}12`:`${e.amber600}12`,borderColor:H.isHttps?`${e.emerald600}2B`:`${e.amber600}2B`}]}>
57
+ <T style={[t.protoBadgeText,{color:H.isHttps?e.emerald600:e.amber700}]}>
58
+ {H.isHttps?"HTTPS":"HTTP"}
59
+ </T>
60
+ </C>
61
+ <G text={H.host||r.url}search={j}style={t.hostText}highlightStyle={t.highlight}numberOfLines={1}ellipsizeMode="tail"/>
62
+ </C>
63
+ <C style={t.urlBadgeRow}>
64
+ {Z&&<C style={t.jsonBadge}>
65
+ <T style={t.jsonBadgeText}>.json</T>
58
66
  </C>}
59
- {r.duplicateCount!=null&&r.duplicateCount>1&&<C style={o.dupBadge}>
60
- <T style={o.dupBadgeText}>×{r.duplicateCount}</T>
67
+ {r.duplicateCount!=null&&r.duplicateCount>1&&<C style={t.dupBadge}>
68
+ <T style={t.dupBadgeText}>×{r.duplicateCount}</T>
61
69
  </C>}
62
70
  </C>
63
71
  </C>
64
72
 
65
- <C style={o.hostRow}>
66
- <C style={[o.protoBadge,{backgroundColor:R.isHttps?`${e.emerald600}12`:`${e.amber600}12`,borderColor:R.isHttps?`${e.emerald600}2B`:`${e.amber600}2B`}]}>
67
- <T style={[o.protoBadgeText,{color:R.isHttps?e.emerald600:e.amber700}]}>
68
- {R.isHttps?"HTTPS":"HTTP"}
69
- </T>
70
- </C>
71
- <T style={o.hostText}numberOfLines={1}ellipsizeMode="tail">
72
- {R.host||r.url}
73
- </T>
73
+
74
+ <C style={t.slugRow}>
75
+ <G text={H.path}search={j}style={t.pathText}highlightStyle={t.highlight}numberOfLines={1}ellipsizeMode="middle"/>
74
76
  </C>
75
77
  </C>
76
78
 
77
79
 
78
- <C style={o.cardFooterRow}>
79
- <C style={o.footerLeft}>
80
- <C style={o.cardDateRow}>
80
+ <C style={t.cardFooterRow}>
81
+ <C style={t.footerLeft}>
82
+ <C style={t.cardDateRow}>
81
83
  <Ie color={e.grayTextWeak}size={10}/>
82
- <T style={o.cardDateText}numberOfLines={1}>{_}</T>
84
+ <T style={t.cardDateText}numberOfLines={1}>{Y}</T>
83
85
  </C>
84
86
  </C>
85
87
 
86
- <C style={o.footerRight}>
87
- {r.response!=null&&<C style={o.metaStatChip}>
88
+ <C style={t.footerRight}>
89
+ {r.response!=null&&<C style={t.metaStatChip}>
88
90
  <Le color={e.purple}size={9}/>
89
- <T style={o.metaStatText}>
91
+ <T style={t.metaStatText}>
90
92
  {He(r.response)}
91
93
  </T>
92
94
  </C>}
93
95
 
94
- {r.duration!=null&&!S&&<C style={[o.metaStatChip,{backgroundColor:`${z}12`,borderColor:`${z}2E`}]}>
95
- <E color={z}size={9}/>
96
- <T style={[o.metaStatText,{color:z}]}>
96
+ {r.duration!=null&&!R&&<C style={[t.metaStatChip,{backgroundColor:`${I}12`,borderColor:`${I}2E`}]}>
97
+ <N color={I}size={9}/>
98
+ <T style={[t.metaStatText,{color:I}]}>
97
99
  {r.duration}ms
98
100
  </T>
99
101
  </C>}
@@ -101,11 +103,11 @@ ${r.url}`,[{text:V("common.cancel")||"Cancel",style:"cancel"},{text:V("common.op
101
103
  </C>
102
104
 
103
105
 
104
- <C style={o.waterfallContainer}>
105
- {typeof r.duration=="number"&&r.duration>0&&!S&&<C style={[o.waterfallBar,{width:`${Math.min(100,Math.max(6,r.duration/1200*100))}%`,backgroundColor:z}]}/>}
106
+ <C style={t.waterfallContainer}>
107
+ {typeof r.duration=="number"&&r.duration>0&&!R&&<C style={[t.waterfallBar,{width:`${Math.min(100,Math.max(6,r.duration/1200*100))}%`,backgroundColor:I}]}/>}
106
108
  </C>
107
109
  </C>
108
110
 
109
- {L&&<O.View pointerEvents="none"style={[A.absoluteFill,{backgroundColor:F,opacity:P}]}/>}
110
- </Ae>
111
- </C>}),o=A.create({container:{paddingHorizontal:8,paddingVertical:4,height:126,justifyContent:"center"},card:{height:118,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:e.dividerColor,shadowColor:e.shadowColorString},cardBody:{height:"100%",paddingHorizontal:12,paddingTop:9,paddingBottom:7,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:8,gap:6,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:0},smallCheckbox:{width:15,height:15,borderRadius:4,borderWidth:1.5,borderColor:e.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:e.white},smallCheckboxChecked:{backgroundColor:e.purple,borderColor:e.purple},serialNumber:{fontFamily:B.interBold,color:e.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:7,paddingVertical:2.5,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:B.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:e.white},chip:{paddingHorizontal:6,paddingVertical:2,borderRadius:4,borderWidth:1},chipText:{fontFamily:B.interBold,fontSize:9,lineHeight:12},statusPill:{flexDirection:"row",alignItems:"center",gap:4,paddingHorizontal:7,paddingVertical:2.5,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:B.interBold,fontSize:10,lineHeight:13},globeBtn:{padding:3,borderRadius:4,backgroundColor:`${e.grayTextWeak}12`,alignItems:"center",justifyContent:"center"},urlBox:{backgroundColor:e.grayBackground,borderRadius:7,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:9,paddingVertical:5,height:48,minHeight:48,maxHeight:48,justifyContent:"center",gap:3,overflow:"hidden"},urlMainRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},pathText:{fontFamily:B.interBold,fontSize:12,lineHeight:16,color:e.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},jsonBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.darkOrange},dupBadge:{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:B.interBold,fontSize:8.5,color:e.purple},hostRow:{flexDirection:"row",alignItems:"center",gap:5,minHeight:15},protoBadge:{paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5,borderWidth:1},protoBadgeText:{fontFamily:B.interBold,fontSize:8,lineHeight:10},hostText:{fontFamily:B.interMedium,fontSize:10,lineHeight:13,color:e.grayTextWeak,flex:1},highlight:{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:6},footerLeft:{flexDirection:"row",alignItems:"center",gap:6,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:5,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:B.interRegular,fontSize:10,lineHeight:13,color:e.slate400},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:B.interBold,color:e.violetSoftText,fontSize:9,lineHeight:12},waterfallContainer:{height:2.5,width:"100%",backgroundColor:e.graySurface,borderRadius:1.5,overflow:"hidden",marginTop:2},waterfallBar:{height:"100%",borderRadius:1.5}});export default Ee;
111
+ {$&&<W.View pointerEvents="none"style={[E.absoluteFill,{backgroundColor:M,opacity:O}]}/>}
112
+ </Me>
113
+ </C>}const t=E.create({container:{paddingHorizontal:8,paddingVertical:4,height:126,justifyContent:"center"},card:{height:118,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:e.dividerColor,shadowColor:e.shadowColorString},cardBody:{height:"100%",paddingHorizontal:8,paddingTop:8,paddingBottom:6,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:4,gap:4.5,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},smallCheckbox:{width:15,height:15,borderRadius:4,borderWidth:1.5,borderColor:e.grayTextWeak,alignItems:"center",justifyContent:"center",backgroundColor:e.white},smallCheckboxChecked:{backgroundColor:e.purple,borderColor:e.purple},serialNumber:{fontFamily:S.interBold,color:e.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:e.white},chip:{paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4,borderWidth:1},chipText:{fontFamily:S.interBold,fontSize:9,lineHeight:12},statusPill:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12},globeBtn:{padding:3,borderRadius:4,backgroundColor:`${e.grayTextWeak}12`,alignItems:"center",justifyContent:"center"},urlBox:{backgroundColor:e.grayBackground,borderRadius:7,borderWidth:1,borderColor:e.dividerColor,paddingHorizontal:7,paddingVertical:4.5,height:48,minHeight:48,maxHeight:48,justifyContent:"center",gap:2.5,overflow:"hidden"},urlMainRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:4,minHeight:16},hostRow:{flexDirection:"row",alignItems:"center",gap:5,flex:1,minWidth:0},protoBadge:{paddingHorizontal:4,paddingVertical:1,borderRadius:3.5,borderWidth:1},protoBadgeText:{fontFamily:S.interBold,fontSize:8,lineHeight:10},hostText:{fontFamily:S.interBold,fontSize:11.5,lineHeight:15,color:e.primaryBlack,flex:1},urlBadgeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},jsonBadge:{backgroundColor:`${e.darkOrange}14`,borderColor:`${e.darkOrange}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},jsonBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:e.darkOrange},dupBadge:{backgroundColor:`${e.purple}14`,borderColor:`${e.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:e.purple},slugRow:{flexDirection:"row",alignItems:"center",minHeight:15},pathText:{fontFamily:S.interMedium,fontSize:10.5,lineHeight:14,color:e.slate600||e.grayText,flex:1},highlight:{backgroundColor:e.yellowHighlight,color:e.primaryBlack,borderRadius:2},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:4},footerLeft:{flexDirection:"row",alignItems:"center",gap:4.5,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:S.interRegular,fontSize:10,lineHeight:13,color:e.slate400},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:e.violetSoftBg,borderColor:e.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:S.interBold,color:e.violetSoftText,fontSize:9,lineHeight:12},waterfallContainer:{height:2.5,width:"100%",backgroundColor:e.graySurface,borderRadius:1.5,overflow:"hidden",marginTop:2},waterfallBar:{height:"100%",borderRadius:1.5}});function Ee(r,B){return r.item===B.item&&r.isSelected===B.isSelected&&r.isNew===B.isNew&&r.searchStr===B.searchStr&&r.timelineMinStart===B.timelineMinStart&&r.timelineTotalRange===B.timelineTotalRange&&r.onPress===B.onPress&&r.onToggleSelect===B.onToggleSelect}export default re.memo(Ae,Ee);
@@ -1,11 +1,11 @@
1
- import F from"react";import{StyleSheet as G,Text as T}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{escapeRegex as U,handleOpenExternalLink as H}from"../helpers";const M=/("(?:\\.|[^"\\])*"(?=\s*:))|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\b(?:true|false)\b)|(\b(?:null|undefined|NaN)\b)|(https?:\/\/[^\s"',]+)|(\[[\w\s_-]+\])|([{}[\],:])|([^"'\d\s{}[\],:]+|[ \t\r\n]+)/g;export const tokenizeText=l=>{if(!l)return[];const t=[];let e;for(M.lastIndex=0;(e=M.exec(l))!==null;)e[1]?t.push({type:"key",value:e[1]}):e[2]?t.push({type:"string",value:e[2]}):e[3]?t.push({type:"number",value:e[3]}):e[4]?t.push({type:"boolean",value:e[4]}):e[5]?t.push({type:"null",value:e[5]}):e[6]?t.push({type:"url",value:e[6]}):e[7]?t.push({type:"tag",value:e[7]}):e[8]?t.push({type:"bracket",value:e[8]}):e[9]&&t.push({type:"plain",value:e[9]});return t};const X=l=>{switch(l){case"key":return r.sky600;case"string":return r.emerald600;case"number":return r.amber600;case"boolean":return r.purple;case"null":return r.red600;case"url":return r.sky600;case"tag":return r.violet600;case"bracket":return r.slate500;default:return r.primaryBlack}};export const LogSyntaxHighlighter=F.memo(({text:l,search:t,numberOfLines:e,style:O,detectLinks:L=!0})=>{if(!l)return null;const z=F.useMemo(()=>tokenizeText(l),[l]),A=(n,S)=>{const K=X(n.type),C=n.type==="url",P=n.type==="key",R={color:K,fontFamily:P?w.interBold:w.interRegular,textDecorationLine:C?"underline":"none"};if(!t||t.trim().length===0)return<T key={S}style={R}onPress={C&&L?()=>H(n.value):void 0}>
1
+ import F from"react";import{StyleSheet as G,Text as T}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as R}from"../styles/AppFonts";import{escapeRegex as U,handleOpenExternalLink as H}from"../helpers";const M=/("(?:\\.|[^"\\])*"(?=\s*:))|("(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*')|(\b-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b)|(\b(?:true|false)\b)|(\b(?:null|undefined|NaN)\b)|(https?:\/\/[^\s"',]+)|(\[[\w\s_-]+\])|([{}[\],:])|([^"'\d\s{}[\],:]+|[ \t\r\n]+)/g;export const tokenizeText=l=>{if(!l)return[];const t=[];let e;for(M.lastIndex=0;(e=M.exec(l))!==null;)e[1]?t.push({type:"key",value:e[1]}):e[2]?t.push({type:"string",value:e[2]}):e[3]?t.push({type:"number",value:e[3]}):e[4]?t.push({type:"boolean",value:e[4]}):e[5]?t.push({type:"null",value:e[5]}):e[6]?t.push({type:"url",value:e[6]}):e[7]?t.push({type:"tag",value:e[7]}):e[8]?t.push({type:"bracket",value:e[8]}):e[9]&&t.push({type:"plain",value:e[9]});return t};const X=l=>{switch(l){case"key":return r.sky600;case"string":return r.emerald600;case"number":return r.amber600;case"boolean":return r.purple;case"null":return r.red600;case"url":return r.sky600;case"tag":return r.violet600;case"bracket":return r.slate500;default:return r.primaryBlack}};export const LogSyntaxHighlighter=F.memo(({text:l,search:t,numberOfLines:e,style:O,detectLinks:L=!0})=>{if(!l)return null;const z=F.useMemo(()=>tokenizeText(l),[l]),A=(n,S)=>{const K=X(n.type),C=n.type==="url",P=n.type==="key",w={color:K,fontFamily:P?R.interBold:R.interRegular,textDecorationLine:C?"underline":"none"};if(!t||t.trim().length===0)return<T key={S}style={w}onPress={C&&L?()=>H(n.value):void 0}>
2
2
  {n.value}
3
- </T>;const _=new RegExp(`(${U(t.trim())})`,"gi"),D=n.value.split(_);return<T key={S}style={R}>
4
- {D.map((E,B)=>E.toLowerCase()===t.trim().toLowerCase()?<T key={B}style={[R,N.searchHighlight]}>
3
+ </T>;const _=new RegExp(`(${U(t.trim())})`,"gi"),D=n.value.split(_);return<T key={S}style={w}>
4
+ {D.map((E,B)=>E.toLowerCase()===t.trim().toLowerCase()?<T key={B}style={[w,N.searchHighlight]}>
5
5
  {E}
6
- </T>:<T key={B}style={R}onPress={C&&L?()=>H(n.value):void 0}>
6
+ </T>:<T key={B}style={w}onPress={C&&L?()=>H(n.value):void 0}>
7
7
  {E}
8
8
  </T>)}
9
9
  </T>};return<T style={[N.containerText,O]}numberOfLines={e}>
10
10
  {z.map(A)}
11
- </T>});const N=G.create({containerText:{fontFamily:w.interRegular,fontSize:12,lineHeight:18,color:r.primaryBlack},searchHighlight:{backgroundColor:"#fef08a",color:"#854d0e",fontFamily:w.interBold,borderRadius:2}});export default LogSyntaxHighlighter;
11
+ </T>});const N=G.create({containerText:{fontFamily:R.interRegular,fontSize:12,lineHeight:18,color:r.primaryBlack},searchHighlight:{backgroundColor:r.yellow200,color:r.yellow800,fontFamily:R.interBold,borderRadius:2}});export default LogSyntaxHighlighter;
@@ -1,33 +1,33 @@
1
- import{Component as E}from"react";import{StyleSheet as S,Text as F,View as C,TouchableOpacity as T,Platform as D}from"react-native";import{AppFonts as w}from"../styles/AppFonts";import{copyToClipboard as k}from"../helpers";import{WarningTriangleIcon as B,RefreshCcwIcon as I,CopyIcon as O}from"./NetworkIcons";import{handleInterceptedCrash as V}from"../customHooks/crashHandler";import{CrashType as W}from"../types/enums";export class ModuleErrorBoundary extends E{constructor(){super(...arguments),this.state={hasError:!1,error:null,copied:!1},this.handleRetry=()=>{this.setState({hasError:!1,error:null,copied:!1}),this.props.onRetry&&this.props.onRetry()},this.handleCopy=()=>{if(!this.state.error)return;const e=`[Module Error: ${this.props.moduleName||"Micro-Feature"}]
1
+ import{Component as I}from"react";import{StyleSheet as O,Text as T,View as C,TouchableOpacity as E,Platform as k}from"react-native";import{AppFonts as S}from"../styles/AppFonts";import{AppColors as e}from"../styles/AppColors";import{copyToClipboard as V}from"../helpers";import{WarningTriangleIcon as D,RefreshCcwIcon as B,CopyIcon as F}from"./NetworkIcons";import{handleInterceptedCrash as W}from"../customHooks/crashHandler";import{CrashType as M}from"../types/enums";export class ModuleErrorBoundary extends I{constructor(){super(...arguments),this.state={hasError:!1,error:null,copied:!1},this.handleRetry=()=>{this.setState({hasError:!1,error:null,copied:!1}),this.props.onRetry&&this.props.onRetry()},this.handleCopy=()=>{if(!this.state.error)return;const t=`[Module Error: ${this.props.moduleName||"Micro-Feature"}]
2
2
  Message: ${this.state.error.message}
3
- Stack: ${this.state.error.stack||"N/A"}`;k(e),this.setState({copied:!0}),setTimeout(()=>{this.setState({copied:!1})},2e3)}}static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,b){try{V(e,e?.stack,!1,W.Js,b.componentStack||void 0)}catch{}this.props.onError&&this.props.onError(e,b)}render(){if(this.state.hasError&&this.state.error){const{fallback:e,moduleName:b="UI Module",containerStyle:R}=this.props;return typeof e=="function"?e(this.state.error,this.handleRetry):e||<C style={[t.card,R]}>
4
- <C style={t.headerRow}>
5
- <C style={t.titleRow}>
6
- <B color="#DC2626"size={16}/>
7
- <F style={t.moduleName}numberOfLines={1}>
8
- {b}
9
- </F>
3
+ Stack: ${this.state.error.stack||"N/A"}`;V(t),this.setState({copied:!0}),setTimeout(()=>{this.setState({copied:!1})},2e3)}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,R){try{W(t,t?.stack,!1,M.Js,R.componentStack||void 0)}catch{}this.props.onError&&this.props.onError(t,R)}render(){if(this.state.hasError&&this.state.error){const{fallback:t,moduleName:R="UI Module",containerStyle:z}=this.props;return typeof t=="function"?t(this.state.error,this.handleRetry):t||<C style={[r.card,z]}>
4
+ <C style={r.headerRow}>
5
+ <C style={r.titleRow}>
6
+ <D color={e.red600}size={16}/>
7
+ <T style={r.moduleName}numberOfLines={1}>
8
+ {R}
9
+ </T>
10
10
  </C>
11
- <C style={t.badge}>
12
- <F style={t.badgeText}>FAULT ISOLATED</F>
11
+ <C style={r.badge}>
12
+ <T style={r.badgeText}>FAULT ISOLATED</T>
13
13
  </C>
14
14
  </C>
15
15
 
16
- <F style={t.message}numberOfLines={2}>
16
+ <T style={r.message}numberOfLines={2}>
17
17
  {this.state.error.message||"An unexpected rendering error occurred in this module."}
18
- </F>
18
+ </T>
19
19
 
20
- <C style={t.actionsRow}>
21
- <T style={t.retryButton}onPress={this.handleRetry}activeOpacity={.7}>
22
- <I color="#FFFFFF"size={12}/>
23
- <F style={t.retryText}>Retry Module</F>
24
- </T>
20
+ <C style={r.actionsRow}>
21
+ <E style={r.retryButton}onPress={this.handleRetry}activeOpacity={.7}>
22
+ <B color={e.white}size={12}/>
23
+ <T style={r.retryText}>Retry Module</T>
24
+ </E>
25
25
 
26
- <T style={t.copyButton}onPress={this.handleCopy}activeOpacity={.7}>
27
- <O color="#475569"size={12}/>
28
- <F style={t.copyText}>
26
+ <E style={r.copyButton}onPress={this.handleCopy}activeOpacity={.7}>
27
+ <F color={e.slate600}size={12}/>
28
+ <T style={r.copyText}>
29
29
  {this.state.copied?"Copied":"Copy Error"}
30
- </F>
31
- </T>
30
+ </T>
31
+ </E>
32
32
  </C>
33
- </C>}return this.props.children}}export default ModuleErrorBoundary;const t=S.create({card:{backgroundColor:"#FEF2F2",borderColor:"#FECDD3",borderWidth:1.2,borderRadius:16,padding:14,marginVertical:6,gap:10,...D.select({ios:{shadowColor:"#DC2626",shadowOffset:{width:0,height:2},shadowOpacity:.06,shadowRadius:6},android:{elevation:2}})},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},moduleName:{fontSize:12.5,fontWeight:"800",color:"#991B1B",fontFamily:w.interBold,flexShrink:1},badge:{backgroundColor:"#FEE2E2",paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,borderColor:"#FCA5A5"},badgeText:{fontSize:8.5,fontWeight:"800",color:"#B91C1C",letterSpacing:.4},message:{fontSize:11.5,color:"#7F1D1D",lineHeight:16,fontFamily:w.interRegular},actionsRow:{flexDirection:"row",alignItems:"center",gap:8,marginTop:2},retryButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:"#DC2626",paddingVertical:7,paddingHorizontal:12,borderRadius:9},retryText:{fontSize:11,fontWeight:"700",color:"#FFFFFF",fontFamily:w.interBold},copyButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:4,backgroundColor:"#F1F5F9",paddingVertical:7,paddingHorizontal:12,borderRadius:9,borderWidth:1,borderColor:"#E2E8F0"},copyText:{fontSize:11,fontWeight:"600",color:"#475569",fontFamily:w.interMedium}});
33
+ </C>}return this.props.children}}export default ModuleErrorBoundary;const r=O.create({card:{backgroundColor:e.red50,borderColor:`${e.red500}33`,borderWidth:1.2,borderRadius:16,padding:14,marginVertical:6,gap:10,...k?.select?k.select({ios:{shadowColor:e.red600,shadowOffset:{width:0,height:2},shadowOpacity:.06,shadowRadius:6},android:{elevation:2}}):{elevation:2}},headerRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",gap:6},titleRow:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},moduleName:{fontSize:12.5,fontWeight:"800",color:e.redErrorText,fontFamily:S.interBold,flexShrink:1},badge:{backgroundColor:e.red100,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,borderColor:`${e.red500}4D`},badgeText:{fontSize:8.5,fontWeight:"800",color:e.rose700,letterSpacing:.4},message:{fontSize:11.5,color:e.redErrorText,lineHeight:16,fontFamily:S.interRegular},actionsRow:{flexDirection:"row",alignItems:"center",gap:8,marginTop:2},retryButton:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:6,backgroundColor:e.red600,paddingVertical:7,paddingHorizontal:12,borderRadius:9},retryText:{fontSize:11,fontWeight:"700",color:e.white,fontFamily:S.interBold},copyButton:{flexDirection:"row",alignItems:"center",justifyContent:"center",gap:4,backgroundColor:e.graySurface,paddingVertical:7,paddingHorizontal:12,borderRadius:9,borderWidth:1,borderColor:e.grayBorderSecondary},copyText:{fontSize:11,fontWeight:"600",color:e.grayText,fontFamily:S.interMedium}});