react-native-inapp-inspector 2.3.16 → 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 (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
@@ -49,9 +49,14 @@ const constants_1 = require("../../constants");
49
49
  const constants_2 = require("../../constants");
50
50
  const helpers_1 = require("../../helpers");
51
51
  const NativeInspector_1 = require("../../native/NativeInspector");
52
+ const capture_1 = require("../../capture");
53
+ const toast_1 = require("../../helpers/toast");
52
54
  const UpdateAvailableModal_1 = require("./UpdateAvailableModal");
55
+ const MediaPreviewModal_1 = require("./MediaPreviewModal");
53
56
  const NetworkIcons_1 = require("../NetworkIcons");
57
+ const i18n_1 = require("../../i18n");
54
58
  const InspectorHeader = react_1.default.memo(() => {
59
+ const { t } = (0, i18n_1.useTranslation)();
55
60
  const { modalHeightPercent, appIcon, selected, setSelected, selectedEvent, setSelectedEvent, selectedLog, setSelectedLog, selectedReduxSlice, setSelectedReduxSlice, selectedReduxAction, setSelectedReduxAction, reduxState, reduxLastActionMap, showHeaderInfo, setShowHeaderInfo, updateAvailable, latestNpmVersion, clearAnim, activePulseAnim, unreadPulseAnim, runClearAllWithAnimation, settingsPage, setSettingsPage, setSettingsActiveSubTab, isFeedbackOpen, setIsFeedbackOpen, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = (0, InspectorContext_1.useInspector)();
56
61
  const { width: windowWidth } = (0, react_native_1.useWindowDimensions)();
57
62
  const isNarrow = windowWidth < 360;
@@ -61,17 +66,124 @@ const InspectorHeader = react_1.default.memo(() => {
61
66
  const [appVersionString, setAppVersionString] = react_1.default.useState(() => {
62
67
  return (0, helpers_1.getAppVersionAndBuild)().formatted;
63
68
  });
69
+ const [isRecording, setIsRecording] = react_1.default.useState(false);
70
+ const [recordingSeconds, setRecordingSeconds] = react_1.default.useState(0);
71
+ const recordingTimerRef = react_1.default.useRef(null);
64
72
  react_1.default.useEffect(() => {
65
- (0, NativeInspector_1.getNativeDeviceMetrics)()
66
- .then(metrics => {
67
- if (metrics?.appVersion) {
68
- const v = metrics.appVersion;
69
- const b = metrics.appBuild || '1';
70
- setAppVersionString(`${v} (${b})`);
71
- }
73
+ capture_1.ScreenCapture.isRecording()
74
+ .then(active => {
75
+ setIsRecording(active);
72
76
  })
73
77
  .catch(() => { });
74
78
  }, []);
79
+ react_1.default.useEffect(() => {
80
+ if (isRecording) {
81
+ setRecordingSeconds(0);
82
+ recordingTimerRef.current = setInterval(() => {
83
+ setRecordingSeconds(s => s + 1);
84
+ }, 1000);
85
+ }
86
+ else {
87
+ if (recordingTimerRef.current) {
88
+ clearInterval(recordingTimerRef.current);
89
+ recordingTimerRef.current = null;
90
+ }
91
+ setRecordingSeconds(0);
92
+ }
93
+ return () => {
94
+ if (recordingTimerRef.current) {
95
+ clearInterval(recordingTimerRef.current);
96
+ }
97
+ };
98
+ }, [isRecording]);
99
+ const [previewMediaItem, setPreviewMediaItem] = react_1.default.useState(null);
100
+ const handleTakeScreenshot = react_1.default.useCallback(async () => {
101
+ try {
102
+ (0, NativeInspector_1.triggerNativeHaptic)('light');
103
+ const result = await capture_1.ScreenCapture.takeScreenshot({
104
+ format: 'png',
105
+ quality: 0.9,
106
+ hideInspector: true,
107
+ });
108
+ if (result) {
109
+ (0, NativeInspector_1.triggerNativeHaptic)('success');
110
+ const newItem = {
111
+ id: `screenshot_${result.timestamp}.png`,
112
+ type: 'image',
113
+ format: result.format,
114
+ uri: result.uri,
115
+ filename: result.uri.split('/').pop() || `screenshot_${result.timestamp}.png`,
116
+ sizeBytes: result.sizeBytes,
117
+ timestamp: result.timestamp,
118
+ width: result.width,
119
+ height: result.height,
120
+ };
121
+ setPreviewMediaItem(newItem);
122
+ (0, toast_1.showToast)(t('header.screenshotCaptured'));
123
+ }
124
+ else {
125
+ (0, toast_1.showToast)(t('header.screenshotFailed'));
126
+ }
127
+ }
128
+ catch {
129
+ (0, toast_1.showToast)(t('header.screenshotError'));
130
+ }
131
+ }, [t]);
132
+ const handleToggleVideoRecording = react_1.default.useCallback(async () => {
133
+ try {
134
+ if (isRecording) {
135
+ (0, NativeInspector_1.triggerNativeHaptic)('medium');
136
+ const result = await capture_1.ScreenCapture.stopRecording();
137
+ setIsRecording(false);
138
+ if (result) {
139
+ (0, NativeInspector_1.triggerNativeHaptic)('success');
140
+ const newItem = {
141
+ id: `video_${result.timestamp}.${result.format}`,
142
+ type: result.format === 'gif' ? 'gif' : 'video',
143
+ format: result.format,
144
+ uri: result.uri,
145
+ filename: result.uri.split('/').pop() ||
146
+ `video_${result.timestamp}.${result.format}`,
147
+ sizeBytes: result.sizeBytes,
148
+ timestamp: result.timestamp,
149
+ durationMs: result.durationMs,
150
+ width: result.width,
151
+ height: result.height,
152
+ hasAudio: result.hasAudio,
153
+ };
154
+ setPreviewMediaItem(newItem);
155
+ (0, toast_1.showToast)(t('header.recordingSaved', {
156
+ duration: (result.durationMs / 1000).toFixed(1),
157
+ }));
158
+ }
159
+ }
160
+ else {
161
+ (0, NativeInspector_1.triggerNativeHaptic)('medium');
162
+ const started = await capture_1.ScreenCapture.startRecording({
163
+ fps: 24,
164
+ audioSource: 'none',
165
+ });
166
+ if (started) {
167
+ setIsRecording(true);
168
+ (0, toast_1.showToast)(t('header.recordingStarted'));
169
+ }
170
+ else {
171
+ (0, toast_1.showToast)(t('header.recordingStartFailed'));
172
+ }
173
+ }
174
+ }
175
+ catch {
176
+ (0, toast_1.showToast)(t('header.recordingError'));
177
+ setIsRecording(false);
178
+ }
179
+ }, [isRecording, t]);
180
+ const formatTimer = (totalSeconds) => {
181
+ const mins = Math.floor(totalSeconds / 60);
182
+ const secs = totalSeconds % 60;
183
+ return `${mins.toString().padStart(2, '0')}:${secs
184
+ .toString()
185
+ .padStart(2, '0')}`;
186
+ };
75
187
  const envConfig = (0, react_1.useMemo)(() => {
76
188
  const rawEnv = (environment || (__DEV__ ? 'DEV' : 'PROD')).trim();
77
189
  const clean = rawEnv.toUpperCase();
@@ -138,50 +250,60 @@ const InspectorHeader = react_1.default.memo(() => {
138
250
  const buttonSize = isNarrow ? 28 : isCompact ? 30 : 32;
139
251
  const logoSize = isNarrow ? 36 : isCompact ? 40 : 44;
140
252
  return (<>
141
- <react_native_linear_gradient_1.default colors={['#4F46E5', '#7C3AED']} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={styles_1.default.headerGradient}>
142
- <react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
143
- <react_native_1.View style={[
144
- styles_1.default.header,
253
+ <react_native_1.View style={[
254
+ styles_1.default.headerGradient,
145
255
  {
146
- paddingHorizontal: isNarrow ? 8 : 12,
147
- paddingVertical: isNarrow ? 6 : 8,
148
- minHeight: isNarrow ? 48 : 52,
256
+ minHeight: (isNarrow ? 48 : 52) + headerTopPadding,
149
257
  },
150
258
  ]}>
259
+
260
+ <react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.indigo600, AppColors_1.AppColors.violet600]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={{
261
+ position: 'absolute',
262
+ top: 0,
263
+ left: 0,
264
+ right: 0,
265
+ bottom: 0,
266
+ borderTopLeftRadius: 20,
267
+ borderTopRightRadius: 20,
268
+ }} pointerEvents="none"/>
269
+ <react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
151
270
  <react_native_1.View style={[
152
- styles_1.default.headerLeft,
271
+ styles_1.default.header,
153
272
  {
154
- flexDirection: 'row',
155
- alignItems: 'center',
156
- gap: isNarrow ? 6 : 8,
157
- flex: !isDetailView ? 1 : 0,
158
- minWidth: 0,
273
+ paddingHorizontal: isNarrow ? 8 : 12,
274
+ paddingVertical: isNarrow ? 6 : 8,
275
+ minHeight: isNarrow ? 48 : 52,
159
276
  },
160
277
  ]}>
161
- <TouchableScale_1.default onPress={() => {
162
- if (isFeedbackOpen) {
163
- setIsFeedbackOpen(false);
164
- return;
165
- }
166
- if (isSettingsView) {
167
- if (settingsPage === 'main') {
168
- setSettingsPage(null);
278
+ <react_native_1.View style={{
279
+ flexDirection: 'row',
280
+ alignItems: 'center',
281
+ gap: isNarrow ? 6 : 8,
282
+ flexShrink: 0,
283
+ flex: isAnySelected ? undefined : 1,
284
+ minWidth: isAnySelected ? (isNarrow ? 32 : 36) : 0,
285
+ }}>
286
+ {isAnySelected && (<TouchableScale_1.default onPress={() => {
287
+ if (isFeedbackOpen) {
288
+ setIsFeedbackOpen(false);
289
+ return;
169
290
  }
170
- else {
171
- setSettingsPage('main');
291
+ if (isSettingsView) {
292
+ if (settingsPage === 'main') {
293
+ setSettingsPage(null);
294
+ }
295
+ else {
296
+ setSettingsPage('main');
297
+ }
298
+ return;
172
299
  }
173
- return;
174
- }
175
- requestAnimationFrame(() => {
176
300
  setSelected(null);
177
301
  setSelectedEvent(null);
178
302
  setSelectedLog(null);
179
303
  setSelectedReduxSlice(null);
180
304
  setSelectedReduxAction(null);
181
305
  setSelectedCrash(null);
182
- });
183
- }} hitSlop={15} style={[
184
- {
306
+ }} hitSlop={15} style={{
185
307
  width: isNarrow ? 32 : 36,
186
308
  height: isNarrow ? 32 : 36,
187
309
  borderRadius: isNarrow ? 16 : 18,
@@ -190,30 +312,32 @@ const InspectorHeader = react_1.default.memo(() => {
190
312
  backgroundColor: `${AppColors_1.AppColors.white}2E`,
191
313
  borderWidth: 1,
192
314
  borderColor: `${AppColors_1.AppColors.white}4D`,
193
- },
194
- !isAnySelected && { display: 'none' },
195
- ]}>
196
- <react_native_1.View style={{
197
- position: 'absolute',
198
- width: isNarrow ? 40 : 44,
199
- height: isNarrow ? 40 : 44,
200
- borderRadius: 22,
201
- backgroundColor: `${AppColors_1.AppColors.white}1A`,
202
- }}/>
203
- <NetworkIcons_1.WhiteBackNavigation />
204
- </TouchableScale_1.default>
315
+ }}>
316
+ <react_native_1.View style={{
317
+ position: 'absolute',
318
+ width: isNarrow ? 40 : 44,
319
+ height: isNarrow ? 40 : 44,
320
+ borderRadius: 22,
321
+ backgroundColor: `${AppColors_1.AppColors.white}1A`,
322
+ }}/>
323
+ <NetworkIcons_1.WhiteBackNavigation />
324
+ </TouchableScale_1.default>)}
205
325
 
206
- {isFeedbackOpen ? (<react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
207
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
208
- <react_native_1.Text style={{
326
+ {isFeedbackOpen ? (<react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
327
+ <react_native_1.View style={{
328
+ flexDirection: 'row',
329
+ alignItems: 'center',
330
+ gap: 6,
331
+ }}>
332
+ <react_native_1.Text style={{
209
333
  fontFamily: AppFonts_1.AppFonts.interBold,
210
334
  fontSize: isNarrow ? 14 : 16,
211
335
  color: AppColors_1.AppColors.white,
212
336
  letterSpacing: -0.2,
213
337
  }} numberOfLines={1}>
214
- Support & Feedback
215
- </react_native_1.Text>
216
- <react_native_1.View style={{
338
+ Support & Feedback
339
+ </react_native_1.Text>
340
+ <react_native_1.View style={{
217
341
  backgroundColor: `${AppColors_1.AppColors.white}26`,
218
342
  paddingHorizontal: isNarrow ? 4 : 6,
219
343
  paddingVertical: 1.5,
@@ -221,33 +345,37 @@ const InspectorHeader = react_1.default.memo(() => {
221
345
  borderWidth: 1,
222
346
  borderColor: `${AppColors_1.AppColors.white}20`,
223
347
  }}>
224
- <react_native_1.Text style={{
348
+ <react_native_1.Text style={{
225
349
  fontFamily: AppFonts_1.AppFonts.interBold,
226
350
  fontSize: isNarrow ? 8 : 9,
227
351
  color: AppColors_1.AppColors.white,
228
352
  }}>
229
- v{constants_2.LIB_VERSION}
230
- </react_native_1.Text>
353
+ v{constants_2.LIB_VERSION}
354
+ </react_native_1.Text>
355
+ </react_native_1.View>
231
356
  </react_native_1.View>
232
- </react_native_1.View>
233
- <react_native_1.Text style={{
357
+ <react_native_1.Text style={{
234
358
  fontFamily: AppFonts_1.AppFonts.interRegular,
235
359
  fontSize: isNarrow ? 9.5 : 10.5,
236
360
  color: `${AppColors_1.AppColors.white}CC`,
237
361
  }} numberOfLines={1}>
238
- Direct line to maintainers & developers
239
- </react_native_1.Text>
240
- </react_native_1.View>) : isSettingsView ? (<react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
241
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
242
- <react_native_1.Text style={{
362
+ Direct line to maintainers & developers
363
+ </react_native_1.Text>
364
+ </react_native_1.View>) : isSettingsView ? (<react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
365
+ <react_native_1.View style={{
366
+ flexDirection: 'row',
367
+ alignItems: 'center',
368
+ gap: 6,
369
+ }}>
370
+ <react_native_1.Text style={{
243
371
  fontFamily: AppFonts_1.AppFonts.interBold,
244
372
  fontSize: isNarrow ? 14 : 16,
245
373
  color: AppColors_1.AppColors.white,
246
374
  letterSpacing: -0.2,
247
375
  }} numberOfLines={1}>
248
- {settingsModuleTitle}
249
- </react_native_1.Text>
250
- {settingsPage === 'main' && (<react_native_1.View style={{
376
+ {settingsModuleTitle}
377
+ </react_native_1.Text>
378
+ {settingsPage === 'main' && (<react_native_1.View style={{
251
379
  backgroundColor: `${AppColors_1.AppColors.white}26`,
252
380
  paddingHorizontal: isNarrow ? 4 : 6,
253
381
  paddingVertical: 1.5,
@@ -255,25 +383,25 @@ const InspectorHeader = react_1.default.memo(() => {
255
383
  borderWidth: 1,
256
384
  borderColor: `${AppColors_1.AppColors.white}20`,
257
385
  }}>
258
- <react_native_1.Text style={{
386
+ <react_native_1.Text style={{
259
387
  fontFamily: AppFonts_1.AppFonts.interBold,
260
388
  fontSize: isNarrow ? 8 : 9,
261
389
  color: AppColors_1.AppColors.white,
262
390
  }}>
263
- v{constants_2.LIB_VERSION}
264
- </react_native_1.Text>
265
- </react_native_1.View>)}
266
- </react_native_1.View>
267
- <react_native_1.Text style={{
391
+ v{constants_2.LIB_VERSION}
392
+ </react_native_1.Text>
393
+ </react_native_1.View>)}
394
+ </react_native_1.View>
395
+ <react_native_1.Text style={{
268
396
  fontFamily: AppFonts_1.AppFonts.interRegular,
269
397
  fontSize: isNarrow ? 9.5 : 10.5,
270
398
  color: `${AppColors_1.AppColors.white}CC`,
271
399
  }} numberOfLines={1}>
272
- {settingsPage === 'main'
400
+ {settingsPage === 'main'
273
401
  ? 'Manage modules and preferences'
274
402
  : 'Configure module parameters'}
275
- </react_native_1.Text>
276
- </react_native_1.View>) : !isAnySelected ? (<react_native_1.View style={{
403
+ </react_native_1.Text>
404
+ </react_native_1.View>) : !isAnySelected ? (<react_native_1.View style={{
277
405
  flexDirection: 'row',
278
406
  alignItems: 'center',
279
407
  gap: isNarrow ? 6 : 8,
@@ -281,15 +409,15 @@ const InspectorHeader = react_1.default.memo(() => {
281
409
  minWidth: 0,
282
410
  marginRight: 4,
283
411
  }}>
284
- <AppHeaderLogo_1.default size={logoSize} customIcon={appIcon}/>
285
- <react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
286
- <react_native_1.View style={{
412
+ <AppHeaderLogo_1.default size={logoSize} customIcon={appIcon}/>
413
+ <react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
414
+ <react_native_1.View style={{
287
415
  flexDirection: 'row',
288
416
  alignItems: 'center',
289
417
  gap: isNarrow ? 4 : 6,
290
418
  minWidth: 0,
291
419
  }}>
292
- <react_native_1.Text style={[
420
+ <react_native_1.Text style={[
293
421
  styles_1.default.headerTitle,
294
422
  {
295
423
  fontSize: isNarrow ? 13.5 : isCompact ? 14.5 : 15.5,
@@ -297,9 +425,9 @@ const InspectorHeader = react_1.default.memo(() => {
297
425
  paddingBottom: 0,
298
426
  },
299
427
  ]} numberOfLines={1} ellipsizeMode="tail">
300
- {(0, helpers_1.getAppName)()}
301
- </react_native_1.Text>
302
- <react_native_1.View style={[
428
+ {(0, helpers_1.getAppName)()}
429
+ </react_native_1.Text>
430
+ <react_native_1.View style={[
303
431
  styles_1.default.envBadge,
304
432
  {
305
433
  backgroundColor: envConfig.bg,
@@ -310,59 +438,59 @@ const InspectorHeader = react_1.default.memo(() => {
310
438
  marginBottom: 0,
311
439
  },
312
440
  ]}>
313
- <react_native_1.Text style={[
441
+ <react_native_1.Text style={[
314
442
  styles_1.default.envBadgeText,
315
443
  {
316
444
  color: envConfig.text,
317
445
  fontSize: isNarrow ? 8.5 : 9.5,
318
446
  },
319
447
  ]}>
320
- {envConfig.label}
321
- </react_native_1.Text>
322
- </react_native_1.View>
323
- {updateAvailable && (<react_native_1.Pressable hitSlop={10} onPress={() => setShowUpdateModal(true)} style={{
448
+ {envConfig.label}
449
+ </react_native_1.Text>
450
+ </react_native_1.View>
451
+ {updateAvailable && (<react_native_1.Pressable hitSlop={10} onPress={() => setShowUpdateModal(true)} style={{
324
452
  flexDirection: 'row',
325
453
  alignItems: 'center',
326
- backgroundColor: '#F59E0B',
454
+ backgroundColor: AppColors_1.AppColors.warningAmber,
327
455
  borderRadius: 5,
328
456
  paddingHorizontal: isNarrow ? 4 : 5.5,
329
457
  paddingVertical: 1.5,
330
458
  gap: 3,
331
- shadowColor: '#F59E0B',
459
+ shadowColor: AppColors_1.AppColors.warningAmber,
332
460
  shadowOffset: { width: 0, height: 1.5 },
333
461
  shadowOpacity: 0.35,
334
462
  shadowRadius: 3,
335
463
  elevation: 3,
336
464
  flexShrink: 0,
337
465
  }}>
338
- <react_native_1.Animated.View style={{
466
+ <react_native_1.Animated.View style={{
339
467
  width: 5,
340
468
  height: 5,
341
469
  borderRadius: 2.5,
342
- backgroundColor: '#FFFFFF',
470
+ backgroundColor: AppColors_1.AppColors.white,
343
471
  opacity: activePulseAnim,
344
472
  transform: [{ scale: unreadPulseAnim }],
345
473
  }}/>
346
- {!isNarrow && (<react_native_1.Text style={{
474
+ {!isNarrow && (<react_native_1.Text style={{
347
475
  fontFamily: AppFonts_1.AppFonts.interBold,
348
476
  fontSize: 8.5,
349
- color: '#FFFFFF',
477
+ color: AppColors_1.AppColors.white,
350
478
  letterSpacing: 0.3,
351
479
  }}>
352
- UPDATE
353
- </react_native_1.Text>)}
354
- <NetworkIcons_1.BoltIcon size={isNarrow ? 8 : 9} color="#FFFFFF"/>
355
- </react_native_1.Pressable>)}
356
- </react_native_1.View>
480
+ UPDATE
481
+ </react_native_1.Text>)}
482
+ <NetworkIcons_1.BoltIcon size={isNarrow ? 8 : 9} color={AppColors_1.AppColors.white}/>
483
+ </react_native_1.Pressable>)}
484
+ </react_native_1.View>
357
485
 
358
-
359
- <react_native_1.View style={{
486
+
487
+ <react_native_1.View style={{
360
488
  flexDirection: 'row',
361
489
  alignItems: 'center',
362
490
  gap: isNarrow ? 4 : 5,
363
491
  minWidth: 0,
364
492
  }}>
365
- <react_native_1.View style={{
493
+ <react_native_1.View style={{
366
494
  flexDirection: 'row',
367
495
  alignItems: 'center',
368
496
  backgroundColor: `${AppColors_1.AppColors.white}1F`,
@@ -375,18 +503,18 @@ const InspectorHeader = react_1.default.memo(() => {
375
503
  flexShrink: 1,
376
504
  minWidth: 0,
377
505
  }}>
378
- {react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon color={`${AppColors_1.AppColors.white}E6`} size={isNarrow ? 9 : 10}/>) : (<NetworkIcons_1.AndroidIcon color={`${AppColors_1.AppColors.white}E6`} size={isNarrow ? 9 : 10}/>)}
379
- <react_native_1.Text style={{
506
+ {react_native_1.Platform.OS === 'ios' ? (<NetworkIcons_1.AppleIcon color={`${AppColors_1.AppColors.white}E6`} size={isNarrow ? 9 : 10}/>) : (<NetworkIcons_1.AndroidIcon color={`${AppColors_1.AppColors.white}E6`} size={isNarrow ? 9 : 10}/>)}
507
+ <react_native_1.Text style={{
380
508
  fontFamily: AppFonts_1.AppFonts.interMedium,
381
509
  fontSize: isNarrow ? 8.5 : 9.5,
382
510
  color: `${AppColors_1.AppColors.white}EB`,
383
511
  letterSpacing: 0.1,
384
512
  }} numberOfLines={1} ellipsizeMode="tail">
385
- {appVersionString}
386
- </react_native_1.Text>
387
- </react_native_1.View>
513
+ {appVersionString}
514
+ </react_native_1.Text>
515
+ </react_native_1.View>
388
516
 
389
- <react_native_1.Pressable onPress={() => {
517
+ <react_native_1.Pressable onPress={() => {
390
518
  if (updateAvailable) {
391
519
  setShowUpdateModal(true);
392
520
  }
@@ -405,32 +533,35 @@ const InspectorHeader = react_1.default.memo(() => {
405
533
  borderColor: `${AppColors_1.AppColors.white}2E`,
406
534
  flexShrink: 0,
407
535
  }}>
408
- <NetworkIcons_1.NpmIcon size={isNarrow ? 9 : 10} color="#FF6B6B"/>
409
- <react_native_1.Text style={{
536
+ <NetworkIcons_1.NpmIcon size={isNarrow ? 9 : 10} color={AppColors_1.AppColors.npmRedLight}/>
537
+ <react_native_1.Text style={{
410
538
  fontFamily: AppFonts_1.AppFonts.interMedium,
411
539
  fontSize: isNarrow ? 8.5 : 9.5,
412
540
  color: `${AppColors_1.AppColors.white}EB`,
413
541
  letterSpacing: 0.1,
414
542
  }} numberOfLines={1}>
415
- v{constants_2.LIB_VERSION}
416
- </react_native_1.Text>
417
- {updateAvailable && (<react_native_1.Text style={{
543
+ v{constants_2.LIB_VERSION}
544
+ </react_native_1.Text>
545
+ {updateAvailable && (<react_native_1.Text style={{
418
546
  fontFamily: AppFonts_1.AppFonts.interBold,
419
547
  fontSize: 8.5,
420
- color: '#F59E0B',
548
+ color: AppColors_1.AppColors.warningAmber,
421
549
  }}>
422
- ●
423
- </react_native_1.Text>)}
424
- </react_native_1.Pressable>
550
+ ●
551
+ </react_native_1.Text>)}
552
+ </react_native_1.Pressable>
553
+ </react_native_1.View>
425
554
  </react_native_1.View>
426
- </react_native_1.View>
427
- </react_native_1.View>) : null}
428
- </react_native_1.View>
555
+ </react_native_1.View>) : null}
556
+ </react_native_1.View>
429
557
 
430
- {isDetailView && (<react_native_1.View style={[styles_1.default.headerCenter, { paddingHorizontal: isNarrow ? 2 : 6 }]}>
431
- {activeTab === 'apis' && selected != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
432
- <react_native_1.View style={styles_1.default.headerDetailRow}>
433
- <react_native_1.View style={[
558
+ {isDetailView && (<react_native_1.View style={[
559
+ styles_1.default.headerCenter,
560
+ { paddingHorizontal: isNarrow ? 2 : 6 },
561
+ ]}>
562
+ {activeTab === 'apis' && selected != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
563
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
564
+ <react_native_1.View style={[
434
565
  styles_1.default.headerMethodBadge,
435
566
  {
436
567
  backgroundColor: constants_1.METHOD_COLORS[selected.method] ??
@@ -439,22 +570,28 @@ const InspectorHeader = react_1.default.memo(() => {
439
570
  paddingVertical: isNarrow ? 2 : 3,
440
571
  },
441
572
  ]}>
442
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
443
- {selected.method}
573
+ <react_native_1.Text style={[
574
+ styles_1.default.headerMethodText,
575
+ { fontSize: isNarrow ? 9 : 10 },
576
+ ]}>
577
+ {selected.method}
578
+ </react_native_1.Text>
579
+ </react_native_1.View>
580
+ <react_native_1.Text style={[
581
+ styles_1.default.headerDetailTitle,
582
+ { fontSize: isNarrow ? 13.5 : 15 },
583
+ ]} numberOfLines={1} ellipsizeMode="middle">
584
+ {detailTitle}
444
585
  </react_native_1.Text>
445
586
  </react_native_1.View>
446
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
447
- {detailTitle}
448
- </react_native_1.Text>
449
- </react_native_1.View>
450
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
587
+ <react_native_1.View style={{
451
588
  flexDirection: 'row',
452
589
  alignItems: 'center',
453
590
  gap: isNarrow ? 4 : 6,
454
591
  marginTop: 3,
455
592
  paddingVertical: 1,
456
593
  }}>
457
- <react_native_1.View style={{
594
+ <react_native_1.View style={{
458
595
  flexDirection: 'row',
459
596
  alignItems: 'center',
460
597
  gap: 4,
@@ -465,7 +602,7 @@ const InspectorHeader = react_1.default.memo(() => {
465
602
  borderWidth: 1,
466
603
  borderColor: `${(0, helpers_1.getStatusColor)(selected.status)}55`,
467
604
  }}>
468
- <react_native_1.View style={[
605
+ <react_native_1.View style={[
469
606
  styles_1.default.headerStatusDot,
470
607
  {
471
608
  backgroundColor: (0, helpers_1.getStatusColor)(selected.status),
@@ -473,16 +610,19 @@ const InspectorHeader = react_1.default.memo(() => {
473
610
  height: isNarrow ? 6 : 7,
474
611
  },
475
612
  ]}/>
476
- <react_native_1.Text style={[
613
+ <react_native_1.Text style={[
477
614
  styles_1.default.headerSubTitle,
478
- { fontFamily: AppFonts_1.AppFonts.interBold, fontSize: isNarrow ? 10 : 11 },
615
+ {
616
+ fontFamily: AppFonts_1.AppFonts.interBold,
617
+ fontSize: isNarrow ? 10 : 11,
618
+ },
479
619
  ]}>
480
- {selected.status === 0
620
+ {selected.status === 0
481
621
  ? 'Failed'
482
622
  : selected.status ?? 'Pending'}
483
- </react_native_1.Text>
484
- </react_native_1.View>
485
- <react_native_1.View style={{
623
+ </react_native_1.Text>
624
+ </react_native_1.View>
625
+ <react_native_1.View style={{
486
626
  flexDirection: 'row',
487
627
  alignItems: 'center',
488
628
  gap: 4,
@@ -491,14 +631,17 @@ const InspectorHeader = react_1.default.memo(() => {
491
631
  borderRadius: 20,
492
632
  backgroundColor: `${AppColors_1.AppColors.white}29`,
493
633
  }}>
494
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
495
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
496
- {selected.duration != null
634
+ <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
635
+ <react_native_1.Text style={[
636
+ styles_1.default.headerSubTitle,
637
+ { fontSize: isNarrow ? 10 : 11 },
638
+ ]}>
639
+ {selected.duration != null
497
640
  ? `${selected.duration}ms`
498
641
  : '—'}
499
- </react_native_1.Text>
500
- </react_native_1.View>
501
- {selected.response != null && (<react_native_1.View style={{
642
+ </react_native_1.Text>
643
+ </react_native_1.View>
644
+ {selected.response != null && (<react_native_1.View style={{
502
645
  flexDirection: 'row',
503
646
  alignItems: 'center',
504
647
  gap: 4,
@@ -507,15 +650,18 @@ const InspectorHeader = react_1.default.memo(() => {
507
650
  borderRadius: 20,
508
651
  backgroundColor: `${AppColors_1.AppColors.white}29`,
509
652
  }}>
510
- <NetworkIcons_1.SizeIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
511
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
512
- {(0, helpers_1.getSize)(selected.response)}
513
- </react_native_1.Text>
514
- </react_native_1.View>)}
515
- </react_native_1.ScrollView>
516
- </react_native_1.View>) : activeTab === 'analytics' && selectedEvent != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
517
- <react_native_1.View style={styles_1.default.headerDetailRow}>
518
- <react_native_1.View style={[
653
+ <NetworkIcons_1.SizeIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
654
+ <react_native_1.Text style={[
655
+ styles_1.default.headerSubTitle,
656
+ { fontSize: isNarrow ? 10 : 11 },
657
+ ]}>
658
+ {(0, helpers_1.getSize)(selected.response)}
659
+ </react_native_1.Text>
660
+ </react_native_1.View>)}
661
+ </react_native_1.View>
662
+ </react_native_1.View>) : activeTab === 'analytics' && selectedEvent != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
663
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
664
+ <react_native_1.View style={[
519
665
  styles_1.default.headerMethodBadge,
520
666
  {
521
667
  backgroundColor: selectedEvent.source === 'firebase'
@@ -525,22 +671,28 @@ const InspectorHeader = react_1.default.memo(() => {
525
671
  paddingVertical: isNarrow ? 2 : 3,
526
672
  },
527
673
  ]}>
528
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
529
- {selectedEvent.source === 'firebase' ? 'FB' : 'MAN'}
674
+ <react_native_1.Text style={[
675
+ styles_1.default.headerMethodText,
676
+ { fontSize: isNarrow ? 9 : 10 },
677
+ ]}>
678
+ {selectedEvent.source === 'firebase' ? 'FB' : 'MAN'}
679
+ </react_native_1.Text>
680
+ </react_native_1.View>
681
+ <react_native_1.Text style={[
682
+ styles_1.default.headerDetailTitle,
683
+ { fontSize: isNarrow ? 13.5 : 15 },
684
+ ]} numberOfLines={1} ellipsizeMode="middle">
685
+ {selectedEvent.name}
530
686
  </react_native_1.Text>
531
687
  </react_native_1.View>
532
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
533
- {selectedEvent.name}
534
- </react_native_1.Text>
535
- </react_native_1.View>
536
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
688
+ <react_native_1.View style={{
537
689
  flexDirection: 'row',
538
690
  alignItems: 'center',
539
691
  gap: isNarrow ? 4 : 6,
540
692
  marginTop: 3,
541
693
  paddingVertical: 1,
542
694
  }}>
543
- <react_native_1.View style={[
695
+ <react_native_1.View style={[
544
696
  styles_1.default.headerStatusDot,
545
697
  {
546
698
  backgroundColor: selectedEvent.source === 'firebase'
@@ -550,18 +702,21 @@ const InspectorHeader = react_1.default.memo(() => {
550
702
  height: isNarrow ? 6 : 7,
551
703
  },
552
704
  ]}/>
553
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
554
- {Object.keys(selectedEvent.params).length} param
555
- {Object.keys(selectedEvent.params).length !== 1
705
+ <react_native_1.Text style={[
706
+ styles_1.default.headerSubTitle,
707
+ { fontSize: isNarrow ? 10 : 11 },
708
+ ]}>
709
+ {Object.keys(selectedEvent.params).length} param
710
+ {Object.keys(selectedEvent.params).length !== 1
556
711
  ? 's'
557
712
  : ''}
558
- {' · '}
559
- {selectedEvent.source}
560
- </react_native_1.Text>
561
- </react_native_1.ScrollView>
562
- </react_native_1.View>) : activeTab === 'logs' && selectedLog != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
563
- <react_native_1.View style={styles_1.default.headerDetailRow}>
564
- <react_native_1.View style={[
713
+ {' · '}
714
+ {selectedEvent.source}
715
+ </react_native_1.Text>
716
+ </react_native_1.View>
717
+ </react_native_1.View>) : activeTab === 'logs' && selectedLog != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
718
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
719
+ <react_native_1.View style={[
565
720
  styles_1.default.headerMethodBadge,
566
721
  {
567
722
  backgroundColor: selectedLog.type === 'error'
@@ -573,23 +728,29 @@ const InspectorHeader = react_1.default.memo(() => {
573
728
  paddingVertical: isNarrow ? 2 : 3,
574
729
  },
575
730
  ]}>
576
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
577
- {selectedLog.type.toUpperCase()}
731
+ <react_native_1.Text style={[
732
+ styles_1.default.headerMethodText,
733
+ { fontSize: isNarrow ? 9 : 10 },
734
+ ]}>
735
+ {selectedLog.type.toUpperCase()}
736
+ </react_native_1.Text>
737
+ </react_native_1.View>
738
+ <react_native_1.Text style={[
739
+ styles_1.default.headerDetailTitle,
740
+ { fontSize: isNarrow ? 13.5 : 15 },
741
+ ]} numberOfLines={1} ellipsizeMode="middle">
742
+ console.
743
+ {selectedLog.sourceMethod || selectedLog.type || 'log'}
578
744
  </react_native_1.Text>
579
745
  </react_native_1.View>
580
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
581
- console.
582
- {selectedLog.sourceMethod || selectedLog.type || 'log'}
583
- </react_native_1.Text>
584
- </react_native_1.View>
585
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
746
+ <react_native_1.View style={{
586
747
  flexDirection: 'row',
587
748
  alignItems: 'center',
588
749
  gap: isNarrow ? 4 : 6,
589
750
  marginTop: 3,
590
751
  paddingVertical: 1,
591
752
  }}>
592
- <react_native_1.View style={{
753
+ <react_native_1.View style={{
593
754
  flexDirection: 'row',
594
755
  alignItems: 'center',
595
756
  gap: 4,
@@ -598,13 +759,16 @@ const InspectorHeader = react_1.default.memo(() => {
598
759
  borderRadius: 20,
599
760
  backgroundColor: `${AppColors_1.AppColors.white}29`,
600
761
  }}>
601
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
602
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
603
- {(0, helpers_1.formatTime)(selectedLog.timestamp)}
604
- </react_native_1.Text>
762
+ <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
763
+ <react_native_1.Text style={[
764
+ styles_1.default.headerSubTitle,
765
+ { fontSize: isNarrow ? 10 : 11 },
766
+ ]}>
767
+ {(0, helpers_1.formatTime)(selectedLog.timestamp)}
768
+ </react_native_1.Text>
769
+ </react_native_1.View>
605
770
  </react_native_1.View>
606
- </react_native_1.ScrollView>
607
- </react_native_1.View>) : activeTab === 'redux' && selectedReduxSlice != null ? ((() => {
771
+ </react_native_1.View>) : activeTab === 'redux' && selectedReduxSlice != null ? ((() => {
608
772
  const sliceData = reduxState?.[selectedReduxSlice];
609
773
  const keyCount = sliceData && typeof sliceData === 'object'
610
774
  ? Object.keys(sliceData).length
@@ -614,8 +778,8 @@ const InspectorHeader = react_1.default.memo(() => {
614
778
  const sliceSize = (0, helpers_1.getSize)(sliceData);
615
779
  const lastAction = reduxLastActionMap[selectedReduxSlice];
616
780
  return (<react_native_1.View style={styles_1.default.headerDetailCenter}>
617
- <react_native_1.View style={styles_1.default.headerDetailRow}>
618
- <react_native_1.View style={[
781
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
782
+ <react_native_1.View style={[
619
783
  styles_1.default.headerMethodBadge,
620
784
  {
621
785
  backgroundColor: `${AppColors_1.AppColors.purple}4D`,
@@ -623,20 +787,28 @@ const InspectorHeader = react_1.default.memo(() => {
623
787
  paddingVertical: isNarrow ? 2 : 3,
624
788
  },
625
789
  ]}>
626
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>SLICE</react_native_1.Text>
790
+ <react_native_1.Text style={[
791
+ styles_1.default.headerMethodText,
792
+ { fontSize: isNarrow ? 9 : 10 },
793
+ ]}>
794
+ SLICE
795
+ </react_native_1.Text>
796
+ </react_native_1.View>
797
+ <react_native_1.Text style={[
798
+ styles_1.default.headerDetailTitle,
799
+ { fontSize: isNarrow ? 13.5 : 15 },
800
+ ]} numberOfLines={1} ellipsizeMode="middle">
801
+ {selectedReduxSlice}
802
+ </react_native_1.Text>
627
803
  </react_native_1.View>
628
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
629
- {selectedReduxSlice}
630
- </react_native_1.Text>
631
- </react_native_1.View>
632
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
804
+ <react_native_1.View style={{
633
805
  flexDirection: 'row',
634
806
  alignItems: 'center',
635
807
  gap: isNarrow ? 4 : 6,
636
808
  marginTop: 3,
637
809
  paddingVertical: 1,
638
810
  }}>
639
- <react_native_1.View style={[
811
+ <react_native_1.View style={[
640
812
  styles_1.default.headerStatusDot,
641
813
  {
642
814
  backgroundColor: AppColors_1.AppColors.liveGreen,
@@ -644,37 +816,62 @@ const InspectorHeader = react_1.default.memo(() => {
644
816
  height: isNarrow ? 6 : 7,
645
817
  },
646
818
  ]}/>
647
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>Live</react_native_1.Text>
648
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
649
- •
650
- </react_native_1.Text>
651
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
652
- {keyCount} keys
653
- </react_native_1.Text>
654
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
655
- •
656
- </react_native_1.Text>
657
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>{sliceSize}</react_native_1.Text>
658
- {lastAction?.timestamp && (<>
659
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
660
- •
661
- </react_native_1.Text>
662
- <react_native_1.View style={{
819
+ <react_native_1.Text style={[
820
+ styles_1.default.headerSubTitle,
821
+ { fontSize: isNarrow ? 10 : 11 },
822
+ ]}>
823
+ Live
824
+ </react_native_1.Text>
825
+ <react_native_1.Text style={[
826
+ styles_1.default.headerSubTitle,
827
+ { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
828
+ ]}>
829
+ •
830
+ </react_native_1.Text>
831
+ <react_native_1.Text style={[
832
+ styles_1.default.headerSubTitle,
833
+ { fontSize: isNarrow ? 10 : 11 },
834
+ ]}>
835
+ {keyCount} keys
836
+ </react_native_1.Text>
837
+ <react_native_1.Text style={[
838
+ styles_1.default.headerSubTitle,
839
+ { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
840
+ ]}>
841
+ •
842
+ </react_native_1.Text>
843
+ <react_native_1.Text style={[
844
+ styles_1.default.headerSubTitle,
845
+ { fontSize: isNarrow ? 10 : 11 },
846
+ ]}>
847
+ {sliceSize}
848
+ </react_native_1.Text>
849
+ {lastAction?.timestamp && (<>
850
+ <react_native_1.Text style={[
851
+ styles_1.default.headerSubTitle,
852
+ { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
853
+ ]}>
854
+ •
855
+ </react_native_1.Text>
856
+ <react_native_1.View style={{
663
857
  flexDirection: 'row',
664
858
  alignItems: 'center',
665
859
  gap: 3,
666
860
  }}>
667
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 9 : 10}/>
668
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
669
- {lastAction.timestamp}
670
- </react_native_1.Text>
671
- </react_native_1.View>
672
- </>)}
673
- </react_native_1.ScrollView>
674
- </react_native_1.View>);
861
+ <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 9 : 10}/>
862
+ <react_native_1.Text style={[
863
+ styles_1.default.headerSubTitle,
864
+ { fontSize: isNarrow ? 10 : 11 },
865
+ ]}>
866
+ {lastAction.timestamp}
867
+ </react_native_1.Text>
868
+ </react_native_1.View>
869
+ </>)}
870
+ </react_native_1.View>
871
+ </react_native_1.View>);
675
872
  })()) : activeTab === 'redux' && selectedReduxAction != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
676
- <react_native_1.View style={styles_1.default.headerDetailRow}>
677
- <react_native_1.View style={[
873
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
874
+ <react_native_1.View style={[
678
875
  styles_1.default.headerMethodBadge,
679
876
  {
680
877
  backgroundColor: `${AppColors_1.AppColors.brandPurple}4D`,
@@ -682,20 +879,28 @@ const InspectorHeader = react_1.default.memo(() => {
682
879
  paddingVertical: isNarrow ? 2 : 3,
683
880
  },
684
881
  ]}>
685
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>ACTION</react_native_1.Text>
882
+ <react_native_1.Text style={[
883
+ styles_1.default.headerMethodText,
884
+ { fontSize: isNarrow ? 9 : 10 },
885
+ ]}>
886
+ ACTION
887
+ </react_native_1.Text>
888
+ </react_native_1.View>
889
+ <react_native_1.Text style={[
890
+ styles_1.default.headerDetailTitle,
891
+ { fontSize: isNarrow ? 13.5 : 15 },
892
+ ]} numberOfLines={1} ellipsizeMode="middle">
893
+ {selectedReduxAction.type}
894
+ </react_native_1.Text>
686
895
  </react_native_1.View>
687
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
688
- {selectedReduxAction.type}
689
- </react_native_1.Text>
690
- </react_native_1.View>
691
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
896
+ <react_native_1.View style={{
692
897
  flexDirection: 'row',
693
898
  alignItems: 'center',
694
899
  gap: isNarrow ? 4 : 6,
695
900
  marginTop: 3,
696
901
  paddingVertical: 1,
697
902
  }}>
698
- <react_native_1.View style={[
903
+ <react_native_1.View style={[
699
904
  styles_1.default.headerStatusDot,
700
905
  {
701
906
  backgroundColor: AppColors_1.AppColors.purple,
@@ -703,13 +908,16 @@ const InspectorHeader = react_1.default.memo(() => {
703
908
  height: isNarrow ? 6 : 7,
704
909
  },
705
910
  ]}/>
706
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
707
- {selectedReduxAction.timestamp || 'Dispatched'}
708
- </react_native_1.Text>
709
- </react_native_1.ScrollView>
710
- </react_native_1.View>) : activeTab === 'crash' && selectedCrash != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
711
- <react_native_1.View style={styles_1.default.headerDetailRow}>
712
- <react_native_1.View style={[
911
+ <react_native_1.Text style={[
912
+ styles_1.default.headerSubTitle,
913
+ { fontSize: isNarrow ? 10 : 11 },
914
+ ]}>
915
+ {selectedReduxAction.timestamp || 'Dispatched'}
916
+ </react_native_1.Text>
917
+ </react_native_1.View>
918
+ </react_native_1.View>) : activeTab === 'crash' && selectedCrash != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
919
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
920
+ <react_native_1.View style={[
713
921
  styles_1.default.headerMethodBadge,
714
922
  {
715
923
  backgroundColor: selectedCrash.isFatal
@@ -719,24 +927,30 @@ const InspectorHeader = react_1.default.memo(() => {
719
927
  paddingVertical: isNarrow ? 2 : 3,
720
928
  },
721
929
  ]}>
722
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
723
- {selectedCrash.isFatal
930
+ <react_native_1.Text style={[
931
+ styles_1.default.headerMethodText,
932
+ { fontSize: isNarrow ? 9 : 10 },
933
+ ]}>
934
+ {selectedCrash.isFatal
724
935
  ? 'FATAL'
725
936
  : selectedCrash.type.toUpperCase()}
937
+ </react_native_1.Text>
938
+ </react_native_1.View>
939
+ <react_native_1.Text style={[
940
+ styles_1.default.headerDetailTitle,
941
+ { fontSize: isNarrow ? 13.5 : 15 },
942
+ ]} numberOfLines={1} ellipsizeMode="middle">
943
+ {selectedCrash.name || selectedCrash.message}
726
944
  </react_native_1.Text>
727
945
  </react_native_1.View>
728
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
729
- {selectedCrash.name || selectedCrash.message}
730
- </react_native_1.Text>
731
- </react_native_1.View>
732
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
946
+ <react_native_1.View style={{
733
947
  flexDirection: 'row',
734
948
  alignItems: 'center',
735
949
  gap: isNarrow ? 4 : 6,
736
950
  marginTop: 3,
737
951
  paddingVertical: 1,
738
952
  }}>
739
- <react_native_1.View style={[
953
+ <react_native_1.View style={[
740
954
  styles_1.default.headerStatusDot,
741
955
  {
742
956
  backgroundColor: selectedCrash.isFatal
@@ -746,23 +960,32 @@ const InspectorHeader = react_1.default.memo(() => {
746
960
  height: isNarrow ? 6 : 7,
747
961
  },
748
962
  ]}/>
749
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
750
- {selectedCrash.timeStr ||
963
+ <react_native_1.Text style={[
964
+ styles_1.default.headerSubTitle,
965
+ { fontSize: isNarrow ? 10 : 11 },
966
+ ]}>
967
+ {selectedCrash.timeStr ||
751
968
  new Date(selectedCrash.timestamp).toLocaleTimeString()}
752
- </react_native_1.Text>
753
- {selectedCrash.deviceInfo?.platform && (<>
754
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
755
- •
756
- </react_native_1.Text>
757
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
758
- {selectedCrash.deviceInfo.platform.toUpperCase()}
759
- </react_native_1.Text>
760
- </>)}
761
- </react_native_1.ScrollView>
762
- </react_native_1.View>) : null}
763
- </react_native_1.View>)}
969
+ </react_native_1.Text>
970
+ {selectedCrash.deviceInfo?.platform && (<>
971
+ <react_native_1.Text style={[
972
+ styles_1.default.headerSubTitle,
973
+ { opacity: 0.6, fontSize: isNarrow ? 10 : 11 },
974
+ ]}>
975
+ •
976
+ </react_native_1.Text>
977
+ <react_native_1.Text style={[
978
+ styles_1.default.headerSubTitle,
979
+ { fontSize: isNarrow ? 10 : 11 },
980
+ ]}>
981
+ {selectedCrash.deviceInfo.platform.toUpperCase()}
982
+ </react_native_1.Text>
983
+ </>)}
984
+ </react_native_1.View>
985
+ </react_native_1.View>) : null}
986
+ </react_native_1.View>)}
764
987
 
765
- <react_native_1.View style={[
988
+ <react_native_1.View style={[
766
989
  styles_1.default.headerRight,
767
990
  {
768
991
  flexDirection: 'row',
@@ -772,7 +995,7 @@ const InspectorHeader = react_1.default.memo(() => {
772
995
  gap: isNarrow ? 5 : 7,
773
996
  },
774
997
  ]}>
775
- {isSettingsView && (<TouchableScale_1.default onPress={() => {
998
+ {isSettingsView && (<TouchableScale_1.default onPress={() => {
776
999
  react_native_1.Alert.alert('Reset All Settings', 'This restores all module visibility and UI preferences to defaults. Continue?', [
777
1000
  { text: 'Cancel', style: 'cancel' },
778
1001
  {
@@ -789,19 +1012,10 @@ const InspectorHeader = react_1.default.memo(() => {
789
1012
  borderRadius: isNarrow ? 6 : 7,
790
1013
  },
791
1014
  ]}>
792
- <NetworkIcons_1.ResetIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
793
- </TouchableScale_1.default>)}
1015
+ <NetworkIcons_1.ResetIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
1016
+ </TouchableScale_1.default>)}
794
1017
 
795
- {!isAnySelected && (<TouchableScale_1.default onPress={() => {
796
- react_native_1.Alert.alert('Clear Everything', 'This clears all tabs — APIs, Logs, Analytics, Redux timeline and Crash history. Continue?', [
797
- { text: 'Cancel', style: 'cancel' },
798
- {
799
- text: 'Clear All',
800
- onPress: runClearAllWithAnimation,
801
- style: 'destructive',
802
- },
803
- ]);
804
- }} hitSlop={15} style={[
1018
+ {!isAnySelected && (<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="Settings" onPress={() => setSettingsPage('main')} hitSlop={15} style={[
805
1019
  styles_1.default.closeButtonSquare,
806
1020
  {
807
1021
  width: buttonSize,
@@ -809,7 +1023,112 @@ const InspectorHeader = react_1.default.memo(() => {
809
1023
  borderRadius: isNarrow ? 6 : 7,
810
1024
  },
811
1025
  ]}>
812
- <react_native_1.Animated.View style={{
1026
+ <NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
1027
+ </TouchableScale_1.default>)}
1028
+
1029
+ <react_native_1.TouchableOpacity onPress={closeModal} hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }} activeOpacity={0.6} style={[
1030
+ styles_1.default.closeButtonSquare,
1031
+ {
1032
+ width: buttonSize,
1033
+ height: buttonSize,
1034
+ borderRadius: isNarrow ? 6 : 7,
1035
+ },
1036
+ ]}>
1037
+ <NetworkIcons_1.CloseWhite size={isNarrow ? 12 : 14}/>
1038
+ </react_native_1.TouchableOpacity>
1039
+ </react_native_1.View>
1040
+ </react_native_1.View>
1041
+
1042
+
1043
+ {!isAnySelected && (<react_native_1.View style={{
1044
+ flexDirection: 'row',
1045
+ alignItems: 'center',
1046
+ justifyContent: 'space-between',
1047
+ paddingHorizontal: isNarrow ? 8 : 12,
1048
+ paddingBottom: isNarrow ? 6 : 8,
1049
+ paddingTop: 0,
1050
+ gap: 6,
1051
+ }}>
1052
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
1053
+
1054
+ <TouchableScale_1.default onPress={handleTakeScreenshot} style={{
1055
+ flexDirection: 'row',
1056
+ alignItems: 'center',
1057
+ gap: 4.5,
1058
+ backgroundColor: `${AppColors_1.AppColors.white}24`,
1059
+ paddingHorizontal: isNarrow ? 8 : 10,
1060
+ paddingVertical: isNarrow ? 4 : 5,
1061
+ borderRadius: 6,
1062
+ borderWidth: 1,
1063
+ borderColor: `${AppColors_1.AppColors.white}33`,
1064
+ }}>
1065
+ <NetworkIcons_1.CameraIcon size={isNarrow ? 12 : 13} color={AppColors_1.AppColors.white}/>
1066
+ <react_native_1.Text style={{
1067
+ fontFamily: AppFonts_1.AppFonts.interSemiBold,
1068
+ fontSize: isNarrow ? 10 : 11,
1069
+ color: AppColors_1.AppColors.white,
1070
+ }}>
1071
+ {t('header.photo')}
1072
+ </react_native_1.Text>
1073
+ </TouchableScale_1.default>
1074
+
1075
+
1076
+ <TouchableScale_1.default onPress={handleToggleVideoRecording} style={{
1077
+ flexDirection: 'row',
1078
+ alignItems: 'center',
1079
+ gap: 4.5,
1080
+ backgroundColor: isRecording
1081
+ ? `${AppColors_1.AppColors.red500}33`
1082
+ : `${AppColors_1.AppColors.white}24`,
1083
+ paddingHorizontal: isNarrow ? 8 : 10,
1084
+ paddingVertical: isNarrow ? 4 : 5,
1085
+ borderRadius: 6,
1086
+ borderWidth: 1,
1087
+ borderColor: isRecording
1088
+ ? AppColors_1.AppColors.red500
1089
+ : `${AppColors_1.AppColors.white}33`,
1090
+ }}>
1091
+ {isRecording ? (<react_native_1.Animated.View style={{
1092
+ width: 6,
1093
+ height: 6,
1094
+ borderRadius: 3,
1095
+ backgroundColor: AppColors_1.AppColors.red500,
1096
+ }}/>) : (<NetworkIcons_1.VideoCameraIcon size={isNarrow ? 12 : 13} color={AppColors_1.AppColors.white}/>)}
1097
+ <react_native_1.Text style={{
1098
+ fontFamily: AppFonts_1.AppFonts.interSemiBold,
1099
+ fontSize: isNarrow ? 10 : 11,
1100
+ color: isRecording ? AppColors_1.AppColors.red300 : AppColors_1.AppColors.white,
1101
+ }}>
1102
+ {isRecording
1103
+ ? `${t('header.rec')} ${formatTimer(recordingSeconds)}`
1104
+ : t('header.record')}
1105
+ </react_native_1.Text>
1106
+ </TouchableScale_1.default>
1107
+ </react_native_1.View>
1108
+
1109
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
1110
+
1111
+ <TouchableScale_1.default onPress={() => {
1112
+ react_native_1.Alert.alert(t('header.clearEverythingTitle'), t('header.clearEverythingMessage'), [
1113
+ { text: t('common.cancel'), style: 'cancel' },
1114
+ {
1115
+ text: t('common.clearAll'),
1116
+ onPress: runClearAllWithAnimation,
1117
+ style: 'destructive',
1118
+ },
1119
+ ]);
1120
+ }} style={{
1121
+ flexDirection: 'row',
1122
+ alignItems: 'center',
1123
+ gap: 4,
1124
+ backgroundColor: `${AppColors_1.AppColors.white}1A`,
1125
+ paddingHorizontal: isNarrow ? 7 : 9,
1126
+ paddingVertical: isNarrow ? 4 : 5,
1127
+ borderRadius: 6,
1128
+ borderWidth: 1,
1129
+ borderColor: `${AppColors_1.AppColors.white}26`,
1130
+ }}>
1131
+ <react_native_1.Animated.View style={{
813
1132
  transform: [
814
1133
  {
815
1134
  rotate: clearAnim.interpolate({
@@ -825,52 +1144,71 @@ const InspectorHeader = react_1.default.memo(() => {
825
1144
  },
826
1145
  ],
827
1146
  }}>
828
- <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
829
- </react_native_1.Animated.View>
830
- </TouchableScale_1.default>)}
831
-
832
- {!isAnySelected && (<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="Settings" onPress={() => setSettingsPage('main')} hitSlop={15} style={[
833
- styles_1.default.closeButtonSquare,
834
- {
835
- width: buttonSize,
836
- height: buttonSize,
837
- borderRadius: isNarrow ? 6 : 7,
838
- },
839
- ]}>
840
- <NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
841
- </TouchableScale_1.default>)}
1147
+ <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.white} size={isNarrow ? 11 : 12}/>
1148
+ </react_native_1.Animated.View>
1149
+ <react_native_1.Text style={{
1150
+ fontFamily: AppFonts_1.AppFonts.interMedium,
1151
+ fontSize: isNarrow ? 10 : 11,
1152
+ color: `${AppColors_1.AppColors.white}E6`,
1153
+ }}>
1154
+ {t('header.clear')}
1155
+ </react_native_1.Text>
1156
+ </TouchableScale_1.default>
842
1157
 
843
- {!isAnySelected && (<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="About and System Specifications" onPress={() => {
1158
+
1159
+ <TouchableScale_1.default onPress={() => {
844
1160
  setSettingsActiveSubTab('about');
845
1161
  setSettingsPage('main');
846
- }} hitSlop={15} style={[
847
- styles_1.default.closeButtonSquare,
848
- {
849
- width: buttonSize,
850
- height: buttonSize,
851
- borderRadius: isNarrow ? 6 : 7,
852
- },
853
- ]}>
854
- <NetworkIcons_1.InfoCircleIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
855
- </TouchableScale_1.default>)}
856
-
857
- <react_native_1.TouchableOpacity onPress={closeModal} hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }} activeOpacity={0.6} style={[
858
- styles_1.default.closeButtonSquare,
859
- {
860
- width: buttonSize,
861
- height: buttonSize,
862
- borderRadius: isNarrow ? 6 : 7,
863
- },
864
- ]}>
865
- <NetworkIcons_1.CloseWhite size={isNarrow ? 12 : 14}/>
866
- </react_native_1.TouchableOpacity>
867
- </react_native_1.View>
1162
+ }} style={{
1163
+ flexDirection: 'row',
1164
+ alignItems: 'center',
1165
+ gap: 4,
1166
+ backgroundColor: `${AppColors_1.AppColors.white}1A`,
1167
+ paddingHorizontal: isNarrow ? 7 : 9,
1168
+ paddingVertical: isNarrow ? 4 : 5,
1169
+ borderRadius: 6,
1170
+ borderWidth: 1,
1171
+ borderColor: `${AppColors_1.AppColors.white}26`,
1172
+ }}>
1173
+ <NetworkIcons_1.InfoCircleIcon color={AppColors_1.AppColors.white} size={isNarrow ? 11 : 12}/>
1174
+ <react_native_1.Text style={{
1175
+ fontFamily: AppFonts_1.AppFonts.interMedium,
1176
+ fontSize: isNarrow ? 10 : 11,
1177
+ color: `${AppColors_1.AppColors.white}E6`,
1178
+ }}>
1179
+ {t('header.about')}
1180
+ </react_native_1.Text>
1181
+ </TouchableScale_1.default>
1182
+ </react_native_1.View>
1183
+ </react_native_1.View>)}
868
1184
  </react_native_1.View>
869
1185
  </react_native_1.View>
870
- </react_native_linear_gradient_1.default>
871
1186
 
872
-
873
- <UpdateAvailableModal_1.UpdateAvailableModal visible={showUpdateModal} latestVersion={latestNpmVersion} onClose={() => setShowUpdateModal(false)}/>
1187
+
1188
+ <UpdateAvailableModal_1.UpdateAvailableModal visible={showUpdateModal} latestVersion={latestNpmVersion} onClose={() => setShowUpdateModal(false)}/>
1189
+
1190
+
1191
+ <MediaPreviewModal_1.MediaPreviewModal item={previewMediaItem} visible={!!previewMediaItem} onClose={() => setPreviewMediaItem(null)} onDelete={async (item) => {
1192
+ await capture_1.ScreenCapture.deleteMedia(item.uri);
1193
+ setPreviewMediaItem(null);
1194
+ }} onConvertToGif={async (item) => {
1195
+ const gif = await capture_1.ScreenCapture.convertToGif(item.uri, {
1196
+ fps: 12,
1197
+ width: 480,
1198
+ });
1199
+ if (gif) {
1200
+ setPreviewMediaItem({
1201
+ id: `anim_${gif.timestamp}.gif`,
1202
+ type: 'gif',
1203
+ format: 'gif',
1204
+ uri: gif.uri,
1205
+ filename: gif.uri.split('/').pop() || `anim_${gif.timestamp}.gif`,
1206
+ sizeBytes: gif.sizeBytes,
1207
+ timestamp: gif.timestamp,
1208
+ durationMs: gif.durationMs,
1209
+ });
1210
+ }
1211
+ }}/>
874
1212
  </>);
875
1213
  });
876
1214
  exports.default = InspectorHeader;