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
@@ -49,10 +49,15 @@ 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(() => {
55
- 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, resetToDefaults, closeModal, detailTitle, activeTab, environment, visible, selectedCrash, setSelectedCrash, } = (0, InspectorContext_1.useInspector)();
59
+ const { t } = (0, i18n_1.useTranslation)();
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;
58
63
  const isCompact = windowWidth < 400;
@@ -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();
@@ -113,7 +225,7 @@ const InspectorHeader = react_1.default.memo(() => {
113
225
  (selectedReduxSlice != null || selectedReduxAction != null)) ||
114
226
  (activeTab === 'crash' && selectedCrash != null);
115
227
  const isSettingsView = settingsPage !== null;
116
- const isAnySelected = isDetailView || isSettingsView;
228
+ const isAnySelected = isDetailView || isSettingsView || isFeedbackOpen;
117
229
  const settingsModuleTitle = (0, react_1.useMemo)(() => {
118
230
  switch (settingsPage) {
119
231
  case 'apis':
@@ -138,46 +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 (isSettingsView) {
163
- if (settingsPage === 'main') {
164
- 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;
165
290
  }
166
- else {
167
- setSettingsPage('main');
291
+ if (isSettingsView) {
292
+ if (settingsPage === 'main') {
293
+ setSettingsPage(null);
294
+ }
295
+ else {
296
+ setSettingsPage('main');
297
+ }
298
+ return;
168
299
  }
169
- return;
170
- }
171
- requestAnimationFrame(() => {
172
300
  setSelected(null);
173
301
  setSelectedEvent(null);
174
302
  setSelectedLog(null);
175
303
  setSelectedReduxSlice(null);
176
304
  setSelectedReduxAction(null);
177
305
  setSelectedCrash(null);
178
- });
179
- }} hitSlop={15} style={[
180
- {
306
+ }} hitSlop={15} style={{
181
307
  width: isNarrow ? 32 : 36,
182
308
  height: isNarrow ? 32 : 36,
183
309
  borderRadius: isNarrow ? 16 : 18,
@@ -186,30 +312,70 @@ const InspectorHeader = react_1.default.memo(() => {
186
312
  backgroundColor: `${AppColors_1.AppColors.white}2E`,
187
313
  borderWidth: 1,
188
314
  borderColor: `${AppColors_1.AppColors.white}4D`,
189
- },
190
- !isAnySelected && { display: 'none' },
191
- ]}>
192
- <react_native_1.View style={{
193
- position: 'absolute',
194
- width: isNarrow ? 40 : 44,
195
- height: isNarrow ? 40 : 44,
196
- borderRadius: 22,
197
- backgroundColor: `${AppColors_1.AppColors.white}1A`,
198
- }}/>
199
- <NetworkIcons_1.WhiteBackNavigation />
200
- </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>)}
201
325
 
202
- {isSettingsView ? (<react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
203
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
204
- <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={{
205
333
  fontFamily: AppFonts_1.AppFonts.interBold,
206
334
  fontSize: isNarrow ? 14 : 16,
207
335
  color: AppColors_1.AppColors.white,
208
336
  letterSpacing: -0.2,
209
337
  }} numberOfLines={1}>
210
- {settingsModuleTitle}
338
+ Support & Feedback
339
+ </react_native_1.Text>
340
+ <react_native_1.View style={{
341
+ backgroundColor: `${AppColors_1.AppColors.white}26`,
342
+ paddingHorizontal: isNarrow ? 4 : 6,
343
+ paddingVertical: 1.5,
344
+ borderRadius: 10,
345
+ borderWidth: 1,
346
+ borderColor: `${AppColors_1.AppColors.white}20`,
347
+ }}>
348
+ <react_native_1.Text style={{
349
+ fontFamily: AppFonts_1.AppFonts.interBold,
350
+ fontSize: isNarrow ? 8 : 9,
351
+ color: AppColors_1.AppColors.white,
352
+ }}>
353
+ v{constants_2.LIB_VERSION}
354
+ </react_native_1.Text>
355
+ </react_native_1.View>
356
+ </react_native_1.View>
357
+ <react_native_1.Text style={{
358
+ fontFamily: AppFonts_1.AppFonts.interRegular,
359
+ fontSize: isNarrow ? 9.5 : 10.5,
360
+ color: `${AppColors_1.AppColors.white}CC`,
361
+ }} numberOfLines={1}>
362
+ Direct line to maintainers & developers
211
363
  </react_native_1.Text>
212
- {settingsPage === 'main' && (<react_native_1.View style={{
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={{
371
+ fontFamily: AppFonts_1.AppFonts.interBold,
372
+ fontSize: isNarrow ? 14 : 16,
373
+ color: AppColors_1.AppColors.white,
374
+ letterSpacing: -0.2,
375
+ }} numberOfLines={1}>
376
+ {settingsModuleTitle}
377
+ </react_native_1.Text>
378
+ {settingsPage === 'main' && (<react_native_1.View style={{
213
379
  backgroundColor: `${AppColors_1.AppColors.white}26`,
214
380
  paddingHorizontal: isNarrow ? 4 : 6,
215
381
  paddingVertical: 1.5,
@@ -217,25 +383,25 @@ const InspectorHeader = react_1.default.memo(() => {
217
383
  borderWidth: 1,
218
384
  borderColor: `${AppColors_1.AppColors.white}20`,
219
385
  }}>
220
- <react_native_1.Text style={{
386
+ <react_native_1.Text style={{
221
387
  fontFamily: AppFonts_1.AppFonts.interBold,
222
388
  fontSize: isNarrow ? 8 : 9,
223
389
  color: AppColors_1.AppColors.white,
224
390
  }}>
225
- v{constants_2.LIB_VERSION}
226
- </react_native_1.Text>
227
- </react_native_1.View>)}
228
- </react_native_1.View>
229
- <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={{
230
396
  fontFamily: AppFonts_1.AppFonts.interRegular,
231
397
  fontSize: isNarrow ? 9.5 : 10.5,
232
398
  color: `${AppColors_1.AppColors.white}CC`,
233
399
  }} numberOfLines={1}>
234
- {settingsPage === 'main'
400
+ {settingsPage === 'main'
235
401
  ? 'Manage modules and preferences'
236
402
  : 'Configure module parameters'}
237
- </react_native_1.Text>
238
- </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={{
239
405
  flexDirection: 'row',
240
406
  alignItems: 'center',
241
407
  gap: isNarrow ? 6 : 8,
@@ -243,15 +409,15 @@ const InspectorHeader = react_1.default.memo(() => {
243
409
  minWidth: 0,
244
410
  marginRight: 4,
245
411
  }}>
246
- <AppHeaderLogo_1.default size={logoSize} customIcon={appIcon}/>
247
- <react_native_1.View style={{ gap: 2, flex: 1, minWidth: 0 }}>
248
- <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={{
249
415
  flexDirection: 'row',
250
416
  alignItems: 'center',
251
417
  gap: isNarrow ? 4 : 6,
252
418
  minWidth: 0,
253
419
  }}>
254
- <react_native_1.Text style={[
420
+ <react_native_1.Text style={[
255
421
  styles_1.default.headerTitle,
256
422
  {
257
423
  fontSize: isNarrow ? 13.5 : isCompact ? 14.5 : 15.5,
@@ -259,9 +425,9 @@ const InspectorHeader = react_1.default.memo(() => {
259
425
  paddingBottom: 0,
260
426
  },
261
427
  ]} numberOfLines={1} ellipsizeMode="tail">
262
- {(0, helpers_1.getAppName)()}
263
- </react_native_1.Text>
264
- <react_native_1.View style={[
428
+ {(0, helpers_1.getAppName)()}
429
+ </react_native_1.Text>
430
+ <react_native_1.View style={[
265
431
  styles_1.default.envBadge,
266
432
  {
267
433
  backgroundColor: envConfig.bg,
@@ -272,59 +438,59 @@ const InspectorHeader = react_1.default.memo(() => {
272
438
  marginBottom: 0,
273
439
  },
274
440
  ]}>
275
- <react_native_1.Text style={[
441
+ <react_native_1.Text style={[
276
442
  styles_1.default.envBadgeText,
277
443
  {
278
444
  color: envConfig.text,
279
445
  fontSize: isNarrow ? 8.5 : 9.5,
280
446
  },
281
447
  ]}>
282
- {envConfig.label}
283
- </react_native_1.Text>
284
- </react_native_1.View>
285
- {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={{
286
452
  flexDirection: 'row',
287
453
  alignItems: 'center',
288
- backgroundColor: '#F59E0B',
454
+ backgroundColor: AppColors_1.AppColors.warningAmber,
289
455
  borderRadius: 5,
290
456
  paddingHorizontal: isNarrow ? 4 : 5.5,
291
457
  paddingVertical: 1.5,
292
458
  gap: 3,
293
- shadowColor: '#F59E0B',
459
+ shadowColor: AppColors_1.AppColors.warningAmber,
294
460
  shadowOffset: { width: 0, height: 1.5 },
295
461
  shadowOpacity: 0.35,
296
462
  shadowRadius: 3,
297
463
  elevation: 3,
298
464
  flexShrink: 0,
299
465
  }}>
300
- <react_native_1.Animated.View style={{
466
+ <react_native_1.Animated.View style={{
301
467
  width: 5,
302
468
  height: 5,
303
469
  borderRadius: 2.5,
304
- backgroundColor: '#FFFFFF',
470
+ backgroundColor: AppColors_1.AppColors.white,
305
471
  opacity: activePulseAnim,
306
472
  transform: [{ scale: unreadPulseAnim }],
307
473
  }}/>
308
- {!isNarrow && (<react_native_1.Text style={{
474
+ {!isNarrow && (<react_native_1.Text style={{
309
475
  fontFamily: AppFonts_1.AppFonts.interBold,
310
476
  fontSize: 8.5,
311
- color: '#FFFFFF',
477
+ color: AppColors_1.AppColors.white,
312
478
  letterSpacing: 0.3,
313
479
  }}>
314
- UPDATE
315
- </react_native_1.Text>)}
316
- <NetworkIcons_1.BoltIcon size={isNarrow ? 8 : 9} color="#FFFFFF"/>
317
- </react_native_1.Pressable>)}
318
- </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>
319
485
 
320
-
321
- <react_native_1.View style={{
486
+
487
+ <react_native_1.View style={{
322
488
  flexDirection: 'row',
323
489
  alignItems: 'center',
324
490
  gap: isNarrow ? 4 : 5,
325
491
  minWidth: 0,
326
492
  }}>
327
- <react_native_1.View style={{
493
+ <react_native_1.View style={{
328
494
  flexDirection: 'row',
329
495
  alignItems: 'center',
330
496
  backgroundColor: `${AppColors_1.AppColors.white}1F`,
@@ -337,18 +503,18 @@ const InspectorHeader = react_1.default.memo(() => {
337
503
  flexShrink: 1,
338
504
  minWidth: 0,
339
505
  }}>
340
- {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}/>)}
341
- <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={{
342
508
  fontFamily: AppFonts_1.AppFonts.interMedium,
343
509
  fontSize: isNarrow ? 8.5 : 9.5,
344
510
  color: `${AppColors_1.AppColors.white}EB`,
345
511
  letterSpacing: 0.1,
346
512
  }} numberOfLines={1} ellipsizeMode="tail">
347
- {appVersionString}
348
- </react_native_1.Text>
349
- </react_native_1.View>
513
+ {appVersionString}
514
+ </react_native_1.Text>
515
+ </react_native_1.View>
350
516
 
351
- <react_native_1.Pressable onPress={() => {
517
+ <react_native_1.Pressable onPress={() => {
352
518
  if (updateAvailable) {
353
519
  setShowUpdateModal(true);
354
520
  }
@@ -367,32 +533,35 @@ const InspectorHeader = react_1.default.memo(() => {
367
533
  borderColor: `${AppColors_1.AppColors.white}2E`,
368
534
  flexShrink: 0,
369
535
  }}>
370
- <NetworkIcons_1.NpmIcon size={isNarrow ? 9 : 10} color="#FF6B6B"/>
371
- <react_native_1.Text style={{
536
+ <NetworkIcons_1.NpmIcon size={isNarrow ? 9 : 10} color={AppColors_1.AppColors.npmRedLight}/>
537
+ <react_native_1.Text style={{
372
538
  fontFamily: AppFonts_1.AppFonts.interMedium,
373
539
  fontSize: isNarrow ? 8.5 : 9.5,
374
540
  color: `${AppColors_1.AppColors.white}EB`,
375
541
  letterSpacing: 0.1,
376
542
  }} numberOfLines={1}>
377
- v{constants_2.LIB_VERSION}
378
- </react_native_1.Text>
379
- {updateAvailable && (<react_native_1.Text style={{
543
+ v{constants_2.LIB_VERSION}
544
+ </react_native_1.Text>
545
+ {updateAvailable && (<react_native_1.Text style={{
380
546
  fontFamily: AppFonts_1.AppFonts.interBold,
381
547
  fontSize: 8.5,
382
- color: '#F59E0B',
548
+ color: AppColors_1.AppColors.warningAmber,
383
549
  }}>
384
- ●
385
- </react_native_1.Text>)}
386
- </react_native_1.Pressable>
550
+ ●
551
+ </react_native_1.Text>)}
552
+ </react_native_1.Pressable>
553
+ </react_native_1.View>
387
554
  </react_native_1.View>
388
- </react_native_1.View>
389
- </react_native_1.View>) : null}
390
- </react_native_1.View>
555
+ </react_native_1.View>) : null}
556
+ </react_native_1.View>
391
557
 
392
- {isDetailView && (<react_native_1.View style={[styles_1.default.headerCenter, { paddingHorizontal: isNarrow ? 2 : 6 }]}>
393
- {activeTab === 'apis' && selected != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
394
- <react_native_1.View style={styles_1.default.headerDetailRow}>
395
- <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={[
396
565
  styles_1.default.headerMethodBadge,
397
566
  {
398
567
  backgroundColor: constants_1.METHOD_COLORS[selected.method] ??
@@ -401,22 +570,28 @@ const InspectorHeader = react_1.default.memo(() => {
401
570
  paddingVertical: isNarrow ? 2 : 3,
402
571
  },
403
572
  ]}>
404
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
405
- {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}
406
585
  </react_native_1.Text>
407
586
  </react_native_1.View>
408
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
409
- {detailTitle}
410
- </react_native_1.Text>
411
- </react_native_1.View>
412
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
587
+ <react_native_1.View style={{
413
588
  flexDirection: 'row',
414
589
  alignItems: 'center',
415
590
  gap: isNarrow ? 4 : 6,
416
591
  marginTop: 3,
417
592
  paddingVertical: 1,
418
593
  }}>
419
- <react_native_1.View style={{
594
+ <react_native_1.View style={{
420
595
  flexDirection: 'row',
421
596
  alignItems: 'center',
422
597
  gap: 4,
@@ -427,7 +602,7 @@ const InspectorHeader = react_1.default.memo(() => {
427
602
  borderWidth: 1,
428
603
  borderColor: `${(0, helpers_1.getStatusColor)(selected.status)}55`,
429
604
  }}>
430
- <react_native_1.View style={[
605
+ <react_native_1.View style={[
431
606
  styles_1.default.headerStatusDot,
432
607
  {
433
608
  backgroundColor: (0, helpers_1.getStatusColor)(selected.status),
@@ -435,16 +610,19 @@ const InspectorHeader = react_1.default.memo(() => {
435
610
  height: isNarrow ? 6 : 7,
436
611
  },
437
612
  ]}/>
438
- <react_native_1.Text style={[
613
+ <react_native_1.Text style={[
439
614
  styles_1.default.headerSubTitle,
440
- { fontFamily: AppFonts_1.AppFonts.interBold, fontSize: isNarrow ? 10 : 11 },
615
+ {
616
+ fontFamily: AppFonts_1.AppFonts.interBold,
617
+ fontSize: isNarrow ? 10 : 11,
618
+ },
441
619
  ]}>
442
- {selected.status === 0
620
+ {selected.status === 0
443
621
  ? 'Failed'
444
622
  : selected.status ?? 'Pending'}
445
- </react_native_1.Text>
446
- </react_native_1.View>
447
- <react_native_1.View style={{
623
+ </react_native_1.Text>
624
+ </react_native_1.View>
625
+ <react_native_1.View style={{
448
626
  flexDirection: 'row',
449
627
  alignItems: 'center',
450
628
  gap: 4,
@@ -453,14 +631,17 @@ const InspectorHeader = react_1.default.memo(() => {
453
631
  borderRadius: 20,
454
632
  backgroundColor: `${AppColors_1.AppColors.white}29`,
455
633
  }}>
456
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
457
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
458
- {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
459
640
  ? `${selected.duration}ms`
460
641
  : '—'}
461
- </react_native_1.Text>
462
- </react_native_1.View>
463
- {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={{
464
645
  flexDirection: 'row',
465
646
  alignItems: 'center',
466
647
  gap: 4,
@@ -469,15 +650,18 @@ const InspectorHeader = react_1.default.memo(() => {
469
650
  borderRadius: 20,
470
651
  backgroundColor: `${AppColors_1.AppColors.white}29`,
471
652
  }}>
472
- <NetworkIcons_1.SizeIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
473
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
474
- {(0, helpers_1.getSize)(selected.response)}
475
- </react_native_1.Text>
476
- </react_native_1.View>)}
477
- </react_native_1.ScrollView>
478
- </react_native_1.View>) : activeTab === 'analytics' && selectedEvent != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
479
- <react_native_1.View style={styles_1.default.headerDetailRow}>
480
- <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={[
481
665
  styles_1.default.headerMethodBadge,
482
666
  {
483
667
  backgroundColor: selectedEvent.source === 'firebase'
@@ -487,22 +671,28 @@ const InspectorHeader = react_1.default.memo(() => {
487
671
  paddingVertical: isNarrow ? 2 : 3,
488
672
  },
489
673
  ]}>
490
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
491
- {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}
492
686
  </react_native_1.Text>
493
687
  </react_native_1.View>
494
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
495
- {selectedEvent.name}
496
- </react_native_1.Text>
497
- </react_native_1.View>
498
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
688
+ <react_native_1.View style={{
499
689
  flexDirection: 'row',
500
690
  alignItems: 'center',
501
691
  gap: isNarrow ? 4 : 6,
502
692
  marginTop: 3,
503
693
  paddingVertical: 1,
504
694
  }}>
505
- <react_native_1.View style={[
695
+ <react_native_1.View style={[
506
696
  styles_1.default.headerStatusDot,
507
697
  {
508
698
  backgroundColor: selectedEvent.source === 'firebase'
@@ -512,18 +702,21 @@ const InspectorHeader = react_1.default.memo(() => {
512
702
  height: isNarrow ? 6 : 7,
513
703
  },
514
704
  ]}/>
515
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
516
- {Object.keys(selectedEvent.params).length} param
517
- {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
518
711
  ? 's'
519
712
  : ''}
520
- {' · '}
521
- {selectedEvent.source}
522
- </react_native_1.Text>
523
- </react_native_1.ScrollView>
524
- </react_native_1.View>) : activeTab === 'logs' && selectedLog != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
525
- <react_native_1.View style={styles_1.default.headerDetailRow}>
526
- <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={[
527
720
  styles_1.default.headerMethodBadge,
528
721
  {
529
722
  backgroundColor: selectedLog.type === 'error'
@@ -535,23 +728,29 @@ const InspectorHeader = react_1.default.memo(() => {
535
728
  paddingVertical: isNarrow ? 2 : 3,
536
729
  },
537
730
  ]}>
538
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
539
- {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'}
540
744
  </react_native_1.Text>
541
745
  </react_native_1.View>
542
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
543
- console.
544
- {selectedLog.sourceMethod || selectedLog.type || 'log'}
545
- </react_native_1.Text>
546
- </react_native_1.View>
547
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
746
+ <react_native_1.View style={{
548
747
  flexDirection: 'row',
549
748
  alignItems: 'center',
550
749
  gap: isNarrow ? 4 : 6,
551
750
  marginTop: 3,
552
751
  paddingVertical: 1,
553
752
  }}>
554
- <react_native_1.View style={{
753
+ <react_native_1.View style={{
555
754
  flexDirection: 'row',
556
755
  alignItems: 'center',
557
756
  gap: 4,
@@ -560,13 +759,16 @@ const InspectorHeader = react_1.default.memo(() => {
560
759
  borderRadius: 20,
561
760
  backgroundColor: `${AppColors_1.AppColors.white}29`,
562
761
  }}>
563
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 10 : 11}/>
564
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
565
- {(0, helpers_1.formatTime)(selectedLog.timestamp)}
566
- </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>
567
770
  </react_native_1.View>
568
- </react_native_1.ScrollView>
569
- </react_native_1.View>) : activeTab === 'redux' && selectedReduxSlice != null ? ((() => {
771
+ </react_native_1.View>) : activeTab === 'redux' && selectedReduxSlice != null ? ((() => {
570
772
  const sliceData = reduxState?.[selectedReduxSlice];
571
773
  const keyCount = sliceData && typeof sliceData === 'object'
572
774
  ? Object.keys(sliceData).length
@@ -576,8 +778,8 @@ const InspectorHeader = react_1.default.memo(() => {
576
778
  const sliceSize = (0, helpers_1.getSize)(sliceData);
577
779
  const lastAction = reduxLastActionMap[selectedReduxSlice];
578
780
  return (<react_native_1.View style={styles_1.default.headerDetailCenter}>
579
- <react_native_1.View style={styles_1.default.headerDetailRow}>
580
- <react_native_1.View style={[
781
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
782
+ <react_native_1.View style={[
581
783
  styles_1.default.headerMethodBadge,
582
784
  {
583
785
  backgroundColor: `${AppColors_1.AppColors.purple}4D`,
@@ -585,20 +787,28 @@ const InspectorHeader = react_1.default.memo(() => {
585
787
  paddingVertical: isNarrow ? 2 : 3,
586
788
  },
587
789
  ]}>
588
- <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>
589
803
  </react_native_1.View>
590
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
591
- {selectedReduxSlice}
592
- </react_native_1.Text>
593
- </react_native_1.View>
594
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
804
+ <react_native_1.View style={{
595
805
  flexDirection: 'row',
596
806
  alignItems: 'center',
597
807
  gap: isNarrow ? 4 : 6,
598
808
  marginTop: 3,
599
809
  paddingVertical: 1,
600
810
  }}>
601
- <react_native_1.View style={[
811
+ <react_native_1.View style={[
602
812
  styles_1.default.headerStatusDot,
603
813
  {
604
814
  backgroundColor: AppColors_1.AppColors.liveGreen,
@@ -606,37 +816,62 @@ const InspectorHeader = react_1.default.memo(() => {
606
816
  height: isNarrow ? 6 : 7,
607
817
  },
608
818
  ]}/>
609
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>Live</react_native_1.Text>
610
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
611
- •
612
- </react_native_1.Text>
613
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
614
- {keyCount} keys
615
- </react_native_1.Text>
616
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
617
- •
618
- </react_native_1.Text>
619
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>{sliceSize}</react_native_1.Text>
620
- {lastAction?.timestamp && (<>
621
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
622
- •
623
- </react_native_1.Text>
624
- <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={{
625
857
  flexDirection: 'row',
626
858
  alignItems: 'center',
627
859
  gap: 3,
628
860
  }}>
629
- <NetworkIcons_1.ClockIcon color={AppColors_1.AppColors.white} size={isNarrow ? 9 : 10}/>
630
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
631
- {lastAction.timestamp}
632
- </react_native_1.Text>
633
- </react_native_1.View>
634
- </>)}
635
- </react_native_1.ScrollView>
636
- </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>);
637
872
  })()) : activeTab === 'redux' && selectedReduxAction != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
638
- <react_native_1.View style={styles_1.default.headerDetailRow}>
639
- <react_native_1.View style={[
873
+ <react_native_1.View style={styles_1.default.headerDetailRow}>
874
+ <react_native_1.View style={[
640
875
  styles_1.default.headerMethodBadge,
641
876
  {
642
877
  backgroundColor: `${AppColors_1.AppColors.brandPurple}4D`,
@@ -644,20 +879,28 @@ const InspectorHeader = react_1.default.memo(() => {
644
879
  paddingVertical: isNarrow ? 2 : 3,
645
880
  },
646
881
  ]}>
647
- <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>
648
895
  </react_native_1.View>
649
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
650
- {selectedReduxAction.type}
651
- </react_native_1.Text>
652
- </react_native_1.View>
653
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
896
+ <react_native_1.View style={{
654
897
  flexDirection: 'row',
655
898
  alignItems: 'center',
656
899
  gap: isNarrow ? 4 : 6,
657
900
  marginTop: 3,
658
901
  paddingVertical: 1,
659
902
  }}>
660
- <react_native_1.View style={[
903
+ <react_native_1.View style={[
661
904
  styles_1.default.headerStatusDot,
662
905
  {
663
906
  backgroundColor: AppColors_1.AppColors.purple,
@@ -665,13 +908,16 @@ const InspectorHeader = react_1.default.memo(() => {
665
908
  height: isNarrow ? 6 : 7,
666
909
  },
667
910
  ]}/>
668
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
669
- {selectedReduxAction.timestamp || 'Dispatched'}
670
- </react_native_1.Text>
671
- </react_native_1.ScrollView>
672
- </react_native_1.View>) : activeTab === 'crash' && selectedCrash != null ? (<react_native_1.View style={styles_1.default.headerDetailCenter}>
673
- <react_native_1.View style={styles_1.default.headerDetailRow}>
674
- <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={[
675
921
  styles_1.default.headerMethodBadge,
676
922
  {
677
923
  backgroundColor: selectedCrash.isFatal
@@ -681,24 +927,30 @@ const InspectorHeader = react_1.default.memo(() => {
681
927
  paddingVertical: isNarrow ? 2 : 3,
682
928
  },
683
929
  ]}>
684
- <react_native_1.Text style={[styles_1.default.headerMethodText, { fontSize: isNarrow ? 9 : 10 }]}>
685
- {selectedCrash.isFatal
930
+ <react_native_1.Text style={[
931
+ styles_1.default.headerMethodText,
932
+ { fontSize: isNarrow ? 9 : 10 },
933
+ ]}>
934
+ {selectedCrash.isFatal
686
935
  ? 'FATAL'
687
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}
688
944
  </react_native_1.Text>
689
945
  </react_native_1.View>
690
- <react_native_1.Text style={[styles_1.default.headerDetailTitle, { fontSize: isNarrow ? 13.5 : 15 }]} numberOfLines={1} ellipsizeMode="middle">
691
- {selectedCrash.name || selectedCrash.message}
692
- </react_native_1.Text>
693
- </react_native_1.View>
694
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={{
946
+ <react_native_1.View style={{
695
947
  flexDirection: 'row',
696
948
  alignItems: 'center',
697
949
  gap: isNarrow ? 4 : 6,
698
950
  marginTop: 3,
699
951
  paddingVertical: 1,
700
952
  }}>
701
- <react_native_1.View style={[
953
+ <react_native_1.View style={[
702
954
  styles_1.default.headerStatusDot,
703
955
  {
704
956
  backgroundColor: selectedCrash.isFatal
@@ -708,23 +960,32 @@ const InspectorHeader = react_1.default.memo(() => {
708
960
  height: isNarrow ? 6 : 7,
709
961
  },
710
962
  ]}/>
711
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
712
- {selectedCrash.timeStr ||
963
+ <react_native_1.Text style={[
964
+ styles_1.default.headerSubTitle,
965
+ { fontSize: isNarrow ? 10 : 11 },
966
+ ]}>
967
+ {selectedCrash.timeStr ||
713
968
  new Date(selectedCrash.timestamp).toLocaleTimeString()}
714
- </react_native_1.Text>
715
- {selectedCrash.deviceInfo?.platform && (<>
716
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { opacity: 0.6, fontSize: isNarrow ? 10 : 11 }]}>
717
- •
718
- </react_native_1.Text>
719
- <react_native_1.Text style={[styles_1.default.headerSubTitle, { fontSize: isNarrow ? 10 : 11 }]}>
720
- {selectedCrash.deviceInfo.platform.toUpperCase()}
721
- </react_native_1.Text>
722
- </>)}
723
- </react_native_1.ScrollView>
724
- </react_native_1.View>) : null}
725
- </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>)}
726
987
 
727
- <react_native_1.View style={[
988
+ <react_native_1.View style={[
728
989
  styles_1.default.headerRight,
729
990
  {
730
991
  flexDirection: 'row',
@@ -734,7 +995,7 @@ const InspectorHeader = react_1.default.memo(() => {
734
995
  gap: isNarrow ? 5 : 7,
735
996
  },
736
997
  ]}>
737
- {isSettingsView && (<TouchableScale_1.default onPress={() => {
998
+ {isSettingsView && (<TouchableScale_1.default onPress={() => {
738
999
  react_native_1.Alert.alert('Reset All Settings', 'This restores all module visibility and UI preferences to defaults. Continue?', [
739
1000
  { text: 'Cancel', style: 'cancel' },
740
1001
  {
@@ -751,19 +1012,10 @@ const InspectorHeader = react_1.default.memo(() => {
751
1012
  borderRadius: isNarrow ? 6 : 7,
752
1013
  },
753
1014
  ]}>
754
- <NetworkIcons_1.ResetIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
755
- </TouchableScale_1.default>)}
1015
+ <NetworkIcons_1.ResetIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
1016
+ </TouchableScale_1.default>)}
756
1017
 
757
- {!isAnySelected && (<TouchableScale_1.default onPress={() => {
758
- react_native_1.Alert.alert('Clear Everything', 'This clears all tabs — APIs, Logs, Analytics, Redux timeline and Crash history. Continue?', [
759
- { text: 'Cancel', style: 'cancel' },
760
- {
761
- text: 'Clear All',
762
- onPress: runClearAllWithAnimation,
763
- style: 'destructive',
764
- },
765
- ]);
766
- }} hitSlop={15} style={[
1018
+ {!isAnySelected && (<TouchableScale_1.default accessible={true} accessibilityRole="button" accessibilityLabel="Settings" onPress={() => setSettingsPage('main')} hitSlop={15} style={[
767
1019
  styles_1.default.closeButtonSquare,
768
1020
  {
769
1021
  width: buttonSize,
@@ -771,7 +1023,112 @@ const InspectorHeader = react_1.default.memo(() => {
771
1023
  borderRadius: isNarrow ? 6 : 7,
772
1024
  },
773
1025
  ]}>
774
- <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={{
775
1132
  transform: [
776
1133
  {
777
1134
  rotate: clearAnim.interpolate({
@@ -787,38 +1144,71 @@ const InspectorHeader = react_1.default.memo(() => {
787
1144
  },
788
1145
  ],
789
1146
  }}>
790
- <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
791
- </react_native_1.Animated.View>
792
- </TouchableScale_1.default>)}
793
-
794
- {!isAnySelected && (<TouchableScale_1.default onPress={() => setSettingsPage('main')} hitSlop={15} style={[
795
- styles_1.default.closeButtonSquare,
796
- {
797
- width: buttonSize,
798
- height: buttonSize,
799
- borderRadius: isNarrow ? 6 : 7,
800
- },
801
- ]}>
802
- <NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.white} size={isNarrow ? 12 : 14}/>
803
- </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>
804
1157
 
805
- <react_native_1.TouchableOpacity onPress={closeModal} hitSlop={{ top: 12, bottom: 12, left: 12, right: 12 }} activeOpacity={0.6} style={[
806
- styles_1.default.closeButtonSquare,
807
- {
808
- width: buttonSize,
809
- height: buttonSize,
810
- borderRadius: isNarrow ? 6 : 7,
811
- },
812
- ]}>
813
- <NetworkIcons_1.CloseWhite size={isNarrow ? 12 : 14}/>
814
- </react_native_1.TouchableOpacity>
815
- </react_native_1.View>
1158
+
1159
+ <TouchableScale_1.default onPress={() => {
1160
+ setSettingsActiveSubTab('about');
1161
+ setSettingsPage('main');
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>)}
816
1184
  </react_native_1.View>
817
1185
  </react_native_1.View>
818
- </react_native_linear_gradient_1.default>
819
1186
 
820
-
821
- <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
+ }}/>
822
1212
  </>);
823
1213
  });
824
1214
  exports.default = InspectorHeader;