react-native-inapp-inspector 1.1.14 → 1.1.16

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 (246) hide show
  1. package/README.md +133 -151
  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 +34 -51
  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/CopyButton.d.ts +1 -1
  25. package/dist/commonjs/components/CopyButton.js +4 -4
  26. package/dist/commonjs/components/DiffViewer.js +4 -2
  27. package/dist/commonjs/components/DomainHeader.js +66 -41
  28. package/dist/commonjs/components/EmptyState.d.ts +2 -2
  29. package/dist/commonjs/components/EmptyState.js +2 -2
  30. package/dist/commonjs/components/EndOfListFooter.d.ts +8 -0
  31. package/dist/commonjs/components/EndOfListFooter.js +89 -0
  32. package/dist/commonjs/components/ErrorBoundary.d.ts +5 -14
  33. package/dist/commonjs/components/ErrorBoundary.js +28 -28
  34. package/dist/commonjs/components/FloatingBubble.d.ts +14 -0
  35. package/dist/commonjs/components/FloatingBubble.js +75 -0
  36. package/dist/commonjs/components/HeadersSection.js +5 -3
  37. package/dist/commonjs/components/HighlightText.d.ts +1 -1
  38. package/dist/commonjs/components/HighlightText.js +5 -7
  39. package/dist/commonjs/components/Inspector/AnalyticsTab.d.ts +3 -0
  40. package/dist/commonjs/components/Inspector/AnalyticsTab.js +231 -0
  41. package/dist/commonjs/components/Inspector/ConsoleTab.d.ts +3 -0
  42. package/dist/commonjs/components/Inspector/ConsoleTab.js +410 -0
  43. package/dist/commonjs/components/Inspector/FabLauncher.d.ts +3 -0
  44. package/dist/commonjs/components/Inspector/FabLauncher.js +54 -0
  45. package/dist/commonjs/components/Inspector/InsightsDashboard.d.ts +3 -0
  46. package/dist/commonjs/components/Inspector/InsightsDashboard.js +619 -0
  47. package/dist/commonjs/components/Inspector/InspectorContext.d.ts +5 -0
  48. package/dist/commonjs/components/Inspector/InspectorContext.js +18 -0
  49. package/dist/commonjs/components/Inspector/InspectorHeader.d.ts +3 -0
  50. package/dist/commonjs/components/Inspector/InspectorHeader.js +452 -0
  51. package/dist/commonjs/components/Inspector/LogDetail.d.ts +3 -0
  52. package/dist/commonjs/components/Inspector/LogDetail.js +963 -0
  53. package/dist/commonjs/components/Inspector/MainScreen.d.ts +3 -0
  54. package/dist/commonjs/components/Inspector/MainScreen.js +68 -0
  55. package/dist/commonjs/components/Inspector/NavigationTracker.d.ts +3 -0
  56. package/dist/commonjs/components/Inspector/NavigationTracker.js +12 -0
  57. package/dist/commonjs/components/Inspector/NetworkDetail.d.ts +3 -0
  58. package/dist/commonjs/components/Inspector/NetworkDetail.js +405 -0
  59. package/dist/commonjs/components/Inspector/NetworkTab.d.ts +3 -0
  60. package/dist/commonjs/components/Inspector/NetworkTab.js +282 -0
  61. package/dist/commonjs/components/Inspector/ReduxTab.d.ts +3 -0
  62. package/dist/commonjs/components/Inspector/ReduxTab.js +75 -0
  63. package/dist/commonjs/components/Inspector/SettingsPanel.d.ts +3 -0
  64. package/dist/commonjs/components/Inspector/SettingsPanel.js +1476 -0
  65. package/dist/commonjs/components/Inspector/TabBar.d.ts +3 -0
  66. package/dist/commonjs/components/Inspector/TabBar.js +95 -0
  67. package/dist/commonjs/components/Inspector/WebViewTab.d.ts +3 -0
  68. package/dist/commonjs/components/Inspector/WebViewTab.js +757 -0
  69. package/dist/commonjs/components/InspectorHeader.d.ts +19 -0
  70. package/dist/commonjs/components/InspectorHeader.js +329 -0
  71. package/dist/commonjs/components/InspectorTabBar.d.ts +16 -0
  72. package/dist/commonjs/components/InspectorTabBar.js +90 -0
  73. package/dist/commonjs/components/JsonViewer.d.ts +5 -2
  74. package/dist/commonjs/components/JsonViewer.js +111 -172
  75. package/dist/commonjs/components/LogCard.js +109 -86
  76. package/dist/commonjs/components/MetaAccordion.d.ts +1 -10
  77. package/dist/commonjs/components/MetaAccordion.js +23 -21
  78. package/dist/commonjs/components/NavigationTracker.d.ts +7 -0
  79. package/dist/commonjs/components/NavigationTracker.js +76 -0
  80. package/dist/commonjs/components/NetworkIcons.d.ts +6 -0
  81. package/dist/commonjs/components/NetworkIcons.js +54 -8
  82. package/dist/commonjs/components/ReduxTabView.d.ts +9 -0
  83. package/dist/commonjs/components/ReduxTabView.js +56 -0
  84. package/dist/commonjs/components/ReduxTreeView.d.ts +2 -2
  85. package/dist/commonjs/components/ReduxTreeView.js +243 -203
  86. package/dist/commonjs/components/SegmentedTabs.d.ts +15 -0
  87. package/dist/commonjs/components/SegmentedTabs.js +52 -0
  88. package/dist/commonjs/components/SettingsView.d.ts +13 -0
  89. package/dist/commonjs/components/SettingsView.js +328 -0
  90. package/dist/commonjs/components/TouchableScale.d.ts +2 -2
  91. package/dist/commonjs/components/TouchableScale.js +2 -2
  92. package/dist/commonjs/components/TreeNode.js +2 -2
  93. package/dist/commonjs/constants/index.js +1 -12
  94. package/dist/commonjs/constants/version.d.ts +1 -1
  95. package/dist/commonjs/constants/version.js +1 -1
  96. package/dist/commonjs/customHooks/consoleLogger.js +137 -13
  97. package/dist/commonjs/customHooks/networkLogger.d.ts +0 -1
  98. package/dist/commonjs/customHooks/networkLogger.js +0 -1
  99. package/dist/commonjs/customHooks/reduxLogger.d.ts +2 -9
  100. package/dist/commonjs/enums/index.d.ts +39 -0
  101. package/dist/commonjs/enums/index.js +50 -0
  102. package/dist/commonjs/helpers/index.d.ts +27 -1
  103. package/dist/commonjs/helpers/index.js +187 -12
  104. package/dist/commonjs/helpers/settingsStore.d.ts +2 -24
  105. package/dist/commonjs/i18n/en.json +144 -0
  106. package/dist/commonjs/i18n/index.d.ts +2 -0
  107. package/dist/commonjs/i18n/index.js +27 -0
  108. package/dist/commonjs/i18n/locales/en.json +314 -0
  109. package/dist/commonjs/index.d.ts +1 -2
  110. package/dist/commonjs/index.js +196 -4800
  111. package/dist/commonjs/styles/AppColors.d.ts +148 -0
  112. package/dist/commonjs/styles/AppColors.js +176 -0
  113. package/dist/commonjs/styles/common.d.ts +3 -0
  114. package/dist/commonjs/styles/common.js +201 -0
  115. package/dist/commonjs/styles/index.d.ts +167 -442
  116. package/dist/commonjs/styles/index.js +239 -471
  117. package/dist/commonjs/types/enums.d.ts +9 -0
  118. package/dist/commonjs/types/enums.js +4 -0
  119. package/dist/commonjs/types/index.d.ts +4 -111
  120. package/dist/commonjs/types/index.js +16 -0
  121. package/dist/commonjs/types/interfaces.d.ts +337 -0
  122. package/dist/commonjs/types/interfaces.js +2 -0
  123. package/dist/esm/assets/svgAssets.d.ts +3 -0
  124. package/dist/esm/assets/svgAssets.js +14 -0
  125. package/dist/esm/components/AnalyticsEventCard.d.ts +1 -14
  126. package/dist/esm/components/AnalyticsEventCard.js +32 -49
  127. package/dist/esm/components/AnalyticsGraph.d.ts +2 -6
  128. package/dist/esm/components/AnalyticsGraph.js +8 -8
  129. package/dist/esm/components/AnalyticsTabView.d.ts +15 -0
  130. package/dist/esm/components/AnalyticsTabView.js +151 -0
  131. package/dist/esm/components/AnimatedEntrance.d.ts +1 -1
  132. package/dist/esm/components/AnimatedEntrance.js +2 -2
  133. package/dist/esm/components/ApiDetailView.d.ts +22 -0
  134. package/dist/esm/components/ApiDetailView.js +264 -0
  135. package/dist/esm/components/ApisTabView.d.ts +33 -0
  136. package/dist/esm/components/ApisTabView.js +196 -0
  137. package/dist/esm/components/CodeSnippet.d.ts +1 -5
  138. package/dist/esm/components/CodeSnippet.js +34 -34
  139. package/dist/esm/components/ConsoleLogCard.d.ts +1 -8
  140. package/dist/esm/components/ConsoleLogCard.js +262 -409
  141. package/dist/esm/components/ConsoleLogDetailView.d.ts +9 -0
  142. package/dist/esm/components/ConsoleLogDetailView.js +271 -0
  143. package/dist/esm/components/ConsoleLogsTabView.d.ts +24 -0
  144. package/dist/esm/components/ConsoleLogsTabView.js +348 -0
  145. package/dist/esm/components/CopyButton.d.ts +1 -1
  146. package/dist/esm/components/CopyButton.js +5 -5
  147. package/dist/esm/components/DiffViewer.js +4 -2
  148. package/dist/esm/components/DomainHeader.js +66 -41
  149. package/dist/esm/components/EmptyState.d.ts +2 -2
  150. package/dist/esm/components/EmptyState.js +2 -2
  151. package/dist/esm/components/EndOfListFooter.d.ts +8 -0
  152. package/dist/esm/components/EndOfListFooter.js +83 -0
  153. package/dist/esm/components/ErrorBoundary.d.ts +5 -14
  154. package/dist/esm/components/ErrorBoundary.js +29 -29
  155. package/dist/esm/components/FloatingBubble.d.ts +14 -0
  156. package/dist/esm/components/FloatingBubble.js +68 -0
  157. package/dist/esm/components/HeadersSection.js +5 -3
  158. package/dist/esm/components/HighlightText.d.ts +1 -1
  159. package/dist/esm/components/HighlightText.js +5 -7
  160. package/dist/esm/components/Inspector/AnalyticsTab.d.ts +3 -0
  161. package/dist/esm/components/Inspector/AnalyticsTab.js +193 -0
  162. package/dist/esm/components/Inspector/ConsoleTab.d.ts +3 -0
  163. package/dist/esm/components/Inspector/ConsoleTab.js +372 -0
  164. package/dist/esm/components/Inspector/FabLauncher.d.ts +3 -0
  165. package/dist/esm/components/Inspector/FabLauncher.js +49 -0
  166. package/dist/esm/components/Inspector/InsightsDashboard.d.ts +3 -0
  167. package/dist/esm/components/Inspector/InsightsDashboard.js +614 -0
  168. package/dist/esm/components/Inspector/InspectorContext.d.ts +5 -0
  169. package/dist/esm/components/Inspector/InspectorContext.js +13 -0
  170. package/dist/esm/components/Inspector/InspectorHeader.d.ts +3 -0
  171. package/dist/esm/components/Inspector/InspectorHeader.js +447 -0
  172. package/dist/esm/components/Inspector/LogDetail.d.ts +3 -0
  173. package/dist/esm/components/Inspector/LogDetail.js +925 -0
  174. package/dist/esm/components/Inspector/MainScreen.d.ts +3 -0
  175. package/dist/esm/components/Inspector/MainScreen.js +63 -0
  176. package/dist/esm/components/Inspector/NavigationTracker.d.ts +3 -0
  177. package/dist/esm/components/Inspector/NavigationTracker.js +10 -0
  178. package/dist/esm/components/Inspector/NetworkDetail.d.ts +3 -0
  179. package/dist/esm/components/Inspector/NetworkDetail.js +367 -0
  180. package/dist/esm/components/Inspector/NetworkTab.d.ts +3 -0
  181. package/dist/esm/components/Inspector/NetworkTab.js +244 -0
  182. package/dist/esm/components/Inspector/ReduxTab.d.ts +3 -0
  183. package/dist/esm/components/Inspector/ReduxTab.js +70 -0
  184. package/dist/esm/components/Inspector/SettingsPanel.d.ts +3 -0
  185. package/dist/esm/components/Inspector/SettingsPanel.js +1438 -0
  186. package/dist/esm/components/Inspector/TabBar.d.ts +3 -0
  187. package/dist/esm/components/Inspector/TabBar.js +90 -0
  188. package/dist/esm/components/Inspector/WebViewTab.d.ts +3 -0
  189. package/dist/esm/components/Inspector/WebViewTab.js +752 -0
  190. package/dist/esm/components/InspectorHeader.d.ts +19 -0
  191. package/dist/esm/components/InspectorHeader.js +323 -0
  192. package/dist/esm/components/InspectorTabBar.d.ts +16 -0
  193. package/dist/esm/components/InspectorTabBar.js +84 -0
  194. package/dist/esm/components/JsonViewer.d.ts +5 -2
  195. package/dist/esm/components/JsonViewer.js +112 -173
  196. package/dist/esm/components/LogCard.js +111 -88
  197. package/dist/esm/components/MetaAccordion.d.ts +1 -10
  198. package/dist/esm/components/MetaAccordion.js +23 -21
  199. package/dist/esm/components/NavigationTracker.d.ts +7 -0
  200. package/dist/esm/components/NavigationTracker.js +39 -0
  201. package/dist/esm/components/NetworkIcons.d.ts +6 -0
  202. package/dist/esm/components/NetworkIcons.js +46 -6
  203. package/dist/esm/components/ReduxTabView.d.ts +9 -0
  204. package/dist/esm/components/ReduxTabView.js +50 -0
  205. package/dist/esm/components/ReduxTreeView.d.ts +2 -2
  206. package/dist/esm/components/ReduxTreeView.js +245 -204
  207. package/dist/esm/components/SegmentedTabs.d.ts +15 -0
  208. package/dist/esm/components/SegmentedTabs.js +47 -0
  209. package/dist/esm/components/SettingsView.d.ts +13 -0
  210. package/dist/esm/components/SettingsView.js +321 -0
  211. package/dist/esm/components/TouchableScale.d.ts +2 -2
  212. package/dist/esm/components/TouchableScale.js +2 -2
  213. package/dist/esm/components/TreeNode.js +2 -2
  214. package/dist/esm/constants/index.js +1 -12
  215. package/dist/esm/constants/version.d.ts +1 -1
  216. package/dist/esm/constants/version.js +1 -1
  217. package/dist/esm/customHooks/consoleLogger.js +137 -13
  218. package/dist/esm/customHooks/networkLogger.d.ts +0 -1
  219. package/dist/esm/customHooks/networkLogger.js +0 -1
  220. package/dist/esm/customHooks/reduxLogger.d.ts +2 -9
  221. package/dist/esm/enums/index.d.ts +39 -0
  222. package/dist/esm/enums/index.js +47 -0
  223. package/dist/esm/helpers/index.d.ts +27 -1
  224. package/dist/esm/helpers/index.js +180 -11
  225. package/dist/esm/helpers/settingsStore.d.ts +2 -24
  226. package/dist/esm/i18n/en.json +144 -0
  227. package/dist/esm/i18n/index.d.ts +2 -0
  228. package/dist/esm/i18n/index.js +22 -0
  229. package/dist/esm/i18n/locales/en.json +314 -0
  230. package/dist/esm/index.d.ts +1 -2
  231. package/dist/esm/index.js +200 -4796
  232. package/dist/esm/styles/AppColors.d.ts +148 -0
  233. package/dist/esm/styles/AppColors.js +176 -0
  234. package/dist/esm/styles/common.d.ts +3 -0
  235. package/dist/esm/styles/common.js +197 -0
  236. package/dist/esm/styles/index.d.ts +167 -442
  237. package/dist/esm/styles/index.js +239 -471
  238. package/dist/esm/types/enums.d.ts +9 -0
  239. package/dist/esm/types/enums.js +3 -0
  240. package/dist/esm/types/index.d.ts +4 -111
  241. package/dist/esm/types/index.js +2 -1
  242. package/dist/esm/types/interfaces.d.ts +337 -0
  243. package/dist/esm/types/interfaces.js +1 -0
  244. package/example/App.tsx +145 -2
  245. package/example/README.md +33 -77
  246. package/package.json +3 -1
