react-native-inapp-inspector 2.5.13 → 2.5.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +0 -8
  2. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +118 -31
  3. package/dist/commonjs/components/Inspector/ConsoleExportModal.js +1 -1
  4. package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
  5. package/dist/commonjs/components/Inspector/FabLauncher.js +3 -3
  6. package/dist/commonjs/components/Inspector/InspectorHeader.js +30 -30
  7. package/dist/commonjs/components/Inspector/MainScreen.js +38 -75
  8. package/dist/commonjs/components/Inspector/NetworkExportModal.js +4 -4
  9. package/dist/commonjs/components/Inspector/NetworkTab.js +51 -51
  10. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.d.ts +1 -0
  11. package/dist/commonjs/components/Inspector/SecondaryTelemetryStrip.js +17 -16
  12. package/dist/commonjs/components/Inspector/SettingsPanel.js +40 -41
  13. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.d.ts +3 -0
  14. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +34 -3
  15. package/dist/commonjs/components/Inspector/TabBar.js +9 -15
  16. package/dist/commonjs/components/LogCard.js +7 -7
  17. package/dist/commonjs/components/SkeletonPlaceholder.d.ts +3 -0
  18. package/dist/commonjs/components/SkeletonPlaceholder.js +34 -3
  19. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  20. package/dist/commonjs/constants/telemetryConfig.js +1 -1
  21. package/dist/commonjs/constants/version.d.ts +1 -1
  22. package/dist/commonjs/constants/version.js +1 -1
  23. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  24. package/dist/commonjs/helpers/shareFormatter.js +14 -14
  25. package/dist/commonjs/index.d.ts +1 -1
  26. package/dist/commonjs/index.js +3 -3
  27. package/dist/commonjs/native/NativeInspector.d.ts +2 -0
  28. package/dist/commonjs/native/NativeInspector.js +1 -1
  29. package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
  30. package/dist/commonjs/styles/AppFonts.d.ts +4 -0
  31. package/dist/commonjs/styles/AppFonts.js +1 -1
  32. package/dist/commonjs/styles/index.d.ts +2 -0
  33. package/dist/commonjs/styles/index.js +1 -1
  34. package/dist/commonjs/types/enums.d.ts +0 -2
  35. package/dist/commonjs/types/enums.js +1 -1
  36. package/dist/commonjs/types/interfaces.d.ts +1 -1
  37. package/dist/esm/components/Inspector/ConsoleExportModal.js +1 -1
  38. package/dist/esm/components/Inspector/ConsoleTab.js +48 -48
  39. package/dist/esm/components/Inspector/FabLauncher.js +42 -42
  40. package/dist/esm/components/Inspector/InspectorHeader.js +50 -50
  41. package/dist/esm/components/Inspector/MainScreen.js +87 -124
  42. package/dist/esm/components/Inspector/NetworkExportModal.js +1 -1
  43. package/dist/esm/components/Inspector/NetworkTab.js +83 -83
  44. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.d.ts +1 -0
  45. package/dist/esm/components/Inspector/SecondaryTelemetryStrip.js +23 -22
  46. package/dist/esm/components/Inspector/SettingsPanel.js +106 -107
  47. package/dist/esm/components/Inspector/SkeletonPlaceholder.d.ts +3 -0
  48. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +42 -11
  49. package/dist/esm/components/Inspector/TabBar.js +35 -41
  50. package/dist/esm/components/LogCard.js +53 -53
  51. package/dist/esm/components/SkeletonPlaceholder.d.ts +3 -0
  52. package/dist/esm/components/SkeletonPlaceholder.js +42 -11
  53. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  54. package/dist/esm/constants/telemetryConfig.js +1 -1
  55. package/dist/esm/constants/version.d.ts +1 -1
  56. package/dist/esm/constants/version.js +1 -1
  57. package/dist/esm/helpers/remoteConfig.js +1 -1
  58. package/dist/esm/helpers/shareFormatter.js +14 -14
  59. package/dist/esm/index.d.ts +1 -1
  60. package/dist/esm/index.js +8 -8
  61. package/dist/esm/native/NativeInspector.d.ts +2 -0
  62. package/dist/esm/native/NativeInspector.js +1 -1
  63. package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
  64. package/dist/esm/styles/AppFonts.d.ts +4 -0
  65. package/dist/esm/styles/AppFonts.js +1 -1
  66. package/dist/esm/styles/index.d.ts +2 -0
  67. package/dist/esm/styles/index.js +1 -1
  68. package/dist/esm/types/enums.d.ts +0 -2
  69. package/dist/esm/types/enums.js +1 -1
  70. package/dist/esm/types/interfaces.d.ts +1 -1
  71. package/ios/NetworkInspectorModule.mm +288 -325
  72. package/package.json +1 -1
  73. package/src/native/NativeInspector.ts +30 -0
  74. package/src/native/NativeNetworkInspector.ts +2 -0
  75. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  76. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  77. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  78. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  79. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  80. package/android/.gradle/8.9/gc.properties +0 -0
  81. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  82. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  83. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  84. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  85. package/android/.gradle/9.2.0/gc.properties +0 -0
  86. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  87. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  88. package/android/.gradle/vcs-1/gc.properties +0 -0
  89. package/android/.settings/org.eclipse.buildship.core.prefs +0 -13
  90. package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +0 -8
  91. package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +0 -76
  92. package/dist/commonjs/components/Inspector/DebuggingTab.d.ts +0 -3
  93. package/dist/commonjs/components/Inspector/DebuggingTab.js +0 -197
  94. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +0 -7
  95. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +0 -97
  96. package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +0 -2
  97. package/dist/commonjs/components/Inspector/UiInspectorDetail.js +0 -485
  98. package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +0 -2
  99. package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +0 -199
  100. package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +0 -2
  101. package/dist/commonjs/components/Inspector/UiInspectorTab.js +0 -117
  102. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +0 -10
  103. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +0 -148
  104. package/dist/commonjs/components/Inspector/index.d.ts +0 -28
  105. package/dist/commonjs/components/Inspector/index.js +0 -1
  106. package/dist/commonjs/customHooks/uiInspectorManager.d.ts +0 -22
  107. package/dist/commonjs/customHooks/uiInspectorManager.js +0 -1
  108. package/dist/commonjs/helpers/uiInspectorEngine.d.ts +0 -62
  109. package/dist/commonjs/helpers/uiInspectorEngine.js +0 -19
  110. package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +0 -8
  111. package/dist/esm/components/Inspector/BoxModelVisualizer.js +0 -76
  112. package/dist/esm/components/Inspector/DebuggingTab.d.ts +0 -3
  113. package/dist/esm/components/Inspector/DebuggingTab.js +0 -197
  114. package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +0 -7
  115. package/dist/esm/components/Inspector/UiA11yAuditPanel.js +0 -97
  116. package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +0 -2
  117. package/dist/esm/components/Inspector/UiInspectorDetail.js +0 -422
  118. package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +0 -2
  119. package/dist/esm/components/Inspector/UiInspectorOverlay.js +0 -138
  120. package/dist/esm/components/Inspector/UiInspectorTab.d.ts +0 -2
  121. package/dist/esm/components/Inspector/UiInspectorTab.js +0 -117
  122. package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +0 -10
  123. package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +0 -148
  124. package/dist/esm/components/Inspector/index.d.ts +0 -28
  125. package/dist/esm/components/Inspector/index.js +0 -1
  126. package/dist/esm/customHooks/uiInspectorManager.d.ts +0 -22
  127. package/dist/esm/customHooks/uiInspectorManager.js +0 -1
  128. package/dist/esm/helpers/uiInspectorEngine.d.ts +0 -48
  129. package/dist/esm/helpers/uiInspectorEngine.js +0 -19
