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
@@ -0,0 +1,435 @@
1
+ import React, {useState} from 'react';
2
+ import {
3
+ Alert,
4
+ Dimensions,
5
+ Image,
6
+ Modal,
7
+ Platform,
8
+ Share,
9
+ StyleSheet,
10
+ Text,
11
+ TouchableOpacity,
12
+ View,
13
+ } from 'react-native';
14
+ import {AppColors} from '../../styles/AppColors';
15
+ import {AppFonts} from '../../styles/AppFonts';
16
+ import TouchableScale from '../TouchableScale';
17
+ import {
18
+ CloseWhite,
19
+ CopyIcon,
20
+ FilmIcon,
21
+ GifIcon,
22
+ ImageIcon,
23
+ SendIcon,
24
+ TrashIcon,
25
+ } from '../NetworkIcons';
26
+ import {CapturedMediaItem, ScreenCapture} from '../../capture';
27
+ import {copyToClipboard, formatBytes} from '../../helpers';
28
+ import {showToast} from '../../helpers/toast';
29
+ import {useTranslation} from '../../i18n';
30
+
31
+ interface MediaPreviewModalProps {
32
+ item: CapturedMediaItem | null;
33
+ visible: boolean;
34
+ onClose: () => void;
35
+ onDelete: (item: CapturedMediaItem) => void;
36
+ onConvertToGif?: (item: CapturedMediaItem) => void;
37
+ }
38
+
39
+ export const MediaPreviewModal: React.FC<MediaPreviewModalProps> = ({
40
+ item,
41
+ visible,
42
+ onClose,
43
+ onDelete,
44
+ onConvertToGif,
45
+ }) => {
46
+ const {t} = useTranslation();
47
+ const [isConverting, setIsConverting] = useState(false);
48
+ const [imageError, setImageError] = useState(false);
49
+
50
+ if (!item) return null;
51
+
52
+ const handleShare = async () => {
53
+ try {
54
+ await Share.share(
55
+ Platform.OS === 'ios'
56
+ ? {url: item.uri, title: item.filename}
57
+ : {message: `Captured media: ${item.filename}`, url: item.uri},
58
+ );
59
+ } catch {
60
+ showToast(t('mediaGallery.shareUnavailable'));
61
+ }
62
+ };
63
+
64
+ const handleCopyUri = () => {
65
+ copyToClipboard(item.uri);
66
+ showToast(t('mediaGallery.uriCopied'));
67
+ };
68
+
69
+ const handleDelete = () => {
70
+ Alert.alert(
71
+ t('mediaGallery.deleteTitle'),
72
+ t('mediaGallery.deleteMessage', {filename: item.filename}),
73
+ [
74
+ {text: t('common.cancel'), style: 'cancel'},
75
+ {
76
+ text: t('mediaGallery.delete'),
77
+ style: 'destructive',
78
+ onPress: () => {
79
+ onDelete(item);
80
+ onClose();
81
+ },
82
+ },
83
+ ],
84
+ );
85
+ };
86
+
87
+ const handleConvert = async () => {
88
+ if (!onConvertToGif) return;
89
+ setIsConverting(true);
90
+ try {
91
+ await onConvertToGif(item);
92
+ showToast(t('mediaGallery.convertedSuccess'));
93
+ } catch {
94
+ showToast(t('mediaGallery.convertFailed'));
95
+ } finally {
96
+ setIsConverting(false);
97
+ }
98
+ };
99
+
100
+ const isVideo = item.type === 'video';
101
+ const isGif = item.type === 'gif';
102
+ const durationSec = item.durationMs ? (item.durationMs / 1000).toFixed(1) : null;
103
+
104
+ return (
105
+ <Modal
106
+ visible={visible}
107
+ transparent={true}
108
+ animationType="fade"
109
+ onRequestClose={onClose}>
110
+ <View style={previewStyles.overlay}>
111
+ {/* Header Bar */}
112
+ <View style={previewStyles.header}>
113
+ <View style={previewStyles.headerLeft}>
114
+ <View
115
+ style={[
116
+ previewStyles.badge,
117
+ {
118
+ borderColor: isVideo
119
+ ? `${AppColors.sky400}80`
120
+ : isGif
121
+ ? `${AppColors.warningAmber}80`
122
+ : `${AppColors.emerald500}80`,
123
+ backgroundColor: isVideo
124
+ ? `${AppColors.sky400}20`
125
+ : isGif
126
+ ? `${AppColors.warningAmber}20`
127
+ : `${AppColors.emerald500}20`,
128
+ },
129
+ ]}>
130
+ {isVideo ? (
131
+ <FilmIcon size={13} color={AppColors.sky400} />
132
+ ) : isGif ? (
133
+ <GifIcon size={13} color={AppColors.warningAmber} />
134
+ ) : (
135
+ <ImageIcon size={13} color={AppColors.emerald500} />
136
+ )}
137
+ <Text
138
+ style={[
139
+ previewStyles.badgeText,
140
+ {
141
+ color: isVideo
142
+ ? AppColors.sky400
143
+ : isGif
144
+ ? AppColors.warningAmber
145
+ : AppColors.emerald500,
146
+ },
147
+ ]}>
148
+ {item.format.toUpperCase()}
149
+ </Text>
150
+ </View>
151
+ <View style={{flex: 1, minWidth: 0}}>
152
+ <Text style={previewStyles.title} numberOfLines={1}>
153
+ {item.filename}
154
+ </Text>
155
+ <Text style={previewStyles.subtitle}>
156
+ {formatBytes(item.sizeBytes)} • {new Date(item.timestamp).toLocaleTimeString([], {hour: '2-digit', minute: '2-digit', second: '2-digit'})}
157
+ </Text>
158
+ </View>
159
+ </View>
160
+ <TouchableOpacity
161
+ onPress={onClose}
162
+ style={previewStyles.closeBtn}
163
+ hitSlop={{top: 10, bottom: 10, left: 10, right: 10}}>
164
+ <CloseWhite size={14} color={AppColors.white} />
165
+ </TouchableOpacity>
166
+ </View>
167
+
168
+ {/* Media Preview Stage */}
169
+ <View style={previewStyles.stage}>
170
+ <View style={previewStyles.previewCard}>
171
+ <Image
172
+ source={{uri: item.uri}}
173
+ style={previewStyles.image}
174
+ resizeMode="contain"
175
+ onError={() => setImageError(true)}
176
+ />
177
+
178
+ {/* Video overlay badge with playback duration */}
179
+ {isVideo && (
180
+ <View style={previewStyles.videoBadgeOverlay}>
181
+ <View style={previewStyles.playPill}>
182
+ <FilmIcon size={13} color={AppColors.white} />
183
+ <Text style={previewStyles.playPillText}>
184
+ {durationSec ? `${durationSec}s` : 'VIDEO'}
185
+ </Text>
186
+ </View>
187
+ </View>
188
+ )}
189
+
190
+ {/* GIF loop badge */}
191
+ {isGif && (
192
+ <View style={previewStyles.videoBadgeOverlay}>
193
+ <View style={[previewStyles.playPill, {backgroundColor: `${AppColors.warningAmber}CC`}]}>
194
+ <GifIcon size={13} color={AppColors.white} />
195
+ <Text style={previewStyles.playPillText}>ANIMATED GIF</Text>
196
+ </View>
197
+ </View>
198
+ )}
199
+ </View>
200
+
201
+ {/* Quick Details Card */}
202
+ <View style={previewStyles.metaPillRow}>
203
+ {item.width && item.height ? (
204
+ <View style={previewStyles.metaPill}>
205
+ <Text style={previewStyles.metaPillLabel}>DIMENSIONS</Text>
206
+ <Text style={previewStyles.metaPillValue}>{`${item.width} × ${item.height}`}</Text>
207
+ </View>
208
+ ) : null}
209
+ <View style={previewStyles.metaPill}>
210
+ <Text style={previewStyles.metaPillLabel}>SIZE</Text>
211
+ <Text style={previewStyles.metaPillValue}>{formatBytes(item.sizeBytes)}</Text>
212
+ </View>
213
+ {durationSec ? (
214
+ <View style={previewStyles.metaPill}>
215
+ <Text style={previewStyles.metaPillLabel}>DURATION</Text>
216
+ <Text style={previewStyles.metaPillValue}>{`${durationSec}s`}</Text>
217
+ </View>
218
+ ) : null}
219
+ </View>
220
+ </View>
221
+
222
+ {/* Bottom Toolbar */}
223
+ <View style={previewStyles.footer}>
224
+ {isVideo && onConvertToGif && (
225
+ <TouchableScale
226
+ onPress={handleConvert}
227
+ disabled={isConverting}
228
+ style={[
229
+ previewStyles.actionBtn,
230
+ {
231
+ backgroundColor: `${AppColors.warningAmber}25`,
232
+ borderColor: `${AppColors.warningAmber}70`,
233
+ },
234
+ ]}>
235
+ <GifIcon size={15} color={AppColors.warningAmber} />
236
+ <Text style={[previewStyles.actionText, {color: AppColors.warningAmber}]}>
237
+ {isConverting ? t('mediaGallery.converting') : t('mediaGallery.convertToGif')}
238
+ </Text>
239
+ </TouchableScale>
240
+ )}
241
+
242
+ <TouchableScale onPress={handleShare} style={previewStyles.actionBtn}>
243
+ <SendIcon size={15} color={AppColors.sky400} />
244
+ <Text style={previewStyles.actionText}>{t('mediaGallery.share')}</Text>
245
+ </TouchableScale>
246
+
247
+ <TouchableScale onPress={handleCopyUri} style={previewStyles.actionBtn}>
248
+ <CopyIcon size={15} color={AppColors.white} />
249
+ <Text style={previewStyles.actionText}>{t('mediaGallery.copyUri')}</Text>
250
+ </TouchableScale>
251
+
252
+ <TouchableScale
253
+ onPress={handleDelete}
254
+ style={[
255
+ previewStyles.actionBtn,
256
+ {
257
+ backgroundColor: `${AppColors.red500}25`,
258
+ borderColor: `${AppColors.red500}70`,
259
+ },
260
+ ]}>
261
+ <TrashIcon size={15} color={AppColors.red500} />
262
+ <Text style={[previewStyles.actionText, {color: AppColors.red500}]}>
263
+ {t('mediaGallery.delete')}
264
+ </Text>
265
+ </TouchableScale>
266
+ </View>
267
+ </View>
268
+ </Modal>
269
+ );
270
+ };
271
+
272
+ const {width: SCREEN_WIDTH, height: SCREEN_HEIGHT} = Dimensions.get('window');
273
+
274
+ const previewStyles = StyleSheet.create({
275
+ overlay: {
276
+ flex: 1,
277
+ backgroundColor: '#090D16FA',
278
+ justifyContent: 'space-between',
279
+ },
280
+ header: {
281
+ flexDirection: 'row',
282
+ alignItems: 'center',
283
+ justifyContent: 'space-between',
284
+ paddingHorizontal: 16,
285
+ paddingTop: Platform.OS === 'ios' ? 52 : 20,
286
+ paddingBottom: 14,
287
+ borderBottomWidth: 1,
288
+ borderBottomColor: AppColors.borderGlassLight,
289
+ backgroundColor: AppColors.headerGlassDark,
290
+ },
291
+ headerLeft: {
292
+ flexDirection: 'row',
293
+ alignItems: 'center',
294
+ gap: 10,
295
+ flex: 1,
296
+ minWidth: 0,
297
+ marginRight: 10,
298
+ },
299
+ badge: {
300
+ flexDirection: 'row',
301
+ alignItems: 'center',
302
+ gap: 4,
303
+ paddingHorizontal: 8,
304
+ paddingVertical: 4,
305
+ borderRadius: 6,
306
+ borderWidth: 1,
307
+ },
308
+ badgeText: {
309
+ fontFamily: AppFonts.interBold,
310
+ fontSize: 10.5,
311
+ letterSpacing: 0.4,
312
+ },
313
+ title: {
314
+ fontFamily: AppFonts.interSemiBold,
315
+ fontSize: 13.5,
316
+ color: AppColors.white,
317
+ },
318
+ subtitle: {
319
+ fontFamily: AppFonts.interRegular,
320
+ fontSize: 11,
321
+ color: AppColors.whiteAlpha60,
322
+ marginTop: 1,
323
+ },
324
+ closeBtn: {
325
+ width: 32,
326
+ height: 32,
327
+ borderRadius: 16,
328
+ backgroundColor: AppColors.whiteAlpha12,
329
+ alignItems: 'center',
330
+ justifyContent: 'center',
331
+ },
332
+ stage: {
333
+ flex: 1,
334
+ alignItems: 'center',
335
+ justifyContent: 'center',
336
+ paddingHorizontal: 16,
337
+ paddingVertical: 12,
338
+ },
339
+ previewCard: {
340
+ width: SCREEN_WIDTH - 32,
341
+ height: SCREEN_HEIGHT * 0.60,
342
+ borderRadius: 12,
343
+ overflow: 'hidden',
344
+ backgroundColor: '#05070D',
345
+ borderWidth: 1,
346
+ borderColor: AppColors.borderGlassLight,
347
+ alignItems: 'center',
348
+ justifyContent: 'center',
349
+ position: 'relative',
350
+ },
351
+ image: {
352
+ width: '100%',
353
+ height: '100%',
354
+ },
355
+ videoBadgeOverlay: {
356
+ position: 'absolute',
357
+ bottom: 12,
358
+ left: 12,
359
+ },
360
+ playPill: {
361
+ flexDirection: 'row',
362
+ alignItems: 'center',
363
+ gap: 6,
364
+ backgroundColor: `${AppColors.slate900}D9`,
365
+ paddingHorizontal: 10,
366
+ paddingVertical: 5,
367
+ borderRadius: 16,
368
+ borderWidth: 1,
369
+ borderColor: AppColors.whiteAlpha20,
370
+ },
371
+ playPillText: {
372
+ fontFamily: AppFonts.interSemiBold,
373
+ fontSize: 11,
374
+ color: AppColors.white,
375
+ letterSpacing: 0.3,
376
+ },
377
+ metaPillRow: {
378
+ flexDirection: 'row',
379
+ alignItems: 'center',
380
+ justifyContent: 'center',
381
+ gap: 8,
382
+ marginTop: 14,
383
+ flexWrap: 'wrap',
384
+ },
385
+ metaPill: {
386
+ backgroundColor: AppColors.whiteAlpha08,
387
+ paddingHorizontal: 10,
388
+ paddingVertical: 5,
389
+ borderRadius: 8,
390
+ borderWidth: 1,
391
+ borderColor: AppColors.whiteAlpha12,
392
+ alignItems: 'center',
393
+ },
394
+ metaPillLabel: {
395
+ fontFamily: AppFonts.interMedium,
396
+ fontSize: 9,
397
+ color: AppColors.slate400,
398
+ letterSpacing: 0.4,
399
+ },
400
+ metaPillValue: {
401
+ fontFamily: AppFonts.interSemiBold,
402
+ fontSize: 11.5,
403
+ color: AppColors.white,
404
+ marginTop: 1,
405
+ },
406
+ footer: {
407
+ flexDirection: 'row',
408
+ alignItems: 'center',
409
+ justifyContent: 'center',
410
+ flexWrap: 'wrap',
411
+ gap: 8,
412
+ paddingHorizontal: 16,
413
+ paddingTop: 12,
414
+ paddingBottom: Platform.OS === 'ios' ? 36 : 20,
415
+ borderTopWidth: 1,
416
+ borderTopColor: AppColors.borderGlassLight,
417
+ backgroundColor: AppColors.headerGlassDark,
418
+ },
419
+ actionBtn: {
420
+ flexDirection: 'row',
421
+ alignItems: 'center',
422
+ gap: 6,
423
+ paddingHorizontal: 14,
424
+ paddingVertical: 9,
425
+ borderRadius: 8,
426
+ backgroundColor: AppColors.whiteAlpha08,
427
+ borderWidth: 1,
428
+ borderColor: AppColors.whiteAlpha15,
429
+ },
430
+ actionText: {
431
+ fontFamily: AppFonts.interMedium,
432
+ fontSize: 12,
433
+ color: AppColors.white,
434
+ },
435
+ });
@@ -2,6 +2,7 @@ import React, {useCallback, useMemo, useRef} from 'react';
2
2
  import {
3
3
  Animated,
4
4
  FlatList,
5
+ Platform,
5
6
  Pressable,
6
7
  ScrollView,
7
8
  Text,
@@ -311,7 +312,6 @@ const NetworkTab = React.memo(() => {
311
312
  isSelected={selectedLogs.has(log.id)}
312
313
  onToggleSelect={toggleSelect}
313
314
  onPress={() => {
314
- animateNextLayout();
315
315
  setSelected(log);
316
316
  }}
317
317
  timelineMinStart={minStart}
@@ -338,18 +338,7 @@ const NetworkTab = React.memo(() => {
338
338
 
339
339
  return (
340
340
  <View style={{flex: 1}}>
341
- <FlatList
342
- ref={apisListRef}
343
- data={groupedData}
344
- keyExtractor={item => item?.id?.toString()}
345
- renderItem={renderItem}
346
- initialNumToRender={12}
347
- maxToRenderPerBatch={8}
348
- windowSize={5}
349
- removeClippedSubviews={true}
350
- renderToHardwareTextureAndroid={true}
351
- ListHeaderComponent={
352
- <View style={{marginTop: 6}}>
341
+ <View style={{marginTop: 6}}>
353
342
  {/* Network Health & Telemetry Strip */}
354
343
  {networkMetrics != null && networkMetrics.totalCount > 0 && (
355
344
  <View
@@ -570,16 +559,24 @@ const NetworkTab = React.memo(() => {
570
559
  </View>
571
560
  </View>
572
561
 
573
- {/* Quick Filter Horizontal Chips Bar with Live Counts */}
574
- <View style={{marginBottom: 8}}>
562
+ {/* Quick Filter Horizontal Chips Bar with Sticky "More Filters" on Right */}
563
+ <View
564
+ style={{
565
+ flexDirection: 'row',
566
+ alignItems: 'center',
567
+ marginBottom: 8,
568
+ paddingHorizontal: 12,
569
+ gap: 6,
570
+ }}>
575
571
  <ScrollView
576
572
  horizontal
577
573
  showsHorizontalScrollIndicator={false}
574
+ style={{flex: 1}}
578
575
  contentContainerStyle={{
579
- paddingHorizontal: 12,
580
576
  flexDirection: 'row',
581
577
  alignItems: 'center',
582
578
  gap: 6,
579
+ paddingRight: 6,
583
580
  }}>
584
581
  {QUICK_CHIPS.map(chip => {
585
582
  const isActive = quickFilter === chip.id;
@@ -646,67 +643,73 @@ const NetworkTab = React.memo(() => {
646
643
  </TouchableScale>
647
644
  );
648
645
  })}
646
+ </ScrollView>
649
647
 
650
- <TouchableScale
651
- onPress={() => setIsFilterModalOpen(true)}>
652
- <View
648
+ <TouchableScale
649
+ onPress={() => setIsFilterModalOpen(true)}
650
+ style={{flexShrink: 0}}>
651
+ <View
652
+ style={{
653
+ flexDirection: 'row',
654
+ alignItems: 'center',
655
+ paddingHorizontal: 10,
656
+ paddingVertical: 4.5,
657
+ borderRadius: 8,
658
+ backgroundColor:
659
+ statusFilters.size > 0 || methodFilters.size > 0
660
+ ? `${AppColors.purple}20`
661
+ : AppColors.grayBackground,
662
+ borderWidth: 1,
663
+ borderColor:
664
+ statusFilters.size > 0 || methodFilters.size > 0
665
+ ? AppColors.purple
666
+ : AppColors.grayBorderSecondary,
667
+ gap: 5,
668
+ shadowColor: AppColors.black,
669
+ shadowOpacity: 0.04,
670
+ shadowRadius: 2,
671
+ shadowOffset: {width: 0, height: 1},
672
+ elevation: 1,
673
+ }}>
674
+ <FilterIcon
675
+ size={11}
676
+ color={
677
+ statusFilters.size > 0 || methodFilters.size > 0
678
+ ? AppColors.purple
679
+ : AppColors.grayText
680
+ }
681
+ />
682
+ <Text
653
683
  style={{
654
- flexDirection: 'row',
655
- alignItems: 'center',
656
- paddingHorizontal: 10,
657
- paddingVertical: 4.5,
658
- borderRadius: 8,
659
- backgroundColor:
660
- statusFilters.size > 0 || methodFilters.size > 0
661
- ? `${AppColors.purple}20`
662
- : AppColors.grayBackground,
663
- borderWidth: 1,
664
- borderColor:
684
+ fontFamily: AppFonts.interBold,
685
+ fontSize: 10.5,
686
+ color:
665
687
  statusFilters.size > 0 || methodFilters.size > 0
666
688
  ? AppColors.purple
667
- : AppColors.grayBorderSecondary,
668
- gap: 5,
689
+ : AppColors.grayText,
669
690
  }}>
670
- <FilterIcon
671
- size={11}
672
- color={
673
- statusFilters.size > 0 || methodFilters.size > 0
674
- ? AppColors.purple
675
- : AppColors.grayText
676
- }
677
- />
678
- <Text
691
+ More Filters
692
+ </Text>
693
+ {(statusFilters.size > 0 || methodFilters.size > 0) && (
694
+ <View
679
695
  style={{
680
- fontFamily: AppFonts.interBold,
681
- fontSize: 10.5,
682
- color:
683
- statusFilters.size > 0 || methodFilters.size > 0
684
- ? AppColors.purple
685
- : AppColors.grayText,
696
+ backgroundColor: AppColors.purple,
697
+ paddingHorizontal: 4.5,
698
+ paddingVertical: 1,
699
+ borderRadius: 6,
686
700
  }}>
687
- More Filters
688
- </Text>
689
- {(statusFilters.size > 0 || methodFilters.size > 0) && (
690
- <View
701
+ <Text
691
702
  style={{
692
- backgroundColor: AppColors.purple,
693
- paddingHorizontal: 4.5,
694
- paddingVertical: 1,
695
- borderRadius: 6,
703
+ fontFamily: AppFonts.interBold,
704
+ fontSize: 8.5,
705
+ color: AppColors.white,
696
706
  }}>
697
- <Text
698
- style={{
699
- fontFamily: AppFonts.interBold,
700
- fontSize: 8.5,
701
- color: AppColors.white,
702
- }}>
703
- {statusFilters.size + methodFilters.size}
704
- </Text>
705
- </View>
706
- )}
707
- </View>
708
- </TouchableScale>
709
- </ScrollView>
707
+ {statusFilters.size + methodFilters.size}
708
+ </Text>
709
+ </View>
710
+ )}
711
+ </View>
712
+ </TouchableScale>
710
713
  </View>
711
714
 
712
715
  {/* Active Filter Helper Status Bar */}
@@ -756,8 +759,18 @@ const NetworkTab = React.memo(() => {
756
759
  </View>
757
760
  )}
758
761
  </View>
759
- }
760
- ListEmptyComponent={
762
+
763
+ <FlatList
764
+ ref={apisListRef}
765
+ data={groupedData}
766
+ keyExtractor={item => item?.id?.toString()}
767
+ renderItem={renderItem}
768
+ initialNumToRender={12}
769
+ maxToRenderPerBatch={8}
770
+ windowSize={5}
771
+ removeClippedSubviews={Platform.OS === 'android'}
772
+ renderToHardwareTextureAndroid={true}
773
+ ListEmptyComponent={
761
774
  <EmptyState
762
775
  isSearch={
763
776
  search.length > 0 ||
@@ -791,29 +804,6 @@ const NetworkTab = React.memo(() => {
791
804
  ]}
792
805
  keyboardShouldPersistTaps="handled"
793
806
  />
794
- {/* #2 — always-visible scroll-to-top, bottom right */}
795
- <TouchableScale
796
- onPress={() => {
797
- try {
798
- apisListRef.current?.scrollToOffset({
799
- offset: 0,
800
- animated: true,
801
- });
802
- } catch {
803
- try {
804
- apisListRef.current?.scrollToIndex({
805
- index: 0,
806
- animated: true,
807
- });
808
- } catch {}
809
- }
810
- }}
811
- hitSlop={12}
812
- style={styles.scrollTopBtn}>
813
- <View style={{transform: [{rotate: '180deg'}]}}>
814
- <ChevronIcon color={AppColors.white} size={18} />
815
- </View>
816
- </TouchableScale>
817
807
 
818
808
  {/* Modern Network Filter Modal */}
819
809
  <NetworkFilterModal