react-native-inapp-inspector 2.3.5 → 2.3.6

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 (226) hide show
  1. package/dist/commonjs/analytics.d.ts +0 -4
  2. package/dist/commonjs/analytics.js +0 -4
  3. package/dist/commonjs/bundle.d.ts +0 -4
  4. package/dist/commonjs/bundle.js +0 -4
  5. package/dist/commonjs/components/AnalyticsDetail.js +18 -27
  6. package/dist/commonjs/components/AnalyticsEventCard.js +9 -12
  7. package/dist/commonjs/components/AnalyticsGraph.js +10 -15
  8. package/dist/commonjs/components/AppHeaderLogo.js +0 -3
  9. package/dist/commonjs/components/BrandCircleIcon.js +15 -15
  10. package/dist/commonjs/components/BrandSquareIcon.js +20 -20
  11. package/dist/commonjs/components/CodeSnippet.js +6 -19
  12. package/dist/commonjs/components/ConsoleLogCard.js +0 -1
  13. package/dist/commonjs/components/CopyButton.js +0 -4
  14. package/dist/commonjs/components/DiffViewer.js +0 -2
  15. package/dist/commonjs/components/DomainHeader.js +0 -4
  16. package/dist/commonjs/components/EmptyState.js +0 -3
  17. package/dist/commonjs/components/ErrorBoundary.js +5 -10
  18. package/dist/commonjs/components/HeadersSection.js +0 -5
  19. package/dist/commonjs/components/HighlightText.js +1 -4
  20. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +11 -26
  21. package/dist/commonjs/components/Inspector/AnalyticsTab.js +34 -40
  22. package/dist/commonjs/components/Inspector/BundleTab.js +56 -84
  23. package/dist/commonjs/components/Inspector/ConsoleTab.js +7 -7
  24. package/dist/commonjs/components/Inspector/CrashDetail.js +18 -20
  25. package/dist/commonjs/components/Inspector/CrashFilterModal.js +0 -1
  26. package/dist/commonjs/components/Inspector/CrashTab.js +11 -20
  27. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +12 -24
  28. package/dist/commonjs/components/Inspector/FabLauncher.js +1 -1
  29. package/dist/commonjs/components/Inspector/InspectorContext.js +0 -2
  30. package/dist/commonjs/components/Inspector/InspectorHeader.js +7 -8
  31. package/dist/commonjs/components/Inspector/LogDetail.js +27 -29
  32. package/dist/commonjs/components/Inspector/MainScreen.js +9 -10
  33. package/dist/commonjs/components/Inspector/NetworkDetail.js +10 -11
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +14 -14
  35. package/dist/commonjs/components/Inspector/NpmUpdateToast.js +6 -9
  36. package/dist/commonjs/components/Inspector/PerformanceTab.js +30 -43
  37. package/dist/commonjs/components/Inspector/ReduxDetail.js +18 -34
  38. package/dist/commonjs/components/Inspector/ReduxTab.js +11 -20
  39. package/dist/commonjs/components/Inspector/SettingsPanel.js +32 -36
  40. package/dist/commonjs/components/Inspector/SkeletonPlaceholder.js +6 -6
  41. package/dist/commonjs/components/Inspector/StorageTab.js +14 -26
  42. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +5 -6
  43. package/dist/commonjs/components/JsonViewer.js +3 -10
  44. package/dist/commonjs/components/LogCard.js +7 -7
  45. package/dist/commonjs/components/MetaAccordion.js +1 -7
  46. package/dist/commonjs/components/NetworkIcons.js +12 -16
  47. package/dist/commonjs/components/SectionHeader.js +0 -4
  48. package/dist/commonjs/components/SkeletonPlaceholder.js +6 -6
  49. package/dist/commonjs/components/Slider.js +6 -6
  50. package/dist/commonjs/components/SourcePageCard.js +0 -4
  51. package/dist/commonjs/components/TreeNode.js +0 -4
  52. package/dist/commonjs/console.d.ts +0 -4
  53. package/dist/commonjs/console.js +0 -4
  54. package/dist/commonjs/constants/index.js +6 -9
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +7 -0
  56. package/dist/commonjs/constants/telemetryConfig.js +10 -0
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -3
  59. package/dist/commonjs/crash.d.ts +0 -4
  60. package/dist/commonjs/crash.js +0 -4
  61. package/dist/commonjs/customHooks/analyticsLogger.d.ts +0 -7
  62. package/dist/commonjs/customHooks/analyticsLogger.js +3 -59
  63. package/dist/commonjs/customHooks/bundleAnalyzer.d.ts +0 -9
  64. package/dist/commonjs/customHooks/bundleAnalyzer.js +3 -86
  65. package/dist/commonjs/customHooks/consoleLogger.js +0 -16
  66. package/dist/commonjs/customHooks/crashHandler.d.ts +0 -28
  67. package/dist/commonjs/customHooks/crashHandler.js +0 -55
  68. package/dist/commonjs/customHooks/logFilters.d.ts +0 -4
  69. package/dist/commonjs/customHooks/logFilters.js +0 -11
  70. package/dist/commonjs/customHooks/networkLogger.js +2 -13
  71. package/dist/commonjs/customHooks/performanceTracker.d.ts +0 -27
  72. package/dist/commonjs/customHooks/performanceTracker.js +0 -31
  73. package/dist/commonjs/customHooks/reduxLogger.d.ts +0 -12
  74. package/dist/commonjs/customHooks/reduxLogger.js +0 -51
  75. package/dist/commonjs/customHooks/storageInspector.d.ts +0 -40
  76. package/dist/commonjs/customHooks/storageInspector.js +1 -56
  77. package/dist/commonjs/decorators/index.d.ts +0 -37
  78. package/dist/commonjs/decorators/index.js +0 -42
  79. package/dist/commonjs/helpers/gaAnalyticsRegistry.d.ts +0 -10
  80. package/dist/commonjs/helpers/gaAnalyticsRegistry.js +0 -26
  81. package/dist/commonjs/helpers/index.d.ts +0 -7
  82. package/dist/commonjs/helpers/index.js +1 -42
  83. package/dist/commonjs/helpers/memoryManager.d.ts +0 -11
  84. package/dist/commonjs/helpers/memoryManager.js +0 -13
  85. package/dist/commonjs/helpers/searchQueryParser.d.ts +0 -4
  86. package/dist/commonjs/helpers/searchQueryParser.js +0 -18
  87. package/dist/commonjs/helpers/settingsStore.js +0 -8
  88. package/dist/commonjs/helpers/telemetry.d.ts +2 -0
  89. package/dist/commonjs/helpers/telemetry.js +302 -0
  90. package/dist/commonjs/i18n/index.d.ts +0 -9
  91. package/dist/commonjs/i18n/index.js +0 -15
  92. package/dist/commonjs/index.js +15 -97
  93. package/dist/commonjs/native/NativeInspector.d.ts +0 -54
  94. package/dist/commonjs/native/NativeInspector.js +0 -56
  95. package/dist/commonjs/network.d.ts +0 -4
  96. package/dist/commonjs/network.js +0 -4
  97. package/dist/commonjs/performance.d.ts +0 -4
  98. package/dist/commonjs/performance.js +0 -4
  99. package/dist/commonjs/redux.d.ts +0 -4
  100. package/dist/commonjs/redux.js +0 -4
  101. package/dist/commonjs/storage.d.ts +0 -4
  102. package/dist/commonjs/storage.js +0 -4
  103. package/dist/commonjs/styles/AppColors.d.ts +0 -3
  104. package/dist/commonjs/styles/AppColors.js +15 -30
  105. package/dist/commonjs/styles/AppFonts.d.ts +0 -4
  106. package/dist/commonjs/styles/AppFonts.js +0 -4
  107. package/dist/commonjs/styles/common.js +0 -11
  108. package/dist/commonjs/styles/index.js +0 -8
  109. package/dist/commonjs/types/enums.js +0 -3
  110. package/dist/commonjs/types/interfaces.d.ts +3 -3
  111. package/dist/esm/analytics.d.ts +0 -4
  112. package/dist/esm/analytics.js +0 -4
  113. package/dist/esm/bundle.d.ts +0 -4
  114. package/dist/esm/bundle.js +0 -4
  115. package/dist/esm/components/AnalyticsDetail.js +18 -27
  116. package/dist/esm/components/AnalyticsEventCard.js +9 -12
  117. package/dist/esm/components/AnalyticsGraph.js +10 -15
  118. package/dist/esm/components/AppHeaderLogo.js +0 -3
  119. package/dist/esm/components/BrandCircleIcon.js +15 -15
  120. package/dist/esm/components/BrandSquareIcon.js +20 -20
  121. package/dist/esm/components/CodeSnippet.js +6 -19
  122. package/dist/esm/components/ConsoleLogCard.js +0 -1
  123. package/dist/esm/components/CopyButton.js +0 -4
  124. package/dist/esm/components/DiffViewer.js +0 -2
  125. package/dist/esm/components/DomainHeader.js +0 -4
  126. package/dist/esm/components/EmptyState.js +0 -3
  127. package/dist/esm/components/ErrorBoundary.js +5 -10
  128. package/dist/esm/components/HeadersSection.js +0 -5
  129. package/dist/esm/components/HighlightText.js +1 -4
  130. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +11 -26
  131. package/dist/esm/components/Inspector/AnalyticsTab.js +34 -40
  132. package/dist/esm/components/Inspector/BundleTab.js +56 -84
  133. package/dist/esm/components/Inspector/ConsoleTab.js +7 -7
  134. package/dist/esm/components/Inspector/CrashDetail.js +18 -20
  135. package/dist/esm/components/Inspector/CrashFilterModal.js +0 -1
  136. package/dist/esm/components/Inspector/CrashTab.js +11 -20
  137. package/dist/esm/components/Inspector/DeviceInfoTab.js +12 -24
  138. package/dist/esm/components/Inspector/FabLauncher.js +1 -1
  139. package/dist/esm/components/Inspector/InspectorContext.js +0 -2
  140. package/dist/esm/components/Inspector/InspectorHeader.js +7 -8
  141. package/dist/esm/components/Inspector/LogDetail.js +27 -29
  142. package/dist/esm/components/Inspector/MainScreen.js +9 -10
  143. package/dist/esm/components/Inspector/NetworkDetail.js +10 -11
  144. package/dist/esm/components/Inspector/NetworkTab.js +14 -14
  145. package/dist/esm/components/Inspector/NpmUpdateToast.js +6 -9
  146. package/dist/esm/components/Inspector/PerformanceTab.js +30 -43
  147. package/dist/esm/components/Inspector/ReduxDetail.js +18 -34
  148. package/dist/esm/components/Inspector/ReduxTab.js +11 -20
  149. package/dist/esm/components/Inspector/SettingsPanel.js +32 -36
  150. package/dist/esm/components/Inspector/SkeletonPlaceholder.js +6 -6
  151. package/dist/esm/components/Inspector/StorageTab.js +14 -26
  152. package/dist/esm/components/Inspector/UpdateAvailableModal.js +5 -6
  153. package/dist/esm/components/JsonViewer.js +3 -10
  154. package/dist/esm/components/LogCard.js +7 -7
  155. package/dist/esm/components/MetaAccordion.js +1 -7
  156. package/dist/esm/components/NetworkIcons.js +12 -16
  157. package/dist/esm/components/SectionHeader.js +0 -4
  158. package/dist/esm/components/SkeletonPlaceholder.js +6 -6
  159. package/dist/esm/components/Slider.js +6 -6
  160. package/dist/esm/components/SourcePageCard.js +0 -4
  161. package/dist/esm/components/TreeNode.js +0 -4
  162. package/dist/esm/console.d.ts +0 -4
  163. package/dist/esm/console.js +0 -4
  164. package/dist/esm/constants/index.js +6 -9
  165. package/dist/esm/constants/telemetryConfig.d.ts +7 -0
  166. package/dist/esm/constants/telemetryConfig.js +7 -0
  167. package/dist/esm/constants/version.d.ts +1 -1
  168. package/dist/esm/constants/version.js +1 -3
  169. package/dist/esm/crash.d.ts +0 -4
  170. package/dist/esm/crash.js +0 -4
  171. package/dist/esm/customHooks/analyticsLogger.d.ts +0 -7
  172. package/dist/esm/customHooks/analyticsLogger.js +3 -59
  173. package/dist/esm/customHooks/bundleAnalyzer.d.ts +0 -9
  174. package/dist/esm/customHooks/bundleAnalyzer.js +3 -86
  175. package/dist/esm/customHooks/consoleLogger.js +0 -16
  176. package/dist/esm/customHooks/crashHandler.d.ts +0 -28
  177. package/dist/esm/customHooks/crashHandler.js +0 -55
  178. package/dist/esm/customHooks/logFilters.d.ts +0 -4
  179. package/dist/esm/customHooks/logFilters.js +0 -11
  180. package/dist/esm/customHooks/networkLogger.js +2 -13
  181. package/dist/esm/customHooks/performanceTracker.d.ts +0 -27
  182. package/dist/esm/customHooks/performanceTracker.js +0 -31
  183. package/dist/esm/customHooks/reduxLogger.d.ts +0 -12
  184. package/dist/esm/customHooks/reduxLogger.js +0 -51
  185. package/dist/esm/customHooks/storageInspector.d.ts +0 -40
  186. package/dist/esm/customHooks/storageInspector.js +1 -56
  187. package/dist/esm/decorators/index.d.ts +0 -37
  188. package/dist/esm/decorators/index.js +0 -42
  189. package/dist/esm/helpers/gaAnalyticsRegistry.d.ts +0 -10
  190. package/dist/esm/helpers/gaAnalyticsRegistry.js +0 -26
  191. package/dist/esm/helpers/index.d.ts +0 -7
  192. package/dist/esm/helpers/index.js +1 -42
  193. package/dist/esm/helpers/memoryManager.d.ts +0 -11
  194. package/dist/esm/helpers/memoryManager.js +0 -13
  195. package/dist/esm/helpers/searchQueryParser.d.ts +0 -4
  196. package/dist/esm/helpers/searchQueryParser.js +0 -18
  197. package/dist/esm/helpers/settingsStore.js +0 -8
  198. package/dist/esm/helpers/telemetry.d.ts +2 -0
  199. package/dist/esm/helpers/telemetry.js +298 -0
  200. package/dist/esm/i18n/index.d.ts +0 -9
  201. package/dist/esm/i18n/index.js +0 -15
  202. package/dist/esm/index.js +15 -97
  203. package/dist/esm/native/NativeInspector.d.ts +0 -54
  204. package/dist/esm/native/NativeInspector.js +0 -56
  205. package/dist/esm/network.d.ts +0 -4
  206. package/dist/esm/network.js +0 -4
  207. package/dist/esm/performance.d.ts +0 -4
  208. package/dist/esm/performance.js +0 -4
  209. package/dist/esm/redux.d.ts +0 -4
  210. package/dist/esm/redux.js +0 -4
  211. package/dist/esm/storage.d.ts +0 -4
  212. package/dist/esm/storage.js +0 -4
  213. package/dist/esm/styles/AppColors.d.ts +0 -3
  214. package/dist/esm/styles/AppColors.js +15 -30
  215. package/dist/esm/styles/AppFonts.d.ts +0 -4
  216. package/dist/esm/styles/AppFonts.js +0 -4
  217. package/dist/esm/styles/common.js +0 -11
  218. package/dist/esm/styles/index.js +0 -8
  219. package/dist/esm/types/enums.js +0 -3
  220. package/dist/esm/types/interfaces.d.ts +3 -3
  221. package/package.json +2 -2
  222. package/src/constants/telemetryConfig.ts +16 -0
  223. package/src/constants/version.ts +1 -1
  224. package/src/helpers/telemetry.ts +341 -0
  225. package/src/index.tsx +15 -1
  226. package/src/types/interfaces.ts +3 -0