package/README.md CHANGED
@@ -606,13 +606,5 @@ Contributions are warmly welcomed! Please check out [CONTRIBUTING.md](CONTRIBUTI
606
606
 
607
607
  ## 📄 License
608
608
 
609
- | 🇸🇪 🇳🇴 🇩🇰 🇫🇮 | **Nordic Countries (Sweden, Norway, Denmark, Finland)** | Nätverkslogg Sverige, felsökare React Native, utvecklarverktyg React Native, mobildebuggning. |
610
- | 🇮🇱 | **Israel** | מנפה שגיאות ריאקט נייטיב, ניטור רשת מובייל, כלי פיתוח מובייל, לוכד תעבורת רשת. |
611
- | 🇿🇦 🇳🇬 🇰🇪 | **Sub-Saharan Africa (South Africa, Nigeria, Kenya)** | React Native Nigeria, React Native South Africa, mobile debugging Kenya, in-app inspector Africa. |
612
-
613
- ---
614
-
615
- ## 📄 License
616
-
617
609
  MIT © [vengatmacuser](LICENSE)
618
610
 
@@ -197,37 +197,22 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
197
197
 
198
198
  defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
199
199
 
200
- // 1. Intercept all uncaught exceptions on background/worker threads (prevents OS force-close)
200
+ // 1. Intercept all uncaught exceptions
201
201
  Thread.setDefaultUncaughtExceptionHandler { thread, throwable ->
202
202
  try {
203
203
  handleNativeCrash(thread, throwable)
204
204
  } catch (e: Exception) {
205
205
  Log.e(TAG, "Error in native crash handler", e)
206
206
  }
207
- // Suppress defaultHandler?.uncaughtException() to prevent OS killing the process
208
- }
209
-
210
- // 2. Main Looper Crash Shield: Protects UI thread from dying on uncaught exceptions
211
- try {
212
- android.os.Handler(android.os.Looper.getMainLooper()).post {
213
- while (true) {
214
- try {
215
- android.os.Looper.loop()
216
- } catch (e: Throwable) {
217
- try {
218
- handleNativeCrash(Thread.currentThread(), e)
219
- } catch (ex: Exception) {
220
- Log.e(TAG, "Error in Main Looper crash protection", ex)
221
- }
222
- }
223
- }
207
+ try {
208
+ defaultHandler?.uncaughtException(thread, throwable)
209
+ } catch (e: Exception) {
210
+ Log.e(TAG, "Error delegating to default handler", e)
224
211
  }
225
- } catch (e: Exception) {
226
- Log.w(TAG, "Failed to start Looper crash protection", e)
227
212
  }
228
213
 
229
214
  isProtectionEnabled = true
230
- Log.i(TAG, "Native Android Crash Shield enabled (Process kill prevention active)")
215
+ Log.i(TAG, "Native Android Crash Protection enabled")
231
216
  }
232
217
 
233
218
  private fun handleNativeCrash(thread: Thread, throwable: Throwable) {
@@ -251,6 +236,22 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
251
236
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
252
237
  .emit("onNativeCrash", params)
253
238
  }
239
+
240
+ // Also persist crash to disk synchronously
241
+ try {
242
+ val crashFile = File(getCapturesDirectory(), "last_native_crash.json")
243
+ val json = org.json.JSONObject().apply {
244
+ put("platform", "android")
245
+ put("error", throwable.message ?: "Unknown native exception")
246
+ put("name", throwable.javaClass.name)
247
+ put("stack", stackTrace)
248
+ put("threadName", thread.name)
249
+ put("timestamp", System.currentTimeMillis())
250
+ }
251
+ FileOutputStream(crashFile).use { fos ->
252
+ fos.write(json.toString(2).toByteArray(Charsets.UTF_8))
253
+ }
254
+ } catch (e: Exception) {}
254
255
  } catch (e: Exception) {
255
256
  Log.e(TAG, "Failed to emit onNativeCrash to JS", e)
256
257
  }
@@ -266,6 +267,43 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
266
267
  }
267
268
  }
268
269
 
270
+ @ReactMethod
271
+ fun getLastNativeCrash(promise: Promise) {
272
+ try {
273
+ val crashFile = File(getCapturesDirectory(), "last_native_crash.json")
274
+ if (crashFile.exists()) {
275
+ val jsonStr = crashFile.readText(Charsets.UTF_8)
276
+ val jsonObj = org.json.JSONObject(jsonStr)
277
+ val map = Arguments.createMap().apply {
278
+ putString("platform", jsonObj.optString("platform", "android"))
279
+ putString("error", jsonObj.optString("error", ""))
280
+ putString("name", jsonObj.optString("name", ""))
281
+ putString("stack", jsonObj.optString("stack", ""))
282
+ putString("threadName", jsonObj.optString("threadName", ""))
283
+ putDouble("timestamp", jsonObj.optDouble("timestamp", 0.0))
284
+ }
285
+ promise.resolve(map)
286
+ } else {
287
+ promise.resolve(null)
288
+ }
289
+ } catch (e: Exception) {
290
+ promise.reject("GET_CRASH_ERROR", e.message, e)
291
+ }
292
+ }
293
+
294
+ @ReactMethod
295
+ fun clearLastNativeCrash(promise: Promise) {
296
+ try {
297
+ val crashFile = File(getCapturesDirectory(), "last_native_crash.json")
298
+ if (crashFile.exists()) {
299
+ crashFile.delete()
300
+ }
301
+ promise.resolve(true)
302
+ } catch (e: Exception) {
303
+ promise.reject("CLEAR_CRASH_ERROR", e.message, e)
304
+ }
305
+ }
306
+
269
307
  @ReactMethod