@@ -0,0 +1,321 @@
1
+ import React from 'react';
2
+ import { Alert, Pressable, ScrollView, Switch, Text, View, } from 'react-native';
3
+ import LinearGradient from 'react-native-linear-gradient';
4
+ import { useTranslation } from 'react-i18next';
5
+ import TouchableScale from './TouchableScale';
6
+ import { WhiteBackNavigation, SunIcon, MoonIcon, SignalIcon, TerminalIcon, AnalyticsIcon, GlobeIcon, TrashIcon, } from './NetworkIcons';
7
+ import { AppColors } from '../styles/AppColors';
8
+ import { AppFonts } from '../styles/AppFonts';
9
+ import { toggleGlobalTheme } from '../styles';
10
+ import { saveSettings, isPersistentStorageAvailable, clearPersistedSettings, } from '../helpers/settingsStore';
11
+ export const SettingsView = ({ headerTopPadding, defaultTab, tabVisibility, onCloseSettings, onUpdateTabVisibility, onSetDefaultTab, }) => {
12
+ const { t } = useTranslation();
13
+ const [themeMode, setThemeMode] = React.useState(AppColors.primaryLight === AppColors.white ? 'light' : 'dark');
14
+ const handleToggleTheme = () => {
15
+ const nextIsDark = themeMode !== 'dark';
16
+ toggleGlobalTheme(nextIsDark);
17
+ const newTheme = nextIsDark ? 'dark' : 'light';
18
+ setThemeMode(newTheme);
19
+ saveSettings({ isDark: nextIsDark, theme: newTheme });
20
+ };
21
+ const renderSettingRow = (opts) => {
22
+ return (<Pressable onPress={opts.onPress} disabled={!opts.onPress} style={{
23
+ flexDirection: 'row',
24
+ alignItems: 'center',
25
+ justifyContent: 'space-between',
26
+ paddingVertical: 12,
27
+ paddingHorizontal: 16,
28
+ borderBottomWidth: 1,
29
+ borderBottomColor: AppColors.dividerColor,
30
+ }}>
31
+ <View style={{
32
+ flexDirection: 'row',
33
+ alignItems: 'center',
34
+ gap: 12,
35
+ flex: 1,
36
+ marginRight: 8,
37
+ }}>
38
+ <View style={{
39
+ width: 32,
40
+ height: 32,
41
+ borderRadius: 8,
42
+ backgroundColor: AppColors.grayBackground,
43
+ alignItems: 'center',
44
+ justifyContent: 'center',
45
+ }}>
46
+ {opts.icon}
47
+ </View>
48
+ <View style={{ flex: 1 }}>
49
+ <Text style={{
50
+ fontFamily: AppFonts.interBold,
51
+ fontSize: 13,
52
+ color: AppColors.primaryBlack,
53
+ }}>
54
+ {opts.title}
55
+ </Text>
56
+ {opts.description ? (<Text style={{
57
+ fontFamily: AppFonts.interRegular,
58
+ fontSize: 11,
59
+ color: AppColors.grayTextWeak,
60
+ marginTop: 2,
61
+ }}>
62
+ {opts.description}
63
+ </Text>) : null}
64
+ </View>
65
+ </View>
66
+ {opts.rightComponent}
67
+ </Pressable>);
68
+ };
69
+ return (<View style={{ flex: 1, backgroundColor: AppColors.grayBackground }}>
70
+ <LinearGradient colors={[AppColors.purple, '#6B4EFF']} style={{ paddingTop: headerTopPadding, paddingBottom: 16 }}>
71
+ <View style={{
72
+ flexDirection: 'row',
73
+ alignItems: 'center',
74
+ paddingHorizontal: 16,
75
+ gap: 12,
76
+ }}>
77
+ <TouchableScale onPress={onCloseSettings} hitSlop={15} style={{
78
+ width: 36,
79
+ height: 36,
80
+ borderRadius: 18,
81
+ alignItems: 'center',
82
+ justifyContent: 'center',
83
+ backgroundColor: 'rgba(255,255,255,0.18)',
84
+ }}>
85
+ <WhiteBackNavigation />
86
+ </TouchableScale>
87
+ <Text style={{
88
+ fontFamily: AppFonts.interBold,
89
+ fontSize: 18,
90
+ color: AppColors.white,
91
+ }}>
92
+ {t('settings.title')}
93
+ </Text>
94
+ </View>
95
+ </LinearGradient>
96
+
97
+ <ScrollView style={{ flex: 1 }} contentContainerStyle={{ paddingBottom: 32, gap: 16, paddingTop: 16 }}>
98
+ {/* Theme Settings */}
99
+ <View style={{
100
+ backgroundColor: AppColors.primaryLight,
101
+ marginHorizontal: 16,
102
+ borderRadius: 12,
103
+ borderWidth: 1,
104
+ borderColor: AppColors.grayBorderSecondary,
105
+ overflow: 'hidden',
106
+ }}>
107
+ <View style={{
108
+ paddingHorizontal: 16,
109
+ paddingVertical: 10,
110
+ backgroundColor: AppColors.grayBackground,
111
+ borderBottomWidth: 1,
112
+ borderBottomColor: AppColors.dividerColor,
113
+ }}>
114
+ <Text style={{
115
+ fontFamily: AppFonts.interBold,
116
+ fontSize: 11,
117
+ color: AppColors.grayTextWeak,
118
+ letterSpacing: 0.5,
119
+ }}>
120
+ {t('settings.appearance')}
121
+ </Text>
122
+ </View>
123
+ {renderSettingRow({
124
+ icon: themeMode === 'dark' ? (<MoonIcon color={AppColors.purple} size={16}/>) : (<SunIcon color={AppColors.lightOrange} size={16}/>),
125
+ title: t('settings.dark_mode'),
126
+ description: t('settings.dark_mode_desc'),
127
+ rightComponent: (<Switch value={themeMode === 'dark'} onValueChange={handleToggleTheme} trackColor={{
128
+ false: AppColors.grayBorderSecondary,
129
+ true: AppColors.purple,
130
+ }}/>),
131
+ })}
132
+ </View>
133
+
134
+ {/* Module Visibility Settings */}
135
+ <View style={{
136
+ backgroundColor: AppColors.primaryLight,
137
+ marginHorizontal: 16,
138
+ borderRadius: 12,
139
+ borderWidth: 1,
140
+ borderColor: AppColors.grayBorderSecondary,
141
+ overflow: 'hidden',
142
+ }}>
143
+ <View style={{
144
+ paddingHorizontal: 16,
145
+ paddingVertical: 10,
146
+ backgroundColor: AppColors.grayBackground,
147
+ borderBottomWidth: 1,
148
+ borderBottomColor: AppColors.dividerColor,
149
+ }}>
150
+ <Text style={{
151
+ fontFamily: AppFonts.interBold,
152
+ fontSize: 11,
153
+ color: AppColors.grayTextWeak,
154
+ letterSpacing: 0.5,
155
+ }}>
156
+ {t('settings.module_visibility')}
157
+ </Text>
158
+ </View>
159
+
160
+ {renderSettingRow({
161
+ icon: <SignalIcon color={AppColors.purple} size={16}/>,
162
+ title: t('settings.apis_tab'),
163
+ description: t('settings.apis_tab_desc'),
164
+ rightComponent: (<Switch value={tabVisibility.apis !== false} onValueChange={val => onUpdateTabVisibility('apis', val)} trackColor={{
165
+ false: AppColors.grayBorderSecondary,
166
+ true: AppColors.purple,
167
+ }}/>),
168
+ })}
169
+
170
+ {renderSettingRow({
171
+ icon: <TerminalIcon color={AppColors.purple} size={16}/>,
172
+ title: t('settings.logs_tab'),
173
+ description: t('settings.logs_tab_desc'),
174
+ rightComponent: (<Switch value={tabVisibility.logs !== false} onValueChange={val => onUpdateTabVisibility('logs', val)} trackColor={{
175
+ false: AppColors.grayBorderSecondary,
176
+ true: AppColors.purple,
177
+ }}/>),
178
+ })}
179
+
180
+ {renderSettingRow({
181
+ icon: <AnalyticsIcon color={AppColors.purple} size={16}/>,
182
+ title: t('settings.analytics_tab'),
183
+ description: t('settings.analytics_tab_desc'),
184
+ rightComponent: (<Switch value={tabVisibility.analytics !== false} onValueChange={val => onUpdateTabVisibility('analytics', val)} trackColor={{
185
+ false: AppColors.grayBorderSecondary,
186
+ true: AppColors.purple,
187
+ }}/>),
188
+ })}
189
+
190
+ {renderSettingRow({
191
+ icon: <TerminalIcon color={AppColors.purple} size={16}/>,
192
+ title: t('settings.redux_tab'),
193
+ description: t('settings.redux_tab_desc'),
194
+ rightComponent: (<Switch value={tabVisibility.redux !== false} onValueChange={val => onUpdateTabVisibility('redux', val)} trackColor={{
195
+ false: AppColors.grayBorderSecondary,
196
+ true: AppColors.purple,
197
+ }}/>),
198
+ })}
199
+ </View>
200
+
201
+ {/* Landing Tab Preference */}
202
+ <View style={{
203
+ backgroundColor: AppColors.primaryLight,
204
+ marginHorizontal: 16,
205
+ borderRadius: 12,
206
+ borderWidth: 1,
207
+ borderColor: AppColors.grayBorderSecondary,
208
+ overflow: 'hidden',
209
+ }}>
210
+ <View style={{
211
+ paddingHorizontal: 16,
212
+ paddingVertical: 10,
213
+ backgroundColor: AppColors.grayBackground,
214
+ borderBottomWidth: 1,
215
+ borderBottomColor: AppColors.dividerColor,
216
+ }}>
217
+ <Text style={{
218
+ fontFamily: AppFonts.interBold,
219
+ fontSize: 11,
220
+ color: AppColors.grayTextWeak,
221
+ letterSpacing: 0.5,
222
+ }}>
223
+ {t('settings.default_landing_tab')}
224
+ </Text>
225
+ </View>
226
+ {['apis', 'logs', 'analytics', 'redux'].map(tabKey => {
227
+ if (!tabVisibility[tabKey])
228
+ return null;
229
+ const isSelected = defaultTab === tabKey;
230
+ return (<TouchableScale key={tabKey} onPress={() => onSetDefaultTab(tabKey)} style={{
231
+ flexDirection: 'row',
232
+ alignItems: 'center',
233
+ justifyContent: 'space-between',
234
+ paddingVertical: 12,
235
+ paddingHorizontal: 16,
236
+ borderBottomWidth: 1,
237
+ borderBottomColor: AppColors.dividerColor,
238
+ backgroundColor: isSelected
239
+ ? 'rgba(107, 78, 255, 0.05)'
240
+ : AppColors.primaryLight,
241
+ }}>
242
+ <Text style={{
243
+ fontFamily: isSelected
244
+ ? AppFonts.interBold
245
+ : AppFonts.interMedium,
246
+ fontSize: 13,
247
+ color: isSelected
248
+ ? AppColors.purple
249
+ : AppColors.primaryBlack,
250
+ }}>
251
+ {tabKey.toUpperCase()} Tab
252
+ </Text>
253
+ <View style={{
254
+ width: 18,
255
+ height: 18,
256
+ borderRadius: 9,
257
+ borderWidth: isSelected ? 5 : 2,
258
+ borderColor: isSelected
259
+ ? AppColors.purple
260
+ : AppColors.grayBorderSecondary,
261
+ }}/>
262
+ </TouchableScale>);
263
+ })}
264
+ </View>
265
+
266
+ {/* Storage & Persistence Settings */}
267
+ <View style={{
268
+ backgroundColor: AppColors.primaryLight,
269
+ marginHorizontal: 16,
270
+ borderRadius: 12,
271
+ borderWidth: 1,
272
+ borderColor: AppColors.grayBorderSecondary,
273
+ overflow: 'hidden',
274
+ }}>
275
+ <View style={{
276
+ paddingHorizontal: 16,
277
+ paddingVertical: 10,
278
+ backgroundColor: AppColors.grayBackground,
279
+ borderBottomWidth: 1,
280
+ borderBottomColor: AppColors.dividerColor,
281
+ }}>
282
+ <Text style={{
283
+ fontFamily: AppFonts.interBold,
284
+ fontSize: 11,
285
+ color: AppColors.grayTextWeak,
286
+ letterSpacing: 0.5,
287
+ }}>
288
+ {t('settings.storage_persistence')}
289
+ </Text>
290
+ </View>
291
+ {renderSettingRow({
292
+ icon: <GlobeIcon color={AppColors.purple} size={16}/>,
293
+ title: t('settings.custom_storage'),
294
+ description: isPersistentStorageAvailable()
295
+ ? t('settings.custom_storage_active')
296
+ : t('settings.custom_storage_memory'),
297
+ })}
298
+
299
+ {renderSettingRow({
300
+ icon: <TrashIcon color={AppColors.errorColor} size={16}/>,
301
+ title: t('settings.reset_settings'),
302
+ description: t('settings.reset_settings_desc'),
303
+ onPress: () => {
304
+ Alert.alert(t('settings.reset_confirm_title'), t('settings.reset_confirm_msg'), [
305
+ { text: t('header.cancel'), style: 'cancel' },
306
+ {
307
+ text: t('settings.reset'),
308
+ style: 'destructive',
309
+ onPress: () => {
310
+ clearPersistedSettings();
311
+ Alert.alert(t('settings.reset'), t('settings.reset_done'));
312
+ },
313
+ },
314
+ ]);
315
+ },
316
+ })}
317
+ </View>
318
+ </ScrollView>
319
+ </View>);
320
+ };
321
+ export default SettingsView;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- declare const TouchableScale: ({ onPress, style, children, hitSlop, disabled, }: {
2
+ declare const TouchableScale: React.NamedExoticComponent<{
3
3
  onPress?: () => void;
4
4
  style?: any;
5
5
  children?: React.ReactNode;
6
6
  hitSlop?: any;
7
7
  disabled?: boolean;
8
- }) => React.JSX.Element;
8
+ }>;
9
9
  export default TouchableScale;
