react-native-inapp-inspector 2.5.10 → 2.5.12

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 (134) hide show
  1. package/README.ar.md +0 -8
  2. package/README.de.md +0 -8
  3. package/README.es.md +0 -8
  4. package/README.fr.md +0 -8
  5. package/README.hi.md +0 -8
  6. package/README.ja.md +0 -8
  7. package/README.ko.md +0 -8
  8. package/README.md +54 -26
  9. package/README.pt-BR.md +0 -8
  10. package/README.ru.md +0 -8
  11. package/README.zh-CN.md +0 -8
  12. package/dist/commonjs/components/ConsoleLogCard.js +32 -26
  13. package/dist/commonjs/components/ErrorBoundary.js +1 -1
  14. package/dist/commonjs/components/Inspector/ConsoleTab.js +19 -14
  15. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +4 -4
  16. package/dist/commonjs/components/Inspector/InspectorHeader.js +73 -65
  17. package/dist/commonjs/components/Inspector/MainScreen.js +9 -6
  18. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +187 -90
  19. package/dist/commonjs/components/Inspector/NetworkDetail.js +11 -8
  20. package/dist/commonjs/components/Inspector/NetworkTab.js +33 -31
  21. package/dist/commonjs/components/Inspector/PerformanceTab.d.ts +2 -0
  22. package/dist/commonjs/components/Inspector/PerformanceTab.js +652 -0
  23. package/dist/commonjs/components/Inspector/SettingsPanel.js +346 -245
  24. package/dist/commonjs/components/Inspector/TabBar.js +17 -16
  25. package/dist/commonjs/components/LogCard.js +11 -8
  26. package/dist/commonjs/components/ModuleErrorBoundary.js +1 -1
  27. package/dist/commonjs/components/NetworkIcons.d.ts +9 -0
  28. package/dist/commonjs/components/NetworkIcons.js +51 -6
  29. package/dist/commonjs/constants/index.d.ts +1 -0
  30. package/dist/commonjs/constants/index.js +1 -1
  31. package/dist/commonjs/constants/version.d.ts +1 -1
  32. package/dist/commonjs/constants/version.js +1 -1
  33. package/dist/commonjs/customHooks/crashHandler.d.ts +9 -1
  34. package/dist/commonjs/customHooks/crashHandler.js +4 -4
  35. package/dist/commonjs/helpers/index.d.ts +3 -0
  36. package/dist/commonjs/helpers/index.js +8 -6
  37. package/dist/commonjs/helpers/performanceSampler.d.ts +88 -0
  38. package/dist/commonjs/helpers/performanceSampler.js +1 -0
  39. package/dist/commonjs/helpers/remoteConfig.d.ts +6 -0
  40. package/dist/commonjs/helpers/remoteConfig.js +1 -1
  41. package/dist/commonjs/helpers/telemetry.js +1 -1
  42. package/dist/commonjs/i18n/locales/ar.json +1 -1
  43. package/dist/commonjs/i18n/locales/bn.json +1 -1
  44. package/dist/commonjs/i18n/locales/de.json +1 -1
  45. package/dist/commonjs/i18n/locales/en.json +1 -1
  46. package/dist/commonjs/i18n/locales/es.json +1 -1
  47. package/dist/commonjs/i18n/locales/fr.json +1 -1
  48. package/dist/commonjs/i18n/locales/gu.json +1 -1
  49. package/dist/commonjs/i18n/locales/hi.json +1 -1
  50. package/dist/commonjs/i18n/locales/id.json +1 -1
  51. package/dist/commonjs/i18n/locales/it.json +1 -1
  52. package/dist/commonjs/i18n/locales/ja.json +1 -1
  53. package/dist/commonjs/i18n/locales/kn.json +1 -1
  54. package/dist/commonjs/i18n/locales/ko.json +1 -1
  55. package/dist/commonjs/i18n/locales/ml.json +1 -1
  56. package/dist/commonjs/i18n/locales/mr.json +1 -1
  57. package/dist/commonjs/i18n/locales/nl.json +1 -1
  58. package/dist/commonjs/i18n/locales/pa.json +1 -1
  59. package/dist/commonjs/i18n/locales/pl.json +1 -1
  60. package/dist/commonjs/i18n/locales/pt.json +1 -1
  61. package/dist/commonjs/i18n/locales/ru.json +1 -1
  62. package/dist/commonjs/i18n/locales/ta.json +1 -1
  63. package/dist/commonjs/i18n/locales/te.json +1 -1
  64. package/dist/commonjs/i18n/locales/tr.json +1 -1
  65. package/dist/commonjs/i18n/locales/vi.json +1 -1
  66. package/dist/commonjs/i18n/locales/zh.json +1 -1
  67. package/dist/commonjs/index.d.ts +4 -2
  68. package/dist/commonjs/index.js +3 -3
  69. package/dist/commonjs/styles/index.js +1 -1
  70. package/dist/commonjs/types/enums.d.ts +1 -0
  71. package/dist/commonjs/types/enums.js +1 -1
  72. package/dist/commonjs/types/interfaces.d.ts +28 -0
  73. package/dist/esm/components/ConsoleLogCard.js +67 -61
  74. package/dist/esm/components/ErrorBoundary.js +10 -10
  75. package/dist/esm/components/Inspector/ConsoleTab.js +33 -28
  76. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +22 -22
  77. package/dist/esm/components/Inspector/InspectorHeader.js +194 -186
  78. package/dist/esm/components/Inspector/MainScreen.js +61 -58
  79. package/dist/esm/components/Inspector/MediaGalleryTab.js +254 -157
  80. package/dist/esm/components/Inspector/NetworkDetail.js +62 -59
  81. package/dist/esm/components/Inspector/NetworkTab.js +39 -37
  82. package/dist/esm/components/Inspector/PerformanceTab.d.ts +2 -0
  83. package/dist/esm/components/Inspector/PerformanceTab.js +652 -0
  84. package/dist/esm/components/Inspector/SettingsPanel.js +407 -306
  85. package/dist/esm/components/Inspector/TabBar.js +4 -3
  86. package/dist/esm/components/LogCard.js +37 -34
  87. package/dist/esm/components/ModuleErrorBoundary.js +1 -1
  88. package/dist/esm/components/NetworkIcons.d.ts +9 -0
  89. package/dist/esm/components/NetworkIcons.js +48 -3
  90. package/dist/esm/constants/index.d.ts +1 -0
  91. package/dist/esm/constants/index.js +1 -1
  92. package/dist/esm/constants/version.d.ts +1 -1
  93. package/dist/esm/constants/version.js +1 -1
  94. package/dist/esm/customHooks/crashHandler.d.ts +9 -1
  95. package/dist/esm/customHooks/crashHandler.js +6 -6
  96. package/dist/esm/helpers/index.d.ts +3 -0
  97. package/dist/esm/helpers/index.js +8 -6
  98. package/dist/esm/helpers/performanceSampler.d.ts +88 -0
  99. package/dist/esm/helpers/performanceSampler.js +1 -0
  100. package/dist/esm/helpers/remoteConfig.d.ts +6 -0
  101. package/dist/esm/helpers/remoteConfig.js +1 -1
  102. package/dist/esm/helpers/telemetry.js +1 -1
  103. package/dist/esm/i18n/locales/ar.json +1 -1
  104. package/dist/esm/i18n/locales/bn.json +1 -1
  105. package/dist/esm/i18n/locales/de.json +1 -1
  106. package/dist/esm/i18n/locales/en.json +1 -1
  107. package/dist/esm/i18n/locales/es.json +1 -1
  108. package/dist/esm/i18n/locales/fr.json +1 -1
  109. package/dist/esm/i18n/locales/gu.json +1 -1
  110. package/dist/esm/i18n/locales/hi.json +1 -1
  111. package/dist/esm/i18n/locales/id.json +1 -1
  112. package/dist/esm/i18n/locales/it.json +1 -1
  113. package/dist/esm/i18n/locales/ja.json +1 -1
  114. package/dist/esm/i18n/locales/kn.json +1 -1
  115. package/dist/esm/i18n/locales/ko.json +1 -1
  116. package/dist/esm/i18n/locales/ml.json +1 -1
  117. package/dist/esm/i18n/locales/mr.json +1 -1
  118. package/dist/esm/i18n/locales/nl.json +1 -1
  119. package/dist/esm/i18n/locales/pa.json +1 -1
  120. package/dist/esm/i18n/locales/pl.json +1 -1
  121. package/dist/esm/i18n/locales/pt.json +1 -1
  122. package/dist/esm/i18n/locales/ru.json +1 -1
  123. package/dist/esm/i18n/locales/ta.json +1 -1
  124. package/dist/esm/i18n/locales/te.json +1 -1
  125. package/dist/esm/i18n/locales/tr.json +1 -1
  126. package/dist/esm/i18n/locales/vi.json +1 -1
  127. package/dist/esm/i18n/locales/zh.json +1 -1
  128. package/dist/esm/index.d.ts +4 -2
  129. package/dist/esm/index.js +8 -8
  130. package/dist/esm/styles/index.js +1 -1
  131. package/dist/esm/types/enums.d.ts +1 -0
  132. package/dist/esm/types/enums.js +1 -1
  133. package/dist/esm/types/interfaces.d.ts +28 -0
  134. package/package.json +24 -1
@@ -131,6 +131,14 @@ export interface InspectorStorage {
131
131
  setItem: (key: string, value: string) => void | Promise<void>;
132
132
  removeItem?: (key: string) => void | Promise<void>;
133
133
  }