270
308
  fun getDeviceMetrics(promise: Promise) {
271
309
  try {
@@ -398,7 +436,10 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
398
436
  val sizeDp = if (options != null && options.hasKey("size")) options.getDouble("size").toFloat() else 64f
399
437
  val sizePx = (sizeDp * density).toInt()
400
438
 
401
- if (floatingButton == null) {
439
+ if (floatingButton == null || floatingButton?.context != activity) {
440
+ floatingButton?.let { oldBtn ->
441
+ (oldBtn.parent as? android.view.ViewGroup)?.removeView(oldBtn)
442
+ }
402
443
  floatingButton = InAppInspectorFloatingView(activity) {
403
444
  emitFloatingButtonPress()
404
445
  }
@@ -417,7 +458,12 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
417
458
  floatingButton?.y = initialY
418
459
  decorView.addView(floatingButton, params)
419
460
  } else {
420
- if (floatingButton?.parent == null) {
461
+ val currentParent = floatingButton?.parent as? android.view.ViewGroup
462
+ if (currentParent == null) {
463
+ val params = android.widget.FrameLayout.LayoutParams(sizePx, sizePx)
464
+ decorView.addView(floatingButton, params)
465
+ } else if (currentParent != decorView) {
466
+ currentParent.removeView(floatingButton)
421
467
  val params = android.widget.FrameLayout.LayoutParams(sizePx, sizePx)
422
468
  decorView.addView(floatingButton, params)
423
469
  } else {
@@ -839,7 +885,25 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
839
885
  }
840
886
 
841
887
  private fun getActiveWindow(): Window? {
842
- return reactContext.currentActivity?.window
888
+ val activity = reactContext.currentActivity
889
+ if (activity == null || activity.isFinishing || (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed)) {
890
+ return null
891
+ }
892
+ return activity.window
893
+ }
894
+
895
+ private fun getOrCreateCaptureHandler(): Handler {
896
+ synchronized(this) {
897
+ val handler = captureBackgroundHandler
898
+ if (handler != null && captureHandlerThread?.isAlive == true) {
899
+ return handler
900
+ }
901
+ val thread = HandlerThread("InAppInspector-PixelCopy").apply { start() }
902
+ captureHandlerThread = thread
903
+ val newHandler = Handler(thread.looper)
904
+ captureBackgroundHandler = newHandler
905
+ return newHandler
906
+ }
843
907
  }
844
908
 
845
909
  private fun captureWindowBitmap(window: Window?, scale: Float, callback: (Bitmap?) -> Unit) {
@@ -861,9 +925,12 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
861
925
 
862
926
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
863
927
  val destBitmap = Bitmap.createBitmap(targetWidth, targetHeight, Bitmap.Config.ARGB_8888)
864
- val copyHandler = captureBackgroundHandler ?: mainHandler
928
+ val copyHandler = getOrCreateCaptureHandler()
865
929
  try {
866
- PixelCopy.request(targetWindow, null, destBitmap, { copyResult ->
930
+ val srcRect = if (decorView.width > 0 && decorView.height > 0) {
931
+ android.graphics.Rect(0, 0, decorView.width, decorView.height)
932
+ } else null
933
+ PixelCopy.request(targetWindow, srcRect, destBitmap, { copyResult ->
867
934
  if (copyResult == PixelCopy.SUCCESS) {
868
935
  callback(destBitmap)
869
936
  } else {
@@ -2275,11 +2342,17 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
2275
2342
  addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
2276
2343
  }
2277
2344
 
2278
- val resInfoList = activity.packageManager.queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY)
2279
- for (resolveInfo in resInfoList) {
2280
- val packageName = resolveInfo.activityInfo.packageName
2281
- activity.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
2282
- }
2345
+ try {
2346
+ val resInfoList = activity.packageManager.queryIntentActivities(chooser, android.content.pm.PackageManager.MATCH_DEFAULT_ONLY)
2347
+ for (resolveInfo in resInfoList) {
2348
+ val packageName = resolveInfo.activityInfo?.packageName
2349
+ if (!packageName.isNullOrEmpty()) {
2350
+ try {
2351
+ activity.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION)
2352
+ } catch (e: Exception) {}
2353
+ }
2354
+ }
2355
+ } catch (e: Exception) {}
2283
2356
 
2284
2357
  activity.startActivity(chooser)
2285
2358
  promise.resolve(true)
@@ -2301,11 +2374,25 @@ class NetworkInspectorModule(private val reactContext: ReactApplicationContext)
2301
2374
  override fun invalidate() {
2302
2375
  super.invalidate()
2303
2376
  try {
2377
+ reactContext.removeActivityEventListener(activityEventListener)
2304
2378
  sensorManager?.unregisterListener(shakeListener)
2305
2379
  if (isFpsMonitoring) {
2306
2380
  isFpsMonitoring = false
2307
2381
  android.view.Choreographer.getInstance().removeFrameCallback(frameCallback)
2308
2382
  }
2383
+ if (isRecordingVideo) {
2384
+ isRecordingVideo = false
2385
+ recordingTimer?.cancel()
2386
+ recordingTimer = null
2387
+ isFrameCapturing.set(false)
2388
+ }
2389
+ captureHandlerThread?.quitSafely()
2390
+ captureHandlerThread = null
2391
+ captureBackgroundHandler = null
2392
+ synchronized(recordedFrames) {
2393
+ recordedFrames.forEach { it.recycle() }
2394
+ recordedFrames.clear()
2395
+ }
2309
2396
  floatingButton?.let { btn ->
2310
2397
  val parent = btn.parent as? android.view.ViewGroup
2311
2398
  parent?.post {
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,r,a,l){l===void 0&&(l=a);var t=Object.getOwnPropertyDescriptor(r,a);(!t||("get"in t?!r.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return r[a]}}),Object.defineProperty(i,l,t)}):(function(i,r,a,l){l===void 0&&(l=a),i[l]=r[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,r){Object.defineProperty(i,"default",{enumerable:!0,value:r})}):function(i,r){i.default=r}),__importStar=this&&this.__importStar||(function(){var i=function(r){return i=Object.getOwnPropertyNames||function(a){var l=[];for(var t in a)Object.prototype.hasOwnProperty.call(a,t)&&(l[l.length]=t);return l},i(r)};return function(r){if(r&&r.__esModule)return r;var a={};if(r!=null)for(var l=i(r),t=0;t<l.length;t++)l[t]!=="default"&&__createBinding(a,r,l[t]);return __setModuleDefault(a,r),a}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ConsoleExportModal=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),NetworkIcons_1=require("../NetworkIcons"),NativeInspector_1=require("../../native/NativeInspector"),helpers_1=require("../../helpers"),shareFormatter_1=require("../../helpers/shareFormatter"),i18n_1=require("../../i18n"),ConsoleExportModal=({visible:i,onClose:r,filteredLogs:a,allLogs:l})=>{const{t}=(0,i18n_1.useTranslation)(),[T,B]=(0,react_1.useState)("config"),[y,q]=(0,react_1.useState)("filtered"),[v,G]=(0,react_1.useState)("info"),[s,L]=(0,react_1.useState)("all"),[E,U]=(0,react_1.useState)("50"),[_,K]=(0,react_1.useState)(""),[c,J]=(0,react_1.useState)("txt"),[P,X]=(0,react_1.useState)(!1),[O,Z]=(0,react_1.useState)(!1),[M,Q]=(0,react_1.useState)(!1),[W,Y]=(0,react_1.useState)(!1),[N,ee]=(0,react_1.useState)(!1),[ie,j]=(0,react_1.useState)(0),[le,$]=(0,react_1.useState)(0),[x,te]=(0,react_1.useState)(""),[p,oe]=(0,react_1.useState)(""),[ae,re]=(0,react_1.useState)(0),A=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,k=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,h=(0,react_1.useMemo)(()=>{if(!_||_.trim().length===0)return{isValid:!0,error:null,regex:null};try{return{isValid:!0,error:null,regex:new RegExp(_.trim(),"i")}}catch(e){return{isValid:!1,error:e?.message||"Invalid pattern",regex:null}}},[_]),I=(0,react_1.useMemo)(()=>({includeStackTrace:P,includeArguments:O,includeCaller:M,includeTimestamps:W,includeAppInfo:N,includeDuplicates:!1,ignorePattern:s==="custom"&&h.isValid?_.trim():void 0}),[P,O,M,W,N,s,h.isValid,_]);(0,react_1.useEffect)(()=>{if(T==="progress"){const e=react_native_1.Animated.loop(react_native_1.Animated.sequence([react_native_1.Animated.timing(k,{toValue:1.05,duration:600,easing:react_native_1.Easing.inOut(react_native_1.Easing.ease),useNativeDriver:!0}),react_native_1.Animated.timing(k,{toValue:1,duration:600,easing:react_native_1.Easing.inOut(react_native_1.Easing.ease),useNativeDriver:!0})]));return e.start(),()=>e.stop()}},[T,k]),(0,react_1.useEffect)(()=>{i&&(B("config"),L("all"),G("info"),J("txt"),U("50"),K(""),X(!1),Z(!1),Q(!1),Y(!1),ee(!1),j(0),$(0),te(""),oe(""),re(0),A.setValue(0))},[i,A]);const b=(0,react_1.useMemo)(()=>y==="filtered"?a:l,[y,a,l]),F=(0,react_1.useMemo)(()=>v==="all"?b:b.filter(e=>v==="info"?e.type==="info"||e.sourceMethod==="log"||e.sourceMethod==="info":v==="warn"?e.type==="warn":v==="error"?e.type==="error":!0),[b,v]),R=(0,react_1.useMemo)(()=>{let e=0,o=0,C=0;return b.forEach(w=>{w.type==="error"?C++:w.type==="warn"?o++:e++}),{all:b.length,info:e,warn:o,error:C}},[b]),{selectedLogs:n,ignoredCount:z}=(0,react_1.useMemo)(()=>{if(F.length===0)return{selectedLogs:[],ignoredCount:0};let o=F,C=0;if(s==="custom"&&h.regex){const m=h.regex,H=o.length;o=o.filter(S=>{const ge=S.message||"",ue=S.rawArgs?JSON.stringify(S.rawArgs):"",fe=S.caller||"";return!m.test(ge)&&!m.test(ue)&&!m.test(fe)}),C=H-o.length}let w=o.length;if(s==="all")w=o.length;else if(s==="custom"){const m=parseInt(E,10);w=isNaN(m)||m<=0?o.length:Math.min(m,o.length)}return{selectedLogs:o.slice(-w),ignoredCount:C}},[F,s,E,h.regex]),D=(0,react_1.useMemo)(()=>(0,shareFormatter_1.estimateConsoleLogsExportSize)(n,c,I),[n,c,I]),V=e=>e<=0?"0 KB":e<1024?`${(e/1024).toFixed(2)} KB`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(2)} MB`,ne=(0,react_1.useCallback)(()=>{if(n.length===0){(0,helpers_1.showToast)(t("console.noLogsToExport","No logs available to export"));return}(0,NativeInspector_1.triggerNativeHaptic)("medium"),B("progress"),j(0),$(0),A.setValue(0);const e=n.length,o=Math.max(1,Math.floor(e/10));let C=0;const w=setInterval(()=>{C=Math.min(C+o,e);const m=C/e;j(Math.round(m*100)),$(C),react_native_1.Animated.timing(A,{toValue:m,duration:120,easing:react_native_1.Easing.linear,useNativeDriver:!1}).start(),C>=e&&(clearInterval(w),setTimeout(()=>{const H=(0,shareFormatter_1.formatConsoleLogsExport)(n,c,I),S=(0,shareFormatter_1.generateConsoleLogsFilename)(c);te(H),oe(S),re(H.length),B("complete"),(0,NativeInspector_1.triggerNativeHaptic)("heavy")},180))},45)},[n,c,I,A,t]),se=(0,react_1.useCallback)(async()=>{if(x){(0,NativeInspector_1.triggerNativeHaptic)("light");try{const e=await(0,NativeInspector_1.writeNativeExportFile)(p,x);if(e&&await(0,NativeInspector_1.shareNativeFile)(e,"text/plain",p))return;await react_native_1.Share.share({title:p,message:x,url:e||void 0},{dialogTitle:`Share ${p}`,subject:p})}catch(e){e?.message!=="User did not share"&&(0,helpers_1.showToast)(e?.message||"Failed to open share sheet")}}},[x,p,c]),ce=(0,react_1.useCallback)(async()=>{if(x){(0,NativeInspector_1.triggerNativeHaptic)("medium");try{const e=await(0,NativeInspector_1.writeNativeExportFile)(p,x);if(e&&await(0,NativeInspector_1.shareNativeFile)(e,"text/plain",`Save ${p}`)){(0,helpers_1.showToast)(t("console.savePromptOpened","Opened save to disk dialog"));return}await react_native_1.Share.share({title:`Save ${p}`,message:x,url:e||void 0},{dialogTitle:`Save to Disk (${p})`,subject:p}),(0,helpers_1.showToast)(t("console.savePromptOpened","Opened save to disk dialog"))}catch(e){e?.message!=="User did not share"&&(0,helpers_1.showToast)(e?.message||"Save error")}}},[x,p,c,t]),pe=(0,react_1.useCallback)(()=>{x&&((0,NativeInspector_1.triggerNativeHaptic)("light"),(0,helpers_1.copyToClipboard)(x,"Console Logs"),(0,helpers_1.showToast)(t("console.copiedLogs","Logs copied to clipboard!")))},[x,t]),de=a.length!==l.length;return<react_native_1.Modal visible={i}transparent animationType="slide"onRequestClose={r}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,r,a,l){l===void 0&&(l=a);var t=Object.getOwnPropertyDescriptor(r,a);(!t||("get"in t?!r.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return r[a]}}),Object.defineProperty(i,l,t)}):(function(i,r,a,l){l===void 0&&(l=a),i[l]=r[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,r){Object.defineProperty(i,"default",{enumerable:!0,value:r})}):function(i,r){i.default=r}),__importStar=this&&this.__importStar||(function(){var i=function(r){return i=Object.getOwnPropertyNames||function(a){var l=[];for(var t in a)Object.prototype.hasOwnProperty.call(a,t)&&(l[l.length]=t);return l},i(r)};return function(r){if(r&&r.__esModule)return r;var a={};if(r!=null)for(var l=i(r),t=0;t<l.length;t++)l[t]!=="default"&&__createBinding(a,r,l[t]);return __setModuleDefault(a,r),a}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ConsoleExportModal=void 0;const react_1=__importStar(require("react")),react_native_1=require("react-native"),TouchableScale_1=__importDefault(require("../TouchableScale")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),NetworkIcons_1=require("../NetworkIcons"),NativeInspector_1=require("../../native/NativeInspector"),helpers_1=require("../../helpers"),shareFormatter_1=require("../../helpers/shareFormatter"),i18n_1=require("../../i18n"),ConsoleExportModal=({visible:i,onClose:r,filteredLogs:a,allLogs:l})=>{const{t}=(0,i18n_1.useTranslation)(),[T,B]=(0,react_1.useState)("config"),[y,q]=(0,react_1.useState)("filtered"),[v,G]=(0,react_1.useState)("info"),[s,L]=(0,react_1.useState)("all"),[E,U]=(0,react_1.useState)("50"),[_,K]=(0,react_1.useState)(""),[c,J]=(0,react_1.useState)("txt"),[P,X]=(0,react_1.useState)(!0),[O,Z]=(0,react_1.useState)(!0),[M,Q]=(0,react_1.useState)(!0),[W,Y]=(0,react_1.useState)(!0),[N,ee]=(0,react_1.useState)(!0),[ie,j]=(0,react_1.useState)(0),[le,$]=(0,react_1.useState)(0),[x,te]=(0,react_1.useState)(""),[p,oe]=(0,react_1.useState)(""),[ae,re]=(0,react_1.useState)(0),A=(0,react_1.useRef)(new react_native_1.Animated.Value(0)).current,k=(0,react_1.useRef)(new react_native_1.Animated.Value(1)).current,h=(0,react_1.useMemo)(()=>{if(!_||_.trim().length===0)return{isValid:!0,error:null,regex:null};try{return{isValid:!0,error:null,regex:new RegExp(_.trim(),"i")}}catch(e){return{isValid:!1,error:e?.message||"Invalid pattern",regex:null}}},[_]),I=(0,react_1.useMemo)(()=>({includeStackTrace:P,includeArguments:O,includeCaller:M,includeTimestamps:W,includeAppInfo:N,includeDuplicates:!1,ignorePattern:s==="custom"&&h.isValid?_.trim():void 0}),[P,O,M,W,N,s,h.isValid,_]);(0,react_1.useEffect)(()=>{if(T==="progress"){const e=react_native_1.Animated.loop(react_native_1.Animated.sequence([react_native_1.Animated.timing(k,{toValue:1.05,duration:600,easing:react_native_1.Easing.inOut(react_native_1.Easing.ease),useNativeDriver:!0}),react_native_1.Animated.timing(k,{toValue:1,duration:600,easing:react_native_1.Easing.inOut(react_native_1.Easing.ease),useNativeDriver:!0})]));return e.start(),()=>e.stop()}},[T,k]),(0,react_1.useEffect)(()=>{i&&(B("config"),L("all"),G("info"),J("txt"),U("50"),K(""),X(!1),Z(!1),Q(!1),Y(!1),ee(!1),j(0),$(0),te(""),oe(""),re(0),A.setValue(0))},[i,A]);const b=(0,react_1.useMemo)(()=>y==="filtered"?a:l,[y,a,l]),F=(0,react_1.useMemo)(()=>v==="all"?b:b.filter(e=>v==="info"?e.type==="info"||e.sourceMethod==="log"||e.sourceMethod==="info":v==="warn"?e.type==="warn":v==="error"?e.type==="error":!0),[b,v]),R=(0,react_1.useMemo)(()=>{let e=0,o=0,C=0;return b.forEach(w=>{w.type==="error"?C++:w.type==="warn"?o++:e++}),{all:b.length,info:e,warn:o,error:C}},[b]),{selectedLogs:n,ignoredCount:z}=(0,react_1.useMemo)(()=>{if(F.length===0)return{selectedLogs:[],ignoredCount:0};let o=F,C=0;if(s==="custom"&&h.regex){const m=h.regex,H=o.length;o=o.filter(S=>{const ge=S.message||"",ue=S.rawArgs?JSON.stringify(S.rawArgs):"",fe=S.caller||"";return!m.test(ge)&&!m.test(ue)&&!m.test(fe)}),C=H-o.length}let w=o.length;if(s==="all")w=o.length;else if(s==="custom"){const m=parseInt(E,10);w=isNaN(m)||m<=0?o.length:Math.min(m,o.length)}return{selectedLogs:o.slice(-w),ignoredCount:C}},[F,s,E,h.regex]),D=(0,react_1.useMemo)(()=>(0,shareFormatter_1.estimateConsoleLogsExportSize)(n,c,I),[n,c,I]),V=e=>e<=0?"0 KB":e<1024?`${(e/1024).toFixed(2)} KB`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(2)} MB`,ne=(0,react_1.useCallback)(()=>{if(n.length===0){(0,helpers_1.showToast)(t("console.noLogsToExport","No logs available to export"));return}(0,NativeInspector_1.triggerNativeHaptic)("medium"),B("progress"),j(0),$(0),A.setValue(0);const e=n.length,o=Math.max(1,Math.floor(e/10));let C=0;const w=setInterval(()=>{C=Math.min(C+o,e);const m=C/e;j(Math.round(m*100)),$(C),react_native_1.Animated.timing(A,{toValue:m,duration:120,easing:react_native_1.Easing.linear,useNativeDriver:!1}).start(),C>=e&&(clearInterval(w),setTimeout(()=>{const H=(0,shareFormatter_1.formatConsoleLogsExport)(n,c,I),S=(0,shareFormatter_1.generateConsoleLogsFilename)(c);te(H),oe(S),re(H.length),B("complete"),(0,NativeInspector_1.triggerNativeHaptic)("heavy")},180))},45)},[n,c,I,A,t]),se=(0,react_1.useCallback)(async()=>{if(x){(0,NativeInspector_1.triggerNativeHaptic)("light");try{const e=await(0,NativeInspector_1.writeNativeExportFile)(p,x);if(e&&await(0,NativeInspector_1.shareNativeFile)(e,"text/plain",p))return;await react_native_1.Share.share({title:p,message:x,url:e||void 0},{dialogTitle:`Share ${p}`,subject:p})}catch(e){e?.message!=="User did not share"&&(0,helpers_1.showToast)(e?.message||"Failed to open share sheet")}}},[x,p,c]),ce=(0,react_1.useCallback)(async()=>{if(x){(0,NativeInspector_1.triggerNativeHaptic)("medium");try{const e=await(0,NativeInspector_1.writeNativeExportFile)(p,x);if(e&&await(0,NativeInspector_1.shareNativeFile)(e,"text/plain",`Save ${p}`)){(0,helpers_1.showToast)(t("console.savePromptOpened","Opened save to disk dialog"));return}await react_native_1.Share.share({title:`Save ${p}`,message:x,url:e||void 0},{dialogTitle:`Save to Disk (${p})`,subject:p}),(0,helpers_1.showToast)(t("console.savePromptOpened","Opened save to disk dialog"))}catch(e){e?.message!=="User did not share"&&(0,helpers_1.showToast)(e?.message||"Save error")}}},[x,p,c,t]),pe=(0,react_1.useCallback)(()=>{x&&((0,NativeInspector_1.triggerNativeHaptic)("light"),(0,helpers_1.copyToClipboard)(x,"Console Logs"),(0,helpers_1.showToast)(t("console.copiedLogs","Logs copied to clipboard!")))},[x,t]),de=a.length!==l.length;return<react_native_1.Modal visible={i}transparent animationType="slide"onRequestClose={r}>
2
2
  <react_native_1.View style={styles.overlay}>
3
3
  <react_native_1.Pressable style={styles.backdrop}onPress={r}/>
4
4
 
@@ -1,6 +1,6 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,o,l,n){n===void 0&&(n=l);var a=Object.getOwnPropertyDescriptor(o,l);(!a||("get"in a?!o.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return o[l]}}),Object.defineProperty(t,n,a)}):(function(t,o,l,n){n===void 0&&(n=l),t[n]=o[l]})),__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(l){var n=[];for(var a in l)Object.prototype.hasOwnProperty.call(l,a)&&(n[n.length]=a);return n},t(o)};return function(o){if(o&&o.__esModule)return o;var l={};if(o!=null)for(var n=t(o),a=0;a<n.length;a++)n[a]!=="default"&&__createBinding(l,o,n[a]);return __setModuleDefault(l,o),l}})(),__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"),InspectorContext_1=require("./InspectorContext"),i18n_1=require("../../i18n"),TouchableScale_1=__importDefault(require("../TouchableScale")),AnimatedEntrance_1=__importDefault(require("../AnimatedEntrance")),ConsoleLogCard_1=require("../ConsoleLogCard"),EmptyState_1=__importDefault(require("../EmptyState")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),ConsoleExportModal_1=__importDefault(require("./ConsoleExportModal")),styles_1=__importDefault(require("../../styles")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),types_1=require("../../types"),NetworkIcons_1=require("../NetworkIcons"),LOAD_MORE_STEP=10,ConsoleTab=react_1.default.memo(()=>{const{t}=(0,i18n_1.useTranslation)(),{logSearch:o,setLogSearch:l,logSortOrder:n,setLogSortOrder:a,handleDelete:B,logFilters:i,setLogFilters:A,logCounts:_,filteredConsoleLogs:c,visibleConsoleLogs:b,maxConsoleLogs:w,setSelectedLog:I,selectedConsoleLogs:S,toggleSelectConsoleLog:x}=(0,InspectorContext_1.useInspector)(),P=w||100,v=(0,react_1.useRef)(null),[L,V]=react_1.default.useState(P),[O,F]=react_1.default.useState(!1);react_1.default.useEffect(()=>{V(w||100),v.current?.scrollToOffset({offset:0,animated:!1})},[o,i,w]);const m=(0,react_1.useMemo)(()=>c.slice(0,L),[c,L]),E=(0,react_1.useCallback)(e=>{I(e)},[I]),M=(0,react_1.useCallback)(({item:e,index:r})=><AnimatedEntrance_1.default index={r}distance={8}>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(t,o,l,n){n===void 0&&(n=l);var a=Object.getOwnPropertyDescriptor(o,l);(!a||("get"in a?!o.__esModule:a.writable||a.configurable))&&(a={enumerable:!0,get:function(){return o[l]}}),Object.defineProperty(t,n,a)}):(function(t,o,l,n){n===void 0&&(n=l),t[n]=o[l]})),__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(l){var n=[];for(var a in l)Object.prototype.hasOwnProperty.call(l,a)&&(n[n.length]=a);return n},t(o)};return function(o){if(o&&o.__esModule)return o;var l={};if(o!=null)for(var n=t(o),a=0;a<n.length;a++)n[a]!=="default"&&__createBinding(l,o,n[a]);return __setModuleDefault(l,o),l}})(),__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"),InspectorContext_1=require("./InspectorContext"),i18n_1=require("../../i18n"),TouchableScale_1=__importDefault(require("../TouchableScale")),AnimatedEntrance_1=__importDefault(require("../AnimatedEntrance")),ConsoleLogCard_1=require("../ConsoleLogCard"),EmptyState_1=__importDefault(require("../EmptyState")),EndOfListFooter_1=__importDefault(require("../EndOfListFooter")),ConsoleExportModal_1=__importDefault(require("./ConsoleExportModal")),styles_1=__importDefault(require("../../styles")),AppColors_1=require("../../styles/AppColors"),AppFonts_1=require("../../styles/AppFonts"),types_1=require("../../types"),NetworkIcons_1=require("../NetworkIcons"),LOAD_MORE_STEP=10,ConsoleTab=react_1.default.memo(()=>{const{t}=(0,i18n_1.useTranslation)(),{logSearch:o,setLogSearch:l,logSortOrder:n,setLogSortOrder:a,handleDelete:B,logFilters:i,setLogFilters:A,logCounts:_,filteredConsoleLogs:c,visibleConsoleLogs:w,maxConsoleLogs:b,setSelectedLog:I,selectedConsoleLogs:S,toggleSelectConsoleLog:x}=(0,InspectorContext_1.useInspector)(),P=b||100,v=(0,react_1.useRef)(null),[L,V]=react_1.default.useState(P),[O,F]=react_1.default.useState(!1);react_1.default.useEffect(()=>{V(b||100),v.current?.scrollToOffset({offset:0,animated:!1})},[o,i,b]);const m=(0,react_1.useMemo)(()=>c.slice(0,L),[c,L]),E=(0,react_1.useCallback)(e=>{I(e)},[I]),M=(0,react_1.useCallback)(({item:e,index:r})=><AnimatedEntrance_1.default index={r}distance={8}>
2
2
  <ConsoleLogCard_1.ConsoleLogCard testID={`inspector.console.item.${r}`}item={e}searchStr={o}onPress={E}isSelected={S.has(e.id)}onToggleSelect={x}/>
3
- </AnimatedEntrance_1.default>,[o,E,S,x]),D=(0,react_1.useCallback)((e,r)=>({length:148,offset:148*r,index:r}),[]),H=(0,react_1.useCallback)((e,r)=>e?.id?.toString()??r.toString(),[]),$=(0,react_1.useMemo)(()=>{const e=b.length,r=c.length;if(i.has("all")||!Array.from(i).some(h=>h!=="all"))return<react_native_1.View style={{paddingHorizontal:8,paddingTop:8,paddingBottom:3}}>
3
+ </AnimatedEntrance_1.default>,[o,E,S,x]),D=(0,react_1.useCallback)((e,r)=>e?.id?.toString()??r.toString(),[]),H=(0,react_1.useMemo)(()=>{const e=w.length,r=c.length;if(i.has("all")||!Array.from(i).some(h=>h!=="all"))return<react_native_1.View style={{paddingHorizontal:8,paddingTop:8,paddingBottom:3}}>
4
4
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.2}}>
5
5
  {r===e?`Showing ${e} logs`:`Showing ${r} of ${e} logs`}
6
6
  </react_native_1.Text>
@@ -8,7 +8,7 @@
8
8
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interMedium,fontSize:11,color:AppColors_1.AppColors.grayTextWeak,letterSpacing:.2}}>
9
9
  Filtered by {h.join(", ")} ({r} of {e} logs)
10
10
  </react_native_1.Text>
11
- </react_native_1.View>}},[b.length,c.length,i]),[T,z]=react_1.default.useState(!1),R=(0,react_1.useMemo)(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]"],[]),k=(0,react_1.useMemo)(()=>[{id:types_1.LogFilter.All,label:t("common.all","All"),count:_.all?.split("/")?.[0]??"0",color:AppColors_1.AppColors.purple,Icon:NetworkIcons_1.LayersIcon},{id:types_1.LogFilter.UserLog,label:t("console.log","Log"),count:_["user-log"]?.split("/")?.[0]??"0",color:AppColors_1.AppColors.teal600,Icon:NetworkIcons_1.UserIcon},{id:types_1.LogFilter.Info,label:t("console.info","Info"),count:_.info?.split("/")?.[0]??"0",color:AppColors_1.AppColors.sky600,Icon:NetworkIcons_1.InfoCircleIcon},{id:types_1.LogFilter.Warn,label:t("console.warning","Warn"),count:_.warn?.split("/")?.[0]??"0",color:AppColors_1.AppColors.amber600,Icon:NetworkIcons_1.WarningTriangleIcon},{id:types_1.LogFilter.Error,label:t("console.error","Error"),count:_.error?.split("/")?.[0]??"0",color:AppColors_1.AppColors.errorColor,Icon:NetworkIcons_1.ErrorCircleIcon},{id:types_1.LogFilter.Analytics,label:t("console.analytics","Analytics"),count:_.analytics?.split("/")?.[0]??"0",color:AppColors_1.AppColors.violet600,Icon:NetworkIcons_1.AnalyticsIcon}],[_,t]);return<react_native_1.View style={{flex:1}}>
11
+ </react_native_1.View>}},[w.length,c.length,i]),[T,z]=react_1.default.useState(!1),$=(0,react_1.useMemo)(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]"],[]),R=(0,react_1.useMemo)(()=>[{id:types_1.LogFilter.All,label:t("common.all","All"),count:_.all?.split("/")?.[0]??"0",color:AppColors_1.AppColors.purple,Icon:NetworkIcons_1.LayersIcon},{id:types_1.LogFilter.UserLog,label:t("console.log","Log"),count:_["user-log"]?.split("/")?.[0]??"0",color:AppColors_1.AppColors.teal600,Icon:NetworkIcons_1.UserIcon},{id:types_1.LogFilter.Info,label:t("console.info","Info"),count:_.info?.split("/")?.[0]??"0",color:AppColors_1.AppColors.sky600,Icon:NetworkIcons_1.InfoCircleIcon},{id:types_1.LogFilter.Warn,label:t("console.warning","Warn"),count:_.warn?.split("/")?.[0]??"0",color:AppColors_1.AppColors.amber600,Icon:NetworkIcons_1.WarningTriangleIcon},{id:types_1.LogFilter.Error,label:t("console.error","Error"),count:_.error?.split("/")?.[0]??"0",color:AppColors_1.AppColors.errorColor,Icon:NetworkIcons_1.ErrorCircleIcon},{id:types_1.LogFilter.Analytics,label:t("console.analytics","Analytics"),count:_.analytics?.split("/")?.[0]??"0",color:AppColors_1.AppColors.violet600,Icon:NetworkIcons_1.AnalyticsIcon}],[_,t]);return<react_native_1.View style={{flex:1}}>
12
12
  <react_native_1.View style={{backgroundColor:AppColors_1.AppColors.white,borderBottomWidth:1,borderBottomColor:AppColors_1.AppColors.dividerColor,paddingBottom:6}}>
