react-native-inapp-inspector 2.3.13 → 2.3.15

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 (284) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  3. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  4. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  5. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  6. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  7. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  8. package/android/.gradle/8.9/gc.properties +0 -0
  9. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  10. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  11. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  12. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  13. package/android/.gradle/9.2.0/gc.properties +0 -0
  14. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  15. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  16. package/android/.gradle/vcs-1/gc.properties +0 -0
  17. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/results.bin +1 -0
  18. package/android/build/.transforms/6683d6eeaa3e1dfa689c3385111a0386/transformed/classes/classes_dex/classes.dex +0 -0
  19. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/results.bin +1 -0
  20. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/BuildConfig.dex +0 -0
  21. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView$iconView$1.dex +0 -0
  22. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/InAppInspectorFloatingView.dex +0 -0
  23. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NativeNetworkInspectorSpec.dex +0 -0
  24. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$Companion.dex +0 -0
  25. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$frameCallback$1.dex +0 -0
  26. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule$shakeListener$1.dex +0 -0
  27. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorModule.dex +0 -0
  28. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/inappinspector/NetworkInspectorPackage.dex +0 -0
  29. package/android/build/.transforms/9d2a3e5e0f0ea07cafb0c0bf290630ee/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin +0 -0
  30. package/android/build/generated/source/buildConfig/debug/com/inappinspector/BuildConfig.java +10 -0
  31. package/android/build/generated/source/codegen/java/com/inappinspector/NativeNetworkInspectorSpec.java +104 -0
  32. package/android/build/generated/source/codegen/jni/CMakeLists.txt +28 -0
  33. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec-generated.cpp +128 -0
  34. package/android/build/generated/source/codegen/jni/RNInAppInspectorSpec.h +31 -0
  35. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.cpp +22 -0
  36. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ComponentDescriptors.h +24 -0
  37. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.cpp +16 -0
  38. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/EventEmitters.h +17 -0
  39. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.cpp +19 -0
  40. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/Props.h +18 -0
  41. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/RNInAppInspectorSpecJSI.h +177 -0
  42. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.cpp +17 -0
  43. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/ShadowNodes.h +23 -0
  44. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.cpp +16 -0
  45. package/android/build/generated/source/codegen/jni/react/renderer/components/RNInAppInspectorSpec/States.h +20 -0
  46. package/android/build/generated/source/codegen/schema.json +1 -0
  47. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +7 -0
  48. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +18 -0
  49. package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
  50. package/android/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +6 -0
  51. package/android/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +1 -0
  52. package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
  53. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  54. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  55. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +0 -0
  56. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
  57. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  58. package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
  59. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  60. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  61. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  62. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  63. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/BuildConfig.class +0 -0
  64. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  65. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +2 -0
  66. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +7 -0
  67. package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-react-native-inapp-inspector.jar +0 -0
  68. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +7 -0
  69. package/android/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +1 -0
  70. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +1 -0
  71. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  72. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/BuildConfig.class +0 -0
  73. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  74. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  75. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NativeNetworkInspectorSpec.class +0 -0
  76. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  77. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  78. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  79. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorModule.class +0 -0
  80. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/inappinspector/NetworkInspectorPackage.class +0 -0
  81. package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
  82. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +1 -0
  83. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  84. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  85. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  86. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  87. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  88. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  89. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  90. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  91. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  92. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  93. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  94. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  95. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  96. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  97. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  98. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  99. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  100. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  101. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  102. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  103. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  104. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  105. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  106. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  107. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  108. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  109. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  110. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  111. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  112. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  113. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  114. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  115. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  116. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  117. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  118. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  119. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  120. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  121. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  122. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  123. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  124. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  125. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  126. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  127. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  128. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  129. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  130. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  131. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  132. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  133. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  134. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  135. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  136. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  137. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  138. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  139. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  140. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  141. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  142. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  143. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  144. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  145. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  146. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +2 -0
  147. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  148. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  149. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  150. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  151. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  152. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  153. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  154. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  155. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  156. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  157. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  158. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  159. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  160. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  161. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  162. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  163. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  164. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  165. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  166. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  167. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  168. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  169. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  170. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  171. package/android/build/outputs/aar/react-native-inapp-inspector-debug.aar +0 -0
  172. package/android/build/outputs/logs/manifest-merger-debug-report.txt +17 -0
  173. package/android/build/reports/problems/problems-report.html +659 -0
  174. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  175. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-inapp-inspector_debug.kotlin_module +0 -0
  176. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView$iconView$1.class +0 -0
  177. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/InAppInspectorFloatingView.class +0 -0
  178. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$Companion.class +0 -0
  179. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$frameCallback$1.class +0 -0
  180. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule$shakeListener$1.class +0 -0
  181. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorModule.class +0 -0
  182. package/android/build/tmp/kotlin-classes/debug/com/inappinspector/NetworkInspectorPackage.class +0 -0
  183. package/bin/cli.js +6 -0
  184. package/dist/commonjs/components/AnimatedEntrance.js +3 -3
  185. package/dist/commonjs/components/ConsoleLogCard.js +174 -100
  186. package/dist/commonjs/components/Inspector/ConsoleTab.js +25 -16
  187. package/dist/commonjs/components/Inspector/CrashTab.js +19 -5
  188. package/dist/commonjs/components/Inspector/DebuggingTab.js +741 -438
  189. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +198 -98
  190. package/dist/commonjs/components/Inspector/InspectorHeader.js +2 -2
  191. package/dist/commonjs/components/Inspector/MainScreen.js +58 -55
  192. package/dist/commonjs/components/Inspector/NetworkTab.js +1 -335
  193. package/dist/commonjs/components/Inspector/PerformanceTab.js +32 -6
  194. package/dist/commonjs/components/Inspector/ReduxTab.js +3 -1
  195. package/dist/commonjs/components/Inspector/SettingsPanel.js +6 -4
  196. package/dist/commonjs/components/Inspector/StorageTab.js +23 -5
  197. package/dist/commonjs/components/Inspector/TabBar.js +6 -2
  198. package/dist/commonjs/components/JsonViewer.js +14 -2
  199. package/dist/commonjs/components/LogCard.js +428 -227
  200. package/dist/commonjs/components/QRCodeView.js +1 -1
  201. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  202. package/dist/commonjs/constants/telemetryConfig.js +3 -3
  203. package/dist/commonjs/constants/version.d.ts +1 -1
  204. package/dist/commonjs/constants/version.js +1 -1
  205. package/dist/commonjs/customHooks/analyticsLogger.js +1 -1
  206. package/dist/commonjs/customHooks/consoleLogger.js +34 -2
  207. package/dist/commonjs/customHooks/crashHandler.js +1 -1
  208. package/dist/commonjs/customHooks/networkLogger.js +184 -26
  209. package/dist/commonjs/helpers/index.d.ts +1 -0
  210. package/dist/commonjs/helpers/index.js +11 -1
  211. package/dist/commonjs/helpers/qrGenerator.d.ts +1 -0
  212. package/dist/commonjs/helpers/qrGenerator.js +356 -33
  213. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  214. package/dist/commonjs/helpers/searchQueryParser.js +37 -291
  215. package/dist/commonjs/index.d.ts +1 -0
  216. package/dist/commonjs/index.js +146 -30
  217. package/dist/commonjs/metro.d.ts +25 -0
  218. package/dist/commonjs/metro.js +478 -0
  219. package/dist/esm/components/AnimatedEntrance.js +3 -3
  220. package/dist/esm/components/ConsoleLogCard.js +141 -100
  221. package/dist/esm/components/Inspector/ConsoleTab.js +25 -16
  222. package/dist/esm/components/Inspector/CrashTab.js +19 -5
  223. package/dist/esm/components/Inspector/DebuggingTab.js +744 -441
  224. package/dist/esm/components/Inspector/DeviceInfoTab.js +198 -98
  225. package/dist/esm/components/Inspector/InspectorHeader.js +3 -3
  226. package/dist/esm/components/Inspector/MainScreen.js +58 -55
  227. package/dist/esm/components/Inspector/NetworkTab.js +2 -336
  228. package/dist/esm/components/Inspector/PerformanceTab.js +32 -6
  229. package/dist/esm/components/Inspector/ReduxTab.js +3 -1
  230. package/dist/esm/components/Inspector/SettingsPanel.js +7 -5
  231. package/dist/esm/components/Inspector/StorageTab.js +23 -5
  232. package/dist/esm/components/Inspector/TabBar.js +7 -3
  233. package/dist/esm/components/JsonViewer.js +14 -2
  234. package/dist/esm/components/LogCard.js +422 -221
  235. package/dist/esm/components/QRCodeView.js +1 -1
  236. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  237. package/dist/esm/constants/telemetryConfig.js +3 -3
  238. package/dist/esm/constants/version.d.ts +1 -1
  239. package/dist/esm/constants/version.js +1 -1
  240. package/dist/esm/customHooks/analyticsLogger.js +1 -1
  241. package/dist/esm/customHooks/consoleLogger.js +34 -2
  242. package/dist/esm/customHooks/crashHandler.js +1 -1
  243. package/dist/esm/customHooks/networkLogger.js +184 -26
  244. package/dist/esm/helpers/index.d.ts +1 -0
  245. package/dist/esm/helpers/index.js +9 -0
  246. package/dist/esm/helpers/qrGenerator.d.ts +1 -0
  247. package/dist/esm/helpers/qrGenerator.js +356 -30
  248. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  249. package/dist/esm/helpers/searchQueryParser.js +37 -291
  250. package/dist/esm/index.d.ts +1 -0
  251. package/dist/esm/index.js +144 -29
  252. package/dist/esm/metro.d.ts +25 -0
  253. package/dist/esm/metro.js +469 -0
  254. package/metro.d.ts +1 -0
  255. package/metro.js +1 -0
  256. package/package.json +16 -5
  257. package/src/components/AnimatedEntrance.tsx +3 -3
  258. package/src/components/ConsoleLogCard.tsx +154 -103
  259. package/src/components/Inspector/ConsoleTab.tsx +27 -18
  260. package/src/components/Inspector/CrashTab.tsx +19 -5
  261. package/src/components/Inspector/DebuggingTab.tsx +842 -514
  262. package/src/components/Inspector/DeviceInfoTab.tsx +224 -102
  263. package/src/components/Inspector/InspectorHeader.tsx +5 -3
  264. package/src/components/Inspector/MainScreen.tsx +6 -4
  265. package/src/components/Inspector/NetworkTab.tsx +1 -402
  266. package/src/components/Inspector/PerformanceTab.tsx +36 -7
  267. package/src/components/Inspector/ReduxTab.tsx +9 -1
  268. package/src/components/Inspector/SettingsPanel.tsx +85 -75
  269. package/src/components/Inspector/StorageTab.tsx +27 -7
  270. package/src/components/Inspector/TabBar.tsx +16 -2
  271. package/src/components/JsonViewer.tsx +15 -2
  272. package/src/components/LogCard.tsx +528 -339
  273. package/src/components/QRCodeView.tsx +2 -2
  274. package/src/constants/telemetryConfig.ts +5 -3
  275. package/src/constants/version.ts +1 -1
  276. package/src/customHooks/analyticsLogger.ts +1 -1
  277. package/src/customHooks/consoleLogger.ts +36 -3
  278. package/src/customHooks/crashHandler.ts +1 -1
  279. package/src/customHooks/networkLogger.ts +214 -26
  280. package/src/helpers/index.ts +15 -0
  281. package/src/helpers/qrGenerator.ts +418 -37
  282. package/src/helpers/searchQueryParser.ts +40 -285
  283. package/src/index.tsx +337 -214
  284. package/src/metro.ts +598 -0
