react-native-inapp-inspector 2.3.16 → 2.3.18

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 (346) hide show
  1. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +438 -7
  2. package/bin/cli.js +0 -0
  3. package/dist/commonjs/capture.d.ts +26 -0
  4. package/dist/commonjs/capture.js +32 -0
  5. package/dist/commonjs/components/AnalyticsEventCard.js +11 -11
  6. package/dist/commonjs/components/AnimatedEntrance.js +6 -70
  7. package/dist/commonjs/components/DomainHeader.js +3 -48
  8. package/dist/commonjs/components/EmptyState.js +2 -2
  9. package/dist/commonjs/components/HeadersSection.js +14 -34
  10. package/dist/commonjs/components/Inspector/AnalyticsTab.js +1 -2
  11. package/dist/commonjs/components/Inspector/ConsoleTab.js +1 -1
  12. package/dist/commonjs/components/Inspector/CrashTab.js +4 -2
  13. package/dist/commonjs/components/Inspector/DebuggingTab.js +2 -2
  14. package/dist/commonjs/components/Inspector/InspectorHeader.js +651 -313
  15. package/dist/commonjs/components/Inspector/MainScreen.js +25 -70
  16. package/dist/commonjs/components/Inspector/MediaGalleryTab.d.ts +2 -0
  17. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +307 -0
  18. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +11 -0
  19. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +393 -0
  20. package/dist/commonjs/components/Inspector/NetworkTab.js +183 -182
  21. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +4 -9
  22. package/dist/commonjs/components/Inspector/ReduxTab.js +4 -2
  23. package/dist/commonjs/components/Inspector/SettingsPanel.js +245 -0
  24. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +2 -2
  25. package/dist/commonjs/components/Inspector/StorageTab.js +3 -3
  26. package/dist/commonjs/components/Inspector/TabBar.js +5 -10
  27. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -10
  28. package/dist/commonjs/components/JsonViewer.js +43 -20
  29. package/dist/commonjs/components/LogCard.js +5 -5
  30. package/dist/commonjs/components/MetaAccordion.js +78 -80
  31. package/dist/commonjs/components/NetworkIcons.d.ts +8 -0
  32. package/dist/commonjs/components/NetworkIcons.js +51 -1
  33. package/dist/commonjs/components/SectionHeader.js +3 -48
  34. package/dist/commonjs/components/SkeletonPlaceholder.js +2 -2
  35. package/dist/commonjs/components/SourcePageCard.js +43 -45
  36. package/dist/commonjs/components/Toast.js +4 -4
  37. package/dist/commonjs/components/TouchableScale.js +9 -65
  38. package/dist/commonjs/components/TreeNode.js +2 -14
  39. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  40. package/dist/commonjs/constants/telemetryConfig.js +3 -3
  41. package/dist/commonjs/constants/version.d.ts +1 -1
  42. package/dist/commonjs/constants/version.js +1 -1
  43. package/dist/commonjs/customHooks/useAccordion.d.ts +3 -8
  44. package/dist/commonjs/customHooks/useAccordion.js +6 -36
  45. package/dist/commonjs/helpers/index.d.ts +2 -1
  46. package/dist/commonjs/helpers/index.js +10 -1
  47. package/dist/commonjs/i18n/locales/en.json +66 -2
  48. package/dist/commonjs/index.d.ts +1 -0
  49. package/dist/commonjs/index.js +39 -22
  50. package/dist/commonjs/native/NativeInspector.d.ts +60 -0
  51. package/dist/commonjs/native/NativeInspector.js +109 -2
  52. package/dist/commonjs/native/NativeNetworkInspector.d.ts +8 -0
  53. package/dist/commonjs/styles/AppColors.d.ts +36 -0
  54. package/dist/commonjs/styles/AppColors.js +36 -0
  55. package/dist/commonjs/styles/index.d.ts +3 -1
  56. package/dist/commonjs/styles/index.js +3 -1
  57. package/dist/commonjs/types/enums.d.ts +1 -0
  58. package/dist/commonjs/types/enums.js +1 -0
  59. package/dist/commonjs/types/index.d.ts +2 -2
  60. package/dist/esm/capture.d.ts +26 -0
  61. package/dist/esm/capture.js +29 -0
  62. package/dist/esm/components/AnalyticsEventCard.js +11 -11
  63. package/dist/esm/components/AnimatedEntrance.js +4 -38
  64. package/dist/esm/components/DomainHeader.js +4 -16
  65. package/dist/esm/components/EmptyState.js +2 -2
  66. package/dist/esm/components/HeadersSection.js +16 -36
  67. package/dist/esm/components/Inspector/AnalyticsTab.js +2 -3
  68. package/dist/esm/components/Inspector/ConsoleTab.js +2 -2
  69. package/dist/esm/components/Inspector/CrashTab.js +5 -3
  70. package/dist/esm/components/Inspector/DebuggingTab.js +3 -3
  71. package/dist/esm/components/Inspector/InspectorHeader.js +654 -316
  72. package/dist/esm/components/Inspector/MainScreen.js +25 -70
  73. package/dist/esm/components/Inspector/MediaGalleryTab.d.ts +2 -0
  74. package/dist/esm/components/Inspector/MediaGalleryTab.js +267 -0
  75. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +11 -0
  76. package/dist/esm/components/Inspector/MediaPreviewModal.js +353 -0
  77. package/dist/esm/components/Inspector/NetworkTab.js +185 -184
  78. package/dist/esm/components/Inspector/NpmUpdateToast.js +5 -10
  79. package/dist/esm/components/Inspector/ReduxTab.js +5 -3
  80. package/dist/esm/components/Inspector/SettingsPanel.js +246 -1
  81. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +2 -2
  82. package/dist/esm/components/Inspector/StorageTab.js +3 -3
  83. package/dist/esm/components/Inspector/TabBar.js +6 -11
  84. package/dist/esm/components/Inspector/UpdateAvailableModal.js +6 -11
  85. package/dist/esm/components/JsonViewer.js +43 -20
  86. package/dist/esm/components/LogCard.js +5 -5
  87. package/dist/esm/components/MetaAccordion.js +79 -81
  88. package/dist/esm/components/NetworkIcons.d.ts +8 -0
  89. package/dist/esm/components/NetworkIcons.js +42 -0
  90. package/dist/esm/components/SectionHeader.js +4 -16
  91. package/dist/esm/components/SkeletonPlaceholder.js +2 -2
  92. package/dist/esm/components/SourcePageCard.js +44 -46
  93. package/dist/esm/components/Toast.js +4 -4
  94. package/dist/esm/components/TouchableScale.js +7 -33
  95. package/dist/esm/components/TreeNode.js +4 -16
  96. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  97. package/dist/esm/constants/telemetryConfig.js +3 -3
  98. package/dist/esm/constants/version.d.ts +1 -1
  99. package/dist/esm/constants/version.js +1 -1
  100. package/dist/esm/customHooks/useAccordion.d.ts +3 -8
  101. package/dist/esm/customHooks/useAccordion.js +7 -37
  102. package/dist/esm/helpers/index.d.ts +2 -1
  103. package/dist/esm/helpers/index.js +8 -0
  104. package/dist/esm/i18n/locales/en.json +66 -2
  105. package/dist/esm/index.d.ts +1 -0
  106. package/dist/esm/index.js +36 -21
  107. package/dist/esm/native/NativeInspector.d.ts +60 -0
  108. package/dist/esm/native/NativeInspector.js +100 -1
  109. package/dist/esm/native/NativeNetworkInspector.d.ts +8 -0
  110. package/dist/esm/styles/AppColors.d.ts +36 -0
  111. package/dist/esm/styles/AppColors.js +36 -0
  112. package/dist/esm/styles/index.d.ts +3 -1
  113. package/dist/esm/styles/index.js +3 -1
  114. package/dist/esm/types/enums.d.ts +1 -0
  115. package/dist/esm/types/enums.js +1 -0
  116. package/dist/esm/types/index.d.ts +2 -2
  117. package/ios/NetworkInspectorModule.h +1 -0
  118. package/ios/NetworkInspectorModule.mm +736 -7
  119. package/package.json +10 -2
  120. package/react-native-inapp-inspector.podspec +1 -0
  121. package/src/capture.ts +101 -0
  122. package/src/components/AnalyticsEventCard.tsx +15 -13
  123. package/src/components/AnimatedEntrance.tsx +3 -47
  124. package/src/components/DomainHeader.tsx +4 -17
  125. package/src/components/EmptyState.tsx +2 -2
  126. package/src/components/HeadersSection.tsx +31 -56
  127. package/src/components/Inspector/AnalyticsTab.tsx +2 -2
  128. package/src/components/Inspector/ConsoleTab.tsx +2 -1
  129. package/src/components/Inspector/CrashTab.tsx +4 -2
  130. package/src/components/Inspector/DebuggingTab.tsx +2 -2
  131. package/src/components/Inspector/InspectorHeader.tsx +1215 -789
  132. package/src/components/Inspector/MainScreen.tsx +44 -85
  133. package/src/components/Inspector/MediaGalleryTab.tsx +355 -0
  134. package/src/components/Inspector/MediaPreviewModal.tsx +435 -0
  135. package/src/components/Inspector/NetworkTab.tsx +14 -15
  136. package/src/components/Inspector/NpmUpdateToast.tsx +4 -9
  137. package/src/components/Inspector/ReduxTab.tsx +5 -2
  138. package/src/components/Inspector/SettingsPanel.tsx +303 -0
  139. package/src/components/Inspector/SkeletonPlaceholder.tsx +2 -2
  140. package/src/components/Inspector/StorageTab.tsx +3 -3
  141. package/src/components/Inspector/TabBar.tsx +6 -12
  142. package/src/components/Inspector/UpdateAvailableModal.tsx +6 -10
  143. package/src/components/JsonViewer.tsx +101 -60
  144. package/src/components/LogCard.tsx +10 -8
  145. package/src/components/MetaAccordion.tsx +6 -6
  146. package/src/components/NetworkIcons.tsx +150 -0
  147. package/src/components/SectionHeader.tsx +4 -16
  148. package/src/components/SkeletonPlaceholder.tsx +2 -2
  149. package/src/components/SourcePageCard.tsx +57 -55
  150. package/src/components/Toast.tsx +4 -4
  151. package/src/components/TouchableScale.tsx +8 -38
  152. package/src/components/TreeNode.tsx +5 -20
  153. package/src/constants/telemetryConfig.ts +3 -5
  154. package/src/constants/version.ts +1 -1
  155. package/src/customHooks/useAccordion.tsx +10 -43
  156. package/src/helpers/index.ts +10 -1
  157. package/src/i18n/locales/en.json +69 -2
  158. package/src/index.tsx +51 -23
  159. package/src/native/NativeInspector.ts +186 -1
  160. package/src/native/NativeNetworkInspector.ts +9 -0
  161. package/src/styles/AppColors.ts +38 -0
  162. package/src/styles/index.ts +3 -1
  163. package/src/types/enums.ts +3 -0
  164. package/src/types/index.ts +2 -2
  165. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  166. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  167. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  168. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  169. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  170. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  171. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  172. package/android/.gradle/8.9/gc.properties +0 -0
  173. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  174. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  175. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  176. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  177. package/android/.gradle/9.2.0/gc.properties +0 -0
  178. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  179. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  180. package/android/.gradle/vcs-1/gc.properties +0 -0
  181. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/results.bin +0 -1
  182. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/transformed/classes/classes_dex/classes.dex +0 -0
  183. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/results.bin +0 -1
  184. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/BuildConfig.dex +0 -0
  185. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView$iconView$1.dex +0 -0
  186. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView.dex +0 -0
  187. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NativeNetworkInspectorSpec.dex +0 -0
  188. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$Companion.dex +0 -0
  189. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$frameCallback$1.dex +0 -0
  190. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$shakeListener$1.dex +0 -0
  191. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule.dex +0 -0
  192. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorPackage.dex +0 -0
  193. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  194. package/android/build/generated/source/buildConfig/debug/com/inappinspector/BuildConfig.java +0 -10
  195. package/android/build/generated/source/codegen/java/com/inappinspector/NativeNetworkInspectorSpec.java +0 -104
  196. package/android/build/generated/source/codegen/jni/CMakeLists.txt +0 -28
  197. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec-generated.cpp +0 -128
  198. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec.h +0 -31
  199. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.cpp +0 -22
  200. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.h +0 -24
  201. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.cpp +0 -16
  202. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.h +0 -17
  203. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.cpp +0 -19
  204. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.h +0 -18
  205. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/RNInAppInspectorSpecJSI.h +0 -177
  206. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.cpp +0 -17
  207. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.h +0 -23
  208. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.cpp +0 -16
  209. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.h +0 -20
  210. package/android/build/generated/source/codegen/schema.json +0 -1
  211. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +0 -7
  212. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +0 -18
  213. package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
  214. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +0 -6
  215. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +0 -1
  216. package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
  217. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  218. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  219. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  220. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -1
  221. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  222. package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
  223. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  224. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  225. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  226. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  227. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/BuildConfig.class +0 -0
  228. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  229. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +0 -2
  230. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +0 -7
  231. package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-react-native-inapp-inspector.jar +0 -0
  232. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +0 -7
  233. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +0 -1
  234. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +0 -1
  235. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  236. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/BuildConfig.class +0 -0
  237. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  238. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  239. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  240. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  241. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  242. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  243. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule.class +0 -0
  244. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorPackage.class +0 -0
  245. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  246. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +0 -1
  247. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  248. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  249. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  250. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  251. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  252. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  253. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  254. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  255. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  256. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  257. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  258. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  259. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  260. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  261. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  262. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  263. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  264. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  265. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  266. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  267. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  268. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  269. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  270. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  271. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  272. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  273. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  274. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  275. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  276. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  277. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  278. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  279. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  280. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  281. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  282. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  283. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  284. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  285. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  286. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  287. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  288. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  289. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  290. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  291. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  292. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  293. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  294. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  295. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  296. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  297. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  298. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  299. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  300. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  301. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  302. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  303. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  304. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  305. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  306. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  307. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  308. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  309. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  310. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  311. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  312. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  313. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  314. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  315. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  316. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  317. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  318. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  319. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  320. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  321. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  322. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  323. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  324. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  325. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  326. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  327. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  328. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  329. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  330. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  331. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  332. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  333. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  334. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  335. package/android/build/outputs/aar/react-native-inapp-inspector-debug.aar +0 -0
  336. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -17
  337. package/android/build/reports/problems/problems-report.html +0 -659
  338. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  339. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  340. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  341. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  342. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  343. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  344. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  345. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule.class +0 -0
  346. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorPackage.class +0 -0