13
13
  <react_native_1.View style={[styles_1.default.toolbarRow,{marginTop:12,marginBottom:8}]}>
14
14
  <react_native_1.View style={[styles_1.default.searchContainer,T&&{borderColor:AppColors_1.AppColors.purple,borderWidth:1.5}]}>
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
  {(T||o.length>0)&&<react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}style={{marginBottom:6,maxHeight:30}}contentContainerStyle={{paddingHorizontal:8,flexDirection:"row",alignItems:"center",gap:6}}>
49
- {R.map(e=>{const r=o.includes(e);return<TouchableScale_1.default key={e}onPress={()=>{l(r?s=>s.replace(e,"").trim():s=>s?`${s} ${e}`.trim():e)}}>
49
+ {$.map(e=>{const r=o.includes(e);return<TouchableScale_1.default key={e}onPress={()=>{l(r?s=>s.replace(e,"").trim():s=>s?`${s} ${e}`.trim():e)}}>
50
50
  <react_native_1.View style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:r?AppColors_1.AppColors.purple:`${AppColors_1.AppColors.purple}14`,borderWidth:1,borderColor:r?AppColors_1.AppColors.purple:`${AppColors_1.AppColors.purple}30`}}>
51
51
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10,color:r?AppColors_1.AppColors.white:AppColors_1.AppColors.purple}}>
52
52
  {e}
@@ -58,7 +58,7 @@
58
58
 
59
59
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:8,gap:6}}>
60
60
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
61
- {k.map(e=>{const r=e.id==="all"?i.has("all"):i.has(e.id)&&!i.has("all"),s=e.color||AppColors_1.AppColors.purple,h=r?AppColors_1.AppColors.white:s,C=e.Icon;return<TouchableScale_1.default testID={`inspector.console.filter.${e.id}`}key={e.id}onPress={()=>{e.id==="all"?A(new Set(["all"])):A(q=>{const y=new Set(q);return y.delete("all"),y.has(e.id)?y.delete(e.id):y.add(e.id),y.size===0&&y.add("all"),y})}}>
61
+ {R.map(e=>{const r=e.id==="all"?i.has("all"):i.has(e.id)&&!i.has("all"),s=e.color||AppColors_1.AppColors.purple,h=r?AppColors_1.AppColors.white:s,C=e.Icon;return<TouchableScale_1.default testID={`inspector.console.filter.${e.id}`}key={e.id}onPress={()=>{e.id==="all"?A(new Set(["all"])):A(q=>{const y=new Set(q);return y.delete("all"),y.has(e.id)?y.delete(e.id):y.add(e.id),y.size===0&&y.add("all"),y})}}>
62
62
  <react_native_1.View style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:r?s:`${s}12`,borderWidth:1,borderColor:r?s:`${s}30`,gap:5}}>
63
63
  <C size={11}color={h}/>
64
64
  <react_native_1.Text style={{fontFamily:AppFonts_1.AppFonts.interBold,fontSize:10.5,color:r?AppColors_1.AppColors.white:AppColors_1.AppColors.primaryBlack}}>
@@ -75,7 +75,7 @@
75
75
  </react_native_1.View>
76
76
  </react_native_1.View>
77
77
 
78
- <react_native_1.FlatList ref={v}data={m}keyExtractor={H}ListHeaderComponent={$}renderItem={M}getItemLayout={D}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}ListEmptyComponent={<EmptyState_1.default isSearch={o.length>0||!i.has("all")}searchQuery={o}customTitle={o.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{l(""),A(new Set(["all"]))}}/>}ListFooterComponent={c.length>0?<EndOfListFooter_1.default count={m.length}totalCount={c.length}label="logs"loadMoreStep={LOAD_MORE_STEP}hasMore={m.length<c.length}onLoadMore={()=>V(e=>e+LOAD_MORE_STEP)}/>:null}style={{flex:1}}contentContainerStyle={[styles_1.default.listContent,{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
78
+ <react_native_1.FlatList ref={v}data={m}keyExtractor={D}ListHeaderComponent={H}renderItem={M}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}ListEmptyComponent={<EmptyState_1.default isSearch={o.length>0||!i.has("all")}searchQuery={o}customTitle={o.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{l(""),A(new Set(["all"]))}}/>}ListFooterComponent={c.length>0?<EndOfListFooter_1.default count={m.length}totalCount={c.length}label="logs"loadMoreStep={LOAD_MORE_STEP}hasMore={m.length<c.length}onLoadMore={()=>V(e=>e+LOAD_MORE_STEP)}/>:null}style={{flex:1}}contentContainerStyle={[styles_1.default.listContent,{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
79
79
 
80
- <ConsoleExportModal_1.default visible={O}onClose={()=>F(!1)}filteredLogs={c}allLogs={b}/>
80
+ <ConsoleExportModal_1.default visible={O}onClose={()=>F(!1)}filteredLogs={c}allLogs={w}/>
81
81
  </react_native_1.View>});exports.default=ConsoleTab;
@@ -1,4 +1,4 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,o,a,s){s===void 0&&(s=a);var c=Object.getOwnPropertyDescriptor(o,a);(!c||("get"in c?!o.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return o[a]}}),Object.defineProperty(i,s,c)}):(function(i,o,a,s){s===void 0&&(s=a),i[s]=o[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}):function(i,o){i.default=o}),__importStar=this&&this.__importStar||(function(){var i=function(o){return i=Object.getOwnPropertyNames||function(a){var s=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(s[s.length]=c);return s},i(o)};return function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var s=i(o),c=0;c<s.length;c++)s[c]!=="default"&&__createBinding(a,o,s[c]);return __setModuleDefault(a,o),a}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};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:i,isMinimized:o,setIsMinimized:a,dismissInspector:s,appIcon:c,fabPan:l,fabPanResponder:ie,fabDraggedRef:T,pulseAnim:k,fabShineAnim:oe,refreshMediaCount:h,captureFps:L,captureScale:E,captureBitrate:O,captureMaxDurationSeconds:q,captureAudioMode:H,previewMediaItem:W,setPreviewMediaItem:b}=(0,InspectorContext_1.useInspector)(),{width:S,height:v}=(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),y=(0,react_1.useRef)(null),[G,B]=(0,react_1.useState)(!1),[z,_]=(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,w=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(r=>w.current.x=r.value),t=l.y.addListener(r=>w.current.y=r.value);return()=>{l.x.removeListener(e),l.y.removeListener(t)}},[l]);const u=68,V=8,U=(0,react_1.useCallback)(()=>{const e=w.current.x,t=w.current.y,r=20,R=180,m=S-r-u/2+e,M=v-R-u/2+t;let N=e,F=t,A=!1;m<V+u/2?(N=e+(V+u/2-m),A=!0):m>S-V-u/2&&(N=e-(m-(S-V-u/2)),A=!0);const Y=react_native_1.Platform.OS==="ios"?60:40,$=react_native_1.Platform.OS==="ios"?40:24;M<Y+u/2?(F=t+(Y+u/2-M),A=!0):M>v-$-u/2&&(F=t-(M-(v-$-u/2)),A=!0),A&&react_native_1.Animated.spring(l,{toValue:{x:N,y:F},useNativeDriver:!1,tension:80,friction:8}).start()},[l,S,v]),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:w.current.x,y:w.current.y}),l.setValue({x:0,y:0}),f.current=!1,_(!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 r=t.moveY,R=t.moveX,m=r>v-140&&Math.abs(R-S/2)<85;m&&!f.current?(f.current=!0,_(!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,_(!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),_(!1),f.current=!1}),e?((0,NativeInspector_1.triggerNativeHaptic)("heavy"),s(),(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),_(!1),f.current=!1})}})).current,d=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,C=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=d.x.addListener(r=>C.current.x=r.value),t=d.y.addListener(r=>C.current.y=r.value);return()=>{d.x.removeListener(e),d.y.removeListener(t)}},[d]);const g=(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:()=>{g.current=!0,d.setOffset({x:C.current.x,y:C.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=C.current.y,t=-(v-(react_native_1.Platform.OS==="ios"?34:18)-70),r=react_native_1.Platform.OS==="ios"?34:18;if(e<t||e>r){const R=Math.max(t,Math.min(r,e));react_native_1.Animated.spring(d,{toValue:{x:C.current.x,y:R},useNativeDriver:!1,tension:80,friction:8}).start()}setTimeout(()=>{g.current=!1},50)},onPanResponderTerminate:()=>{d.flattenOffset(),g.current=!1}})).current;(0,react_1.useEffect)(()=>{capture_1.ScreenCapture.isRecording().then(e=>{I(!!e)}).catch(()=>{})},[]),(0,react_1.useEffect)(()=>(p?(D(0),y.current=setInterval(()=>{D(e=>e+1)},1e3)):(y.current&&(clearInterval(y.current),y.current=null),D(0)),()=>{y.current&&clearInterval(y.current)}),[p]);const Q=(0,react_1.useCallback)(async()=>{if(!g.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=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),r={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};b(r),h?.().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"))}},[h,n]),ee=(0,react_1.useCallback)(async()=>{if(!g.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=(0,capture_1.generateCaptureId)("video",e.format),r={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};b(r),h?.().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,h,n]),j=(0,react_1.useCallback)(()=>{g.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!0))},[a,i]),te=(0,react_1.useCallback)(()=>{g.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!1))},[a,i]),re=e=>{const t=Math.floor(e/60),r=e%60;return`${t}:${r<10?"0":""}${r}`};return<>
1
+ "use strict";var __createBinding=this&&this.__createBinding||(Object.create?(function(i,o,a,s){s===void 0&&(s=a);var c=Object.getOwnPropertyDescriptor(o,a);(!c||("get"in c?!o.__esModule:c.writable||c.configurable))&&(c={enumerable:!0,get:function(){return o[a]}}),Object.defineProperty(i,s,c)}):(function(i,o,a,s){s===void 0&&(s=a),i[s]=o[a]})),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?(function(i,o){Object.defineProperty(i,"default",{enumerable:!0,value:o})}):function(i,o){i.default=o}),__importStar=this&&this.__importStar||(function(){var i=function(o){return i=Object.getOwnPropertyNames||function(a){var s=[];for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(s[s.length]=c);return s},i(o)};return function(o){if(o&&o.__esModule)return o;var a={};if(o!=null)for(var s=i(o),c=0;c<s.length;c++)s[c]!=="default"&&__createBinding(a,o,s[c]);return __setModuleDefault(a,o),a}})(),__importDefault=this&&this.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};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:i,isMinimized:o,setIsMinimized:a,dismissInspector:s,appIcon:c,fabPan:l,fabPanResponder:ie,fabDraggedRef:T,pulseAnim:$,fabShineAnim:oe,refreshMediaCount:h,captureFps:F,captureScale:H,captureBitrate:M,captureMaxDurationSeconds:E,captureAudioMode:q,previewMediaItem:W,setPreviewMediaItem:b}=(0,InspectorContext_1.useInspector)(),{width:S,height:y}=(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),[G,B]=(0,react_1.useState)(!1),[z,_]=(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,w=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=l.x.addListener(r=>w.current.x=r.value),t=l.y.addListener(r=>w.current.y=r.value);return()=>{l.x.removeListener(e),l.y.removeListener(t)}},[l]);const u=68,V=8,U=(0,react_1.useCallback)(()=>{const e=w.current.x,t=w.current.y,r=20,R=180,m=S-r-u/2+e,O=y-R-u/2+t;let N=e,L=t,A=!1;m<V+u/2?(N=e+(V+u/2-m),A=!0):m>S-V-u/2&&(N=e-(m-(S-V-u/2)),A=!0);const k=react_native_1.Platform.OS==="ios"?60:40,Y=react_native_1.Platform.OS==="ios"?40:24;O<k+u/2?(L=t+(k+u/2-O),A=!0):O>y-Y-u/2&&(L=t-(O-(y-Y-u/2)),A=!0),A&&react_native_1.Animated.spring(l,{toValue:{x:N,y:L},useNativeDriver:!1,tension:80,friction:8}).start()},[l,S,y]),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:w.current.x,y:w.current.y}),l.setValue({x:0,y:0}),f.current=!1,_(!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 r=t.moveY,R=t.moveX,m=r>y-140&&Math.abs(R-S/2)<85;m&&!f.current?(f.current=!0,_(!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,_(!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),_(!1),f.current=!1}),e?((0,NativeInspector_1.triggerNativeHaptic)("heavy"),s(),(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),_(!1),f.current=!1})}})).current,d=(0,react_1.useRef)(new react_native_1.Animated.ValueXY({x:0,y:0})).current,C=(0,react_1.useRef)({x:0,y:0});(0,react_1.useEffect)(()=>{const e=d.x.addListener(r=>C.current.x=r.value),t=d.y.addListener(r=>C.current.y=r.value);return()=>{d.x.removeListener(e),d.y.removeListener(t)}},[d]);const g=(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:()=>{g.current=!0,d.setOffset({x:C.current.x,y:C.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=C.current.y,t=-(y-(react_native_1.Platform.OS==="ios"?34:18)-70),r=react_native_1.Platform.OS==="ios"?34:18;if(e<t||e>r){const R=Math.max(t,Math.min(r,e));react_native_1.Animated.spring(d,{toValue:{x:C.current.x,y:R},useNativeDriver:!1,tension:80,friction:8}).start()}setTimeout(()=>{g.current=!1},50)},onPanResponderTerminate:()=>{d.flattenOffset(),g.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(!g.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=(0,capture_1.generateCaptureId)("screenshot",e.format||"png"),r={id:t,type:"image",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,width:e.width,height:e.height};b(r),h?.().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"))}},[h,n]),ee=(0,react_1.useCallback)(async()=>{if(!g.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=(0,capture_1.generateCaptureId)("video",e.format),r={id:t,type:e.format==="gif"?"gif":"video",format:e.format,uri:e.uri,filename:e.uri.split("/").pop()||t,sizeBytes:e.sizeBytes,timestamp:e.timestamp,durationMs:e.durationMs,width:e.width,height:e.height,hasAudio:e.hasAudio,thumbnailUri:e.thumbnailUri};b(r),h?.().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:F,scale:H,audioSource:q,bitrate:M>0?M:void 0,maxDurationSeconds:E})?(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,F,H,M,E,q,h,n]),j=(0,react_1.useCallback)(()=>{g.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!0))},[a,i]),te=(0,react_1.useCallback)(()=>{g.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),a?.(!1),i(!1))},[a,i]),re=e=>{const t=Math.floor(e/60),r=e%60;return`${t}:${r<10?"0":""}${r}`};return<>
2
2
 
3
3
  {o?<react_native_1.Animated.View style={[fabStyles.playerContainer,{transform:d.getTranslateTransform()}]}{...J.panHandlers}>
4
4
 
@@ -60,8 +60,8 @@
60
60
  </TouchableScale_1.default>
61
61
  </react_native_1.View>
62
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 testID="inspector.fab.launcher"style={{width:68,height:68,borderRadius:34,alignItems:"center",justifyContent:"center"}}onPress={()=>{T.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),i(!0))}}hitSlop={10}>
64
- <react_native_1.Animated.View style={[styles_1.default.fabPulseRing,{transform:[{scale:k}]}]}/>
63
+ <TouchableScale_1.default testID="inspector.fab.launcher"accessible={!0}accessibilityRole="button"accessibilityLabel={n("accessibility.openInspector","Open In-App Network and System Inspector")}accessibilityHint={n("accessibility.openInspectorHint","Double tap to open the full debug inspector")}style={{width:68,height:68,borderRadius:34,alignItems:"center",justifyContent:"center"}}onPress={()=>{T.current||((0,NativeInspector_1.triggerNativeHaptic)("light"),i(!0))}}hitSlop={10}>
64
+ <react_native_1.Animated.View style={[styles_1.default.fabPulseRing,{transform:[{scale:$}]}]}/>
65
65
  <AppHeaderLogo_1.default size={68}customIcon={c}shape="circle"/>
66
66
  </TouchableScale_1.default>
67
67
  </react_native_1.Animated.View>}