react-native-inapp-inspector 2.3.15 → 2.3.17

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 (381) hide show
  1. package/README.md +1 -0
  2. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +438 -7
  3. package/bin/cli.js +0 -0
  4. package/dist/commonjs/capture.d.ts +26 -0
  5. package/dist/commonjs/capture.js +32 -0
  6. package/dist/commonjs/components/AnalyticsEventCard.js +11 -11
  7. package/dist/commonjs/components/AnimatedEntrance.js +6 -70
  8. package/dist/commonjs/components/DomainHeader.js +3 -48
  9. package/dist/commonjs/components/EmptyState.js +2 -2
  10. package/dist/commonjs/components/HeadersSection.js +14 -34
  11. package/dist/commonjs/components/Inspector/AnalyticsTab.js +1 -24
  12. package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -23
  13. package/dist/commonjs/components/Inspector/CrashTab.js +4 -25
  14. package/dist/commonjs/components/Inspector/DebuggingTab.js +2 -2
  15. package/dist/commonjs/components/Inspector/FeedbackModal.d.ts +7 -0
  16. package/dist/commonjs/components/Inspector/FeedbackModal.js +552 -0
  17. package/dist/commonjs/components/Inspector/InspectorHeader.js +675 -285
  18. package/dist/commonjs/components/Inspector/MainScreen.js +66 -69
  19. package/dist/commonjs/components/Inspector/MediaGalleryTab.d.ts +2 -0
  20. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +307 -0
  21. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +11 -0
  22. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +393 -0
  23. package/dist/commonjs/components/Inspector/NetworkTab.js +196 -206
  24. package/dist/commonjs/components/Inspector/NpmStarPrompt.d.ts +3 -0
  25. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +494 -0
  26. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +4 -9
  27. package/dist/commonjs/components/Inspector/PerformanceTab.js +8 -1
  28. package/dist/commonjs/components/Inspector/ReduxTab.js +4 -24
  29. package/dist/commonjs/components/Inspector/SettingsPanel.js +1280 -173
  30. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +2 -2
  31. package/dist/commonjs/components/Inspector/StorageTab.js +3 -26
  32. package/dist/commonjs/components/Inspector/TabBar.js +55 -25
  33. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -10
  34. package/dist/commonjs/components/JsonViewer.js +43 -20
  35. package/dist/commonjs/components/LogCard.js +5 -5
  36. package/dist/commonjs/components/MetaAccordion.js +78 -80
  37. package/dist/commonjs/components/NetworkIcons.d.ts +13 -0
  38. package/dist/commonjs/components/NetworkIcons.js +83 -2
  39. package/dist/commonjs/components/SectionHeader.js +3 -48
  40. package/dist/commonjs/components/SkeletonPlaceholder.js +2 -2
  41. package/dist/commonjs/components/SourcePageCard.js +43 -45
  42. package/dist/commonjs/components/Toast.js +4 -4
  43. package/dist/commonjs/components/TouchableScale.js +9 -65
  44. package/dist/commonjs/components/TreeNode.js +2 -14
  45. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  46. package/dist/commonjs/constants/telemetryConfig.js +3 -3
  47. package/dist/commonjs/constants/version.d.ts +1 -1
  48. package/dist/commonjs/constants/version.js +1 -1
  49. package/dist/commonjs/customHooks/useAccordion.d.ts +3 -8
  50. package/dist/commonjs/customHooks/useAccordion.js +6 -36
  51. package/dist/commonjs/helpers/index.d.ts +3 -1
  52. package/dist/commonjs/helpers/index.js +11 -1
  53. package/dist/commonjs/helpers/remoteConfig.d.ts +4 -0
  54. package/dist/commonjs/helpers/remoteConfig.js +165 -0
  55. package/dist/commonjs/helpers/searchQueryParser.js +2 -0
  56. package/dist/commonjs/helpers/telemetry.d.ts +5 -0
  57. package/dist/commonjs/helpers/telemetry.js +339 -8
  58. package/dist/commonjs/i18n/locales/en.json +66 -2
  59. package/dist/commonjs/index.d.ts +2 -0
  60. package/dist/commonjs/index.js +70 -23
  61. package/dist/commonjs/native/NativeInspector.d.ts +60 -0
  62. package/dist/commonjs/native/NativeInspector.js +109 -2
  63. package/dist/commonjs/native/NativeNetworkInspector.d.ts +8 -0
  64. package/dist/commonjs/styles/AppColors.d.ts +36 -0
  65. package/dist/commonjs/styles/AppColors.js +36 -0
  66. package/dist/commonjs/styles/AppFonts.d.ts +2 -0
  67. package/dist/commonjs/styles/AppFonts.js +1 -0
  68. package/dist/commonjs/styles/index.d.ts +25 -1
  69. package/dist/commonjs/styles/index.js +22 -1
  70. package/dist/commonjs/types/enums.d.ts +2 -0
  71. package/dist/commonjs/types/enums.js +2 -0
  72. package/dist/commonjs/types/index.d.ts +2 -2
  73. package/dist/commonjs/types/interfaces.d.ts +12 -0
  74. package/dist/esm/capture.d.ts +26 -0
  75. package/dist/esm/capture.js +29 -0
  76. package/dist/esm/components/AnalyticsEventCard.js +11 -11
  77. package/dist/esm/components/AnimatedEntrance.js +4 -38
  78. package/dist/esm/components/DomainHeader.js +4 -16
  79. package/dist/esm/components/EmptyState.js +2 -2
  80. package/dist/esm/components/HeadersSection.js +16 -36
  81. package/dist/esm/components/Inspector/AnalyticsTab.js +3 -26
  82. package/dist/esm/components/Inspector/ConsoleTab.js +3 -25
  83. package/dist/esm/components/Inspector/CrashTab.js +6 -27
  84. package/dist/esm/components/Inspector/DebuggingTab.js +3 -3
  85. package/dist/esm/components/Inspector/FeedbackModal.d.ts +7 -0
  86. package/dist/esm/components/Inspector/FeedbackModal.js +515 -0
  87. package/dist/esm/components/Inspector/InspectorHeader.js +678 -288
  88. package/dist/esm/components/Inspector/MainScreen.js +67 -70
  89. package/dist/esm/components/Inspector/MediaGalleryTab.d.ts +2 -0
  90. package/dist/esm/components/Inspector/MediaGalleryTab.js +267 -0
  91. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +11 -0
  92. package/dist/esm/components/Inspector/MediaPreviewModal.js +353 -0
  93. package/dist/esm/components/Inspector/NetworkTab.js +199 -209
  94. package/dist/esm/components/Inspector/NpmStarPrompt.d.ts +3 -0
  95. package/dist/esm/components/Inspector/NpmStarPrompt.js +454 -0
  96. package/dist/esm/components/Inspector/NpmUpdateToast.js +5 -10
  97. package/dist/esm/components/Inspector/PerformanceTab.js +8 -1
  98. package/dist/esm/components/Inspector/ReduxTab.js +6 -26
  99. package/dist/esm/components/Inspector/SettingsPanel.js +1283 -176
  100. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +2 -2
  101. package/dist/esm/components/Inspector/StorageTab.js +3 -26
  102. package/dist/esm/components/Inspector/TabBar.js +56 -26
  103. package/dist/esm/components/Inspector/UpdateAvailableModal.js +6 -11
  104. package/dist/esm/components/JsonViewer.js +43 -20
  105. package/dist/esm/components/LogCard.js +5 -5
  106. package/dist/esm/components/MetaAccordion.js +79 -81
  107. package/dist/esm/components/NetworkIcons.d.ts +13 -0
  108. package/dist/esm/components/NetworkIcons.js +68 -0
  109. package/dist/esm/components/SectionHeader.js +4 -16
  110. package/dist/esm/components/SkeletonPlaceholder.js +2 -2
  111. package/dist/esm/components/SourcePageCard.js +44 -46
  112. package/dist/esm/components/Toast.js +4 -4
  113. package/dist/esm/components/TouchableScale.js +7 -33
  114. package/dist/esm/components/TreeNode.js +4 -16
  115. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  116. package/dist/esm/constants/telemetryConfig.js +3 -3
  117. package/dist/esm/constants/version.d.ts +1 -1
  118. package/dist/esm/constants/version.js +1 -1
  119. package/dist/esm/customHooks/useAccordion.d.ts +3 -8
  120. package/dist/esm/customHooks/useAccordion.js +7 -37
  121. package/dist/esm/helpers/index.d.ts +3 -1
  122. package/dist/esm/helpers/index.js +9 -0
  123. package/dist/esm/helpers/remoteConfig.d.ts +4 -0
  124. package/dist/esm/helpers/remoteConfig.js +160 -0
  125. package/dist/esm/helpers/searchQueryParser.js +2 -0
  126. package/dist/esm/helpers/telemetry.d.ts +5 -0
  127. package/dist/esm/helpers/telemetry.js +332 -9
  128. package/dist/esm/i18n/locales/en.json +66 -2
  129. package/dist/esm/index.d.ts +2 -0
  130. package/dist/esm/index.js +66 -23
  131. package/dist/esm/native/NativeInspector.d.ts +60 -0
  132. package/dist/esm/native/NativeInspector.js +100 -1
  133. package/dist/esm/native/NativeNetworkInspector.d.ts +8 -0
  134. package/dist/esm/styles/AppColors.d.ts +36 -0
  135. package/dist/esm/styles/AppColors.js +36 -0
  136. package/dist/esm/styles/AppFonts.d.ts +2 -0
  137. package/dist/esm/styles/AppFonts.js +1 -0
  138. package/dist/esm/styles/index.d.ts +25 -1
  139. package/dist/esm/styles/index.js +22 -1
  140. package/dist/esm/types/enums.d.ts +2 -0
  141. package/dist/esm/types/enums.js +2 -0
  142. package/dist/esm/types/index.d.ts +2 -2
  143. package/dist/esm/types/interfaces.d.ts +12 -0
  144. package/ios/NetworkInspectorModule.h +1 -0
  145. package/ios/NetworkInspectorModule.mm +736 -7
  146. package/package.json +10 -2
  147. package/react-native-inapp-inspector.podspec +1 -0
  148. package/src/capture.ts +101 -0
  149. package/src/components/AnalyticsEventCard.tsx +15 -13
  150. package/src/components/AnimatedEntrance.tsx +3 -47
  151. package/src/components/DomainHeader.tsx +4 -17
  152. package/src/components/EmptyState.tsx +2 -2
  153. package/src/components/HeadersSection.tsx +31 -56
  154. package/src/components/Inspector/AnalyticsTab.tsx +2 -25
  155. package/src/components/Inspector/ConsoleTab.tsx +2 -24
  156. package/src/components/Inspector/CrashTab.tsx +4 -25
  157. package/src/components/Inspector/DebuggingTab.tsx +2 -2
  158. package/src/components/Inspector/FeedbackModal.tsx +626 -0
  159. package/src/components/Inspector/InspectorHeader.tsx +1230 -728
  160. package/src/components/Inspector/MainScreen.tsx +97 -82
  161. package/src/components/Inspector/MediaGalleryTab.tsx +355 -0
  162. package/src/components/Inspector/MediaPreviewModal.tsx +435 -0
  163. package/src/components/Inspector/NetworkTab.tsx +83 -93
  164. package/src/components/Inspector/NpmStarPrompt.tsx +532 -0
  165. package/src/components/Inspector/NpmUpdateToast.tsx +4 -9
  166. package/src/components/Inspector/PerformanceTab.tsx +8 -1
  167. package/src/components/Inspector/ReduxTab.tsx +5 -25
  168. package/src/components/Inspector/SettingsPanel.tsx +1493 -225
  169. package/src/components/Inspector/SkeletonPlaceholder.tsx +2 -2
  170. package/src/components/Inspector/StorageTab.tsx +3 -26
  171. package/src/components/Inspector/TabBar.tsx +63 -32
  172. package/src/components/Inspector/UpdateAvailableModal.tsx +6 -10
  173. package/src/components/JsonViewer.tsx +101 -60
  174. package/src/components/LogCard.tsx +10 -8
  175. package/src/components/MetaAccordion.tsx +6 -6
  176. package/src/components/NetworkIcons.tsx +242 -0
  177. package/src/components/SectionHeader.tsx +4 -16
  178. package/src/components/SkeletonPlaceholder.tsx +2 -2
  179. package/src/components/SourcePageCard.tsx +57 -55
  180. package/src/components/Toast.tsx +4 -4
  181. package/src/components/TouchableScale.tsx +8 -38
  182. package/src/components/TreeNode.tsx +5 -20
  183. package/src/constants/telemetryConfig.ts +3 -5
  184. package/src/constants/version.ts +1 -1
  185. package/src/customHooks/useAccordion.tsx +10 -43
  186. package/src/helpers/index.ts +11 -1
  187. package/src/helpers/remoteConfig.ts +212 -0
  188. package/src/helpers/searchQueryParser.ts +3 -0
  189. package/src/helpers/telemetry.ts +381 -10
  190. package/src/i18n/locales/en.json +69 -2
  191. package/src/index.tsx +93 -23
  192. package/src/native/NativeInspector.ts +186 -1
  193. package/src/native/NativeNetworkInspector.ts +9 -0
  194. package/src/styles/AppColors.ts +38 -0
  195. package/src/styles/AppFonts.ts +2 -0
  196. package/src/styles/index.ts +23 -2
  197. package/src/types/enums.ts +4 -0
  198. package/src/types/index.ts +2 -2
  199. package/src/types/interfaces.ts +12 -0
  200. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  201. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  202. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  203. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  204. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  205. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  206. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  207. package/android/.gradle/8.9/gc.properties +0 -0
  208. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  209. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  210. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  211. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  212. package/android/.gradle/9.2.0/gc.properties +0 -0
  213. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  214. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  215. package/android/.gradle/vcs-1/gc.properties +0 -0
  216. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/results.bin +0 -1
  217. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/transformed/classes/classes_dex/classes.dex +0 -0
  218. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/results.bin +0 -1
  219. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/BuildConfig.dex +0 -0
  220. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView$iconView$1.dex +0 -0
  221. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView.dex +0 -0
  222. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NativeNetworkInspectorSpec.dex +0 -0
  223. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$Companion.dex +0 -0
  224. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$frameCallback$1.dex +0 -0
  225. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$shakeListener$1.dex +0 -0
  226. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule.dex +0 -0
  227. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorPackage.dex +0 -0
  228. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  229. package/android/build/generated/source/buildConfig/debug/com/inappinspector/BuildConfig.java +0 -10
  230. package/android/build/generated/source/codegen/java/com/inappinspector/NativeNetworkInspectorSpec.java +0 -104
  231. package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
  232. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec-generated.cpp +0 -128
  233. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec.h +0 -31
  234. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.cpp +0 -22
  235. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.h +0 -24
  236. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.cpp +0 -16
  237. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.h +0 -17
  238. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.cpp +0 -19
  239. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.h +0 -18
  240. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/RNInAppInspectorSpecJSI.h +0 -177
  241. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.cpp +0 -17
  242. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.h +0 -23
  243. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.cpp +0 -16
  244. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.h +0 -20
  245. package/android/build/generated/source/codegen/schema.json +0 -1
  246. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
  247. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  248. package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
  249. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  250. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  251. package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
  252. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  253. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  254. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  255. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  256. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  257. package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
  258. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  259. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  260. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  261. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  262. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/BuildConfig.class +0 -0
  263. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  264. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  265. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
  266. package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-react-native-inapp-inspector.jar +0 -0
  267. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
  268. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  269. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  270. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  271. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/BuildConfig.class +0 -0
  272. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  273. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  274. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  275. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  276. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  277. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  278. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule.class +0 -0
  279. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorPackage.class +0 -0
  280. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  281. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  282. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  283. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  284. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  285. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  286. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  287. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  288. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  289. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  290. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  291. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  292. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  293. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  294. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  295. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  296. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  297. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  298. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  299. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  300. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  301. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  302. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  303. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  304. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  305. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  306. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  307. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  308. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  309. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  310. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  311. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  312. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  313. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  314. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  315. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  316. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  317. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  318. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  319. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  320. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  321. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  322. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  323. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  324. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  325. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  326. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  327. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  328. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  329. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  330. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  331. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  332. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  333. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  334. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  335. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  336. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  337. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  338. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  339. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  340. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  341. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  342. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  343. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  344. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  345. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  346. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  347. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  348. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  349. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  350. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  351. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  352. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  353. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  354. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  355. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  356. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  357. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  358. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  359. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  360. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  361. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  362. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  363. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  364. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  365. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  366. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  367. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  368. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  369. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  370. package/android/build/outputs/aar/react-native-inapp-inspector-debug.aar +0 -0
  371. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
  372. package/android/build/reports/problems/problems-report.html +0 -659
  373. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  374. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  375. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  376. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  377. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  378. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  379. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  380. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule.class +0 -0
  381. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorPackage.class +0 -0
