react-native-inapp-inspector 1.1.13 → 1.1.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 (250) hide show
  1. package/README.md +9 -34
  2. package/dist/commonjs/assets/svgAssets.d.ts +3 -0
  3. package/dist/commonjs/assets/svgAssets.js +17 -0
  4. package/dist/commonjs/components/AnalyticsEventCard.d.ts +1 -14
  5. package/dist/commonjs/components/AnalyticsEventCard.js +120 -50
  6. package/dist/commonjs/components/AnalyticsGraph.d.ts +2 -6
  7. package/dist/commonjs/components/AnalyticsGraph.js +8 -8
  8. package/dist/commonjs/components/AnalyticsTabView.d.ts +15 -0
  9. package/dist/commonjs/components/AnalyticsTabView.js +157 -0
  10. package/dist/commonjs/components/AnimatedEntrance.d.ts +1 -1
  11. package/dist/commonjs/components/AnimatedEntrance.js +2 -2
  12. package/dist/commonjs/components/ApiDetailView.d.ts +22 -0
  13. package/dist/commonjs/components/ApiDetailView.js +304 -0
  14. package/dist/commonjs/components/ApisTabView.d.ts +33 -0
  15. package/dist/commonjs/components/ApisTabView.js +235 -0
  16. package/dist/commonjs/components/CodeSnippet.d.ts +1 -5
  17. package/dist/commonjs/components/CodeSnippet.js +34 -34
  18. package/dist/commonjs/components/ConsoleLogCard.d.ts +1 -8
  19. package/dist/commonjs/components/ConsoleLogCard.js +262 -442
  20. package/dist/commonjs/components/ConsoleLogDetailView.d.ts +9 -0
  21. package/dist/commonjs/components/ConsoleLogDetailView.js +278 -0
  22. package/dist/commonjs/components/ConsoleLogsTabView.d.ts +24 -0
  23. package/dist/commonjs/components/ConsoleLogsTabView.js +354 -0
  24. package/dist/commonjs/components/DiffViewer.js +4 -2
  25. package/dist/commonjs/components/DomainHeader.js +66 -41
  26. package/dist/commonjs/components/EmptyState.d.ts +2 -2
  27. package/dist/commonjs/components/EmptyState.js +2 -2
  28. package/dist/commonjs/components/EndOfListFooter.d.ts +8 -0
  29. package/dist/commonjs/components/EndOfListFooter.js +90 -0
  30. package/dist/commonjs/components/ErrorBoundary.d.ts +5 -14
  31. package/dist/commonjs/components/ErrorBoundary.js +28 -28
  32. package/dist/commonjs/components/FloatingBubble.d.ts +14 -0
  33. package/dist/commonjs/components/FloatingBubble.js +75 -0
  34. package/dist/commonjs/components/HeadersSection.js +5 -3
  35. package/dist/commonjs/components/HighlightText.d.ts +1 -1
  36. package/dist/commonjs/components/HighlightText.js +5 -7
  37. package/dist/commonjs/components/Inspector/AnalyticsTab.d.ts +3 -0
  38. package/dist/commonjs/components/Inspector/AnalyticsTab.js +232 -0
  39. package/dist/commonjs/components/Inspector/ConsoleTab.d.ts +3 -0
  40. package/dist/commonjs/components/Inspector/ConsoleTab.js +410 -0
  41. package/dist/commonjs/components/Inspector/FabLauncher.d.ts +3 -0
  42. package/dist/commonjs/components/Inspector/FabLauncher.js +54 -0
  43. package/dist/commonjs/components/Inspector/InsightsDashboard.d.ts +3 -0
  44. package/dist/commonjs/components/Inspector/InsightsDashboard.js +619 -0
  45. package/dist/commonjs/components/Inspector/InspectorContext.d.ts +5 -0
  46. package/dist/commonjs/components/Inspector/InspectorContext.js +18 -0
  47. package/dist/commonjs/components/Inspector/InspectorHeader.d.ts +3 -0
  48. package/dist/commonjs/components/Inspector/InspectorHeader.js +452 -0
  49. package/dist/commonjs/components/Inspector/LogDetail.d.ts +3 -0
  50. package/dist/commonjs/components/Inspector/LogDetail.js +963 -0
  51. package/dist/commonjs/components/Inspector/MainScreen.d.ts +3 -0
  52. package/dist/commonjs/components/Inspector/MainScreen.js +68 -0
  53. package/dist/commonjs/components/Inspector/NavigationTracker.d.ts +3 -0
  54. package/dist/commonjs/components/Inspector/NavigationTracker.js +12 -0
  55. package/dist/commonjs/components/Inspector/NetworkDetail.d.ts +3 -0
  56. package/dist/commonjs/components/Inspector/NetworkDetail.js +405 -0
  57. package/dist/commonjs/components/Inspector/NetworkTab.d.ts +3 -0
  58. package/dist/commonjs/components/Inspector/NetworkTab.js +281 -0
  59. package/dist/commonjs/components/Inspector/ReduxTab.d.ts +3 -0
  60. package/dist/commonjs/components/Inspector/ReduxTab.js +75 -0
  61. package/dist/commonjs/components/Inspector/SettingsPanel.d.ts +3 -0
  62. package/dist/commonjs/components/Inspector/SettingsPanel.js +1476 -0
  63. package/dist/commonjs/components/Inspector/TabBar.d.ts +3 -0
  64. package/dist/commonjs/components/Inspector/TabBar.js +95 -0
  65. package/dist/commonjs/components/Inspector/WebViewTab.d.ts +3 -0
  66. package/dist/commonjs/components/Inspector/WebViewTab.js +757 -0
  67. package/dist/commonjs/components/InspectorHeader.d.ts +19 -0
  68. package/dist/commonjs/components/InspectorHeader.js +329 -0
  69. package/dist/commonjs/components/InspectorTabBar.d.ts +16 -0
  70. package/dist/commonjs/components/InspectorTabBar.js +90 -0
  71. package/dist/commonjs/components/JsonViewer.d.ts +4 -1
  72. package/dist/commonjs/components/JsonViewer.js +110 -171
  73. package/dist/commonjs/components/LogCard.js +109 -86
  74. package/dist/commonjs/components/MetaAccordion.d.ts +1 -10
  75. package/dist/commonjs/components/MetaAccordion.js +23 -21
  76. package/dist/commonjs/components/NavigationTracker.d.ts +7 -0
  77. package/dist/commonjs/components/NavigationTracker.js +76 -0
  78. package/dist/commonjs/components/NetworkIcons.d.ts +6 -0
  79. package/dist/commonjs/components/NetworkIcons.js +54 -8
  80. package/dist/commonjs/components/ReduxTabView.d.ts +9 -0
  81. package/dist/commonjs/components/ReduxTabView.js +56 -0
  82. package/dist/commonjs/components/ReduxTreeView.js +241 -200
  83. package/dist/commonjs/components/SegmentedTabs.d.ts +15 -0
  84. package/dist/commonjs/components/SegmentedTabs.js +52 -0
  85. package/dist/commonjs/components/SettingsView.d.ts +13 -0
  86. package/dist/commonjs/components/SettingsView.js +328 -0
  87. package/dist/commonjs/components/TouchableScale.d.ts +2 -2
  88. package/dist/commonjs/components/TouchableScale.js +2 -2
  89. package/dist/commonjs/components/TreeNode.js +2 -2
  90. package/dist/commonjs/constants/index.js +1 -12
  91. package/dist/commonjs/constants/version.d.ts +1 -1
  92. package/dist/commonjs/constants/version.js +1 -1
  93. package/dist/commonjs/customHooks/analyticsLogger.d.ts +8 -0
  94. package/dist/commonjs/customHooks/analyticsLogger.js +42 -1
  95. package/dist/commonjs/customHooks/consoleLogger.js +137 -13
  96. package/dist/commonjs/customHooks/networkLogger.d.ts +0 -1
  97. package/dist/commonjs/customHooks/networkLogger.js +0 -1
  98. package/dist/commonjs/customHooks/reduxLogger.d.ts +2 -9
  99. package/dist/commonjs/enums/index.d.ts +39 -0
  100. package/dist/commonjs/enums/index.js +50 -0
  101. package/dist/commonjs/helpers/index.d.ts +27 -1
  102. package/dist/commonjs/helpers/index.js +187 -12
  103. package/dist/commonjs/helpers/settingsStore.d.ts +2 -24
  104. package/dist/commonjs/i18n/en.json +144 -0
  105. package/dist/commonjs/i18n/index.d.ts +2 -0
  106. package/dist/commonjs/i18n/index.js +27 -0
  107. package/dist/commonjs/i18n/locales/en.json +314 -0
  108. package/dist/commonjs/index.d.ts +2 -3
  109. package/dist/commonjs/index.js +207 -4927
  110. package/dist/commonjs/styles/AppColors.d.ts +148 -0
  111. package/dist/commonjs/styles/AppColors.js +176 -0
  112. package/dist/commonjs/styles/common.d.ts +3 -0
  113. package/dist/commonjs/styles/common.js +201 -0
  114. package/dist/commonjs/styles/index.d.ts +219 -435
  115. package/dist/commonjs/styles/index.js +312 -488
  116. package/dist/commonjs/types/enums.d.ts +9 -0
  117. package/dist/commonjs/types/enums.js +4 -0
  118. package/dist/commonjs/types/index.d.ts +4 -111
  119. package/dist/commonjs/types/index.js +16 -0
  120. package/dist/commonjs/types/interfaces.d.ts +337 -0
  121. package/dist/commonjs/types/interfaces.js +2 -0
  122. package/dist/esm/assets/svgAssets.d.ts +3 -0
  123. package/dist/esm/assets/svgAssets.js +14 -0
  124. package/dist/esm/components/AnalyticsEventCard.d.ts +1 -14
  125. package/dist/esm/components/AnalyticsEventCard.js +118 -48
  126. package/dist/esm/components/AnalyticsGraph.d.ts +2 -6
  127. package/dist/esm/components/AnalyticsGraph.js +8 -8
  128. package/dist/esm/components/AnalyticsTabView.d.ts +15 -0
  129. package/dist/esm/components/AnalyticsTabView.js +151 -0
  130. package/dist/esm/components/AnimatedEntrance.d.ts +1 -1
  131. package/dist/esm/components/AnimatedEntrance.js +2 -2
  132. package/dist/esm/components/ApiDetailView.d.ts +22 -0
  133. package/dist/esm/components/ApiDetailView.js +264 -0
  134. package/dist/esm/components/ApisTabView.d.ts +33 -0
  135. package/dist/esm/components/ApisTabView.js +196 -0
  136. package/dist/esm/components/CodeSnippet.d.ts +1 -5
  137. package/dist/esm/components/CodeSnippet.js +34 -34
  138. package/dist/esm/components/ConsoleLogCard.d.ts +1 -8
  139. package/dist/esm/components/ConsoleLogCard.js +262 -409
  140. package/dist/esm/components/ConsoleLogDetailView.d.ts +9 -0
  141. package/dist/esm/components/ConsoleLogDetailView.js +271 -0
  142. package/dist/esm/components/ConsoleLogsTabView.d.ts +24 -0
  143. package/dist/esm/components/ConsoleLogsTabView.js +348 -0
  144. package/dist/esm/components/DiffViewer.js +4 -2
  145. package/dist/esm/components/DomainHeader.js +66 -41
  146. package/dist/esm/components/EmptyState.d.ts +2 -2
  147. package/dist/esm/components/EmptyState.js +2 -2
  148. package/dist/esm/components/EndOfListFooter.d.ts +8 -0
  149. package/dist/esm/components/EndOfListFooter.js +83 -0
  150. package/dist/esm/components/ErrorBoundary.d.ts +5 -14
  151. package/dist/esm/components/ErrorBoundary.js +29 -29
  152. package/dist/esm/components/FloatingBubble.d.ts +14 -0
  153. package/dist/esm/components/FloatingBubble.js +68 -0
  154. package/dist/esm/components/HeadersSection.js +5 -3
  155. package/dist/esm/components/HighlightText.d.ts +1 -1
  156. package/dist/esm/components/HighlightText.js +5 -7
  157. package/dist/esm/components/Inspector/AnalyticsTab.d.ts +3 -0
  158. package/dist/esm/components/Inspector/AnalyticsTab.js +194 -0
  159. package/dist/esm/components/Inspector/ConsoleTab.d.ts +3 -0
  160. package/dist/esm/components/Inspector/ConsoleTab.js +372 -0
  161. package/dist/esm/components/Inspector/FabLauncher.d.ts +3 -0
  162. package/dist/esm/components/Inspector/FabLauncher.js +49 -0
  163. package/dist/esm/components/Inspector/InsightsDashboard.d.ts +3 -0
  164. package/dist/esm/components/Inspector/InsightsDashboard.js +614 -0
  165. package/dist/esm/components/Inspector/InspectorContext.d.ts +5 -0
  166. package/dist/esm/components/Inspector/InspectorContext.js +13 -0
  167. package/dist/esm/components/Inspector/InspectorHeader.d.ts +3 -0
  168. package/dist/esm/components/Inspector/InspectorHeader.js +447 -0
  169. package/dist/esm/components/Inspector/LogDetail.d.ts +3 -0
  170. package/dist/esm/components/Inspector/LogDetail.js +925 -0
  171. package/dist/esm/components/Inspector/MainScreen.d.ts +3 -0
  172. package/dist/esm/components/Inspector/MainScreen.js +63 -0
  173. package/dist/esm/components/Inspector/NavigationTracker.d.ts +3 -0
  174. package/dist/esm/components/Inspector/NavigationTracker.js +10 -0
  175. package/dist/esm/components/Inspector/NetworkDetail.d.ts +3 -0
  176. package/dist/esm/components/Inspector/NetworkDetail.js +367 -0
  177. package/dist/esm/components/Inspector/NetworkTab.d.ts +3 -0
  178. package/dist/esm/components/Inspector/NetworkTab.js +243 -0
  179. package/dist/esm/components/Inspector/ReduxTab.d.ts +3 -0
  180. package/dist/esm/components/Inspector/ReduxTab.js +70 -0
  181. package/dist/esm/components/Inspector/SettingsPanel.d.ts +3 -0
  182. package/dist/esm/components/Inspector/SettingsPanel.js +1438 -0
  183. package/dist/esm/components/Inspector/TabBar.d.ts +3 -0
  184. package/dist/esm/components/Inspector/TabBar.js +90 -0
  185. package/dist/esm/components/Inspector/WebViewTab.d.ts +3 -0
  186. package/dist/esm/components/Inspector/WebViewTab.js +752 -0
  187. package/dist/esm/components/InspectorHeader.d.ts +19 -0
  188. package/dist/esm/components/InspectorHeader.js +323 -0
  189. package/dist/esm/components/InspectorTabBar.d.ts +16 -0
  190. package/dist/esm/components/InspectorTabBar.js +84 -0
  191. package/dist/esm/components/JsonViewer.d.ts +4 -1
  192. package/dist/esm/components/JsonViewer.js +111 -172
  193. package/dist/esm/components/LogCard.js +111 -88
  194. package/dist/esm/components/MetaAccordion.d.ts +1 -10
  195. package/dist/esm/components/MetaAccordion.js +23 -21
  196. package/dist/esm/components/NavigationTracker.d.ts +7 -0
  197. package/dist/esm/components/NavigationTracker.js +39 -0
  198. package/dist/esm/components/NetworkIcons.d.ts +6 -0
  199. package/dist/esm/components/NetworkIcons.js +46 -6
  200. package/dist/esm/components/ReduxTabView.d.ts +9 -0
  201. package/dist/esm/components/ReduxTabView.js +50 -0
  202. package/dist/esm/components/ReduxTreeView.js +243 -202
  203. package/dist/esm/components/SegmentedTabs.d.ts +15 -0
  204. package/dist/esm/components/SegmentedTabs.js +47 -0
  205. package/dist/esm/components/SettingsView.d.ts +13 -0
  206. package/dist/esm/components/SettingsView.js +321 -0
  207. package/dist/esm/components/TouchableScale.d.ts +2 -2
  208. package/dist/esm/components/TouchableScale.js +2 -2
  209. package/dist/esm/components/TreeNode.js +2 -2
  210. package/dist/esm/constants/index.js +1 -12
  211. package/dist/esm/constants/version.d.ts +1 -1
  212. package/dist/esm/constants/version.js +1 -1
  213. package/dist/esm/customHooks/analyticsLogger.d.ts +8 -0
  214. package/dist/esm/customHooks/analyticsLogger.js +37 -0
  215. package/dist/esm/customHooks/consoleLogger.js +137 -13
  216. package/dist/esm/customHooks/networkLogger.d.ts +0 -1
  217. package/dist/esm/customHooks/networkLogger.js +0 -1
  218. package/dist/esm/customHooks/reduxLogger.d.ts +2 -9
  219. package/dist/esm/enums/index.d.ts +39 -0
  220. package/dist/esm/enums/index.js +47 -0
  221. package/dist/esm/helpers/index.d.ts +27 -1
  222. package/dist/esm/helpers/index.js +180 -11
  223. package/dist/esm/helpers/settingsStore.d.ts +2 -24
  224. package/dist/esm/i18n/en.json +144 -0
  225. package/dist/esm/i18n/index.d.ts +2 -0
  226. package/dist/esm/i18n/index.js +22 -0
  227. package/dist/esm/i18n/locales/en.json +314 -0
  228. package/dist/esm/index.d.ts +2 -3
  229. package/dist/esm/index.js +207 -4923
  230. package/dist/esm/styles/AppColors.d.ts +148 -0
  231. package/dist/esm/styles/AppColors.js +176 -0
  232. package/dist/esm/styles/common.d.ts +3 -0
  233. package/dist/esm/styles/common.js +197 -0
  234. package/dist/esm/styles/index.d.ts +219 -435
  235. package/dist/esm/styles/index.js +312 -488
  236. package/dist/esm/types/enums.d.ts +9 -0
  237. package/dist/esm/types/enums.js +3 -0
  238. package/dist/esm/types/index.d.ts +4 -111
  239. package/dist/esm/types/index.js +2 -1
  240. package/dist/esm/types/interfaces.d.ts +337 -0
  241. package/dist/esm/types/interfaces.js +1 -0
  242. package/example/App.tsx +88 -1
  243. package/example/android/app/build.gradle +29 -1
  244. package/example/android/app/src/main/java/com/example/MainApplication.kt +25 -0
  245. package/example/android/build.gradle +31 -4
  246. package/example/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  247. package/example/android/gradle.properties +1 -0
  248. package/example/android/settings.gradle +20 -1
  249. package/example/package-lock.json +1 -1
  250. package/package.json +3 -1
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AnalyticsTabView = void 0;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_native_1 = require("react-native");
9
+ const react_i18next_1 = require("react-i18next");
10
+ const TouchableScale_1 = __importDefault(require("./TouchableScale"));
11
+ const AnalyticsEventCard_1 = __importDefault(require("./AnalyticsEventCard"));
12
+ const AnalyticsDetail_1 = __importDefault(require("./AnalyticsDetail"));
13
+ const EmptyState_1 = __importDefault(require("./EmptyState"));
14
+ const AnimatedEntrance_1 = __importDefault(require("./AnimatedEntrance"));
15
+ const NetworkIcons_1 = require("./NetworkIcons");
16
+ const AppColors_1 = require("../styles/AppColors");
17
+ const AppFonts_1 = require("../styles/AppFonts");
18
+ const styles_1 = __importDefault(require("../styles"));
19
+ exports.AnalyticsTabView = react_1.default.memo(({ analyticsSearch, onSetAnalyticsSearch, onDeleteEvents, selectedEvent, onSelectEvent, filteredAnalyticsEvents, visibleAnalyticsEvents, currentUserProperties, currentUserId, }) => {
20
+ const { t } = (0, react_i18next_1.useTranslation)();
21
+ const [userPropsExpanded, setUserPropsExpanded] = react_1.default.useState(false);
22
+ const renderItem = react_1.default.useCallback(({ item, index }) => (<AnimatedEntrance_1.default index={index} distance={8}>
23
+ <AnalyticsEventCard_1.default event={item} searchStr={analyticsSearch} onPress={() => onSelectEvent(item)}/>
24
+ </AnimatedEntrance_1.default>), [analyticsSearch, onSelectEvent]);
25
+ const keyExtractor = react_1.default.useCallback((item, index) => item.id != null ? item.id.toString() : index.toString(), []);
26
+ const renderAnalyticsHeader = () => {
27
+ const hasProps = Object.keys(currentUserProperties ?? {}).length > 0;
28
+ const total = visibleAnalyticsEvents.length;
29
+ const filtered = filteredAnalyticsEvents.length;
30
+ return (<react_native_1.View style={{ paddingHorizontal: 16, paddingTop: 8, paddingBottom: 4 }}>
31
+ {(hasProps || currentUserId) && (<react_native_1.View style={{
32
+ backgroundColor: AppColors_1.AppColors.primaryLight,
33
+ borderRadius: 10,
34
+ borderWidth: 1,
35
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
36
+ marginBottom: 10,
37
+ overflow: 'hidden',
38
+ }}>
39
+ <react_native_1.Pressable onPress={() => setUserPropsExpanded(v => !v)} style={{
40
+ flexDirection: 'row',
41
+ alignItems: 'center',
42
+ justifyContent: 'space-between',
43
+ padding: 10,
44
+ backgroundColor: AppColors_1.AppColors.grayBackground,
45
+ }}>
46
+ <react_native_1.View style={{
47
+ flexDirection: 'row',
48
+ alignItems: 'center',
49
+ gap: 6,
50
+ }}>
51
+ <NetworkIcons_1.UserIcon color={AppColors_1.AppColors.purple} size={14}/>
52
+ <react_native_1.Text style={{
53
+ fontFamily: AppFonts_1.AppFonts.interBold,
54
+ fontSize: 12,
55
+ color: AppColors_1.AppColors.primaryBlack,
56
+ }}>
57
+ {t('analytics.user_context')}
58
+ </react_native_1.Text>
59
+ {currentUserId && (<react_native_1.View style={{
60
+ backgroundColor: 'rgba(104,75,155,0.1)',
61
+ paddingHorizontal: 6,
62
+ paddingVertical: 1,
63
+ borderRadius: 4,
64
+ }}>
65
+ <react_native_1.Text style={{
66
+ fontFamily: AppFonts_1.AppFonts.interBold,
67
+ fontSize: 9,
68
+ color: AppColors_1.AppColors.purple,
69
+ }}>
70
+ {t('analytics.id')}: {currentUserId}
71
+ </react_native_1.Text>
72
+ </react_native_1.View>)}
73
+ </react_native_1.View>
74
+ <react_native_1.Text style={{
75
+ fontFamily: AppFonts_1.AppFonts.interMedium,
76
+ fontSize: 11,
77
+ color: AppColors_1.AppColors.purple,
78
+ }}>
79
+ {userPropsExpanded ? t('analytics.hide_props') : t('analytics.show_props')}
80
+ </react_native_1.Text>
81
+ </react_native_1.Pressable>
82
+
83
+ {userPropsExpanded && hasProps && (<react_native_1.View style={{
84
+ padding: 10,
85
+ borderTopWidth: 1,
86
+ borderTopColor: AppColors_1.AppColors.dividerColor,
87
+ gap: 4,
88
+ }}>
89
+ {Object.entries(currentUserProperties ?? {}).map(([k, v]) => (<react_native_1.View key={k} style={{
90
+ flexDirection: 'row',
91
+ justifyContent: 'space-between',
92
+ }}>
93
+ <react_native_1.Text style={{
94
+ fontFamily: AppFonts_1.AppFonts.interMedium,
95
+ fontSize: 11,
96
+ color: AppColors_1.AppColors.grayTextWeak,
97
+ }}>
98
+ {k}
99
+ </react_native_1.Text>
100
+ <react_native_1.Text style={{
101
+ fontFamily: AppFonts_1.AppFonts.interBold,
102
+ fontSize: 11,
103
+ color: AppColors_1.AppColors.primaryBlack,
104
+ }}>
105
+ {String(v)}
106
+ </react_native_1.Text>
107
+ </react_native_1.View>))}
108
+ </react_native_1.View>)}
109
+ </react_native_1.View>)}
110
+
111
+ <react_native_1.Text style={[styles_1.default.resultCount, { marginBottom: 4 }]}>
112
+ {t('filters.showing_analytics', { filtered, total })}
113
+ </react_native_1.Text>
114
+ </react_native_1.View>);
115
+ };
116
+ return (<react_native_1.View style={{ flex: 1 }}>
117
+ {selectedEvent != null ? (<AnalyticsDetail_1.default event={selectedEvent} onClose={() => onSelectEvent(null)}/>) : (<react_native_1.View style={{ flex: 1 }}>
118
+ <react_native_1.View style={{
119
+ backgroundColor: AppColors_1.AppColors.white,
120
+ borderBottomWidth: 1,
121
+ borderBottomColor: AppColors_1.AppColors.dividerColor,
122
+ paddingBottom: 6,
123
+ }}>
124
+ <react_native_1.View style={[
125
+ styles_1.default.toolbarRow,
126
+ { marginTop: 12, marginBottom: 8 },
127
+ ]}>
128
+ <react_native_1.View style={styles_1.default.searchContainer}>
129
+ <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayTextWeak} size={16}/>
130
+ <react_native_1.TextInput placeholder={t('search.analytics_placeholder')} placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={analyticsSearch} onChangeText={onSetAnalyticsSearch} style={styles_1.default.searchInput} autoCorrect={false} autoCapitalize="none"/>
131
+ {analyticsSearch.length > 0 && (<react_native_1.Pressable onPress={() => onSetAnalyticsSearch('')} hitSlop={10} style={styles_1.default.clearBtn}>
132
+ <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
133
+ </react_native_1.Pressable>)}
134
+ </react_native_1.View>
135
+
136
+ <react_native_1.View style={styles_1.default.toolbarRight}>
137
+ <TouchableScale_1.default style={[
138
+ styles_1.default.toolbarBtn,
139
+ {
140
+ borderColor: 'rgba(255,46,87,0.22)',
141
+ backgroundColor: 'rgba(255,46,87,0.06)',
142
+ },
143
+ ]} onPress={onDeleteEvents} hitSlop={6}>
144
+ <NetworkIcons_1.WipeIcon color={AppColors_1.AppColors.errorColor} size={15}/>
145
+ </TouchableScale_1.default>
146
+ </react_native_1.View>
147
+ </react_native_1.View>
148
+ </react_native_1.View>
149
+
150
+ <react_native_1.FlatList data={filteredAnalyticsEvents} keyExtractor={keyExtractor} ListHeaderComponent={renderAnalyticsHeader} renderItem={renderItem} initialNumToRender={15} maxToRenderPerBatch={15} windowSize={7} removeClippedSubviews={true} ListEmptyComponent={<EmptyState_1.default isSearch={analyticsSearch.length > 0}/>} contentContainerStyle={[
151
+ styles_1.default.listContent,
152
+ filteredAnalyticsEvents.length === 0 && { flexGrow: 1 },
153
+ ]} keyboardShouldPersistTaps="handled"/>
154
+ </react_native_1.View>)}
155
+ </react_native_1.View>);
156
+ });
157
+ exports.default = exports.AnalyticsTabView;
@@ -8,5 +8,5 @@ interface AnimatedEntranceProps {
8
8
  index?: number;
9
9
  style?: ViewStyle | ViewStyle[];
10
10
  }
