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
package/src/index.tsx CHANGED
@@ -87,6 +87,8 @@ import {
87
87
  import {
88
88
  trackActiveTelemetryHeartbeat,
89
89
  setTelemetryEnabled,
90
+ trackInspectorTabView,
91
+ trackInspectorScreenView,
90
92
  } from './helpers/telemetry';
91
93
 
92
94
  import {
@@ -124,6 +126,11 @@ import {
124
126
  isNativeModuleAvailable,
125
127
  } from './native/NativeInspector';
126
128
 
129
+ import {
130
+ fetchRemoteConfigModuleStatus,
131
+ isFirebaseRemoteConfigAvailable,
132
+ } from './helpers/remoteConfig';
133
+
127
134
  // Constants
128
135
  import {
129
136
  StatusFilter,
@@ -157,6 +164,7 @@ const NetworkInspector = ({
157
164
  environment,
158
165
  initialVisible = false,
159
166
  visible: controlledVisible,
167
+ remoteConfig,
160
168
  }: NetworkInspectorProps): React.JSX.Element | null => {
161
169
  // Set custom storage synchronously during render phase
162
170
  setCustomStorage(storage || null);
@@ -352,6 +360,7 @@ const NetworkInspector = ({
352
360
  | 'redux'
353
361
  | null
354
362
  >(null);
363
+ const [isFeedbackOpen, setIsFeedbackOpen] = useState<boolean>(false);
355
364
  const [settingsActiveSubTab, setSettingsActiveSubTab] = useState<SettingsSubTab>('module');
356
365
  const [tabVisibility, setTabVisibility] = useState<
357
366
  Record<ActiveTab, boolean>
@@ -430,6 +439,7 @@ const NetworkInspector = ({
430
439
  storage: false,
431
440
  debugging: false,
432
441
  });
442
+
433
443
  setDefaultTab('apis');
434
444
  setIsAutoRamLimitEnabled(true);
435
445
  const profile = calculateRamBasedLimits(deviceFreeRamMb);
@@ -513,6 +523,28 @@ const NetworkInspector = ({
513
523
  };
514
524
  }, []);
515
525
 
526
+ // Fetch and apply module enable/disable statuses from Firebase Remote Config if configured or available
527
+ useEffect(() => {
528
+ let isMounted = true;
529
+ if (remoteConfig === false) return;
530
+
531
+ fetchRemoteConfigModuleStatus(typeof remoteConfig === 'object' ? remoteConfig : undefined)
532
+ .then(remoteModules => {
533
+ if (isMounted && remoteModules) {
534
+ setTabVisibility(prev => ({
535
+ ...prev,
536
+ ...remoteModules,
537
+ apis: remoteModules.apis ?? true,
538
+ }));
539
+ }
540
+ })
541
+ .catch(() => {});
542
+
543
+ return () => {
544
+ isMounted = false;
545
+ };
546
+ }, [remoteConfig]);
547
+
516
548
  useEffect(() => {
517
549
  if (!settingsHydratedRef.current) return;
518
550
  saveSettings({
@@ -655,6 +687,7 @@ const NetworkInspector = ({
655
687
  setActiveTab(key);
656
688
  loadNativePage(key);
657
689
  }
690
+ trackInspectorTabView(key);
658
691
  }, [loadNativePage]);
659
692
 
660
693
  const [selectedEvent, setSelectedEvent] = useState<AnalyticsEvent | null>(
@@ -853,12 +886,12 @@ const NetworkInspector = ({
853
886
  Animated.timing(clearAnim, {
854
887
  toValue: 1,
855
888
  duration: 320,
856
- useNativeDriver: true,
889
+ useNativeDriver: false,
857
890
  }),
858
891
  Animated.timing(clearAnim, {
859
892
  toValue: 0,
860
893
  duration: 0,
861
- useNativeDriver: true,
894
+ useNativeDriver: false,
862
895
  }),
863
896
  ]).start();
864
897
  handleClearAll();
@@ -871,44 +904,46 @@ const NetworkInspector = ({
871
904
  }, []);
872
905
 
873
906
  useEffect(() => {
907
+ if (visible) return;
874
908
  const loop = Animated.loop(
875
909
  Animated.sequence([
876
910
  Animated.timing(pulseAnim, {
877
911
  toValue: 1.2,
878
912
  duration: 800,
879
- useNativeDriver: true,
913
+ useNativeDriver: false,
880
914
  }),
881
915
  Animated.timing(pulseAnim, {
882
916
  toValue: 1,
883
917
  duration: 800,
884
- useNativeDriver: true,
918
+ useNativeDriver: false,
885
919
  }),
886
920
  ]),
887
921
  );
888
922
  loop.start();
889
923
  return () => loop.stop();
890
- }, [pulseAnim]);
924
+ }, [pulseAnim, visible]);
891
925
 
892
926
  // #4 — sweep the shine streak across the launcher, pause, repeat.
893
927
  useEffect(() => {
928
+ if (visible) return;
894
929
  const loop = Animated.loop(
895
930
  Animated.sequence([
896
931
  Animated.timing(fabShineAnim, {
897
932
  toValue: 1,
898
933
  duration: 1100,
899
- useNativeDriver: true,
934
+ useNativeDriver: false,
900
935
  }),
901
936
  Animated.delay(1600),
902
937
  Animated.timing(fabShineAnim, {
903
938
  toValue: 0,
904
939
  duration: 0,
905
- useNativeDriver: true,
940
+ useNativeDriver: false,
906
941
  }),
907
942
  ]),
908
943
  );
909
944
  loop.start();
910
945
  return () => loop.stop();
911
- }, [fabShineAnim]);
946
+ }, [fabShineAnim, visible]);
912
947
 
913
948
  useEffect(() => {
914
949
  const loop = Animated.loop(
@@ -916,12 +951,12 @@ const NetworkInspector = ({
916
951
  Animated.timing(activePulseAnim, {
917
952
  toValue: 1,
918
953
  duration: 1200,
919
- useNativeDriver: true,
954
+ useNativeDriver: false,
920
955
  }),
921
956
  Animated.timing(activePulseAnim, {
922
957
  toValue: 0.4,
923
958
  duration: 1200,
924
- useNativeDriver: true,
959
+ useNativeDriver: false,
925
960
  }),
926
961
  ]),
927
962
  );
@@ -935,12 +970,12 @@ const NetworkInspector = ({
935
970
  Animated.timing(unreadPulseAnim, {
936
971
  toValue: 1.3,
937
972
  duration: 800,
938
- useNativeDriver: true,
973
+ useNativeDriver: false,
939
974
  }),
940
975
  Animated.timing(unreadPulseAnim, {
941
976
  toValue: 0.8,
942
977
  duration: 800,
943
- useNativeDriver: true,
978
+ useNativeDriver: false,
944
979
  }),
945
980
  ]),
946
981
  );
@@ -989,6 +1024,7 @@ const NetworkInspector = ({
989
1024
  useEffect(() => {
990
1025
  if (!useNativeFab) return;
991
1026
  const unsubscribe = subscribeNativeFloatingButtonPress(() => {
1027
+ hideNativeFloatingButton().catch(() => {});
992
1028
  setVisible(true);
993
1029
  });
994
1030
  return () => {
@@ -1000,7 +1036,13 @@ const NetworkInspector = ({
1000
1036
  useEffect(() => {
1001
1037
  if (!useNativeFab) return;
1002
1038
  const unsubscribe = subscribeNativeDeviceShake(() => {
1003
- setVisible(prev => !prev);
1039
+ setVisible(prev => {
1040
+ const next = !prev;
1041
+ if (next) {
1042
+ hideNativeFloatingButton().catch(() => {});
1043
+ }
1044
+ return next;
1045
+ });
1004
1046
  });
1005
1047
  return () => {
1006
1048
  unsubscribe();
@@ -1013,11 +1055,13 @@ const NetworkInspector = ({
1013
1055
  useEffect(() => {
1014
1056
  isVisibleRefObj.current = visible;
1015
1057
  if (visible) {
1058
+ trackInspectorScreenView('InspectorModal');
1016
1059
  const target =
1017
1060
  defaultTab === 'apis' || tabVisibility?.[defaultTab]
1018
1061
  ? defaultTab
1019
1062
  : 'apis';
1020
1063
  setActiveTab(target);
1064
+ trackInspectorTabView(target);
1021
1065
 
1022
1066
 
1023
1067
 
@@ -1419,7 +1463,10 @@ const NetworkInspector = ({
1419
1463
 
1420
1464
  const groupedData = useMemo(() => {
1421
1465
  const result: GroupedListItem[] = [];
1422
- const groups: {pageName: string; color: string; logs: NetworkLog[]}[] = [];
1466
+ const groupMap = new Map<
1467
+ string,
1468
+ {pageName: string; color: string; logs: NetworkLog[]}
1469
+ >();
1423
1470
 
1424
1471
  for (let i = 0; i < filteredLogs.length; i++) {
1425
1472
  const log = filteredLogs[i];
@@ -1427,16 +1474,16 @@ const NetworkInspector = ({
1427
1474
  logRouteMapRef.current.get(log.id) || (log as any)?.routeInfo;
1428
1475
  const pageName = getLogPageName(log, routeInfo);
1429
1476
 
1430
- if (
1431
- groups.length === 0 ||
1432
- groups[groups.length - 1].pageName !== pageName
1433
- ) {
1434
- groups.push({pageName, color: getDomainColor(pageName), logs: []});
1477
+ let group = groupMap.get(pageName);
1478
+ if (!group) {
1479
+ group = {pageName, color: getDomainColor(pageName), logs: []};
1480
+ groupMap.set(pageName, group);
1435
1481
  }
1436
- groups[groups.length - 1].logs.push(log);
1482
+ group.logs.push(log);
1437
1483
  }
1438
1484
 
1439
- groups.forEach((g, idx) => {
1485
+ let idx = 0;
1486
+ groupMap.forEach(g => {
1440
1487
  let success = 0;
1441
1488
  let failed = 0;
1442
1489
  let loading = 0;
@@ -1455,7 +1502,7 @@ const NetworkInspector = ({
1455
1502
 
1456
1503
  result.push({
1457
1504
  type: 'header',
1458
- id: `hdr-${g.logs[0]?.id || 'empty'}-${g.pageName}`,
1505
+ id: `hdr-${g.pageName}`,
1459
1506
  pageName: g.pageName,
1460
1507
  color: g.color,
1461
1508
  stats: {success, failed, loading},
@@ -1464,6 +1511,7 @@ const NetworkInspector = ({
1464
1511
  isCollapsed,
1465
1512
  isFirst: idx === 0,
1466
1513
  });
1514
+ idx++;
1467
1515
 
1468
1516
  if (!isCollapsed) {
1469
1517
  const displayLogs = g.logs.filter(l => {
@@ -1476,7 +1524,7 @@ const NetworkInspector = ({
1476
1524
  displayLogs.forEach((log, index) => {
1477
1525
  result.push({
1478
1526
  type: 'log',
1479
- id: log.id,
1527
+ id: `log-${log.id}`,
1480
1528
  log,
1481
1529
  isLast: index === displayLogs.length - 1,
1482
1530
  color: g.color,
@@ -2032,6 +2080,8 @@ const NetworkInspector = ({
2032
2080
  setShowHeaderInfo,
2033
2081
  settingsPage,
2034
2082
  setSettingsPage,
2083
+ isFeedbackOpen,
2084
+ setIsFeedbackOpen,
2035
2085
  updateAvailable,
2036
2086
  latestNpmVersion,
2037
2087
  clearAnim,
@@ -2207,6 +2257,7 @@ const NetworkInspector = ({
2207
2257
  selectedLog,
2208
2258
  showHeaderInfo,
2209
2259
  settingsPage,
2260
+ isFeedbackOpen,
2210
2261
  updateAvailable,
2211
2262
  latestNpmVersion,
2212
2263
  clearAnim,
@@ -2562,4 +2613,23 @@ export {
2562
2613
  I18nextProvider,
2563
2614
  } from './i18n';
2564
2615
 
2616
+ export {
2617
+ fetchRemoteConfigModuleStatus,
2618
+ isFirebaseRemoteConfigAvailable,
2619
+ } from './helpers/remoteConfig';
2620
+
2621
+ export {
2622
+ ScreenCapture,
2623
+ ScreenRecorder,
2624
+ type ScreenshotOptions,
2625
+ type ScreenshotResult,
2626
+ type RecordingOptions,
2627
+ type RecordingResult,
2628
+ type GifConversionOptions,
2629
+ type CapturedMediaItem,
2630
+ type ImageFormat,
2631
+ type AudioSource,
2632
+ type RecordingFormat,
2633
+ } from './capture';
2634
+
2565
2635
  export { LIB_VERSION } from './constants/version';
@@ -87,7 +87,7 @@ export const enableNativeCrashProtection = async (options?: {
87
87
  }
88
88
  try {
89
89
  const result = await NativeModule.enableNativeCrashProtection();
90
- if (options?.showFloatingButton !== false) {
90
+ if (options?.showFloatingButton === true) {
91
91
  await showNativeFloatingButton();
92
92
  }
93
93
  return !!result;
@@ -439,4 +439,189 @@ export const fetchNativeCachedPage = async <T = any>(
439
439
  }
440
440
  };
441
441
 
442
+ export interface ScreenshotOptions {
443
+ format?: 'png' | 'jpeg' | 'webp';
444
+ quality?: number; // 0.1 to 1.0
445
+ scale?: number; // 0.5, 0.75, 1.0
446
+ hideInspector?: boolean;
447
+ includeBase64?: boolean;
448
+ }
449
+
450
+ export interface ScreenshotResult {
451
+ uri: string;
452
+ format: 'png' | 'jpeg' | 'webp';
453
+ width: number;
454
+ height: number;
455
+ sizeBytes: number;
456
+ timestamp: number;
457
+ base64?: string;
458
+ }
459
+
460
+ export interface RecordingOptions {
461
+ format?: 'mp4' | 'gif';
462
+ audioSource?: 'none' | 'app' | 'mic' | 'mixed';
463
+ fps?: number;
464
+ bitrate?: number;
465
+ maxDurationSeconds?: number;
466
+ hideInspector?: boolean;
467
+ }
468
+
469
+ export interface RecordingResult {
470
+ uri: string;
471
+ format: 'mp4' | 'gif';
472
+ durationMs: number;
473
+ hasAudio: boolean;
474
+ width: number;
475
+ height: number;
476
+ sizeBytes: number;
477
+ timestamp: number;
478
+ }
479
+
480
+ export interface GifConversionOptions {
481
+ fps?: number;
482
+ width?: number;
483
+ maxDurationSeconds?: number;
484
+ }
485
+
486
+ export interface CapturedMediaItem {
487
+ id: string;
488
+ type: 'image' | 'video' | 'gif';
489
+ format: string;
490
+ uri: string;
491
+ filename: string;
492
+ sizeBytes: number;
493
+ timestamp: number;
494
+ durationMs?: number;
495
+ hasAudio?: boolean;
496
+ width?: number;
497
+ height?: number;
498
+ }
499
+
500
+ /**
501
+ * Captures a high-resolution native screenshot of the application window.
502
+ */
503
+ export const takeNativeScreenshot = async (
504
+ options?: ScreenshotOptions,
505
+ ): Promise<ScreenshotResult | null> => {
506
+ if (!NativeModule || !NativeModule.takeScreenshot) {
507
+ return null;
508
+ }
509
+ try {
510
+ const result = await NativeModule.takeScreenshot(options || {});
511
+ return result as ScreenshotResult;
512
+ } catch {
513
+ return null;
514
+ }
515
+ };
516
+
517
+ /**
518
+ * Starts native video or GIF recording of the application.
519
+ */
520
+ export const startNativeVideoRecording = async (
521
+ options?: RecordingOptions,
522
+ ): Promise<boolean> => {
523
+ if (!NativeModule || !NativeModule.startVideoRecording) {
524
+ return false;
525
+ }
526
+ try {
527
+ const result = await NativeModule.startVideoRecording(options || {});
528
+ return !!result;
529
+ } catch {
530
+ return false;
531
+ }
532
+ };
533
+
534
+ /**
535
+ * Stops active video or GIF recording and returns the final file metadata.
536
+ */
537
+ export const stopNativeVideoRecording = async (): Promise<RecordingResult | null> => {
538
+ if (!NativeModule || !NativeModule.stopVideoRecording) {
539
+ return null;
540
+ }
541
+ try {
542
+ const result = await NativeModule.stopVideoRecording();
543
+ return result as RecordingResult;
544
+ } catch {
545
+ return null;
546
+ }
547
+ };
548
+
549
+ /**
550
+ * Checks if a recording session is currently active.
551
+ */
552
+ export const isNativeRecordingActive = async (): Promise<boolean> => {
553
+ if (!NativeModule || !NativeModule.isRecording) {
554
+ return false;
555
+ }
556
+ try {
557
+ const result = await NativeModule.isRecording();
558
+ return !!result;
559
+ } catch {
560
+ return false;
561
+ }
562
+ };
563
+
564
+ /**
565
+ * Converts a recorded MP4 video to an animated GIF.
566
+ */
567
+ export const convertNativeVideoToGif = async (
568
+ videoUri: string,
569
+ options?: GifConversionOptions,
570
+ ): Promise<RecordingResult | null> => {
571
+ if (!NativeModule || !NativeModule.convertToGif) {
572
+ return null;
573
+ }
574
+ try {
575
+ const result = await NativeModule.convertToGif(videoUri, options || {});
576
+ return result as RecordingResult;
577
+ } catch {
578
+ return null;
579
+ }
580
+ };
581
+
582
+ /**
583
+ * Fetches all captured screenshots, recordings, and GIFs from disk.
584
+ */
585
+ export const fetchCapturedMediaList = async (): Promise<CapturedMediaItem[]> => {
586
+ if (!NativeModule || !NativeModule.getCapturedMedia) {
587
+ return [];
588
+ }
589
+ try {
590
+ const jsonStr: string = await NativeModule.getCapturedMedia();
591
+ if (!jsonStr) return [];
592
+ const parsed = JSON.parse(jsonStr);
593
+ return Array.isArray(parsed) ? parsed : [];
594
+ } catch {
595
+ return [];
596
+ }
597
+ };
598
+
599
+ /**
600
+ * Deletes a specific media file from disk.
601
+ */
602
+ export const deleteCapturedMediaFile = async (uri: string): Promise<boolean> => {
603
+ if (!NativeModule || !NativeModule.deleteCapturedMedia) {
604
+ return false;
605
+ }
606
+ try {
607
+ const result = await NativeModule.deleteCapturedMedia(uri);
608
+ return !!result;
609
+ } catch {
610
+ return false;
611
+ }
612
+ };
442
613
 
614
+ /**
615
+ * Purges all captured media files from disk.
616
+ */
617
+ export const clearAllCapturedMediaFiles = async (): Promise<boolean> => {
618
+ if (!NativeModule || !NativeModule.clearAllCapturedMedia) {
619
+ return false;
620
+ }
621
+ try {
622
+ const result = await NativeModule.clearAllCapturedMedia();
623
+ return !!result;
624
+ } catch {
625
+ return false;
626
+ }
627
+ };
@@ -17,8 +17,17 @@ export interface Spec extends TurboModule {
17
17
  getNativeSystemMetrics(): Promise<Object>;
18
18
  pushNativeLogRecord(pageKey: string, jsonPayload: string): Promise<boolean>;
19
19
  checkFloatingButtonPress(): Promise<boolean>;
20
+ takeScreenshot(options: Object): Promise<Object>;
21
+ startVideoRecording(options: Object): Promise<boolean>;
22
+ stopVideoRecording(): Promise<Object>;
23
+ isRecording(): Promise<boolean>;
24
+ convertToGif(videoUri: string, options: Object): Promise<Object>;
25
+ getCapturedMedia(): Promise<string>;
26
+ deleteCapturedMedia(uri: string): Promise<boolean>;
27
+ clearAllCapturedMedia(): Promise<boolean>;
20
28
  addListener(eventName: string): void;
21
29
  removeListeners(count: number): void;
22
30
  }
23
31
 
24
32
  export default TurboModuleRegistry.get<Spec>('NetworkInspectorModule');
33
+
@@ -184,6 +184,25 @@ const LightColors = {
184
184
  skySoftBorder: '#BAE6FD',
185
185
  skySoftText: '#0284C7',
186
186
 
187
+ warningAmber: '#F59E0B',
188
+ npmRedLight: '#FF6B6B',
189
+ red300: '#FCA5A5',
190
+ overlayDark: 'rgba(8, 12, 22, 0.95)',
191
+ headerGlassDark: 'rgba(15, 23, 42, 0.9)',
192
+ badgeGlassDark: 'rgba(15, 23, 42, 0.85)',
193
+ borderGlassLight: 'rgba(255, 255, 255, 0.08)',
194
+ borderGlassMedium: 'rgba(255, 255, 255, 0.15)',
195
+ whiteAlpha06: 'rgba(255, 255, 255, 0.06)',
196
+ whiteAlpha08: 'rgba(255, 255, 255, 0.08)',
197
+ whiteAlpha10: 'rgba(255, 255, 255, 0.1)',
198
+ whiteAlpha12: 'rgba(255, 255, 255, 0.12)',
199
+ whiteAlpha15: 'rgba(255, 255, 255, 0.15)',
200
+ whiteAlpha20: 'rgba(255, 255, 255, 0.2)',
201
+ whiteAlpha24: 'rgba(255, 255, 255, 0.24)',
202
+ whiteAlpha30: 'rgba(255, 255, 255, 0.3)',
203
+ whiteAlpha33: 'rgba(255, 255, 255, 0.33)',
204
+ whiteAlpha60: 'rgba(255, 255, 255, 0.6)',
205
+
187
206
  // ─── Domain Colors (Thai Airways Themed) ───
188
207
  domainColors: [
189
208
  '#5C2D91',
@@ -280,6 +299,25 @@ const DarkColors = {
280
299
  skySoftBg: '#082F4966',
281
300
  skySoftBorder: '#0284C788',
282
301
  skySoftText: '#38BDF8',
302
+
303
+ warningAmber: '#F59E0B',
304
+ npmRedLight: '#FF6B6B',
305
+ red300: '#FCA5A5',
306
+ overlayDark: 'rgba(8, 12, 22, 0.95)',
307
+ headerGlassDark: 'rgba(15, 23, 42, 0.9)',
308
+ badgeGlassDark: 'rgba(15, 23, 42, 0.85)',
309
+ borderGlassLight: 'rgba(255, 255, 255, 0.08)',
310
+ borderGlassMedium: 'rgba(255, 255, 255, 0.15)',
311
+ whiteAlpha06: 'rgba(255, 255, 255, 0.06)',
312
+ whiteAlpha08: 'rgba(255, 255, 255, 0.08)',
313
+ whiteAlpha10: 'rgba(255, 255, 255, 0.1)',
314
+ whiteAlpha12: 'rgba(255, 255, 255, 0.12)',
315
+ whiteAlpha15: 'rgba(255, 255, 255, 0.15)',
316
+ whiteAlpha20: 'rgba(255, 255, 255, 0.2)',
317
+ whiteAlpha24: 'rgba(255, 255, 255, 0.24)',
318
+ whiteAlpha30: 'rgba(255, 255, 255, 0.3)',
319
+ whiteAlpha33: 'rgba(255, 255, 255, 0.33)',
320
+ whiteAlpha60: 'rgba(255, 255, 255, 0.6)',
283
321
  green600: '#16A34A',
284
322
  green700: '#15803D',
285
323
  green800: '#166534',
@@ -1,6 +1,7 @@
1
1
  export interface AppFontConfig {
2
2
  interRegular?: string;
3
3
  interMedium?: string;
4
+ interSemiBold?: string;
4
5
  interBold?: string;
5
6
  Sfprotext?: string;
6
7
  }
@@ -8,6 +9,7 @@ export interface AppFontConfig {
8
9
  export const AppFonts = {
9
10
  interRegular: 'Inter-Regular',
10
11
  interMedium: 'Inter-Medium',
12
+ interSemiBold: 'Inter-SemiBold',
11
13
  interBold: 'Inter-Bold',
12
14
  Sfprotext: 'Inter-Regular',
13
15
  };
@@ -62,7 +62,8 @@ export const getRawStyles = (colors: typeof AppColors) => ({
62
62
  headerDetailCenter: {
63
63
  alignItems: 'center',
64
64
  justifyContent: 'center',
65
- width: '100%',
65
+ flex: 1,
66
+ minWidth: 0,
66
67
  },
67
68
  headerDetailRow: {
68
69
  flexDirection: 'row',
@@ -140,7 +141,26 @@ export const getRawStyles = (colors: typeof AppColors) => ({
140
141
  },
141
142
 
142
143
  listContent: {paddingBottom: Platform.OS === 'ios' ? 44 : 32},
143
- // #2 — scroll-to-top button, always shown at the bottom right.
144
+ // Floating Support & Feedback FAB, in place of scroll-to-top button
145
+ supportFab: {
146
+ position: 'absolute',
147
+ bottom: 22,
148
+ right: 16,
149
+ width: 42,
150
+ height: 42,
151
+ borderRadius: 21,
152
+ backgroundColor: colors.purple,
153
+ alignItems: 'center',
154
+ justifyContent: 'center',
155
+ shadowColor: colors.purple,
156
+ shadowOffset: {width: 0, height: 4},
157
+ shadowOpacity: 0.45,
158
+ shadowRadius: 8,
159
+ elevation: 14,
160
+ zIndex: 999,
161
+ borderWidth: 1.5,
162
+ borderColor: 'rgba(255, 255, 255, 0.25)',
163
+ },
144
164
  scrollTopBtn: {
145
165
  position: 'absolute',
146
166
  bottom: 22,
@@ -1384,6 +1404,7 @@ export const getRawStyles = (colors: typeof AppColors) => ({
1384
1404
  borderTopLeftRadius: 20,
1385
1405
  borderTopRightRadius: 20,
1386
1406
  overflow: 'hidden',
1407
+ flexShrink: 0,
1387
1408
  },
1388
1409
 
1389
1410
  // Status chip used in MetaAccordion
@@ -16,6 +16,7 @@ export const ActiveTab = {
16
16
  } as const;
17
17
  export type ActiveTab = (typeof ActiveTab)[keyof typeof ActiveTab];
18
18
 
19
+
19
20
  export const Method = {
20
21
  All: 'ALL',
21
22
  Get: 'GET',
@@ -77,10 +78,13 @@ export type SettingsPage =
77
78
  | (typeof SettingsPage)[keyof typeof SettingsPage]
78
79
  | null;
79
80
 
81
+
80
82
  export const SettingsSubTab = {
81
83
  Module: 'module',
82
84
  Ui: 'ui',
83
85
  Limits: 'limits',
86
+ Capture: 'capture',
87
+ About: 'about',
84
88
  } as const;
85
89
  export type SettingsSubTab =
86
90
  (typeof SettingsSubTab)[keyof typeof SettingsSubTab];
@@ -9,7 +9,7 @@ export * from './enums';
9
9
  export type GroupedListItem =
10
10
  | {
11
11
  type: 'header';
12
- id: string;
12
+ id: string | number;
13
13
  pageName: string;
14
14
  color: string;
15
15
  stats: {success: number; failed: number; loading: number};
@@ -20,7 +20,7 @@ export type GroupedListItem =
20
20
  }
21
21
  | {
22
22
  type: 'log';
23
- id: number;
23
+ id: string | number;
24
24
  log: NetworkLog;
25
25
  isLast: boolean;
26
26
  color: string;