@@ -2,6 +2,10 @@ import React, {useMemo, useState, useEffect, useRef} from 'react';
2
2
  import {
3
3
  Alert,
4
4
  Animated,
5
+ DevSettings,
6
+ Dimensions,
7
+ Linking,
8
+ PixelRatio,
5
9
  Platform,
6
10
  ScrollView,
7
11
  StatusBar,
@@ -57,9 +61,26 @@ import {
57
61
  SmartphoneIcon,
58
62
  DatabaseIcon,
59
63
  QrCodeIcon,
64
+ GitHubIcon,
65
+ InfoCircleIcon,
66
+ CopyIcon,
67
+ FilmIcon,
68
+ CameraIcon,
69
+ VideoCameraIcon,
70
+ MicrophoneIcon,
71
+ GifIcon,
72
+ ImageIcon,
60
73
  } from '../NetworkIcons';
74
+ import {ScreenCapture} from '../../capture';
75
+
61
76
  import {LIB_VERSION} from '../../constants';
62
- import {copyToClipboard, isLocalDebugEnvironment} from '../../helpers';
77
+ import {
78
+ copyToClipboard,
79
+ isLocalDebugEnvironment,
80
+ getAppName,
81
+ getBundleIdentifier,
82
+ getAppVersionAndBuild,
83
+ } from '../../helpers';
63
84
  import {showToast} from '../../helpers/toast';
64
85
  import {pruneAllLogs} from '../../helpers/memoryManager';
65
86
 
@@ -87,6 +108,7 @@ const SettingsPanel = () => {
87
108
  showConsoleLevels,
88
109
  setShowConsoleLevels,
89
110
  resetToDefaults,
111
+ closeModal,
90
112
  storage,
91
113
  logs,
92
114
  consoleLogs,
@@ -136,6 +158,7 @@ const SettingsPanel = () => {
136
158
  (
137
159
  [
138
160
  {
161
+ id: 1,
139
162
  key: 'apis',
140
163
  label: 'APIs (Network)',
141
164
  category: 'core',
@@ -143,6 +166,7 @@ const SettingsPanel = () => {
143
166
  desc: 'HTTP/HTTPS requests, GraphQL, Axios & WebSocket inspector',
144
167
  },
145
168
  {
169
+ id: 2,
146
170
  key: 'logs',
147
171
  label: 'Console Logs',
148
172
  category: 'core',
@@ -150,27 +174,7 @@ const SettingsPanel = () => {
150
174
  desc: 'Terminal console logs, warnings, errors & stack traces',
151
175
  },
152
176
  {
153
- key: 'performance',
154
- label: 'Performance Tracker',
155
- category: 'diagnostic',
156
- icon: 'performance',
157
- desc: '60 FPS monitor, Hermes memory telemetry & re-render profiler',
158
- },
159
- {
160
- key: 'bundle',
161
- label: 'Bundle Analyzer',
162
- category: 'diagnostic',
163
- icon: 'bundle',
164
- desc: 'Metro packager dependencies, source maps & asset breakdown',
165
- },
166
- {
167
- key: 'crash',
168
- label: 'Crash Protection',
169
- category: 'diagnostic',
170
- icon: 'crash',
171
- desc: 'Runtime exception guard, breadcrumbs & memory snapshot',
172
- },
173
- {
177
+ id: 3,
174
178
  key: 'analytics',
175
179
  label: 'Analytics Logger',
176
180
  category: 'telemetry',
@@ -178,6 +182,7 @@ const SettingsPanel = () => {
178
182
  desc: 'Firebase & custom analytics events, user properties & params',
179
183
  },
180
184
  {
185
+ id: 4,
181
186
  key: 'redux',
182
187
  label: 'Redux Inspector',
183
188
  category: 'telemetry',
@@ -185,6 +190,15 @@ const SettingsPanel = () => {
185
190
  desc: 'Store state diffing, action history & reducer timeline',
186
191
  },
187
192
  {
193
+ id: 5,
194
+ key: 'storage',
195
+ label: 'Storage Inspector',
196
+ category: 'telemetry',
197
+ icon: 'storage',
198
+ desc: 'AsyncStorage & MMKV key-value store viewer with full CRUD support',
199
+ },
200
+ {
201
+ id: 6,
188
202
  key: 'device',
189
203
  label: 'Device Info',
190
204
  category: 'diagnostic',
@@ -192,13 +206,31 @@ const SettingsPanel = () => {
192
206
  desc: 'Hardware specs, IP address, screen metrics, UDID & runtime stats',
193
207
  },
194
208
  {
195
- key: 'storage',
196
- label: 'Storage Inspector',
197
- category: 'telemetry',
198
- icon: 'storage',
199
- desc: 'AsyncStorage & MMKV key-value store viewer with full CRUD support',
209
+ id: 7,
210
+ key: 'crash',
211
+ label: 'Crash Protection',
212
+ category: 'diagnostic',
213
+ icon: 'crash',
214
+ desc: 'Runtime exception guard, breadcrumbs & memory snapshot',
215
+ },
216
+ {
217
+ id: 8,
218
+ key: 'bundle',
219
+ label: 'Bundle Analyzer',
220
+ category: 'diagnostic',
221
+ icon: 'bundle',
222
+ desc: 'Metro packager dependencies, source maps & asset breakdown',
223
+ },
224
+ {
225
+ id: 9,
226
+ key: 'performance',
227
+ label: 'Performance & Tracker',
228
+ category: 'diagnostic',
229
+ icon: 'performance',
230
+ desc: '60 FPS monitor, Hermes memory telemetry & re-render profiler',
200
231
  },
201
232
  {
233
+ id: 10,
202
234
  key: 'debugging',
203
235
  label: 'Multi-Device Debugging',
204
236
  category: 'diagnostic',
@@ -222,11 +254,11 @@ const SettingsPanel = () => {
222
254
  logs: Boolean(tabVisibility?.logs),
223
255
  analytics: Boolean(tabVisibility?.analytics),
224
256
  redux: Boolean(tabVisibility?.redux),
257
+ storage: Boolean(tabVisibility?.storage),
258
+ device: Boolean(tabVisibility?.device),
259
+ crash: Boolean(tabVisibility?.crash),
225
260
  bundle: Boolean(tabVisibility?.bundle),
226
261
  performance: Boolean(tabVisibility?.performance),
227
- crash: Boolean(tabVisibility?.crash),
228
- device: Boolean(tabVisibility?.device),
229
- storage: Boolean(tabVisibility?.storage),
230
262
  debugging: Boolean(tabVisibility?.debugging),
231
263
  }));
232
264
 
@@ -237,15 +269,16 @@ const SettingsPanel = () => {
237
269
  logs: Boolean(tabVisibility?.logs),
238
270
  analytics: Boolean(tabVisibility?.analytics),
239
271
  redux: Boolean(tabVisibility?.redux),
272
+ storage: Boolean(tabVisibility?.storage),
273
+ device: Boolean(tabVisibility?.device),
274
+ crash: Boolean(tabVisibility?.crash),
240
275
  bundle: Boolean(tabVisibility?.bundle),
241
276
  performance: Boolean(tabVisibility?.performance),
242
- crash: Boolean(tabVisibility?.crash),
243
- device: Boolean(tabVisibility?.device),
244
- storage: Boolean(tabVisibility?.storage),
245
277
  debugging: Boolean(tabVisibility?.debugging),
246
278
  });
247
279
  }, [tabVisibility]);
248
280
 
281
+
249
282
  const hasUnsavedChanges = useMemo(() => {
250
283
  return allModules.some(
251
284
  m =>
@@ -259,17 +292,56 @@ const SettingsPanel = () => {
259
292
  ).length;
260
293
 
261
294
  const handleSaveChanges = () => {
262
- animateNextLayout();
263
- allModules.forEach(m => {
264
- if (m.key !== 'apis') {
265
- const isStagedOn = Boolean(stagedTabVisibility[m.key as ActiveTab]);
266
- const isCurrentOn = Boolean(tabVisibility?.[m.key as ActiveTab]);
267
- if (isStagedOn !== isCurrentOn) {
268
- toggleTabVisibility(m.key as ActiveTab);
269
- }
270
- }
271
- });
272
- Alert.alert(t('settings.settingsSaved'), t('settings.settingsSavedDesc'));
295
+ if (!hasUnsavedChanges) return;
296
+
297
+ Alert.alert(
298
+ 'Apply Changes & Reload',
299
+ 'Are you sure you want to save module changes? The inspector will close and reload the app to apply the new configuration.',
300
+ [
301
+ {
302
+ text: 'Cancel',
303
+ style: 'cancel',
304
+ onPress: () => {
305
+ // Discard: Revert staged visibility back to saved tabVisibility
306
+ setStagedTabVisibility({
307
+ apis: true,
308
+ logs: Boolean(tabVisibility?.logs),
309
+ analytics: Boolean(tabVisibility?.analytics),
310
+ redux: Boolean(tabVisibility?.redux),
311
+ storage: Boolean(tabVisibility?.storage),
312
+ device: Boolean(tabVisibility?.device),
313
+ crash: Boolean(tabVisibility?.crash),
314
+ bundle: Boolean(tabVisibility?.bundle),
315
+ performance: Boolean(tabVisibility?.performance),
316
+ debugging: Boolean(tabVisibility?.debugging),
317
+ });
318
+
319
+ },
320
+ },
321
+ {
322
+ text: 'Save & Reload',
323
+ style: 'default',
324
+ onPress: () => {
325
+ animateNextLayout();
326
+ allModules.forEach(m => {
327
+ if (m.key !== 'apis') {
328
+ const isStagedOn = Boolean(stagedTabVisibility[m.key as ActiveTab]);
329
+ const isCurrentOn = Boolean(tabVisibility?.[m.key as ActiveTab]);
330
+ if (isStagedOn !== isCurrentOn) {
331
+ toggleTabVisibility(m.key as ActiveTab);
332
+ }
333
+ }
334
+ });
335
+ closeModal();
336
+ setTimeout(() => {
337
+ if (__DEV__ && DevSettings && DevSettings.reload) {
338
+ DevSettings.reload();
339
+ }
340
+ }, 350);
341
+ },
342
+ },
343
+ ],
344
+ );
273
345
  };
274
346
 
275
347
  const [isDefaultTabDropdownOpen, setIsDefaultTabDropdownOpen] =
@@ -517,6 +589,16 @@ const SettingsPanel = () => {
517
589
  label: t('settings.ramLimits', 'RAM & Limits'),
518
590
  Icon: BrainIcon,
519
591
  },
592
+ {
593
+ key: 'capture' as const,
594
+ label: t('settings.screenVideoCapture', 'Screen & Video Capture'),
595
+ Icon: CameraIcon,
596
+ },
597
+ {
598
+ key: 'about' as const,
599
+ label: t('settings.aboutAndSpecs', 'About & Specs'),
600
+ Icon: InfoCircleIcon,
601
+ },
520
602
  ].map(tab => {
521
603
  const isActive = settingsActiveSubTab === tab.key;
522
604
  const IconComp = tab.Icon;
@@ -864,6 +946,34 @@ const SettingsPanel = () => {
864
946
  gap: 6,
865
947
  flexWrap: 'wrap',
866
948
  }}>
949
+ <View
950
+ style={{
951
+ minWidth: 22,
952
+ height: 22,
953
+ paddingHorizontal: 5,
954
+ borderRadius: 11,
955
+ backgroundColor: isChecked
956
+ ? `${AppColors.purple}1C`
957
+ : `${AppColors.grayBorderSecondary}80`,
958
+ borderWidth: 1,
959
+ borderColor: isChecked
960
+ ? `${AppColors.purple}44`
961
+ : AppColors.grayBorderSecondary,
962
+ alignItems: 'center',
963
+ justifyContent: 'center',
964
+ }}>
965
+ <Text
966
+ style={{
967
+ fontFamily: AppFonts.interBold,
968
+ fontSize: 10,
969
+ lineHeight: 13,
970
+ color: isChecked
971
+ ? AppColors.purple
972
+ : AppColors.grayText,
973
+ }}>
974
+ #{moduleItem.id}
975
+ </Text>
976
+ </View>
867
977
  <Text
868
978
  style={{
869
979
  fontFamily: AppFonts.interBold,
@@ -1531,8 +1641,9 @@ const SettingsPanel = () => {
1531
1641
  lineHeight: 18,
1532
1642
  color: AppColors.primaryBlack,
1533
1643
  }}>
1534
- {allModules.find(m => m.key === defaultTab)?.label ||
1535
- 'APIs (Network)'}
1644
+ {allModules.find(m => m.key === defaultTab)
1645
+ ? `#${allModules.find(m => m.key === defaultTab)?.id} ${allModules.find(m => m.key === defaultTab)?.label}`
1646
+ : '#1 APIs (Network)'}
1536
1647
  </Text>
1537
1648
  <View
1538
1649
  style={{
@@ -1635,7 +1746,7 @@ const SettingsPanel = () => {
1635
1746
  ? AppColors.purple
1636
1747
  : AppColors.primaryBlack,
1637
1748
  }}>
1638
- {tab.label}
1749
+ #{tab.id} {tab.label}
1639
1750
  </Text>
1640
1751
  </View>
1641
1752
  {isActive && (
@@ -1752,156 +1863,6 @@ const SettingsPanel = () => {
1752
1863
  </TouchableScale>
1753
1864
  </View>
1754
1865
  </View>
1755
-
1756
- {/* Section 5: NPM Package & Updates */}
1757
- <View
1758
- style={{
1759
- backgroundColor: AppColors.primaryLight,
1760
- borderRadius: 14,
1761
- borderWidth: 1,
1762
- borderColor: AppColors.grayBorderSecondary,
1763
- overflow: 'hidden',
1764
- padding: 14,
1765
- gap: 12,
1766
- }}>
1767
- <Text
1768
- style={{
1769
- fontFamily: AppFonts.interBold,
1770
- fontSize: 11,
1771
- lineHeight: 14,
1772
- color: AppColors.grayTextWeak,
1773
- letterSpacing: 0.8,
1774
- }}>
1775
- PACKAGE VERSION & UPDATES
1776
- </Text>
1777
-
1778
- <View
1779
- style={{
1780
- flexDirection: 'row',
1781
- alignItems: 'center',
1782
- justifyContent: 'space-between',
1783
- }}>
1784
- <View
1785
- style={{
1786
- flexDirection: 'row',
1787
- alignItems: 'center',
1788
- gap: 10,
1789
- flex: 1,
1790
- marginRight: 8,
1791
- }}>
1792
- <View
1793
- style={{
1794
- width: 32,
1795
- height: 32,
1796
- borderRadius: 8,
1797
- backgroundColor: '#CB383715',
1798
- alignItems: 'center',
1799
- justifyContent: 'center',
1800
- }}>
1801
- <NpmIcon color="#CB3837" size={16} />
1802
- </View>
1803
- <View style={{flex: 1}}>
1804
- <View
1805
- style={{
1806
- flexDirection: 'row',
1807
- alignItems: 'center',
1808
- gap: 6,
1809
- }}>
1810
- <Text
1811
- style={{
1812
- fontFamily: AppFonts.interBold,
1813
- fontSize: 13.5,
1814
- lineHeight: 18,
1815
- color: AppColors.primaryBlack,
1816
- }}>
1817
- v{LIB_VERSION}
1818
- </Text>
1819
- {updateAvailable ? (
1820
- <View
1821
- style={{
1822
- flexDirection: 'row',
1823
- alignItems: 'center',
1824
- gap: 3,
1825
- backgroundColor: '#F59E0B20',
1826
- paddingHorizontal: 6,
1827
- paddingVertical: 1.5,
1828
- borderRadius: 5,
1829
- borderWidth: 1,
1830
- borderColor: '#F59E0B60',
1831
- }}>
1832
- <Text
1833
- style={{
1834
- fontFamily: AppFonts.interBold,
1835
- fontSize: 9.5,
1836
- color: '#D97706',
1837
- }}>
1838
- v{latestNpmVersion} Available
1839
- </Text>
1840
- <BoltIcon size={9} color="#D97706" />
1841
- </View>
1842
- ) : (
1843
- <View
1844
- style={{
1845
- backgroundColor: `${AppColors.emerald500}20`,
1846
- paddingHorizontal: 6,
1847
- paddingVertical: 1.5,
1848
- borderRadius: 5,
1849
- borderWidth: 1,
1850
- borderColor: `${AppColors.emerald500}50`,
1851
- }}>
1852
- <Text
1853
- style={{
1854
- fontFamily: AppFonts.interBold,
1855
- fontSize: 9.5,
1856
- color: AppColors.emerald600,
1857
- }}>
1858
- Up to date
1859
- </Text>
1860
- </View>
1861
- )}
1862
- </View>
1863
- <Text
1864
- style={{
1865
- fontFamily: AppFonts.interRegular,
1866
- fontSize: 11,
1867
- lineHeight: 15,
1868
- color: AppColors.grayText,
1869
- marginTop: 1,
1870
- }}>
1871
- {updateAvailable
1872
- ? `A newer version (v${latestNpmVersion}) is available on npm registry.`
1873
- : 'You are running the latest version from npm registry.'}
1874
- </Text>
1875
- </View>
1876
- </View>
1877
-
1878
- {updateAvailable && (
1879
- <TouchableScale
1880
- onPress={() => {
1881
- copyToClipboard(
1882
- 'npm install react-native-inapp-inspector@latest',
1883
- 'Install Command',
1884
- );
1885
- showToast('Copied npm install command!');
1886
- }}
1887
- style={{
1888
- backgroundColor: AppColors.purple,
1889
- paddingVertical: 6,
1890
- paddingHorizontal: 10,
1891
- borderRadius: 8,
1892
- }}>
1893
- <Text
1894
- style={{
1895
- fontFamily: AppFonts.interBold,
1896
- fontSize: 11,
1897
- color: AppColors.white,
1898
- }}>
1899
- Copy Upgrade
1900
- </Text>
1901
- </TouchableScale>
1902
- )}
1903
- </View>
1904
- </View>
1905
1866
  </View>
1906
1867
  )}
1907
1868
 
@@ -2338,35 +2299,1341 @@ const SettingsPanel = () => {
2338
2299
  </View>
2339
2300
  </View>
2340
2301
  )}
2341
- <View style={{height: 48}} />
2342
- </ScrollView>
2343
-
2344
- {/* Bottom Sticky Action Bar for Save Changes */}
2345
- {settingsActiveSubTab === 'module' && (
2346
- <View
2347
- style={{
2348
- paddingHorizontal: 16,
2349
- paddingTop: 12,
2350
- paddingBottom: Platform.OS === 'ios' ? 36 : 24,
2351
- backgroundColor: AppColors.primaryLight,
2352
- borderTopWidth: 1,
2353
- borderTopColor: AppColors.dividerColor,
2354
- flexDirection: 'row',
2355
- alignItems: 'center',
2356
- gap: 12,
2357
- shadowColor: AppColors.black,
2358
- shadowOpacity: 0.08,
2359
- shadowRadius: 8,
2360
- shadowOffset: {width: 0, height: -3},
2361
- elevation: 8,
2362
- }}>
2363
- <View style={{flex: 1}}>
2364
- <Text
2302
+ {settingsActiveSubTab === 'capture' && (
2303
+ <View style={{gap: 12}}>
2304
+ {/* Screenshot Preferences Card */}
2305
+ <View
2365
2306
  style={{
2366
- fontFamily: AppFonts.interBold,
2367
- fontSize: 13,
2368
- lineHeight: 17,
2369
- color: AppColors.primaryBlack,
2307
+ backgroundColor: AppColors.primaryLight,
2308
+ padding: 16,
2309
+ borderRadius: 14,
2310
+ borderWidth: 1,
2311
+ borderColor: AppColors.grayBorderSecondary,
2312
+ gap: 12,
2313
+ }}>
2314
+ <View style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
2315
+ <View
2316
+ style={{
2317
+ width: 36,
2318
+ height: 36,
2319
+ borderRadius: 10,
2320
+ backgroundColor: AppColors.purpleShade50,
2321
+ alignItems: 'center',
2322
+ justifyContent: 'center',
2323
+ }}>
2324
+ <CameraIcon color={AppColors.purple} size={16} />
2325
+ </View>
2326
+ <View style={{flex: 1}}>
2327
+ <Text
2328
+ style={{
2329
+ fontFamily: AppFonts.interBold,
2330
+ fontSize: 14,
2331
+ lineHeight: 18,
2332
+ color: AppColors.primaryBlack,
2333
+ }}>
2334
+ {t('settings.media.screenshotCardTitle', 'Screenshot Capture Settings')}
2335
+ </Text>
2336
+ <Text
2337
+ style={{
2338
+ fontFamily: AppFonts.interRegular,
2339
+ fontSize: 11,
2340
+ lineHeight: 15,
2341
+ color: AppColors.grayText,
2342
+ marginTop: 1,
2343
+ }}>
2344
+ {t('settings.media.screenshotCardDesc', 'Image encoding format, compression quality and overlay auto-hide')}
2345
+ </Text>
2346
+ </View>
2347
+ </View>
2348
+
2349
+ {renderSettingRow({
2350
+ icon: <ImageIcon color={AppColors.purple} size={16} />,
2351
+ label: t('settings.media.imageFormat', 'Image Format'),
2352
+ description: t('settings.media.imageFormatDesc', 'Export formats (PNG lossless, JPEG lossy, WebP)'),
2353
+ right: (
2354
+ <View style={{flexDirection: 'row', gap: 4}}>
2355
+ {['PNG', 'JPEG', 'WEBP'].map(fmt => (
2356
+ <View
2357
+ key={fmt}
2358
+ style={{
2359
+ paddingHorizontal: 8,
2360
+ paddingVertical: 4,
2361
+ borderRadius: 6,
2362
+ backgroundColor: fmt === 'PNG' ? AppColors.purple : `${AppColors.purple}1A`,
2363
+ }}>
2364
+ <Text
2365
+ style={{
2366
+ fontFamily: AppFonts.interBold,
2367
+ fontSize: 10,
2368
+ color: fmt === 'PNG' ? AppColors.white : AppColors.purple,
2369
+ }}>
2370
+ {fmt}
2371
+ </Text>
2372
+ </View>
2373
+ ))}
2374
+ </View>
2375
+ ),
2376
+ })}
2377
+
2378
+ {renderSettingRow({
2379
+ icon: <EyeIcon color={AppColors.purple} size={16} />,
2380
+ label: t('settings.media.autoHide', 'Auto-Hide Inspector During Capture'),
2381
+ description: t('settings.media.autoHideDesc', 'Temporarily hides the inspector overlay during screen capture'),
2382
+ isLast: true,
2383
+ right: (
2384
+ <View
2385
+ style={{
2386
+ paddingHorizontal: 8,
2387
+ paddingVertical: 4,
2388
+ borderRadius: 6,
2389
+ backgroundColor: `${AppColors.emerald500}26`,
2390
+ }}>
2391
+ <Text
2392
+ style={{
2393
+ fontFamily: AppFonts.interBold,
2394
+ fontSize: 10,
2395
+ color: AppColors.emerald500,
2396
+ }}>
2397
+ {t('settings.media.enabled', 'ON')}
2398
+ </Text>
2399
+ </View>
2400
+ ),
2401
+ })}
2402
+ </View>
2403
+
2404
+ {/* Video & GIF Recording Card */}
2405
+ <View
2406
+ style={{
2407
+ backgroundColor: AppColors.primaryLight,
2408
+ padding: 16,
2409
+ borderRadius: 14,
2410
+ borderWidth: 1,
2411
+ borderColor: AppColors.grayBorderSecondary,
2412
+ gap: 12,
2413
+ }}>
2414
+ <View style={{flexDirection: 'row', alignItems: 'center', gap: 10}}>
2415
+ <View
2416
+ style={{
2417
+ width: 36,
2418
+ height: 36,
2419
+ borderRadius: 10,
2420
+ backgroundColor: AppColors.purpleShade50,
2421
+ alignItems: 'center',
2422
+ justifyContent: 'center',
2423
+ }}>
2424
+ <VideoCameraIcon color={AppColors.purple} size={16} />
2425
+ </View>
2426
+ <View style={{flex: 1}}>
2427
+ <Text
2428
+ style={{
2429
+ fontFamily: AppFonts.interBold,
2430
+ fontSize: 14,
2431
+ lineHeight: 18,
2432
+ color: AppColors.primaryBlack,
2433
+ }}>
2434
+ {t('settings.media.videoCardTitle', 'Video Recording & GIF Conversion')}
2435
+ </Text>
2436
+ <Text
2437
+ style={{
2438
+ fontFamily: AppFonts.interRegular,
2439
+ fontSize: 11,
2440
+ lineHeight: 15,
2441
+ color: AppColors.grayText,
2442
+ marginTop: 1,
2443
+ }}>
2444
+ {t('settings.media.videoCardDesc', 'ReplayKit hardware encoding, frame capture fallback and GIF generation')}
2445
+ </Text>
2446
+ </View>
2447
+ </View>
2448
+
2449
+ {renderSettingRow({
2450
+ icon: <MicrophoneIcon color={AppColors.purple} size={16} />,
2451
+ label: t('settings.media.audioMode', 'Audio Source'),
2452
+ description: t('settings.media.audioModeDesc', 'Record video with muted, app audio, or microphone commentary'),
2453
+ right: (
2454
+ <View style={{flexDirection: 'row', gap: 4}}>
2455
+ {['Muted', 'App', 'Mic'].map((aud, i) => (
2456
+ <View
2457
+ key={aud}
2458
+ style={{
2459
+ paddingHorizontal: 7,
2460
+ paddingVertical: 4,
2461
+ borderRadius: 6,
2462
+ backgroundColor: i === 0 ? AppColors.purple : `${AppColors.purple}1A`,
2463
+ }}>
2464
+ <Text
2465
+ style={{
2466
+ fontFamily: AppFonts.interBold,
2467
+ fontSize: 10,
2468
+ color: i === 0 ? AppColors.white : AppColors.purple,
2469
+ }}>
2470
+ {aud}
2471
+ </Text>
2472
+ </View>
2473
+ ))}
2474
+ </View>
2475
+ ),
2476
+ })}
2477
+
2478
+ {renderSettingRow({
2479
+ icon: <FilmIcon color={AppColors.purple} size={16} />,
2480
+ label: t('settings.media.frameRate', 'Recording Frame Rate (FPS)'),
2481
+ description: t('settings.media.frameRateDesc', 'Target video smoothness: 15, 24, 30, or 60 FPS'),
2482
+ right: (
2483
+ <View style={{flexDirection: 'row', gap: 4}}>
2484
+ {['15', '24', '30', '60'].map(fps => (
2485
+ <View
2486
+ key={fps}
2487
+ style={{
2488
+ paddingHorizontal: 6,
2489
+ paddingVertical: 4,
2490
+ borderRadius: 6,
2491
+ backgroundColor: fps === '24' ? AppColors.purple : `${AppColors.purple}1A`,
2492
+ }}>
2493
+ <Text
2494
+ style={{
2495
+ fontFamily: AppFonts.interBold,
2496
+ fontSize: 10,
2497
+ color: fps === '24' ? AppColors.white : AppColors.purple,
2498
+ }}>
2499
+ {fps}fps
2500
+ </Text>
2501
+ </View>
2502
+ ))}
2503
+ </View>
2504
+ ),
2505
+ })}
2506
+
2507
+ {renderSettingRow({
2508
+ icon: <GifIcon color={AppColors.purple} size={16} />,
2509
+ label: t('settings.media.gifAutoOpt', 'Auto GIF Optimization'),
2510
+ description: t('settings.media.gifAutoOptDesc', 'Automatic palette reduction and frame skip for lightweight animated GIFs'),
2511
+ isLast: true,
2512
+ right: (
2513
+ <View
2514
+ style={{
2515
+ paddingHorizontal: 8,
2516
+ paddingVertical: 4,
2517
+ borderRadius: 6,
2518
+ backgroundColor: `${AppColors.emerald500}26`,
2519
+ }}>
2520
+ <Text
2521
+ style={{
2522
+ fontFamily: AppFonts.interBold,
2523
+ fontSize: 10,
2524
+ color: AppColors.emerald500,
2525
+ }}>
2526
+ ON
2527
+ </Text>
2528
+ </View>
2529
+ ),
2530
+ })}
2531
+ </View>
2532
+
2533
+ {/* Media Storage Cache Management */}
2534
+ <View
2535
+ style={{
2536
+ backgroundColor: AppColors.primaryLight,
2537
+ borderRadius: 14,
2538
+ borderWidth: 1,
2539
+ borderColor: AppColors.grayBorderSecondary,
2540
+ padding: 16,
2541
+ }}>
2542
+ {renderSettingRow({
2543
+ icon: <TrashIcon color={AppColors.errorColor} size={16} />,
2544
+ label: t('settings.media.purgeAll', 'Purge Captured Media Cache'),
2545
+ description: t('settings.media.purgeAllDesc', 'Delete all local screenshots, screen recordings and converted GIFs'),
2546
+ isLast: true,
2547
+ onPress: () => {
2548
+ Alert.alert(
2549
+ t('settings.media.purgeConfirmTitle', 'Purge Media Storage?'),
2550
+ t('settings.media.purgeConfirmMessage', 'This will permanently delete all captured screenshots and videos from disk.'),
2551
+ [
2552
+ {text: t('common.cancel', 'Cancel'), style: 'cancel'},
2553
+ {
2554
+ text: t('settings.media.purgeCacheBtn', 'Purge All'),
2555
+ style: 'destructive',
2556
+ onPress: async () => {
2557
+ await ScreenCapture.clearAllMedia();
2558
+ showToast(t('settings.media.purgedSuccess', 'Media cache cleared successfully'));
2559
+ },
2560
+ },
2561
+ ],
2562
+ );
2563
+ },
2564
+ right: (
2565
+ <View
2566
+ style={{
2567
+ paddingHorizontal: 12,
2568
+ paddingVertical: 6,
2569
+ borderRadius: 8,
2570
+ backgroundColor: `${AppColors.errorColor}14`,
2571
+ borderWidth: 1,
2572
+ borderColor: `${AppColors.errorColor}33`,
2573
+ }}>
2574
+ <Text
2575
+ style={{
2576
+ fontFamily: AppFonts.interBold,
2577
+ fontSize: 11,
2578
+ lineHeight: 14,
2579
+ color: AppColors.errorColor,
2580
+ }}>
2581
+ {t('settings.media.purgeCacheBtn', 'Purge All')}
2582
+ </Text>
2583
+ </View>
2584
+ ),
2585
+ })}
2586
+ </View>
2587
+ </View>
2588
+ )}
2589
+ {settingsActiveSubTab === 'about' && (
2590
+ <View style={{gap: 14}}>
2591
+ {/* Header Hero Branding Card */}
2592
+ <View
2593
+ style={{
2594
+ backgroundColor: AppColors.primaryLight,
2595
+ borderRadius: 14,
2596
+ borderWidth: 1,
2597
+ borderColor: AppColors.grayBorderSecondary,
2598
+ padding: 16,
2599
+ gap: 12,
2600
+ }}>
2601
+ <View
2602
+ style={{
2603
+ flexDirection: 'row',
2604
+ alignItems: 'center',
2605
+ justifyContent: 'space-between',
2606
+ }}>
2607
+ <View
2608
+ style={{
2609
+ flexDirection: 'row',
2610
+ alignItems: 'center',
2611
+ gap: 12,
2612
+ flex: 1,
2613
+ }}>
2614
+ <View
2615
+ style={{
2616
+ width: 44,
2617
+ height: 44,
2618
+ borderRadius: 12,
2619
+ backgroundColor: `${AppColors.purple}1A`,
2620
+ alignItems: 'center',
2621
+ justifyContent: 'center',
2622
+ borderWidth: 1,
2623
+ borderColor: `${AppColors.purple}33`,
2624
+ }}>
2625
+ <PackageIcon color={AppColors.purple} size={22} />
2626
+ </View>
2627
+ <View style={{flex: 1}}>
2628
+ <View
2629
+ style={{
2630
+ flexDirection: 'row',
2631
+ alignItems: 'center',
2632
+ gap: 8,
2633
+ flexWrap: 'wrap',
2634
+ }}>
2635
+ <Text
2636
+ style={{
2637
+ fontFamily: AppFonts.interBold,
2638
+ fontSize: 15,
2639
+ lineHeight: 20,
2640
+ color: AppColors.primaryBlack,
2641
+ }}>
2642
+ In-App Inspector
2643
+ </Text>
2644
+ <View
2645
+ style={{
2646
+ backgroundColor: `${AppColors.purple}18`,
2647
+ paddingHorizontal: 7,
2648
+ paddingVertical: 2,
2649
+ borderRadius: 6,
2650
+ borderWidth: 1,
2651
+ borderColor: `${AppColors.purple}33`,
2652
+ }}>
2653
+ <Text
2654
+ style={{
2655
+ fontFamily: AppFonts.interBold,
2656
+ fontSize: 10,
2657
+ color: AppColors.purple,
2658
+ }}>
2659
+ v{LIB_VERSION}
2660
+ </Text>
2661
+ </View>
2662
+ {updateAvailable ? (
2663
+ <View
2664
+ style={{
2665
+ flexDirection: 'row',
2666
+ alignItems: 'center',
2667
+ gap: 3,
2668
+ backgroundColor: '#F59E0B20',
2669
+ paddingHorizontal: 6,
2670
+ paddingVertical: 2,
2671
+ borderRadius: 6,
2672
+ borderWidth: 1,
2673
+ borderColor: '#F59E0B60',
2674
+ }}>
2675
+ <Text
2676
+ style={{
2677
+ fontFamily: AppFonts.interBold,
2678
+ fontSize: 9.5,
2679
+ color: '#D97706',
2680
+ }}>
2681
+ v{latestNpmVersion} Available
2682
+ </Text>
2683
+ <BoltIcon size={9} color="#D97706" />
2684
+ </View>
2685
+ ) : (
2686
+ <View
2687
+ style={{
2688
+ backgroundColor: `${AppColors.emerald500}20`,
2689
+ paddingHorizontal: 6,
2690
+ paddingVertical: 2,
2691
+ borderRadius: 6,
2692
+ borderWidth: 1,
2693
+ borderColor: `${AppColors.emerald500}50`,
2694
+ }}>
2695
+ <Text
2696
+ style={{
2697
+ fontFamily: AppFonts.interBold,
2698
+ fontSize: 9.5,
2699
+ color: AppColors.emerald600,
2700
+ }}>
2701
+ Up to date
2702
+ </Text>
2703
+ </View>
2704
+ )}
2705
+ </View>
2706
+ <Text
2707
+ style={{
2708
+ fontFamily: AppFonts.interRegular,
2709
+ fontSize: 11,
2710
+ lineHeight: 15,
2711
+ color: AppColors.grayText,
2712
+ marginTop: 2,
2713
+ }}>
2714
+ react-native-inapp-inspector
2715
+ </Text>
2716
+ </View>
2717
+ </View>
2718
+ </View>
2719
+
2720
+ <Text
2721
+ style={{
2722
+ fontFamily: AppFonts.interRegular,
2723
+ fontSize: 11.5,
2724
+ lineHeight: 16,
2725
+ color: AppColors.grayText,
2726
+ }}>
2727
+ High-performance in-app debugging, network logging, console inspection, performance profiling, storage viewer & telemetry diagnostics for React Native.
2728
+ </Text>
2729
+
2730
+ {updateAvailable && (
2731
+ <TouchableScale
2732
+ onPress={() => {
2733
+ copyToClipboard(
2734
+ 'npm install react-native-inapp-inspector@latest',
2735
+ 'Install Command',
2736
+ );
2737
+ showToast('Copied npm upgrade command!');
2738
+ }}
2739
+ style={{
2740
+ backgroundColor: AppColors.purple,
2741
+ paddingVertical: 8,
2742
+ paddingHorizontal: 12,
2743
+ borderRadius: 8,
2744
+ flexDirection: 'row',
2745
+ alignItems: 'center',
2746
+ justifyContent: 'center',
2747
+ gap: 6,
2748
+ }}>
2749
+ <BoltIcon size={12} color={AppColors.white} />
2750
+ <Text
2751
+ style={{
2752
+ fontFamily: AppFonts.interBold,
2753
+ fontSize: 12,
2754
+ color: AppColors.white,
2755
+ }}>
2756
+ Copy Upgrade Command (v{latestNpmVersion})
2757
+ </Text>
2758
+ </TouchableScale>
2759
+ )}
2760
+ </View>
2761
+
2762
+ {/* Quick Actions & Developer Community Grid */}
2763
+ <View
2764
+ style={{
2765
+ flexDirection: 'row',
2766
+ flexWrap: 'wrap',
2767
+ gap: 8,
2768
+ }}>
2769
+ <TouchableScale
2770
+ onPress={() => {
2771
+ Linking.openURL(
2772
+ 'https://github.com/vengatmacuser/react-native-inapp-inspector',
2773
+ ).catch(() => {});
2774
+ }}
2775
+ style={{
2776
+ flex: 1,
2777
+ minWidth: '47%',
2778
+ backgroundColor: `${AppColors.purple}0F`,
2779
+ borderRadius: 12,
2780
+ borderWidth: 1,
2781
+ borderColor: `${AppColors.purple}30`,
2782
+ paddingVertical: 10,
2783
+ paddingHorizontal: 12,
2784
+ flexDirection: 'row',
2785
+ alignItems: 'center',
2786
+ gap: 8,
2787
+ }}>
2788
+ <GitHubIcon color={AppColors.purple} size={18} />
2789
+ <View style={{flex: 1}}>
2790
+ <Text
2791
+ style={{
2792
+ fontFamily: AppFonts.interBold,
2793
+ fontSize: 11.5,
2794
+ color: AppColors.primaryBlack,
2795
+ }}>
2796
+ ⭐ Star on GitHub
2797
+ </Text>
2798
+ <Text
2799
+ style={{
2800
+ fontFamily: AppFonts.interRegular,
2801
+ fontSize: 9.5,
2802
+ color: AppColors.grayText,
2803
+ }}>
2804
+ Support open source
2805
+ </Text>
2806
+ </View>
2807
+ </TouchableScale>
2808
+
2809
+ <TouchableScale
2810
+ onPress={() => {
2811
+ Linking.openURL(
2812
+ 'https://www.npmjs.com/package/react-native-inapp-inspector',
2813
+ ).catch(() => {});
2814
+ }}
2815
+ style={{
2816
+ flex: 1,
2817
+ minWidth: '47%',
2818
+ backgroundColor: AppColors.primaryLight,
2819
+ borderRadius: 12,
2820
+ borderWidth: 1,
2821
+ borderColor: AppColors.grayBorderSecondary,
2822
+ paddingVertical: 10,
2823
+ paddingHorizontal: 12,
2824
+ flexDirection: 'row',
2825
+ alignItems: 'center',
2826
+ gap: 8,
2827
+ }}>
2828
+ <NpmIcon color="#CB3837" size={18} />
2829
+ <View style={{flex: 1}}>
2830
+ <Text
2831
+ style={{
2832
+ fontFamily: AppFonts.interBold,
2833
+ fontSize: 11.5,
2834
+ color: AppColors.primaryBlack,
2835
+ }}>
2836
+ NPM Registry
2837
+ </Text>
2838
+ <Text
2839
+ style={{
2840
+ fontFamily: AppFonts.interRegular,
2841
+ fontSize: 9.5,
2842
+ color: AppColors.grayText,
2843
+ }}>
2844
+ Package repository
2845
+ </Text>
2846
+ </View>
2847
+ </TouchableScale>
2848
+
2849
+ <TouchableScale
2850
+ onPress={() => {
2851
+ Linking.openURL(
2852
+ 'https://github.com/vengatmacuser/react-native-inapp-inspector#readme',
2853
+ ).catch(() => {});
2854
+ }}
2855
+ style={{
2856
+ flex: 1,
2857
+ minWidth: '47%',
2858
+ backgroundColor: AppColors.primaryLight,
2859
+ borderRadius: 12,
2860
+ borderWidth: 1,
2861
+ borderColor: AppColors.grayBorderSecondary,
2862
+ paddingVertical: 10,
2863
+ paddingHorizontal: 12,
2864
+ flexDirection: 'row',
2865
+ alignItems: 'center',
2866
+ gap: 8,
2867
+ }}>
2868
+ <Text style={{fontSize: 16}}>📖</Text>
2869
+ <View style={{flex: 1}}>
2870
+ <Text
2871
+ style={{
2872
+ fontFamily: AppFonts.interBold,
2873
+ fontSize: 11.5,
2874
+ color: AppColors.primaryBlack,
2875
+ }}>
2876
+ Documentation
2877
+ </Text>
2878
+ <Text
2879
+ style={{
2880
+ fontFamily: AppFonts.interRegular,
2881
+ fontSize: 9.5,
2882
+ color: AppColors.grayText,
2883
+ }}>
2884
+ Setup & API guide
2885
+ </Text>
2886
+ </View>
2887
+ </TouchableScale>
2888
+
2889
+ <TouchableScale
2890
+ onPress={() => {
2891
+ Linking.openURL(
2892
+ 'https://github.com/vengatmacuser/react-native-inapp-inspector/issues',
2893
+ ).catch(() => {});
2894
+ }}
2895
+ style={{
2896
+ flex: 1,
2897
+ minWidth: '47%',
2898
+ backgroundColor: AppColors.primaryLight,
2899
+ borderRadius: 12,
2900
+ borderWidth: 1,
2901
+ borderColor: AppColors.grayBorderSecondary,
2902
+ paddingVertical: 10,
2903
+ paddingHorizontal: 12,
2904
+ flexDirection: 'row',
2905
+ alignItems: 'center',
2906
+ gap: 8,
2907
+ }}>
2908
+ <Text style={{fontSize: 16}}>🐞</Text>
2909
+ <View style={{flex: 1}}>
2910
+ <Text
2911
+ style={{
2912
+ fontFamily: AppFonts.interBold,
2913
+ fontSize: 11.5,
2914
+ color: AppColors.primaryBlack,
2915
+ }}>
2916
+ Report Issue
2917
+ </Text>
2918
+ <Text
2919
+ style={{
2920
+ fontFamily: AppFonts.interRegular,
2921
+ fontSize: 9.5,
2922
+ color: AppColors.grayText,
2923
+ }}>
2924
+ Bugs & feature requests
2925
+ </Text>
2926
+ </View>
2927
+ </TouchableScale>
2928
+
2929
+ <TouchableScale
2930
+ onPress={() => {
2931
+ Linking.openURL(
2932
+ 'https://github.com/vengatmacuser/react-native-inapp-inspector/releases',
2933
+ ).catch(() => {});
2934
+ }}
2935
+ style={{
2936
+ flex: 1,
2937
+ minWidth: '47%',
2938
+ backgroundColor: AppColors.primaryLight,
2939
+ borderRadius: 12,
2940
+ borderWidth: 1,
2941
+ borderColor: AppColors.grayBorderSecondary,
2942
+ paddingVertical: 10,
2943
+ paddingHorizontal: 12,
2944
+ flexDirection: 'row',
2945
+ alignItems: 'center',
2946
+ gap: 8,
2947
+ }}>
2948
+ <Text style={{fontSize: 16}}>🏷️</Text>
2949
+ <View style={{flex: 1}}>
2950
+ <Text
2951
+ style={{
2952
+ fontFamily: AppFonts.interBold,
2953
+ fontSize: 11.5,
2954
+ color: AppColors.primaryBlack,
2955
+ }}>
2956
+ Release Notes
2957
+ </Text>
2958
+ <Text
2959
+ style={{
2960
+ fontFamily: AppFonts.interRegular,
2961
+ fontSize: 9.5,
2962
+ color: AppColors.grayText,
2963
+ }}>
2964
+ Version changelog
2965
+ </Text>
2966
+ </View>
2967
+ </TouchableScale>
2968
+
2969
+ <TouchableScale
2970
+ onPress={() => {
2971
+ const win = Dimensions.get('window');
2972
+ const scr = Dimensions.get('screen');
2973
+ const rnVer = (Platform.constants as any)?.reactNativeVersion;
2974
+ const specsPayload = {
2975
+ package: {
2976
+ name: 'react-native-inapp-inspector',
2977
+ version: `v${LIB_VERSION}`,
2978
+ latestNpmVersion: latestNpmVersion ? `v${latestNpmVersion}` : 'Checking...',
2979
+ license: 'MIT',
2980
+ repository: 'https://github.com/vengatmacuser/react-native-inapp-inspector',
2981
+ },
2982
+ hostApp: {
2983
+ name: getAppName(),
2984
+ bundleId: getBundleIdentifier(),
2985
+ versionAndBuild: getAppVersionAndBuild().formatted,
2986
+ buildVariant: __DEV__ ? 'Development (Debug)' : 'Production (Release)',
2987
+ metroConnected: isLocalDebugEnvironment(),
2988
+ },
2989
+ runtime: {
2990
+ reactNativeVersion: rnVer ? `${rnVer.major}.${rnVer.minor}.${rnVer.patch}` : '0.74+',
2991
+ reactVersion: React.version,
2992
+ jsEngine: Boolean((global as any)?.HermesInternal) ? 'Hermes' : 'JavaScriptCore (JSC)',
2993
+ architecture: Boolean((global as any)?.nativeFabricUIManager) ? 'Fabric (New Architecture)' : 'Paper (Legacy Bridge)',
2994
+ turboModules: Boolean((global as any)?.__turboModuleProxy || (global as any)?.TurboModuleRegistry),
2995
+ },
2996
+ device: {
2997
+ platform: Platform.OS,
2998
+ osVersion: Platform.Version,
2999
+ deviceModel: (Platform.constants as any)?.Model || 'Unknown Device',
3000
+ windowDimensions: `${Math.round(win.width)}x${Math.round(win.height)} pt`,
3001
+ screenDimensions: `${Math.round(scr.width)}x${Math.round(scr.height)} pt`,
3002
+ pixelRatio: PixelRatio.get(),
3003
+ fontScale: PixelRatio.getFontScale(),
3004
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone || 'Unknown',
3005
+ locale: Intl.DateTimeFormat().resolvedOptions().locale || 'en',
3006
+ },
3007
+ storageAndCapabilities: {
3008
+ storageEngine: isPersistentStorageAvailable() ? 'MMKV (Fast Native Storage)' : 'In-Memory State',
3009
+ hasNativeModule: Boolean((global as any)?.NativeInspectorModule || (global as any)?.__IN_APP_INSPECTOR_NATIVE__),
3010
+ reduxConnected: isReduxConnected(),
3011
+ analyticsConnected: isAnalyticsConnected(),
3012
+ },
3013
+ };
3014
+
3015
+ copyToClipboard(
3016
+ JSON.stringify(specsPayload, null, 2),
3017
+ 'Diagnostic Specifications',
3018
+ );
3019
+ showToast('Copied full diagnostic specs to clipboard!');
3020
+ }}
3021
+ style={{
3022
+ flex: 1,
3023
+ minWidth: '47%',
3024
+ backgroundColor: AppColors.primaryLight,
3025
+ borderRadius: 12,
3026
+ borderWidth: 1,
3027
+ borderColor: AppColors.grayBorderSecondary,
3028
+ paddingVertical: 10,
3029
+ paddingHorizontal: 12,
3030
+ flexDirection: 'row',
3031
+ alignItems: 'center',
3032
+ gap: 8,
3033
+ }}>
3034
+ <CopyIcon color={AppColors.purple} size={16} />
3035
+ <View style={{flex: 1}}>
3036
+ <Text
3037
+ style={{
3038
+ fontFamily: AppFonts.interBold,
3039
+ fontSize: 11.5,
3040
+ color: AppColors.primaryBlack,
3041
+ }}>
3042
+ Copy Specs JSON
3043
+ </Text>
3044
+ <Text
3045
+ style={{
3046
+ fontFamily: AppFonts.interRegular,
3047
+ fontSize: 9.5,
3048
+ color: AppColors.grayText,
3049
+ }}>
3050
+ Diagnostics payload
3051
+ </Text>
3052
+ </View>
3053
+ </TouchableScale>
3054
+ </View>
3055
+
3056
+ {/* Section: Package Version & Upgrades */}
3057
+ <View
3058
+ style={{
3059
+ backgroundColor: AppColors.primaryLight,
3060
+ borderRadius: 14,
3061
+ borderWidth: 1,
3062
+ borderColor: AppColors.grayBorderSecondary,
3063
+ overflow: 'hidden',
3064
+ padding: 14,
3065
+ gap: 12,
3066
+ }}>
3067
+ <Text
3068
+ style={{
3069
+ fontFamily: AppFonts.interBold,
3070
+ fontSize: 11,
3071
+ lineHeight: 14,
3072
+ color: AppColors.grayTextWeak,
3073
+ letterSpacing: 0.8,
3074
+ }}>
3075
+ PACKAGE VERSION & UPGRADES
3076
+ </Text>
3077
+
3078
+ <View
3079
+ style={{
3080
+ flexDirection: 'row',
3081
+ alignItems: 'center',
3082
+ justifyContent: 'space-between',
3083
+ }}>
3084
+ <View
3085
+ style={{
3086
+ flexDirection: 'row',
3087
+ alignItems: 'center',
3088
+ gap: 10,
3089
+ flex: 1,
3090
+ marginRight: 8,
3091
+ }}>
3092
+ <View
3093
+ style={{
3094
+ width: 34,
3095
+ height: 34,
3096
+ borderRadius: 9,
3097
+ backgroundColor: '#CB383715',
3098
+ alignItems: 'center',
3099
+ justifyContent: 'center',
3100
+ }}>
3101
+ <NpmIcon color="#CB3837" size={17} />
3102
+ </View>
3103
+ <View style={{flex: 1}}>
3104
+ <View
3105
+ style={{
3106
+ flexDirection: 'row',
3107
+ alignItems: 'center',
3108
+ gap: 6,
3109
+ }}>
3110
+ <Text
3111
+ style={{
3112
+ fontFamily: AppFonts.interBold,
3113
+ fontSize: 14,
3114
+ lineHeight: 18,
3115
+ color: AppColors.primaryBlack,
3116
+ }}>
3117
+ v{LIB_VERSION}
3118
+ </Text>
3119
+ {updateAvailable ? (
3120
+ <View
3121
+ style={{
3122
+ flexDirection: 'row',
3123
+ alignItems: 'center',
3124
+ gap: 3,
3125
+ backgroundColor: '#F59E0B20',
3126
+ paddingHorizontal: 6,
3127
+ paddingVertical: 1.5,
3128
+ borderRadius: 5,
3129
+ borderWidth: 1,
3130
+ borderColor: '#F59E0B60',
3131
+ }}>
3132
+ <Text
3133
+ style={{
3134
+ fontFamily: AppFonts.interBold,
3135
+ fontSize: 9.5,
3136
+ color: '#D97706',
3137
+ }}>
3138
+ v{latestNpmVersion} Available
3139
+ </Text>
3140
+ <BoltIcon size={9} color="#D97706" />
3141
+ </View>
3142
+ ) : (
3143
+ <View
3144
+ style={{
3145
+ backgroundColor: `${AppColors.emerald500}20`,
3146
+ paddingHorizontal: 6,
3147
+ paddingVertical: 1.5,
3148
+ borderRadius: 5,
3149
+ borderWidth: 1,
3150
+ borderColor: `${AppColors.emerald500}50`,
3151
+ }}>
3152
+ <Text
3153
+ style={{
3154
+ fontFamily: AppFonts.interBold,
3155
+ fontSize: 9.5,
3156
+ color: AppColors.emerald600,
3157
+ }}>
3158
+ Up to date
3159
+ </Text>
3160
+ </View>
3161
+ )}
3162
+ </View>
3163
+ <Text
3164
+ style={{
3165
+ fontFamily: AppFonts.interRegular,
3166
+ fontSize: 11,
3167
+ lineHeight: 15,
3168
+ color: AppColors.grayText,
3169
+ marginTop: 1,
3170
+ }}>
3171
+ {updateAvailable
3172
+ ? `A newer release (v${latestNpmVersion}) is available on npm registry.`
3173
+ : 'You are running the latest version from npm registry.'}
3174
+ </Text>
3175
+ </View>
3176
+ </View>
3177
+
3178
+ <TouchableScale
3179
+ onPress={() => {
3180
+ copyToClipboard(
3181
+ 'npm install react-native-inapp-inspector@latest',
3182
+ 'Install Command',
3183
+ );
3184
+ showToast('Copied npm install command!');
3185
+ }}
3186
+ style={{
3187
+ backgroundColor: updateAvailable ? AppColors.purple : `${AppColors.purple}18`,
3188
+ paddingVertical: 7,
3189
+ paddingHorizontal: 11,
3190
+ borderRadius: 8,
3191
+ flexDirection: 'row',
3192
+ alignItems: 'center',
3193
+ gap: 5,
3194
+ }}>
3195
+ <CopyIcon color={updateAvailable ? AppColors.white : AppColors.purple} size={12} />
3196
+ <Text
3197
+ style={{
3198
+ fontFamily: AppFonts.interBold,
3199
+ fontSize: 11,
3200
+ color: updateAvailable ? AppColors.white : AppColors.purple,
3201
+ }}>
3202
+ {updateAvailable ? 'Copy Upgrade' : 'Copy Install'}
3203
+ </Text>
3204
+ </TouchableScale>
3205
+ </View>
3206
+ </View>
3207
+
3208
+ {/* Section 1: Host Application Specs */}
3209
+ <View
3210
+ style={{
3211
+ backgroundColor: AppColors.primaryLight,
3212
+ borderRadius: 14,
3213
+ borderWidth: 1,
3214
+ borderColor: AppColors.grayBorderSecondary,
3215
+ padding: 14,
3216
+ gap: 10,
3217
+ }}>
3218
+ <Text
3219
+ style={{
3220
+ fontFamily: AppFonts.interBold,
3221
+ fontSize: 11,
3222
+ lineHeight: 14,
3223
+ color: AppColors.grayTextWeak,
3224
+ letterSpacing: 0.8,
3225
+ }}>
3226
+ HOST APPLICATION & BUILD
3227
+ </Text>
3228
+
3229
+ <View style={{gap: 8}}>
3230
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3231
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3232
+ Application Name
3233
+ </Text>
3234
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3235
+ {getAppName()}
3236
+ </Text>
3237
+ </View>
3238
+
3239
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3240
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3241
+ Bundle ID / Package
3242
+ </Text>
3243
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11, color: AppColors.primaryBlack}}>
3244
+ {getBundleIdentifier()}
3245
+ </Text>
3246
+ </View>
3247
+
3248
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3249
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3250
+ Version & Build Number
3251
+ </Text>
3252
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3253
+ {getAppVersionAndBuild().formatted}
3254
+ </Text>
3255
+ </View>
3256
+
3257
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3258
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3259
+ Build Variant
3260
+ </Text>
3261
+ <View
3262
+ style={{
3263
+ backgroundColor: __DEV__ ? `${AppColors.amber500}20` : `${AppColors.emerald500}20`,
3264
+ paddingHorizontal: 6,
3265
+ paddingVertical: 1.5,
3266
+ borderRadius: 5,
3267
+ borderWidth: 1,
3268
+ borderColor: __DEV__ ? `${AppColors.amber500}50` : `${AppColors.emerald500}50`,
3269
+ }}>
3270
+ <Text
3271
+ style={{
3272
+ fontFamily: AppFonts.interBold,
3273
+ fontSize: 10,
3274
+ color: __DEV__ ? AppColors.amber500 : AppColors.emerald600,
3275
+ }}>
3276
+ {__DEV__ ? 'Development (Debug)' : 'Production (Release)'}
3277
+ </Text>
3278
+ </View>
3279
+ </View>
3280
+
3281
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3282
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3283
+ Metro Bundler Connection
3284
+ </Text>
3285
+ <Text
3286
+ style={{
3287
+ fontFamily: AppFonts.interBold,
3288
+ fontSize: 11.5,
3289
+ color: isLocalDebugEnvironment() ? AppColors.emerald600 : AppColors.grayText,
3290
+ }}>
3291
+ {isLocalDebugEnvironment() ? 'Connected (Hot Reload Active)' : 'Offline / Standalone'}
3292
+ </Text>
3293
+ </View>
3294
+ </View>
3295
+ </View>
3296
+
3297
+ {/* Section 2: React Native Engine & Runtime Specs */}
3298
+ <View
3299
+ style={{
3300
+ backgroundColor: AppColors.primaryLight,
3301
+ borderRadius: 14,
3302
+ borderWidth: 1,
3303
+ borderColor: AppColors.grayBorderSecondary,
3304
+ padding: 14,
3305
+ gap: 10,
3306
+ }}>
3307
+ <Text
3308
+ style={{
3309
+ fontFamily: AppFonts.interBold,
3310
+ fontSize: 11,
3311
+ lineHeight: 14,
3312
+ color: AppColors.grayTextWeak,
3313
+ letterSpacing: 0.8,
3314
+ }}>
3315
+ FRAMEWORK & RUNTIME ENGINE
3316
+ </Text>
3317
+
3318
+ <View style={{gap: 8}}>
3319
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3320
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3321
+ React Native Version
3322
+ </Text>
3323
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3324
+ v{((Platform.constants as any)?.reactNativeVersion?.major != null)
3325
+ ? `${(Platform.constants as any).reactNativeVersion.major}.${(Platform.constants as any).reactNativeVersion.minor}.${(Platform.constants as any).reactNativeVersion.patch}`
3326
+ : '0.74+'}
3327
+ </Text>
3328
+ </View>
3329
+
3330
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3331
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3332
+ React Core Version
3333
+ </Text>
3334
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3335
+ v{React.version}
3336
+ </Text>
3337
+ </View>
3338
+
3339
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3340
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3341
+ JavaScript Engine
3342
+ </Text>
3343
+ <View
3344
+ style={{
3345
+ backgroundColor: `${AppColors.purple}15`,
3346
+ paddingHorizontal: 6,
3347
+ paddingVertical: 1.5,
3348
+ borderRadius: 5,
3349
+ borderWidth: 1,
3350
+ borderColor: `${AppColors.purple}40`,
3351
+ }}>
3352
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 10.5, color: AppColors.purple}}>
3353
+ {Boolean((global as any)?.HermesInternal) ? 'Hermes Engine (Active)' : 'JavaScriptCore (JSC)'}
3354
+ </Text>
3355
+ </View>
3356
+ </View>
3357
+
3358
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3359
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3360
+ Rendering Architecture
3361
+ </Text>
3362
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3363
+ {Boolean((global as any)?.nativeFabricUIManager) ? 'Fabric (New Architecture)' : 'Paper (Legacy Bridge)'}
3364
+ </Text>
3365
+ </View>
3366
+
3367
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3368
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3369
+ TurboModules Support
3370
+ </Text>
3371
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3372
+ {Boolean((global as any)?.__turboModuleProxy || (global as any)?.TurboModuleRegistry)
3373
+ ? 'Enabled (C++ JSI)'
3374
+ : 'Standard Bridge'}
3375
+ </Text>
3376
+ </View>
3377
+ </View>
3378
+ </View>
3379
+
3380
+ {/* Section 3: Device & Display Metrics */}
3381
+ <View
3382
+ style={{
3383
+ backgroundColor: AppColors.primaryLight,
3384
+ borderRadius: 14,
3385
+ borderWidth: 1,
3386
+ borderColor: AppColors.grayBorderSecondary,
3387
+ padding: 14,
3388
+ gap: 10,
3389
+ }}>
3390
+ <Text
3391
+ style={{
3392
+ fontFamily: AppFonts.interBold,
3393
+ fontSize: 11,
3394
+ lineHeight: 14,
3395
+ color: AppColors.grayTextWeak,
3396
+ letterSpacing: 0.8,
3397
+ }}>
3398
+ DEVICE & DISPLAY METRICS
3399
+ </Text>
3400
+
3401
+ <View style={{gap: 8}}>
3402
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3403
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3404
+ Operating System
3405
+ </Text>
3406
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3407
+ {Platform.OS === 'ios' ? 'Apple iOS' : Platform.OS === 'android' ? 'Google Android' : Platform.OS}{' '}
3408
+ {Platform.Version}
3409
+ </Text>
3410
+ </View>
3411
+
3412
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3413
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3414
+ Device Hardware Model
3415
+ </Text>
3416
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3417
+ {(Platform.constants as any)?.Model ||
3418
+ (Platform.OS === 'ios' ? 'Apple Device' : 'Android Device')}
3419
+ </Text>
3420
+ </View>
3421
+
3422
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3423
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3424
+ Window Viewport (Points)
3425
+ </Text>
3426
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3427
+ {Math.round(Dimensions.get('window').width)} × {Math.round(Dimensions.get('window').height)} pt
3428
+ </Text>
3429
+ </View>
3430
+
3431
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3432
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3433
+ Native Physical Resolution
3434
+ </Text>
3435
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3436
+ {Math.round(Dimensions.get('screen').width * PixelRatio.get())} × {Math.round(Dimensions.get('screen').height * PixelRatio.get())} px
3437
+ </Text>
3438
+ </View>
3439
+
3440
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3441
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3442
+ Pixel Density & Font Scale
3443
+ </Text>
3444
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3445
+ {PixelRatio.get().toFixed(1)}x ({PixelRatio.get() >= 3 ? '@3x' : PixelRatio.get() >= 2 ? '@2x' : '@1x'}) • Font: {PixelRatio.getFontScale().toFixed(2)}x
3446
+ </Text>
3447
+ </View>
3448
+
3449
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3450
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3451
+ Timezone & Locale
3452
+ </Text>
3453
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3454
+ {Intl.DateTimeFormat().resolvedOptions().timeZone || 'System'} ({Intl.DateTimeFormat().resolvedOptions().locale || 'en'})
3455
+ </Text>
3456
+ </View>
3457
+ </View>
3458
+ </View>
3459
+
3460
+ {/* Section 4: Inspector Capabilities & Storage */}
3461
+ <View
3462
+ style={{
3463
+ backgroundColor: AppColors.primaryLight,
3464
+ borderRadius: 14,
3465
+ borderWidth: 1,
3466
+ borderColor: AppColors.grayBorderSecondary,
3467
+ padding: 14,
3468
+ gap: 10,
3469
+ }}>
3470
+ <Text
3471
+ style={{
3472
+ fontFamily: AppFonts.interBold,
3473
+ fontSize: 11,
3474
+ lineHeight: 14,
3475
+ color: AppColors.grayTextWeak,
3476
+ letterSpacing: 0.8,
3477
+ }}>
3478
+ INSPECTOR STORAGE & CAPABILITIES
3479
+ </Text>
3480
+
3481
+ <View style={{gap: 8}}>
3482
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3483
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3484
+ Storage Persistence Engine
3485
+ </Text>
3486
+ <View
3487
+ style={{
3488
+ backgroundColor: isPersistentStorageAvailable() ? `${AppColors.emerald500}18` : `${AppColors.amber500}18`,
3489
+ paddingHorizontal: 6,
3490
+ paddingVertical: 1.5,
3491
+ borderRadius: 5,
3492
+ borderWidth: 1,
3493
+ borderColor: isPersistentStorageAvailable() ? `${AppColors.emerald500}50` : `${AppColors.amber500}50`,
3494
+ }}>
3495
+ <Text
3496
+ style={{
3497
+ fontFamily: AppFonts.interBold,
3498
+ fontSize: 10.5,
3499
+ color: isPersistentStorageAvailable() ? AppColors.emerald600 : AppColors.amber500,
3500
+ }}>
3501
+ {isPersistentStorageAvailable() ? 'MMKV Fast Native Storage' : 'In-Memory State'}
3502
+ </Text>
3503
+ </View>
3504
+ </View>
3505
+
3506
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3507
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3508
+ Native Module Status
3509
+ </Text>
3510
+ <Text
3511
+ style={{
3512
+ fontFamily: AppFonts.interBold,
3513
+ fontSize: 11.5,
3514
+ color: Boolean((global as any)?.NativeInspectorModule) ? AppColors.emerald600 : AppColors.grayText,
3515
+ }}>
3516
+ {Boolean((global as any)?.NativeInspectorModule) ? 'Linked & Active' : 'JavaScript Only'}
3517
+ </Text>
3518
+ </View>
3519
+
3520
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3521
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3522
+ Network Logger Interceptor
3523
+ </Text>
3524
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
3525
+ Active (XMLHttpRequest & Fetch Hooked)
3526
+ </Text>
3527
+ </View>
3528
+
3529
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3530
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3531
+ Redux & Analytics Watchers
3532
+ </Text>
3533
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3534
+ Redux: {isReduxConnected() ? 'Connected' : 'Listening'} • Analytics: {isAnalyticsConnected() ? 'Connected' : 'Listening'}
3535
+ </Text>
3536
+ </View>
3537
+
3538
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3539
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3540
+ Crash & Exception Boundary
3541
+ </Text>
3542
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
3543
+ Global JS Exception Handler Active
3544
+ </Text>
3545
+ </View>
3546
+
3547
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3548
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3549
+ Memory Management
3550
+ </Text>
3551
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
3552
+ Dynamic Auto RAM Tiering Active
3553
+ </Text>
3554
+ </View>
3555
+ </View>
3556
+ </View>
3557
+
3558
+ {/* Section 5: License & Copyright */}
3559
+ <View
3560
+ style={{
3561
+ backgroundColor: AppColors.primaryLight,
3562
+ borderRadius: 14,
3563
+ borderWidth: 1,
3564
+ borderColor: AppColors.grayBorderSecondary,
3565
+ padding: 14,
3566
+ gap: 8,
3567
+ }}>
3568
+ <Text
3569
+ style={{
3570
+ fontFamily: AppFonts.interBold,
3571
+ fontSize: 11,
3572
+ lineHeight: 14,
3573
+ color: AppColors.grayTextWeak,
3574
+ letterSpacing: 0.8,
3575
+ }}>
3576
+ LICENSE & CREDITS
3577
+ </Text>
3578
+
3579
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3580
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3581
+ License
3582
+ </Text>
3583
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.emerald600}}>
3584
+ MIT Permissive Open Source
3585
+ </Text>
3586
+ </View>
3587
+
3588
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3589
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3590
+ Created & Maintained By
3591
+ </Text>
3592
+ <Text style={{fontFamily: AppFonts.interBold, fontSize: 11.5, color: AppColors.primaryBlack}}>
3593
+ Vengateswaran
3594
+ </Text>
3595
+ </View>
3596
+
3597
+ <View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
3598
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11.5, color: AppColors.grayText}}>
3599
+ Repository
3600
+ </Text>
3601
+ <Text style={{fontFamily: AppFonts.interRegular, fontSize: 11, color: AppColors.purple}}>
3602
+ github.com/vengatmacuser/react-native-inapp-inspector
3603
+ </Text>
3604
+ </View>
3605
+ </View>
3606
+ </View>
3607
+ )}
3608
+ <View style={{height: 48}} />
3609
+ </ScrollView>
3610
+
3611
+ {/* Bottom Sticky Action Bar for Save Changes */}
3612
+ {settingsActiveSubTab === 'module' && (
3613
+ <View
3614
+ style={{
3615
+ paddingHorizontal: 16,
3616
+ paddingTop: 12,
3617
+ paddingBottom: Platform.OS === 'ios' ? 36 : 24,
3618
+ backgroundColor: AppColors.primaryLight,
3619
+ borderTopWidth: 1,
3620
+ borderTopColor: AppColors.dividerColor,
3621
+ flexDirection: 'row',
3622
+ alignItems: 'center',
3623
+ gap: 12,
3624
+ shadowColor: AppColors.black,
3625
+ shadowOpacity: 0.08,
3626
+ shadowRadius: 8,
3627
+ shadowOffset: {width: 0, height: -3},
3628
+ elevation: 8,
3629
+ }}>
3630
+ <View style={{flex: 1}}>
3631
+ <Text
3632
+ style={{
3633
+ fontFamily: AppFonts.interBold,
3634
+ fontSize: 13,
3635
+ lineHeight: 17,
3636
+ color: AppColors.primaryBlack,
2370
3637
  }}>
2371
3638
  {stagedActiveCount} of {allModules.length} Modules Active
2372
3639
  </Text>
@@ -3256,6 +4523,7 @@ const SettingsPanel = () => {
3256
4523
  );
3257
4524
  }
3258
4525
 
4526
+
3259
4527
  const subPageAnim = useRef(new Animated.Value(0)).current;
3260
4528
  useEffect(() => {
3261
4529
  if (settingsPage !== 'main') {