react-native-inapp-inspector 2.4.1 → 2.5.0

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 (295) hide show
  1. package/README.ar.md +163 -0
  2. package/README.de.md +163 -0
  3. package/README.es.md +164 -0
  4. package/README.fr.md +163 -0
  5. package/README.hi.md +163 -0
  6. package/README.ja.md +180 -0
  7. package/README.ko.md +163 -0
  8. package/README.md +340 -243
  9. package/README.pt-BR.md +163 -0
  10. package/README.ru.md +163 -0
  11. package/README.zh-CN.md +387 -0
  12. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +605 -23
  13. package/assets/banner_dark.svg +186 -0
  14. package/assets/banner_light.svg +186 -0
  15. package/assets/icon_circle.svg +148 -0
  16. package/assets/icon_square.svg +369 -0
  17. package/assets/inapp_inspector_icon.gif +0 -0
  18. package/assets/inapp_inspector_icon_original.gif +0 -0
  19. package/assets/social_preview.png +0 -0
  20. package/assets/walkthrough.gif +0 -0
  21. package/dist/commonjs/capture.d.ts +2 -0
  22. package/dist/commonjs/capture.js +1 -1
  23. package/dist/commonjs/components/AnalyticsDetail.js +23 -23
  24. package/dist/commonjs/components/AnalyticsEventCard.js +1 -1
  25. package/dist/commonjs/components/AnalyticsGraph.js +44 -44
  26. package/dist/commonjs/components/AnimatedBrandOwl.d.ts +7 -0
  27. package/dist/commonjs/components/AnimatedBrandOwl.js +175 -0
  28. package/dist/commonjs/components/AppHeaderLogo.d.ts +1 -0
  29. package/dist/commonjs/components/AppHeaderLogo.js +5 -3
  30. package/dist/commonjs/components/BrandCircleIcon.js +28 -28
  31. package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
  32. package/dist/commonjs/components/BrandSquareIcon.js +139 -0
  33. package/dist/commonjs/components/ConsoleLogCard.d.ts +2 -1
  34. package/dist/commonjs/components/ConsoleLogCard.js +23 -39
  35. package/dist/commonjs/components/Inspector/AboutModal.js +44 -54
  36. package/dist/commonjs/components/Inspector/AnalyticsTab.js +6 -6
  37. package/dist/commonjs/components/Inspector/ConfirmationModal.d.ts +13 -0
  38. package/dist/commonjs/components/Inspector/ConfirmationModal.js +30 -0
  39. package/dist/commonjs/components/Inspector/ConsoleTab.js +12 -12
  40. package/dist/commonjs/components/Inspector/CrashTab.js +44 -9
  41. package/dist/commonjs/components/Inspector/DebuggingTab.js +17 -17
  42. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +1 -1
  43. package/dist/commonjs/components/Inspector/FabLauncher.js +30 -33
  44. package/dist/commonjs/components/Inspector/FeatureUnderDevNotice.js +2 -2
  45. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  46. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +54 -0
  47. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  48. package/dist/commonjs/components/Inspector/GlobalCrashScreenModal.js +234 -0
  49. package/dist/commonjs/components/Inspector/InspectorHeader.js +137 -127
  50. package/dist/commonjs/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  51. package/dist/commonjs/components/Inspector/LanguageSelectorModal.js +172 -0
  52. package/dist/commonjs/components/Inspector/MainScreen.js +55 -35
  53. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +40 -35
  54. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +36 -0
  55. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +341 -135
  56. package/dist/commonjs/components/Inspector/NetworkTab.js +50 -50
  57. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +1 -1
  58. package/dist/commonjs/components/Inspector/PushCard.d.ts +3 -2
  59. package/dist/commonjs/components/Inspector/PushCard.js +5 -4
  60. package/dist/commonjs/components/Inspector/PushDetail.js +41 -32
  61. package/dist/commonjs/components/Inspector/PushTab.js +12 -12
  62. package/dist/commonjs/components/Inspector/ReduxDetail.js +32 -32
  63. package/dist/commonjs/components/Inspector/ReduxTab.js +10 -8
  64. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  65. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  66. package/dist/commonjs/components/Inspector/SettingsPanel.js +287 -139
  67. package/dist/commonjs/components/Inspector/SocketCard.d.ts +5 -0
  68. package/dist/commonjs/components/Inspector/SocketCard.js +116 -0
  69. package/dist/commonjs/components/Inspector/SocketDetail.d.ts +4 -0
  70. package/dist/commonjs/components/Inspector/SocketDetail.js +327 -0
  71. package/dist/commonjs/components/Inspector/SocketFilterModal.d.ts +13 -0
  72. package/dist/commonjs/components/Inspector/SocketFilterModal.js +69 -0
  73. package/dist/commonjs/components/Inspector/SocketTab.d.ts +3 -0
  74. package/dist/commonjs/components/Inspector/SocketTab.js +112 -0
  75. package/dist/commonjs/components/Inspector/StorageTab.js +39 -37
  76. package/dist/commonjs/components/Inspector/SupportModal.d.ts +7 -0
  77. package/dist/commonjs/components/Inspector/SupportModal.js +125 -0
  78. package/dist/commonjs/components/Inspector/SupportPage.d.ts +5 -0
  79. package/dist/commonjs/components/Inspector/SupportPage.js +227 -0
  80. package/dist/commonjs/components/Inspector/TabBar.js +24 -23
  81. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +24 -24
  82. package/dist/commonjs/components/JsonViewer.js +50 -48
  83. package/dist/commonjs/components/LogCard.d.ts +3 -2
  84. package/dist/commonjs/components/LogCard.js +27 -25
  85. package/dist/commonjs/components/LogSyntaxHighlighter.js +5 -5
  86. package/dist/commonjs/components/ModuleErrorBoundary.js +5 -5
  87. package/dist/commonjs/components/NetworkIcons.d.ts +42 -0
  88. package/dist/commonjs/components/NetworkIcons.js +139 -6
  89. package/dist/commonjs/components/SegmentedTabs.js +1 -1
  90. package/dist/commonjs/constants/version.d.ts +1 -1
  91. package/dist/commonjs/constants/version.js +1 -1
  92. package/dist/commonjs/crash.d.ts +1 -1
  93. package/dist/commonjs/crash.js +1 -1
  94. package/dist/commonjs/customHooks/crashHandler.d.ts +2 -1
  95. package/dist/commonjs/customHooks/crashHandler.js +7 -7
  96. package/dist/commonjs/customHooks/socketLogger.d.ts +26 -0
  97. package/dist/commonjs/customHooks/socketLogger.js +2 -0
  98. package/dist/commonjs/editor.d.ts +13 -0
  99. package/dist/commonjs/editor.js +1 -0
  100. package/dist/commonjs/helpers/index.d.ts +1 -0
  101. package/dist/commonjs/helpers/index.js +3 -3
  102. package/dist/commonjs/helpers/memoryManager.d.ts +1 -0
  103. package/dist/commonjs/helpers/memoryManager.js +1 -1
  104. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -1
  105. package/dist/commonjs/helpers/searchQueryParser.js +5 -1
  106. package/dist/commonjs/helpers/settingsStore.d.ts +1 -0
  107. package/dist/commonjs/helpers/settingsStore.js +1 -1
  108. package/dist/commonjs/helpers/shareFormatter.d.ts +3 -1
  109. package/dist/commonjs/helpers/shareFormatter.js +8 -7
  110. package/dist/commonjs/helpers/telemetry.js +1 -1
  111. package/dist/commonjs/i18n/index.d.ts +99 -1
  112. package/dist/commonjs/i18n/index.js +1 -1
  113. package/dist/commonjs/i18n/locales/ar.json +1 -1
  114. package/dist/commonjs/i18n/locales/bn.json +1 -0
  115. package/dist/commonjs/i18n/locales/de.json +1 -1
  116. package/dist/commonjs/i18n/locales/en.json +1 -1
  117. package/dist/commonjs/i18n/locales/es.json +1 -1
  118. package/dist/commonjs/i18n/locales/fr.json +1 -1
  119. package/dist/commonjs/i18n/locales/gu.json +1 -0
  120. package/dist/commonjs/i18n/locales/hi.json +1 -1
  121. package/dist/commonjs/i18n/locales/id.json +1 -0
  122. package/dist/commonjs/i18n/locales/it.json +1 -0
  123. package/dist/commonjs/i18n/locales/ja.json +1 -1
  124. package/dist/commonjs/i18n/locales/kn.json +1 -0
  125. package/dist/commonjs/i18n/locales/ko.json +1 -1
  126. package/dist/commonjs/i18n/locales/ml.json +1 -0
  127. package/dist/commonjs/i18n/locales/mr.json +1 -0
  128. package/dist/commonjs/i18n/locales/nl.json +1 -0
  129. package/dist/commonjs/i18n/locales/pa.json +1 -0
  130. package/dist/commonjs/i18n/locales/pl.json +1 -0
  131. package/dist/commonjs/i18n/locales/pt.json +1 -1
  132. package/dist/commonjs/i18n/locales/ru.json +1 -1
  133. package/dist/commonjs/i18n/locales/ta.json +1 -0
  134. package/dist/commonjs/i18n/locales/te.json +1 -0
  135. package/dist/commonjs/i18n/locales/tr.json +1 -0
  136. package/dist/commonjs/i18n/locales/vi.json +1 -0
  137. package/dist/commonjs/i18n/locales/zh.json +1 -1
  138. package/dist/commonjs/index.d.ts +16 -13
  139. package/dist/commonjs/index.js +5 -4
  140. package/dist/commonjs/native/NativeInspector.d.ts +4 -0
  141. package/dist/commonjs/native/NativeInspector.js +1 -1
  142. package/dist/commonjs/native/NativeNetworkInspector.d.ts +4 -0
  143. package/dist/commonjs/socket.d.ts +4 -0
  144. package/dist/commonjs/socket.js +1 -0
  145. package/dist/commonjs/styles/AppColors.d.ts +42 -2
  146. package/dist/commonjs/styles/AppColors.js +1 -1
  147. package/dist/commonjs/styles/common.js +1 -1
  148. package/dist/commonjs/styles/index.d.ts +30 -0
  149. package/dist/commonjs/styles/index.js +1 -1
  150. package/dist/commonjs/types/editor.d.ts +96 -0
  151. package/dist/commonjs/types/editor.js +1 -0
  152. package/dist/commonjs/types/enums.d.ts +40 -0
  153. package/dist/commonjs/types/enums.js +1 -1
  154. package/dist/commonjs/types/interfaces.d.ts +143 -1
  155. package/dist/esm/capture.d.ts +2 -0
  156. package/dist/esm/capture.js +1 -1
  157. package/dist/esm/components/AnalyticsDetail.js +31 -31
  158. package/dist/esm/components/AnalyticsEventCard.js +1 -1
  159. package/dist/esm/components/AnalyticsGraph.js +74 -74
  160. package/dist/esm/components/AnimatedBrandOwl.d.ts +7 -0
  161. package/dist/esm/components/AnimatedBrandOwl.js +175 -0
  162. package/dist/esm/components/AppHeaderLogo.d.ts +1 -0
  163. package/dist/esm/components/AppHeaderLogo.js +7 -5
  164. package/dist/esm/components/BrandCircleIcon.js +70 -70
  165. package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
  166. package/dist/esm/components/BrandSquareIcon.js +139 -0
  167. package/dist/esm/components/ConsoleLogCard.d.ts +2 -1
  168. package/dist/esm/components/ConsoleLogCard.js +61 -77
  169. package/dist/esm/components/Inspector/AboutModal.js +85 -95
  170. package/dist/esm/components/Inspector/AnalyticsTab.js +24 -24
  171. package/dist/esm/components/Inspector/ConfirmationModal.d.ts +13 -0
  172. package/dist/esm/components/Inspector/ConfirmationModal.js +30 -0
  173. package/dist/esm/components/Inspector/ConsoleTab.js +48 -48
  174. package/dist/esm/components/Inspector/CrashTab.js +203 -168
  175. package/dist/esm/components/Inspector/DebuggingTab.js +29 -29
  176. package/dist/esm/components/Inspector/DeviceInfoTab.js +75 -75
  177. package/dist/esm/components/Inspector/FabLauncher.js +57 -60
  178. package/dist/esm/components/Inspector/FeatureUnderDevNotice.js +7 -7
  179. package/dist/esm/components/Inspector/FloatingCaptureWidget.d.ts +3 -0
  180. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +54 -0
  181. package/dist/esm/components/Inspector/GlobalCrashScreenModal.d.ts +11 -0
  182. package/dist/esm/components/Inspector/GlobalCrashScreenModal.js +234 -0
  183. package/dist/esm/components/Inspector/InspectorHeader.js +162 -152
  184. package/dist/esm/components/Inspector/LanguageSelectorModal.d.ts +15 -0
  185. package/dist/esm/components/Inspector/LanguageSelectorModal.js +172 -0
  186. package/dist/esm/components/Inspector/MainScreen.js +130 -110
  187. package/dist/esm/components/Inspector/MediaGalleryTab.js +83 -78
  188. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +36 -0
  189. package/dist/esm/components/Inspector/MediaPreviewModal.js +345 -139
  190. package/dist/esm/components/Inspector/NetworkTab.js +130 -130
  191. package/dist/esm/components/Inspector/NpmUpdateToast.js +1 -1
  192. package/dist/esm/components/Inspector/PushCard.d.ts +3 -2
  193. package/dist/esm/components/Inspector/PushCard.js +23 -22
  194. package/dist/esm/components/Inspector/PushDetail.js +45 -36
  195. package/dist/esm/components/Inspector/PushTab.js +23 -23
  196. package/dist/esm/components/Inspector/ReduxDetail.js +42 -42
  197. package/dist/esm/components/Inspector/ReduxTab.js +20 -18
  198. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +2 -0
  199. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +43 -0
  200. package/dist/esm/components/Inspector/SettingsPanel.js +526 -378
  201. package/dist/esm/components/Inspector/SocketCard.d.ts +5 -0
  202. package/dist/esm/components/Inspector/SocketCard.js +116 -0
  203. package/dist/esm/components/Inspector/SocketDetail.d.ts +4 -0
  204. package/dist/esm/components/Inspector/SocketDetail.js +327 -0
  205. package/dist/esm/components/Inspector/SocketFilterModal.d.ts +13 -0
  206. package/dist/esm/components/Inspector/SocketFilterModal.js +69 -0
  207. package/dist/esm/components/Inspector/SocketTab.d.ts +3 -0
  208. package/dist/esm/components/Inspector/SocketTab.js +112 -0
  209. package/dist/esm/components/Inspector/StorageTab.js +139 -137
  210. package/dist/esm/components/Inspector/SupportModal.d.ts +7 -0
  211. package/dist/esm/components/Inspector/SupportModal.js +125 -0
  212. package/dist/esm/components/Inspector/SupportPage.d.ts +5 -0
  213. package/dist/esm/components/Inspector/SupportPage.js +227 -0
  214. package/dist/esm/components/Inspector/TabBar.js +36 -35
  215. package/dist/esm/components/Inspector/UpdateAvailableModal.js +22 -22
  216. package/dist/esm/components/JsonViewer.js +66 -64
  217. package/dist/esm/components/LogCard.d.ts +3 -2
  218. package/dist/esm/components/LogCard.js +57 -55
  219. package/dist/esm/components/LogSyntaxHighlighter.js +5 -5
  220. package/dist/esm/components/ModuleErrorBoundary.js +23 -23
  221. package/dist/esm/components/NetworkIcons.d.ts +42 -0
  222. package/dist/esm/components/NetworkIcons.js +139 -6
  223. package/dist/esm/components/SegmentedTabs.js +7 -7
  224. package/dist/esm/constants/version.d.ts +1 -1
  225. package/dist/esm/constants/version.js +1 -1
  226. package/dist/esm/crash.d.ts +1 -1
  227. package/dist/esm/crash.js +1 -1
  228. package/dist/esm/customHooks/crashHandler.d.ts +2 -1
  229. package/dist/esm/customHooks/crashHandler.js +7 -7
  230. package/dist/esm/customHooks/socketLogger.d.ts +26 -0
  231. package/dist/esm/customHooks/socketLogger.js +2 -0
  232. package/dist/esm/editor.d.ts +13 -0
  233. package/dist/esm/editor.js +1 -0
  234. package/dist/esm/helpers/index.d.ts +1 -0
  235. package/dist/esm/helpers/index.js +4 -4
  236. package/dist/esm/helpers/memoryManager.d.ts +1 -0
  237. package/dist/esm/helpers/memoryManager.js +1 -1
  238. package/dist/esm/helpers/searchQueryParser.d.ts +1 -1
  239. package/dist/esm/helpers/searchQueryParser.js +5 -1
  240. package/dist/esm/helpers/settingsStore.d.ts +1 -0
  241. package/dist/esm/helpers/settingsStore.js +1 -1
  242. package/dist/esm/helpers/shareFormatter.d.ts +3 -1
  243. package/dist/esm/helpers/shareFormatter.js +8 -7
  244. package/dist/esm/helpers/telemetry.js +1 -1
  245. package/dist/esm/i18n/index.d.ts +99 -1
  246. package/dist/esm/i18n/index.js +1 -1
  247. package/dist/esm/i18n/locales/ar.json +1 -1
  248. package/dist/esm/i18n/locales/bn.json +1 -0
  249. package/dist/esm/i18n/locales/de.json +1 -1
  250. package/dist/esm/i18n/locales/en.json +1 -1
  251. package/dist/esm/i18n/locales/es.json +1 -1
  252. package/dist/esm/i18n/locales/fr.json +1 -1
  253. package/dist/esm/i18n/locales/gu.json +1 -0
  254. package/dist/esm/i18n/locales/hi.json +1 -1
  255. package/dist/esm/i18n/locales/id.json +1 -0
  256. package/dist/esm/i18n/locales/it.json +1 -0
  257. package/dist/esm/i18n/locales/ja.json +1 -1
  258. package/dist/esm/i18n/locales/kn.json +1 -0
  259. package/dist/esm/i18n/locales/ko.json +1 -1
  260. package/dist/esm/i18n/locales/ml.json +1 -0
  261. package/dist/esm/i18n/locales/mr.json +1 -0
  262. package/dist/esm/i18n/locales/nl.json +1 -0
  263. package/dist/esm/i18n/locales/pa.json +1 -0
  264. package/dist/esm/i18n/locales/pl.json +1 -0
  265. package/dist/esm/i18n/locales/pt.json +1 -1
  266. package/dist/esm/i18n/locales/ru.json +1 -1
  267. package/dist/esm/i18n/locales/ta.json +1 -0
  268. package/dist/esm/i18n/locales/te.json +1 -0
  269. package/dist/esm/i18n/locales/tr.json +1 -0
  270. package/dist/esm/i18n/locales/vi.json +1 -0
  271. package/dist/esm/i18n/locales/zh.json +1 -1
  272. package/dist/esm/index.d.ts +16 -13
  273. package/dist/esm/index.js +8 -7
  274. package/dist/esm/native/NativeInspector.d.ts +4 -0
  275. package/dist/esm/native/NativeInspector.js +1 -1
  276. package/dist/esm/native/NativeNetworkInspector.d.ts +4 -0
  277. package/dist/esm/socket.d.ts +4 -0
  278. package/dist/esm/socket.js +1 -0
  279. package/dist/esm/styles/AppColors.d.ts +42 -2
  280. package/dist/esm/styles/AppColors.js +1 -1
  281. package/dist/esm/styles/common.js +1 -1
  282. package/dist/esm/styles/index.d.ts +30 -0
  283. package/dist/esm/styles/index.js +1 -1
  284. package/dist/esm/types/editor.d.ts +96 -0
  285. package/dist/esm/types/editor.js +1 -0
  286. package/dist/esm/types/enums.d.ts +40 -0
  287. package/dist/esm/types/enums.js +1 -1
  288. package/dist/esm/types/interfaces.d.ts +143 -1
  289. package/editor.d.ts +1 -0
  290. package/editor.js +1 -0
  291. package/ios/NetworkInspectorModule.mm +531 -12
  292. package/package.json +213 -2
  293. package/react-native-inapp-inspector.podspec +1 -1
  294. package/src/native/NativeInspector.ts +65 -4
  295. package/src/native/NativeNetworkInspector.ts +4 -0
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,o,s,n){n===void 0&&(n=s);var i=Object.getOwnPropertyDescriptor(o,s);(!i||("get"in i?!o.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return o[s]}}),Object.defineProperty(t,n,i)}):(function(t,o,s,n){n===void 0&&(n=s),t[n]=o[s]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,o){Object.defineProperty(t,"default",{enumerable:!0,value:o})}):function(t,o){t.default=o}),__importStar=this&&this.__importStar||(function(){var t=function(o){return t=Object.getOwnPropertyNames||function(s){var n=[];for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(n[n.length]=i);return n},t(o)};return function(o){if(o&&o.__esModule)return o;var s={};if(o!=null)for(var n=t(o),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(s,o,n[i]);return __setModuleDefault(s,o),s}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),i18n_1=require("../../i18n"),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AnimatedEntrance_1=__importDefault(require("../AnimatedEntrance")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),FeatureUnderDevNotice_1=__importDefault(require("./FeatureUnderDevNotice")),HighlightText_1=__importDefault(require("../HighlightText")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),crashHandler_1=require("../../customHooks/crashHandler"),CrashFilterModal_1=__importStar(require("./CrashFilterModal")),NetworkIcons_1=require("../NetworkIcons"),getRelativeTime=t=>{const o=Date.now(),s=Math.max(0,o-t),n=Math.floor(s/1e3),i=Math.floor(n/60),T=Math.floor(i/60),x=Math.floor(T/24);return n<60?`${n}s ago`:i<60?`${i}m ago`:T<24?`${T}h ago`:`${x}d ago`},LOAD_MORE_STEP=10,CrashTab=react_1.default.memo(()=>{const{t}=(0,i18n_1.useTranslation)(),{crashRecords:o,setSelectedCrash:s,maxCrashLogs:n}=(0,InspectorContext_1.useInspector)(),i=n||50,T=(0,react_1.useRef)(null),[x,b]=(0,react_1.useState)(i),[f,A]=(0,react_1.useState)(""),[y,v]=(0,react_1.useState)("all"),[l,S]=(0,react_1.useState)(CrashFilterModal_1.DEFAULT_CRASH_FILTERS),[F,V]=(0,react_1.useState)(!1);(0,react_1.useEffect)(()=>{b(n||50),T.current?.scrollToOffset({offset:0,animated:!1})},[f,y,l,n]);const g=(0,react_1.useMemo)(()=>{const e=o.length;let r=0,a=0,h=0,C=0,w=0;return o.forEach(m=>{m.isFatal&&r++,m.type==="js"?a++:m.type==="promise"?h++:m.type==="render"?C++:m.type==="native"&&w++}),{total:e,fatalCount:r,jsCount:a,promiseCount:h,renderCount:C,nativeCount:w}},[o]),_=(0,react_1.useMemo)(()=>{let e=o.filter(r=>{if(y==="fatal"&&!r.isFatal||y==="js"&&r.type!=="js"||y==="promise"&&r.type!=="promise"||y==="render"&&r.type!=="render"||y==="native"&&r.type!=="native"||l.types.size>0&&!l.types.has("all")&&!(l.types.has("fatal")&&r.isFatal||l.types.has("js")&&r.type==="js"||l.types.has("promise")&&r.type==="promise"||l.types.has("render")&&r.type==="render"||l.types.has("native")&&r.type==="native"))return!1;if(l.timeWindow!=="all"){const a=Date.now(),h=l.timeWindow==="15m"?a-900*1e3:l.timeWindow==="1h"?a-3600*1e3:l.timeWindow==="24h"?a-1440*60*1e3:a-10080*60*1e3;if(r.timestamp<h)return!1}if(l.platform!=="all"&&(r.deviceInfo?.platform||"").toLowerCase()!==l.platform)return!1;if(l.engine!=="all"){const a=r.deviceInfo?.isHermes;if(l.engine==="hermes"&&a!==!0||l.engine==="jsc"&&a===!0)return!1}if(f.trim().length>0){const a=f.trim().toLowerCase().split(/\s+/).filter(Boolean),h=[r.message||"",r.name||"",r.stack||"",r.type||"",r.deviceInfo?.platform||"",...(r.breadcrumbs||[]).map(C=>`${C.type||""} ${C.message||""}`)].join(" ").toLowerCase();return a.every(C=>h.includes(C))}return!0});return l.sortBy==="time_asc"&&(e=[...e].sort((r,a)=>r.timestamp-a.timestamp)),e},[o,y,f,l]),I=()=>{react_native_1.Alert.alert(t("crash.clearTitle"),t("crash.clearMessage"),[{text:t("crash.clearCancel"),style:"cancel"},{text:t("crash.clearConfirm"),style:"destructive",onPress:()=>(0,crashHandler_1.clearCrashRecords)()}])},B=(0,react_1.useCallback)(({item:e,index:r})=>{const a=e.isFatal,h=e.type.toUpperCase(),C=e.parsedStack&&e.parsedStack.length>0?e.parsedStack.find(k=>k.isAppCode)||e.parsedStack[0]:null,w=e.type==="native"?`${AppColors_1.AppColors.errorColor}22`:e.type==="render"?`${AppColors_1.AppColors.purple}22`:e.type==="promise"?`${AppColors_1.AppColors.darkOrange}22`:`${AppColors_1.AppColors.offerPurple}22`,m=e.type==="native"?AppColors_1.AppColors.errorColor:e.type==="render"?AppColors_1.AppColors.purple:e.type==="promise"?AppColors_1.AppColors.darkOrange:AppColors_1.AppColors.offerPurple;return<AnimatedEntrance_1.default index={r}distance={8}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,o,s,n){n===void 0&&(n=s);var i=Object.getOwnPropertyDescriptor(o,s);(!i||("get"in i?!o.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return o[s]}}),Object.defineProperty(t,n,i)}):(function(t,o,s,n){n===void 0&&(n=s),t[n]=o[s]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,o){Object.defineProperty(t,"default",{enumerable:!0,value:o})}):function(t,o){t.default=o}),__importStar=this&&this.__importStar||(function(){var t=function(o){return t=Object.getOwnPropertyNames||function(s){var n=[];for(var i in s)Object.prototype.hasOwnProperty.call(s,i)&&(n[n.length]=i);return n},t(o)};return function(o){if(o&&o.__esModule)return o;var s={};if(o!=null)for(var n=t(o),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(s,o,n[i]);return __setModuleDefault(s,o),s}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),i18n_1=require("../../i18n"),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AnimatedEntrance_1=__importDefault(require("../AnimatedEntrance")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),FeatureUnderDevNotice_1=__importDefault(require("./FeatureUnderDevNotice")),HighlightText_1=__importDefault(require("../HighlightText")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),crashHandler_1=require("../../customHooks/crashHandler"),CrashFilterModal_1=__importStar(require("./CrashFilterModal")),ConfirmationModal_1=require("./ConfirmationModal"),NetworkIcons_1=require("../NetworkIcons"),getRelativeTime=t=>{const o=Date.now(),s=Math.max(0,o-t),n=Math.floor(s/1e3),i=Math.floor(n/60),T=Math.floor(i/60),x=Math.floor(T/24);return n<60?`${n}s ago`:i<60?`${i}m ago`:T<24?`${T}h ago`:`${x}d ago`},LOAD_MORE_STEP=10,CrashTab=react_1.default.memo(()=>{const{t}=(0,i18n_1.useTranslation)(),{crashRecords:o,setSelectedCrash:s,maxCrashLogs:n}=(0,InspectorContext_1.useInspector)(),i=n||50,T=(0,react_1.useRef)(null),[x,v]=(0,react_1.useState)(i),[f,A]=(0,react_1.useState)(""),[y,S]=(0,react_1.useState)("all"),[l,V]=(0,react_1.useState)(CrashFilterModal_1.DEFAULT_CRASH_FILTERS),[I,F]=(0,react_1.useState)(!1),[B,b]=(0,react_1.useState)(!1);(0,react_1.useEffect)(()=>{v(n||50),T.current?.scrollToOffset({offset:0,animated:!1})},[f,y,l,n]);const g=(0,react_1.useMemo)(()=>{const e=o.length;let r=0,a=0,h=0,C=0,w=0;return o.forEach(m=>{m.isFatal&&r++,m.type==="js"?a++:m.type==="promise"?h++:m.type==="render"?C++:m.type==="native"&&w++}),{total:e,fatalCount:r,jsCount:a,promiseCount:h,renderCount:C,nativeCount:w}},[o]),_=(0,react_1.useMemo)(()=>{let e=o.filter(r=>{if(y==="fatal"&&!r.isFatal||y==="js"&&r.type!=="js"||y==="promise"&&r.type!=="promise"||y==="render"&&r.type!=="render"||y==="native"&&r.type!=="native"||l.types.size>0&&!l.types.has("all")&&!(l.types.has("fatal")&&r.isFatal||l.types.has("js")&&r.type==="js"||l.types.has("promise")&&r.type==="promise"||l.types.has("render")&&r.type==="render"||l.types.has("native")&&r.type==="native"))return!1;if(l.timeWindow!=="all"){const a=Date.now(),h=l.timeWindow==="15m"?a-900*1e3:l.timeWindow==="1h"?a-3600*1e3:l.timeWindow==="24h"?a-1440*60*1e3:a-10080*60*1e3;if(r.timestamp<h)return!1}if(l.platform!=="all"&&(r.deviceInfo?.platform||"").toLowerCase()!==l.platform)return!1;if(l.engine!=="all"){const a=r.deviceInfo?.isHermes;if(l.engine==="hermes"&&a!==!0||l.engine==="jsc"&&a===!0)return!1}if(f.trim().length>0){const a=f.trim().toLowerCase().split(/\s+/).filter(Boolean),h=[r.message||"",r.name||"",r.stack||"",r.type||"",r.deviceInfo?.platform||"",...(r.breadcrumbs||[]).map(C=>`${C.type||""} ${C.message||""}`)].join(" ").toLowerCase();return a.every(C=>h.includes(C))}return!0});return l.sortBy==="time_asc"&&(e=[...e].sort((r,a)=>r.timestamp-a.timestamp)),e},[o,y,f,l]),k=()=>{b(!0)},z=(0,react_1.useCallback)(({item:e,index:r})=>{const a=e.isFatal,h=e.type.toUpperCase(),C=e.parsedStack&&e.parsedStack.length>0?e.parsedStack.find(R=>R.isAppCode)||e.parsedStack[0]:null,w=e.type==="native"?`${AppColors_1.AppColors.errorColor}22`:e.type==="render"?`${AppColors_1.AppColors.purple}22`:e.type==="promise"?`${AppColors_1.AppColors.darkOrange}22`:`${AppColors_1.AppColors.offerPurple}22`,m=e.type==="native"?AppColors_1.AppColors.errorColor:e.type==="render"?AppColors_1.AppColors.purple:e.type==="promise"?AppColors_1.AppColors.darkOrange:AppColors_1.AppColors.offerPurple;return<AnimatedEntrance_1.default index={r}distance={8}>
2
2
  <TouchableScale_1.default onPress={()=>{s(e)}}style={[localStyles.cardContainer,a&&localStyles.fatalCardBorder]}>
3
3
 
4
4
  <react_native_1.View style={localStyles.cardHeader}>
@@ -150,13 +150,13 @@
150
150
  </react_native_1.View>
151
151
 
152
152
 
153
- <TouchableScale_1.default onPress={()=>V(!0)}style={[localStyles.filterButton,!(0,CrashFilterModal_1.isCrashFiltersDefault)(l)&&{borderColor:`${AppColors_1.AppColors.brandPurple}60`,backgroundColor:`${AppColors_1.AppColors.brandPurple}15`}]}>
153
+ <TouchableScale_1.default onPress={()=>F(!0)}style={[localStyles.filterButton,!(0,CrashFilterModal_1.isCrashFiltersDefault)(l)&&{borderColor:`${AppColors_1.AppColors.brandPurple}60`,backgroundColor:`${AppColors_1.AppColors.brandPurple}15`}]}>
154
154
  <NetworkIcons_1.FilterIcon size={14}color={(0,CrashFilterModal_1.isCrashFiltersDefault)(l)?AppColors_1.AppColors.grayTextStrong:AppColors_1.AppColors.brandPurple}/>
155
155
  {!(0,CrashFilterModal_1.isCrashFiltersDefault)(l)&&<react_native_1.View style={{position:"absolute",top:2,right:2,width:7,height:7,borderRadius:3.5,backgroundColor:AppColors_1.AppColors.darkOrange,borderWidth:1,borderColor:AppColors_1.AppColors.white}}/>}
156
156
  </TouchableScale_1.default>
157
157
 
158
158
 
159
- <TouchableScale_1.default onPress={I}style={localStyles.clearButton}>
159
+ <TouchableScale_1.default onPress={k}style={localStyles.clearButton}>
160
160
  <NetworkIcons_1.TrashIcon size={14}color={AppColors_1.AppColors.errorColor}/>
161
161
  </TouchableScale_1.default>
162
162
  </react_native_1.View>
@@ -166,7 +166,7 @@
166
166
 
167
167
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:12,gap:6}}>
168
168
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
169
- {[{key:"all",label:t("crash.filterAll"),Icon:NetworkIcons_1.LayersIcon,count:g.total,themeColor:AppColors_1.AppColors.purple},{key:"fatal",label:t("crash.filterFatal"),Icon:NetworkIcons_1.SkullIcon,count:g.fatalCount,themeColor:AppColors_1.AppColors.errorColor},{key:"js",label:t("crash.filterJsError"),Icon:NetworkIcons_1.JsIcon,count:g.jsCount,themeColor:AppColors_1.AppColors.amber600},{key:"promise",label:t("crash.filterPromise"),Icon:NetworkIcons_1.HourglassIcon,count:g.promiseCount,themeColor:AppColors_1.AppColors.orange600},{key:"render",label:t("crash.filterRender"),Icon:NetworkIcons_1.LayoutIcon,count:g.renderCount,themeColor:AppColors_1.AppColors.violet600},{key:"native",label:t("crash.filterNative"),Icon:NetworkIcons_1.ChipIcon,count:g.nativeCount,themeColor:AppColors_1.AppColors.cyan600}].map(e=>{const r=y===e.key,a=e.themeColor||AppColors_1.AppColors.purple,h=r?AppColors_1.AppColors.white:a,C=e.Icon;return<TouchableScale_1.default key={e.key}onPress={()=>v(e.key)}>
169
+ {[{key:"all",label:t("crash.filterAll"),Icon:NetworkIcons_1.LayersIcon,count:g.total,themeColor:AppColors_1.AppColors.purple},{key:"fatal",label:t("crash.filterFatal"),Icon:NetworkIcons_1.SkullIcon,count:g.fatalCount,themeColor:AppColors_1.AppColors.errorColor},{key:"js",label:t("crash.filterJsError"),Icon:NetworkIcons_1.JsIcon,count:g.jsCount,themeColor:AppColors_1.AppColors.amber600},{key:"promise",label:t("crash.filterPromise"),Icon:NetworkIcons_1.HourglassIcon,count:g.promiseCount,themeColor:AppColors_1.AppColors.orange600},{key:"render",label:t("crash.filterRender"),Icon:NetworkIcons_1.LayoutIcon,count:g.renderCount,themeColor:AppColors_1.AppColors.violet600},{key:"native",label:t("crash.filterNative"),Icon:NetworkIcons_1.ChipIcon,count:g.nativeCount,themeColor:AppColors_1.AppColors.cyan600}].map(e=>{const r=y===e.key,a=e.themeColor||AppColors_1.AppColors.purple,h=r?AppColors_1.AppColors.white:a,C=e.Icon;return<TouchableScale_1.default key={e.key}onPress={()=>S(e.key)}>
170
170
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:r?a:`${a}12`,borderWidth:1,borderColor:r?a:`${a}30`,gap:5}}>
171
171
  <C size={11}color={h}/>
172
172
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:r?AppColors_1.AppColors.white:AppColors_1.AppColors.primaryBlack}}>
@@ -195,15 +195,50 @@
195
195
  <react_native_1.Text style={localStyles.emptySub}>
196
196
  {f?`No crash entries matched "${f}"`:y!=="all"||!(0,CrashFilterModal_1.isCrashFiltersDefault)(l)?"Try adjusting your filters or search keywords.":t("crash.emptySubtitle")}
197
197
  </react_native_1.Text>
198
- {(f.length>0||y!=="all"||!(0,CrashFilterModal_1.isCrashFiltersDefault)(l))&&<TouchableScale_1.default onPress={()=>{A(""),v("all"),S(CrashFilterModal_1.DEFAULT_CRASH_FILTERS)}}style={{marginTop:10,paddingHorizontal:14,paddingVertical:7,borderRadius:8,backgroundColor:AppColors_1.AppColors.purple}}>
198
+ {f.length>0||y!=="all"||!(0,CrashFilterModal_1.isCrashFiltersDefault)(l)?<TouchableScale_1.default onPress={()=>{A(""),S("all"),V(CrashFilterModal_1.DEFAULT_CRASH_FILTERS)}}style={{marginTop:10,paddingHorizontal:14,paddingVertical:7,borderRadius:8,backgroundColor:AppColors_1.AppColors.purple}}>
199
199
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11.5,color:AppColors_1.AppColors.white}}>
200
200
  Clear Search & Filters
201
201
  </react_native_1.Text>
202
- </TouchableScale_1.default>}
202
+ </TouchableScale_1.default>:<react_native_1.View style={{marginTop:18,alignItems:"center",width:"100%",paddingHorizontal:16}}>
203
+ <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.grayText,letterSpacing:.6,marginBottom:10}}>
204
+ TEST CRASH SENTINEL
205
+ </react_native_1.Text>
206
+ <react_native_1.View style={{flexDirection:"row",gap:7,flexWrap:"wrap",justifyContent:"center"}}>
207
+ <TouchableScale_1.default onPress={()=>(0,crashHandler_1.simulateTestCrash)("js","Test JavaScript ReferenceError: variable is not defined",void 0,!0)}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${AppColors_1.AppColors.amber600}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.amber600}38`,paddingHorizontal:9,paddingVertical:6,borderRadius:8}}>
208
+ <NetworkIcons_1.JsIcon size={11}color={AppColors_1.AppColors.amber600}/>
209
+ <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.primaryBlack}}>
210
+ Simulate JS Crash
211
+ </react_native_1.Text>
212
+ </TouchableScale_1.default>
213
+
214
+ <TouchableScale_1.default onPress={()=>(0,crashHandler_1.simulateTestCrash)("native","Test Native Crash: SIGSEGV (Segmentation Fault)",void 0,!0)}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${AppColors_1.AppColors.cyan600}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.cyan600}38`,paddingHorizontal:9,paddingVertical:6,borderRadius:8}}>
215
+ <NetworkIcons_1.ChipIcon size={11}color={AppColors_1.AppColors.cyan600}/>
216
+ <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.primaryBlack}}>
217
+ Simulate Native Crash
218
+ </react_native_1.Text>
219
+ </TouchableScale_1.default>
220
+
221
+ <TouchableScale_1.default onPress={()=>(0,crashHandler_1.simulateTestCrash)("promise","Unhandled Promise Rejection: Gateway connection timed out",void 0,!0)}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${AppColors_1.AppColors.orange600}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.orange600}38`,paddingHorizontal:9,paddingVertical:6,borderRadius:8}}>
222
+ <NetworkIcons_1.HourglassIcon size={11}color={AppColors_1.AppColors.orange600}/>
223
+ <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.primaryBlack}}>
224
+ Simulate Promise
225
+ </react_native_1.Text>
226
+ </TouchableScale_1.default>
227
+
228
+ <TouchableScale_1.default onPress={()=>(0,crashHandler_1.simulateTestCrash)("render","Render Error: Cannot read property of undefined in Component",void 0,!0)}style={{flexDirection:"row",alignItems:"center",gap:5,backgroundColor:`${AppColors_1.AppColors.violet600}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.violet600}38`,paddingHorizontal:9,paddingVertical:6,borderRadius:8}}>
229
+ <NetworkIcons_1.LayoutIcon size={11}color={AppColors_1.AppColors.violet600}/>
230
+ <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:AppColors_1.AppColors.primaryBlack}}>
231
+ Simulate Render
232
+ </react_native_1.Text>
233
+ </TouchableScale_1.default>
234
+ </react_native_1.View>
235
+ </react_native_1.View>}
203
236
  </react_native_1.ScrollView>:<>
204
- <react_native_1.FlatList ref={T}data={_.slice(0,x)}keyExtractor={e=>e.id}renderItem={B}initialNumToRender={12}maxToRenderPerBatch={8}windowSize={5}removeClippedSubviews={react_native_1.Platform.OS==="android"}renderToHardwareTextureAndroid={!0}contentContainerStyle={localStyles.listContent}showsVerticalScrollIndicator={!1}ListFooterComponent={_.length>0?<EndOfListFooter_1.default count={Math.min(x,_.length)}totalCount={_.length}label="crashes"loadMoreStep={LOAD_MORE_STEP}hasMore={_.length>x}onLoadMore={()=>b(e=>e+LOAD_MORE_STEP)}/>:null}/>
237
+ <react_native_1.FlatList ref={T}data={_.slice(0,x)}keyExtractor={e=>e.id}renderItem={z}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}style={{flex:1}}contentContainerStyle={[localStyles.listContent,{flexGrow:1}]}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled"ListFooterComponent={_.length>0?<EndOfListFooter_1.default count={Math.min(x,_.length)}totalCount={_.length}label="crashes"loadMoreStep={LOAD_MORE_STEP}hasMore={_.length>x}onLoadMore={()=>v(e=>e+LOAD_MORE_STEP)}/>:null}/>
205
238
  </>}
206
239
 
207
240
 
208
- <CrashFilterModal_1.default visible={F}onClose={()=>V(!1)}filters={l}onApply={S}searchQuery={f}/>
209
- </react_native_1.View>});exports.default=CrashTab;const localStyles=react_native_1.StyleSheet.create({container:{flex:1,backgroundColor:AppColors_1.AppColors.grayBackground},statsBar:{backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.grayBorderSecondary,paddingVertical:10},statsScrollContent:{paddingHorizontal:16,gap:8},statChip:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:AppColors_1.AppColors.purpleShade50,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}14`},statChipActive:{backgroundColor:`${AppColors_1.AppColors.purple}14`,borderColor:`${AppColors_1.AppColors.purple}33`},statChipValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13,color:AppColors_1.AppColors.primaryBlack},statChipLabel:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayText},controlsContainer:{paddingHorizontal:16,paddingTop:12,paddingBottom:6,backgroundColor:AppColors_1.AppColors.grayBackground},searchRow:{flexDirection:"row",alignItems:"center",gap:8},searchInputWrapper:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.primaryLight,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,borderRadius:10,paddingHorizontal:10,height:38,gap:8},searchInput:{flex:1,fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:13,color:AppColors_1.AppColors.primaryBlack,paddingVertical:0},clearButton:{width:38,height:38,borderRadius:10,backgroundColor:`${AppColors_1.AppColors.errorColor}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.errorColor}22`,alignItems:"center",justifyContent:"center"},filterButton:{width:38,height:38,borderRadius:10,backgroundColor:`${AppColors_1.AppColors.brandPurple}0F`,borderWidth:1,borderColor:`${AppColors_1.AppColors.brandPurple}30`,alignItems:"center",justifyContent:"center"},filterScrollContent:{paddingVertical:10,gap:6},filterChip:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:12,paddingVertical:6,borderRadius:8,backgroundColor:AppColors_1.AppColors.primaryLight,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},filterChipActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},filterChipText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.grayText},filterChipTextActive:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.white},listContent:{paddingHorizontal:16,paddingTop:4,paddingBottom:24,gap:10},cardContainer:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:12,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:14,shadowColor:AppColors_1.AppColors.shadowColorString,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:2},fatalCardBorder:{borderColor:`${AppColors_1.AppColors.errorColor}44`},cardHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},badgeRow:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},sNoBadge:{backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,paddingHorizontal:6,paddingVertical:3,borderRadius:5},sNoBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.grayText,letterSpacing:.3},fatalBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:AppColors_1.AppColors.errorColor,paddingHorizontal:6,paddingVertical:3,borderRadius:5},fatalBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.white,letterSpacing:.5},caughtBadge:{backgroundColor:`${AppColors_1.AppColors.greenColor}1F`,paddingHorizontal:6,paddingVertical:3,borderRadius:5},caughtBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.greenColor,letterSpacing:.5},typeBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:5},typeBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,letterSpacing:.5},timeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:1},timestampText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayTextWeak},relativeTimeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.grayTextWeak,backgroundColor:AppColors_1.AppColors.grayBackground,paddingHorizontal:5,paddingVertical:1,borderRadius:4,overflow:"hidden"},errorMessageText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.primaryBlack,lineHeight:18},locationRow:{flexDirection:"row",alignItems:"center",gap:6,marginTop:2,marginBottom:6,backgroundColor:AppColors_1.AppColors.purpleShade50,paddingHorizontal:8,paddingVertical:4,borderRadius:6},locationText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayText,flex:1},cardFooter:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginTop:6,paddingTop:8,borderTopWidth:1,borderTopColor:AppColors_1.AppColors.dividerColor},metaPill:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:AppColors_1.AppColors.purpleShade50,paddingHorizontal:6,paddingVertical:2,borderRadius:4},metaPillText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},emptyContainer:{flexGrow:1,alignItems:"center",justifyContent:"center",padding:32,paddingBottom:80},emptyIconCircle:{width:72,height:72,borderRadius:36,backgroundColor:`${AppColors_1.AppColors.greenColor}1F`,alignItems:"center",justifyContent:"center",marginBottom:16},emptyTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:17,color:AppColors_1.AppColors.primaryBlack,marginBottom:6},emptySub:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:13,color:AppColors_1.AppColors.grayText,textAlign:"center",lineHeight:18,maxWidth:280}});
241
+ <CrashFilterModal_1.default visible={I}onClose={()=>F(!1)}filters={l}onApply={V}searchQuery={f}/>
242
+
243
+ <ConfirmationModal_1.ConfirmationModal visible={B}title={t("crash.clearTitle","Clear Crash Records")}message={t("crash.clearMessage","Are you sure you want to clear all intercepted crash records?")}confirmText={t("crash.clearConfirm","Clear All")}cancelText={t("crash.clearCancel","Cancel")}isDestructive={!0}icon="trash"onConfirm={()=>{b(!1),(0,crashHandler_1.clearCrashRecords)()}}onCancel={()=>b(!1)}/>
244
+ </react_native_1.View>});exports.default=CrashTab;const localStyles=react_native_1.StyleSheet.create({container:{flex:1,backgroundColor:AppColors_1.AppColors.grayBackground},statsBar:{backgroundColor:AppColors_1.AppColors.primaryLight,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.grayBorderSecondary,paddingVertical:10},statsScrollContent:{paddingHorizontal:8,gap:6},statChip:{flexDirection:"row",alignItems:"center",gap:6,paddingHorizontal:10,paddingVertical:5,borderRadius:8,backgroundColor:AppColors_1.AppColors.purpleShade50,borderWidth:1,borderColor:`${AppColors_1.AppColors.purple}14`},statChipActive:{backgroundColor:`${AppColors_1.AppColors.purple}14`,borderColor:`${AppColors_1.AppColors.purple}33`},statChipValue:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13,color:AppColors_1.AppColors.primaryBlack},statChipLabel:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayText},controlsContainer:{paddingHorizontal:8,paddingTop:10,paddingBottom:6,backgroundColor:AppColors_1.AppColors.grayBackground},searchRow:{flexDirection:"row",alignItems:"center",gap:8},searchInputWrapper:{flex:1,flexDirection:"row",alignItems:"center",backgroundColor:AppColors_1.AppColors.primaryLight,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,borderRadius:10,paddingHorizontal:10,height:38,gap:8},searchInput:{flex:1,fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:13,color:AppColors_1.AppColors.primaryBlack,paddingVertical:0},clearButton:{width:38,height:38,borderRadius:10,backgroundColor:`${AppColors_1.AppColors.errorColor}14`,borderWidth:1,borderColor:`${AppColors_1.AppColors.errorColor}22`,alignItems:"center",justifyContent:"center"},filterButton:{width:38,height:38,borderRadius:10,backgroundColor:`${AppColors_1.AppColors.brandPurple}0F`,borderWidth:1,borderColor:`${AppColors_1.AppColors.brandPurple}30`,alignItems:"center",justifyContent:"center"},filterScrollContent:{paddingVertical:10,gap:6},filterChip:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:10,paddingVertical:5.5,borderRadius:8,backgroundColor:AppColors_1.AppColors.primaryLight,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary},filterChipActive:{backgroundColor:AppColors_1.AppColors.purple,borderColor:AppColors_1.AppColors.purple},filterChipText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:12,color:AppColors_1.AppColors.grayText},filterChipTextActive:{fontFamily:AppFonts_1.AppFonts.interBold,color:AppColors_1.AppColors.white},listContent:{paddingHorizontal:8,paddingTop:4,paddingBottom:24,gap:8},cardContainer:{backgroundColor:AppColors_1.AppColors.primaryLight,borderRadius:12,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,padding:10,shadowColor:AppColors_1.AppColors.shadowColorString,shadowOffset:{width:0,height:1},shadowOpacity:.05,shadowRadius:3,elevation:2},fatalCardBorder:{borderColor:`${AppColors_1.AppColors.errorColor}44`},cardHeader:{flexDirection:"row",alignItems:"center",justifyContent:"space-between"},badgeRow:{flexDirection:"row",alignItems:"center",gap:6,flexShrink:1},sNoBadge:{backgroundColor:AppColors_1.AppColors.grayBackground,borderWidth:1,borderColor:AppColors_1.AppColors.grayBorderSecondary,paddingHorizontal:6,paddingVertical:3,borderRadius:5},sNoBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.grayText,letterSpacing:.3},fatalBadge:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:AppColors_1.AppColors.errorColor,paddingHorizontal:6,paddingVertical:3,borderRadius:5},fatalBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.white,letterSpacing:.5},caughtBadge:{backgroundColor:`${AppColors_1.AppColors.greenColor}1F`,paddingHorizontal:6,paddingVertical:3,borderRadius:5},caughtBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,color:AppColors_1.AppColors.greenColor,letterSpacing:.5},typeBadge:{paddingHorizontal:6,paddingVertical:3,borderRadius:5},typeBadgeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:9.5,letterSpacing:.5},timeRow:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:1},timestampText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayTextWeak},relativeTimeText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:AppColors_1.AppColors.grayTextWeak,backgroundColor:AppColors_1.AppColors.grayBackground,paddingHorizontal:5,paddingVertical:1,borderRadius:4,overflow:"hidden"},errorMessageText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.primaryBlack,lineHeight:18},locationRow:{flexDirection:"row",alignItems:"center",gap:6,marginTop:2,marginBottom:6,backgroundColor:AppColors_1.AppColors.purpleShade50,paddingHorizontal:8,paddingVertical:4,borderRadius:6},locationText:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:11,color:AppColors_1.AppColors.grayText,flex:1},cardFooter:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",marginTop:6,paddingTop:8,borderTopWidth:1,borderTopColor:AppColors_1.AppColors.dividerColor},metaPill:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:AppColors_1.AppColors.purpleShade50,paddingHorizontal:6,paddingVertical:2,borderRadius:4},metaPillText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:10,color:AppColors_1.AppColors.grayTextWeak},emptyContainer:{flexGrow:1,alignItems:"center",justifyContent:"center",padding:32,paddingBottom:80},emptyIconCircle:{width:72,height:72,borderRadius:36,backgroundColor:`${AppColors_1.AppColors.greenColor}1F`,alignItems:"center",justifyContent:"center",marginBottom:16},emptyTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:17,color:AppColors_1.AppColors.primaryBlack,marginBottom:6},emptySub:{fontFamily:AppFonts_1.AppFonts.interRegular,fontSize:13,color:AppColors_1.AppColors.grayText,textAlign:"center",lineHeight:18,maxWidth:280}});
@@ -1,6 +1,6 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(e,o,n,r){r===void 0&&(r=n);var l=Object.getOwnPropertyDescriptor(o,n);(!l||("get"in l?!o.__esModule:l.writable||l.configurable))&&(l={enumerable:!0,get:function(){return o[n]}}),Object.defineProperty(e,r,l)}):(function(e,o,n,r){r===void 0&&(r=n),e[r]=o[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(e,o){Object.defineProperty(e,"default",{enumerable:!0,value:o})}):function(e,o){e.default=o}),__importStar=this&&this.__importStar||(function(){var e=function(o){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var l in n)Object.prototype.hasOwnProperty.call(n,l)&&(r[r.length]=l);return r},e(o)};return function(o){if(o&&o.__esModule)return o;var n={};if(o!=null)for(var r=e(o),l=0;l<r.length;l++)r[l]!=="default"&&__createBinding(n,o,r[l]);return __setModuleDefault(n,o),n}})(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DebuggingTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),QRCodeView_1=__importDefault(require("../QRCodeView")),TouchableScale_1=__importDefault(require("../TouchableScale")),toast_1=require("../../helpers/toast"),NativeInspector_1=require("../../native/NativeInspector"),NetworkIcons_1=require("../NetworkIcons"),react_native_svg_1=__importStar(require("react-native-svg")),TerminalConsoleIcon=({color:e=AppColors_1.AppColors.purple,size:o=13})=><react_native_svg_1.default width={o}height={o}viewBox="0 0 24 24"fill="none">
2
- <react_native_svg_1.Path d="M4 17l6-6-6-6M12 19h8"stroke={e}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
3
- </react_native_svg_1.default>,DebuggingTab=()=>{const e=(0,react_1.useMemo)(()=>{const a=react_native_1.NativeModules.SourceCode?.scriptURL||"";let s="localhost",t=8081;try{if(a.includes("://")){const d=a.split("://")[1].split("/")[0];if(d.includes(":")){const u=d.split(":");s=u[0];const y=parseInt(u[1],10);isNaN(y)||(t=y)}else s=d}}catch{}return{host:s,port:t,scriptURL:a}},[]),[o,n]=(0,react_1.useState)(()=>e.host&&e.host!=="localhost"&&e.host!=="127.0.0.1"&&e.host!=="10.0.2.2"?e.host:"192.168.1.2"),[r,l]=(0,react_1.useState)(e.port||8083),[B,m]=(0,react_1.useState)("app-debug.apk"),[T,x]=(0,react_1.useState)(null),[g,v]=(0,react_1.useState)("assembleRelease"),[f,V]=(0,react_1.useState)(!0),[i,w]=(0,react_1.useState)({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),p=(0,react_1.useRef)(null),_=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,[A,k]=(0,react_1.useState)(!0),S=(0,react_1.useRef)(null);(0,react_1.useEffect)(()=>{react_native_1.Animated.timing(_,{toValue:Math.max(0,Math.min(100,i.progress)),duration:350,useNativeDriver:!1}).start()},[i.progress,_]),(0,react_1.useEffect)(()=>{i.logs&&i.logs.length>0&&setTimeout(()=>{S.current?.scrollToEnd({animated:!0})},50)},[i.logs]);const C=(0,react_1.useCallback)(async()=>{const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([e.port,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1200),y=await fetch(`http://${t}:${h}/__inapp_inspector/apk-info`,{signal:d.signal});if(clearTimeout(u),y.ok){const c=await y.json();c.hostIp&&c.hostIp!=="127.0.0.1"&&c.hostIp!=="localhost"&&c.hostIp!=="10.0.2.2"&&n(c.hostIp),c.port&&l(c.port),c.apkName&&m(c.apkName),c.apkSize&&x((c.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[e.host,e.port]);(0,react_1.useEffect)(()=>{C()},[C]),(0,react_1.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);const I=(0,react_1.useCallback)(()=>{p.current&&clearInterval(p.current);const a=e.host||"10.0.2.2";p.current=setInterval(async()=>{try{const s=await fetch(`http://${a}:${r}/__inapp_inspector/build-status`);if(s.ok){const t=await s.json();w(t),t.status==="completed"?(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("success"),(0,toast_1.showToast)("\u2713 APK Build Generated Successfully!"),t.apkSize&&x((t.apkSize/(1024*1024)).toFixed(1)),t.apkName&&m(t.apkName),C()):t.status==="failed"&&(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("error"),(0,toast_1.showToast)("\u2715 Build Failed: "+(t.error||"Gradle error")))}}catch{}},1e3)},[e.host,r,C]),R=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),w({status:"running",scheme:g,clean:f,progress:5,currentTask:f?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));let t=!1;for(const h of a)for(const d of s)try{const u=new AbortController,y=setTimeout(()=>u.abort(),2e3),c=await fetch(`http://${h}:${d}/__inapp_inspector/build-apk?scheme=${g}&clean=${f}`,{signal:u.signal});if(clearTimeout(y),c.ok){t=!0,I();return}}catch{}t||w(h=>({...h,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},F=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("warning"),p.current&&clearInterval(p.current);const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1500);await fetch(`http://${t}:${h}/__inapp_inspector/stop-build`,{signal:d.signal}),clearTimeout(u)}catch{}w(t=>({...t,status:"idle",currentTask:"Build cancelled by user",logs:[...t.logs||[],"\u{1F6D1} Build cancelled by user."]})),(0,toast_1.showToast)("Build cancelled")},D=`http://${o}:${r}/${B.replace(/^\/+/,"")}`,b=i.status==="running";return<react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(o,e,n,i){i===void 0&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(o,i,r)}):(function(o,e,n,i){i===void 0&&(i=n),o[i]=e[n]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(o,e){Object.defineProperty(o,"default",{enumerable:!0,value:e})}):function(o,e){o.default=e}),__importStar=this&&this.__importStar||(function(){var o=function(e){return o=Object.getOwnPropertyNames||function(n){var i=[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(i[i.length]=r);return i},o(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var i=o(e),r=0;r<i.length;r++)i[r]!=="default"&&__createBinding(n,e,i[r]);return __setModuleDefault(n,e),n}})(),__importDefault=this&&this.__importDefault||function(o){return o&&o.__esModule?o:{default:o}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DebuggingTab=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),QRCodeView_1=__importDefault(require("../QRCodeView")),TouchableScale_1=__importDefault(require("../TouchableScale")),toast_1=require("../../helpers/toast"),NativeInspector_1=require("../../native/NativeInspector"),NetworkIcons_1=require("../NetworkIcons"),react_native_svg_1=__importStar(require("react-native-svg")),TerminalConsoleIcon=({color:o=AppColors_1.AppColors.purple,size:e=13})=><react_native_svg_1.default width={e}height={e}viewBox="0 0 24 24"fill="none">
2
+ <react_native_svg_1.Path d="M4 17l6-6-6-6M12 19h8"stroke={o}strokeWidth="2"strokeLinecap="round"strokeLinejoin="round"/>
3
+ </react_native_svg_1.default>,DebuggingTab=()=>{const{t:o}=(0,i18n_1.useTranslation)(),e=(0,react_1.useMemo)(()=>{const a=react_native_1.NativeModules.SourceCode?.scriptURL||"";let s="localhost",t=8081;try{if(a.includes("://")){const d=a.split("://")[1].split("/")[0];if(d.includes(":")){const u=d.split(":");s=u[0];const y=parseInt(u[1],10);isNaN(y)||(t=y)}else s=d}}catch{}return{host:s,port:t,scriptURL:a}},[]),[n,i]=(0,react_1.useState)(()=>e.host&&e.host!=="localhost"&&e.host!=="127.0.0.1"&&e.host!=="10.0.2.2"?e.host:"192.168.1.2"),[r,B]=(0,react_1.useState)(e.port||8083),[V,m]=(0,react_1.useState)("app-debug.apk"),[T,x]=(0,react_1.useState)(null),[g,v]=(0,react_1.useState)("assembleRelease"),[f,k]=(0,react_1.useState)(!0),[l,w]=(0,react_1.useState)({status:"idle",scheme:"assembleRelease",clean:!0,progress:0,currentTask:"",error:null,apkName:null,apkSize:null}),p=(0,react_1.useRef)(null),_=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,[A,I]=(0,react_1.useState)(!0),S=(0,react_1.useRef)(null);(0,react_1.useEffect)(()=>{react_native_1.Animated.timing(_,{toValue:Math.max(0,Math.min(100,l.progress)),duration:350,useNativeDriver:!1}).start()},[l.progress,_]),(0,react_1.useEffect)(()=>{l.logs&&l.logs.length>0&&setTimeout(()=>{S.current?.scrollToEnd({animated:!0})},50)},[l.logs]);const C=(0,react_1.useCallback)(async()=>{const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([e.port,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1200),y=await fetch(`http://${t}:${h}/__inapp_inspector/apk-info`,{signal:d.signal});if(clearTimeout(u),y.ok){const c=await y.json();c.hostIp&&c.hostIp!=="127.0.0.1"&&c.hostIp!=="localhost"&&c.hostIp!=="10.0.2.2"&&i(c.hostIp),c.port&&B(c.port),c.apkName&&m(c.apkName),c.apkSize&&x((c.apkSize/(1024*1024)).toFixed(1));return}}catch{}},[e.host,e.port]);(0,react_1.useEffect)(()=>{C()},[C]),(0,react_1.useEffect)(()=>()=>{p.current&&clearInterval(p.current)},[]);const R=(0,react_1.useCallback)(()=>{p.current&&clearInterval(p.current);const a=e.host||"10.0.2.2";p.current=setInterval(async()=>{try{const s=await fetch(`http://${a}:${r}/__inapp_inspector/build-status`);if(s.ok){const t=await s.json();w(t),t.status==="completed"?(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("success"),(0,toast_1.showToast)(o("debugging.buildSuccess","APK Build Generated Successfully!")),t.apkSize&&x((t.apkSize/(1024*1024)).toFixed(1)),t.apkName&&m(t.apkName),C()):t.status==="failed"&&(p.current&&clearInterval(p.current),(0,NativeInspector_1.triggerNativeHaptic)("error"),(0,toast_1.showToast)(o("debugging.buildFailed",{error:t.error||"Gradle error"})))}}catch{}},1e3)},[e.host,r,C]),F=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("medium"),w({status:"running",scheme:g,clean:f,progress:5,currentTask:f?"Cleaning build cache...":"Initializing build...",error:null,apkName:null,apkSize:null});const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));let t=!1;for(const h of a)for(const d of s)try{const u=new AbortController,y=setTimeout(()=>u.abort(),2e3),c=await fetch(`http://${h}:${d}/__inapp_inspector/build-apk?scheme=${g}&clean=${f}`,{signal:u.signal});if(clearTimeout(y),c.ok){t=!0,R();return}}catch{}t||w(h=>({...h,status:"failed",error:"Cannot reach build server. Ensure npm start or npm run serve-apk is running on host."}))},D=async()=>{(0,NativeInspector_1.triggerNativeHaptic)("warning"),p.current&&clearInterval(p.current);const a=Array.from(new Set([e.host,"10.0.2.2","localhost","127.0.0.1"].filter(Boolean))),s=Array.from(new Set([r,8083,8081,8082].filter(Boolean)));for(const t of a)for(const h of s)try{const d=new AbortController,u=setTimeout(()=>d.abort(),1500);await fetch(`http://${t}:${h}/__inapp_inspector/stop-build`,{signal:d.signal}),clearTimeout(u)}catch{}w(t=>({...t,status:"idle",currentTask:o("debugging.buildCancelled","Build cancelled by user"),logs:[...t.logs||[],`[Build] ${o("debugging.buildCancelled","Build cancelled by user")}.`]})),(0,toast_1.showToast)(o("debugging.buildCancelled","Build cancelled"))},z=`http://${n}:${r}/${V.replace(/^\/+/,"")}`,b=l.status==="running";return<react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
4
4
 
5
5
  <react_native_1.View style={styles.heroCard}>
6
6
  <react_native_1.View style={styles.heroHeader}>
@@ -26,7 +26,7 @@
26
26
  <react_native_1.View style={styles.heroMetricItem}>
27
27
  <react_native_1.Text style={styles.heroMetricLabel}>HOST IP</react_native_1.Text>
28
28
  <react_native_1.Text style={styles.heroMetricValue}numberOfLines={1}>
29
- {o}
29
+ {n}
30
30
  </react_native_1.Text>
31
31
  </react_native_1.View>
32
32
  <react_native_1.View style={styles.heroMetricDivider}/>
@@ -64,7 +64,7 @@
64
64
 
65
65
  <react_native_1.View style={styles.qrCenteredWrapper}>
66
66
  <react_native_1.View style={styles.qrInnerFrame}>
67
- <QRCodeView_1.default value={D}size={235}color={AppColors_1.AppColors.primaryBlack}backgroundColor={AppColors_1.AppColors.white}/>
67
+ <QRCodeView_1.default value={z}size={235}color={AppColors_1.AppColors.primaryBlack}backgroundColor={AppColors_1.AppColors.white}/>
68
68
  </react_native_1.View>
69
69
  </react_native_1.View>
70
70
  </react_native_1.View>
@@ -76,7 +76,7 @@
76
76
  <NetworkIcons_1.BoltIcon size={13}color={AppColors_1.AppColors.purple}/>
77
77
  <react_native_1.Text style={styles.sectionTitle}>BUILD GENERATOR (GRADLE)</react_native_1.Text>
78
78
  </react_native_1.View>
79
- {i.status==="completed"&&<react_native_1.View style={styles.completedBadge}>
79
+ {l.status==="completed"&&<react_native_1.View style={styles.completedBadge}>
80
80
  <NetworkIcons_1.CheckIcon size={10}color={AppColors_1.AppColors.emerald500}/>
81
81
  <react_native_1.Text style={styles.completedBadgeText}>100% Ready</react_native_1.Text>
82
82
  </react_native_1.View>}
@@ -104,7 +104,7 @@
104
104
  </react_native_1.View>
105
105
 
106
106
 
107
- <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),V(!f)}}style={styles.cleanRow}>
107
+ <react_native_1.TouchableOpacity disabled={b}activeOpacity={.7}onPress={()=>{(0,NativeInspector_1.triggerNativeHaptic)("light"),k(!f)}}style={styles.cleanRow}>
108
108
  <react_native_1.View style={[styles.checkboxBox,f&&styles.checkboxBoxActive]}>
109
109
  {f&&<NetworkIcons_1.CheckIcon size={11}color={AppColors_1.AppColors.white}/>}
110
110
  </react_native_1.View>
@@ -119,11 +119,11 @@
119
119
  <react_native_1.View style={styles.progressTaskGroup}>
120
120
  <react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.purple}/>