134
+ export interface CrashIgnoredTypes {
135
+ js: boolean;
136
+ native: boolean;
137
+ render: boolean;
138
+ promise: boolean;
139
+ custom: boolean;
140
+ }
141
+ export type CrashModalTriggerPolicy = 'fatal_only' | 'all_errors' | 'silent_tab_only';
134
142
  export interface PersistedSettings {
135
143
  isDark?: boolean;
136
144
  language?: string;
@@ -142,6 +150,9 @@ export interface PersistedSettings {
142
150
  maxConsoleLogs?: number;
143
151
  maxAnalyticsEventsLimit?: number;
144
152
  maxCrashLogs?: number;
153
+ crashIgnoredTypes?: CrashIgnoredTypes;
154
+ crashModalTriggerPolicy?: CrashModalTriggerPolicy;
155
+ crashThrottleDuplicates?: boolean;
145
156
  maxPushLogsLimit?: number;
146
157
  maxSocketLogsLimit?: number;
147
158
  isSocketAutoCaptureEnabled?: boolean;
@@ -175,10 +186,13 @@ export interface PersistedSettings {
175
186
  captureBitrate?: number;
176
187
  captureMaxDurationSeconds?: number;
177
188
  captureAutoGif?: boolean;
189
+ captureWidgetEnabled?: boolean;
178
190
  peekOpacity?: number;
191
+ hiddenUrlPatterns?: string[];
179
192
  }
180
193
  export interface NetworkInspectorProps {
181
194
  enabled?: boolean;
195
+ captureWidgetEnabled?: boolean;
182
196
  telemetry?: boolean;
183
197
  storage?: InspectorStorage;
184
198
  navigationRef?: any;
@@ -299,6 +313,8 @@ export interface InspectorContextValue {
299
313
  handleDelete: () => void;
300
314
  isGroupByPageEnabled: boolean;
301
315
  setIsGroupByPageEnabled: React.Dispatch<React.SetStateAction<boolean>>;
316
+ hiddenUrlPatterns: string[];
317
+ setHiddenUrlPatterns: React.Dispatch<React.SetStateAction<string[]>>;
302
318
  detailTitle: string;
303
319
  detailDisplayUrl: string;
304
320
  apiDetailActiveTab: 'metadata' | 'headers' | 'request' | 'response';
@@ -326,6 +342,9 @@ export interface InspectorContextValue {
326
342
  logCounts: Record<string, string>;
327
343
  logSortOrder: SortOrder;
328
344
  setLogSortOrder: React.Dispatch<React.SetStateAction<SortOrder>>;
345
+ selectedConsoleLogs: Set<number>;
346
+ setSelectedConsoleLogs: React.Dispatch<React.SetStateAction<Set<number>>>;
347
+ toggleSelectConsoleLog: (id: number) => void;
329
348
  analyticsEvents: AnalyticsEvent[];
330
349
  filteredAnalyticsEvents: (AnalyticsEvent & {
331
350
  count?: number;
@@ -360,6 +379,11 @@ export interface InspectorContextValue {
360
379
  maxCrashLogs: number;
361
380
  setMaxCrashLogs: React.Dispatch<React.SetStateAction<number>>;
362
381
  clearAllCrashes: () => void;
382
+ crashIgnoredTypes: CrashIgnoredTypes;
383
+ setCrashIgnoredTypes: React.Dispatch<React.SetStateAction<CrashIgnoredTypes>>;
384
+ crashModalTriggerPolicy: CrashModalTriggerPolicy;
385
+ setCrashModalTriggerPolicyState: React.Dispatch<React.SetStateAction<CrashModalTriggerPolicy>>;
386
+ applyCrashPolicyPreset: (preset: 'balanced' | 'max_shield' | 'silent') => void;
363
387
  pushRecords: PushNotificationRecord[];
364
388
  filteredPushRecords: PushNotificationRecord[];
365
389
  selectedPush: PushNotificationRecord | null;
@@ -441,6 +465,8 @@ export interface InspectorContextValue {
441
465
  setCaptureAutoHide: React.Dispatch<React.SetStateAction<boolean>>;
442
466
  captureAutoGif: boolean;
443
467
  setCaptureAutoGif: React.Dispatch<React.SetStateAction<boolean>>;
468
+ captureWidgetEnabled: boolean;
469
+ setCaptureWidgetEnabled: React.Dispatch<React.SetStateAction<boolean>>;
444
470
  peekMode: boolean;
445
471
  setPeekMode: React.Dispatch<React.SetStateAction<boolean>>;
446
472
  peekOpacity: number;
@@ -542,6 +568,8 @@ export interface ConsoleLogCardProps {
542
568
  searchStr?: string;
543
569
  onPress?: (item: ConsoleLog) => void;
544
570
  testID?: string;
571
+ isSelected?: boolean;
572
+ onToggleSelect?: (id: number) => void;
545
573
  }
546
574
  export interface JsonContent {
547
575
  header: string;
@@ -1,95 +1,101 @@
1
- import F from"react";import{useTranslation as v}from"../i18n";import{Pressable as K,StyleSheet as Y,Text as E,View as I}from"react-native";import{AppColors as r}from"../styles/AppColors";import{AppFonts as S}from"../styles/AppFonts";import{formatTime as X,getJsonContent as J,getJsonPreviewText as Q,parseStackLine as Z,openInVSCode as q,getSize as _,getCleanCallerDisplay as ee}from"../helpers";import Ie from"./TouchableScale";import L from"./LogSyntaxHighlighter";import{ForwardChevronIcon as Te,ExternalLinkIcon as Ce,FlaskIcon as he,ZapIcon as z,GlobeIcon as Se,DiceIcon as me,AtomIcon as U,BarChartIcon as xe,KeyIcon as ye,SmartphoneIcon as Ee,AlertTriangleIcon as Re,BugIcon as Be,TagIcon as Ae,MapPinIcon as $,StorageIcon as Oe,SignalIcon as Pe,FlameIcon as we,MoneyIcon as Ne,CircleCheckIcon as W,CircleAlertIcon as Le,CircleXIcon as ke,RefreshCcwIcon as He,PerformanceIcon as Ve,ChipIcon as De,SettingsIcon as Fe,TerminalIcon as ze,InfoCircleIcon as G,ShieldAlertIcon as Me,LayoutIcon as Ue,ClockIcon as $e,SizeIcon as We}from"./NetworkIcons";import{useInspector as Ge}from"./Inspector/InspectorContext";const ve=(R,t,P,k,H)=>{if(!R)return null;const V=/^((?:\[[^\]]+\]\s*)+)/,w=R.match(V);if(w){const C=w[1],N=R.substring(C.length),T=C.match(/\[[^\]]+\]/g)||[],M=B=>{const e=B.replace(/[\[\]]/g,"").trim().toUpperCase();return e==="AXIOS"?{color:r.emerald600,Icon:z,label:"AXIOS"}:e==="API"||e==="FETCH"||e==="HTTP"||e==="REST"||e==="NETWORK"?{color:r.sky600,Icon:Se,label:e}:e==="GRAPHQL"||e==="GQL"||e==="APOLLO"||e==="MUTATION"||e==="QUERY"?{color:r.pink500,Icon:U,label:e}:e==="WS"||e==="WEBSOCKET"||e==="SOCKET"||e==="SOCKET.IO"||e==="REALTIME"?{color:r.cyan600,Icon:Pe,label:e}:e==="REDUX"||e==="STORE"||e==="STATE"||e==="ZUSTAND"||e==="MOBX"||e==="RECOIL"||e==="ACTION"||e==="DISPATCH"?{color:r.violet600,Icon:U,label:e}:e==="ANALYTICS"||e==="FIREBASE"||e==="GA4"||e==="GA"||e==="SEGMENT"||e==="MIXPANEL"||e==="POSTHOG"||e==="TRACK"||e==="EVENT"?{color:r.teal600,Icon:xe,label:e}:e==="AUTH"||e==="TOKEN"||e==="SESSION"||e==="JWT"||e==="LOGIN"||e==="LOGOUT"||e==="USER"?{color:r.amber600,Icon:ye,label:e}:e==="SECURITY"||e==="SHIELD"||e==="PERMISSION"||e==="PERMISSIONS"?{color:r.indigo600Alt,Icon:Me,label:e}:e==="NAV"||e==="NAVIGATION"||e==="ROUTE"||e==="SCREEN"||e==="ROUTER"||e==="DEEPLINK"?{color:r.indigo600Alt,Icon:$,label:e}:e==="STORAGE"||e==="ASYNCSTORAGE"||e==="MMKV"||e==="SQLITE"||e==="DB"||e==="DATABASE"||e==="REALM"||e==="CACHE"?{color:r.purple500,Icon:Oe,label:e}:e==="PERF"||e==="RENDER"||e==="PERFORMANCE"||e==="FPS"||e==="MEMORY"?{color:r.violet500,Icon:Ve,label:e}:e==="INIT"||e==="BOOT"||e==="STARTUP"||e==="LIFECYCLE"||e==="MOUNT"||e==="UNMOUNT"?{color:r.blue600,Icon:z,label:e}:e==="SYNC"||e==="REFRESH"||e==="BACKGROUND"||e==="JOB"||e==="WORKER"?{color:r.sky600,Icon:He,label:e}:e==="PUSH"||e==="NOTIF"||e==="NOTIFICATION"||e==="FCM"||e==="APNS"?{color:r.darkOrange,Icon:we,label:e}:e==="PAY"||e==="PAYMENT"||e==="STRIPE"||e==="IAP"||e==="BILLING"||e==="CHECKOUT"||e==="CART"?{color:r.emerald600,Icon:Ne,label:e}:e==="DEVICE"||e==="HARDWARE"||e==="BLE"||e==="BLUETOOTH"||e==="NFC"||e==="SENSOR"?{color:r.slate600,Icon:De,label:e}:e==="LOCATION"||e==="GPS"||e==="GEO"?{color:r.emerald600,Icon:$,label:e}:e==="APP"?{color:r.indigo600Alt,Icon:Ee,label:"APP"}:e==="UI"||e==="VIEW"||e==="THEME"||e==="STYLE"||e==="LAYOUT"?{color:r.pink600,Icon:Ue,label:e}:e==="TEST"||e==="MOCK"||e==="SPEC"?{color:r.emerald500,Icon:he,label:"TEST"}:e==="SAMPLE"||e==="BATCH"?{color:r.indigo600Alt,Icon:me,label:e}:e==="CONFIG"||e==="ENV"||e==="SETTINGS"?{color:r.slate700,Icon:Fe,label:e}:e==="DEBUG"||e==="TRACE"?{color:r.purpleText,Icon:ze,label:e}:e==="INFO"?{color:r.sky600,Icon:G,label:"INFO"}:e==="SUCCESS"||e==="OK"||e==="DONE"||e==="PASSED"?{color:r.green600,Icon:W,label:e}:e==="WARN"||e==="WARNING"?{color:r.amber600,Icon:Re,label:"WARN"}:e==="ERROR"||e==="CRASH"||e==="BUG"||e==="FATAL"||e==="EXCEPTION"||e==="FAIL"?{color:r.red600,Icon:Be,label:e==="CRASH"||e==="BUG"||e==="FATAL"||e==="EXCEPTION"||e==="FAIL"?e:"ERROR"}:{color:r.slate600,Icon:Ae,label:e}};return<I style={{flexDirection:"column",gap:2}}>
2
- <I style={{flexDirection:"row",gap:4,overflow:"hidden"}}>
3
- {T.slice(0,2).map((B,e)=>{const A=M(B),D=A.Icon;return<I key={e}style={[o.prefixTag,{backgroundColor:`${A.color}12`,borderColor:`${A.color}30`}]}>
4
- <D color={A.color}size={8.5}/>
5
- <E style={[o.prefixTagText,{color:A.color}]}>
6
- {A.label}
1
+ import V from"react";import{useTranslation as K}from"../i18n";import{Pressable as W,StyleSheet as Y,Text as E,View as C}from"react-native";import X,{Path as J}from"react-native-svg";import{AppColors as r}from"../styles/AppColors";import{AppFonts as x}from"../styles/AppFonts";import{formatTime as Q,getJsonContent as Z,getJsonPreviewText as q,parseStackLine as _,openInVSCode as ee,getSize as re,getCleanCallerDisplay as oe}from"../helpers";import Ce from"./TouchableScale";import L from"./LogSyntaxHighlighter";import{ForwardChevronIcon as Ie,ExternalLinkIcon as Te,FlaskIcon as Se,ZapIcon as F,GlobeIcon as me,DiceIcon as xe,AtomIcon as $,BarChartIcon as ye,KeyIcon as Ee,SmartphoneIcon as Re,AlertTriangleIcon as Be,BugIcon as Ae,TagIcon as Pe,MapPinIcon as U,StorageIcon as Oe,SignalIcon as we,FlameIcon as ke,MoneyIcon as Le,CircleCheckIcon as G,CircleAlertIcon as Ne,CircleXIcon as He,RefreshCcwIcon as De,PerformanceIcon as Ve,ChipIcon as Fe,SettingsIcon as Me,TerminalIcon as ze,InfoCircleIcon as v,ShieldAlertIcon as We,LayoutIcon as $e,ClockIcon as Ue,SizeIcon as Ge}from"./NetworkIcons";import{useInspector as ve}from"./Inspector/InspectorContext";const je=(y,t,B,N,H)=>{if(!y)return null;const P=/^((?:\[[^\]]+\]\s*)+)/,A=y.match(P);if(A){const O=A[1],D=y.substring(O.length),T=O.match(/\[[^\]]+\]/g)||[],w=I=>{const e=I.replace(/[\[\]]/g,"").trim().toUpperCase();return e==="AXIOS"?{color:r.emerald600,Icon:F,label:"AXIOS"}:e==="API"||e==="FETCH"||e==="HTTP"||e==="REST"||e==="NETWORK"?{color:r.sky600,Icon:me,label:e}:e==="GRAPHQL"||e==="GQL"||e==="APOLLO"||e==="MUTATION"||e==="QUERY"?{color:r.pink500,Icon:$,label:e}:e==="WS"||e==="WEBSOCKET"||e==="SOCKET"||e==="SOCKET.IO"||e==="REALTIME"?{color:r.cyan600,Icon:we,label:e}:e==="REDUX"||e==="STORE"||e==="STATE"||e==="ZUSTAND"||e==="MOBX"||e==="RECOIL"||e==="ACTION"||e==="DISPATCH"?{color:r.violet600,Icon:$,label:e}:e==="ANALYTICS"||e==="FIREBASE"||e==="GA4"||e==="GA"||e==="SEGMENT"||e==="MIXPANEL"||e==="POSTHOG"||e==="TRACK"||e==="EVENT"?{color:r.teal600,Icon:ye,label:e}:e==="AUTH"||e==="TOKEN"||e==="SESSION"||e==="JWT"||e==="LOGIN"||e==="LOGOUT"||e==="USER"?{color:r.amber600,Icon:Ee,label:e}:e==="SECURITY"||e==="SHIELD"||e==="PERMISSION"||e==="PERMISSIONS"?{color:r.indigo600Alt,Icon:We,label:e}:e==="NAV"||e==="NAVIGATION"||e==="ROUTE"||e==="SCREEN"||e==="ROUTER"||e==="DEEPLINK"?{color:r.indigo600Alt,Icon:U,label:e}:e==="STORAGE"||e==="ASYNCSTORAGE"||e==="MMKV"||e==="SQLITE"||e==="DB"||e==="DATABASE"||e==="REALM"||e==="CACHE"?{color:r.purple500,Icon:Oe,label:e}:e==="PERF"||e==="RENDER"||e==="PERFORMANCE"||e==="FPS"||e==="MEMORY"?{color:r.violet500,Icon:Ve,label:e}:e==="INIT"||e==="BOOT"||e==="STARTUP"||e==="LIFECYCLE"||e==="MOUNT"||e==="UNMOUNT"?{color:r.blue600,Icon:F,label:e}:e==="SYNC"||e==="REFRESH"||e==="BACKGROUND"||e==="JOB"||e==="WORKER"?{color:r.sky600,Icon:De,label:e}:e==="PUSH"||e==="NOTIF"||e==="NOTIFICATION"||e==="FCM"||e==="APNS"?{color:r.darkOrange,Icon:ke,label:e}:e==="PAY"||e==="PAYMENT"||e==="STRIPE"||e==="IAP"||e==="BILLING"||e==="CHECKOUT"||e==="CART"?{color:r.emerald600,Icon:Le,label:e}:e==="DEVICE"||e==="HARDWARE"||e==="BLE"||e==="BLUETOOTH"||e==="NFC"||e==="SENSOR"?{color:r.slate600,Icon:Fe,label:e}:e==="LOCATION"||e==="GPS"||e==="GEO"?{color:r.emerald600,Icon:U,label:e}:e==="APP"?{color:r.indigo600Alt,Icon:Re,label:"APP"}:e==="UI"||e==="VIEW"||e==="THEME"||e==="STYLE"||e==="LAYOUT"?{color:r.pink600,Icon:$e,label:e}:e==="TEST"||e==="MOCK"||e==="SPEC"?{color:r.emerald500,Icon:Se,label:"TEST"}:e==="SAMPLE"||e==="BATCH"?{color:r.indigo600Alt,Icon:xe,label:e}:e==="CONFIG"||e==="ENV"||e==="SETTINGS"?{color:r.slate700,Icon:Me,label:e}:e==="DEBUG"||e==="TRACE"?{color:r.purpleText,Icon:ze,label:e}:e==="INFO"?{color:r.sky600,Icon:v,label:"INFO"}:e==="SUCCESS"||e==="OK"||e==="DONE"||e==="PASSED"?{color:r.green600,Icon:G,label:e}:e==="WARN"||e==="WARNING"?{color:r.amber600,Icon:Be,label:"WARN"}:e==="ERROR"||e==="CRASH"||e==="BUG"||e==="FATAL"||e==="EXCEPTION"||e==="FAIL"?{color:r.red600,Icon:Ae,label:e==="CRASH"||e==="BUG"||e==="FATAL"||e==="EXCEPTION"||e==="FAIL"?e:"ERROR"}:{color:r.slate600,Icon:Pe,label:e}};return<C style={{flexDirection:"column",gap:2}}>
2
+ <C style={{flexDirection:"row",gap:4,overflow:"hidden"}}>
3
+ {T.slice(0,2).map((I,e)=>{const m=w(I),M=m.Icon;return<C key={e}style={[o.prefixTag,{backgroundColor:`${m.color}12`,borderColor:`${m.color}30`}]}>
4
+ <M color={m.color}size={8.5}/>
5
+ <E style={[o.prefixTagText,{color:m.color}]}>
6
+ {m.label}
7
7
  </E>
8
- </I>})}
9
- </I>
10
- <L text={N}search={t}style={P}numberOfLines={1}detectLinks={!1}/>
11
- </I>}return<L text={R}search={t}style={P}numberOfLines={H||2}detectLinks={!1}/>};export const ConsoleLogCard=F.memo(function({item:t,searchStr:P="",onPress:k,testID:H}){const{setSelectedLog:V}=Ge(),{t:w}=v(),C=J(t.message),N=t.message.toLowerCase().includes("[analytics error]"),T=F.useMemo(()=>{const h=ee(t.caller);if(!h)return null;const O=Z(t.caller,!0);return{...O,display:h.display,fileName:h.fileName,lineNumber:h.lineNumber||O.lineNumber}},[t.caller]),B=(()=>{const h=(t.type||"log").toLowerCase(),O=(t.sourceMethod||h).toLowerCase();return N||h==="error"||O==="error"?{badgeColor:r.errorColor,border:r.errorColor,badgeBg:`${r.errorColor}18`,badgeText:r.errorColor,label:"ERROR",cardBg:r.errorCardBg,statusPillBg:`${r.errorColor}14`,statusPillBorder:`${r.errorColor}33`,statusPillText:r.errorColor,StatusIcon:ke}:h==="warn"||O==="warn"?{badgeColor:r.darkOrange,border:r.darkOrange,badgeBg:`${r.darkOrange}18`,badgeText:r.darkOrange,label:"WARN",cardBg:r.warnCardBg,statusPillBg:`${r.darkOrange}14`,statusPillBorder:`${r.darkOrange}33`,statusPillText:r.darkOrange,StatusIcon:Le}:h==="debug"||O==="debug"?{badgeColor:r.purple,border:r.purple,badgeBg:`${r.purple}18`,badgeText:r.purple,label:"DEBUG",cardBg:r.purpleTintBg,statusPillBg:`${r.purple}14`,statusPillBorder:`${r.purple}33`,statusPillText:r.purple,StatusIcon:z}:O==="info"||h==="info"&&O!=="log"?{badgeColor:r.sky600,border:r.sky600,badgeBg:`${r.sky600}18`,badgeText:r.sky600,label:"INFO",cardBg:r.blueTintBg,statusPillBg:`${r.sky600}14`,statusPillBorder:`${r.sky600}33`,statusPillText:r.sky600,StatusIcon:G}:{badgeColor:r.brandPurple,border:r.brandPurple,badgeBg:`${r.brandPurple}15`,badgeText:r.brandPurple,label:"LOG",cardBg:r.white,statusPillBg:`${r.brandPurple}12`,statusPillBorder:`${r.brandPurple}2E`,statusPillText:r.brandPurple,StatusIcon:W}})(),e=B.StatusIcon,A=C?Q(C.data):null,D=()=>{k?k(t):V(t)},Ke=("sourceMethod"in t?t.sourceMethod:void 0)||t.type||"log";return<I style={o.container}>
12
- <Ie testID={H}onPress={D}style={[o.card,{borderLeftWidth:3.5,borderLeftColor:B.border,backgroundColor:B.cardBg}]}>
13
- <I style={o.cardBody}>
8
+ </C>})}
9
+ </C>
10
+ <L text={D}search={t}style={B}numberOfLines={1}detectLinks={!1}/>
11
+ </C>}return<L text={y}search={t}style={B}numberOfLines={H||2}detectLinks={!1}/>};export const ConsoleLogCard=V.memo(function({item:t,searchStr:B="",onPress:N,testID:H,isSelected:P,onToggleSelect:A}){const{setSelectedLog:O}=ve(),{t:D}=K(),T=Z(t.message),w=t.message.toLowerCase().includes("[analytics error]"),I=V.useMemo(()=>{const S=oe(t.caller);if(!S)return null;const R=_(t.caller,!0);return{...R,display:S.display,fileName:S.fileName,lineNumber:S.lineNumber||R.lineNumber}},[t.caller]),m=(()=>{const S=(t.type||"log").toLowerCase(),R=(t.sourceMethod||S).toLowerCase();return w||S==="error"||R==="error"?{badgeColor:r.errorColor,border:r.errorColor,badgeBg:`${r.errorColor}18`,badgeText:r.errorColor,label:"ERROR",cardBg:r.errorCardBg,statusPillBg:`${r.errorColor}14`,statusPillBorder:`${r.errorColor}33`,statusPillText:r.errorColor,StatusIcon:He}:S==="warn"||R==="warn"?{badgeColor:r.darkOrange,border:r.darkOrange,badgeBg:`${r.darkOrange}18`,badgeText:r.darkOrange,label:"WARN",cardBg:r.warnCardBg,statusPillBg:`${r.darkOrange}14`,statusPillBorder:`${r.darkOrange}33`,statusPillText:r.darkOrange,StatusIcon:Ne}:S==="debug"||R==="debug"?{badgeColor:r.purple,border:r.purple,badgeBg:`${r.purple}18`,badgeText:r.purple,label:"DEBUG",cardBg:r.purpleTintBg,statusPillBg:`${r.purple}14`,statusPillBorder:`${r.purple}33`,statusPillText:r.purple,StatusIcon:F}:R==="info"||S==="info"&&R!=="log"?{badgeColor:r.sky600,border:r.sky600,badgeBg:`${r.sky600}18`,badgeText:r.sky600,label:"INFO",cardBg:r.blueTintBg,statusPillBg:`${r.sky600}14`,statusPillBorder:`${r.sky600}33`,statusPillText:r.sky600,StatusIcon:v}:{badgeColor:r.brandPurple,border:r.brandPurple,badgeBg:`${r.brandPurple}15`,badgeText:r.brandPurple,label:"LOG",cardBg:r.white,statusPillBg:`${r.brandPurple}12`,statusPillBorder:`${r.brandPurple}2E`,statusPillText:r.brandPurple,StatusIcon:G}})(),M=m.StatusIcon,z=T?q(T.data):null,j=()=>{N?N(t):O(t)},Ye=("sourceMethod"in t?t.sourceMethod:void 0)||t.type||"log";return<C style={o.container}>
12
+ <Ce testID={H}onPress={j}style={[o.card,{borderLeftWidth:3.5,borderLeftColor:m.border,backgroundColor:m.cardBg}]}>
13
+ <C style={o.cardBody}>
14
14
 
15
- <I style={o.cardHeaderRow}>
16
- <I style={o.cardHeaderLeft}>
15
+ <C style={o.cardHeaderRow}>
16
+ <C style={o.cardHeaderLeft}>
17
+ {A&&t.id!=null&&<W testID={`inspector.console.checkbox.${t.id}`}onPress={S=>{S.stopPropagation(),A(t.id)}}hitSlop={8}style={[o.smallCheckbox,P&&o.smallCheckboxChecked]}>
18
+ {P&&<X width={9}height={9}viewBox="0 0 24 24"fill="none">
19
+ <J d="M20 6L9 17l-5-5"stroke={r.white}strokeWidth="4"strokeLinecap="round"strokeLinejoin="round"/>
20
+ </X>}
21
+ </W>}
22
+
17
23
  <E style={o.serialNumber}>
18
24
  #{t.id!=null?t.id+1:1}
19
25
  </E>
20
26
 
21
27
 
22
- <I style={[o.methodBadge,{backgroundColor:B.badgeColor}]}>
23
- <E style={o.methodBadgeText}>{B.label}</E>
24
- </I>
28
+ <C style={[o.methodBadge,{backgroundColor:m.badgeColor}]}>
29
+ <E style={o.methodBadgeText}>{m.label}</E>
30
+ </C>
25
31
 
26
32
 
27
- {C&&<I style={[o.chip,{backgroundColor:`${r.teal600}12`,borderColor:`${r.teal600}2E`}]}>
33
+ {T&&<C style={[o.chip,{backgroundColor:`${r.teal600}12`,borderColor:`${r.teal600}2E`}]}>
28
34
  <E style={[o.chipText,{color:r.teal600}]}>
29
- {Array.isArray(C.data)?`Array[${C.data.length}]`:`Object{${Object.keys(C.data).length}}`}
35
+ {Array.isArray(T.data)?`Array[${T.data.length}]`:`Object{${Object.keys(T.data).length}}`}
30
36
  </E>
31
- </I>}
37
+ </C>}
32
38
 
33
39
 
34
- {"duplicateCount"in t&&t.duplicateCount!=null&&t.duplicateCount>1&&<I style={o.dupBadge}>
40
+ {"duplicateCount"in t&&t.duplicateCount!=null&&t.duplicateCount>1&&<C style={o.dupBadge}>
35
41
  <E style={o.dupBadgeText}>
36
42
  ×{t.duplicateCount}
37
43
  </E>
38
- </I>}
39
- </I>
44
+ </C>}
45
+ </C>
40
46
 
41
47
 
42
- <I style={o.cardHeaderRight}>
43
- <Te color={r.slate400}size={13}/>
44
- </I>
45
- </I>
48
+ <C style={o.cardHeaderRight}>
49
+ <Ie color={r.slate400}size={13}/>
50
+ </C>
51
+ </C>
46
52
 
47
53
 
48
- <I style={o.messageBox}>
49
- {C?<I style={o.jsonPreviewRow}>
50
- {C.header?<L text={C.header}search={P}style={o.messageText}detectLinks={!1}numberOfLines={1}/>:null}
51
- {A&&<L text={A.text.replace(/\s+/g," ")}search={P}style={o.jsonPreviewText}detectLinks={!1}numberOfLines={C.header?2:3}/>}
52
- </I>:ve(t.message,P,o.messageText,o.highlight,3)}
53
- </I>
54
+ <C style={o.messageBox}>
55
+ {T?<C style={o.jsonPreviewRow}>
56
+ {T.header?<L text={T.header}search={B}style={o.messageText}detectLinks={!1}numberOfLines={1}/>:null}
57
+ {z&&<L text={z.text.replace(/\s+/g," ")}search={B}style={o.jsonPreviewText}detectLinks={!1}numberOfLines={T.header?2:3}/>}
58
+ </C>:je(t.message,B,o.messageText,o.highlight,3)}
59
+ </C>
54
60
 
55
61
 
56
- <I style={o.cardFooterRow}>
57
- <I style={o.footerLeft}>
58
- <I style={o.cardDateRow}>
59
- <$e color={r.grayTextWeak}size={10}/>
62
+ <C style={o.cardFooterRow}>
63
+ <C style={o.footerLeft}>
64
+ <C style={o.cardDateRow}>
65
+ <Ue color={r.grayTextWeak}size={10}/>
60
66
  <E style={o.cardDateText}numberOfLines={1}>
61
- {X(t.timestamp)}
67
+ {Q(t.timestamp)}
62
68
  </E>
63
- </I>
69
+ </C>
64
70
 
65
- {T&&<K onPress={h=>{h.stopPropagation?.(),q(T.rawFilePath||T.fullPath||T.fileName,T.lineNumber,T.columnNumber)}}hitSlop={8}style={o.callerChip}>
66
- {T.fileExt&&T.fileExt!=="other"&&<I style={[o.extBadge,{backgroundColor:T.fileExt==="tsx"||T.fileExt==="ts"?`${r.brandPurple}22`:`${r.teal600}22`}]}>
67
- <E style={[o.extBadgeText,{color:T.fileExt==="tsx"||T.fileExt==="ts"?r.brandPurple:r.teal600}]}>
68
- {T.fileExt.toUpperCase()}
71
+ {I&&<W onPress={S=>{S.stopPropagation?.(),ee(I.rawFilePath||I.fullPath||I.fileName,I.lineNumber,I.columnNumber)}}hitSlop={8}style={o.callerChip}>
72
+ {I.fileExt&&I.fileExt!=="other"&&<C style={[o.extBadge,{backgroundColor:I.fileExt==="tsx"||I.fileExt==="ts"?`${r.brandPurple}22`:`${r.teal600}22`}]}>
73
+ <E style={[o.extBadgeText,{color:I.fileExt==="tsx"||I.fileExt==="ts"?r.brandPurple:r.teal600}]}>
74
+ {I.fileExt.toUpperCase()}
69
75
  </E>
70
- </I>}
76
+ </C>}
71
77
  <E style={o.callerChipText}numberOfLines={1}ellipsizeMode="middle">
72
- {T.display}
78
+ {I.display}
73
79
  </E>
74
- <Ce color={r.sky600}size={8}/>
75
- </K>}
76
- </I>
80
+ <Te color={r.sky600}size={8}/>
81
+ </W>}
82
+ </C>
77
83
 
78
- <I style={o.footerRight}>
79
- {C&&<I style={o.metaStatChip}>
80
- <We color={r.purple}size={8.5}/>
84
+ <C style={o.footerRight}>
85
+ {T&&<C style={o.metaStatChip}>
86
+ <Ge color={r.purple}size={8.5}/>
81
87
  <E style={o.metaStatText}>
82
- {_(C.data)}
88
+ {re(T.data)}
83
89
  </E>
84
- </I>}
90
+ </C>}
85
91
 
86
- {N&&<I style={[o.chip,{backgroundColor:`${r.skyBlue}15`,borderColor:`${r.skyBlue}30`}]}>
92
+ {w&&<C style={[o.chip,{backgroundColor:`${r.skyBlue}15`,borderColor:`${r.skyBlue}30`}]}>
87
93
  <E style={[o.chipText,{color:r.skyBlue}]}>
88
- {w("console.analyticsBadge")||"ANALYTICS"}
94
+ {D("console.analyticsBadge")||"ANALYTICS"}
89
95
  </E>
90
- </I>}
91
- </I>
92
- </I>
93
- </I>
94
- </Ie>
95
- </I>});const o=Y.create({container:{paddingHorizontal:8,paddingVertical:4,height:148,justifyContent:"center"},card:{height:140,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:r.dividerColor,shadowColor:r.shadowColorString},cardBody:{height:"100%",paddingHorizontal:8,paddingTop:8,paddingBottom:6,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:4,gap:4.5,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},serialNumber:{fontFamily:S.interBold,color:r.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:r.white},chip:{paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4,borderWidth:1},chipText:{fontFamily:S.interBold,fontSize:9,lineHeight:12},dupBadge:{backgroundColor:`${r.purple}14`,borderColor:`${r.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:S.interBold,fontSize:8.5,color:r.purple},statusPill:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:S.interBold,fontSize:9.5,lineHeight:12},messageBox:{backgroundColor:r.grayBackground,borderRadius:7,borderWidth:1,borderColor:r.dividerColor,paddingHorizontal:7,paddingVertical:5,height:68,minHeight:68,maxHeight:68,justifyContent:"center",gap:2,overflow:"hidden"},messageText:{fontFamily:S.interMedium,fontSize:12,color:r.primaryBlack,lineHeight:17},highlight:{backgroundColor:r.yellowHighlight,color:r.primaryBlack,borderRadius:2},jsonPreviewRow:{flexDirection:"column",justifyContent:"center",gap:2},jsonPreviewText:{fontFamily:S.interMedium,fontSize:11,color:r.teal700,lineHeight:15},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:4},footerLeft:{flexDirection:"row",alignItems:"center",gap:4.5,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:S.interRegular,fontSize:10,lineHeight:13,color:r.slate400},callerChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:r.skySoftBg,borderColor:r.skySoftBorder,borderWidth:1,paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,flexShrink:1,minWidth:0},extBadge:{borderRadius:3,paddingHorizontal:3,paddingVertical:.5},extBadgeText:{fontFamily:S.interBold,fontSize:7.5},callerChipText:{color:r.skySoftText,fontSize:9,lineHeight:12,fontFamily:S.interBold},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:r.violetSoftBg,borderColor:r.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:S.interBold,color:r.violetSoftText,fontSize:9,lineHeight:12},prefixTag:{flexDirection:"row",alignItems:"center",gap:2.5,paddingHorizontal:5,paddingVertical:1.5,borderRadius:3.5,borderWidth:1},prefixTagText:{fontFamily:S.interBold,fontSize:8.5,letterSpacing:.3},bottomAccentBar:{height:2.5,width:"100%",borderRadius:1.5,marginTop:2}});function je(R,t){return R.item===t.item&&R.searchStr===t.searchStr&&R.onPress===t.onPress}export const MemoizedConsoleLogCard=F.memo(ConsoleLogCard,je);export default MemoizedConsoleLogCard;
96
+ </C>}
97
+ </C>
98
+ </C>
99
+ </C>
100
+ </Ce>
101
+ </C>});const o=Y.create({container:{paddingHorizontal:8,paddingVertical:4,height:148,justifyContent:"center"},card:{height:140,alignSelf:"stretch",borderRadius:10,overflow:"hidden",borderWidth:1,borderColor:r.dividerColor,shadowColor:r.shadowColorString},cardBody:{height:"100%",paddingHorizontal:8,paddingTop:8,paddingBottom:6,justifyContent:"space-between"},cardHeaderRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:22,minHeight:22,maxHeight:22},cardHeaderLeft:{flexDirection:"row",alignItems:"center",flex:1,marginRight:4,gap:4.5,minWidth:0,overflow:"hidden"},cardHeaderRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},serialNumber:{fontFamily:x.interBold,color:r.grayTextWeak,fontSize:10},methodBadge:{paddingHorizontal:6,paddingVertical:2,borderRadius:5,alignItems:"center",justifyContent:"center"},methodBadgeText:{fontFamily:x.interBold,fontSize:9.5,lineHeight:12,letterSpacing:.5,color:r.white},chip:{paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4,borderWidth:1},chipText:{fontFamily:x.interBold,fontSize:9,lineHeight:12},dupBadge:{backgroundColor:`${r.purple}14`,borderColor:`${r.purple}2E`,borderWidth:1,paddingHorizontal:4.5,paddingVertical:1,borderRadius:3.5},dupBadgeText:{fontFamily:x.interBold,fontSize:8.5,color:r.purple},statusPill:{flexDirection:"row",alignItems:"center",gap:3.5,paddingHorizontal:6,paddingVertical:2,borderRadius:6,borderWidth:1,flexShrink:0},statusPillText:{fontFamily:x.interBold,fontSize:9.5,lineHeight:12},messageBox:{backgroundColor:r.grayBackground,borderRadius:7,borderWidth:1,borderColor:r.dividerColor,paddingHorizontal:7,paddingVertical:5,height:68,minHeight:68,maxHeight:68,justifyContent:"center",gap:2,overflow:"hidden"},messageText:{fontFamily:x.interMedium,fontSize:12,color:r.primaryBlack,lineHeight:17},highlight:{backgroundColor:r.yellowHighlight,color:r.primaryBlack,borderRadius:2},jsonPreviewRow:{flexDirection:"column",justifyContent:"center",gap:2},jsonPreviewText:{fontFamily:x.interMedium,fontSize:11,color:r.teal700,lineHeight:15},cardFooterRow:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",height:18,minHeight:18,maxHeight:18,gap:4},footerLeft:{flexDirection:"row",alignItems:"center",gap:4.5,flex:1,minWidth:0,overflow:"hidden"},footerRight:{flexDirection:"row",alignItems:"center",gap:4,flexShrink:0},cardDateRow:{flexDirection:"row",alignItems:"center",gap:3.5},cardDateText:{fontFamily:x.interRegular,fontSize:10,lineHeight:13,color:r.slate400},callerChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:r.skySoftBg,borderColor:r.skySoftBorder,borderWidth:1,paddingHorizontal:5,paddingVertical:1.5,borderRadius:4,flexShrink:1,minWidth:0},extBadge:{borderRadius:3,paddingHorizontal:3,paddingVertical:.5},extBadgeText:{fontFamily:x.interBold,fontSize:7.5},callerChipText:{color:r.skySoftText,fontSize:9,lineHeight:12,fontFamily:x.interBold},metaStatChip:{flexDirection:"row",alignItems:"center",gap:3,backgroundColor:r.violetSoftBg,borderColor:r.violetSoftBorder,borderWidth:1,paddingHorizontal:5.5,paddingVertical:1.5,borderRadius:4},metaStatText:{fontFamily:x.interBold,color:r.violetSoftText,fontSize:9,lineHeight:12},prefixTag:{flexDirection:"row",alignItems:"center",gap:2.5,paddingHorizontal:5,paddingVertical:1.5,borderRadius:3.5,borderWidth:1},prefixTagText:{fontFamily:x.interBold,fontSize:8.5,letterSpacing:.3},bottomAccentBar:{height:2.5,width:"100%",borderRadius:1.5,marginTop:2},smallCheckbox:{width:14,height:14,borderRadius:3.5,borderWidth:1.2,borderColor:r.grayBorderSecondary,backgroundColor:r.primaryLight,alignItems:"center",justifyContent:"center",marginRight:2},smallCheckboxChecked:{backgroundColor:r.purple,borderColor:r.purple}});function Ke(y,t){return y.item===t.item&&y.searchStr===t.searchStr&&y.onPress===t.onPress&&y.isSelected===t.isSelected&&y.onToggleSelect===t.onToggleSelect}export const MemoizedConsoleLogCard=V.memo(ConsoleLogCard,Ke);export default MemoizedConsoleLogCard;
@@ -1,17 +1,17 @@
1
- import{Component as v}from"react";import{StyleSheet as _,Text as T,View as C,ScrollView as G,TouchableOpacity as O,SafeAreaView as J}from"react-native";import{AppColors as e}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{copyToClipboard as U}from"../helpers";import{t as S}from"../i18n";import{WarningTriangleIcon as N,CopyIcon as H,RefreshCcwIcon as A,ClearIcon as K,CircleAlertIcon as Q}from"./NetworkIcons";import{handleInterceptedCrash as X}from"../customHooks/crashHandler";import{CrashType as Y}from"../types/enums";import{showNativeFloatingButton as Z,setNativeFloatingButtonBadge as ee}from"../native/NativeInspector";function W(E){if(!E)return{rootFrame:null,frames:[]};const V=E.split(`
2
- `),B=[];for(const R of V){if(R.includes("ErrorBoundary")||R.includes("getDerivedStateFromError")||R.includes("componentDidCatch")||R.includes("handleInterceptedCrash"))continue;const I=R.match(/^([^@]*)@(.*):(\d+):(\d+)$/);if(I){const[,z,k,$,D]=I,j=k.split("?")[0].split("/").pop()||k,M=!k.includes("node_modules")&&!k.includes("Libraries/Core");B.push({method:z.trim()||"anonymous",file:j,fullPath:k.split("?")[0],line:$,column:D,isProjectFile:M});continue}const L=R.match(/^\s*at\s+(.+)\s+\((.+):(\d+):(\d+)\)$/);if(L){const[,z,k,$,D]=L,j=k.split("?")[0].split("/").pop()||k,M=!k.includes("node_modules")&&!k.includes("Libraries/Core");B.push({method:z.trim(),file:j,fullPath:k.split("?")[0],line:$,column:D,isProjectFile:M});continue}const P=R.match(/^\s*at\s+(.+):(\d+):(\d+)$/);if(P){const[,z,k,$]=P,D=z.split("?")[0].split("/").pop()||z,j=!z.includes("node_modules")&&!z.includes("Libraries/Core");B.push({method:"anonymous",file:D,fullPath:z.split("?")[0],line:k,column:$,isProjectFile:j})}}return{rootFrame:B.find(R=>R.isProjectFile)||B[0]||null,frames:B}}export class ErrorBoundary extends v{constructor(){super(...arguments),this.state={hasError:!1,error:null},this.handleReset=()=>{this.setState({hasError:!1,error:null}),this.props.onReset&&this.props.onReset()},this.handleCopyTrace=()=>{const V=this.state.error;if(V){const{rootFrame:B}=W(V.stack||""),F=`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
1
+ import{Component as v}from"react";import{StyleSheet as _,Text as T,View as C,ScrollView as G,TouchableOpacity as O,SafeAreaView as J}from"react-native";import{AppColors as e}from"../styles/AppColors";import{AppFonts as w}from"../styles/AppFonts";import{copyToClipboard as U}from"../helpers";import{t as S}from"../i18n";import{WarningTriangleIcon as N,CopyIcon as H,RefreshCcwIcon as W,ClearIcon as K,CircleAlertIcon as Q}from"./NetworkIcons";import{handleInterceptedCrash as X}from"../customHooks/crashHandler";import{CrashType as Y}from"../types/enums";import{showNativeFloatingButton as Z,setNativeFloatingButtonBadge as ee}from"../native/NativeInspector";function A(E){if(!E)return{rootFrame:null,frames:[]};const k=E.split(`
2
+ `),B=[];for(const V of k){if(V.includes("ErrorBoundary")||V.includes("getDerivedStateFromError")||V.includes("componentDidCatch")||V.includes("handleInterceptedCrash"))continue;const I=V.match(/^([^@]*)@(.*):(\d+):(\d+)$/);if(I){const[,z,R,$,D]=I,j=R.split("?")[0].split("/").pop()||R,M=!R.includes("node_modules")&&!R.includes("Libraries/Core");B.push({method:z.trim()||"anonymous",file:j,fullPath:R.split("?")[0],line:$,column:D,isProjectFile:M});continue}const L=V.match(/^\s*at\s+(.+)\s+\((.+):(\d+):(\d+)\)$/);if(L){const[,z,R,$,D]=L,j=R.split("?")[0].split("/").pop()||R,M=!R.includes("node_modules")&&!R.includes("Libraries/Core");B.push({method:z.trim(),file:j,fullPath:R.split("?")[0],line:$,column:D,isProjectFile:M});continue}const P=V.match(/^\s*at\s+(.+):(\d+):(\d+)$/);if(P){const[,z,R,$]=P,D=z.split("?")[0].split("/").pop()||z,j=!z.includes("node_modules")&&!z.includes("Libraries/Core");B.push({method:"anonymous",file:D,fullPath:z.split("?")[0],line:R,column:$,isProjectFile:j})}}return{rootFrame:B.find(V=>V.isProjectFile)||B[0]||null,frames:B}}export class ErrorBoundary extends v{constructor(){super(...arguments),this.state={hasError:!1,error:null},this.handleReset=()=>{this.setState({hasError:!1,error:null}),this.props.onReset&&this.props.onReset()},this.handleCopyTrace=()=>{const k=this.state.error;if(k){const{rootFrame:B}=A(k.stack||""),F=`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
3
3
  IN-APP INSPECTOR \u2022 INTERCEPTED CRASH REPORT
4
4
  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
5
- Error: ${V.name||"Error"}
6
- Message: ${V.message}
5
+ Error: ${k.name||"Error"}
6
+ Message: ${k.message}
7
7
  ${B?`Location: ${B.file}:${B.line}:${B.column}
8
8
  Method: ${B.method}
9
9
  Path: ${B.fullPath}`:""}
10
10
  Timestamp: ${new Date().toISOString()}
11
11
 
12
12
  Stack Trace:
13
- ${V.stack||"No stack trace available"}
14
- \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`;U(F,S("errors.errorReport"))}}}static getDerivedStateFromError(V){return{hasError:!0,error:V}}componentDidCatch(V,B){try{const F=V?.stack||B?.componentStack||"";X(V,F,!1,Y.Render,B?.componentStack),Z(),ee(!0)}catch{}}render(){const{hasError:V,error:B}=this.state;if(!V||!B)return this.props.children;const{rootFrame:F,frames:R}=W(B.stack||""),I=B.name||S("errors.title"),L=I.includes("Syntax")||I.includes("Type")||I.includes("Reference");return this.props.fallbackType==="inline"?<C style={t.inlineContainer}>
13
+ ${k.stack||"No stack trace available"}
14
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`;U(F,S("errors.errorReport"))}}}static getDerivedStateFromError(k){return{hasError:!0,error:k}}componentDidCatch(k,B){try{const F=k?.stack||B?.componentStack||"",V=X(k,F,!1,Y.Render,B?.componentStack);V&&!V.id.startsWith("crash_ignored_")&&(Z(),ee(!0))}catch{}}render(){const{hasError:k,error:B}=this.state;if(!k||!B)return this.props.children;const{rootFrame:F,frames:V}=A(B.stack||""),I=B.name||S("errors.title"),L=I.includes("Syntax")||I.includes("Type")||I.includes("Reference");return this.props.fallbackType==="inline"?<C style={t.inlineContainer}>
15
15
  <C style={t.inlineHeader}>
16
16
  <N color={e.red600}size={18}/>
17
17
  <C style={{flex:1}}>
@@ -25,7 +25,7 @@ ${V.stack||"No stack trace available"}
25
25
  </C>
26
26
  <C style={t.inlineActions}>
27
27
  <O onPress={this.handleReset}style={t.inlineBtn}activeOpacity={.7}>
28
- <A size={12}color={e.white}/>
28
+ <W size={12}color={e.white}/>
29
29
  <T style={t.inlineBtnText}>{S("errors.retry")}</T>
30
30
  </O>
31
31
  <O onPress={this.handleCopyTrace}style={t.inlineCopyBtn}activeOpacity={.7}>
@@ -98,11 +98,11 @@ ${V.stack||"No stack trace available"}
98
98
  <C style={t.stackCardHeader}>
99
99
  <T style={t.cardHeaderTitle}>{S("errors.callStack")}</T>
100
100
  <T style={t.frameCountText}>
101
- {S("errors.framesCount",{count:R.length})}
101
+ {S("errors.framesCount",{count:V.length})}
102
102
  </T>
103
103
  </C>
104
104
 
105
- {R.slice(0,8).map((P,z)=><C key={z}style={[t.frameItem,P.isProjectFile&&t.frameItemProject]}>
105
+ {V.slice(0,8).map((P,z)=><C key={z}style={[t.frameItem,P.isProjectFile&&t.frameItemProject]}>
106
106
  <C style={t.frameNumBadge}>
107
107
  <T style={[t.frameNumText,P.isProjectFile&&{color:e.sky400}]}>
108
108
  #{z+1}
@@ -126,7 +126,7 @@ ${V.stack||"No stack trace available"}
126
126
 
127
127
  <C style={t.footer}>
128
128
  <O onPress={this.handleReset}style={t.retryBtn}activeOpacity={.8}>
129
- <A size={16}color={e.white}/>
129
+ <W size={16}color={e.white}/>
130
130
  <T style={t.retryBtnText}>{S("errors.tryAgainRecover")}</T>
131
131
  </O>
132
132
 
@@ -1,76 +1,81 @@
1
- import F,{useCallback as H,useMemo as R,useRef as se}from"react";import{FlatList as Se,Pressable as Ce,ScrollView as K,Text as A,TextInput as Ie,View as S}from"react-native";import{useInspector as we}from"./InspectorContext";import{useTranslation as Te}from"../../i18n";import P from"../TouchableScale";import Le from"../AnimatedEntrance";import{ConsoleLogCard as Ae}from"../ConsoleLogCard";import Ee from"../EmptyState";import Ve from"../EndOfListFooter";import Be from"./ConsoleExportModal";import b from"../../styles";import{AppColors as o}from"../../styles/AppColors";import{AppFonts as z}from"../../styles/AppFonts";import{LogFilter as E}from"../../types";import{SearchIcon as Fe,ClearIcon as Pe,SortArrowIcon as He,TrashIcon as Re,LayersIcon as $e,UserIcon as De,InfoCircleIcon as We,WarningTriangleIcon as Oe,ErrorCircleIcon as Me,AnalyticsIcon as Ne,ExportIcon as Ue}from"../NetworkIcons";const X=10,ve=F.memo(()=>{const{t:I}=Te(),{logSearch:y,setLogSearch:V,logSortOrder:j,setLogSortOrder:q,handleDelete:J,logFilters:h,setLogFilters:$,logCounts:x,filteredConsoleLogs:C,visibleConsoleLogs:D,maxConsoleLogs:W,setSelectedLog:N}=we(),Z=W||100,U=se(null),[v,G]=F.useState(Z),[ee,_]=F.useState(!1);F.useEffect(()=>{G(W||100),U.current?.scrollToOffset({offset:0,animated:!1})},[y,h,W]);const O=R(()=>C.slice(0,v),[C,v]),Q=H(e=>{N(e)},[N]),oe=H(({item:e,index:t})=><Le index={t}distance={8}>
2
- <Ae testID={`inspector.console.item.${t}`}item={e}searchStr={y}onPress={Q}/>
3
- </Le>,[y,Q]),te=H((e,t)=>({length:148,offset:148*t,index:t}),[]),le=H((e,t)=>e?.id?.toString()??t.toString(),[]),re=R(()=>{const e=D.length,t=C.length;if(h.has("all")||!Array.from(h).some(B=>B!=="all"))return<S style={{paddingHorizontal:8,paddingTop:8,paddingBottom:3}}>
1
+ import F,{useCallback as R,useMemo as $,useRef as pe}from"react";import{FlatList as Se,Pressable as Ce,ScrollView as J,Text as A,TextInput as Ie,View as S}from"react-native";import{useInspector as we}from"./InspectorContext";import{useTranslation as Te}from"../../i18n";import P from"../TouchableScale";import Le from"../AnimatedEntrance";import{ConsoleLogCard as Ae}from"../ConsoleLogCard";import Ee from"../EmptyState";import Ve from"../EndOfListFooter";import Be from"./ConsoleExportModal";import h from"../../styles";import{AppColors as o}from"../../styles/AppColors";import{AppFonts as z}from"../../styles/AppFonts";import{LogFilter as E}from"../../types";import{SearchIcon as Fe,ClearIcon as Pe,SortArrowIcon as He,TrashIcon as Re,LayersIcon as $e,UserIcon as De,InfoCircleIcon as We,WarningTriangleIcon as Oe,ErrorCircleIcon as Me,AnalyticsIcon as Ne,ExportIcon as Ue}from"../NetworkIcons";const Z=10,ve=F.memo(()=>{const{t:w}=Te(),{logSearch:C,setLogSearch:V,logSortOrder:ee,setLogSortOrder:oe,handleDelete:te,logFilters:b,setLogFilters:D,logCounts:x,filteredConsoleLogs:I,visibleConsoleLogs:W,maxConsoleLogs:O,setSelectedLog:U,selectedConsoleLogs:H,toggleSelectConsoleLog:v}=we(),le=O||100,G=pe(null),[_,Q]=F.useState(le),[re,Y]=F.useState(!1);F.useEffect(()=>{Q(O||100),G.current?.scrollToOffset({offset:0,animated:!1})},[C,b,O]);const M=$(()=>I.slice(0,_),[I,_]),K=R(e=>{U(e)},[U]),ne=R(({item:e,index:t})=><Le index={t}distance={8}>
2
+ <Ae testID={`inspector.console.item.${t}`}item={e}searchStr={C}onPress={K}isSelected={H.has(e.id)}onToggleSelect={v}/>
3
+ </Le>,[C,K,H,v]),ie=R((e,t)=>({length:148,offset:148*t,index:t}),[]),se=R((e,t)=>e?.id?.toString()??t.toString(),[]),ae=$(()=>{const e=W.length,t=I.length;if(b.has("all")||!Array.from(b).some(B=>B!=="all"))return<S style={{paddingHorizontal:8,paddingTop:8,paddingBottom:3}}>
4
4
  <A style={{fontFamily:z.interMedium,fontSize:11,color:o.grayTextWeak,letterSpacing:.2}}>
5
5
  {t===e?`Showing ${e} logs`:`Showing ${t} of ${e} logs`}
6
6
  </A>
7
- </S>;{const B=Array.from(h).filter(T=>T!=="all").map(T=>T==="user-log"?"Log":T==="analytics"?"Analytics":T.charAt(0).toUpperCase()+T.slice(1));return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
7
+ </S>;{const B=Array.from(b).filter(T=>T!=="all").map(T=>T==="user-log"?"Log":T==="analytics"?"Analytics":T.charAt(0).toUpperCase()+T.slice(1));return<S style={{paddingHorizontal:12,paddingTop:8,paddingBottom:3}}>
8
8
  <A style={{fontFamily:z.interMedium,fontSize:11,color:o.grayTextWeak,letterSpacing:.2}}>
9
9
  Filtered by {B.join(", ")} ({t} of {e} logs)
10
10
  </A>
11
- </S>}},[D.length,C.length,h]),[M,Y]=F.useState(!1),ne=R(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]"],[]),ie=R(()=>[{id:E.All,label:I("common.all","All"),count:x.all?.split("/")?.[0]??"0",color:o.purple,Icon:$e},{id:E.UserLog,label:I("console.log","Log"),count:x["user-log"]?.split("/")?.[0]??"0",color:o.teal600,Icon:De},{id:E.Info,label:I("console.info","Info"),count:x.info?.split("/")?.[0]??"0",color:o.sky600,Icon:We},{id:E.Warn,label:I("console.warning","Warn"),count:x.warn?.split("/")?.[0]??"0",color:o.amber600,Icon:Oe},{id:E.Error,label:I("console.error","Error"),count:x.error?.split("/")?.[0]??"0",color:o.errorColor,Icon:Me},{id:E.Analytics,label:I("console.analytics","Analytics"),count:x.analytics?.split("/")?.[0]??"0",color:o.violet600,Icon:Ne}],[x,I]);return<S style={{flex:1}}>
11
+ </S>}},[W.length,I.length,b]),[N,X]=F.useState(!1),ce=$(()=>["[AXIOS]","[API]","[GRAPHQL]","[REDUX]","[ANALYTICS]","[AUTH]","[NAV]","[STORAGE]","[PERF]","[WS]","[PUSH]","[PAYMENT]","[SYNC]","[BLE]","[LOCATION]","[TEST]","[DEBUG]"],[]),de=$(()=>[{id:E.All,label:w("common.all","All"),count:x.all?.split("/")?.[0]??"0",color:o.purple,Icon:$e},{id:E.UserLog,label:w("console.log","Log"),count:x["user-log"]?.split("/")?.[0]??"0",color:o.teal600,Icon:De},{id:E.Info,label:w("console.info","Info"),count:x.info?.split("/")?.[0]??"0",color:o.sky600,Icon:We},{id:E.Warn,label:w("console.warning","Warn"),count:x.warn?.split("/")?.[0]??"0",color:o.amber600,Icon:Oe},{id:E.Error,label:w("console.error","Error"),count:x.error?.split("/")?.[0]??"0",color:o.errorColor,Icon:Me},{id:E.Analytics,label:w("console.analytics","Analytics"),count:x.analytics?.split("/")?.[0]??"0",color:o.violet600,Icon:Ne}],[x,w]);return<S style={{flex:1}}>
12
12
  <S style={{backgroundColor:o.white,borderBottomWidth:1,borderBottomColor:o.dividerColor,paddingBottom:6}}>
13
- <S style={[b.toolbarRow,{marginTop:12,marginBottom:8}]}>
14
- <S style={[b.searchContainer,M&&{borderColor:o.purple,borderWidth:1.5}]}>
15
- <Fe color={M?o.purple:o.grayTextWeak}size={16}/>
16
- <Ie placeholder={I("console.searchPlaceholder")}placeholderTextColor={o.grayTextWeak}value={y}onChangeText={V}onFocus={()=>Y(!0)}onBlur={()=>Y(!1)}style={b.searchInput}autoCorrect={!1}autoCapitalize="none"/>
17
- {y.length>0&&<S style={{flexDirection:"row",alignItems:"center",gap:4}}>
13
+ <S style={[h.toolbarRow,{marginTop:12,marginBottom:8}]}>
14
+ <S style={[h.searchContainer,N&&{borderColor:o.purple,borderWidth:1.5}]}>
15
+ <Fe color={N?o.purple:o.grayTextWeak}size={16}/>
16
+ <Ie placeholder={w("console.searchPlaceholder")}placeholderTextColor={o.grayTextWeak}value={C}onChangeText={V}onFocus={()=>X(!0)}onBlur={()=>X(!1)}style={h.searchInput}autoCorrect={!1}autoCapitalize="none"/>
17
+ {C.length>0&&<S style={{flexDirection:"row",alignItems:"center",gap:4}}>
18
18
  <S style={{backgroundColor:`${o.purple}20`,borderRadius:10,paddingHorizontal:6,paddingVertical:2}}>
19
19
  <A style={{color:o.purple,fontSize:10,fontFamily:z.interBold}}>
20
- {C.length}
20
+ {I.length}
21
21
  </A>
22
22
  </S>
23
- <Ce onPress={()=>V("")}hitSlop={10}style={b.clearBtn}>
23
+ <Ce onPress={()=>V("")}hitSlop={10}style={h.clearBtn}>
24
24
  <Pe color={o.grayTextWeak}size={14}/>
25
25
  </Ce>
26
26
  </S>}
27
27
  </S>
28
28
 
29
- <S style={b.toolbarRight}>
30
- <P style={[b.toolbarBtn,{borderColor:`${o.purple}38`,backgroundColor:`${o.purple}0F`}]}onPress={()=>_(!0)}hitSlop={6}testID="inspector.console.exportBtn">
29
+ <S style={h.toolbarRight}>
30
+ <P style={[h.toolbarBtn,{borderColor:`${o.purple}38`,backgroundColor:`${o.purple}0F`}]}onPress={()=>Y(!0)}hitSlop={6}testID="inspector.console.exportBtn">
31
31
  <Ue color={o.purple}size={15}/>
32
32
  </P>
33
- <P style={b.toolbarBtn}onPress={()=>q(e=>e==="newest"?"oldest":"newest")}hitSlop={10}>
34
- <He color={o.grayTextStrong}size={18}direction={j==="newest"?"down":"up"}/>
33
+ <P style={h.toolbarBtn}onPress={()=>oe(e=>e==="newest"?"oldest":"newest")}hitSlop={10}>
34
+ <He color={o.grayTextStrong}size={18}direction={ee==="newest"?"down":"up"}/>
35
35
  </P>
36
- <P style={[b.toolbarBtn,{borderColor:`${o.errorColor}38`,backgroundColor:`${o.errorColor}0F`}]}onPress={J}hitSlop={6}>
36
+ <P style={[h.toolbarBtn,{borderColor:`${o.errorColor}38`,backgroundColor:`${o.errorColor}0F`}]}onPress={te}hitSlop={6}>
37
37
  <Re color={o.errorColor}size={15}/>
38
+ {H.size>0&&<S style={h.trashBadge}>
39
+ <A style={h.trashBadgeText}>
40
+ {H.size}
41
+ </A>
42
+ </S>}
38
43
  </P>
39
44
  </S>
40
45
  </S>
41
46
 
42
47
 
43
- {(M||y.length>0)&&<K horizontal showsHorizontalScrollIndicator={!1}style={{marginBottom:6,maxHeight:30}}contentContainerStyle={{paddingHorizontal:8,flexDirection:"row",alignItems:"center",gap:6}}>
44
- {ne.map(e=>{const t=y.includes(e);return<P key={e}onPress={()=>{V(t?l=>l.replace(e,"").trim():l=>l?`${l} ${e}`.trim():e)}}>
48
+ {(N||C.length>0)&&<J horizontal showsHorizontalScrollIndicator={!1}style={{marginBottom:6,maxHeight:30}}contentContainerStyle={{paddingHorizontal:8,flexDirection:"row",alignItems:"center",gap:6}}>
49
+ {ce.map(e=>{const t=C.includes(e);return<P key={e}onPress={()=>{V(t?y=>y.replace(e,"").trim():y=>y?`${y} ${e}`.trim():e)}}>
45
50
  <S style={{paddingHorizontal:8,paddingVertical:3,borderRadius:6,backgroundColor:t?o.purple:`${o.purple}14`,borderWidth:1,borderColor:t?o.purple:`${o.purple}30`}}>
46
51
  <A style={{fontFamily:z.interBold,fontSize:10,color:t?o.white:o.purple}}>
47
52
  {e}
48
53
  </A>
49
54
  </S>
50
55
  </P>})}
51
- </K>}
56
+ </J>}
52
57
 
53
58
 
54
59
  <S style={{flexDirection:"row",alignItems:"center",marginBottom:8,paddingHorizontal:8,gap:6}}>
55
- <K horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
56
- {ie.map(e=>{const t=e.id==="all"?h.has("all"):h.has(e.id)&&!h.has("all"),l=e.color||o.purple,B=t?o.white:l,T=e.Icon;return<P testID={`inspector.console.filter.${e.id}`}key={e.id}onPress={()=>{e.id==="all"?$(new Set(["all"])):$(ae=>{const L=new Set(ae);return L.delete("all"),L.has(e.id)?L.delete(e.id):L.add(e.id),L.size===0&&L.add("all"),L})}}>
57
- <S style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:t?l:`${l}12`,borderWidth:1,borderColor:t?l:`${l}30`,gap:5}}>
60
+ <J horizontal showsHorizontalScrollIndicator={!1}style={{flex:1}}contentContainerStyle={{flexDirection:"row",alignItems:"center",gap:6,paddingRight:6}}>
61
+ {de.map(e=>{const t=e.id==="all"?b.has("all"):b.has(e.id)&&!b.has("all"),y=e.color||o.purple,B=t?o.white:y,T=e.Icon;return<P testID={`inspector.console.filter.${e.id}`}key={e.id}onPress={()=>{e.id==="all"?D(new Set(["all"])):D(ge=>{const L=new Set(ge);return L.delete("all"),L.has(e.id)?L.delete(e.id):L.add(e.id),L.size===0&&L.add("all"),L})}}>
62
+ <S style={{flexDirection:"row",alignItems:"center",paddingHorizontal:9,paddingVertical:4.5,borderRadius:8,backgroundColor:t?y:`${y}12`,borderWidth:1,borderColor:t?y:`${y}30`,gap:5}}>
58
63
  <T size={11}color={B}/>
59
64
  <A style={{fontFamily:z.interBold,fontSize:10.5,color:t?o.white:o.primaryBlack}}>
60
65
  {e.label}
61
66
  </A>
62
- <S style={{backgroundColor:t?"rgba(255,255,255,0.25)":`${l}20`,paddingHorizontal:5,paddingVertical:1,borderRadius:8}}>
63
- <A style={{fontFamily:z.interBold,fontSize:9,color:t?o.white:l}}>
67
+ <S style={{backgroundColor:t?"rgba(255,255,255,0.25)":`${y}20`,paddingHorizontal:5,paddingVertical:1,borderRadius:8}}>
68
+ <A style={{fontFamily:z.interBold,fontSize:9,color:t?o.white:y}}>
64
69
  {e.count}
65
70
  </A>
66
71
  </S>
67
72
  </S>
68
73
  </P>})}
69
- </K>
74
+ </J>
70
75
  </S>
71
76
  </S>
72
77
 
73
- <Se ref={U}data={O}keyExtractor={le}ListHeaderComponent={re}renderItem={oe}getItemLayout={te}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}ListEmptyComponent={<Ee isSearch={y.length>0||!h.has("all")}searchQuery={y}customTitle={y.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{V(""),$(new Set(["all"]))}}/>}ListFooterComponent={C.length>0?<Ve count={O.length}totalCount={C.length}label="logs"loadMoreStep={X}hasMore={O.length<C.length}onLoadMore={()=>G(e=>e+X)}/>:null}style={{flex:1}}contentContainerStyle={[b.listContent,{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
78
+ <Se ref={G}data={M}keyExtractor={se}ListHeaderComponent={ae}renderItem={ne}getItemLayout={ie}initialNumToRender={10}maxToRenderPerBatch={8}windowSize={5}updateCellsBatchingPeriod={40}removeClippedSubviews={!0}renderToHardwareTextureAndroid={!0}showsVerticalScrollIndicator={!1}nestedScrollEnabled={!0}ListEmptyComponent={<Ee isSearch={C.length>0||!b.has("all")}searchQuery={C}customTitle={C.length>0?"No matching console logs":"No console logs"}onClearSearch={()=>{V(""),D(new Set(["all"]))}}/>}ListFooterComponent={I.length>0?<Ve count={M.length}totalCount={I.length}label="logs"loadMoreStep={Z}hasMore={M.length<I.length}onLoadMore={()=>Q(e=>e+Z)}/>:null}style={{flex:1}}contentContainerStyle={[h.listContent,{flexGrow:1}]}keyboardShouldPersistTaps="handled"/>
74
79
 
75
- <Be visible={ee}onClose={()=>_(!1)}filteredLogs={C}allLogs={D}/>
80
+ <Be visible={re}onClose={()=>Y(!1)}filteredLogs={I}allLogs={W}/>
76
81
  </S>});export default ve;