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,1476 @@
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
+ const react_1 = __importDefault(require("react"));
40
+ const react_native_1 = require("react-native");
41
+ const react_native_svg_1 = __importStar(require("react-native-svg"));
42
+ const react_native_linear_gradient_1 = __importDefault(require("react-native-linear-gradient"));
43
+ const InspectorContext_1 = require("./InspectorContext");
44
+ const TouchableScale_1 = __importDefault(require("../TouchableScale"));
45
+ const styles_1 = __importStar(require("../../styles"));
46
+ const AppColors_1 = require("../../styles/AppColors");
47
+ const AppFonts_1 = require("../../styles/AppFonts");
48
+ const constants_1 = require("../../constants");
49
+ const settingsStore_1 = require("../../helpers/settingsStore");
50
+ const networkLogger_1 = require("../../customHooks/networkLogger");
51
+ const consoleLogger_1 = require("../../customHooks/consoleLogger");
52
+ const analyticsLogger_1 = require("../../customHooks/analyticsLogger");
53
+ const NetworkIcons_1 = require("../NetworkIcons");
54
+ const SettingsPanel = () => {
55
+ const { settingsPage, setSettingsPage, settingsActiveSubTab, setSettingsActiveSubTab, tabVisibility, toggleTabVisibility, defaultTab, setDefaultTab, isDark, setIsDark, modalHeightPercent, setModalHeightPercent, modalAnimationType, setModalAnimationType, showDuplicateLogs, setShowDuplicateLogs, showConsoleLevels, setShowConsoleLevels, resetToDefaults, storage, logs, consoleLogs, analyticsEvents, reduxState, maxNetworkLogs, setMaxNetworkLogs, maxConsoleLogs, setMaxConsoleLogs, reduxAutoRefresh, setReduxAutoRefreshState, reduxExpandDepth, setReduxExpandDepth, switchActiveTab, setSelected, setSelectedEvent, setReduxState, } = (0, InspectorContext_1.useInspector)();
56
+ const headerTopPadding = react_native_1.Platform.OS === 'ios' && modalHeightPercent >= 95 ? 44 : 0;
57
+ if (settingsPage === 'main') {
58
+ const settingsTabs = [
59
+ { key: 'apis', label: 'APIs', icon: 'apis' },
60
+ { key: 'logs', label: 'Logs', icon: 'logs' },
61
+ { key: 'analytics', label: 'Analytics', icon: 'analytics' },
62
+ { key: 'redux', label: 'Redux', icon: 'redux' },
63
+ ];
64
+ return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
65
+ {/* Settings Header with back button */}
66
+ <react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.purple, AppColors_1.AppColors.brandPurple]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }} style={styles_1.default.headerGradient}>
67
+ <react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
68
+ <react_native_1.View style={[styles_1.default.header, { paddingHorizontal: 16, gap: 12 }]}>
69
+ <TouchableScale_1.default onPress={() => {
70
+ (0, InspectorContext_1.animateNextLayout)();
71
+ setSettingsPage(null);
72
+ switchActiveTab('apis');
73
+ }} hitSlop={12} style={{
74
+ padding: 8,
75
+ borderRadius: 10,
76
+ backgroundColor: `${AppColors_1.AppColors.white}26`,
77
+ borderWidth: 1,
78
+ borderColor: `${AppColors_1.AppColors.white}14`,
79
+ }}>
80
+ <NetworkIcons_1.WhiteBackNavigation color={AppColors_1.AppColors.white} size={16}/>
81
+ </TouchableScale_1.default>
82
+ <react_native_1.View style={{ flex: 1 }}>
83
+ <react_native_1.Text style={{
84
+ fontFamily: AppFonts_1.AppFonts.interBold,
85
+ fontSize: 17,
86
+ color: AppColors_1.AppColors.white,
87
+ }}>
88
+ Settings
89
+ </react_native_1.Text>
90
+ <react_native_1.Text style={{
91
+ fontFamily: AppFonts_1.AppFonts.interRegular,
92
+ fontSize: 11,
93
+ color: `${AppColors_1.AppColors.white}BF`,
94
+ marginTop: 1,
95
+ }}>
96
+ Manage modules and preferences
97
+ </react_native_1.Text>
98
+ </react_native_1.View>
99
+ <react_native_1.View style={{
100
+ backgroundColor: `${AppColors_1.AppColors.white}26`,
101
+ paddingHorizontal: 8,
102
+ paddingVertical: 4,
103
+ borderRadius: 8,
104
+ borderWidth: 1,
105
+ borderColor: `${AppColors_1.AppColors.white}1A`,
106
+ }}>
107
+ <react_native_1.Text style={{
108
+ fontFamily: AppFonts_1.AppFonts.interBold,
109
+ fontSize: 10.5,
110
+ color: AppColors_1.AppColors.white,
111
+ }}>
112
+ v{constants_1.LIB_VERSION}
113
+ </react_native_1.Text>
114
+ </react_native_1.View>
115
+ </react_native_1.View>
116
+ </react_native_1.View>
117
+ </react_native_linear_gradient_1.default>
118
+
119
+ <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16, gap: 12 }}>
120
+ {/* Sub Tabs */}
121
+ <react_native_1.View style={{
122
+ flexDirection: 'row',
123
+ backgroundColor: AppColors_1.AppColors.primaryLight,
124
+ borderRadius: 10,
125
+ padding: 3,
126
+ borderWidth: 1,
127
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
128
+ marginBottom: 4,
129
+ }}>
130
+ <react_native_1.TouchableOpacity onPress={() => {
131
+ (0, InspectorContext_1.animateNextLayout)();
132
+ setSettingsActiveSubTab('module');
133
+ }} style={{
134
+ flex: 1,
135
+ paddingVertical: 8,
136
+ alignItems: 'center',
137
+ justifyContent: 'center',
138
+ borderRadius: 8,
139
+ backgroundColor: settingsActiveSubTab === 'module'
140
+ ? AppColors_1.AppColors.purple
141
+ : 'transparent',
142
+ }}>
143
+ <react_native_1.Text style={{
144
+ fontFamily: AppFonts_1.AppFonts.interBold,
145
+ fontSize: 12,
146
+ color: settingsActiveSubTab === 'module'
147
+ ? AppColors_1.AppColors.white
148
+ : AppColors_1.AppColors.grayText,
149
+ }}>
150
+ Module
151
+ </react_native_1.Text>
152
+ </react_native_1.TouchableOpacity>
153
+ <react_native_1.TouchableOpacity onPress={() => {
154
+ (0, InspectorContext_1.animateNextLayout)();
155
+ setSettingsActiveSubTab('ui');
156
+ }} style={{
157
+ flex: 1,
158
+ paddingVertical: 8,
159
+ alignItems: 'center',
160
+ justifyContent: 'center',
161
+ borderRadius: 8,
162
+ backgroundColor: settingsActiveSubTab === 'ui'
163
+ ? AppColors_1.AppColors.purple
164
+ : 'transparent',
165
+ }}>
166
+ <react_native_1.Text style={{
167
+ fontFamily: AppFonts_1.AppFonts.interBold,
168
+ fontSize: 12,
169
+ color: settingsActiveSubTab === 'ui'
170
+ ? AppColors_1.AppColors.white
171
+ : AppColors_1.AppColors.grayText,
172
+ }}>
173
+ UI Preferences
174
+ </react_native_1.Text>
175
+ </react_native_1.TouchableOpacity>
176
+ </react_native_1.View>
177
+
178
+ {settingsActiveSubTab === 'module' ? (
179
+ /* Tab list */
180
+ <react_native_1.View style={{
181
+ backgroundColor: AppColors_1.AppColors.primaryLight,
182
+ borderRadius: 12,
183
+ borderWidth: 1,
184
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
185
+ overflow: 'hidden',
186
+ }}>
187
+ {/* Table Header */}
188
+ <react_native_1.View style={{
189
+ flexDirection: 'row',
190
+ alignItems: 'center',
191
+ paddingVertical: 8,
192
+ paddingHorizontal: 14,
193
+ backgroundColor: AppColors_1.AppColors.grayBackground,
194
+ borderBottomWidth: 1,
195
+ borderBottomColor: AppColors_1.AppColors.dividerColor,
196
+ gap: 12,
197
+ }}>
198
+ <react_native_1.Text style={{
199
+ fontFamily: AppFonts_1.AppFonts.interBold,
200
+ fontSize: 10,
201
+ color: AppColors_1.AppColors.grayTextWeak,
202
+ letterSpacing: 0.6,
203
+ flex: 1,
204
+ }}>
205
+ MODULE
206
+ </react_native_1.Text>
207
+ <react_native_1.Text style={{
208
+ fontFamily: AppFonts_1.AppFonts.interBold,
209
+ fontSize: 10,
210
+ color: AppColors_1.AppColors.grayTextWeak,
211
+ letterSpacing: 0.6,
212
+ width: 90,
213
+ textAlign: 'right',
214
+ paddingRight: 4,
215
+ }}>
216
+ VISIBILITY
217
+ </react_native_1.Text>
218
+ </react_native_1.View>
219
+
220
+ {settingsTabs.map((tab, idx) => {
221
+ const isVisible = tab.key === 'apis' || tabVisibility?.[tab.key];
222
+ const isLast = idx === settingsTabs.length - 1;
223
+ const isLocked = tab.key === 'apis';
224
+ return (<react_native_1.View key={tab.key} style={{
225
+ flexDirection: 'row',
226
+ alignItems: 'center',
227
+ paddingVertical: 10,
228
+ paddingHorizontal: 14,
229
+ borderBottomWidth: isLast ? 0 : 1,
230
+ borderBottomColor: AppColors_1.AppColors.dividerColor,
231
+ gap: 12,
232
+ }}>
233
+ {/* Icon + Label — fills remaining space */}
234
+ <react_native_1.View style={{
235
+ flex: 1,
236
+ flexDirection: 'row',
237
+ alignItems: 'center',
238
+ gap: 8,
239
+ }}>
240
+ {/* Small icon tile */}
241
+ <react_native_1.View style={{
242
+ width: 20,
243
+ height: 20,
244
+ borderRadius: 6,
245
+ backgroundColor: isLocked
246
+ ? AppColors_1.AppColors.grayBorderSecondary
247
+ : AppColors_1.AppColors.purpleShade50,
248
+ borderWidth: 1,
249
+ borderColor: isLocked
250
+ ? AppColors_1.AppColors.dividerColor
251
+ : `${AppColors_1.AppColors.purple}33`,
252
+ alignItems: 'center',
253
+ justifyContent: 'center',
254
+ }}>
255
+ {tab.icon === 'apis' && (<NetworkIcons_1.SignalIcon color={isLocked
256
+ ? AppColors_1.AppColors.grayTextWeak
257
+ : AppColors_1.AppColors.purple} size={11}/>)}
258
+ {tab.icon === 'logs' && (<NetworkIcons_1.TerminalIcon color={isLocked
259
+ ? AppColors_1.AppColors.grayTextWeak
260
+ : AppColors_1.AppColors.purple} size={11}/>)}
261
+ {tab.icon === 'analytics' && (<NetworkIcons_1.AnalyticsIcon color={isLocked
262
+ ? AppColors_1.AppColors.grayTextWeak
263
+ : AppColors_1.AppColors.purple} size={11}/>)}
264
+ {tab.icon === 'redux' && (<NetworkIcons_1.TerminalIcon color={isLocked
265
+ ? AppColors_1.AppColors.grayTextWeak
266
+ : AppColors_1.AppColors.purple} size={11}/>)}
267
+ </react_native_1.View>
268
+ {/* Label + Required badge */}
269
+ <react_native_1.Text style={{
270
+ fontFamily: AppFonts_1.AppFonts.interBold,
271
+ fontSize: 13,
272
+ color: isLocked
273
+ ? AppColors_1.AppColors.grayText
274
+ : AppColors_1.AppColors.primaryBlack,
275
+ }}>
276
+ {tab.label}
277
+ </react_native_1.Text>
278
+ {/* #6 — badge marks the configured default tab */}
279
+ {tab.key === defaultTab && (<react_native_1.View style={{
280
+ flexDirection: 'row',
281
+ alignItems: 'center',
282
+ backgroundColor: `${AppColors_1.AppColors.purple}14`,
283
+ borderRadius: 20,
284
+ paddingHorizontal: 6,
285
+ paddingVertical: 2,
286
+ borderWidth: 1,
287
+ borderColor: `${AppColors_1.AppColors.purple}2E`,
288
+ gap: 3,
289
+ }}>
290
+ <react_native_1.View style={{
291
+ width: 4,
292
+ height: 4,
293
+ borderRadius: 2,
294
+ backgroundColor: AppColors_1.AppColors.purple,
295
+ opacity: 0.7,
296
+ }}/>
297
+ <react_native_1.Text style={{
298
+ fontFamily: AppFonts_1.AppFonts.interBold,
299
+ fontSize: 8.5,
300
+ color: AppColors_1.AppColors.purple,
301
+ letterSpacing: 0.4,
302
+ }}>
303
+ DEFAULT
304
+ </react_native_1.Text>
305
+ </react_native_1.View>)}
306
+
307
+ {/* Settings gear icon next to label */}
308
+ <TouchableScale_1.default onPress={() => {
309
+ (0, InspectorContext_1.animateNextLayout)();
310
+ setSettingsPage(tab.key);
311
+ }} hitSlop={8} style={{
312
+ marginLeft: 4,
313
+ padding: 4,
314
+ borderRadius: 6,
315
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
316
+ borderWidth: 1,
317
+ borderColor: `${AppColors_1.AppColors.purple}26`,
318
+ alignItems: 'center',
319
+ justifyContent: 'center',
320
+ }}>
321
+ <NetworkIcons_1.SettingsIcon color={AppColors_1.AppColors.purple} size={10}/>
322
+ </TouchableScale_1.default>
323
+ </react_native_1.View>
324
+
325
+ {/* Visibility Switch in VISIBILITY column */}
326
+ <react_native_1.View style={{
327
+ width: 90,
328
+ alignItems: 'flex-end',
329
+ justifyContent: 'center',
330
+ }}>
331
+ <TouchableScale_1.default disabled={isLocked} onPress={() => toggleTabVisibility(tab.key)} style={{
332
+ width: 38,
333
+ height: 22,
334
+ borderRadius: 11,
335
+ backgroundColor: isLocked
336
+ ? AppColors_1.AppColors.grayBackground
337
+ : isVisible
338
+ ? AppColors_1.AppColors.purple
339
+ : AppColors_1.AppColors.grayBorderSecondary,
340
+ borderWidth: isLocked ? 1.5 : 0,
341
+ borderColor: isLocked
342
+ ? AppColors_1.AppColors.grayBorderSecondary
343
+ : 'transparent',
344
+ borderStyle: isLocked ? 'dashed' : 'solid',
345
+ padding: 2,
346
+ justifyContent: 'center',
347
+ alignItems: isVisible ? 'flex-end' : 'flex-start',
348
+ opacity: isLocked ? 0.9 : 1,
349
+ }}>
350
+ <react_native_1.View style={{
351
+ width: 18,
352
+ height: 18,
353
+ borderRadius: 9,
354
+ backgroundColor: isLocked
355
+ ? AppColors_1.AppColors.grayBorderSecondary
356
+ : AppColors_1.AppColors.white,
357
+ alignItems: 'center',
358
+ justifyContent: 'center',
359
+ shadowColor: AppColors_1.AppColors.black,
360
+ shadowOpacity: isLocked ? 0 : 0.15,
361
+ shadowRadius: 1.5,
362
+ shadowOffset: { width: 0, height: 1 },
363
+ }}>
364
+ {isLocked && (<react_native_svg_1.default width={10} height={10} viewBox="0 0 24 24" fill="none">
365
+ <react_native_svg_1.Path d="M7 10V7a5 5 0 0 1 10 0v3" stroke={AppColors_1.AppColors.grayText} strokeWidth="2.2" strokeLinecap="round"/>
366
+ <react_native_svg_1.Path d="M5 10h14v9a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1z" fill={AppColors_1.AppColors.grayText}/>
367
+ </react_native_svg_1.default>)}
368
+ </react_native_1.View>
369
+ </TouchableScale_1.default>
370
+ {isLocked && (<react_native_1.Text style={{
371
+ fontFamily: AppFonts_1.AppFonts.interBold,
372
+ fontSize: 8,
373
+ color: AppColors_1.AppColors.grayTextWeak,
374
+ letterSpacing: 0.4,
375
+ marginTop: 3,
376
+ }}>
377
+ REQUIRED
378
+ </react_native_1.Text>)}
379
+ </react_native_1.View>
380
+ </react_native_1.View>);
381
+ })}
382
+ </react_native_1.View>) : (
383
+ /* UI Preferences Section */
384
+ <react_native_1.View style={{
385
+ backgroundColor: AppColors_1.AppColors.primaryLight,
386
+ borderRadius: 12,
387
+ borderWidth: 1,
388
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
389
+ overflow: 'hidden',
390
+ }}>
391
+ <react_native_1.View style={{
392
+ flexDirection: 'row',
393
+ alignItems: 'center',
394
+ paddingVertical: 12,
395
+ paddingHorizontal: 14,
396
+ gap: 12,
397
+ }}>
398
+ {/* Icon + Label */}
399
+ <react_native_1.View style={{
400
+ flex: 1,
401
+ flexDirection: 'row',
402
+ alignItems: 'center',
403
+ gap: 8,
404
+ }}>
405
+ <react_native_1.View style={{
406
+ width: 20,
407
+ height: 20,
408
+ borderRadius: 6,
409
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
410
+ borderWidth: 1,
411
+ borderColor: `${AppColors_1.AppColors.purple}33`,
412
+ alignItems: 'center',
413
+ justifyContent: 'center',
414
+ }}>
415
+ {isDark ? (<NetworkIcons_1.SunIcon color={AppColors_1.AppColors.purple} size={11}/>) : (<NetworkIcons_1.MoonIcon color={AppColors_1.AppColors.purple} size={11}/>)}
416
+ </react_native_1.View>
417
+ <react_native_1.View style={{ flex: 1 }}>
418
+ <react_native_1.Text style={{
419
+ fontFamily: AppFonts_1.AppFonts.interBold,
420
+ fontSize: 13,
421
+ color: AppColors_1.AppColors.primaryBlack,
422
+ }}>
423
+ Dark Theme
424
+ </react_native_1.Text>
425
+ </react_native_1.View>
426
+ </react_native_1.View>
427
+
428
+ {/* Toggle Switch */}
429
+ <TouchableScale_1.default onPress={() => {
430
+ const newTheme = !isDark;
431
+ setIsDark(newTheme);
432
+ (0, styles_1.toggleGlobalTheme)(newTheme);
433
+ }} style={{
434
+ width: 38,
435
+ height: 22,
436
+ borderRadius: 11,
437
+ backgroundColor: isDark
438
+ ? AppColors_1.AppColors.purple
439
+ : AppColors_1.AppColors.grayBorderSecondary,
440
+ padding: 2,
441
+ justifyContent: 'center',
442
+ alignItems: isDark ? 'flex-end' : 'flex-start',
443
+ }}>
444
+ <react_native_1.View style={{
445
+ width: 18,
446
+ height: 18,
447
+ borderRadius: 9,
448
+ backgroundColor: AppColors_1.AppColors.white,
449
+ shadowColor: AppColors_1.AppColors.black,
450
+ shadowOpacity: 0.15,
451
+ shadowRadius: 1.5,
452
+ shadowOffset: { width: 0, height: 1 },
453
+ }}/>
454
+ </TouchableScale_1.default>
455
+ </react_native_1.View>
456
+
457
+ {/* Divider */}
458
+ <react_native_1.View style={{
459
+ height: 1,
460
+ backgroundColor: AppColors_1.AppColors.dividerColor,
461
+ }}/>
462
+
463
+ {/* Modal Height */}
464
+ <react_native_1.View style={{
465
+ paddingVertical: 12,
466
+ paddingHorizontal: 14,
467
+ }}>
468
+ <react_native_1.View style={{
469
+ flexDirection: 'row',
470
+ alignItems: 'center',
471
+ gap: 8,
472
+ }}>
473
+ <react_native_1.View style={{
474
+ width: 20,
475
+ height: 20,
476
+ borderRadius: 6,
477
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
478
+ borderWidth: 1,
479
+ borderColor: `${AppColors_1.AppColors.purple}33`,
480
+ alignItems: 'center',
481
+ justifyContent: 'center',
482
+ }}>
483
+ <NetworkIcons_1.ScreenIcon color={AppColors_1.AppColors.purple} size={11}/>
484
+ </react_native_1.View>
485
+ <react_native_1.View style={{ flex: 1 }}>
486
+ <react_native_1.Text style={{
487
+ fontFamily: AppFonts_1.AppFonts.interBold,
488
+ fontSize: 13,
489
+ color: AppColors_1.AppColors.primaryBlack,
490
+ }}>
491
+ Modal Height
492
+ </react_native_1.Text>
493
+ <react_native_1.Text style={{
494
+ fontFamily: AppFonts_1.AppFonts.interRegular,
495
+ fontSize: 11,
496
+ color: AppColors_1.AppColors.grayText,
497
+ marginTop: 1,
498
+ }}>
499
+ Height of the inspector panel relative to the screen
500
+ </react_native_1.Text>
501
+ </react_native_1.View>
502
+ </react_native_1.View>
503
+
504
+ {/* Segmented picker */}
505
+ <react_native_1.View style={{
506
+ flexDirection: 'row',
507
+ backgroundColor: AppColors_1.AppColors.grayBackground,
508
+ borderRadius: 8,
509
+ padding: 2.5,
510
+ marginTop: 10,
511
+ borderWidth: 1,
512
+ borderColor: AppColors_1.AppColors.dividerColor,
513
+ }}>
514
+ {[50, 70, 90, 100].map(opt => {
515
+ const isActive = modalHeightPercent === opt;
516
+ return (<TouchableScale_1.default key={opt} onPress={() => setModalHeightPercent(opt)} style={{
517
+ flex: 1,
518
+ paddingVertical: 6,
519
+ alignItems: 'center',
520
+ borderRadius: 6,
521
+ backgroundColor: isActive
522
+ ? AppColors_1.AppColors.purple
523
+ : 'transparent',
524
+ }}>
525
+ <react_native_1.Text style={{
526
+ fontFamily: AppFonts_1.AppFonts.interBold,
527
+ fontSize: 11,
528
+ color: isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayText,
529
+ }}>
530
+ {opt}%
531
+ </react_native_1.Text>
532
+ </TouchableScale_1.default>);
533
+ })}
534
+ </react_native_1.View>
535
+ </react_native_1.View>
536
+
537
+ {/* Divider */}
538
+ <react_native_1.View style={{
539
+ height: 1,
540
+ backgroundColor: AppColors_1.AppColors.dividerColor,
541
+ }}/>
542
+
543
+ {/* Modal Animation */}
544
+ <react_native_1.View style={{
545
+ paddingVertical: 12,
546
+ paddingHorizontal: 14,
547
+ }}>
548
+ <react_native_1.View style={{
549
+ flexDirection: 'row',
550
+ alignItems: 'center',
551
+ gap: 8,
552
+ }}>
553
+ <react_native_1.View style={{
554
+ width: 20,
555
+ height: 20,
556
+ borderRadius: 6,
557
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
558
+ borderWidth: 1,
559
+ borderColor: `${AppColors_1.AppColors.purple}33`,
560
+ alignItems: 'center',
561
+ justifyContent: 'center',
562
+ }}>
563
+ <NetworkIcons_1.MotionIcon color={AppColors_1.AppColors.purple} size={11}/>
564
+ </react_native_1.View>
565
+ <react_native_1.View style={{ flex: 1 }}>
566
+ <react_native_1.Text style={{
567
+ fontFamily: AppFonts_1.AppFonts.interBold,
568
+ fontSize: 13,
569
+ color: AppColors_1.AppColors.primaryBlack,
570
+ }}>
571
+ Modal Animation
572
+ </react_native_1.Text>
573
+ <react_native_1.Text style={{
574
+ fontFamily: AppFonts_1.AppFonts.interRegular,
575
+ fontSize: 11,
576
+ color: AppColors_1.AppColors.grayText,
577
+ marginTop: 1,
578
+ }}>
579
+ How the inspector panel enters and exits the screen
580
+ </react_native_1.Text>
581
+ </react_native_1.View>
582
+ </react_native_1.View>
583
+
584
+ {/* Segmented picker */}
585
+ <react_native_1.View style={{
586
+ flexDirection: 'row',
587
+ backgroundColor: AppColors_1.AppColors.grayBackground,
588
+ borderRadius: 8,
589
+ padding: 2.5,
590
+ marginTop: 10,
591
+ borderWidth: 1,
592
+ borderColor: AppColors_1.AppColors.dividerColor,
593
+ }}>
594
+ {([
595
+ { key: 'slide', label: 'Slide Up' },
596
+ { key: 'fade', label: 'Fade' },
597
+ { key: 'none', label: 'None' },
598
+ ]).map(opt => {
599
+ const isActive = modalAnimationType === opt.key;
600
+ return (<TouchableScale_1.default key={opt.key} onPress={() => setModalAnimationType(opt.key)} style={{
601
+ flex: 1,
602
+ paddingVertical: 6,
603
+ alignItems: 'center',
604
+ borderRadius: 6,
605
+ backgroundColor: isActive
606
+ ? AppColors_1.AppColors.purple
607
+ : 'transparent',
608
+ }}>
609
+ <react_native_1.Text style={{
610
+ fontFamily: AppFonts_1.AppFonts.interBold,
611
+ fontSize: 11,
612
+ color: isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayText,
613
+ }}>
614
+ {opt.label}
615
+ </react_native_1.Text>
616
+ </TouchableScale_1.default>);
617
+ })}
618
+ </react_native_1.View>
619
+ </react_native_1.View>
620
+
621
+ {/* Divider */}
622
+ <react_native_1.View style={{
623
+ height: 1,
624
+ backgroundColor: AppColors_1.AppColors.dividerColor,
625
+ }}/>
626
+
627
+ {/* #6 — Default Tab */}
628
+ <react_native_1.View style={{
629
+ paddingVertical: 12,
630
+ paddingHorizontal: 14,
631
+ }}>
632
+ <react_native_1.View style={{
633
+ flexDirection: 'row',
634
+ alignItems: 'center',
635
+ gap: 8,
636
+ }}>
637
+ <react_native_1.View style={{
638
+ width: 20,
639
+ height: 20,
640
+ borderRadius: 6,
641
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
642
+ borderWidth: 1,
643
+ borderColor: `${AppColors_1.AppColors.purple}33`,
644
+ alignItems: 'center',
645
+ justifyContent: 'center',
646
+ }}>
647
+ <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={11}/>
648
+ </react_native_1.View>
649
+ <react_native_1.View style={{ flex: 1 }}>
650
+ <react_native_1.Text style={{
651
+ fontFamily: AppFonts_1.AppFonts.interBold,
652
+ fontSize: 13,
653
+ color: AppColors_1.AppColors.primaryBlack,
654
+ }}>
655
+ Default Tab
656
+ </react_native_1.Text>
657
+ <react_native_1.Text style={{
658
+ fontFamily: AppFonts_1.AppFonts.interRegular,
659
+ fontSize: 11,
660
+ color: AppColors_1.AppColors.grayText,
661
+ marginTop: 1,
662
+ }}>
663
+ Tab shown when the inspector opens
664
+ </react_native_1.Text>
665
+ </react_native_1.View>
666
+ </react_native_1.View>
667
+
668
+ {/* Grid of Default Tab Cards */}
669
+ <react_native_1.View style={{
670
+ flexDirection: 'row',
671
+ flexWrap: 'wrap',
672
+ gap: 8,
673
+ marginTop: 12,
674
+ }}>
675
+ {settingsTabs
676
+ .filter(tab => tab.key === 'apis' || tabVisibility?.[tab.key])
677
+ .map(tab => {
678
+ const isActive = defaultTab === tab.key;
679
+ return (<TouchableScale_1.default key={tab.key} onPress={() => setDefaultTab(tab.key)} style={{
680
+ flexDirection: 'row',
681
+ alignItems: 'center',
682
+ gap: 8,
683
+ paddingVertical: 10,
684
+ paddingHorizontal: 12,
685
+ borderRadius: 10,
686
+ borderWidth: 1.5,
687
+ borderColor: isActive ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayBorderSecondary,
688
+ backgroundColor: isActive ? `${AppColors_1.AppColors.purple}0F` : AppColors_1.AppColors.primaryLight,
689
+ minWidth: '47%',
690
+ flex: 1,
691
+ }}>
692
+ <react_native_1.View style={{
693
+ width: 22,
694
+ height: 22,
695
+ borderRadius: 6,
696
+ backgroundColor: isActive ? AppColors_1.AppColors.purple : AppColors_1.AppColors.purpleShade50,
697
+ alignItems: 'center',
698
+ justifyContent: 'center',
699
+ }}>
700
+ {tab.icon === 'apis' && (<NetworkIcons_1.SignalIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
701
+ {tab.icon === 'logs' && (<NetworkIcons_1.TerminalIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
702
+ {tab.icon === 'analytics' && (<NetworkIcons_1.AnalyticsIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
703
+ {tab.icon === 'redux' && (<NetworkIcons_1.TerminalIcon color={isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple} size={11}/>)}
704
+ </react_native_1.View>
705
+ <react_native_1.Text style={{
706
+ fontFamily: AppFonts_1.AppFonts.interBold,
707
+ fontSize: 13,
708
+ color: isActive ? AppColors_1.AppColors.purple : AppColors_1.AppColors.primaryBlack,
709
+ flex: 1,
710
+ }}>
711
+ {tab.label}
712
+ </react_native_1.Text>
713
+ {isActive && (<react_native_1.View style={{
714
+ width: 14,
715
+ height: 14,
716
+ borderRadius: 7,
717
+ backgroundColor: AppColors_1.AppColors.purple,
718
+ alignItems: 'center',
719
+ justifyContent: 'center',
720
+ }}>
721
+ <NetworkIcons_1.CheckIcon size={8} color={AppColors_1.AppColors.white}/>
722
+ </react_native_1.View>)}
723
+ </TouchableScale_1.default>);
724
+ })}
725
+ </react_native_1.View>
726
+ </react_native_1.View>
727
+
728
+ {/* Divider */}
729
+ <react_native_1.View style={{
730
+ height: 1,
731
+ backgroundColor: AppColors_1.AppColors.dividerColor,
732
+ }}/>
733
+
734
+ {/* #9 — Show Duplicate Logs */}
735
+ <react_native_1.View style={{
736
+ flexDirection: 'row',
737
+ alignItems: 'center',
738
+ paddingVertical: 12,
739
+ paddingHorizontal: 14,
740
+ gap: 12,
741
+ }}>
742
+ <react_native_1.View style={{
743
+ flex: 1,
744
+ flexDirection: 'row',
745
+ alignItems: 'center',
746
+ gap: 8,
747
+ }}>
748
+ <react_native_1.View style={{
749
+ width: 20,
750
+ height: 20,
751
+ borderRadius: 6,
752
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
753
+ borderWidth: 1,
754
+ borderColor: `${AppColors_1.AppColors.purple}33`,
755
+ alignItems: 'center',
756
+ justifyContent: 'center',
757
+ }}>
758
+ <NetworkIcons_1.EyeIcon color={AppColors_1.AppColors.purple} size={11}/>
759
+ </react_native_1.View>
760
+ <react_native_1.View style={{ flex: 1 }}>
761
+ <react_native_1.Text style={{
762
+ fontFamily: AppFonts_1.AppFonts.interBold,
763
+ fontSize: 13,
764
+ color: AppColors_1.AppColors.primaryBlack,
765
+ }}>
766
+ Show Duplicate Logs
767
+ </react_native_1.Text>
768
+ <react_native_1.Text style={{
769
+ fontFamily: AppFonts_1.AppFonts.interRegular,
770
+ fontSize: 11,
771
+ color: AppColors_1.AppColors.grayText,
772
+ marginTop: 1,
773
+ }}>
774
+ Off: repeated identical entries collapse into one row
775
+ with a ×N count
776
+ </react_native_1.Text>
777
+ </react_native_1.View>
778
+ </react_native_1.View>
779
+
780
+ {/* Toggle Switch */}
781
+ <TouchableScale_1.default onPress={() => setShowDuplicateLogs(prev => !prev)} style={{
782
+ width: 38,
783
+ height: 22,
784
+ borderRadius: 11,
785
+ backgroundColor: showDuplicateLogs
786
+ ? AppColors_1.AppColors.purple
787
+ : AppColors_1.AppColors.grayBorderSecondary,
788
+ padding: 2,
789
+ justifyContent: 'center',
790
+ alignItems: showDuplicateLogs ? 'flex-end' : 'flex-start',
791
+ }}>
792
+ <react_native_1.View style={{
793
+ width: 18,
794
+ height: 18,
795
+ borderRadius: 9,
796
+ backgroundColor: AppColors_1.AppColors.white,
797
+ shadowColor: AppColors_1.AppColors.black,
798
+ shadowOpacity: 0.15,
799
+ shadowRadius: 1.5,
800
+ shadowOffset: { width: 0, height: 1 },
801
+ }}/>
802
+ </TouchableScale_1.default>
803
+ </react_native_1.View>
804
+
805
+ {/* Divider */}
806
+ <react_native_1.View style={{
807
+ height: 1,
808
+ backgroundColor: AppColors_1.AppColors.dividerColor,
809
+ }}/>
810
+
811
+ {/* Logs Console Levels */}
812
+ <react_native_1.View style={{
813
+ paddingVertical: 12,
814
+ paddingHorizontal: 14,
815
+ }}>
816
+ <react_native_1.View style={{
817
+ flexDirection: 'row',
818
+ alignItems: 'center',
819
+ gap: 8,
820
+ }}>
821
+ <react_native_1.View style={{
822
+ width: 20,
823
+ height: 20,
824
+ borderRadius: 6,
825
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
826
+ borderWidth: 1,
827
+ borderColor: `${AppColors_1.AppColors.purple}33`,
828
+ alignItems: 'center',
829
+ justifyContent: 'center',
830
+ }}>
831
+ <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.purple} size={11}/>
832
+ </react_native_1.View>
833
+ <react_native_1.View style={{ flex: 1 }}>
834
+ <react_native_1.Text style={{
835
+ fontFamily: AppFonts_1.AppFonts.interBold,
836
+ fontSize: 13,
837
+ color: AppColors_1.AppColors.primaryBlack,
838
+ }}>
839
+ Logs Console Levels
840
+ </react_native_1.Text>
841
+ <react_native_1.Text style={{
842
+ fontFamily: AppFonts_1.AppFonts.interRegular,
843
+ fontSize: 11,
844
+ color: AppColors_1.AppColors.grayText,
845
+ marginTop: 1,
846
+ }}>
847
+ Toggle which log levels are visible in the Logs tab
848
+ </react_native_1.Text>
849
+ </react_native_1.View>
850
+ </react_native_1.View>
851
+
852
+ <react_native_1.View style={{
853
+ flexDirection: 'row',
854
+ gap: 8,
855
+ marginTop: 10,
856
+ }}>
857
+ {([
858
+ { key: 'info', label: 'Info', color: AppColors_1.AppColors.blue500 },
859
+ { key: 'warn', label: 'Warning', color: AppColors_1.AppColors.amber500 },
860
+ { key: 'error', label: 'Error', color: AppColors_1.AppColors.errorColor },
861
+ ]).map(level => {
862
+ const isActive = showConsoleLevels[level.key];
863
+ return (<TouchableScale_1.default key={level.key} onPress={() => setShowConsoleLevels(prev => ({
864
+ ...prev,
865
+ [level.key]: !prev[level.key],
866
+ }))} style={{
867
+ flex: 1,
868
+ flexDirection: 'row',
869
+ alignItems: 'center',
870
+ justifyContent: 'center',
871
+ gap: 6,
872
+ paddingVertical: 8,
873
+ borderRadius: 8,
874
+ borderWidth: 1.5,
875
+ borderColor: isActive ? level.color : AppColors_1.AppColors.grayBorderSecondary,
876
+ backgroundColor: isActive ? `${level.color}0D` : AppColors_1.AppColors.primaryLight,
877
+ }}>
878
+ <react_native_1.View style={{
879
+ width: 8,
880
+ height: 8,
881
+ borderRadius: 4,
882
+ backgroundColor: isActive ? level.color : AppColors_1.AppColors.grayBorderSecondary,
883
+ }}/>
884
+ <react_native_1.Text style={{
885
+ fontFamily: AppFonts_1.AppFonts.interBold,
886
+ fontSize: 11,
887
+ color: isActive ? level.color : AppColors_1.AppColors.grayText,
888
+ }}>
889
+ {level.label}
890
+ </react_native_1.Text>
891
+ </TouchableScale_1.default>);
892
+ })}
893
+ </react_native_1.View>
894
+ </react_native_1.View>
895
+
896
+ {/* Divider */}
897
+ <react_native_1.View style={{
898
+ height: 1,
899
+ backgroundColor: AppColors_1.AppColors.dividerColor,
900
+ }}/>
901
+
902
+ {/* Reset Settings */}
903
+ <react_native_1.View style={{
904
+ flexDirection: 'row',
905
+ alignItems: 'center',
906
+ paddingVertical: 12,
907
+ paddingHorizontal: 14,
908
+ gap: 12,
909
+ }}>
910
+ <react_native_1.View style={{
911
+ flex: 1,
912
+ flexDirection: 'row',
913
+ alignItems: 'center',
914
+ gap: 8,
915
+ }}>
916
+ <react_native_1.View style={{
917
+ width: 20,
918
+ height: 20,
919
+ borderRadius: 6,
920
+ backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
921
+ borderWidth: 1,
922
+ borderColor: `${AppColors_1.AppColors.errorColor}33`,
923
+ alignItems: 'center',
924
+ justifyContent: 'center',
925
+ }}>
926
+ <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={11}/>
927
+ </react_native_1.View>
928
+ <react_native_1.View style={{ flex: 1 }}>
929
+ <react_native_1.Text style={{
930
+ fontFamily: AppFonts_1.AppFonts.interBold,
931
+ fontSize: 13,
932
+ color: AppColors_1.AppColors.primaryBlack,
933
+ }}>
934
+ Reset Settings
935
+ </react_native_1.Text>
936
+ <react_native_1.Text style={{
937
+ fontFamily: AppFonts_1.AppFonts.interRegular,
938
+ fontSize: 11,
939
+ color: AppColors_1.AppColors.grayText,
940
+ marginTop: 1,
941
+ }}>
942
+ Wipe custom configurations and load package defaults
943
+ </react_native_1.Text>
944
+ </react_native_1.View>
945
+ </react_native_1.View>
946
+
947
+ <TouchableScale_1.default onPress={resetToDefaults} style={{
948
+ paddingHorizontal: 10,
949
+ paddingVertical: 5,
950
+ borderRadius: 7,
951
+ backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
952
+ borderWidth: 1,
953
+ borderColor: `${AppColors_1.AppColors.errorColor}33`,
954
+ }}>
955
+ <react_native_1.Text style={{
956
+ fontFamily: AppFonts_1.AppFonts.interBold,
957
+ fontSize: 11,
958
+ color: AppColors_1.AppColors.errorColor,
959
+ }}>
960
+ Reset
961
+ </react_native_1.Text>
962
+ </TouchableScale_1.default>
963
+ </react_native_1.View>
964
+ </react_native_1.View>)}
965
+
966
+
967
+ {/* Storage Status */}
968
+ <react_native_1.View style={{
969
+ backgroundColor: (0, settingsStore_1.isPersistentStorageAvailable)()
970
+ ? `${AppColors_1.AppColors.liveGreen}14`
971
+ : `${AppColors_1.AppColors.amber600}14`,
972
+ borderRadius: 12,
973
+ borderWidth: 1,
974
+ borderColor: (0, settingsStore_1.isPersistentStorageAvailable)()
975
+ ? `${AppColors_1.AppColors.liveGreen}33`
976
+ : `${AppColors_1.AppColors.amber600}33`,
977
+ padding: 12,
978
+ marginTop: 16,
979
+ flexDirection: 'row',
980
+ alignItems: 'center',
981
+ gap: 10,
982
+ }}>
983
+ <react_native_1.View style={{
984
+ width: 8,
985
+ height: 8,
986
+ borderRadius: 4,
987
+ backgroundColor: (0, settingsStore_1.isPersistentStorageAvailable)() ? AppColors_1.AppColors.green500 : AppColors_1.AppColors.amber600,
988
+ }}/>
989
+ <react_native_1.View style={{ flex: 1 }}>
990
+ <react_native_1.Text style={{
991
+ fontFamily: AppFonts_1.AppFonts.interBold,
992
+ fontSize: 12,
993
+ color: (0, settingsStore_1.isPersistentStorageAvailable)() ? AppColors_1.AppColors.green700 : AppColors_1.AppColors.amber800,
994
+ }}>
995
+ {(0, settingsStore_1.isPersistentStorageAvailable)()
996
+ ? `Storage: Persistent (${storage ? 'Custom' : 'iOS Settings'})`
997
+ : 'Storage: Temporary (In-Memory)'}
998
+ </react_native_1.Text>
999
+ <react_native_1.Text style={{
1000
+ fontFamily: AppFonts_1.AppFonts.interRegular,
1001
+ fontSize: 10.5,
1002
+ color: (0, settingsStore_1.isPersistentStorageAvailable)() ? AppColors_1.AppColors.green800 : AppColors_1.AppColors.amber800,
1003
+ marginTop: 2,
1004
+ opacity: 0.8,
1005
+ }}>
1006
+ {(0, settingsStore_1.isPersistentStorageAvailable)()
1007
+ ? 'Your settings are saved across app restarts.'
1008
+ : 'Settings reset when closed. To persist settings, pass a storage object to <NetworkInspector storage={...} />.'}
1009
+ </react_native_1.Text>
1010
+ </react_native_1.View>
1011
+ </react_native_1.View>
1012
+ </react_native_1.ScrollView>
1013
+ </react_native_1.View>);
1014
+ }
1015
+ const goBackToMain = () => {
1016
+ (0, InspectorContext_1.animateNextLayout)();
1017
+ setSettingsPage('main');
1018
+ };
1019
+ // Helper: settings row with icon + label + optional description
1020
+ const renderSettingRow = (opts) => (<react_native_1.View style={{
1021
+ paddingVertical: 12,
1022
+ borderBottomWidth: opts.isLast ? 0 : 1,
1023
+ borderBottomColor: AppColors_1.AppColors.dividerColor,
1024
+ }}>
1025
+ <TouchableScale_1.default disabled={!opts.onPress} onPress={opts.onPress} style={{
1026
+ flexDirection: 'row',
1027
+ alignItems: 'center',
1028
+ gap: 12,
1029
+ }}>
1030
+ <react_native_1.View style={{
1031
+ width: 36,
1032
+ height: 36,
1033
+ borderRadius: 10,
1034
+ backgroundColor: AppColors_1.AppColors.purpleShade50,
1035
+ borderWidth: 1,
1036
+ borderColor: `${AppColors_1.AppColors.purple}2E`,
1037
+ alignItems: 'center',
1038
+ justifyContent: 'center',
1039
+ }}>
1040
+ {opts.icon}
1041
+ </react_native_1.View>
1042
+ <react_native_1.View style={{ flex: 1 }}>
1043
+ <react_native_1.Text style={{
1044
+ fontFamily: AppFonts_1.AppFonts.interBold,
1045
+ fontSize: 14,
1046
+ color: AppColors_1.AppColors.primaryBlack,
1047
+ }}>
1048
+ {opts.label}
1049
+ </react_native_1.Text>
1050
+ {opts.description ? (<react_native_1.Text style={{
1051
+ fontFamily: AppFonts_1.AppFonts.interRegular,
1052
+ fontSize: 11,
1053
+ color: AppColors_1.AppColors.grayText,
1054
+ marginTop: 1,
1055
+ }}>
1056
+ {opts.description}
1057
+ </react_native_1.Text>) : null}
1058
+ </react_native_1.View>
1059
+ {opts.right || null}
1060
+ </TouchableScale_1.default>
1061
+ {opts.picker && (<react_native_1.View style={{
1062
+ flexDirection: 'row',
1063
+ backgroundColor: AppColors_1.AppColors.grayBackground,
1064
+ borderRadius: 8,
1065
+ padding: 2.5,
1066
+ marginTop: 10,
1067
+ borderWidth: 1,
1068
+ borderColor: AppColors_1.AppColors.dividerColor,
1069
+ }}>
1070
+ {opts.picker.options.map(opt => {
1071
+ const isActive = opts.picker.selectedValue === opt;
1072
+ return (<TouchableScale_1.default key={String(opt)} onPress={() => opts.picker.onSelect(opt)} style={{
1073
+ flex: 1,
1074
+ paddingVertical: 6,
1075
+ alignItems: 'center',
1076
+ borderRadius: 6,
1077
+ backgroundColor: isActive
1078
+ ? AppColors_1.AppColors.purple
1079
+ : 'transparent',
1080
+ }}>
1081
+ <react_native_1.Text style={{
1082
+ fontFamily: AppFonts_1.AppFonts.interBold,
1083
+ fontSize: 11,
1084
+ color: isActive ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayText,
1085
+ }}>
1086
+ {opts.picker.formatLabel
1087
+ ? opts.picker.formatLabel(opt)
1088
+ : opt}
1089
+ </react_native_1.Text>
1090
+ </TouchableScale_1.default>);
1091
+ })}
1092
+ </react_native_1.View>)}
1093
+ </react_native_1.View>);
1094
+ let content = null;
1095
+ let title = '';
1096
+ let icon = null;
1097
+ let rightInfo = '';
1098
+ if (settingsPage === 'apis') {
1099
+ title = 'APIs Settings';
1100
+ icon = <NetworkIcons_1.SignalIcon color={AppColors_1.AppColors.white} size={16}/>;
1101
+ rightInfo = `Total: ${logs.length}`;
1102
+ content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
1103
+ <react_native_1.View style={{
1104
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1105
+ padding: 16,
1106
+ borderRadius: 12,
1107
+ borderWidth: 1,
1108
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1109
+ gap: 4,
1110
+ }}>
1111
+ {renderSettingRow({
1112
+ icon: <NetworkIcons_1.SignalIcon color={AppColors_1.AppColors.purple} size={16}/>,
1113
+ label: 'Max Request Logs',
1114
+ description: 'How many network requests to keep in memory',
1115
+ picker: {
1116
+ options: [50, 100, 200, 500],
1117
+ selectedValue: maxNetworkLogs,
1118
+ onSelect: setMaxNetworkLogs,
1119
+ },
1120
+ isLast: true,
1121
+ })}
1122
+ </react_native_1.View>
1123
+
1124
+ <react_native_1.View style={{
1125
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1126
+ borderRadius: 12,
1127
+ borderWidth: 1,
1128
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1129
+ padding: 16,
1130
+ marginTop: 12,
1131
+ }}>
1132
+ {renderSettingRow({
1133
+ icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
1134
+ label: 'Clear Network Logs',
1135
+ description: `${logs.length} requests stored`,
1136
+ isLast: true,
1137
+ onPress: () => {
1138
+ (0, networkLogger_1.clearNetworkLogs)();
1139
+ setSelected(null);
1140
+ react_native_1.Alert.alert('Success', 'Network logs cleared.');
1141
+ },
1142
+ right: (<react_native_1.View style={{
1143
+ paddingHorizontal: 10,
1144
+ paddingVertical: 5,
1145
+ borderRadius: 7,
1146
+ backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
1147
+ borderWidth: 1,
1148
+ borderColor: `${AppColors_1.AppColors.errorColor}33`,
1149
+ }}>
1150
+ <react_native_1.Text style={{
1151
+ fontFamily: AppFonts_1.AppFonts.interBold,
1152
+ fontSize: 11,
1153
+ color: AppColors_1.AppColors.errorColor,
1154
+ }}>
1155
+ Clear
1156
+ </react_native_1.Text>
1157
+ </react_native_1.View>),
1158
+ })}
1159
+ </react_native_1.View>
1160
+ </react_native_1.ScrollView>);
1161
+ }
1162
+ else if (settingsPage === 'logs') {
1163
+ title = 'Logs Settings';
1164
+ icon = <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.white} size={16}/>;
1165
+ rightInfo = `Total: ${consoleLogs.length}`;
1166
+ content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
1167
+ <react_native_1.View style={{
1168
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1169
+ padding: 16,
1170
+ borderRadius: 12,
1171
+ borderWidth: 1,
1172
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1173
+ gap: 4,
1174
+ }}>
1175
+ {renderSettingRow({
1176
+ icon: <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.purple} size={16}/>,
1177
+ label: 'Max Console Logs',
1178
+ description: 'How many console messages to retain',
1179
+ picker: {
1180
+ options: [100, 200, 500, 1000],
1181
+ selectedValue: maxConsoleLogs,
1182
+ onSelect: setMaxConsoleLogs,
1183
+ },
1184
+ })}
1185
+ <react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
1186
+ <react_native_1.Text style={{
1187
+ fontFamily: AppFonts_1.AppFonts.interBold,
1188
+ fontSize: 13,
1189
+ color: AppColors_1.AppColors.primaryBlack,
1190
+ paddingTop: 4,
1191
+ }}>
1192
+ Log Levels
1193
+ </react_native_1.Text>
1194
+ {['info', 'warn', 'error'].map(level => {
1195
+ const isLvlActive = showConsoleLevels?.[level];
1196
+ const levelColor = level === 'error'
1197
+ ? AppColors_1.AppColors.errorColor
1198
+ : level === 'warn'
1199
+ ? AppColors_1.AppColors.warningIconGold
1200
+ : AppColors_1.AppColors.skyBlue;
1201
+ return renderSettingRow({
1202
+ icon: (<react_native_1.View style={{
1203
+ width: 10,
1204
+ height: 10,
1205
+ borderRadius: 5,
1206
+ backgroundColor: levelColor,
1207
+ }}/>),
1208
+ label: `Show ${level.charAt(0).toUpperCase() + level.slice(1)} logs`,
1209
+ description: level === 'info'
1210
+ ? 'Informational messages'
1211
+ : level === 'warn'
1212
+ ? 'Warning messages'
1213
+ : 'Error messages',
1214
+ isLast: level === 'error',
1215
+ onPress: () => setShowConsoleLevels(prev => ({
1216
+ ...prev,
1217
+ [level]: !prev[level],
1218
+ })),
1219
+ right: (<react_native_1.View style={{
1220
+ width: 22,
1221
+ height: 22,
1222
+ borderRadius: 6,
1223
+ borderWidth: 2,
1224
+ borderColor: isLvlActive
1225
+ ? AppColors_1.AppColors.purple
1226
+ : AppColors_1.AppColors.grayTextWeak,
1227
+ backgroundColor: isLvlActive
1228
+ ? `${AppColors_1.AppColors.purple}1A`
1229
+ : 'transparent',
1230
+ alignItems: 'center',
1231
+ justifyContent: 'center',
1232
+ }}>
1233
+ {isLvlActive && (<NetworkIcons_1.CheckIcon size={12} color={AppColors_1.AppColors.purple}/>)}
1234
+ </react_native_1.View>),
1235
+ });
1236
+ })}
1237
+ </react_native_1.View>
1238
+
1239
+ <react_native_1.View style={{
1240
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1241
+ borderRadius: 12,
1242
+ borderWidth: 1,
1243
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1244
+ padding: 16,
1245
+ marginTop: 12,
1246
+ }}>
1247
+ {renderSettingRow({
1248
+ icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
1249
+ label: 'Clear Console Logs',
1250
+ description: `${consoleLogs.length} logs stored`,
1251
+ isLast: true,
1252
+ onPress: () => {
1253
+ (0, consoleLogger_1.clearConsoleLogs)();
1254
+ react_native_1.Alert.alert('Success', 'Console logs cleared.');
1255
+ },
1256
+ right: (<react_native_1.View style={{
1257
+ paddingHorizontal: 10,
1258
+ paddingVertical: 5,
1259
+ borderRadius: 7,
1260
+ backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
1261
+ borderWidth: 1,
1262
+ borderColor: `${AppColors_1.AppColors.errorColor}33`,
1263
+ }}>
1264
+ <react_native_1.Text style={{
1265
+ fontFamily: AppFonts_1.AppFonts.interBold,
1266
+ fontSize: 11,
1267
+ color: AppColors_1.AppColors.errorColor,
1268
+ }}>
1269
+ Clear
1270
+ </react_native_1.Text>
1271
+ </react_native_1.View>),
1272
+ })}
1273
+ </react_native_1.View>
1274
+ </react_native_1.ScrollView>);
1275
+ }
1276
+ else if (settingsPage === 'analytics') {
1277
+ title = 'Analytics Settings';
1278
+ icon = <NetworkIcons_1.AnalyticsIcon color={AppColors_1.AppColors.white} size={16}/>;
1279
+ rightInfo = `Events: ${analyticsEvents.length}`;
1280
+ content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
1281
+ <react_native_1.View style={{
1282
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1283
+ padding: 16,
1284
+ borderRadius: 12,
1285
+ borderWidth: 1,
1286
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1287
+ gap: 4,
1288
+ }}>
1289
+ {renderSettingRow({
1290
+ icon: <NetworkIcons_1.AnalyticsIcon color={AppColors_1.AppColors.purple} size={16}/>,
1291
+ label: 'Events Captured',
1292
+ description: `${analyticsEvents.length} analytics events stored`,
1293
+ isLast: true,
1294
+ })}
1295
+ </react_native_1.View>
1296
+ <react_native_1.View style={{
1297
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1298
+ borderRadius: 12,
1299
+ borderWidth: 1,
1300
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1301
+ padding: 16,
1302
+ marginTop: 12,
1303
+ }}>
1304
+ {renderSettingRow({
1305
+ icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
1306
+ label: 'Clear Analytics History',
1307
+ description: 'Remove all captured events',
1308
+ isLast: true,
1309
+ onPress: () => {
1310
+ (0, analyticsLogger_1.clearAnalyticsEvents)();
1311
+ setSelectedEvent(null);
1312
+ react_native_1.Alert.alert('Success', 'Analytics events cleared.');
1313
+ },
1314
+ right: (<react_native_1.View style={{
1315
+ paddingHorizontal: 10,
1316
+ paddingVertical: 5,
1317
+ borderRadius: 7,
1318
+ backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
1319
+ borderWidth: 1,
1320
+ borderColor: `${AppColors_1.AppColors.errorColor}33`,
1321
+ }}>
1322
+ <react_native_1.Text style={{
1323
+ fontFamily: AppFonts_1.AppFonts.interBold,
1324
+ fontSize: 11,
1325
+ color: AppColors_1.AppColors.errorColor,
1326
+ }}>
1327
+ Clear
1328
+ </react_native_1.Text>
1329
+ </react_native_1.View>),
1330
+ })}
1331
+ </react_native_1.View>
1332
+ </react_native_1.ScrollView>);
1333
+ }
1334
+ else if (settingsPage === 'redux') {
1335
+ title = 'Redux Settings';
1336
+ icon = <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.white} size={16}/>;
1337
+ rightInfo = `Reducers: ${Object.keys(reduxState || {}).length}`;
1338
+ content = (<react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 16 }}>
1339
+ <react_native_1.View style={{
1340
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1341
+ padding: 16,
1342
+ borderRadius: 12,
1343
+ borderWidth: 1,
1344
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1345
+ gap: 4,
1346
+ }}>
1347
+ {renderSettingRow({
1348
+ icon: <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.purple} size={16}/>,
1349
+ label: 'Auto-refresh Store',
1350
+ description: 'Automatically capture Redux store state updates',
1351
+ onPress: () => setReduxAutoRefreshState(prev => !prev),
1352
+ right: (<react_native_1.View style={{
1353
+ width: 22,
1354
+ height: 22,
1355
+ borderRadius: 6,
1356
+ borderWidth: 2,
1357
+ borderColor: reduxAutoRefresh
1358
+ ? AppColors_1.AppColors.purple
1359
+ : AppColors_1.AppColors.grayTextWeak,
1360
+ backgroundColor: reduxAutoRefresh
1361
+ ? `${AppColors_1.AppColors.purple}1A`
1362
+ : 'transparent',
1363
+ alignItems: 'center',
1364
+ justifyContent: 'center',
1365
+ }}>
1366
+ {reduxAutoRefresh && (<NetworkIcons_1.CheckIcon size={12} color={AppColors_1.AppColors.purple}/>)}
1367
+ </react_native_1.View>),
1368
+ })}
1369
+ <react_native_1.View style={{ height: 1, backgroundColor: AppColors_1.AppColors.dividerColor }}/>
1370
+ {renderSettingRow({
1371
+ icon: <NetworkIcons_1.LayersIcon color={AppColors_1.AppColors.purple} size={16}/>,
1372
+ label: 'Default JSON Expand Depth',
1373
+ description: 'Initial depth of Redux state tree to auto-expand',
1374
+ picker: {
1375
+ options: [1, 2, 3, 5],
1376
+ selectedValue: reduxExpandDepth,
1377
+ onSelect: setReduxExpandDepth,
1378
+ },
1379
+ isLast: true,
1380
+ })}
1381
+ </react_native_1.View>
1382
+
1383
+ <react_native_1.View style={{
1384
+ backgroundColor: AppColors_1.AppColors.primaryLight,
1385
+ borderRadius: 12,
1386
+ borderWidth: 1,
1387
+ borderColor: AppColors_1.AppColors.grayBorderSecondary,
1388
+ padding: 16,
1389
+ marginTop: 12,
1390
+ }}>
1391
+ {renderSettingRow({
1392
+ icon: <NetworkIcons_1.TrashIcon color={AppColors_1.AppColors.errorColor} size={16}/>,
1393
+ label: 'Clear Redux State',
1394
+ description: reduxState
1395
+ ? 'Reset state snapshot in inspector'
1396
+ : 'No store snapshot stored',
1397
+ isLast: true,
1398
+ onPress: () => {
1399
+ setReduxState(null);
1400
+ react_native_1.Alert.alert('Success', 'Redux state snapshot cleared.');
1401
+ },
1402
+ right: (<react_native_1.View style={{
1403
+ paddingHorizontal: 10,
1404
+ paddingVertical: 5,
1405
+ borderRadius: 7,
1406
+ backgroundColor: `${AppColors_1.AppColors.errorColor}14`,
1407
+ borderWidth: 1,
1408
+ borderColor: `${AppColors_1.AppColors.errorColor}33`,
1409
+ }}>
1410
+ <react_native_1.Text style={{
1411
+ fontFamily: AppFonts_1.AppFonts.interBold,
1412
+ fontSize: 11,
1413
+ color: AppColors_1.AppColors.errorColor,
1414
+ }}>
1415
+ Clear
1416
+ </react_native_1.Text>
1417
+ </react_native_1.View>),
1418
+ })}
1419
+ </react_native_1.View>
1420
+ </react_native_1.ScrollView>);
1421
+ }
1422
+ return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
1423
+ <react_native_linear_gradient_1.default colors={[AppColors_1.AppColors.purple, AppColors_1.AppColors.brandPurple]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }} style={styles_1.default.headerGradient}>
1424
+ <react_native_1.View style={{ paddingTop: headerTopPadding, width: '100%' }}>
1425
+ <react_native_1.View style={[styles_1.default.header, { paddingHorizontal: 16, gap: 12 }]}>
1426
+ <TouchableScale_1.default onPress={goBackToMain} hitSlop={12} style={{
1427
+ padding: 8,
1428
+ borderRadius: 10,
1429
+ backgroundColor: `${AppColors_1.AppColors.white}26`,
1430
+ borderWidth: 1,
1431
+ borderColor: `${AppColors_1.AppColors.white}14`,
1432
+ }}>
1433
+ <NetworkIcons_1.WhiteBackNavigation color={AppColors_1.AppColors.white} size={16}/>
1434
+ </TouchableScale_1.default>
1435
+ {icon && (<react_native_1.View style={{
1436
+ width: 30,
1437
+ height: 30,
1438
+ borderRadius: 8,
1439
+ backgroundColor: `${AppColors_1.AppColors.white}26`,
1440
+ alignItems: 'center',
1441
+ justifyContent: 'center',
1442
+ }}>
1443
+ {icon}
1444
+ </react_native_1.View>)}
1445
+ <react_native_1.View style={{ flex: 1 }}>
1446
+ <react_native_1.Text style={{
1447
+ fontFamily: AppFonts_1.AppFonts.interBold,
1448
+ fontSize: 17,
1449
+ color: AppColors_1.AppColors.white,
1450
+ }}>
1451
+ {title}
1452
+ </react_native_1.Text>
1453
+ </react_native_1.View>
1454
+ {rightInfo ? (<react_native_1.View style={{
1455
+ backgroundColor: `${AppColors_1.AppColors.white}26`,
1456
+ paddingHorizontal: 8,
1457
+ paddingVertical: 4,
1458
+ borderRadius: 8,
1459
+ borderWidth: 1,
1460
+ borderColor: `${AppColors_1.AppColors.white}1A`,
1461
+ }}>
1462
+ <react_native_1.Text style={{
1463
+ fontFamily: AppFonts_1.AppFonts.interBold,
1464
+ fontSize: 11,
1465
+ color: AppColors_1.AppColors.white,
1466
+ }}>
1467
+ {rightInfo}
1468
+ </react_native_1.Text>
1469
+ </react_native_1.View>) : null}
1470
+ </react_native_1.View>
1471
+ </react_native_1.View>
1472
+ </react_native_linear_gradient_1.default>
1473
+ {content}
1474
+ </react_native_1.View>);
1475
+ };
1476
+ exports.default = SettingsPanel;