@@ -69,8 +69,6 @@ const CrashDetail = react_1.default.memo(() => {
69
69
  }
70
70
  return [];
71
71
  }, [selectedCrash]);
72
- // Strip keys holding explicit undefined values (e.g. componentStack) so the
73
- // Raw JSON tab never renders a literal "undefined".
74
72
  const rawCrashData = (0, react_1.useMemo)(() => {
75
73
  try {
76
74
  return JSON.parse(JSON.stringify(selectedCrash));
@@ -126,12 +124,12 @@ const CrashDetail = react_1.default.memo(() => {
126
124
  },
127
125
  ];
128
126
  return (<react_native_1.View style={{ flex: 1, backgroundColor: AppColors_1.AppColors.grayBackground }}>
129
- {/* ─── Top Info Bar (Similar to NetworkDetail / LogDetail) ─── */}
127
+
130
128
  <react_native_1.View style={{ paddingHorizontal: 8, paddingTop: 6 }}>
131
129
  <react_native_1.View style={localStyles.infoBar}>
132
- {/* Top Status Badges Row */}
130
+
133
131
  <react_native_1.View style={localStyles.badgeRow}>
134
- {/* Fatal / Non-fatal Pill */}
132
+
135
133
  <react_native_1.View style={[
136
134
  localStyles.pillBadge,
137
135
  {
@@ -163,7 +161,7 @@ const CrashDetail = react_1.default.memo(() => {
163
161
  </react_native_1.Text>
164
162
  </react_native_1.View>
165
163
 
166
- {/* Type Pill */}
164
+
167
165
  <react_native_1.View style={[
168
166
  localStyles.pillBadge,
169
167
  {
@@ -178,7 +176,7 @@ const CrashDetail = react_1.default.memo(() => {
178
176
 
179
177
  <react_native_1.View style={{ flex: 1 }}/>
180
178
 
181
- {/* Copy Report Action */}
179
+
182
180
  <TouchableScale_1.default onPress={handleCopyReport} hitSlop={10} style={[
183
181
  localStyles.actionButton,
184
182
  copiedSuccess && { backgroundColor: AppColors_1.AppColors.mintGreenBg, borderColor: AppColors_1.AppColors.mintGreenBorder },
@@ -193,12 +191,12 @@ const CrashDetail = react_1.default.memo(() => {
193
191
  </TouchableScale_1.default>
194
192
  </react_native_1.View>
195
193
 
196
- {/* Crash Title / Message */}
194
+
197
195
  <react_native_1.Text style={localStyles.titleText}>
198
196
  {selectedCrash.message}
199
197
  </react_native_1.Text>
200
198
 
201
- {/* Metadata Row */}
199
+
202
200
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={localStyles.metaRow}>
203
201
  {originFrame && (<react_native_1.View style={localStyles.metaChip}>
204
202
  <NetworkIcons_1.TerminalIcon color={AppColors_1.AppColors.grayText} size={11}/>
@@ -224,12 +222,12 @@ const CrashDetail = react_1.default.memo(() => {
224
222
  </react_native_1.View>
225
223
  </react_native_1.View>
226
224
 
227
- {/* ─── Segmented Sub Tabs ─── */}
225
+
228
226
  <react_native_1.View style={{ paddingHorizontal: 8, paddingTop: 6, paddingBottom: 4 }}>
229
227
  <SegmentedTabs_1.default tabs={tabsConfig} activeKey={activeSubTab} onChange={tab => setActiveSubTab(tab)}/>
230
228
  </react_native_1.View>
231
229
 
232
- {/* ─── Search Bar (for Stack & Raw tabs) ─── */}
230
+
233
231
  {(activeSubTab === 'stack' || activeSubTab === 'raw') && (<react_native_1.View style={{ paddingHorizontal: 12, paddingBottom: 6 }}>
234
232
  <react_native_1.View style={localStyles.searchContainer}>
235
233
  <NetworkIcons_1.SearchIcon color={AppColors_1.AppColors.grayText} size={14}/>
@@ -240,11 +238,11 @@ const CrashDetail = react_1.default.memo(() => {
240
238
  </react_native_1.View>
241
239
  </react_native_1.View>)}
242
240
 
243
- {/* ─── Tab Content ScrollView ─── */}
241
+
244
242
  <react_native_1.ScrollView style={{ flex: 1 }} contentContainerStyle={{ padding: 12, paddingBottom: 40, gap: 12 }}>
245
- {/* 1. STACK TRACE TAB */}
243
+
246
244
  {activeSubTab === 'stack' && (<react_native_1.View style={{ gap: 10 }}>
247
- {/* Filter Chips (App Code vs All Frames) */}
245
+
248
246
  <react_native_1.View style={localStyles.filterChipsRow}>
249
247
  <TouchableScale_1.default onPress={() => setStackFilter('app')} style={[
250
248
  localStyles.filterChip,
@@ -277,7 +275,7 @@ const CrashDetail = react_1.default.memo(() => {
277
275
  </TouchableScale_1.default>
278
276
  </react_native_1.View>
279
277
 
280
- {/* Frames List */}
278
+
281
279
  {displayedFrames.length > 0 ? (displayedFrames
282
280
  .filter(frame => {
283
281
  if (!searchQuery.trim())
@@ -363,9 +361,9 @@ const CrashDetail = react_1.default.memo(() => {
363
361
  </react_native_1.View>)}
364
362
  </react_native_1.View>)}
365
363
 
366
- {/* 2. DIAGNOSTICS TAB */}
364
+
367
365
  {activeSubTab === 'diagnostics' && (<react_native_1.View style={{ gap: 12 }}>
368
- {/* Device & OS Diagnostics Card */}
366
+
369
367
  <react_native_1.View style={localStyles.sectionCard}>
370
368
  <react_native_1.View style={[
371
369
  localStyles.sectionCardHeader,
@@ -428,7 +426,7 @@ const CrashDetail = react_1.default.memo(() => {
428
426
  </react_native_1.View>
429
427
  </react_native_1.View>
430
428
 
431
- {/* Memory Metrics Card */}
429
+
432
430
  {selectedCrash.memoryInfo && (<react_native_1.View style={localStyles.sectionCard}>
433
431
  <react_native_1.View style={[
434
432
  localStyles.sectionCardHeader,
@@ -461,7 +459,7 @@ const CrashDetail = react_1.default.memo(() => {
461
459
  </react_native_1.View>)}
462
460
  </react_native_1.View>)}
463
461
 
464
- {/* 3. BREADCRUMBS TAB */}
462
+
465
463
  {activeSubTab === 'breadcrumbs' && (<react_native_1.View style={{ gap: 10 }}>
466
464
  {selectedCrash.breadcrumbs && selectedCrash.breadcrumbs.length > 0 && (<react_native_1.View style={{
467
465
  flexDirection: 'row',
@@ -499,7 +497,7 @@ const CrashDetail = react_1.default.memo(() => {
499
497
  </react_native_1.View>)}
500
498
  </react_native_1.View>)}
501
499
 
502
- {/* 4. RAW JSON TAB */}
500
+
503
501
  {activeSubTab === 'raw' && (<react_native_1.View style={localStyles.rawContainer}>
504
502
  <JsonViewer_1.default data={rawCrashData} search={searchQuery} wrap/>
505
503
  </react_native_1.View>)}
@@ -72,7 +72,6 @@ const CrashFilterModal = ({ visible, onClose, filters, onApply, searchQuery = ''
72
72
  types: new Set(filters.types),
73
73
  });
74
74
  }
75
- // eslint-disable-next-line react-hooks/exhaustive-deps
76
75
  }, [visible]);
77
76
  const toggleType = (key) => {
78
77
  setDraft(prev => {
@@ -72,7 +72,6 @@ const CrashTab = react_1.default.memo(() => {
72
72
  const [crashFilters, setCrashFilters] = (0, react_1.useState)(CrashFilterModal_1.DEFAULT_CRASH_FILTERS);
73
73
  const [isFilterModalOpen, setIsFilterModalOpen] = (0, react_1.useState)(false);
74
74
  const [detailSubTab, setDetailSubTab] = (0, react_1.useState)('stack');
75
- // Calculate statistics
76
75
  const stats = (0, react_1.useMemo)(() => {
77
76
  const total = crashRecords.length;
78
77
  let fatalCount = 0;
@@ -94,10 +93,8 @@ const CrashTab = react_1.default.memo(() => {
94
93
  });
95
94
  return { total, fatalCount, jsCount, promiseCount, renderCount, nativeCount };
96
95
  }, [crashRecords]);
97
- // Filtered crash list
98
96
  const filteredList = (0, react_1.useMemo)(() => {
99
97
  let list = crashRecords.filter(item => {
100
- // Type filter
101
98
  if (filterType === 'fatal' && !item.isFatal)
102
99
  return false;
103
100
  if (filterType === 'js' && item.type !== 'js')
@@ -108,7 +105,6 @@ const CrashTab = react_1.default.memo(() => {
108
105
  return false;
109
106
  if (filterType === 'native' && item.type !== 'native')
110
107
  return false;
111
- // Modal filters: crash types
112
108
  if (crashFilters.types.size > 0 && !crashFilters.types.has('all')) {
113
109
  const matches = (crashFilters.types.has('fatal') && item.isFatal) ||
114
110
  (crashFilters.types.has('js') && item.type === 'js') ||
@@ -118,7 +114,6 @@ const CrashTab = react_1.default.memo(() => {
118
114
  if (!matches)
119
115
  return false;
120
116
  }
121
- // Modal filters: time window
122
117
  if (crashFilters.timeWindow !== 'all') {
123
118
  const now = Date.now();
124
119
  const cutoff = crashFilters.timeWindow === '15m'
@@ -131,13 +126,11 @@ const CrashTab = react_1.default.memo(() => {
131
126
  if (item.timestamp < cutoff)
132
127
  return false;
133
128
  }
134
- // Modal filters: platform
135
129
  if (crashFilters.platform !== 'all') {
136
130
  const platform = (item.deviceInfo?.platform || '').toLowerCase();
137
131
  if (platform !== crashFilters.platform)
138
132
  return false;
139
133
  }
140
- // Modal filters: engine
141
134
  if (crashFilters.engine !== 'all') {
142
135
  const isHermes = item.deviceInfo?.isHermes;
143
136
  if (crashFilters.engine === 'hermes' && isHermes !== true)
@@ -145,7 +138,6 @@ const CrashTab = react_1.default.memo(() => {
145
138
  if (crashFilters.engine === 'jsc' && (isHermes === true))
146
139
  return false;
147
140
  }
148
- // Search filter
149
141
  if (searchQuery.trim().length > 0) {
150
142
  const queryTokens = searchQuery.trim().toLowerCase().split(/\s+/).filter(Boolean);
151
143
  const searchTarget = [
@@ -160,7 +152,6 @@ const CrashTab = react_1.default.memo(() => {
160
152
  }
161
153
  return true;
162
154
  });
163
- // Modal filters: sort order
164
155
  if (crashFilters.sortBy === 'time_asc') {
165
156
  list = [...list].sort((a, b) => a.timestamp - b.timestamp);
166
157
  }
@@ -201,7 +192,7 @@ const CrashTab = react_1.default.memo(() => {
201
192
  localStyles.cardContainer,
202
193
  isFatal && localStyles.fatalCardBorder,
203
194
  ]}>
204
- {/* Header: #S.No, Badges & Timestamp */}
195
+
205
196
  <react_native_1.View style={localStyles.cardHeader}>
206
197
  <react_native_1.View style={localStyles.badgeRow}>
207
198
  <react_native_1.View style={localStyles.sNoBadge}>
@@ -239,12 +230,12 @@ const CrashTab = react_1.default.memo(() => {
239
230
  </react_native_1.View>
240
231
  </react_native_1.View>
241
232
 
242
- {/* Error Message */}
233
+
243
234
  <react_native_1.View style={{ marginVertical: 6 }}>
244
235
  <HighlightText_1.default text={item.message || t('crash.unknownException')} highlight={searchQuery} numberOfLines={3} style={localStyles.errorMessageText}/>
245
236
  </react_native_1.View>
246
237
 
247
- {/* Top stack frame location if available */}
238
+
248
239
  {topFrame && (<react_native_1.View style={localStyles.locationRow}>
249
240
  <NetworkIcons_1.TerminalIcon size={12} color={AppColors_1.AppColors.grayTextWeak}/>
250
241
  <react_native_1.Text numberOfLines={1} ellipsizeMode="middle" style={localStyles.locationText}>
@@ -255,7 +246,7 @@ const CrashTab = react_1.default.memo(() => {
255
246
  </react_native_1.Text>
256
247
  </react_native_1.View>)}
257
248
 
258
- {/* Footer row: Actions */}
249
+
259
250
  <react_native_1.View style={localStyles.cardFooter}>
260
251
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexWrap: 'wrap' }}>
261
252
  {item.deviceInfo && (<react_native_1.View style={localStyles.metaPill}>
@@ -294,7 +285,7 @@ const CrashTab = react_1.default.memo(() => {
294
285
  }, [searchQuery, setSelectedCrash]);
295
286
  return (<react_native_1.View style={localStyles.container}>
296
287
  {crashRecords.length > 0 && (<>
297
- {/* ─── Top Stats Bar ─── */}
288
+
298
289
  <react_native_1.View style={localStyles.statsBar}>
299
290
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={localStyles.statsScrollContent}>
300
291
  <react_native_1.View style={[localStyles.statChip, localStyles.statChipActive]}>
@@ -339,7 +330,7 @@ const CrashTab = react_1.default.memo(() => {
339
330
  </react_native_1.ScrollView>
340
331
  </react_native_1.View>
341
332
 
342
- {/* ─── Search & Controls ─── */}
333
+
343
334
  <react_native_1.View style={localStyles.controlsContainer}>
344
335
  <react_native_1.View style={localStyles.searchRow}>
345
336
  <react_native_1.View style={localStyles.searchInputWrapper}>
@@ -366,7 +357,7 @@ const CrashTab = react_1.default.memo(() => {
366
357
  </react_native_1.View>)}
367
358
  </react_native_1.View>
368
359
 
369
- {/* Crash Filters */}
360
+
370
361
  <TouchableScale_1.default onPress={() => setIsFilterModalOpen(true)} style={[
371
362
  localStyles.filterButton,
372
363
  !(0, CrashFilterModal_1.isCrashFiltersDefault)(crashFilters) && {
@@ -390,13 +381,13 @@ const CrashTab = react_1.default.memo(() => {
390
381
  }}/>)}
391
382
  </TouchableScale_1.default>
392
383
 
393
- {/* Clear Crashes */}
384
+
394
385
  <TouchableScale_1.default onPress={handleClearAll} style={localStyles.clearButton}>
395
386
  <NetworkIcons_1.TrashIcon size={14} color={AppColors_1.AppColors.errorColor}/>
396
387
  </TouchableScale_1.default>
397
388
  </react_native_1.View>
398
389
 
399
- {/* ─── Filter Chips ─── */}
390
+
400
391
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={localStyles.filterScrollContent}>
401
392
  {[
402
393
  { key: 'all', label: t('crash.filterAll'), Icon: NetworkIcons_1.LayersIcon },
@@ -424,7 +415,7 @@ const CrashTab = react_1.default.memo(() => {
424
415
  </react_native_1.View>
425
416
  </>)}
426
417
 
427
- {/* ─── Crash List or Empty State ─── */}
418
+
428
419
  {filteredList.length === 0 ? (<react_native_1.ScrollView contentContainerStyle={localStyles.emptyContainer} showsVerticalScrollIndicator={false}>
429
420
  <react_native_1.View style={localStyles.emptyIconCircle}>
430
421
  <NetworkIcons_1.ShieldAlertIcon size={38} color={AppColors_1.AppColors.greenColor}/>
@@ -452,7 +443,7 @@ const CrashTab = react_1.default.memo(() => {
452
443
  </TouchableScale_1.default>)}
453
444
  </react_native_1.ScrollView>) : (<react_native_1.FlatList data={filteredList} keyExtractor={item => item.id} renderItem={renderCard} initialNumToRender={12} maxToRenderPerBatch={8} windowSize={5} removeClippedSubviews={true} renderToHardwareTextureAndroid={true} contentContainerStyle={localStyles.listContent} showsVerticalScrollIndicator={false} ListFooterComponent={<EndOfListFooter_1.default />}/>)}
454
445
 
455
- {/* Filter Modal */}
446
+
456
447
  <CrashFilterModal_1.default visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)} filters={crashFilters} onApply={setCrashFilters} searchQuery={searchQuery}/>
457
448
  </react_native_1.View>);
458
449
  });
@@ -109,7 +109,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
109
109
  const [ipAddress, setIpAddress] = (0, react_1.useState)('Detecting...');
110
110
  const [deviceUptime, setDeviceUptime] = (0, react_1.useState)('0s');
111
111
  const startTimeRef = react_1.default.useRef(Date.now());
112
- // Load hardware metrics and IP
113
112
  const fetchMetrics = (0, react_1.useCallback)(async () => {
114
113
  try {
115
114
  const [devMetrics, sysMetrics] = await Promise.all([
@@ -120,7 +119,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
120
119
  setSystemMetrics(sysMetrics);
121
120
  }
122
121
  catch {
123
- // Fallback
124
122
  }
125
123
  finally {
126
124
  setIsLoading(false);
@@ -131,11 +129,9 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
131
129
  const interval = setInterval(fetchMetrics, 3000);
132
130
  return () => clearInterval(interval);
133
131
  }, [fetchMetrics]);
134
- // Probe local IP address
135
132
  (0, react_1.useEffect)(() => {
136
133
  let isMounted = true;
137
134
  const probeIp = async () => {
138
- // 1. Try NativeModules or PlatformConstants
139
135
  try {
140
136
  const serverHost = react_native_1.NativeModules?.PlatformConstants?.serverHost ||
141
137
  react_native_1.NativeModules?.AndroidConstants?.serverHost ||
@@ -150,7 +146,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
150
146
  }
151
147
  }
152
148
  catch { }
153
- // 2. Query dynamic candidate ip endpoints
154
149
  try {
155
150
  const controller = new AbortController();
156
151
  const timer = setTimeout(() => controller.abort(), 1200);
@@ -176,7 +171,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
176
171
  isMounted = false;
177
172
  };
178
173
  }, []);
179
- // Calculate Uptime
180
174
  (0, react_1.useEffect)(() => {
181
175
  const updateUptime = () => {
182
176
  const diffSec = Math.floor((Date.now() - startTimeRef.current) / 1000);
@@ -197,7 +191,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
197
191
  updateUptime();
198
192
  return () => clearInterval(timer);
199
193
  }, []);
200
- // Screen Geometry
201
194
  const windowDims = react_native_1.Dimensions.get('window');
202
195
  const screenDims = react_native_1.Dimensions.get('screen');
203
196
  const pixelRatio = react_native_1.PixelRatio.get();
@@ -207,7 +200,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
207
200
  const statusBarHeight = react_native_1.Platform.OS === 'android'
208
201
  ? react_native_1.StatusBar.currentHeight || 24
209
202
  : (windowDims.height >= 812 ? 44 : 20);
210
- // Pseudo-UDID deterministic identifier
211
203
  const pseudoUDID = (0, react_1.useMemo)(() => {
212
204
  const raw = `${react_native_1.Platform.OS}-${react_native_1.Platform.Version}-${screenDims.width}x${screenDims.height}-${pixelRatio}-${react_native_1.Platform.constants?.Brand || 'generic'}`;
213
205
  let hash = 0;
@@ -218,7 +210,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
218
210
  const hex = Math.abs(hash).toString(16).padStart(8, '0');
219
211
  return `UDID-${react_native_1.Platform.OS.toUpperCase()}-${hex.slice(0, 4)}-${hex.slice(4, 8)}-${Date.now().toString(16).slice(-4)}`.toUpperCase();
220
212
  }, [screenDims.width, screenDims.height, pixelRatio]);
221
- // Hermes & TurboModule engine status
222
213
  const isHermes = Boolean(global?.HermesInternal);
223
214
  const isTurboModule = Boolean(globalThis?.__turboModuleProxy);
224
215
  const reactNativeVersion = (0, react_1.useMemo)(() => {
@@ -242,7 +233,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
242
233
  const freeStorageGb = deviceMetrics?.freeStorage
243
234
  ? (deviceMetrics.freeStorage / (1024 * 1024 * 1024)).toFixed(1)
244
235
  : '64.2';
245
- // Sub-Tab Definitions
246
236
  const subTabs = (0, react_1.useMemo)(() => [
247
237
  {
248
238
  key: 'overview',
@@ -275,7 +265,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
275
265
  icon: (c) => <NetworkIcons_1.KeyIcon size={12} color={c}/>,
276
266
  },
277
267
  ], []);
278
- // Full device JSON export
279
268
  const fullDeviceData = (0, react_1.useMemo)(() => ({
280
269
  identifiers: {
281
270
  pseudoUDID,
@@ -388,7 +377,6 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
388
377
  (0, helpers_1.copyToClipboard)(md, 'Device Markdown Report');
389
378
  (0, toast_1.showToast)('Copied Markdown Report to Clipboard!');
390
379
  };
391
- // Filter items matching search
392
380
  const isMatch = (text) => {
393
381
  if (!search.trim())
394
382
  return true;
@@ -403,7 +391,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
403
391
  pseudoUDID.toLowerCase().includes(query));
404
392
  }, [search, fullDeviceData, ipAddress, pseudoUDID]);
405
393
  return (<react_native_1.View style={styles.container}>
406
- {/* ─── Top Sub-Tabs Navigation Bar ─── */}
394
+
407
395
  <react_native_1.View style={styles.subTabsWrapper}>
408
396
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.subTabsContainer}>
409
397
  {subTabs.map(tab => {
@@ -422,7 +410,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
422
410
  </react_native_1.ScrollView>
423
411
  </react_native_1.View>
424
412
 
425
- {/* ─── Search & Export Action Bar ─── */}
413
+
426
414
  <react_native_1.View style={styles.actionBar}>
427
415
  <react_native_1.View style={styles.searchBar}>
428
416
  <NetworkIcons_1.SearchIcon size={14} color={AppColors_1.AppColors.grayTextWeak}/>
@@ -443,9 +431,9 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
443
431
  </TouchableScale_1.default>
444
432
  </react_native_1.View>
445
433
 
446
- {/* ─── Main Content Scroll View ─── */}
434
+
447
435
  <react_native_1.ScrollView style={styles.scrollArea} contentContainerStyle={styles.scrollContent} showsVerticalScrollIndicator={false}>
448
- {/* Hero Card */}
436
+
449
437
  <react_native_1.View style={styles.heroCard}>
450
438
  <react_native_1.View style={styles.heroHeader}>
451
439
  <react_native_1.View style={styles.heroIconWrap}>
@@ -465,7 +453,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
465
453
  </react_native_1.View>
466
454
  </react_native_1.View>
467
455
 
468
- {/* Quick Metrics Strip */}
456
+
469
457
  <react_native_1.View style={styles.heroMetricsStrip}>
470
458
  <react_native_1.View style={styles.heroMetricItem}>
471
459
  <react_native_1.Text style={styles.heroMetricLabel} numberOfLines={1} ellipsizeMode="tail">IP ADDRESS</react_native_1.Text>
@@ -488,7 +476,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
488
476
  </react_native_1.View>
489
477
  </react_native_1.View>
490
478
 
491
- {/* ── SUB-TAB 1: OVERVIEW ── */}
479
+
492
480
  {(activeSubTab === 'overview' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
493
481
  <react_native_1.Text style={styles.sectionTitle}>DEVICE OVERVIEW</react_native_1.Text>
494
482
  {isMatch('Device Model') && (<InfoRow label="Device Model" value={fullDeviceData.hardware.model}/>)}
@@ -504,7 +492,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
504
492
  {isMatch('UDID Identifier') && (<InfoRow label="Pseudo-UDID" value={pseudoUDID} isLast/>)}
505
493
  </react_native_1.View>)}
506
494
 
507
- {/* ── SUB-TAB 2: HARDWARE & SYSTEM ── */}
495
+
508
496
  {(activeSubTab === 'hardware' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
509
497
  <react_native_1.Text style={styles.sectionTitle}>HARDWARE & SYSTEM SPECIFICATIONS</react_native_1.Text>
510
498
  {isMatch('CPU Architecture') && (<InfoRow label="CPU Architecture / ABI" value={fullDeviceData.hardware.cpuAbi} badge={{ text: '64-BIT', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
@@ -525,7 +513,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
525
513
  {isMatch('Thermal State') && (<InfoRow label="Thermal State" value="Nominal (Cool)" badge={{ text: 'OPTIMAL', color: AppColors_1.AppColors.emerald500, bg: `${AppColors_1.AppColors.emerald500}18` }} isLast/>)}
526
514
  </react_native_1.View>)}
527
515
 
528
- {/* ── SUB-TAB 3: NETWORK & CONNECTIVITY ── */}
516
+
529
517
  {(activeSubTab === 'network' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
530
518
  <react_native_1.Text style={styles.sectionTitle}>NETWORK & CONNECTIVITY</react_native_1.Text>
531
519
  {isMatch('IP Address') && (<InfoRow label="Local Device IP" value={ipAddress} badge={{ text: 'IPV4', color: AppColors_1.AppColors.blue500, bg: `${AppColors_1.AppColors.blue500}18` }}/>)}
@@ -538,7 +526,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
538
526
  {isMatch('Network Inspector Interceptor') && (<InfoRow label="Network Interceptor Status" value="Intercepting XHR & Fetch" badge={{ text: 'MONITORING', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }} isLast/>)}
539
527
  </react_native_1.View>)}
540
528
 
541
- {/* ── SUB-TAB 4: DISPLAY & SCREEN GEOMETRY ── */}
529
+
542
530
  {(activeSubTab === 'display' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
543
531
  <react_native_1.Text style={styles.sectionTitle}>DISPLAY & SCREEN GEOMETRY</react_native_1.Text>
544
532
  {isMatch('Window Resolution') && (<InfoRow label="Window Logical Size" value={`${windowDims.width.toFixed(0)} × ${windowDims.height.toFixed(0)} pt`}/>)}
@@ -554,7 +542,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
554
542
  {isMatch('Status Bar Height') && (<InfoRow label="Status Bar Inset" value={`${statusBarHeight} pt`} isLast/>)}
555
543
  </react_native_1.View>)}
556
544
 
557
- {/* ── SUB-TAB 5: RUNTIME & APPLICATION ── */}
545
+
558
546
  {(activeSubTab === 'runtime' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
559
547
  <react_native_1.Text style={styles.sectionTitle}>RUNTIME & APPLICATION</react_native_1.Text>
560
548
  {isMatch('App Name') && (<InfoRow label="Application Name" value={fullDeviceData.runtime.appName}/>)}
@@ -582,7 +570,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
582
570
  {isMatch('Session Uptime') && (<InfoRow label="Inspector Session Uptime" value={deviceUptime} isLast/>)}
583
571
  </react_native_1.View>)}
584
572
 
585
- {/* ── SUB-TAB 6: SECURITY & IDENTIFIERS ── */}
573
+
586
574
  {(activeSubTab === 'security' || search.length > 0) && (<react_native_1.View style={styles.sectionCard}>
587
575
  <react_native_1.Text style={styles.sectionTitle}>DEVICE IDENTIFIERS & SECURITY</react_native_1.Text>
588
576
  {isMatch('Pseudo-UDID') && (<InfoRow label="Deterministic Pseudo-UDID" value={pseudoUDID} subtext="Stable hardware signature hash for testing & diagnostics" badge={{ text: 'PERSISTENT', color: AppColors_1.AppColors.purple, bg: `${AppColors_1.AppColors.purple}18` }}/>)}
@@ -596,7 +584,7 @@ exports.DeviceInfoTab = react_1.default.memo(() => {
596
584
  {isMatch('Sandbox Integrity') && (<InfoRow label="App Sandbox File Isolation" value="Enforced by OS Kernel" isLast/>)}
597
585
  </react_native_1.View>)}
598
586
 
599
- {/* Empty search results state */}
587
+
600
588
  {search.trim().length > 0 && !hasAnyMatch && (<react_native_1.View style={styles.emptySearchCard}>
601
589
  <NetworkIcons_1.SearchIcon size={26} color={AppColors_1.AppColors.grayTextWeak}/>
602
590
  <react_native_1.Text style={styles.emptySearchTitle}>No matching device specifications</react_native_1.Text>
@@ -21,7 +21,7 @@ const FabLauncher = () => {
21
21
  }} hitSlop={10}>
22
22
  <react_native_1.Animated.View style={[styles_1.default.fabPulseRing, { transform: [{ scale: pulseAnim }] }]}/>
23
23
  <BrandCircleIcon_1.default size={62}/>
24
- {/* #4 — shining sweep, clipped inside the circular launcher */}
24
+
25
25
  <react_native_1.View pointerEvents="none" style={styles_1.default.fabShineClip}>
26
26
  <react_native_1.Animated.View style={[
27
27
  styles_1.default.fabShineStreak,
@@ -17,7 +17,5 @@ const useInspector = () => {
17
17
  };
18
18
  exports.useInspector = useInspector;
19
19
  const animateNextLayout = () => {
20
- // Disabled LayoutAnimation to prevent iOS NSRangeException crashes under Fabric
21
- // and Android rendering performance freezes.
22
20
  };
23
21
  exports.animateNextLayout = animateNextLayout;
@@ -74,7 +74,7 @@ const InspectorHeader = react_1.default.memo(() => {
74
74
  if (clean === 'DEV' || clean.includes('DEV') || clean === 'LOCAL') {
75
75
  return {
76
76
  label: rawEnv,
77
- bg: `${AppColors_1.AppColors.emerald500}40`, // emerald
77
+ bg: `${AppColors_1.AppColors.emerald500}40`,
78
78
  border: `${AppColors_1.AppColors.emerald400}8C`,
79
79
  text: AppColors_1.AppColors.mintGreenBorder,
80
80
  };
@@ -82,7 +82,7 @@ const InspectorHeader = react_1.default.memo(() => {
82
82
  if (clean === 'UAT' || clean === 'QA' || clean === 'TEST') {
83
83
  return {
84
84
  label: rawEnv,
85
- bg: `${AppColors_1.AppColors.amber500}47`, // amber
85
+ bg: `${AppColors_1.AppColors.amber500}47`,
86
86
  border: `${AppColors_1.AppColors.amber400}99`,
87
87
  text: AppColors_1.AppColors.amberWarmBorder,
88
88
  };
@@ -90,15 +90,14 @@ const InspectorHeader = react_1.default.memo(() => {
90
90
  if (clean === 'PREPROD' || clean === 'STAGE' || clean === 'STAGING') {
91
91
  return {
92
92
  label: rawEnv,
93
- bg: `${AppColors_1.AppColors.purple500}47`, // purple
93
+ bg: `${AppColors_1.AppColors.purple500}47`,
94
94
  border: `${AppColors_1.AppColors.purple400}99`,
95
95
  text: AppColors_1.AppColors.violetSoftBorder,
96
96
  };
97
97
  }
98
- // PROD / Live
99
98
  return {
100
99
  label: rawEnv,
101
- bg: `${AppColors_1.AppColors.rose500}40`, // rose
100
+ bg: `${AppColors_1.AppColors.rose500}40`,
102
101
  border: `${AppColors_1.AppColors.roseBorder}8C`,
103
102
  text: AppColors_1.AppColors.errorBorder,
104
103
  };
@@ -177,7 +176,7 @@ const InspectorHeader = react_1.default.memo(() => {
177
176
  },
178
177
  !isAnySelected && { display: 'none' },
179
178
  ]}>
180
- {/* Soft outer glow to fake a blurred circle */}
179
+
181
180
  <react_native_1.View style={{
182
181
  position: 'absolute',
183
182
  width: 48,
@@ -292,7 +291,7 @@ const InspectorHeader = react_1.default.memo(() => {
292
291
  </react_native_1.Pressable>)}
293
292
  </react_native_1.View>
294
293
 
295
- {/* OS & NPM Version Representation */}
294
+
296
295
  <react_native_1.View style={{
297
296
  flexDirection: 'row',
298
297
  alignItems: 'center',
@@ -701,7 +700,7 @@ const InspectorHeader = react_1.default.memo(() => {
701
700
  </react_native_1.View>
702
701
  </react_native_linear_gradient_1.default>
703
702
 
704
- {/* Dedicated Update Available Details Modal */}
703
+
705
704
  <UpdateAvailableModal_1.UpdateAvailableModal visible={showUpdateModal} latestVersion={latestNpmVersion} onClose={() => setShowUpdateModal(false)}/>
706
705
  </>);
707
706
  });