@@ -1,16 +1,17 @@
1
- import React, { useState, useEffect, useMemo, useCallback } from 'react';
2
- import { View, Text, ScrollView, StyleSheet, TextInput, TouchableOpacity, NativeModules, Share, } from 'react-native';
1
+ import React, { useState, useEffect, useMemo, useCallback, useRef } from 'react';
2
+ import { View, Text, ScrollView, StyleSheet, NativeModules, Share, TouchableOpacity, ActivityIndicator, Animated, Platform, } from 'react-native';
3
3
  import { AppColors } from '../../styles/AppColors';
4
4
  import { AppFonts } from '../../styles/AppFonts';
5
5
  import QRCodeView from '../QRCodeView';
6
6
  import TouchableScale from '../TouchableScale';
7
- import { copyToClipboard } from '../../helpers';
8
7
  import { showToast } from '../../helpers/toast';
9
- import { useTranslation } from '../../i18n';
10
- import { BoltIcon, SmartphoneIcon, PackageIcon, RepeatIcon, InfoCircleIcon, } from '../NetworkIcons';
11
- const COMMON_PORTS = [8081, 8082, 8083, 19000];
8
+ import { triggerNativeHaptic } from '../../native/NativeInspector';
9
+ import { InfoCircleIcon, CheckIcon, BoltIcon, CircleXIcon, SparkleIcon, AndroidIcon, RepeatIcon, } from '../NetworkIcons';
10
+ import Svg, { Path } from 'react-native-svg';
11
+ const TerminalConsoleIcon = ({ color = AppColors.purple, size = 13 }) => (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
12
+ <Path d="M4 17l6-6-6-6M12 19h8" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
13
+ </Svg>);
12
14
  export const DebuggingTab = () => {
13
- const { t } = useTranslation();
14
15
  const detectedConfig = useMemo(() => {
15
16
  const scriptURL = NativeModules.SourceCode?.scriptURL || '';
16
17
  let host = 'localhost';
@@ -35,621 +36,923 @@ export const DebuggingTab = () => {
35
36
  return { host, port, scriptURL };
36
37
  }, []);
37
38
  const [hostIp, setHostIp] = useState(() => {
38
- if (detectedConfig.host === 'localhost' ||
39
- detectedConfig.host === '127.0.0.1' ||
40
- detectedConfig.host === '10.0.2.2') {
41
- return '192.168.1.15';
39
+ if (detectedConfig.host &&
40
+ detectedConfig.host !== 'localhost' &&
41
+ detectedConfig.host !== '127.0.0.1' &&
42
+ detectedConfig.host !== '10.0.2.2') {
43
+ return detectedConfig.host;
42
44
  }
43
- return detectedConfig.host;
45
+ return '192.168.1.2';
44
46
  });
45
- const [selectedPort, setSelectedPort] = useState(detectedConfig.port);
46
- const [apkPath, setApkPath] = useState('app-debug.apk');
47
- const [activeQrTab, setActiveQrTab] = useState('metro');
48
- const [isAutoDetecting, setIsAutoDetecting] = useState(false);
49
- const [portsStatus, setPortsStatus] = useState({});
50
- const probePorts = useCallback(async () => {
51
- setIsAutoDetecting(true);
52
- const results = {};
53
- for (const p of COMMON_PORTS) {
54
- results[p] = { port: p, status: 'checking' };
47
+ const [port, setPort] = useState(detectedConfig.port || 8083);
48
+ const [apkFileName, setApkFileName] = useState('app-debug.apk');
49
+ const [apkSizeMb, setApkSizeMb] = useState(null);
50
+ const [selectedScheme, setSelectedScheme] = useState('assembleRelease');
51
+ const [isCleanBuild, setIsCleanBuild] = useState(true);
52
+ const [buildStatus, setBuildStatus] = useState({
53
+ status: 'idle',
54
+ scheme: 'assembleRelease',
55
+ clean: true,
56
+ progress: 0,
57
+ currentTask: '',
58
+ error: null,
59
+ apkName: null,
60
+ apkSize: null,
61
+ });
62
+ const pollingRef = useRef(null);
63
+ const progressAnim = useRef(new Animated.Value(0)).current;
64
+ const [showVerboseLogs, setShowVerboseLogs] = useState(true);
65
+ const verboseScrollRef = useRef(null);
66
+ useEffect(() => {
67
+ Animated.timing(progressAnim, {
68
+ toValue: Math.max(0, Math.min(100, buildStatus.progress)),
69
+ duration: 350,
70
+ useNativeDriver: false,
71
+ }).start();
72
+ }, [buildStatus.progress, progressAnim]);
73
+ useEffect(() => {
74
+ if (buildStatus.logs && buildStatus.logs.length > 0) {
75
+ setTimeout(() => {
76
+ verboseScrollRef.current?.scrollToEnd({ animated: true });
77
+ }, 50);
55
78
  }
56
- setPortsStatus({ ...results });
57
- let foundActivePort = null;
58
- for (const p of COMMON_PORTS) {
59
- const startTime = Date.now();
60
- try {
61
- const controller = new AbortController();
62
- const timeoutId = setTimeout(() => controller.abort(), 1500);
63
- const res = await fetch(`http://localhost:${p}/status`, {
64
- signal: controller.signal,
65
- });
66
- clearTimeout(timeoutId);
67
- const text = await res.text();
68
- const latency = Date.now() - startTime;
69
- if (res.ok && text.includes('packager-status:running')) {
70
- results[p] = { port: p, status: 'active', latencyMs: latency };
71
- if (!foundActivePort)
72
- foundActivePort = p;
79
+ }, [buildStatus.logs]);
80
+ const fetchMetroTelemetry = useCallback(async () => {
81
+ const hostsToTry = Array.from(new Set([detectedConfig.host, '10.0.2.2', 'localhost', '127.0.0.1'].filter(Boolean)));
82
+ const portsToTry = Array.from(new Set([detectedConfig.port, 8083, 8081, 8082].filter(Boolean)));
83
+ for (const h of hostsToTry) {
84
+ for (const p of portsToTry) {
85
+ try {
86
+ const controller = new AbortController();
87
+ const timeoutId = setTimeout(() => controller.abort(), 1200);
88
+ const res = await fetch(`http://${h}:${p}/__inapp_inspector/apk-info`, {
89
+ signal: controller.signal,
90
+ });
91
+ clearTimeout(timeoutId);
92
+ if (res.ok) {
93
+ const data = await res.json();
94
+ if (data.hostIp &&
95
+ data.hostIp !== '127.0.0.1' &&
96
+ data.hostIp !== 'localhost' &&
97
+ data.hostIp !== '10.0.2.2') {
98
+ setHostIp(data.hostIp);
99
+ }
100
+ if (data.port) {
101
+ setPort(data.port);
102
+ }
103
+ if (data.apkName) {
104
+ setApkFileName(data.apkName);
105
+ }
106
+ if (data.apkSize) {
107
+ setApkSizeMb((data.apkSize / (1024 * 1024)).toFixed(1));
108
+ }
109
+ return;
110
+ }
73
111
  }
74
- else {
75
- results[p] = { port: p, status: 'inactive' };
112
+ catch { }
113
+ }
114
+ }
115
+ }, [detectedConfig.host, detectedConfig.port]);
116
+ useEffect(() => {
117
+ fetchMetroTelemetry();
118
+ }, [fetchMetroTelemetry]);
119
+ useEffect(() => {
120
+ return () => {
121
+ if (pollingRef.current) {
122
+ clearInterval(pollingRef.current);
123
+ }
124
+ };
125
+ }, []);
126
+ const pollBuildStatus = useCallback(() => {
127
+ if (pollingRef.current)
128
+ clearInterval(pollingRef.current);
129
+ const targetHost = detectedConfig.host || '10.0.2.2';
130
+ pollingRef.current = setInterval(async () => {
131
+ try {
132
+ const res = await fetch(`http://${targetHost}:${port}/__inapp_inspector/build-status`);
133
+ if (res.ok) {
134
+ const data = await res.json();
135
+ setBuildStatus(data);
136
+ if (data.status === 'completed') {
137
+ if (pollingRef.current)
138
+ clearInterval(pollingRef.current);
139
+ triggerNativeHaptic('success');
140
+ showToast('✓ APK Build Generated Successfully!');
141
+ if (data.apkSize) {
142
+ setApkSizeMb((data.apkSize / (1024 * 1024)).toFixed(1));
143
+ }
144
+ if (data.apkName) {
145
+ setApkFileName(data.apkName);
146
+ }
147
+ fetchMetroTelemetry();
148
+ }
149
+ else if (data.status === 'failed') {
150
+ if (pollingRef.current)
151
+ clearInterval(pollingRef.current);
152
+ triggerNativeHaptic('error');
153
+ showToast('✕ Build Failed: ' + (data.error || 'Gradle error'));
154
+ }
76
155
  }
77
156
  }
78
- catch {
79
- results[p] = { port: p, status: 'inactive' };
157
+ catch { }
158
+ }, 1000);
159
+ }, [detectedConfig.host, port, fetchMetroTelemetry]);
160
+ const handleStartBuild = async () => {
161
+ triggerNativeHaptic('medium');
162
+ setBuildStatus({
163
+ status: 'running',
164
+ scheme: selectedScheme,
165
+ clean: isCleanBuild,
166
+ progress: 5,
167
+ currentTask: isCleanBuild ? 'Cleaning build cache...' : 'Initializing build...',
168
+ error: null,
169
+ apkName: null,
170
+ apkSize: null,
171
+ });
172
+ const hostsToTry = Array.from(new Set([detectedConfig.host, '10.0.2.2', 'localhost', '127.0.0.1'].filter(Boolean)));
173
+ const portsToTry = Array.from(new Set([port, 8083, 8081, 8082].filter(Boolean)));
174
+ let buildTriggered = false;
175
+ for (const h of hostsToTry) {
176
+ for (const p of portsToTry) {
177
+ try {
178
+ const controller = new AbortController();
179
+ const timeoutId = setTimeout(() => controller.abort(), 2000);
180
+ const res = await fetch(`http://${h}:${p}/__inapp_inspector/build-apk?scheme=${selectedScheme}&clean=${isCleanBuild}`, { signal: controller.signal });
181
+ clearTimeout(timeoutId);
182
+ if (res.ok) {
183
+ buildTriggered = true;
184
+ pollBuildStatus();
185
+ return;
186
+ }
187
+ }
188
+ catch { }
80
189
  }
81
- setPortsStatus({ ...results });
82
190
  }
83
- if (foundActivePort) {
84
- setSelectedPort(foundActivePort);
85
- showToast(`Detected Metro running on Port ${foundActivePort}!`);
191
+ if (!buildTriggered) {
192
+ setBuildStatus(prev => ({
193
+ ...prev,
194
+ status: 'failed',
195
+ error: 'Cannot reach build server. Ensure npm start or npm run serve-apk is running on host.',
196
+ }));
86
197
  }
87
- setIsAutoDetecting(false);
88
- }, []);
89
- useEffect(() => {
90
- probePorts();
91
- }, [probePorts]);
92
- const metroBundleUrl = `http://${hostIp}:${selectedPort}/index.bundle?platform=android&dev=true`;
93
- const directServerUrl = `http://${hostIp}:${selectedPort}`;
94
- const apkDownloadUrl = `http://${hostIp}:${selectedPort}/${apkPath}`;
95
- const devSettingsHost = `${hostIp}:${selectedPort}`;
96
- const currentQrValue = useMemo(() => {
97
- if (activeQrTab === 'apk')
98
- return apkDownloadUrl;
99
- if (activeQrTab === 'host')
100
- return devSettingsHost;
101
- return directServerUrl;
102
- }, [activeQrTab, apkDownloadUrl, devSettingsHost, directServerUrl]);
103
- const activePortInfo = portsStatus[selectedPort];
104
- return (<ScrollView style={styles.container} contentContainerStyle={styles.content} showsVerticalScrollIndicator={false}>
198
+ };
199
+ const handleStopBuild = async () => {
200
+ triggerNativeHaptic('warning');
201
+ if (pollingRef.current)
202
+ clearInterval(pollingRef.current);
203
+ const hostsToTry = Array.from(new Set([detectedConfig.host, '10.0.2.2', 'localhost', '127.0.0.1'].filter(Boolean)));
204
+ const portsToTry = Array.from(new Set([port, 8083, 8081, 8082].filter(Boolean)));
205
+ for (const h of hostsToTry) {
206
+ for (const p of portsToTry) {
207
+ try {
208
+ const controller = new AbortController();
209
+ const timeoutId = setTimeout(() => controller.abort(), 1500);
210
+ await fetch(`http://${h}:${p}/__inapp_inspector/stop-build`, {
211
+ signal: controller.signal,
212
+ });
213
+ clearTimeout(timeoutId);
214
+ }
215
+ catch { }
216
+ }
217
+ }
218
+ setBuildStatus(prev => ({
219
+ ...prev,
220
+ status: 'idle',
221
+ currentTask: 'Build cancelled by user',
222
+ logs: [...(prev.logs || []), '🛑 Build cancelled by user.'],
223
+ }));
224
+ showToast('Build cancelled');
225
+ };
226
+ const apkDownloadUrl = `http://${hostIp}:${port}/${apkFileName.replace(/^\/+/, '')}`;
227
+ const handleShare = () => {
228
+ triggerNativeHaptic('light');
229
+ Share.share({
230
+ message: apkDownloadUrl,
231
+ title: 'Install Android APK',
232
+ });
233
+ };
234
+ const isBuilding = buildStatus.status === 'running';
235
+ return (<ScrollView style={styles.scrollArea} contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={false}>
105
236
 
106
- <View style={styles.serverCard}>
107
- <View style={styles.serverCardTop}>
108
- <View style={styles.serverStatusLeft}>
109
- <View style={[
110
- styles.statusDot,
111
- {
112
- backgroundColor: activePortInfo?.status === 'active'
113
- ? AppColors.greenColor
114
- : activePortInfo?.status === 'checking'
115
- ? AppColors.warningIconGold
116
- : AppColors.errorColor,
117
- },
118
- ]}/>
119
- <View>
120
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
121
- <Text style={styles.serverTitle}>Metro Dev Server</Text>
122
- <View style={styles.portPill}>
123
- <Text style={styles.portPillText}>Port {selectedPort}</Text>
124
- </View>
125
- </View>
126
- <Text style={styles.serverSubtitle}>
127
- {activePortInfo?.status === 'active'
128
- ? `Active & Bundling (${activePortInfo.latencyMs}ms)`
129
- : activePortInfo?.status === 'checking'
130
- ? 'Probing Metro Ports...'
131
- : 'Standby / Select active port'}
132
- </Text>
133
- </View>
237
+ <View style={styles.heroCard}>
238
+ <View style={styles.heroHeader}>
239
+ <View style={styles.heroIconWrap}>
240
+ <AndroidIcon size={20} color={AppColors.white}/>
241
+ </View>
242
+ <View style={{ flex: 1, minWidth: 0 }}>
243
+ <Text style={styles.heroTitle} numberOfLines={1}>
244
+ Multi-Device APK Installer
245
+ </Text>
246
+ <Text style={styles.heroSubtitle} numberOfLines={1}>
247
+ Scan QR code with another Android device to download
248
+ </Text>
249
+ </View>
250
+ <View style={styles.heroBadge}>
251
+ <View style={styles.pulseDot}/>
252
+ <Text style={styles.heroBadgeText}>Live Metro</Text>
134
253
  </View>
135
-
136
- <TouchableScale onPress={probePorts} style={styles.scanBtn} hitSlop={8}>
137
- <RepeatIcon size={12} color={AppColors.purple}/>
138
- <Text style={styles.scanBtnText}>Re-scan</Text>
139
- </TouchableScale>
140
254
  </View>
141
255
 
142
256
 
143
- <View style={styles.portsRow}>
144
- {COMMON_PORTS.map(p => {
145
- const isSelected = selectedPort === p;
146
- const pInfo = portsStatus[p];
147
- const isActive = pInfo?.status === 'active';
148
- return (<TouchableOpacity key={p} activeOpacity={0.7} onPress={() => setSelectedPort(p)} style={[
149
- styles.portChip,
150
- isSelected && styles.portChipSelected,
151
- isActive && { borderColor: AppColors.greenColor },
152
- ]}>
153
- <View style={[
154
- styles.portMiniDot,
155
- {
156
- backgroundColor: isActive
157
- ? AppColors.greenColor
158
- : AppColors.grayTextWeak,
159
- },
160
- ]}/>
161
- <Text style={[
162
- styles.portChipText,
163
- isSelected && styles.portChipTextSelected,
164
- ]}>
165
- {p}
166
- </Text>
167
- {isActive && (<View style={styles.liveBadge}>
168
- <Text style={styles.liveBadgeText}>LIVE</Text>
169
- </View>)}
170
- </TouchableOpacity>);
171
- })}
257
+ <View style={styles.heroMetricsStrip}>
258
+ <View style={styles.heroMetricItem}>
259
+ <Text style={styles.heroMetricLabel}>HOST IP</Text>
260
+ <Text style={styles.heroMetricValue} numberOfLines={1}>
261
+ {hostIp}
262
+ </Text>
263
+ </View>
264
+ <View style={styles.heroMetricDivider}/>
265
+ <View style={styles.heroMetricItem}>
266
+ <Text style={styles.heroMetricLabel}>PORT</Text>
267
+ <Text style={styles.heroMetricValue}>{port}</Text>
268
+ </View>
269
+ <View style={styles.heroMetricDivider}/>
270
+ <View style={styles.heroMetricItem}>
271
+ <Text style={styles.heroMetricLabel}>APK SIZE</Text>
272
+ <Text style={[
273
+ styles.heroMetricValue,
274
+ { color: apkSizeMb ? AppColors.emerald500 : AppColors.grayTextWeak },
275
+ ]}>
276
+ {apkSizeMb ? `${apkSizeMb} MB` : 'Detected'}
277
+ </Text>
278
+ </View>
279
+ <View style={styles.heroMetricDivider}/>
280
+ <View style={styles.heroMetricItem}>
281
+ <Text style={styles.heroMetricLabel}>STATUS</Text>
282
+ <Text style={[
283
+ styles.heroMetricValue,
284
+ { color: AppColors.emerald500 },
285
+ ]}>
286
+ Ready
287
+ </Text>
288
+ </View>
172
289
  </View>
173
290
  </View>
174
291
 
175
292
 
176
- <View style={styles.card}>
177
- <View style={styles.cardHeader}>
178
- <Text style={styles.cardTitle}>HOST IP & BUNDLE LOCATION</Text>
179
- <TouchableOpacity onPress={() => {
180
- if (detectedConfig.host !== 'localhost' &&
181
- detectedConfig.host !== '127.0.0.1' &&
182
- detectedConfig.host !== '10.0.2.2') {
183
- setHostIp(detectedConfig.host);
184
- showToast(`Reset to detected IP: ${detectedConfig.host}`);
185
- }
186
- }}>
187
- <Text style={styles.headerActionText}>Reset to Detected</Text>
293
+ <View style={styles.sectionCard}>
294
+ <View style={styles.sectionHeaderRow}>
295
+ <Text style={styles.sectionTitle}>QR CODE & DIRECT DOWNLOAD</Text>
296
+ <TouchableOpacity activeOpacity={0.7} onPress={fetchMetroTelemetry} style={styles.refreshBtn}>
297
+ <RepeatIcon size={12} color={AppColors.purple}/>
298
+ <Text style={styles.refreshBtnText}>Refresh</Text>
188
299
  </TouchableOpacity>
189
300
  </View>
190
301
 
191
- <View style={styles.inputContainer}>
192
- <Text style={styles.inputPrefix}>http://</Text>
193
- <TextInput style={styles.input} value={hostIp} onChangeText={setHostIp} placeholder="192.168.1.15" placeholderTextColor={AppColors.grayTextWeak} autoCapitalize="none" autoCorrect={false}/>
194
- <Text style={styles.inputSuffix}>:{selectedPort}</Text>
195
- </View>
196
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, marginTop: 6 }}>
197
- <InfoCircleIcon size={13} color={AppColors.grayTextWeak}/>
198
- <Text style={[styles.inputHint, { marginTop: 0, flex: 1 }]}>
199
- Ensure your physical Android device and Mac are connected to the same Wi-Fi network.
200
- </Text>
302
+
303
+ <View style={styles.qrCenteredWrapper}>
304
+ <View style={styles.qrInnerFrame}>
305
+ <QRCodeView value={apkDownloadUrl} size={235} color={AppColors.primaryBlack} backgroundColor={AppColors.white}/>
306
+ </View>
201
307
  </View>
202
308
  </View>
203
309
 
204
310
 
205
- <View style={styles.qrCard}>
206
-
207
- <View style={styles.qrTabsRow}>
208
- <TouchableOpacity activeOpacity={0.7} onPress={() => setActiveQrTab('metro')} style={[
209
- styles.qrTab,
210
- activeQrTab === 'metro' && styles.qrTabActive,
211
- ]}>
212
- <BoltIcon size={13} color={activeQrTab === 'metro' ? AppColors.white : AppColors.grayText}/>
213
- <Text style={[
214
- styles.qrTabText,
215
- activeQrTab === 'metro' && styles.qrTabTextActive,
216
- ]}>
217
- Metro Live Reload
218
- </Text>
219
- </TouchableOpacity>
311
+ <View style={styles.sectionCard}>
312
+ <View style={styles.sectionHeaderRow}>
313
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
314
+ <BoltIcon size={13} color={AppColors.purple}/>
315
+ <Text style={styles.sectionTitle}>BUILD GENERATOR (GRADLE)</Text>
316
+ </View>
317
+ {buildStatus.status === 'completed' && (<View style={styles.completedBadge}>
318
+ <CheckIcon size={10} color={AppColors.emerald500}/>
319
+ <Text style={styles.completedBadgeText}>100% Ready</Text>
320
+ </View>)}
321
+ </View>
220
322
 
221
- <TouchableOpacity activeOpacity={0.7} onPress={() => setActiveQrTab('apk')} style={[
222
- styles.qrTab,
223
- activeQrTab === 'apk' && styles.qrTabActive,
323
+
324
+ <View style={styles.subTabStrip}>
325
+ <TouchableOpacity disabled={isBuilding} activeOpacity={0.7} onPress={() => {
326
+ triggerNativeHaptic('light');
327
+ setSelectedScheme('assembleRelease');
328
+ }} style={[
329
+ styles.subTabItem,
330
+ selectedScheme === 'assembleRelease' && styles.subTabItemActive,
224
331
  ]}>
225
- <PackageIcon size={13} color={activeQrTab === 'apk' ? AppColors.white : AppColors.grayText}/>
226
332
  <Text style={[
227
- styles.qrTabText,
228
- activeQrTab === 'apk' && styles.qrTabTextActive,
333
+ styles.subTabText,
334
+ selectedScheme === 'assembleRelease' && styles.subTabTextActive,
229
335
  ]}>
230
- Install Debug APK
336
+ Release (assembleRelease)
231
337
  </Text>
232
338
  </TouchableOpacity>
233
339
 
234
- <TouchableOpacity activeOpacity={0.7} onPress={() => setActiveQrTab('host')} style={[
235
- styles.qrTab,
236
- activeQrTab === 'host' && styles.qrTabActive,
340
+ <TouchableOpacity disabled={isBuilding} activeOpacity={0.7} onPress={() => {
341
+ triggerNativeHaptic('light');
342
+ setSelectedScheme('assembleDebug');
343
+ }} style={[
344
+ styles.subTabItem,
345
+ selectedScheme === 'assembleDebug' && styles.subTabItemActive,
237
346
  ]}>
238
- <SmartphoneIcon size={13} color={activeQrTab === 'host' ? AppColors.white : AppColors.grayText}/>
239
347
  <Text style={[
240
- styles.qrTabText,
241
- activeQrTab === 'host' && styles.qrTabTextActive,
348
+ styles.subTabText,
349
+ selectedScheme === 'assembleDebug' && styles.subTabTextActive,
242
350
  ]}>
243
- Dev Host Info
351
+ 🛠 Debug (assembleDebug)
244
352
  </Text>
245
353
  </TouchableOpacity>
246
354
  </View>
247
355
 
248
356
 
249
- <View style={styles.qrWrapper}>
250
- <QRCodeView value={currentQrValue} size={190} color={AppColors.primaryBlack} backgroundColor={AppColors.white}/>
357
+ <TouchableOpacity disabled={isBuilding} activeOpacity={0.7} onPress={() => {
358
+ triggerNativeHaptic('light');
359
+ setIsCleanBuild(!isCleanBuild);
360
+ }} style={styles.cleanRow}>
361
+ <View style={[
362
+ styles.checkboxBox,
363
+ isCleanBuild && styles.checkboxBoxActive,
364
+ ]}>
365
+ {isCleanBuild && <CheckIcon size={11} color={AppColors.white}/>}
366
+ </View>
367
+ <Text style={styles.cleanLabel}>
368
+ Clean build cache <Text style={styles.cleanCode}>(./gradlew clean)</Text>
369
+ </Text>
370
+ </TouchableOpacity>
251
371
 
252
- <View style={styles.qrInfoBox}>
253
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, marginBottom: 2 }}>
254
- {activeQrTab === 'apk' ? (<PackageIcon size={14} color={AppColors.purple}/>) : activeQrTab === 'host' ? (<SmartphoneIcon size={14} color={AppColors.purple}/>) : (<BoltIcon size={14} color={AppColors.amber500}/>)}
255
- <Text style={styles.qrTargetTitle}>
256
- {activeQrTab === 'apk'
257
- ? 'Direct APK Download URL'
258
- : activeQrTab === 'host'
259
- ? 'Dev Settings Bundle Host'
260
- : 'Live Metro Fast-Refresh Endpoint'}
372
+
373
+ {isBuilding && (<View style={styles.progressContainer}>
374
+ <View style={styles.progressTopRow}>
375
+ <View style={styles.progressTaskGroup}>
376
+ <ActivityIndicator size="small" color={AppColors.purple}/>
377
+ <Text style={styles.progressTaskText} numberOfLines={1}>
378
+ {buildStatus.currentTask || 'Executing Gradle tasks...'}
379
+ </Text>
380
+ </View>
381
+ <Text style={styles.progressPercentageText}>
382
+ {buildStatus.progress}%
261
383
  </Text>
262
384
  </View>
263
- <Text style={styles.qrTargetUrl} numberOfLines={2} ellipsizeMode="middle">
264
- {currentQrValue}
265
- </Text>
266
- </View>
267
- </View>
268
385
 
269
-
270
- <View style={styles.qrActionsRow}>
271
- <TouchableScale onPress={() => copyToClipboard(currentQrValue, 'QR Link')} style={styles.actionBtn}>
272
- <Text style={styles.actionBtnText}>Copy Link</Text>
273
- </TouchableScale>
386
+
387
+ <View style={styles.progressBarTrack}>
388
+ <Animated.View style={[
389
+ styles.progressBarFill,
390
+ {
391
+ width: progressAnim.interpolate({
392
+ inputRange: [0, 100],
393
+ outputRange: ['5%', '100%'],
394
+ }),
395
+ },
396
+ ]}/>
397
+ </View>
398
+ </View>)}
274
399
 
275
- <TouchableScale onPress={() => {
276
- Share.share({
277
- message: currentQrValue,
278
- title: 'Metro Debug Link',
279
- });
280
- }} style={[styles.actionBtn, styles.actionBtnPrimary]}>
281
- <Text style={styles.actionBtnPrimaryText}>Share to Device</Text>
282
- </TouchableScale>
283
- </View>
284
- </View>
400
+
401
+ {buildStatus.status === 'failed' && (<View style={styles.errorContainer}>
402
+ <CircleXIcon size={13} color={AppColors.errorColor}/>
403
+ <Text style={styles.errorText} numberOfLines={2}>
404
+ {buildStatus.error || 'Build execution failed.'}
405
+ </Text>
406
+ </View>)}
285
407
 
286
-
287
- <View style={styles.guideCard}>
288
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, marginBottom: 12 }}>
289
- <SmartphoneIcon size={15} color={AppColors.primaryLight}/>
290
- <Text style={[styles.guideHeading, { marginBottom: 0 }]}>HOW TO CONNECT ANDROID DEVICE:</Text>
291
- </View>
408
+
409
+ {((buildStatus.logs && buildStatus.logs.length > 0) || isBuilding) && (<View style={styles.consoleContainer}>
410
+ <View style={styles.consoleHeaderRow}>
411
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
412
+ <TerminalConsoleIcon color="#38BDF8" size={12}/>
413
+ <Text style={styles.consoleHeaderTitle}>GRADLE VERBOSE OUTPUT</Text>
414
+ </View>
415
+ <TouchableOpacity activeOpacity={0.7} onPress={() => setShowVerboseLogs(!showVerboseLogs)} style={styles.consoleToggleBtn}>
416
+ <Text style={styles.consoleToggleText}>
417
+ {showVerboseLogs ? 'Hide Console' : 'Show Console'}
418
+ </Text>
419
+ </TouchableOpacity>
420
+ </View>
292
421
 
293
- <View style={styles.stepRow}>
294
- <View style={styles.stepNumberBadge}>
295
- <Text style={styles.stepNumberText}>1</Text>
296
- </View>
297
- <View style={{ flex: 1 }}>
298
- <Text style={styles.stepTitle}>Connect to Same Wi-Fi</Text>
299
- <Text style={styles.stepDesc}>
300
- Make sure your Android phone is connected to the same Wi-Fi router or Mac Mobile Hotspot.
301
- </Text>
302
- </View>
303
- </View>
422
+ {showVerboseLogs && (<ScrollView ref={verboseScrollRef} style={styles.consoleLogBox} contentContainerStyle={styles.consoleLogContent} nestedScrollEnabled showsVerticalScrollIndicator>
423
+ {buildStatus.logs && buildStatus.logs.length > 0 ? (buildStatus.logs.map((logLine, idx) => {
424
+ let logColor = '#94A3B8';
425
+ if (logLine.startsWith('> Task :'))
426
+ logColor = '#38BDF8';
427
+ else if (logLine.includes('BUILD SUCCESSFUL'))
428
+ logColor = '#4ADE80';
429
+ else if (logLine.includes('FAILURE') || logLine.includes('error:'))
430
+ logColor = '#F87171';
431
+ else if (logLine.includes('UP-TO-DATE'))
432
+ logColor = '#A78BFA';
433
+ return (<Text key={idx} style={[styles.consoleLogLine, { color: logColor }]}>
434
+ {logLine}
435
+ </Text>);
436
+ })) : (<Text style={styles.consoleLogPlaceholder}>
437
+ Waiting for Gradle daemon output...
438
+ </Text>)}
439
+ </ScrollView>)}
440
+ </View>)}
304
441
 
305
- <View style={styles.stepRow}>
306
- <View style={styles.stepNumberBadge}>
307
- <Text style={styles.stepNumberText}>2</Text>
308
- </View>
309
- <View style={{ flex: 1 }}>
310
- <Text style={styles.stepTitle}>Scan to Install / Connect</Text>
311
- <Text style={styles.stepDesc}>
312
- Open Android Camera or browser, scan the QR code above to download the APK or connect Metro.
313
- </Text>
314
- </View>
315
- </View>
442
+
443
+ {isBuilding ? (<View style={styles.buildingActionsRow}>
444
+ <View style={styles.buildingStatusPill}>
445
+ <ActivityIndicator size="small" color={AppColors.purple}/>
446
+ <Text style={styles.buildingStatusPillText} numberOfLines={1}>
447
+ Building ({buildStatus.progress}%)
448
+ </Text>
449
+ </View>
316
450
 
317
- <View style={styles.stepRow}>
318
- <View style={styles.stepNumberBadge}>
319
- <Text style={styles.stepNumberText}>3</Text>
320
- </View>
321
- <View style={{ flex: 1 }}>
322
- <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
323
- <Text style={styles.stepTitle}>Simultaneous Live Fast-Refresh</Text>
324
- <BoltIcon size={13} color={AppColors.amber500}/>
451
+ <TouchableScale onPress={handleStopBuild} style={styles.stopBtn}>
452
+ <CircleXIcon size={13} color={AppColors.white}/>
453
+ <Text style={styles.stopBtnText}>Stop Build</Text>
454
+ </TouchableScale>
455
+ </View>) : (<TouchableScale onPress={handleStartBuild} style={styles.generateBtn}>
456
+ <View style={styles.ctaContentRow}>
457
+ <SparkleIcon size={14} color={AppColors.white}/>
458
+ <Text style={styles.generateBtnText}>
459
+ {isCleanBuild ? 'Clean & Generate Build' : 'Generate Build'}
460
+ </Text>
325
461
  </View>
326
- <Text style={styles.stepDesc}>
327
- Any changes saved in VS Code will immediately update <Text style={{ fontWeight: '700' }}>both the iOS Simulator and physical Android phone</Text> in real-time!
328
- </Text>
329
- </View>
330
- </View>
462
+ </TouchableScale>)}
463
+ </View>
464
+
465
+
466
+ <View style={styles.footerNoteRow}>
467
+ <InfoCircleIcon size={13} color={AppColors.grayTextWeak}/>
468
+ <Text style={styles.footerNoteText}>
469
+ Ensure both Android devices are connected to the same Wi-Fi network.
470
+ </Text>
331
471
  </View>
332
472
  </ScrollView>);
333
473
  };
334
474
  const styles = StyleSheet.create({
335
- container: {
475
+ scrollArea: {
336
476
  flex: 1,
337
477
  backgroundColor: AppColors.contentBg,
338
478
  },
339
- content: {
479
+ scrollContent: {
340
480
  padding: 12,
341
481
  gap: 12,
342
- paddingBottom: 40,
482
+ paddingBottom: 100,
343
483
  },
344
- serverCard: {
484
+ heroCard: {
345
485
  backgroundColor: AppColors.primaryLight,
346
486
  borderRadius: 14,
347
- padding: 14,
348
487
  borderWidth: 1,
349
488
  borderColor: AppColors.grayBorderSecondary,
489
+ padding: 14,
350
490
  shadowColor: AppColors.black,
351
- shadowOffset: { width: 0, height: 2 },
352
- shadowOpacity: 0.05,
491
+ shadowOpacity: 0.04,
353
492
  shadowRadius: 4,
354
- elevation: 2,
493
+ shadowOffset: { width: 0, height: 2 },
494
+ elevation: 1,
355
495
  gap: 12,
356
496
  },
357
- serverCardTop: {
358
- flexDirection: 'row',
359
- alignItems: 'center',
360
- justifyContent: 'space-between',
361
- },
362
- serverStatusLeft: {
497
+ heroHeader: {
363
498
  flexDirection: 'row',
364
499
  alignItems: 'center',
365
500
  gap: 10,
366
- flex: 1,
367
501
  },
368
- statusDot: {
369
- width: 12,
370
- height: 12,
371
- borderRadius: 6,
502
+ heroIconWrap: {
503
+ width: 38,
504
+ height: 38,
505
+ borderRadius: 10,
506
+ backgroundColor: AppColors.purple,
507
+ alignItems: 'center',
508
+ justifyContent: 'center',
509
+ shadowColor: AppColors.purple,
510
+ shadowOpacity: 0.25,
511
+ shadowRadius: 4,
512
+ shadowOffset: { width: 0, height: 2 },
513
+ elevation: 2,
372
514
  },
373
- serverTitle: {
515
+ heroTitle: {
374
516
  fontFamily: AppFonts.interBold,
375
517
  fontSize: 15,
376
518
  color: AppColors.primaryBlack,
519
+ letterSpacing: -0.2,
377
520
  },
378
- serverSubtitle: {
379
- fontFamily: AppFonts.interMedium,
380
- fontSize: 11,
521
+ heroSubtitle: {
522
+ fontFamily: AppFonts.interRegular,
523
+ fontSize: 11.5,
381
524
  color: AppColors.grayText,
382
- marginTop: 2,
383
- },
384
- portPill: {
385
- backgroundColor: `${AppColors.purple}18`,
386
- paddingHorizontal: 6,
387
- paddingVertical: 2,
388
- borderRadius: 6,
389
- },
390
- portPillText: {
391
- fontFamily: AppFonts.interBold,
392
- fontSize: 10,
393
- color: AppColors.purple,
525
+ marginTop: 1,
394
526
  },
395
- scanBtn: {
527
+ heroBadge: {
396
528
  flexDirection: 'row',
397
529
  alignItems: 'center',
398
530
  gap: 4,
399
- paddingHorizontal: 8,
400
- paddingVertical: 4,
531
+ backgroundColor: `${AppColors.emerald500}18`,
532
+ paddingHorizontal: 7,
533
+ paddingVertical: 3,
401
534
  borderRadius: 6,
402
- backgroundColor: `${AppColors.purple}14`,
403
- borderWidth: 1,
404
- borderColor: `${AppColors.purple}30`,
405
535
  },
406
- scanBtnText: {
407
- fontFamily: AppFonts.interBold,
408
- fontSize: 11,
409
- color: AppColors.purple,
536
+ pulseDot: {
537
+ width: 6,
538
+ height: 6,
539
+ borderRadius: 3,
540
+ backgroundColor: AppColors.emerald500,
410
541
  },
411
- portsRow: {
412
- flexDirection: 'row',
413
- gap: 8,
542
+ heroBadgeText: {
543
+ fontFamily: AppFonts.interBold,
544
+ fontSize: 9.5,
545
+ color: AppColors.emerald500,
414
546
  },
415
- portChip: {
416
- flex: 1,
547
+ heroMetricsStrip: {
417
548
  flexDirection: 'row',
418
549
  alignItems: 'center',
419
- justifyContent: 'center',
420
- gap: 4,
421
- paddingVertical: 7,
422
- borderRadius: 8,
423
550
  backgroundColor: AppColors.grayBackground,
424
- borderWidth: 1,
425
- borderColor: AppColors.grayBorderSecondary,
551
+ borderRadius: 10,
552
+ paddingVertical: 8,
553
+ paddingHorizontal: 10,
426
554
  },
427
- portChipSelected: {
428
- backgroundColor: `${AppColors.purple}18`,
429
- borderColor: AppColors.purple,
555
+ heroMetricItem: {
556
+ flex: 1,
557
+ alignItems: 'center',
558
+ paddingHorizontal: 2,
559
+ minWidth: 0,
430
560
  },
431
- portMiniDot: {
432
- width: 5,
433
- height: 5,
434
- borderRadius: 2.5,
561
+ heroMetricLabel: {
562
+ fontFamily: AppFonts.interBold,
563
+ fontSize: 8.5,
564
+ color: AppColors.grayTextWeak,
565
+ letterSpacing: 0.4,
435
566
  },
436
- portChipText: {
567
+ heroMetricValue: {
437
568
  fontFamily: AppFonts.interBold,
438
569
  fontSize: 11,
439
- color: AppColors.grayTextStrong,
440
- },
441
- portChipTextSelected: {
442
- color: AppColors.purple,
443
- },
444
- liveBadge: {
445
- backgroundColor: AppColors.greenColor,
446
- paddingHorizontal: 3,
447
- paddingVertical: 0.5,
448
- borderRadius: 3,
570
+ color: AppColors.primaryBlack,
571
+ marginTop: 2,
449
572
  },
450
- liveBadgeText: {
451
- fontFamily: AppFonts.interBold,
452
- fontSize: 7.5,
453
- color: AppColors.white,
573
+ heroMetricDivider: {
574
+ width: 1,
575
+ height: 20,
576
+ backgroundColor: AppColors.dividerColor,
454
577
  },
455
- card: {
578
+ sectionCard: {
456
579
  backgroundColor: AppColors.primaryLight,
457
580
  borderRadius: 14,
458
- padding: 14,
459
581
  borderWidth: 1,
460
582
  borderColor: AppColors.grayBorderSecondary,
583
+ padding: 14,
461
584
  shadowColor: AppColors.black,
462
- shadowOffset: { width: 0, height: 2 },
463
- shadowOpacity: 0.05,
464
- shadowRadius: 4,
465
- elevation: 2,
466
- gap: 8,
585
+ shadowOpacity: 0.03,
586
+ shadowRadius: 3,
587
+ shadowOffset: { width: 0, height: 1 },
588
+ elevation: 1,
589
+ gap: 12,
467
590
  },
468
- cardHeader: {
591
+ sectionHeaderRow: {
469
592
  flexDirection: 'row',
470
593
  alignItems: 'center',
471
594
  justifyContent: 'space-between',
472
595
  },
473
- cardTitle: {
596
+ sectionTitle: {
474
597
  fontFamily: AppFonts.interBold,
475
- fontSize: 11,
598
+ fontSize: 10.5,
476
599
  color: AppColors.grayTextWeak,
477
- letterSpacing: 0.6,
600
+ letterSpacing: 0.8,
601
+ textTransform: 'uppercase',
478
602
  },
479
- headerActionText: {
603
+ refreshBtn: {
604
+ flexDirection: 'row',
605
+ alignItems: 'center',
606
+ gap: 4,
607
+ paddingHorizontal: 7,
608
+ paddingVertical: 3,
609
+ borderRadius: 6,
610
+ backgroundColor: `${AppColors.purple}12`,
611
+ },
612
+ refreshBtnText: {
480
613
  fontFamily: AppFonts.interBold,
481
- fontSize: 11,
614
+ fontSize: 10,
482
615
  color: AppColors.purple,
483
616
  },
484
- inputContainer: {
617
+ qrCenteredWrapper: {
618
+ alignItems: 'center',
619
+ justifyContent: 'center',
620
+ backgroundColor: AppColors.grayBackground,
621
+ padding: 12,
622
+ borderRadius: 12,
623
+ borderWidth: 1,
624
+ borderColor: AppColors.grayBorderSecondary,
625
+ },
626
+ qrInnerFrame: {
627
+ backgroundColor: AppColors.white,
628
+ padding: 6,
629
+ borderRadius: 8,
630
+ },
631
+ urlBox: {
485
632
  flexDirection: 'row',
486
633
  alignItems: 'center',
487
634
  backgroundColor: AppColors.grayBackground,
488
635
  borderRadius: 10,
636
+ paddingLeft: 10,
637
+ paddingRight: 6,
638
+ paddingVertical: 6,
489
639
  borderWidth: 1,
490
640
  borderColor: AppColors.grayBorderSecondary,
491
- paddingHorizontal: 10,
492
- height: 40,
641
+ gap: 8,
493
642
  },
494
- inputPrefix: {
643
+ urlText: {
644
+ flex: 1,
495
645
  fontFamily: AppFonts.interMedium,
496
- fontSize: 12.5,
497
- color: AppColors.grayTextWeak,
646
+ fontSize: 11.5,
647
+ color: AppColors.skyBlue,
498
648
  },
499
- input: {
649
+ actionsRow: {
650
+ flexDirection: 'row',
651
+ gap: 10,
652
+ },
653
+ actionBtnSecondary: {
500
654
  flex: 1,
501
- fontFamily: AppFonts.interBold,
502
- fontSize: 13,
503
- color: AppColors.primaryBlack,
504
- paddingVertical: 0,
655
+ flexDirection: 'row',
656
+ alignItems: 'center',
657
+ justifyContent: 'center',
658
+ gap: 6,
659
+ paddingVertical: 9,
660
+ borderRadius: 10,
661
+ borderWidth: 1,
662
+ borderColor: AppColors.grayBorderSecondary,
663
+ backgroundColor: AppColors.grayBackground,
505
664
  },
506
- inputSuffix: {
665
+ actionBtnSecondaryText: {
507
666
  fontFamily: AppFonts.interBold,
508
- fontSize: 12.5,
509
- color: AppColors.purple,
510
- },
511
- inputHint: {
512
- fontFamily: AppFonts.interRegular,
513
- fontSize: 11,
514
- color: AppColors.grayTextWeak,
515
- lineHeight: 15,
667
+ fontSize: 12,
668
+ color: AppColors.grayTextStrong,
516
669
  },
517
- qrCard: {
518
- backgroundColor: AppColors.primaryLight,
519
- borderRadius: 14,
520
- padding: 14,
521
- borderWidth: 1,
522
- borderColor: AppColors.grayBorderSecondary,
523
- shadowColor: AppColors.black,
524
- shadowOffset: { width: 0, height: 2 },
525
- shadowOpacity: 0.05,
670
+ actionBtnPrimary: {
671
+ flex: 1,
672
+ flexDirection: 'row',
673
+ alignItems: 'center',
674
+ justifyContent: 'center',
675
+ gap: 6,
676
+ paddingVertical: 9,
677
+ borderRadius: 10,
678
+ backgroundColor: AppColors.purple,
679
+ shadowColor: AppColors.purple,
680
+ shadowOpacity: 0.25,
526
681
  shadowRadius: 4,
682
+ shadowOffset: { width: 0, height: 2 },
527
683
  elevation: 2,
684
+ },
685
+ actionBtnPrimaryText: {
686
+ fontFamily: AppFonts.interBold,
687
+ fontSize: 12,
688
+ color: AppColors.white,
689
+ },
690
+ completedBadge: {
691
+ flexDirection: 'row',
528
692
  alignItems: 'center',
529
- gap: 14,
693
+ gap: 3,
694
+ backgroundColor: `${AppColors.emerald500}18`,
695
+ paddingHorizontal: 6,
696
+ paddingVertical: 2,
697
+ borderRadius: 5,
530
698
  },
531
- qrTabsRow: {
699
+ completedBadgeText: {
700
+ fontFamily: AppFonts.interBold,
701
+ fontSize: 9.5,
702
+ color: AppColors.emerald500,
703
+ },
704
+ subTabStrip: {
532
705
  flexDirection: 'row',
533
706
  backgroundColor: AppColors.grayBackground,
534
- borderRadius: 10,
535
- padding: 3,
536
- width: '100%',
537
- gap: 4,
707
+ borderRadius: 8,
708
+ padding: 2,
709
+ borderWidth: 1,
710
+ borderColor: AppColors.grayBorderSecondary,
538
711
  },
539
- qrTab: {
712
+ subTabItem: {
540
713
  flex: 1,
541
- flexDirection: 'row',
714
+ paddingVertical: 7,
715
+ borderRadius: 6,
542
716
  alignItems: 'center',
543
717
  justifyContent: 'center',
544
- gap: 4,
545
- paddingVertical: 7,
546
- borderRadius: 8,
547
718
  },
548
- qrTabActive: {
719
+ subTabItemActive: {
549
720
  backgroundColor: AppColors.purple,
721
+ shadowColor: AppColors.purple,
722
+ shadowOpacity: 0.2,
723
+ shadowRadius: 3,
724
+ shadowOffset: { width: 0, height: 1 },
725
+ elevation: 1,
550
726
  },
551
- qrTabText: {
727
+ subTabText: {
552
728
  fontFamily: AppFonts.interMedium,
553
729
  fontSize: 11,
554
730
  color: AppColors.grayText,
555
731
  },
556
- qrTabTextActive: {
557
- color: AppColors.white,
732
+ subTabTextActive: {
558
733
  fontFamily: AppFonts.interBold,
734
+ color: AppColors.white,
559
735
  },
560
- qrWrapper: {
736
+ cleanRow: {
737
+ flexDirection: 'row',
561
738
  alignItems: 'center',
562
- gap: 12,
739
+ gap: 8,
740
+ paddingVertical: 2,
563
741
  },
564
- qrInfoBox: {
742
+ checkboxBox: {
743
+ width: 18,
744
+ height: 18,
745
+ borderRadius: 4,
746
+ borderWidth: 1.5,
747
+ borderColor: AppColors.grayBorderSecondary,
748
+ backgroundColor: AppColors.grayBackground,
565
749
  alignItems: 'center',
566
- maxWidth: 280,
567
- gap: 2,
750
+ justifyContent: 'center',
568
751
  },
569
- qrTargetTitle: {
570
- fontFamily: AppFonts.interBold,
752
+ checkboxBoxActive: {
753
+ backgroundColor: AppColors.purple,
754
+ borderColor: AppColors.purple,
755
+ },
756
+ cleanLabel: {
757
+ fontFamily: AppFonts.interMedium,
571
758
  fontSize: 11.5,
572
- color: AppColors.primaryBlack,
759
+ color: AppColors.grayTextStrong,
573
760
  },
574
- qrTargetUrl: {
761
+ cleanCode: {
575
762
  fontFamily: AppFonts.interRegular,
763
+ color: AppColors.grayTextWeak,
576
764
  fontSize: 10.5,
577
- color: AppColors.skyBlue,
578
- textAlign: 'center',
579
- },
580
- qrActionsRow: {
581
- flexDirection: 'row',
582
- gap: 10,
583
- width: '100%',
584
765
  },
585
- actionBtn: {
586
- flex: 1,
587
- paddingVertical: 10,
766
+ progressContainer: {
767
+ backgroundColor: AppColors.grayBackground,
588
768
  borderRadius: 10,
769
+ padding: 10,
770
+ gap: 6,
589
771
  borderWidth: 1,
590
772
  borderColor: AppColors.grayBorderSecondary,
591
- backgroundColor: AppColors.grayBackground,
773
+ },
774
+ progressTopRow: {
775
+ flexDirection: 'row',
592
776
  alignItems: 'center',
593
- justifyContent: 'center',
777
+ justifyContent: 'space-between',
778
+ },
779
+ progressTaskGroup: {
780
+ flexDirection: 'row',
781
+ alignItems: 'center',
782
+ gap: 6,
783
+ flex: 1,
784
+ paddingRight: 8,
785
+ },
786
+ progressTaskText: {
787
+ fontFamily: AppFonts.interMedium,
788
+ fontSize: 11,
789
+ color: AppColors.primaryBlack,
790
+ flex: 1,
594
791
  },
595
- actionBtnText: {
792
+ progressPercentageText: {
596
793
  fontFamily: AppFonts.interBold,
597
- fontSize: 12,
598
- color: AppColors.grayTextStrong,
794
+ fontSize: 11.5,
795
+ color: AppColors.purple,
599
796
  },
600
- actionBtnPrimary: {
797
+ progressBarTrack: {
798
+ width: '100%',
799
+ height: 6,
800
+ borderRadius: 3,
801
+ backgroundColor: AppColors.grayBorderSecondary,
802
+ overflow: 'hidden',
803
+ },
804
+ progressBarFill: {
805
+ height: '100%',
601
806
  backgroundColor: AppColors.purple,
602
- borderColor: AppColors.purple,
807
+ borderRadius: 3,
603
808
  },
604
- actionBtnPrimaryText: {
605
- fontFamily: AppFonts.interBold,
606
- fontSize: 12,
607
- color: AppColors.white,
809
+ errorContainer: {
810
+ flexDirection: 'row',
811
+ alignItems: 'center',
812
+ gap: 6,
813
+ backgroundColor: `${AppColors.errorColor}12`,
814
+ padding: 8,
815
+ borderRadius: 8,
816
+ borderWidth: 1,
817
+ borderColor: `${AppColors.errorColor}25`,
608
818
  },
609
- guideCard: {
610
- backgroundColor: AppColors.primaryLight,
611
- borderRadius: 14,
612
- padding: 14,
819
+ errorText: {
820
+ fontFamily: AppFonts.interRegular,
821
+ fontSize: 11,
822
+ color: AppColors.errorColor,
823
+ flex: 1,
824
+ },
825
+ consoleContainer: {
826
+ backgroundColor: '#0F172A',
827
+ borderRadius: 10,
613
828
  borderWidth: 1,
614
- borderColor: AppColors.grayBorderSecondary,
615
- gap: 10,
829
+ borderColor: '#1E293B',
830
+ overflow: 'hidden',
831
+ marginTop: 4,
832
+ },
833
+ consoleHeaderRow: {
834
+ flexDirection: 'row',
835
+ alignItems: 'center',
836
+ justifyContent: 'space-between',
837
+ backgroundColor: '#1E293B',
838
+ paddingHorizontal: 10,
839
+ paddingVertical: 6,
616
840
  },
617
- guideHeading: {
841
+ consoleHeaderTitle: {
618
842
  fontFamily: AppFonts.interBold,
619
- fontSize: 11,
620
- color: AppColors.grayTextWeak,
621
- letterSpacing: 0.6,
843
+ fontSize: 10,
844
+ color: '#38BDF8',
845
+ letterSpacing: 0.5,
846
+ },
847
+ consoleToggleBtn: {
848
+ paddingHorizontal: 6,
849
+ paddingVertical: 2,
850
+ borderRadius: 4,
851
+ backgroundColor: 'rgba(255,255,255,0.1)',
852
+ },
853
+ consoleToggleText: {
854
+ fontFamily: AppFonts.interMedium,
855
+ fontSize: 9.5,
856
+ color: '#94A3B8',
857
+ },
858
+ consoleLogBox: {
859
+ maxHeight: 140,
860
+ paddingHorizontal: 10,
861
+ paddingVertical: 8,
622
862
  },
623
- stepRow: {
863
+ consoleLogContent: {
864
+ gap: 3,
865
+ },
866
+ consoleLogLine: {
867
+ fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',
868
+ fontSize: 10,
869
+ lineHeight: 14,
870
+ },
871
+ consoleLogPlaceholder: {
872
+ fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace',
873
+ fontSize: 10,
874
+ color: '#64748B',
875
+ fontStyle: 'italic',
876
+ },
877
+ generateBtn: {
878
+ backgroundColor: AppColors.purple,
879
+ borderRadius: 10,
880
+ paddingVertical: 10,
881
+ alignItems: 'center',
882
+ justifyContent: 'center',
883
+ shadowColor: AppColors.purple,
884
+ shadowOpacity: 0.25,
885
+ shadowRadius: 4,
886
+ shadowOffset: { width: 0, height: 2 },
887
+ elevation: 2,
888
+ },
889
+ generateBtnDisabled: {
890
+ opacity: 0.7,
891
+ },
892
+ buildingActionsRow: {
624
893
  flexDirection: 'row',
625
- alignItems: 'flex-start',
894
+ alignItems: 'center',
626
895
  gap: 10,
627
896
  },
628
- stepNumberBadge: {
629
- width: 22,
630
- height: 22,
631
- borderRadius: 11,
632
- backgroundColor: `${AppColors.purple}18`,
897
+ buildingStatusPill: {
898
+ flex: 1,
899
+ flexDirection: 'row',
633
900
  alignItems: 'center',
634
901
  justifyContent: 'center',
635
- marginTop: 1,
902
+ gap: 8,
903
+ backgroundColor: `${AppColors.purple}14`,
904
+ borderRadius: 10,
905
+ paddingVertical: 10,
906
+ borderWidth: 1,
907
+ borderColor: `${AppColors.purple}30`,
636
908
  },
637
- stepNumberText: {
909
+ buildingStatusPillText: {
638
910
  fontFamily: AppFonts.interBold,
639
- fontSize: 11,
911
+ fontSize: 12,
640
912
  color: AppColors.purple,
641
913
  },
642
- stepTitle: {
914
+ stopBtn: {
915
+ flexDirection: 'row',
916
+ alignItems: 'center',
917
+ justifyContent: 'center',
918
+ gap: 6,
919
+ backgroundColor: AppColors.errorColor,
920
+ borderRadius: 10,
921
+ paddingHorizontal: 16,
922
+ paddingVertical: 10,
923
+ shadowColor: AppColors.errorColor,
924
+ shadowOpacity: 0.25,
925
+ shadowRadius: 4,
926
+ shadowOffset: { width: 0, height: 2 },
927
+ elevation: 2,
928
+ },
929
+ stopBtnText: {
930
+ fontFamily: AppFonts.interBold,
931
+ fontSize: 12,
932
+ color: AppColors.white,
933
+ },
934
+ ctaContentRow: {
935
+ flexDirection: 'row',
936
+ alignItems: 'center',
937
+ gap: 6,
938
+ },
939
+ generateBtnText: {
643
940
  fontFamily: AppFonts.interBold,
644
941
  fontSize: 12.5,
645
- color: AppColors.primaryBlack,
942
+ color: AppColors.white,
943
+ },
944
+ footerNoteRow: {
945
+ flexDirection: 'row',
946
+ alignItems: 'center',
947
+ gap: 6,
948
+ paddingHorizontal: 8,
646
949
  },
647
- stepDesc: {
950
+ footerNoteText: {
648
951
  fontFamily: AppFonts.interRegular,
649
952
  fontSize: 11,
650
- color: AppColors.grayText,
651
- lineHeight: 16,
652
- marginTop: 1,
953
+ color: AppColors.grayTextWeak,
954
+ textAlign: 'center',
955
+ flex: 1,
653
956
  },
654
957
  });
655
958
  export default DebuggingTab;