@@ -99,7 +99,16 @@ export const getSize = (data: unknown): string => {
99
99
  }
100
100
  };
101
101
 
102
- export const copyToClipboard = (value: unknown, label: string): void => {
102
+ export const formatBytes = (bytes: number): string => {
103
+ if (bytes === 0 || !bytes || isNaN(bytes)) return '0 B';
104
+ const k = 1024;
105
+ const sizes = ['B', 'KB', 'MB', 'GB'];
106
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
107
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(1))} ${sizes[i] || 'B'}`;
108
+ };
109
+
110
+ export const copyToClipboard = (value: unknown, label?: string): void => {
111
+
103
112
  const resolved = typeof value === 'function' ? (value as Function)() : value;
104
113
  let textToCopy = '';
105
114
  if (typeof resolved === 'string') {
@@ -24,7 +24,19 @@
24
24
  "updateAvailableTitle": "Update Available",
25
25
  "updateAvailableMessage": "react-native-inapp-inspector v{{version}} is available on NPM (installed: v{{installed}}).",
26
26
  "clearEverythingTitle": "Clear Everything",
27
- "clearEverythingMessage": "This clears all tabs — APIs, Logs, Analytics and Redux timeline. Continue?",
27
+ "clearEverythingMessage": "This clears all tabs — APIs, Logs, Analytics, Redux timeline and Crash history. Continue?",
28
+ "photo": "Photo",
29
+ "record": "Record",
30
+ "rec": "REC",
31
+ "clear": "Clear",
32
+ "about": "About",
33
+ "screenshotCaptured": "📸 Screenshot captured & saved",
34
+ "screenshotFailed": "Failed to capture screenshot",
35
+ "screenshotError": "Error taking screenshot",
36
+ "recordingStarted": "🔴 Video recording started",
37
+ "recordingSaved": "🎥 Recording saved ({{duration}}s)",
38
+ "recordingError": "Recording error",
39
+ "recordingStartFailed": "Failed to start recording",
28
40
  "paramCount": "{{count}} param",
29
41
  "paramCount_plural": "{{count}} params",
30
42
  "sourceFirebase": "FB",
@@ -41,8 +53,10 @@
41
53
  "performance": "Performance",
42
54
  "crash": "Crash",
43
55
  "device": "Device",
44
- "storage": "Storage"
56
+ "storage": "Storage",
57
+ "media": "Media"
45
58
  },
59
+
46
60
  "settings": {
47
61
  "mainTitle": "Settings & Modules",
48
62
  "mainSubtitle": "Manage modules and preferences",
@@ -58,6 +72,7 @@
58
72
  "modulesAndTools": "Modules & Tools",
59
73
  "uiPreferences": "UI & Display",
60
74
  "ramLimits": "RAM & Limits",
75
+ "screenVideoCapture": "Screen & Video Capture",
61
76
  "zeroOverheadTitle": "Zero Background Overhead",
62
77
  "zeroOverheadDesc": "Check the modules you wish to activate. Disabled modules consume 0% CPU & memory until saved.",
63
78
  "unsavedPending": "● Unsaved selections pending",
@@ -161,7 +176,34 @@
161
176
  "clearHistoryDesc": "{{count}} crash logs stored",
162
177
  "historyCleared": "Crash logs cleared."
163
178
  },
179
+ "media": {
180
+ "title": "Screen & Video Capture",
181
+ "badge": "Native H.264 / GIF",
182
+ "desc": "Configure screenshot formats, quality, video FPS, audio narration, GIF recording & storage",
183
+ "screenshotCardTitle": "Screenshot Formats & Quality",
184
+ "screenshotCardDesc": "High-resolution full-window snapshot configuration",
185
+ "imageFormat": "Image Format",
186
+ "imageFormatDesc": "PNG (lossless), JPEG (compact), or WEBP",
187
+ "autoHide": "Auto-Hide Inspector Overlay",
188
+ "autoHideDesc": "Excludes inspector UI from screenshots",
189
+ "enabled": "ENABLED",
190
+ "videoCardTitle": "Video & GIF Recording",
191
+ "videoCardDesc": "H.264 MP4 recording & animated GIF export",
192
+ "audioMode": "Audio Narration Mode",
193
+ "audioModeDesc": "Muted, App Audio, or Voice Narration",
194
+ "frameRate": "Frame Rate",
195
+ "frameRateDesc": "Higher FPS yields smoother recordings",
196
+ "gifAutoOpt": "GIF Auto-Optimization",
197
+ "gifAutoOptDesc": "Converts video recordings for GitHub PRs & Slack",
198
+ "purgeAll": "Purge All Captured Media",
199
+ "purgeAllDesc": "Deletes all stored screenshots, videos, and GIFs",
200
+ "purgeCacheBtn": "Purge Cache",
201
+ "purgeConfirmTitle": "Purge Media Storage",
202
+ "purgeConfirmMessage": "This deletes all captured media files from local cache. Continue?",
203
+ "purgedSuccess": "Media storage purged"
204
+ },
164
205
  "general": {
206
+
165
207
  "darkMode": "Dark Mode Theme",
166
208
  "darkModeDescription": "Toggle sleek dark aesthetic or light contrast",
167
209
  "modalHeight": "Inspector Window Height",
@@ -1054,5 +1096,30 @@
1054
1096
  "frameCopy": "Copy",
1055
1097
  "frameCopied": "Copied",
1056
1098
  "componentHierarchy": "Component Hierarchy"
1099
+ },
1100
+ "mediaGallery": {
1101
+ "all": "All ({{count}})",
1102
+ "photos": "Photos",
1103
+ "videos": "Videos",
1104
+ "gifs": "GIFs",
1105
+ "purge": "Purge ({{size}})",
1106
+ "purgeTitle": "Purge All Media",
1107
+ "purgeMessage": "This will permanently delete all {{count}} captured screenshots, videos, and GIFs ({{size}}). Continue?",
1108
+ "noMediaTitle": "No Captured Media",
1109
+ "noMediaDesc": "Use the Photo or Video Record button in the toolbar to capture whole-app screenshots, screen recordings, or GIFs.",
1110
+ "deleted": "Deleted media item",
1111
+ "allPurged": "All captured media purged",
1112
+ "converting": "Converting...",
1113
+ "convertToGif": "Convert to GIF",
1114
+ "convertedSuccess": "Converted to Animated GIF successfully!",
1115
+ "convertFailed": "Failed to convert to GIF",
1116
+ "share": "Share",
1117
+ "copyUri": "Copy URI",
1118
+ "uriCopied": "File URI copied to clipboard",
1119
+ "delete": "Delete",
1120
+ "deleteTitle": "Delete Media",
1121
+ "deleteMessage": "Are you sure you want to delete {{filename}}?",
1122
+ "shareUnavailable": "Sharing not available on this device"
1057
1123
  }
1058
1124
  }
1125
+
package/src/index.tsx CHANGED
@@ -439,6 +439,7 @@ const NetworkInspector = ({
439
439
  storage: false,
440
440
  debugging: false,
441
441
  });
442
+
442
443
  setDefaultTab('apis');
443
444
  setIsAutoRamLimitEnabled(true);
444
445
  const profile = calculateRamBasedLimits(deviceFreeRamMb);
@@ -885,12 +886,12 @@ const NetworkInspector = ({
885
886
  Animated.timing(clearAnim, {
886
887
  toValue: 1,
887
888
  duration: 320,
888
- useNativeDriver: true,
889
+ useNativeDriver: false,
889
890
  }),
890
891
  Animated.timing(clearAnim, {
891
892
  toValue: 0,
892
893
  duration: 0,
893
- useNativeDriver: true,
894
+ useNativeDriver: false,
894
895
  }),
895
896
  ]).start();
896
897
  handleClearAll();
@@ -903,44 +904,46 @@ const NetworkInspector = ({
903
904
  }, []);
904
905
 
905
906
  useEffect(() => {
907
+ if (visible) return;
906
908
  const loop = Animated.loop(
907
909
  Animated.sequence([
908
910
  Animated.timing(pulseAnim, {
909
911
  toValue: 1.2,
910
912
  duration: 800,
911
- useNativeDriver: true,
913
+ useNativeDriver: false,
912
914
  }),
913
915
  Animated.timing(pulseAnim, {
914
916
  toValue: 1,
915
917
  duration: 800,
916
- useNativeDriver: true,
918
+ useNativeDriver: false,
917
919
  }),
918
920
  ]),
919
921
  );
920
922
  loop.start();
921
923
  return () => loop.stop();
922
- }, [pulseAnim]);
924
+ }, [pulseAnim, visible]);
923
925
 
924
926
  // #4 — sweep the shine streak across the launcher, pause, repeat.
925
927
  useEffect(() => {
928
+ if (visible) return;
926
929
  const loop = Animated.loop(
927
930
  Animated.sequence([
928
931
  Animated.timing(fabShineAnim, {
929
932
  toValue: 1,
930
933
  duration: 1100,
931
- useNativeDriver: true,
934
+ useNativeDriver: false,
932
935
  }),
933
936
  Animated.delay(1600),
934
937
  Animated.timing(fabShineAnim, {
935
938
  toValue: 0,
936
939
  duration: 0,
937
- useNativeDriver: true,
940
+ useNativeDriver: false,
938
941
  }),
939
942
  ]),
940
943
  );
941
944
  loop.start();
942
945
  return () => loop.stop();
943
- }, [fabShineAnim]);
946
+ }, [fabShineAnim, visible]);
944
947
 
945
948
  useEffect(() => {
946
949
  const loop = Animated.loop(
@@ -948,12 +951,12 @@ const NetworkInspector = ({
948
951
  Animated.timing(activePulseAnim, {
949
952
  toValue: 1,
950
953
  duration: 1200,
951
- useNativeDriver: true,
954
+ useNativeDriver: false,
952
955
  }),
953
956
  Animated.timing(activePulseAnim, {
954
957
  toValue: 0.4,
955
958
  duration: 1200,
956
- useNativeDriver: true,
959
+ useNativeDriver: false,
957
960
  }),
958
961
  ]),
959
962
  );
@@ -967,12 +970,12 @@ const NetworkInspector = ({
967
970
  Animated.timing(unreadPulseAnim, {
968
971
  toValue: 1.3,
969
972
  duration: 800,
970
- useNativeDriver: true,
973
+ useNativeDriver: false,
971
974
  }),
972
975
  Animated.timing(unreadPulseAnim, {
973
976
  toValue: 0.8,
974
977
  duration: 800,
975
- useNativeDriver: true,
978
+ useNativeDriver: false,
976
979
  }),
977
980
  ]),
978
981
  );
@@ -1021,6 +1024,7 @@ const NetworkInspector = ({
1021
1024
  useEffect(() => {
1022
1025
  if (!useNativeFab) return;
1023
1026
  const unsubscribe = subscribeNativeFloatingButtonPress(() => {
1027
+ hideNativeFloatingButton().catch(() => {});
1024
1028
  setVisible(true);
1025
1029
  });
1026
1030
  return () => {
@@ -1032,7 +1036,13 @@ const NetworkInspector = ({
1032
1036
  useEffect(() => {
1033
1037
  if (!useNativeFab) return;
1034
1038
  const unsubscribe = subscribeNativeDeviceShake(() => {
1035
- setVisible(prev => !prev);
1039
+ setVisible(prev => {
1040
+ const next = !prev;
1041
+ if (next) {
1042
+ hideNativeFloatingButton().catch(() => {});
1043
+ }
1044
+ return next;
1045
+ });
1036
1046
  });
1037
1047
  return () => {
1038
1048
  unsubscribe();
@@ -1453,7 +1463,10 @@ const NetworkInspector = ({
1453
1463
 
1454
1464
  const groupedData = useMemo(() => {
1455
1465
  const result: GroupedListItem[] = [];
1456
- const groups: {pageName: string; color: string; logs: NetworkLog[]}[] = [];
1466
+ const groupMap = new Map<
1467
+ string,
1468
+ {pageName: string; color: string; logs: NetworkLog[]}
1469
+ >();
1457
1470
 
1458
1471
  for (let i = 0; i < filteredLogs.length; i++) {
1459
1472
  const log = filteredLogs[i];
@@ -1461,16 +1474,16 @@ const NetworkInspector = ({
1461
1474
  logRouteMapRef.current.get(log.id) || (log as any)?.routeInfo;
1462
1475
  const pageName = getLogPageName(log, routeInfo);
1463
1476
 
1464
- if (
1465
- groups.length === 0 ||
1466
- groups[groups.length - 1].pageName !== pageName
1467
- ) {
1468
- 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);
1469
1481
  }
1470
- groups[groups.length - 1].logs.push(log);
1482
+ group.logs.push(log);
1471
1483
  }
1472
1484
 
1473
- groups.forEach((g, idx) => {
1485
+ let idx = 0;
1486
+ groupMap.forEach(g => {
1474
1487
  let success = 0;
1475
1488
  let failed = 0;
1476
1489
  let loading = 0;
@@ -1489,7 +1502,7 @@ const NetworkInspector = ({
1489
1502
 
1490
1503
  result.push({
1491
1504
  type: 'header',
1492
- id: `hdr-${g.logs[0]?.id || 'empty'}-${g.pageName}`,
1505
+ id: `hdr-${g.pageName}`,
1493
1506
  pageName: g.pageName,
1494
1507
  color: g.color,
1495
1508
  stats: {success, failed, loading},
@@ -1498,6 +1511,7 @@ const NetworkInspector = ({
1498
1511
  isCollapsed,
1499
1512
  isFirst: idx === 0,
1500
1513
  });
1514
+ idx++;
1501
1515
 
1502
1516
  if (!isCollapsed) {
1503
1517
  const displayLogs = g.logs.filter(l => {
@@ -1510,7 +1524,7 @@ const NetworkInspector = ({
1510
1524
  displayLogs.forEach((log, index) => {
1511
1525
  result.push({
1512
1526
  type: 'log',
1513
- id: log.id,
1527
+ id: `log-${log.id}`,
1514
1528
  log,
1515
1529
  isLast: index === displayLogs.length - 1,
1516
1530
  color: g.color,
@@ -2604,4 +2618,18 @@ export {
2604
2618
  isFirebaseRemoteConfigAvailable,
2605
2619
  } from './helpers/remoteConfig';
2606
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
+
2607
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',
@@ -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',
@@ -1403,6 +1404,7 @@ export const getRawStyles = (colors: typeof AppColors) => ({
1403
1404
  borderTopLeftRadius: 20,
1404
1405
  borderTopRightRadius: 20,
1405
1406
  overflow: 'hidden',
1407
+ flexShrink: 0,
1406
1408
  },
1407
1409
 
1408
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,12 @@ 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',
84
87
  About: 'about',
85
88
  } as const;
86
89
  export type 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;
File without changes