121
121
  <react_native_1.Text style={styles.progressTaskText}numberOfLines={1}>
122
- {i.currentTask||"Executing Gradle tasks..."}
122
+ {l.currentTask||"Executing Gradle tasks..."}
123
123
  </react_native_1.Text>
124
124
  </react_native_1.View>
125
125
  <react_native_1.Text style={styles.progressPercentageText}>
126
- {i.progress}%
126
+ {l.progress}%
127
127
  </react_native_1.Text>
128
128
  </react_native_1.View>
129
129
 
@@ -134,21 +134,21 @@
134
134
  </react_native_1.View>}
135
135
 
136
136
 
137
- {i.status==="failed"&&<react_native_1.View style={styles.errorContainer}>
137
+ {l.status==="failed"&&<react_native_1.View style={styles.errorContainer}>
138
138
  <NetworkIcons_1.CircleXIcon size={13}color={AppColors_1.AppColors.errorColor}/>
139
139
  <react_native_1.Text style={styles.errorText}numberOfLines={2}>
140
- {i.error||"Build execution failed."}
140
+ {l.error||"Build execution failed."}
141
141
  </react_native_1.Text>
142
142
  </react_native_1.View>}
143
143
 
144
144
 
145
- {(i.logs&&i.logs.length>0||b)&&<react_native_1.View style={styles.consoleContainer}>
145
+ {(l.logs&&l.logs.length>0||b)&&<react_native_1.View style={styles.consoleContainer}>
146
146
  <react_native_1.View style={styles.consoleHeaderRow}>
147
147
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",gap:6}}>
148
148
  <TerminalConsoleIcon color={AppColors_1.AppColors.sky400}size={12}/>
149
149
  <react_native_1.Text style={styles.consoleHeaderTitle}>GRADLE VERBOSE OUTPUT</react_native_1.Text>
150
150
  </react_native_1.View>
151
- <react_native_1.TouchableOpacity activeOpacity={.7}onPress={()=>k(!A)}style={styles.consoleToggleBtn}>
151
+ <react_native_1.TouchableOpacity activeOpacity={.7}onPress={()=>I(!A)}style={styles.consoleToggleBtn}>
152
152
  <react_native_1.Text style={styles.consoleToggleText}>
153
153
  {A?"Hide Console":"Show Console"}
154
154
  </react_native_1.Text>
@@ -156,7 +156,7 @@
156
156
  </react_native_1.View>
157
157
 
158
158
  {A&&<react_native_1.ScrollView ref={S}style={styles.consoleLogBox}contentContainerStyle={styles.consoleLogContent}nestedScrollEnabled showsVerticalScrollIndicator>
159
- {i.logs&&i.logs.length>0?i.logs.map((a,s)=>{let t=AppColors_1.AppColors.slate400;return a.startsWith("> Task :")?t=AppColors_1.AppColors.sky400:a.includes("BUILD SUCCESSFUL")?t=AppColors_1.AppColors.buildSuccessGreen:a.includes("FAILURE")||a.includes("error:")?t=AppColors_1.AppColors.buildFailureRed:a.includes("UP-TO-DATE")&&(t=AppColors_1.AppColors.purple400),<react_native_1.Text key={s}style={[styles.consoleLogLine,{color:t}]}>
159
+ {l.logs&&l.logs.length>0?l.logs.map((a,s)=>{let t=AppColors_1.AppColors.slate400;return a.startsWith("> Task :")?t=AppColors_1.AppColors.sky400:a.includes("BUILD SUCCESSFUL")?t=AppColors_1.AppColors.buildSuccessGreen:a.includes("FAILURE")||a.includes("error:")?t=AppColors_1.AppColors.buildFailureRed:a.includes("UP-TO-DATE")&&(t=AppColors_1.AppColors.purple400),<react_native_1.Text key={s}style={[styles.consoleLogLine,{color:t}]}>
160
160
  {a}
161
161
  </react_native_1.Text>}):<react_native_1.Text style={styles.consoleLogPlaceholder}>
162
162
  Waiting for Gradle daemon output...
@@ -169,15 +169,15 @@
169
169
  <react_native_1.View style={styles.buildingStatusPill}>
170
170
  <react_native_1.ActivityIndicator size="small"color={AppColors_1.AppColors.purple}/>
171
171
  <react_native_1.Text style={styles.buildingStatusPillText}numberOfLines={1}>
172
- Building ({i.progress}%)
172
+ Building ({l.progress}%)
173
173
  </react_native_1.Text>
174
174
  </react_native_1.View>
175
175
 
176
- <TouchableScale_1.default onPress={F}style={styles.stopBtn}>
176
+ <TouchableScale_1.default onPress={D}style={styles.stopBtn}>
177
177
  <NetworkIcons_1.CircleXIcon size={13}color={AppColors_1.AppColors.white}/>
178
178
  <react_native_1.Text style={styles.stopBtnText}>Stop Build</react_native_1.Text>
179
179
  </TouchableScale_1.default>
180
- </react_native_1.View>:<TouchableScale_1.default onPress={R}style={styles.generateBtn}>
180
+ </react_native_1.View>:<TouchableScale_1.default onPress={F}style={styles.generateBtn}>
181
181
  <react_native_1.View style={styles.ctaContentRow}>
182
182
  <NetworkIcons_1.SparkleIcon size={14}color={AppColors_1.AppColors.white}/>
183
183
  <react_native_1.Text style={styles.generateBtnText}>
@@ -88,7 +88,7 @@
88
88
  </react_native_1.View>
89
89
 
90
90
 
91
- <react_native_1.ScrollView style={styles.scrollArea}contentContainerStyle={styles.scrollContent}showsVerticalScrollIndicator={!1}>
91
+ <react_native_1.ScrollView style={[styles.scrollArea,{flex:1}]}contentContainerStyle={[styles.scrollContent,{flexGrow:1}]}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}keyboardShouldPersistTaps="handled">
92
92
 
93
93
  {(!o.trim()||e("UDID Identifier",b)||e("UUID",b)||e("Device UUID",b))&&<react_native_1.View style={styles.featuredUuidCard}>
94
94
  <react_native_1.View style={styles.featuredUuidHeader}>
@@ -1,19 +1,12 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,r,a,n){n===void 0&&(n=a);var o=Object.getOwnPropertyDescriptor(r,a);(!o||("get"in o?!r.__esModule:o.writable||o.configurable))&&(o={enumerable:!0,get:function(){return r[a]}}),Object.defineProperty(t,n,o)}):(function(t,r,a,n){n===void 0&&(n=a),t[n]=r[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(t,r){Object.defineProperty(t,"default",{enumerable:!0,value:r})}):function(t,r){t.default=r}),__importStar=this&&this.__importStar||(function(){var t=function(r){return t=Object.getOwnPropertyNames||function(a){var n=[];for(var o in a)Object.prototype.hasOwnProperty.call(a,o)&&(n[n.length]=o);return n},t(r)};return function(r){if(r&&r.__esModule)return r;var a={};if(r!=null)for(var n=t(r),o=0;o<n.length;o++)n[o]!=="default"&&__createBinding(a,r,n[o]);return __setModuleDefault(a,r),a}})(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppHeaderLogo_1=__importDefault(require("../AppHeaderLogo")),BrandCircleIcon_1=__importDefault(require("../BrandCircleIcon")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),helpers_1=require("../../helpers"),constants_1=require("../../constants"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),styles_1=__importDefault(require("../../styles")),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FabLauncher=()=>{const{setVisible:t,isMinimized:r,setIsMinimized:a,appIcon:n,fabPan:o,fabPanResponder:v,fabDraggedRef:C,pulseAnim:S,fabShineAnim:y,refreshMediaCount:u}=(0,InspectorContext_1.useInspector)(),{width:x}=(0,react_native_1.useWindowDimensions)(),{t:s}=(0,i18n_1.useTranslation)(),[R]=(0,react_1.useState)(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),[c,g]=(0,react_1.useState)(!1),[A,b]=(0,react_1.useState)(0),p=(0,react_1.useRef)(null),[_,h]=(0,react_1.useState)(null),l=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,m=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(f=>m.current.x=f.value),i=l.y.addListener(f=>m.current.y=f.value);return()=>{l.x.removeListener(e),l.y.removeListener(i)}},[l]);const d=(0,react_1.useRef)(!1),T=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,i)=>Math.abs(i.dx)>4||Math.abs(i.dy)>4,onPanResponderGrant:()=>{d.current=!0,l.setOffset({x:m.current.x,y:m.current.y}),l.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:l.x,dy:l.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{l.flattenOffset(),setTimeout(()=>{d.current=!1},50)},onPanResponderTerminate:()=>{l.flattenOffset(),d.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{g(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(c?(b(0),p.current=setInterval(()=>{b(e=>e+1)},1e3)):(p.current&&(clearInterval(p.current),p.current=null),b(0)),()=>{p.current&&clearInterval(p.current)}),[c]);const I=(0,react_1.useCallback)(async()=>{if(!d.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const i={id:`screenshot_${e.timestamp}.png`,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`screenshot_${e.timestamp}.png`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};h(i),u?.().catch(()=>{}),(0,toast_1.showToast)(s("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(s("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(s("header.screenshotError","Error capturing screenshot"))}},[u,s]),V=(0,react_1.useCallback)(async()=>{if(!d.current)try{if(c){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(g(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const i={id:`video_${e.timestamp}.${e.format}`,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`video_${e.timestamp}.${e.format}`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio};h(i),u?.().catch(()=>{}),(0,toast_1.showToast)(s("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:24,audioSource:"none"})?(g(!0),(0,toast_1.showToast)(s("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(s("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(s("header.recordingError","Error during screen recording")),g(!1)}},[c,u,s]),w=(0,react_1.useCallback)(()=>{d.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),t(!0))},[a,t]),P=(0,react_1.useCallback)(()=>{d.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),t(!1))},[a,t]),M=e=>{const i=Math.floor(e/60),f=e%60;return`${i}:${f<10?"0":""}${f}`};return<>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,i,o,a){a===void 0&&(a=o);var s=Object.getOwnPropertyDescriptor(i,o);(!s||("get"in s?!i.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return i[o]}}),Object.defineProperty(r,a,s)}):(function(r,i,o,a){a===void 0&&(a=o),r[a]=i[o]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,i){Object.defineProperty(r,"default",{enumerable:!0,value:i})}):function(r,i){r.default=i}),__importStar=this&&this.__importStar||(function(){var r=function(i){return r=Object.getOwnPropertyNames||function(o){var a=[];for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(a[a.length]=s);return a},r(i)};return function(i){if(i&&i.__esModule)return i;var o={};if(i!=null)for(var a=r(i),s=0;s<a.length;s++)a[s]!=="default"&&__createBinding(o,i,a[s]);return __setModuleDefault(o,i),o}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0});const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppHeaderLogo_1=__importDefault(require("../AppHeaderLogo")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),helpers_1=require("../../helpers"),constants_1=require("../../constants"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),styles_1=__importDefault(require("../../styles")),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FabLauncher=()=>{const{setVisible:r,isMinimized:i,setIsMinimized:o,dismissInspector:a,appIcon:s,fabPan:l,fabPanResponder:ie,fabDraggedRef:T,pulseAnim:k,fabShineAnim:oe,refreshMediaCount:g,captureFps:L,captureScale:E,captureBitrate:O,captureMaxDurationSeconds:q,captureAudioMode:H}=(0,InspectorContext_1.useInspector)(),{width:_,height:b}=(0,react_native_1.useWindowDimensions)(),{t:n}=(0,i18n_1.useTranslation)(),[X]=(0,react_1.useState)(()=>(0,helpers_1.getAppVersionAndBuild)().formatted),[p,I]=(0,react_1.useState)(!1),[Z,D]=(0,react_1.useState)(0),v=(0,react_1.useRef)(null),[$,C]=(0,react_1.useState)(null),[G,B]=(0,react_1.useState)(!1),[z,S]=(0,react_1.useState)(!1),f=(0,react_1.useRef)(!1),x=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,P=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,y=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(c=>y.current.x=c.value),t=l.y.addListener(c=>y.current.y=c.value);return()=>{l.x.removeListener(e),l.y.removeListener(t)}},[l]);const u=68,V=8,U=(0,react_1.useCallback)(()=>{const e=y.current.x,t=y.current.y,c=20,A=180,m=_-c-u/2+e,M=b-A-u/2+t;let N=e,F=t,R=!1;m<V+u/2?(N=e+(V+u/2-m),R=!0):m>_-V-u/2&&(N=e-(m-(_-V-u/2)),R=!0);const j=react_native_1.Platform.OS==="ios"?60:40,Y=react_native_1.Platform.OS==="ios"?40:24;M<j+u/2?(F=t+(j+u/2-M),R=!0):M>b-Y-u/2&&(F=t-(M-(b-Y-u/2)),R=!0),R&&react_native_1.Animated.spring(l,{toValue:{x:N,y:F},useNativeDriver:!1,tension:80,friction:8}).start()},[l,_,b]),K=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{T.current=!0,l.setOffset({x:y.current.x,y:y.current.y}),l.setValue({x:0,y:0}),f.current=!1,S(!1),B(!0),P.setValue(1),react_native_1.Animated.spring(x,{toValue:1,useNativeDriver:!0,tension:80,friction:8}).start()},onPanResponderMove:(e,t)=>{l.setValue({x:t.dx,y:t.dy});const c=t.moveY,A=t.moveX,m=c>b-140&&Math.abs(A-_/2)<85;m&&!f.current?(f.current=!0,S(!0),(0,NativeInspector_1.triggerNativeHaptic)("medium"),react_native_1.Animated.spring(P,{toValue:1.25,useNativeDriver:!0,tension:100,friction:6}).start()):!m&&f.current&&(f.current=!1,S(!1),react_native_1.Animated.spring(P,{toValue:1,useNativeDriver:!0,tension:100,friction:6}).start())},onPanResponderRelease:()=>{const e=f.current;l.flattenOffset(),react_native_1.Animated.timing(x,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{B(!1),S(!1),f.current=!1}),e?((0,NativeInspector_1.triggerNativeHaptic)("heavy"),a(),(0,toast_1.showToast)(n("common.inspectorDismissed","In-App Inspector closed for this session"))):U(),setTimeout(()=>{T.current=!1},100)},onPanResponderTerminate:()=>{l.flattenOffset(),T.current=!1,react_native_1.Animated.timing(x,{toValue:0,duration:180,useNativeDriver:!0}).start(()=>{B(!1),S(!1),f.current=!1})}})).current,d=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,w=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=d.x.addListener(c=>w.current.x=c.value),t=d.y.addListener(c=>w.current.y=c.value);return()=>{d.x.removeListener(e),d.y.removeListener(t)}},[d]);const h=(0,react_1.useRef)(!1),J=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>4||Math.abs(t.dy)>4,onPanResponderGrant:()=>{h.current=!0,d.setOffset({x:w.current.x,y:w.current.y}),d.setValue({x:0,y:0})},onPanResponderMove:react_native_1.Animated.event([null,{dx:d.x,dy:d.y}],{useNativeDriver:!1}),onPanResponderRelease:()=>{d.flattenOffset();const e=w.current.y,t=-(b-(react_native_1.Platform.OS==="ios"?34:18)-70),c=react_native_1.Platform.OS==="ios"?34:18;if(e<t||e>c){const A=Math.max(t,Math.min(c,e));react_native_1.Animated.spring(d,{toValue:{x:w.current.x,y:A},useNativeDriver:!1,tension:80,friction:8}).start()}setTimeout(()=>{h.current=!1},50)},onPanResponderTerminate:()=>{d.flattenOffset(),h.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{I(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(p?(D(0),v.current=setInterval(()=>{D(e=>e+1)},1e3)):(v.current&&(clearInterval(v.current),v.current=null),D(0)),()=>{v.current&&clearInterval(v.current)}),[p]);const Q=(0,react_1.useCallback)(async()=>{if(!h.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light");const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!0});if(e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t={id:`screenshot_${e.timestamp}.png`,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`screenshot_${e.timestamp}.png`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};C(t),g?.().catch(()=>{}),(0,toast_1.showToast)(n("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(n("header.screenshotFailed","Failed to capture screenshot"))}catch{(0,toast_1.showToast)(n("header.screenshotError","Error capturing screenshot"))}},[g,n]),ee=(0,react_1.useCallback)(async()=>{if(!h.current)try{if(p){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(I(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t={id:`video_${e.timestamp}.${e.format}`,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`video_${e.timestamp}.${e.format}`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};C(t),g?.().catch(()=>{}),(0,toast_1.showToast)(n("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:L,scale:E,audioSource:H,bitrate:O>0?O:void 0,maxDurationSeconds:q})?(I(!0),(0,toast_1.showToast)(n("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(n("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(n("header.recordingError","Error during screen recording")),I(!1)}},[p,L,E,O,q,H,g,n]),W=(0,react_1.useCallback)(()=>{h.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),o?.(!1),r(!0))},[o,r]),te=(0,react_1.useCallback)(()=>{h.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),o?.(!1),r(!1))},[o,r]),re=e=>{const t=Math.floor(e/60),c=e%60;return`${t}:${c<10?"0":""}${c}`};return<>
2
2
 
3
- {r?<react_native_1.Animated.View style={[fabStyles.playerContainer,{transform:l.getTranslateTransform()}]}{...T.panHandlers}>
3
+ {i?<react_native_1.Animated.View style={[fabStyles.playerContainer,{transform:d.getTranslateTransform()}]}{...J.panHandlers}>
4
4
 
5
5
  <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={fabStyles.gradientBg}pointerEvents="none"/>
6
6
 
7
7
 
8
- <react_native_1.View pointerEvents="none"style={fabStyles.playerShineClip}>
9
- <react_native_1.Animated.View style={[fabStyles.playerShineStreak,{transform:[{translateX:y.interpolate({inputRange:[0,1],outputRange:[-80,x+80]})},{rotate:"28deg"}]}]}>
10
- <react_native_linear_gradient_1.default colors={["rgba(255, 255, 255, 0)","rgba(255, 255, 255, 0.18)","rgba(255, 255, 255, 0.70)","rgba(255, 255, 255, 1)","rgba(255, 255, 255, 0.70)","rgba(255, 255, 255, 0.18)","rgba(255, 255, 255, 0)"]}locations={[0,.22,.44,.5,.56,.78,1]}start={{x:0,y:.5}}end={{x:1,y:.5}}style={{flex:1}}/>
11
- </react_native_1.Animated.View>
12
- </react_native_1.View>
13
-
14
-
15
- <react_native_1.TouchableOpacity activeOpacity={.75}onPress={w}style={fabStyles.brandSection}accessibilityRole="button"accessibilityLabel={s("mediaGallery.expand","Expand Inspector")}>
16
- <AppHeaderLogo_1.default size={36}customIcon={n}/>
8
+ <react_native_1.TouchableOpacity activeOpacity={.75}onPress={W}style={fabStyles.brandSection}accessibilityRole="button"accessibilityLabel={n("mediaGallery.expand","Expand Inspector")}>
9
+ <AppHeaderLogo_1.default size={36}customIcon={s}shape="circle"/>
17
10
  <react_native_1.View style={fabStyles.titleWrapper}>
18
11
  <react_native_1.Text style={fabStyles.appTitle}numberOfLines={1}>
19
12
  {(0,helpers_1.getAppName)()}
@@ -23,7 +16,7 @@
23
16
  <react_native_1.View style={fabStyles.versionChip}>
24
17
  {react_native_1.Platform.OS==="ios"?<NetworkIcons_1.AppleIcon color={`${AppColors_1.AppColors.white}E6`}size={9}/>:<NetworkIcons_1.AndroidIcon color={`${AppColors_1.AppColors.white}E6`}size={9}/>}
25
18
  <react_native_1.Text style={fabStyles.versionChipText}numberOfLines={1}>
26
- {R}
19
+ {X}
27
20
  </react_native_1.Text>
28
21
  </react_native_1.View>
29
22
 
@@ -41,44 +34,48 @@
41
34
 
42
35
  <react_native_1.View style={fabStyles.actionsRow}>
43
36
 
44
- <TouchableScale_1.default onPress={I}hitSlop={{top:6,bottom:6,left:4,right:4}}style={fabStyles.actionBtn}>
45
- <NetworkIcons_1.CameraIcon size={12}color={AppColors_1.AppColors.white}/>
37
+ <TouchableScale_1.default onPress={Q}hitSlop={{top:6,bottom:6,left:4,right:4}}style={fabStyles.actionBtn}>
38
+ <NetworkIcons_1.ScreenshotCaptureIcon size={12}color={AppColors_1.AppColors.white}/>
46
39
  <react_native_1.Text style={fabStyles.actionText}>
47
- {s("header.photo","Photo")}
40
+ {n("header.photo","Photo")}
48
41
  </react_native_1.Text>
49
42
  </TouchableScale_1.default>
50
43
 
51
44
 
52
- <TouchableScale_1.default onPress={V}hitSlop={{top:6,bottom:6,left:4,right:4}}style={[fabStyles.actionBtn,c&&fabStyles.recordingBtnActive]}>
53
- {c?<react_native_1.View style={fabStyles.recordingDot}/>:<NetworkIcons_1.VideoCameraIcon size={12}color={AppColors_1.AppColors.white}/>}
54
- <react_native_1.Text style={[fabStyles.actionText,c&&{color:AppColors_1.AppColors.red300}]}>
55
- {c?`${s("header.rec","REC")} ${M(A)}`:s("header.record","Record")}
45
+ <TouchableScale_1.default onPress={ee}hitSlop={{top:6,bottom:6,left:4,right:4}}style={[fabStyles.actionBtn,p&&fabStyles.recordingBtnActive]}>
46
+ {p?<react_native_1.View style={fabStyles.recordingDot}/>:<NetworkIcons_1.ScreenRecordIcon size={12}color={AppColors_1.AppColors.white}/>}
47
+ <react_native_1.Text style={[fabStyles.actionText,p&&{color:AppColors_1.AppColors.red300}]}>
48
+ {p?`${n("header.rec","REC")} ${re(Z)}`:n("header.record","Record")}
56
49
  </react_native_1.Text>
57
50
  </TouchableScale_1.default>
58
51
 
59
52
 
60
- <TouchableScale_1.default onPress={w}hitSlop={{top:6,bottom:6,left:4,right:4}}accessibilityRole="button"accessibilityLabel={s("common.expand","Expand")}style={fabStyles.actionBtnSquare}>
53
+ <TouchableScale_1.default onPress={W}hitSlop={{top:6,bottom:6,left:4,right:4}}accessibilityRole="button"accessibilityLabel={n("common.expand","Expand")}style={fabStyles.actionBtnSquare}>
61
54
  <NetworkIcons_1.MaximizeIcon size={12}color={AppColors_1.AppColors.white}/>
62
55
  </TouchableScale_1.default>
63
56
 
64
57
 
65
- <TouchableScale_1.default onPress={P}hitSlop={{top:6,bottom:6,left:4,right:6}}accessibilityRole="button"accessibilityLabel={s("common.close","Close")}style={fabStyles.actionBtnSquare}>
58
+ <TouchableScale_1.default onPress={te}hitSlop={{top:6,bottom:6,left:4,right:6}}accessibilityRole="button"accessibilityLabel={n("common.close","Close")}style={fabStyles.actionBtnSquare}>
66
59
  <NetworkIcons_1.CloseWhite size={10}color={AppColors_1.AppColors.white}/>
67
60
  </TouchableScale_1.default>
68
61
  </react_native_1.View>
69
- </react_native_1.Animated.View>:<react_native_1.Animated.View style={[styles_1.default.fabWrapper,{transform:o.getTranslateTransform()}]}{...v.panHandlers}>
70
- <TouchableScale_1.default style={{alignItems:"center",justifyContent:"center"}}onPress={()=>{C.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),t(!0))}}hitSlop={10}>
71
- <react_native_1.Animated.View style={[styles_1.default.fabPulseRing,{transform:[{scale:S}]}]}/>
72
- <BrandCircleIcon_1.default size={62}/>
73
-
74
- <react_native_1.View pointerEvents="none"style={styles_1.default.fabShineClip}>
75
- <react_native_1.Animated.View style={[styles_1.default.fabShineStreak,{transform:[{translateX:y.interpolate({inputRange:[0,1],outputRange:[-48,96]})},{rotate:"25deg"}]}]}>
76
- <react_native_linear_gradient_1.default colors={["rgba(255, 255, 255, 0)","rgba(255, 255, 255, 0.25)","rgba(255, 255, 255, 0.95)","rgba(255, 255, 255, 0.25)","rgba(255, 255, 255, 0)"]}locations={[0,.25,.5,.75,1]}start={{x:0,y:.5}}end={{x:1,y:.5}}style={{flex:1}}/>
77
- </react_native_1.Animated.View>
78
- </react_native_1.View>
62
+ </react_native_1.Animated.View>:<react_native_1.Animated.View style={[styles_1.default.fabWrapper,{transform:l.getTranslateTransform()}]}{...K.panHandlers}>
63
+ <TouchableScale_1.default style={{alignItems:"center",justifyContent:"center"}}onPress={()=>{T.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),r(!0))}}hitSlop={10}>
64
+ <react_native_1.Animated.View style={[styles_1.default.fabPulseRing,{transform:[{scale:k}]}]}/>
65
+ <AppHeaderLogo_1.default size={68}customIcon={s}shape="circle"/>
79
66
  </TouchableScale_1.default>
80
67
  </react_native_1.Animated.View>}
81
68
 
82
69
 
83
- <MediaPreviewModal_1.MediaPreviewModal item={_}visible={!!_}onClose={()=>h(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),u?.().catch(()=>{}),h(null)}}onConvertToGif={async e=>{const i=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});i&&(u?.().catch(()=>{}),h({id:`anim_${i.timestamp}.gif`,type:"gif",format:"gif",uri:i.uri,filename:i.uri.split("/").pop()||`anim_${i.timestamp}.gif`,sizeBytes:i.sizeBytes,timestamp:i.timestamp,durationMs:i.durationMs}))}}/>
84
- </>},fabStyles=react_native_1.StyleSheet.create({playerContainer:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?34:18,left:12,right:12,minHeight:58,flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderRadius:16,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.28)",paddingHorizontal:12,paddingVertical:7,gap:8,zIndex:99999,elevation:25,shadowColor:AppColors_1.AppColors.indigo600,shadowOffset:{width:0,height:8},shadowOpacity:.45,shadowRadius:14,overflow:"hidden"},gradientBg:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16},playerShineClip:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16,overflow:"hidden"},playerShineStreak:{position:"absolute",top:-60,width:75,height:200},brandSection:{flexDirection:"row",alignItems:"center",gap:9,flex:1,minWidth:0,paddingVertical:2},titleWrapper:{flex:1,minWidth:0,justifyContent:"center",gap:2},appTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.white,letterSpacing:-.2},versionRow:{flexDirection:"row",alignItems:"center",gap:4,minWidth:0},versionChip:{flexDirection:"row",alignItems:"center",backgroundColor:`${AppColors_1.AppColors.white}1F`,borderRadius:5,paddingHorizontal:5,paddingVertical:1.5,gap:3,borderWidth:1,borderColor:`${AppColors_1.AppColors.white}2E`,flexShrink:1,minWidth:0},versionChipText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:8.5,color:`${AppColors_1.AppColors.white}EB`,letterSpacing:.1},actionsRow:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},actionBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:"rgba(255, 255, 255, 0.22)",paddingHorizontal:8,paddingVertical:5.5,borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},actionBtnSquare:{alignItems:"center",justifyContent:"center",width:27,height:27,backgroundColor:"rgba(255, 255, 255, 0.22)",borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},recordingBtnActive:{backgroundColor:"rgba(239, 68, 68, 0.32)",borderColor:AppColors_1.AppColors.red500},recordingDot:{width:6,height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.red500},actionText:{fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:10.5,color:AppColors_1.AppColors.white}});exports.default=FabLauncher;
70
+ {G&&<react_native_1.Animated.View pointerEvents="none"style={[fabStyles.dismissTargetContainer,{opacity:x,transform:[{translateY:x.interpolate({inputRange:[0,1],outputRange:[30,0]})},{scale:P}]}]}>
71
+ <react_native_1.View style={[fabStyles.dismissTargetCircle,z&&fabStyles.dismissTargetCircleActive]}>
72
+ <NetworkIcons_1.CloseWhite size={18}color={AppColors_1.AppColors.white}/>
73
+ </react_native_1.View>
74
+ <react_native_1.Text style={[fabStyles.dismissTargetLabel,z&&fabStyles.dismissTargetLabelActive]}>
75
+ {z?n("common.releaseToHide","Release to hide"):n("common.dragToHide","Drag here to hide")}
76
+ </react_native_1.Text>
77
+ </react_native_1.Animated.View>}
78
+
79
+
80
+ <MediaPreviewModal_1.MediaPreviewModal item={$}visible={!!$}onClose={()=>C(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),g?.().catch(()=>{}),C(null)}}onConvertToGif={async e=>{const t=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});t&&(g?.().catch(()=>{}),C({id:`anim_${t.timestamp}.gif`,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||`anim_${t.timestamp}.gif`,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs}))}}/>
81
+ </>},fabStyles=react_native_1.StyleSheet.create({dismissTargetContainer:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?42:26,left:0,right:0,alignItems:"center",justifyContent:"center",zIndex:999998},dismissTargetCircle:{width:54,height:54,borderRadius:27,backgroundColor:"rgba(23, 23, 37, 0.82)",borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.28)",alignItems:"center",justifyContent:"center",shadowColor:AppColors_1.AppColors.black,shadowOffset:{width:0,height:6},shadowOpacity:.4,shadowRadius:10,elevation:16},dismissTargetCircleActive:{backgroundColor:AppColors_1.AppColors.red600,borderColor:AppColors_1.AppColors.red300,shadowColor:AppColors_1.AppColors.red600,shadowOpacity:.65,shadowRadius:18,transform:[{scale:1.06}]},dismissTargetLabel:{marginTop:6,fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:11,color:"rgba(255, 255, 255, 0.85)",textShadowColor:"rgba(0, 0, 0, 0.6)",textShadowOffset:{width:0,height:1},textShadowRadius:3},dismissTargetLabelActive:{color:AppColors_1.AppColors.red300,fontFamily:AppFonts_1.AppFonts.interBold},playerContainer:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?34:18,left:12,right:12,minHeight:58,flexDirection:"row",alignItems:"center",justifyContent:"space-between",borderRadius:16,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.28)",paddingHorizontal:12,paddingVertical:7,gap:8,zIndex:99999,elevation:25,shadowColor:AppColors_1.AppColors.indigo600,shadowOffset:{width:0,height:8},shadowOpacity:.45,shadowRadius:14,overflow:"hidden"},gradientBg:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16},playerShineClip:{position:"absolute",top:0,left:0,right:0,bottom:0,borderRadius:16,overflow:"hidden"},playerShineStreak:{position:"absolute",top:-60,width:75,height:200},brandSection:{flexDirection:"row",alignItems:"center",gap:9,flex:1,minWidth:0,paddingVertical:2,overflow:"hidden"},titleWrapper:{flex:1,minWidth:0,justifyContent:"center",gap:2},appTitle:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:13.5,color:AppColors_1.AppColors.white,letterSpacing:-.2},versionRow:{flexDirection:"row",alignItems:"center",gap:4,minWidth:0},versionChip:{flexDirection:"row",alignItems:"center",backgroundColor:`${AppColors_1.AppColors.white}1F`,borderRadius:5,paddingHorizontal:5,paddingVertical:1.5,gap:3,borderWidth:1,borderColor:`${AppColors_1.AppColors.white}2E`,flexShrink:1,minWidth:0},versionChipText:{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:8.5,color:`${AppColors_1.AppColors.white}EB`,letterSpacing:.1},actionsRow:{flexDirection:"row",alignItems:"center",gap:4.5,flexShrink:0},actionBtn:{flexDirection:"row",alignItems:"center",gap:4,backgroundColor:"rgba(255, 255, 255, 0.22)",paddingHorizontal:8,paddingVertical:5.5,borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},actionBtnSquare:{alignItems:"center",justifyContent:"center",width:27,height:27,backgroundColor:"rgba(255, 255, 255, 0.22)",borderRadius:7,borderWidth:1,borderColor:"rgba(255, 255, 255, 0.32)"},recordingBtnActive:{backgroundColor:"rgba(239, 68, 68, 0.32)",borderColor:AppColors_1.AppColors.red500},recordingDot:{width:6,height:6,borderRadius:3,backgroundColor:AppColors_1.AppColors.red500},actionText:{fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:10.5,color:AppColors_1.AppColors.white}});exports.default=FabLauncher;
@@ -1,8 +1,8 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(n,e,r,t){t===void 0&&(t=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(n,t,i)}):(function(n,e,r,t){t===void 0&&(t=r),n[t]=e[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),__importStar=this&&this.__importStar||(function(){var n=function(e){return n=Object.getOwnPropertyNames||function(r){var t=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[t.length]=i);return t},n(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var t=n(e),i=0;i<t.length;i++)t[i]!=="default"&&__createBinding(r,e,t[i]);return __setModuleDefault(r,e),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.FeatureUnderDevNotice=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),NetworkIcons_1=require("../NetworkIcons"),FeatureUnderDevNotice=({featureName:n,compact:e=!1})=>{const[r,t]=(0,react_1.useState)(!1);return r?null:<react_native_1.View style={[styles.container,e&&styles.containerCompact]}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(n,e,r,t){t===void 0&&(t=r);var i=Object.getOwnPropertyDescriptor(e,r);(!i||("get"in i?!e.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(n,t,i)}):(function(n,e,r,t){t===void 0&&(t=r),n[t]=e[r]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}):function(n,e){n.default=e}),__importStar=this&&this.__importStar||(function(){var n=function(e){return n=Object.getOwnPropertyNames||function(r){var t=[];for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&(t[t.length]=i);return t},n(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var t=n(e),i=0;i<t.length;i++)t[i]!=="default"&&__createBinding(r,e,t[i]);return __setModuleDefault(r,e),r}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.FeatureUnderDevNotice=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),NetworkIcons_1=require("../NetworkIcons"),i18n_1=require("../../i18n"),FeatureUnderDevNotice=({featureName:n,compact:e=!1})=>{const[r,t]=(0,react_1.useState)(!1);return r?null:<react_native_1.View style={[styles.container,e&&styles.containerCompact]}>
2
2
  <react_native_1.View style={styles.contentRow}>
3
3
  <react_native_1.View style={styles.badgeWrap}>
4
4
  <NetworkIcons_1.WarningTriangleIcon color={AppColors_1.AppColors.warningIconGold}size={12}/>
5
- <react_native_1.Text style={styles.badgeText}>IN ACTIVE DEVELOPMENT</react_native_1.Text>
5
+ <react_native_1.Text style={styles.badgeText}>{(0,i18n_1.t)("common.inActiveDevelopment","IN ACTIVE DEVELOPMENT")}</react_native_1.Text>
6
6
  </react_native_1.View>
7
7
 
8
8
  <react_native_1.Pressable onPress={()=>t(!0)}hitSlop={8}style={styles.dismissBtn}accessible={!0}accessibilityRole="button"accessibilityLabel="Dismiss notice">
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ export declare const FloatingCaptureWidget: React.FC;
3
+ export default FloatingCaptureWidget;
@@ -0,0 +1,54 @@
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(r,a,o,n){n===void 0&&(n=o);var i=Object.getOwnPropertyDescriptor(a,o);(!i||("get"in i?!a.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return a[o]}}),Object.defineProperty(r,n,i)}):(function(r,a,o,n){n===void 0&&(n=o),r[n]=a[o]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(r,a){Object.defineProperty(r,"default",{enumerable:!0,value:a})}):function(r,a){r.default=a}),__importStar=this&&this.__importStar||(function(){var r=function(a){return r=Object.getOwnPropertyNames||function(o){var n=[];for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[n.length]=i);return n},r(a)};return function(a){if(a&&a.__esModule)return a;var o={};if(a!=null)for(var n=r(a),i=0;i<n.length;i++)n[i]!=="default"&&__createBinding(o,a,n[i]);return __setModuleDefault(o,a),o}})(),__importDefault=this&&this.__importDefault||function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.FloatingCaptureWidget=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),react_native_linear_gradient_1=__importDefault(require("react-native-linear-gradient")),InspectorContext_1=require("./InspectorContext"),TouchableScale_1=__importDefault(require("../TouchableScale")),NetworkIcons_1=require("../NetworkIcons"),capture_1=require("../../capture"),NativeInspector_1=require("../../native/NativeInspector"),toast_1=require("../../helpers/toast"),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),i18n_1=require("../../i18n"),MediaPreviewModal_1=require("./MediaPreviewModal"),FloatingCaptureWidget=()=>{const{refreshMediaCount:r,captureFps:a,captureScale:o,captureBitrate:n,captureMaxDurationSeconds:i,captureAudioMode:S,activeTab:M,settingsPage:T,peekMode:E}=(0,InspectorContext_1.useInspector)(),{t:c}=(0,i18n_1.useTranslation)(),[p,m]=(0,react_1.useState)(!1),[V,v]=(0,react_1.useState)(!1),[P,y]=(0,react_1.useState)(0),l=(0,react_1.useRef)(null),[C,f]=(0,react_1.useState)(null),h=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,w=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,s=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,u=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=s.x.addListener(d=>u.current.x=d.value),t=s.y.addListener(d=>u.current.y=d.value);return()=>{s.x.removeListener(e),s.y.removeListener(t)}},[s]);const g=(0,react_1.useRef)(!1),D=(0,react_1.useRef)(react_native_1.PanResponder.create({onStartShouldSetPanResponder:()=>!1,onStartShouldSetPanResponderCapture:()=>!1,onMoveShouldSetPanResponder:(e,t)=>Math.abs(t.dx)>2||Math.abs(t.dy)>2,onMoveShouldSetPanResponderCapture:(e,t)=>Math.abs(t.dx)>2||Math.abs(t.dy)>2,onPanResponderGrant:()=>{g.current=!0,s.setOffset({x:u.current.x,y:u.current.y}),s.setValue({x:0,y:0})},onPanResponderMove:(e,t)=>{s.setValue({x:t.dx,y:t.dy})},onPanResponderTerminationRequest:()=>!1,onShouldBlockNativeResponder:()=>!0,onPanResponderRelease:()=>{s.flattenOffset(),setTimeout(()=>{g.current=!1},150);const{width:e,height:t}=react_native_1.Dimensions.get("window"),d=e/2-30,R=-d,I=20,A=-(t-120),_=u.current.x,b=u.current.y;if(_<R||_>d||b<A||b>I){const F=Math.min(Math.max(_,R),d),q=Math.min(Math.max(b,A),I);react_native_1.Animated.spring(s,{toValue:{x:F,y:q},friction:7,tension:50,useNativeDriver:!1}).start()}},onPanResponderTerminate:()=>{s.flattenOffset(),g.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{m(e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>{let e=null;return p?(y(0),l.current=setInterval(()=>{y(t=>t+1)},1e3),e=react_native_1.Animated.loop(react_native_1.Animated.sequence([react_native_1.Animated.timing(h,{toValue:1.15,duration:500,useNativeDriver:!0}),react_native_1.Animated.timing(h,{toValue:1,duration:500,useNativeDriver:!0})])),e.start()):(l.current&&(clearInterval(l.current),l.current=null),y(0),h.setValue(1)),()=>{l.current&&clearInterval(l.current),e&&e.stop()}},[p,h]);const O=(0,react_1.useCallback)(async()=>{if(!g.current)try{(0,NativeInspector_1.triggerNativeHaptic)("light"),v(!0),await new Promise(t=>setTimeout(t,60));const e=await capture_1.ScreenCapture.takeScreenshot({format:"png",quality:.9,hideInspector:!1});if(v(!1),react_native_1.Animated.sequence([react_native_1.Animated.timing(w,{toValue:.65,duration:70,useNativeDriver:!0}),react_native_1.Animated.timing(w,{toValue:0,duration:200,useNativeDriver:!0})]).start(),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t={id:`screenshot_${e.timestamp}.png`,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`screenshot_${e.timestamp}.png`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};f(t),r?.().catch(()=>{}),(0,toast_1.showToast)(c("header.screenshotCaptured","Screenshot captured"))}else(0,toast_1.showToast)(c("header.screenshotFailed","Failed to capture screenshot"))}catch{v(!1),(0,toast_1.showToast)(c("header.screenshotError","Error capturing screenshot"))}},[r,w,c]),x=(0,react_1.useCallback)(async()=>{if(!g.current)try{if(p){(0,NativeInspector_1.triggerNativeHaptic)("medium");const e=await capture_1.ScreenCapture.stopRecording();if(m(!1),e){(0,NativeInspector_1.triggerNativeHaptic)("success");const t={id:`video_${e.timestamp}.${e.format}`,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||`video_${e.timestamp}.${e.format}`,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};f(t),r?.().catch(()=>{}),(0,toast_1.showToast)(c("header.recordingSaved",{duration:(e.durationMs/1e3).toFixed(1),defaultValue:`Recording saved (${(e.durationMs/1e3).toFixed(1)}s)`}))}}else(0,NativeInspector_1.triggerNativeHaptic)("medium"),await capture_1.ScreenCapture.startRecording({fps:a,scale:o,audioSource:S,bitrate:n>0?n:void 0,maxDurationSeconds:i})?(m(!0),(0,toast_1.showToast)(c("header.recordingStarted","Recording started"))):(0,toast_1.showToast)(c("header.recordingStartFailed","Failed to start recording"))}catch{(0,toast_1.showToast)(c("header.recordingError","Error during screen recording")),m(!1)}},[p,a,o,n,i,S,r,c]),B=e=>{const t=Math.floor(e/60),d=e%60;return`${t<10?"0":""}${t}:${d<10?"0":""}${d}`};return M==="media"||T==="media"?null:<>
2
+
3
+ <react_native_1.Animated.View pointerEvents="none"style={[styles.flashOverlay,{opacity:w}]}/>
4
+
5
+ {!V&&<react_native_1.Animated.View{...D.panHandlers}style={[styles.container,{transform:[{translateX:s.x},{translateY:s.y}]}]}>
6
+
7
+ {p?<react_native_1.View style={styles.recordingShadowWrapper}>
8
+ <TouchableScale_1.default onPress={x}style={styles.recordingPillWrapper}>
9
+ <react_native_linear_gradient_1.default colors={["#E11D48","#BE123C"]}start={{x:0,y:0}}end={{x:1,y:0}}style={styles.recordingPill}>
10
+ <react_native_1.Animated.View style={[styles.recordingDot,{transform:[{scale:h}]}]}/>
11
+ <react_native_1.Text style={styles.recordingText}>
12
+ REC {B(P)}
13
+ </react_native_1.Text>
14
+ <react_native_1.View style={styles.stopIconBadge}>
15
+ <react_native_1.View style={styles.stopIconSquare}/>
16
+ </react_native_1.View>
17
+ </react_native_linear_gradient_1.default>
18
+ </TouchableScale_1.default>
19
+ </react_native_1.View>:<react_native_1.View style={styles.dockShadowWrapper}>
20
+ <react_native_linear_gradient_1.default colors={["#0E1326","#1A1E38","#0E1326"]}start={{x:0,y:0}}end={{x:1,y:0}}style={styles.dockBar}>
21
+
22
+ <react_native_1.View style={styles.dragGripArea}pointerEvents="none">
23
+ <NetworkIcons_1.GripVerticalIcon size={13}color="rgba(255, 255, 255, 0.45)"/>
24
+ </react_native_1.View>
25
+
26
+
27
+ <TouchableScale_1.default onPress={O}style={styles.menuItemBtn}accessible={!0}accessibilityLabel="Take Screenshot">
28
+ <react_native_1.View style={[styles.menuItemIconCircle,{backgroundColor:"rgba(56, 189, 248, 0.22)"}]}>
29
+ <NetworkIcons_1.ScreenshotCaptureIcon size={14}color={AppColors_1.AppColors.sky400}/>
30
+ </react_native_1.View>
31
+ <react_native_1.Text style={styles.menuItemText}>
32
+ {c("header.screenshot","Screenshot")}
33
+ </react_native_1.Text>
34
+ </TouchableScale_1.default>
35
+
36
+
37
+ <react_native_1.View style={styles.dockDivider}/>
38
+
39
+
40
+ <TouchableScale_1.default onPress={x}style={styles.menuItemBtn}accessible={!0}accessibilityLabel={c("header.recordScreen","Record Screen")}>
41
+ <react_native_1.View style={[styles.menuItemIconCircle,{backgroundColor:"rgba(244, 63, 94, 0.24)"}]}>
42
+ <NetworkIcons_1.ScreenRecordIcon size={14}color={AppColors_1.AppColors.rose400||"#FB7185"}/>
43
+ </react_native_1.View>
44
+ <react_native_1.Text style={styles.menuItemText}>
45
+ {c("header.record","Record")}
46
+ </react_native_1.Text>
47
+ </TouchableScale_1.default>
48
+ </react_native_linear_gradient_1.default>
49
+ </react_native_1.View>}
50
+ </react_native_1.Animated.View>}
51
+
52
+
53
+ <MediaPreviewModal_1.MediaPreviewModal item={C}visible={!!C}onClose={()=>f(null)}onDelete={async e=>{await capture_1.ScreenCapture.deleteMedia(e.uri),r?.().catch(()=>{}),f(null)}}onConvertToGif={async e=>{const t=await capture_1.ScreenCapture.convertToGif(e.uri,{fps:12,width:480});t&&(r?.().catch(()=>{}),f({id:`anim_${t.timestamp}.gif`,type:"gif",format:"gif",uri:t.uri,filename:t.uri.split("/").pop()||`anim_${t.timestamp}.gif`,sizeBytes:t.sizeBytes,timestamp:t.timestamp,durationMs:t.durationMs}))}}/>
54
+ </>};exports.FloatingCaptureWidget=FloatingCaptureWidget;const styles=react_native_1.StyleSheet.create({flashOverlay:{...react_native_1.StyleSheet.absoluteFillObject,backgroundColor:AppColors_1.AppColors.white,zIndex:999999},container:{position:"absolute",bottom:react_native_1.Platform.OS==="ios"?22:16,alignSelf:"center",alignItems:"center",justifyContent:"center",zIndex:999999,elevation:999999},dockShadowWrapper:{borderRadius:24,backgroundColor:"#0D1120",...react_native_1.Platform.select({ios:{shadowColor:AppColors_1.AppColors.black,shadowOffset:{width:0,height:6},shadowOpacity:.45,shadowRadius:14},android:{elevation:16}})},dockBar:{flexDirection:"row",alignItems:"center",borderRadius:24,width:272,paddingVertical:0,paddingHorizontal:0,overflow:"hidden"},dragGripArea:{paddingLeft:10,paddingRight:2,paddingVertical:10,alignItems:"center",justifyContent:"center"},dockDivider:{width:1,height:20,backgroundColor:"rgba(255, 255, 255, 0.12)"},menuItemBtn:{flex:1,flexDirection:"row",alignItems:"center",justifyContent:"center",gap:7,paddingVertical:9,paddingHorizontal:10},menuItemIconCircle:{width:24,height:24,borderRadius:12,alignItems:"center",justifyContent:"center"},menuItemText:{fontFamily:AppFonts_1.AppFonts.interSemiBold,fontSize:12,color:AppColors_1.AppColors.white,letterSpacing:.1},recordingShadowWrapper:{borderRadius:20,...react_native_1.Platform.select({ios:{shadowColor:AppColors_1.AppColors.black,shadowOffset:{width:0,height:4},shadowOpacity:.4,shadowRadius:10},android:{elevation:12}})},recordingPillWrapper:{borderRadius:20,overflow:"hidden"},recordingPill:{flexDirection:"row",alignItems:"center",gap:7,paddingVertical:6.5,paddingHorizontal:12,borderRadius:20,borderWidth:1.5,borderColor:"rgba(255, 255, 255, 0.35)"},recordingDot:{width:7,height:7,borderRadius:3.5,backgroundColor:AppColors_1.AppColors.white},recordingText:{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:11,color:AppColors_1.AppColors.white,letterSpacing:.3},stopIconBadge:{width:16,height:16,borderRadius:8,backgroundColor:"rgba(255, 255, 255, 0.28)",alignItems:"center",justifyContent:"center",marginLeft:2},stopIconSquare:{width:5.5,height:5.5,borderRadius:1,backgroundColor:AppColors_1.AppColors.white}});exports.default=exports.FloatingCaptureWidget;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { CrashRecord } from '../../types';
3
+ interface GlobalCrashScreenModalProps {
4
+ visible: boolean;
5
+ crash: CrashRecord | null;
6
+ onDismiss: () => void;
7
+ onOpenInspector: () => void;
8
+ onRetry?: () => void;
9
+ }
10
+ export declare const GlobalCrashScreenModal: React.FC<GlobalCrashScreenModalProps>;
11
+ export default GlobalCrashScreenModal;