@@ -1,6 +1,6 @@
1
1
  import React, { useRef } from 'react';
2
2
  import { Animated, Pressable, StyleSheet, Platform } from 'react-native';
3
- const TouchableScale = ({ onPress, style, children, hitSlop, disabled, }) => {
3
+ const TouchableScale = React.memo(function TouchableScale({ onPress, style, children, hitSlop, disabled, }) {
4
4
  if (Platform.OS === 'android') {
5
5
  return (<Pressable disabled={disabled} onPress={onPress} hitSlop={hitSlop} style={({ pressed }) => [
6
6
  style,
@@ -43,5 +43,5 @@ const TouchableScale = ({ onPress, style, children, hitSlop, disabled, }) => {
43
43
  {children}
44
44
  </Animated.View>
45
45
  </Pressable>);
46
- };
46
+ });
47
47
  export default TouchableScale;
@@ -8,8 +8,8 @@ import { ChevronIcon } from './NetworkIcons';
8
8
  import { AppColors } from '../styles/AppColors';
9
9
  import styles from '../styles';
10
10
  const TreeNode = React.memo(function TreeNode({ data, name, level = 0, search, forceOpen, defaultExpandDepth, }) {
11
- const [localOpen, setLocalOpen] = useState(level < (defaultExpandDepth ?? 1));
12
- const open = forceOpen !== undefined ? forceOpen : localOpen;
11
+ const [localOpen, setLocalOpen] = useState(forceOpen || level < (defaultExpandDepth ?? 1));
12
+ const open = localOpen;
13
13
  const isObject = typeof data === 'object' && data !== null;
14
14
  const isArray = Array.isArray(data);
15
15
  function renderHighlighted(text) {
@@ -16,18 +16,7 @@ export const METHOD_COLORS = {
16
16
  PATCH: AppColors.offerPurple,
17
17
  DELETE: AppColors.errorColor,
18
18
  };
19
- export const DOMAIN_COLORS = [
20
- '#1a5276',
21
- '#8e44ad',
22
- '#1e8449',
23
- '#c0392b',
24
- '#d35400',
25
- '#d68910',
26
- '#16a085',
27
- '#27ae60',
28
- '#2c3e50',
29
- '#c2185b',
30
- ];
19
+ export const DOMAIN_COLORS = AppColors.domainColors;
31
20
  export const DURATION_FAST_MS = 200;
32
21
  export const DURATION_SLOW_MS = 800;
33
22
  // Package version — auto-generated from package.json at build time.
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "1.1.14";
1
+ export declare const LIB_VERSION = "1.1.16";
@@ -1,3 +1,3 @@
1
1
  // AUTO-GENERATED FILE — do not edit by hand.
2
2
  // Regenerated from package.json on every build by scripts/gen-version.js.
3
- export const LIB_VERSION = '1.1.14';
3
+ export const LIB_VERSION = '1.1.16';
@@ -24,26 +24,102 @@ const formatArgs = (args) => {
24
24
  })
25
25
  .join(' ');
26
26
  };
27
- const getCallerFromStack = () => {
27
+ // ─── Symbolication Helper for React Native Metro ────────────────────────────
28
+ const symbolicateStack = async (stackString) => {
29
+ if (typeof __DEV__ === 'undefined' || !__DEV__)
30
+ return null;
28
31
  try {
29
- const stack = new Error().stack;
30
- if (!stack)
31
- return 'Unknown';
32
- const lines = stack.split('\n');
32
+ // 1. Try React Native's built-in symbolicateStackTrace if available
33
+ let symModule = null;
34
+ try {
35
+ // @ts-ignore
36
+ symModule = require('react-native/Libraries/Core/Devtools/symbolicateStackTrace');
37
+ }
38
+ catch { }
39
+ const symFn = symModule?.default || symModule;
40
+ if (typeof symFn === 'function') {
41
+ const res = await symFn(stackString);
42
+ if (res && Array.isArray(res.stack)) {
43
+ return res.stack;
44
+ }
45
+ }
46
+ }
47
+ catch { }
48
+ try {
49
+ // 2. Direct HTTP symbolication to Metro packager endpoint
50
+ const metroUrl = 'http://localhost:8081/symbolicate';
51
+ const response = await fetch(metroUrl, {
52
+ method: 'POST',
53
+ headers: { 'Content-Type': 'application/json' },
54
+ body: JSON.stringify({ stack: stackString }),
55
+ });
56
+ if (response.ok) {
57
+ const json = await response.json();
58
+ if (json && Array.isArray(json.stack)) {
59
+ return json.stack;
60
+ }
61
+ }
62
+ }
63
+ catch { }
64
+ return null;
65
+ };
66
+ const getStackDetails = (args) => {
67
+ try {
68
+ let errorStack;
69
+ if (args && args.length > 0) {
70
+ for (const arg of args) {
71
+ if (arg instanceof Error && arg.stack) {
72
+ errorStack = arg.stack;
73
+ break;
74
+ }
75
+ else if (arg &&
76
+ typeof arg === 'object' &&
77
+ typeof arg.stack === 'string') {
78
+ errorStack = arg.stack;
79
+ break;
80
+ }
81
+ }
82
+ }
83
+ const rawStack = new Error().stack;
84
+ const stackToUse = errorStack || rawStack;
85
+ if (!stackToUse)
86
+ return { caller: 'Unknown', errorStack };
87
+ const lines = stackToUse.split('\n');
88
+ let userCaller;
89
+ let fallbackCaller;
33
90
  for (let i = 0; i < lines.length; i++) {
34
91
  const line = lines[i];
35
- // Skip internal console logger stack frames and native helpers
36
- if (line.includes('consoleLogger') ||
92
+ if (!line ||
93
+ line.includes('consoleLogger') ||
37
94
  line.includes('setupConsoleLogger') ||
38
- line.includes('node_modules') ||
39
- line.includes('Error')) {
95
+ line.includes('react-native-inapp-inspector') ||
96
+ line.trim() === 'Error') {
40
97
  continue;
41
98
  }
42
- return line.trim().replace(/^at /, '');
99
+ const isInternal = line.includes('react-native/Libraries') ||
100
+ line.includes('setUpConsole') ||
101
+ line.includes('ExceptionsManager') ||
102
+ line.includes('MessageQueue') ||
103
+ line.includes('metro-runtime') ||
104
+ line.includes('regenerator-runtime');
105
+ if (!fallbackCaller && !line.includes('setUpConsole')) {
106
+ fallbackCaller = line.trim().replace(/^at /, '');
107
+ }
108
+ if (!isInternal) {
109
+ userCaller = line.trim().replace(/^at /, '');
110
+ break;
111
+ }
43
112
  }
113
+ const cleanedStack = lines
114
+ .filter(l => !l.includes('consoleLogger') &&
115
+ !l.includes('setupConsoleLogger'))
116
+ .join('\n');
117
+ const caller = userCaller || fallbackCaller || 'Unknown';
118
+ return { caller, stack: cleanedStack || stackToUse, errorStack, stackToUse };
119
+ }
120
+ catch (e) {
121
+ return { caller: 'Unknown' };
44
122
  }
45
- catch (e) { }
46
- return 'Unknown';
47
123
  };
48
124
  const notify = () => {
49
125
  const snapshot = [...logs];
@@ -68,18 +144,66 @@ const addLog = (type, args, sourceMethod) => {
68
144
  message.toLowerCase().trim().includes(prefix.toLowerCase().trim()))) {
69
145
  return;
70
146
  }
71
- const caller = getCallerFromStack();
147
+ const { caller, stack, errorStack, stackToUse } = getStackDetails(args);
72
148
  const newLog = {
73
149
  id: counter++,
74
150
  type,
75
151
  message,
76
152
  timestamp: Date.now(),
77
153
  caller,
154
+ stack,
155
+ errorStack,
156
+ rawArgs: args,
78
157
  sourceMethod,
79
158
  };
80
159
  logs.unshift(newLog);
81
160
  logs = logs.slice(0, MAX_LOGS);
82
161
  notify();
162
+ // Asynchronously symbolicate stack trace using Metro in DEV mode
163
+ if (stackToUse && typeof __DEV__ !== 'undefined' && __DEV__) {
164
+ const currentLogId = newLog.id;
165
+ symbolicateStack(stackToUse)
166
+ .then(symFrames => {
167
+ if (symFrames && Array.isArray(symFrames) && symFrames.length > 0) {
168
+ const symLines = [];
169
+ let symUserCaller;
170
+ for (const frame of symFrames) {
171
+ const file = (frame.file || '').replace(/^webpack:\/\/\/?/, '');
172
+ const method = frame.methodName || '<anonymous>';
173
+ const line = frame.lineNumber != null ? `:${frame.lineNumber}` : '';
174
+ const col = frame.column != null ? `:${frame.column}` : '';
175
+ const lineStr = `at ${method} (${file}${line}${col})`;
176
+ symLines.push(lineStr);
177
+ const isUserFile = file &&
178
+ !file.includes('node_modules') &&
179
+ !file.includes('react-native/') &&
180
+ !file.includes('consoleLogger') &&
181
+ !file.includes('setupConsoleLogger') &&
182
+ (file.endsWith('.tsx') ||
183
+ file.endsWith('.jsx') ||
184
+ file.endsWith('.ts') ||
185
+ file.endsWith('.js'));
186
+ if (!symUserCaller && isUserFile) {
187
+ symUserCaller = `${method} (${file}${line}${col})`;
188
+ }
189
+ }
190
+ const targetLog = logs.find(l => l.id === currentLogId);
191
+ if (targetLog) {
192
+ if (symUserCaller) {
193
+ targetLog.caller = symUserCaller;
194
+ }
195
+ else if (symLines.length > 0) {
196
+ targetLog.caller = symLines[0].replace(/^at /, '');
197
+ }
198
+ if (symLines.length > 0) {
199
+ targetLog.stack = symLines.join('\n');
200
+ }
201
+ notify();
202
+ }
203
+ }
204
+ })
205
+ .catch(() => { });
206
+ }
83
207
  }
84
208
  catch (e) {
85
209
  // Fail-safe to prevent crash during logging
@@ -1,4 +1,3 @@
1
- import "./webViewLogger";
2
1
  type NetworkLog = {
3
2
  id: number;
4
3
  url: string;
@@ -1,4 +1,3 @@
1
- import "./webViewLogger";
2
1
  import axios from "axios";
3
2
  let logs = [];
4
3
  let listeners = [];
@@ -1,12 +1,5 @@
1
- export interface ReduxHistoryEntry {
2
- id: number;
3
- type: string;
4
- payload: any;
5
- timestamp: string;
6
- affectedSlices: string[];
7
- prevState?: any;
8
- nextState?: any;
9
- }
1
+ import { ReduxHistoryEntry } from '../types';
2
+ export { ReduxHistoryEntry };
10
3
  export declare const getReduxState: () => any;
11
4
  export declare const setReduxAutoRefresh: (val: boolean) => void;
12
5
  export declare const getReduxAutoRefresh: () => boolean;
@@ -0,0 +1,39 @@
1
+ export declare enum InspectorTab {
2
+ APIs = "apis",
3
+ Logs = "logs",
4
+ Analytics = "analytics",
5
+ Redux = "redux"
6
+ }
7
+ export declare enum ApiDetailTab {
8
+ Response = "response",
9
+ Request = "request",
10
+ Headers = "headers",
11
+ Metadata = "metadata"
12
+ }
13
+ export declare enum JsonViewerMode {
14
+ Pretty = "pretty",
15
+ Raw = "raw",
16
+ Table = "table"
17
+ }
18
+ export declare enum ReduxSubTab {
19
+ State = "state",
20
+ Timeline = "timeline"
21
+ }
22
+ export declare enum ReduxActionSubTab {
23
+ Payload = "payload",
24
+ Diff = "diff",
25
+ State = "state"
26
+ }
27
+ export declare enum ConsoleLogLevel {
28
+ Info = "info",
29
+ Warn = "warn",
30
+ Error = "error"
31
+ }
32
+ export declare enum SortOrderEnum {
33
+ Newest = "newest",
34
+ Oldest = "oldest"
35
+ }
36
+ export declare enum AnalyticsSource {
37
+ Firebase = "firebase",
38
+ Manual = "manual"
39
+ }