11
- declare const AnimatedEntrance: ({ children, delay, distance, duration, index, style, }: AnimatedEntranceProps) => React.JSX.Element;
11
+ declare const AnimatedEntrance: React.NamedExoticComponent<AnimatedEntranceProps>;
12
12
  export default AnimatedEntrance;
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const react_1 = __importStar(require("react"));
37
37
  const react_native_1 = require("react-native");
38
- const AnimatedEntrance = ({ children, delay = 0, distance = 10, duration = 220, index = 0, style, }) => {
38
+ const AnimatedEntrance = react_1.default.memo(function AnimatedEntrance({ children, delay = 0, distance = 10, duration = 220, index = 0, style, }) {
39
39
  const progress = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
40
40
  (0, react_1.useEffect)(() => {
41
41
  progress.setValue(0);
@@ -68,5 +68,5 @@ const AnimatedEntrance = ({ children, delay = 0, distance = 10, duration = 220,
68
68
  ]}>
69
69
  {children}
70
70
  </react_native_1.Animated.View>);
71
- };
71
+ });
72
72
  exports.default = AnimatedEntrance;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ import { NetworkLog } from '../types';
3
+ import { ApiDetailTab } from '../enums';
4
+ interface ApiDetailViewProps {
5
+ selected: NetworkLog;
6
+ apiDetailActiveTab: ApiDetailTab | 'metadata' | 'headers' | 'request' | 'response';
7
+ onSetApiDetailActiveTab: (tab: ApiDetailTab | 'metadata' | 'headers' | 'request' | 'response') => void;
8
+ detailSearch: string;
9
+ onSetDetailSearch: (val: string) => void;
10
+ reqExpanded: boolean;
11
+ onToggleReqExpanded: () => void;
12
+ resExpanded: boolean;
13
+ onToggleResExpanded: () => void;
14
+ showReqDiff: boolean;
15
+ onToggleShowReqDiff: () => void;
16
+ showResDiff: boolean;
17
+ onToggleShowResDiff: () => void;
18
+ prevRequestData: any;
19
+ prevResponseData: any;
20
+ }
21
+ export declare const ApiDetailView: React.FC<ApiDetailViewProps>;
22
+ export default ApiDetailView;
@@ -0,0 +1,304 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.ApiDetailView = void 0;
40
+ const react_1 = __importDefault(require("react"));
41
+ const react_native_1 = require("react-native");
42
+ const react_native_svg_1 = __importStar(require("react-native-svg"));
43
+ const react_i18next_1 = require("react-i18next");
44
+ const TouchableScale_1 = __importDefault(require("./TouchableScale"));
45
+ const CopyButton_1 = __importDefault(require("./CopyButton"));
46
+ const SectionHeader_1 = __importDefault(require("./SectionHeader"));
47
+ const JsonViewer_1 = __importDefault(require("./JsonViewer"));
48
+ const DiffViewer_1 = __importDefault(require("./DiffViewer"));
49
+ const HeadersSection_1 = __importDefault(require("./HeadersSection"));
50
+ const NetworkIcons_1 = require("./NetworkIcons");
51
+ const constants_1 = require("../constants");
52
+ const AppColors_1 = require("../styles/AppColors");
53
+ const AppFonts_1 = require("../styles/AppFonts");
54
+ const styles_1 = __importDefault(require("../styles"));
55
+ const helpers_1 = require("../helpers");
56
+ const ApiDetailView = ({ selected, apiDetailActiveTab, onSetApiDetailActiveTab, detailSearch, onSetDetailSearch, reqExpanded, onToggleReqExpanded, resExpanded, onToggleResExpanded, showReqDiff, onToggleShowReqDiff, showResDiff, onToggleShowResDiff, prevRequestData, prevResponseData, }) => {
57
+ const { t } = (0, react_i18next_1.useTranslation)();
58
+ const detailDisplayUrl = (0, helpers_1.formatDisplayUrl)(selected.url);
59
+ let hostStr = '';
60
+ let pathStr = detailDisplayUrl;
61
+ let queryStr = '';
62
+ try {
63
+ const qIndex = detailDisplayUrl.indexOf('?');
64
+ let cleanUrlForParsing = detailDisplayUrl;
65
+ if (qIndex !== -1) {
66
+ pathStr = detailDisplayUrl.substring(0, qIndex);
67
+ queryStr = detailDisplayUrl.substring(qIndex);
68
+ cleanUrlForParsing = pathStr;
69
+ }
70
+ const schemeIndex = cleanUrlForParsing.indexOf('://');
71
+ if (schemeIndex !== -1) {
72
+ const withoutScheme = cleanUrlForParsing.substring(schemeIndex + 3);
73
+ const firstSlash = withoutScheme.indexOf('/');
74
+ if (firstSlash !== -1) {
75
+ hostStr = withoutScheme.substring(0, firstSlash);
76
+ pathStr = withoutScheme.substring(firstSlash);
77
+ }
78
+ else {
79
+ hostStr = withoutScheme;
80
+ pathStr = '/';
81
+ }
82
+ }
83
+ }
84
+ catch (e) { }
85
+ return (<react_native_1.View style={{ flex: 1 }}>
86
+ {/* Non-scrollable details header */}
87
+ <react_native_1.View style={{ paddingHorizontal: 6, paddingTop: 4 }}>
88
+ <react_native_1.View style={styles_1.default.detailInfoBar}>
89
+ <react_native_1.View style={styles_1.default.detailInfoTop}>
90
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
91
+ <react_native_1.View style={[
92
+ styles_1.default.methodBadge,
93
+ {
94
+ backgroundColor: constants_1.METHOD_COLORS[selected.method] ??
95
+ AppColors_1.AppColors.grayText,
96
+ },
97
+ ]}>
98
+ <react_native_1.Text style={styles_1.default.methodBadgeText}>{selected.method}</react_native_1.Text>
99
+ </react_native_1.View>
100
+ {selected.status != null && (<react_native_1.View style={[
101
+ styles_1.default.chip,
102
+ {
103
+ backgroundColor: `${(0, helpers_1.getStatusColor)(selected.status)}15`,
104
+ borderColor: `${(0, helpers_1.getStatusColor)(selected.status)}30`,
105
+ },
106
+ ]}>
107
+ {selected.status !== 0 && (<react_native_svg_1.default width="10" height="10" viewBox="0 0 10 10">
108
+ <react_native_svg_1.Circle cx="5" cy="5" r="5" fill={(0, helpers_1.getStatusColor)(selected.status)}/>
109
+ </react_native_svg_1.default>)}
110
+ <react_native_1.Text style={[
111
+ styles_1.default.chipText,
112
+ {
113
+ color: selected.status === 0
114
+ ? AppColors_1.AppColors.errorColor
115
+ : (0, helpers_1.getStatusColor)(selected.status),
116
+ },
117
+ ]}>
118
+ {selected.status === 0
119
+ ? 'Failed'
120
+ : String(selected.status)}
121
+ </react_native_1.Text>
122
+ </react_native_1.View>)}
123
+
124
+ {selected.duration != null && (<react_native_1.View style={[
125
+ styles_1.default.chip,
126
+ {
127
+ backgroundColor: 'rgba(104,75,155,0.08)',
128
+ borderColor: 'rgba(104,75,155,0.18)',
129
+ },
130
+ ]}>
131
+ <react_native_1.Text style={[
132
+ styles_1.default.chipText,
133
+ { color: AppColors_1.AppColors.purple },
134
+ ]}>
135
+ {selected.duration}ms
136
+ </react_native_1.Text>
137
+ </react_native_1.View>)}
138
+ </react_native_1.View>
139
+ <react_native_1.View style={styles_1.default.detailInfoRight}>
140
+ <TouchableScale_1.default style={styles_1.default.iconSquareBtn} onPress={() => react_native_1.Linking.openURL(detailDisplayUrl)} hitSlop={12}>
141
+ <NetworkIcons_1.GlobeIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
142
+ </TouchableScale_1.default>
143
+ <CopyButton_1.default value={(0, helpers_1.getFetchCommand)(selected)} label="fetch()" iconType="fetch"/>
144
+ <CopyButton_1.default value={(0, helpers_1.getCurlCommand)(selected)} label="cURL" iconType="terminal"/>
145
+ <CopyButton_1.default value={detailDisplayUrl} label="URL"/>
146
+ </react_native_1.View>
147
+ </react_native_1.View>
148
+
149
+ <react_native_1.Pressable style={{
150
+ backgroundColor: AppColors_1.AppColors.grayBackground,
151
+ borderRadius: 10,
152
+ borderWidth: 1,
153
+ borderColor: AppColors_1.AppColors.dividerColor,
154
+ padding: 10,
155
+ marginTop: 6,
156
+ }} onPress={() => react_native_1.Linking.openURL(detailDisplayUrl)}>
157
+ <react_native_1.View style={{
158
+ flexDirection: 'row',
159
+ alignItems: 'center',
160
+ justifyContent: 'space-between',
161
+ marginBottom: 2,
162
+ }}>
163
+ <react_native_1.Text style={{
164
+ fontFamily: AppFonts_1.AppFonts.interMedium,
165
+ fontSize: 10,
166
+ color: AppColors_1.AppColors.grayTextWeak,
167
+ flex: 1,
168
+ }} numberOfLines={1}>
169
+ {hostStr || 'API Endpoint'}
170
+ </react_native_1.Text>
171
+ {queryStr ? (<react_native_1.View style={{
172
+ backgroundColor: 'rgba(104,75,155,0.08)',
173
+ paddingHorizontal: 5,
174
+ paddingVertical: 1,
175
+ borderRadius: 4,
176
+ }}>
177
+ <react_native_1.Text style={{
178
+ fontFamily: AppFonts_1.AppFonts.interBold,
179
+ fontSize: 8.5,
180
+ color: AppColors_1.AppColors.purple,
181
+ }}>
182
+ Query Params
183
+ </react_native_1.Text>
184
+ </react_native_1.View>) : null}
185
+ </react_native_1.View>
186
+ <react_native_1.Text selectable={true} style={{
187
+ fontFamily: AppFonts_1.AppFonts.interBold,
188
+ fontSize: 12,
189
+ color: AppColors_1.AppColors.primaryBlack,
190
+ marginTop: 2,
191
+ }} numberOfLines={2}>
192
+ {pathStr}
193
+ </react_native_1.Text>
194
+ {queryStr ? (<react_native_1.Text selectable={true} style={{
195
+ fontFamily: AppFonts_1.AppFonts.interRegular,
196
+ fontSize: 10,
197
+ color: AppColors_1.AppColors.grayTextWeak,
198
+ marginTop: 4,
199
+ }} numberOfLines={1}>
200
+ {queryStr}
201
+ </react_native_1.Text>) : null}
202
+ </react_native_1.Pressable>
203
+ </react_native_1.View>
204
+
205
+ {/* Tab Selection */}
206
+ <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={styles_1.default.detailTabBar}>
207
+ {['response', 'request', 'headers', 'metadata'].map(tab => (<TouchableScale_1.default key={tab} style={[
208
+ styles_1.default.detailTab,
209
+ apiDetailActiveTab === tab && styles_1.default.detailTabActive,
210
+ ]} onPress={() => onSetApiDetailActiveTab(tab)}>
211
+ <react_native_1.Text style={[
212
+ styles_1.default.detailTabText,
213
+ apiDetailActiveTab === tab && styles_1.default.detailTabTextActive,
214
+ ]}>
215
+ {t(`details.tab_${tab}`)}
216
+ </react_native_1.Text>
217
+ </TouchableScale_1.default>))}
218
+ </react_native_1.ScrollView>
219
+ </react_native_1.View>
220
+
221
+ {/* Scrollable details content */}
222
+ <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 6, gap: 4 }} keyboardShouldPersistTaps="handled" nestedScrollEnabled={true}>
223
+ {apiDetailActiveTab === 'metadata' && (<react_native_1.View style={styles_1.default.sectionContainer}>
224
+ <react_native_1.View style={styles_1.default.metadataCard}>
225
+ <react_native_1.View style={styles_1.default.metadataRow}>
226
+ <react_native_1.Text style={styles_1.default.metadataLabel}>{t('details.duration')}</react_native_1.Text>
227
+ <react_native_1.Text style={styles_1.default.metadataValue}>
228
+ {selected.duration != null
229
+ ? `${selected.duration} ms`
230
+ : '—'}
231
+ </react_native_1.Text>
232
+ </react_native_1.View>
233
+ <react_native_1.View style={styles_1.default.metadataRow}>
234
+ <react_native_1.Text style={styles_1.default.metadataLabel}>{t('details.timestamp')}</react_native_1.Text>
235
+ <react_native_1.Text style={styles_1.default.metadataValue}>
236
+ {new Date(selected.startTime).toLocaleString()}
237
+ </react_native_1.Text>
238
+ </react_native_1.View>
239
+ <react_native_1.View style={styles_1.default.metadataRow}>
240
+ <react_native_1.Text style={styles_1.default.metadataLabel}>{t('details.request_size')}</react_native_1.Text>
241
+ <react_native_1.Text style={styles_1.default.metadataValue}>
242
+ {(0, helpers_1.getSize)(selected.request)}
243
+ </react_native_1.Text>
244
+ </react_native_1.View>
245
+ <react_native_1.View style={styles_1.default.metadataRow}>
246
+ <react_native_1.Text style={styles_1.default.metadataLabel}>{t('details.response_size')}</react_native_1.Text>
247
+ <react_native_1.Text style={styles_1.default.metadataValue}>
248
+ {(0, helpers_1.getSize)(selected.response)}
249
+ </react_native_1.Text>
250
+ </react_native_1.View>
251
+
252
+ {selected.caller && (<react_native_1.View style={[
253
+ styles_1.default.metadataRow,
254
+ { flexDirection: 'column', alignItems: 'flex-start', gap: 4 },
255
+ ]}>
256
+ <react_native_1.Text style={styles_1.default.metadataLabel}>Caller Stack</react_native_1.Text>
257
+ <react_native_1.Text style={[styles_1.default.metadataValue, { fontSize: 11 }]} selectable>
258
+ {selected.caller}
259
+ </react_native_1.Text>
260
+ </react_native_1.View>)}
261
+ </react_native_1.View>
262
+ </react_native_1.View>)}
263
+
264
+ {apiDetailActiveTab === 'headers' && (<>
265
+ <HeadersSection_1.default title="Response Headers" headers={selected.responseHeaders} search={detailSearch}/>
266
+ <HeadersSection_1.default title="Request Headers" headers={selected.requestHeaders} search={detailSearch}/>
267
+ </>)}
268
+
269
+ {apiDetailActiveTab === 'request' && (<>
270
+ <react_native_1.View style={styles_1.default.detailSearchRow}>
271
+ <react_native_1.View style={styles_1.default.detailSearchBox}>
272
+ <react_native_1.TextInput placeholder="Search request..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={detailSearch} onChangeText={onSetDetailSearch} style={styles_1.default.detailSearchInput} autoCorrect={false} autoCapitalize="none"/>
273
+ {detailSearch.length > 0 && (<react_native_1.Pressable onPress={() => onSetDetailSearch('')} hitSlop={10} style={{ padding: 8 }}>
274
+ <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
275
+ </react_native_1.Pressable>)}
276
+ </react_native_1.View>
277
+ </react_native_1.View>
278
+
279
+ <react_native_1.View style={styles_1.default.sectionContainer}>
280
+ <SectionHeader_1.default title="Request Payload" value={selected.request} expanded={reqExpanded} onToggleExpand={onToggleReqExpanded} showDiff={prevRequestData != null} isDiffing={showReqDiff} onToggleDiff={onToggleShowReqDiff}/>
281
+ {showReqDiff ? (<DiffViewer_1.default oldData={prevRequestData} newData={selected.request} forceOpen={reqExpanded}/>) : (<JsonViewer_1.default data={selected.request} search={detailSearch} forceOpen={reqExpanded} wrap/>)}
282
+ </react_native_1.View>
283
+ </>)}
284
+
285
+ {apiDetailActiveTab === 'response' && (<>
286
+ <react_native_1.View style={styles_1.default.detailSearchRow}>
287
+ <react_native_1.View style={styles_1.default.detailSearchBox}>
288
+ <react_native_1.TextInput placeholder="Search response..." placeholderTextColor={AppColors_1.AppColors.grayTextWeak} value={detailSearch} onChangeText={onSetDetailSearch} style={styles_1.default.detailSearchInput} autoCorrect={false} autoCapitalize="none"/>
289
+ {detailSearch.length > 0 && (<react_native_1.Pressable onPress={() => onSetDetailSearch('')} hitSlop={10} style={{ padding: 8 }}>
290
+ <NetworkIcons_1.ClearIcon color={AppColors_1.AppColors.grayTextWeak} size={14}/>
291
+ </react_native_1.Pressable>)}
292
+ </react_native_1.View>
293
+ </react_native_1.View>
294
+
295
+ <react_native_1.View style={styles_1.default.sectionContainer}>
296
+ <SectionHeader_1.default title="Response" value={selected.response} expanded={resExpanded} onToggleExpand={onToggleResExpanded} showDiff={prevResponseData != null} isDiffing={showResDiff} onToggleDiff={onToggleShowResDiff}/>
297
+ {showResDiff ? (<DiffViewer_1.default oldData={prevResponseData} newData={selected.response} forceOpen={resExpanded}/>) : (<JsonViewer_1.default data={selected.response} search={detailSearch} forceOpen={resExpanded} wrap/>)}
298
+ </react_native_1.View>
299
+ </>)}
300
+ </react_native_1.ScrollView>
301
+ </react_native_1.View>);
302
+ };
303
+ exports.ApiDetailView = ApiDetailView;
304
+ exports.default = exports.ApiDetailView;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { FlatList } from 'react-native';
3
+ import { NetworkLog, StatusFilter, Method, SortOrder, GroupedListItem, LocalFilter } from '../types';
4
+ interface ApisTabViewProps {
5
+ search: string;
6
+ onSetSearch: (val: string) => void;
7
+ sortOrder: SortOrder;
8
+ onToggleSortOrder: () => void;
9
+ statusFilters: Set<StatusFilter>;
10
+ onToggleStatusFilter: (filter: StatusFilter) => void;
11
+ methodFilters: Set<Method>;
12
+ onToggleMethodFilter: (method: Method) => void;
13
+ availableMethods: Method[];
14
+ sectionFilters: Record<string, Set<LocalFilter>>;
15
+ onToggleSectionFilter: (section: string, filter: LocalFilter) => void;
16
+ groupByDomain: boolean;
17
+ onToggleGroupByDomain: () => void;
18
+ collapsedDomains: Set<string>;
19
+ onToggleCollapseDomain: (domain: string) => void;
20
+ onDeleteLogs: () => void;
21
+ selectedLogs: Set<number>;
22
+ onToggleSelectLog: (id: number) => void;
23
+ filteredLogs: NetworkLog[];
24
+ groupedListItems: GroupedListItem[];
25
+ onSelectLog: (log: NetworkLog) => void;
26
+ apisListRef: React.RefObject<FlatList<any> | null>;
27
+ logCounts: {
28
+ total: number;
29
+ filtered: number;
30
+ };
31
+ }
32
+ export declare const ApisTabView: React.FC<ApisTabViewProps>;
33
+ export default ApisTabView;