react-native-inapp-inspector 2.2.2 → 2.2.4

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 (159) hide show
  1. package/dist/commonjs/components/AnalyticsDetail.js +5 -1
  2. package/dist/commonjs/components/AnalyticsEventCard.js +2 -1
  3. package/dist/commonjs/components/DiffViewer.js +1 -1
  4. package/dist/commonjs/components/Inspector/BundleTab.js +22 -0
  5. package/dist/commonjs/components/Inspector/DeviceInfoTab.d.ts +3 -0
  6. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +835 -0
  7. package/dist/commonjs/components/Inspector/InspectorHeader.js +12 -14
  8. package/dist/commonjs/components/Inspector/LogDetail.js +6 -3
  9. package/dist/commonjs/components/Inspector/MainScreen.js +7 -3
  10. package/dist/commonjs/components/Inspector/NetworkTab.js +92 -15
  11. package/dist/commonjs/components/Inspector/PerformanceTab.js +38 -12
  12. package/dist/commonjs/components/Inspector/SettingsPanel.js +440 -229
  13. package/dist/commonjs/components/Inspector/StorageTab.d.ts +3 -0
  14. package/dist/commonjs/components/Inspector/StorageTab.js +892 -0
  15. package/dist/commonjs/components/Inspector/TabBar.js +14 -0
  16. package/dist/commonjs/components/Inspector/TelemetryConsentModal.js +11 -2
  17. package/dist/commonjs/components/Inspector/UpdateAvailableModal.js +4 -1
  18. package/dist/commonjs/components/NetworkIcons.d.ts +6 -0
  19. package/dist/commonjs/components/NetworkIcons.js +30 -1
  20. package/dist/commonjs/constants/version.d.ts +1 -1
  21. package/dist/commonjs/constants/version.js +1 -1
  22. package/dist/commonjs/customHooks/bundleAnalyzer.js +44 -22
  23. package/dist/commonjs/customHooks/storageInspector.d.ts +67 -0
  24. package/dist/commonjs/customHooks/storageInspector.js +486 -0
  25. package/dist/commonjs/i18n/locales/en.json +8 -2
  26. package/dist/commonjs/index.d.ts +1 -0
  27. package/dist/commonjs/index.js +16 -1
  28. package/dist/commonjs/storage.d.ts +5 -0
  29. package/dist/commonjs/storage.js +18 -0
  30. package/dist/commonjs/types/enums.d.ts +5 -0
  31. package/dist/commonjs/types/enums.js +5 -0
  32. package/dist/esm/components/AnalyticsDetail.js +6 -2
  33. package/dist/esm/components/AnalyticsEventCard.js +2 -1
  34. package/dist/esm/components/DiffViewer.js +1 -1
  35. package/dist/esm/components/Inspector/BundleTab.js +22 -0
  36. package/dist/esm/components/Inspector/DeviceInfoTab.d.ts +3 -0
  37. package/dist/esm/components/Inspector/DeviceInfoTab.js +796 -0
  38. package/dist/esm/components/Inspector/InspectorHeader.js +13 -15
  39. package/dist/esm/components/Inspector/LogDetail.js +7 -4
  40. package/dist/esm/components/Inspector/MainScreen.js +7 -3
  41. package/dist/esm/components/Inspector/NetworkTab.js +93 -16
  42. package/dist/esm/components/Inspector/PerformanceTab.js +39 -13
  43. package/dist/esm/components/Inspector/SettingsPanel.js +441 -230
  44. package/dist/esm/components/Inspector/StorageTab.d.ts +3 -0
  45. package/dist/esm/components/Inspector/StorageTab.js +853 -0
  46. package/dist/esm/components/Inspector/TabBar.js +15 -1
  47. package/dist/esm/components/Inspector/TelemetryConsentModal.js +11 -2
  48. package/dist/esm/components/Inspector/UpdateAvailableModal.js +4 -1
  49. package/dist/esm/components/NetworkIcons.d.ts +6 -0
  50. package/dist/esm/components/NetworkIcons.js +23 -0
  51. package/dist/esm/constants/version.d.ts +1 -1
  52. package/dist/esm/constants/version.js +1 -1
  53. package/dist/esm/customHooks/bundleAnalyzer.js +44 -22
  54. package/dist/esm/customHooks/storageInspector.d.ts +67 -0
  55. package/dist/esm/customHooks/storageInspector.js +469 -0
  56. package/dist/esm/i18n/locales/en.json +8 -2
  57. package/dist/esm/index.d.ts +1 -0
  58. package/dist/esm/index.js +5 -0
  59. package/dist/esm/storage.d.ts +5 -0
  60. package/dist/esm/storage.js +5 -0
  61. package/dist/esm/types/enums.d.ts +5 -0
  62. package/dist/esm/types/enums.js +5 -0
  63. package/package.json +9 -1
  64. package/src/analytics.ts +35 -0
  65. package/src/bundle.ts +25 -0
  66. package/src/components/AnalyticsDetail.tsx +870 -0
  67. package/src/components/AnalyticsEventCard.tsx +442 -0
  68. package/src/components/AnalyticsGraph.tsx +583 -0
  69. package/src/components/AnimatedEntrance.tsx +64 -0
  70. package/src/components/AppHeaderLogo.tsx +109 -0
  71. package/src/components/BrandCircleIcon.tsx +144 -0
  72. package/src/components/BrandSquareIcon.tsx +144 -0
  73. package/src/components/CodeSnippet.tsx +725 -0
  74. package/src/components/ConsoleLogCard.tsx +628 -0
  75. package/src/components/CopyButton.tsx +87 -0
  76. package/src/components/DiffViewer.tsx +82 -0
  77. package/src/components/DomainHeader.tsx +237 -0
  78. package/src/components/EmptyState.tsx +73 -0
  79. package/src/components/EndOfListFooter.tsx +100 -0
  80. package/src/components/ErrorBoundary.tsx +688 -0
  81. package/src/components/HeadersSection.tsx +192 -0
  82. package/src/components/HighlightText.tsx +100 -0
  83. package/src/components/Inspector/AnalyticsFilterModal.tsx +1250 -0
  84. package/src/components/Inspector/AnalyticsTab.tsx +1336 -0
  85. package/src/components/Inspector/BundleTab.tsx +4760 -0
  86. package/src/components/Inspector/ConsoleTab.tsx +702 -0
  87. package/src/components/Inspector/CrashDetail.tsx +941 -0
  88. package/src/components/Inspector/CrashFilterModal.tsx +721 -0
  89. package/src/components/Inspector/CrashTab.tsx +871 -0
  90. package/src/components/Inspector/DeviceInfoTab.tsx +1204 -0
  91. package/src/components/Inspector/FabLauncher.tsx +80 -0
  92. package/src/components/Inspector/InspectorContext.tsx +28 -0
  93. package/src/components/Inspector/InspectorHeader.tsx +972 -0
  94. package/src/components/Inspector/LogDetail.tsx +1431 -0
  95. package/src/components/Inspector/MainScreen.tsx +262 -0
  96. package/src/components/Inspector/NavigationTracker.tsx +13 -0
  97. package/src/components/Inspector/NetworkDetail.tsx +794 -0
  98. package/src/components/Inspector/NetworkTab.tsx +1183 -0
  99. package/src/components/Inspector/NpmUpdateToast.tsx +392 -0
  100. package/src/components/Inspector/PerformanceTab.tsx +1928 -0
  101. package/src/components/Inspector/ReduxDetail.tsx +1651 -0
  102. package/src/components/Inspector/ReduxTab.tsx +954 -0
  103. package/src/components/Inspector/SettingsPanel.tsx +3447 -0
  104. package/src/components/Inspector/StorageTab.tsx +1048 -0
  105. package/src/components/Inspector/TabBar.tsx +207 -0
  106. package/src/components/Inspector/TelemetryConsentModal.tsx +416 -0
  107. package/src/components/Inspector/UpdateAvailableModal.tsx +557 -0
  108. package/src/components/JsonViewer.tsx +486 -0
  109. package/src/components/LogCard.tsx +491 -0
  110. package/src/components/LogSyntaxHighlighter.tsx +178 -0
  111. package/src/components/MetaAccordion.tsx +340 -0
  112. package/src/components/MiniBarChart.tsx +42 -0
  113. package/src/components/MiniLineChart.tsx +33 -0
  114. package/src/components/NetworkIcons.tsx +2221 -0
  115. package/src/components/SectionHeader.tsx +113 -0
  116. package/src/components/SegmentedTabs.tsx +83 -0
  117. package/src/components/Slider.tsx +300 -0
  118. package/src/components/SourcePageCard.tsx +148 -0
  119. package/src/components/Toast.tsx +131 -0
  120. package/src/components/TouchableScale.tsx +91 -0
  121. package/src/components/TreeNode.tsx +186 -0
  122. package/src/console.ts +24 -0
  123. package/src/constants/index.ts +38 -0
  124. package/src/constants/version.ts +3 -0
  125. package/src/crash.ts +32 -0
  126. package/src/customHooks/analyticsLogger.ts +336 -0
  127. package/src/customHooks/bundleAnalyzer.ts +1256 -0
  128. package/src/customHooks/consoleLogger.ts +497 -0
  129. package/src/customHooks/crashHandler.ts +944 -0
  130. package/src/customHooks/logFilters.ts +32 -0
  131. package/src/customHooks/networkLogger.ts +419 -0
  132. package/src/customHooks/performanceTracker.ts +1014 -0
  133. package/src/customHooks/reduxLogger.ts +406 -0
  134. package/src/customHooks/storageInspector.ts +509 -0
  135. package/src/customHooks/useAccordion.tsx +60 -0
  136. package/src/decorators/index.ts +184 -0
  137. package/src/helpers/gaAnalyticsRegistry.ts +204 -0
  138. package/src/helpers/index.ts +860 -0
  139. package/src/helpers/memoryManager.ts +138 -0
  140. package/src/helpers/searchQueryParser.ts +283 -0
  141. package/src/helpers/settingsStore.ts +171 -0
  142. package/src/helpers/telemetry.ts +505 -0
  143. package/src/helpers/toast.ts +17 -0
  144. package/src/i18n/index.ts +69 -0
  145. package/src/i18n/locales/en.json +1058 -0
  146. package/src/index.tsx +2356 -0
  147. package/src/native/NativeInspector.ts +397 -0
  148. package/src/native/NativeNetworkInspector.ts +24 -0
  149. package/src/network.ts +22 -0
  150. package/src/performance.ts +38 -0
  151. package/src/redux.ts +23 -0
  152. package/src/storage.ts +18 -0
  153. package/src/styles/AppColors.ts +408 -0
  154. package/src/styles/AppFonts.ts +8 -0
  155. package/src/styles/common.ts +209 -0
  156. package/src/styles/index.ts +1570 -0
  157. package/src/types/enums.ts +199 -0
  158. package/src/types/index.ts +34 -0
  159. package/src/types/interfaces.ts +515 -0
@@ -297,8 +297,9 @@ const InspectorHeader = react_1.default.memo(() => {
297
297
  color: '#FFFFFF',
298
298
  letterSpacing: 0.3,
299
299
  }}>
300
- UPDATE
300
+ UPDATE
301
301
  </react_native_1.Text>
302
+ <NetworkIcons_1.BoltIcon size={9} color="#FFFFFF"/>
302
303
  </react_native_1.Pressable>)}
303
304
  </react_native_1.View>
304
305
 
@@ -342,26 +343,23 @@ const InspectorHeader = react_1.default.memo(() => {
342
343
  react_native_1.Linking.openURL('https://www.npmjs.com/package/react-native-inapp-inspector').catch(() => { });
343
344
  }
344
345
  }} style={{
345
- backgroundColor: '#FFFFFF',
346
+ flexDirection: 'row',
347
+ alignItems: 'center',
348
+ backgroundColor: `${AppColors_1.AppColors.white}1F`,
346
349
  borderRadius: 5,
347
350
  paddingHorizontal: 6,
348
351
  paddingVertical: 2,
349
- flexDirection: 'row',
350
- alignItems: 'center',
351
352
  gap: 4,
353
+ borderWidth: 1,
354
+ borderColor: `${AppColors_1.AppColors.white}2E`,
352
355
  flexShrink: 0,
353
- shadowColor: '#000000',
354
- shadowOffset: { width: 0, height: 1 },
355
- shadowOpacity: 0.15,
356
- shadowRadius: 2,
357
- elevation: 2,
358
356
  }}>
359
- <NetworkIcons_1.NpmIcon size={11} color="#CB3837"/>
357
+ <NetworkIcons_1.NpmIcon size={10} color="#FF6B6B"/>
360
358
  <react_native_1.Text style={{
361
- fontFamily: AppFonts_1.AppFonts.interBold,
359
+ fontFamily: AppFonts_1.AppFonts.interMedium,
362
360
  fontSize: 9.5,
363
- color: '#CB3837',
364
- letterSpacing: 0.2,
361
+ color: `${AppColors_1.AppColors.white}EB`,
362
+ letterSpacing: 0.1,
365
363
  }} numberOfLines={1}>
366
364
  v{constants_2.LIB_VERSION}
367
365
  </react_native_1.Text>
@@ -370,7 +368,7 @@ const InspectorHeader = react_1.default.memo(() => {
370
368
  fontSize: 9,
371
369
  color: '#F59E0B',
372
370
  }}>
373
-
371
+
374
372
  </react_native_1.Text>)}
375
373
  </react_native_1.Pressable>
376
374
 
@@ -894,14 +894,17 @@ const LogDetail = react_1.default.memo(() => {
894
894
  paddingVertical: 4.5,
895
895
  gap: 6,
896
896
  }}>
897
- <react_native_1.Text selectable style={{
897
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, flex: 1 }}>
898
+ <NetworkIcons_1.FolderIcon size={12} color={AppColors_1.AppColors.grayTextWeak}/>
899
+ <react_native_1.Text selectable style={{
898
900
  fontFamily: AppFonts_1.AppFonts.interRegular,
899
901
  fontSize: 9.5,
900
902
  color: AppColors_1.AppColors.grayTextStrong,
901
903
  flex: 1,
902
904
  }} numberOfLines={1}>
903
- 📂 {frame.fullPath}
904
- </react_native_1.Text>
905
+ {frame.fullPath}
906
+ </react_native_1.Text>
907
+ </react_native_1.View>
905
908
 
906
909
  <react_native_1.View style={{
907
910
  backgroundColor: frameBadgeBg,
@@ -55,6 +55,8 @@ const BundleTab_1 = __importDefault(require("./BundleTab"));
55
55
  const PerformanceTab_1 = __importDefault(require("./PerformanceTab"));
56
56
  const CrashTab_1 = __importDefault(require("./CrashTab"));
57
57
  const CrashDetail_1 = __importDefault(require("./CrashDetail"));
58
+ const DeviceInfoTab_1 = __importDefault(require("./DeviceInfoTab"));
59
+ const StorageTab_1 = __importDefault(require("./StorageTab"));
58
60
  const SettingsPanel_1 = __importDefault(require("./SettingsPanel"));
59
61
  const TelemetryConsentModal_1 = __importDefault(require("./TelemetryConsentModal"));
60
62
  const NpmUpdateToast_1 = __importDefault(require("./NpmUpdateToast"));
@@ -154,6 +156,8 @@ const MainScreen = () => {
154
156
  {activeTab === 'bundle' && <BundleTab_1.default />}
155
157
  {activeTab === 'performance' && <PerformanceTab_1.default />}
156
158
  {activeTab === 'crash' && <CrashTab_1.default />}
159
+ {activeTab === 'device' && <DeviceInfoTab_1.default />}
160
+ {activeTab === 'storage' && <StorageTab_1.default />}
157
161
  </react_native_1.Animated.View>
158
162
 
159
163
  {/* Detail View Layer - Rendered on top with smooth slide & spring transition */}
@@ -210,14 +214,14 @@ const MainScreen = () => {
210
214
 
211
215
  {/* NPM Version Update Toast with timeout progress bar */}
212
216
  <NpmUpdateToast_1.default />
217
+
218
+ {/* Anonymous Telemetry Consent Dialog shown ONLY when inspector is active */}
219
+ <TelemetryConsentModal_1.default />
213
220
  </react_native_1.View>
214
221
  </react_native_1.View>
215
222
  </ErrorBoundary_1.default>)}
216
223
  {hasNavigationContext && (<NavigationTracker_1.default onStateChange={setNavState}/>)}
217
224
  </react_native_1.Modal>
218
-
219
- {/* Anonymous Telemetry Consent Dialog at root viewport */}
220
- <TelemetryConsentModal_1.default />
221
225
  </>);
222
226
  };
223
227
  exports.default = MainScreen;
@@ -220,23 +220,83 @@ const NetworkTab = react_1.default.memo(() => {
220
220
  },
221
221
  ], [quickCounts]);
222
222
  const SEARCH_SCOPES = [
223
- { id: 'all', label: 'All' },
224
- { id: 'url', label: 'URL / Path' },
225
- { id: 'reqBody', label: 'Payload' },
226
- { id: 'resBody', label: 'Response' },
227
- { id: 'headers', label: 'Headers' },
223
+ {
224
+ id: 'all',
225
+ label: 'All',
226
+ icon: color => <NetworkIcons_1.LayersIcon size={9.5} color={color}/>,
227
+ },
228
+ {
229
+ id: 'url',
230
+ label: 'URL / Path',
231
+ icon: color => <NetworkIcons_1.GlobeIcon size={9.5} color={color}/>,
232
+ },
233
+ {
234
+ id: 'reqBody',
235
+ label: 'Payload',
236
+ icon: color => <NetworkIcons_1.RequestIcon size={9.5} color={color}/>,
237
+ },
238
+ {
239
+ id: 'resBody',
240
+ label: 'Response',
241
+ icon: color => <NetworkIcons_1.ResponseIcon size={9.5} color={color}/>,
242
+ },
243
+ {
244
+ id: 'headers',
245
+ label: 'Headers',
246
+ icon: color => <NetworkIcons_1.HeadersIcon size={9.5} color={color}/>,
247
+ },
228
248
  ];
229
249
  const QUICK_API_QUERY_TAGS = (0, react_1.useMemo)(() => [
230
- { label: '⚠️ Failed', query: 'is:error' },
231
- { label: '🐢 Slow >1s', query: 'slow:>1s' },
232
- { label: 'POST', query: 'm:POST' },
233
- { label: 'GET', query: 'm:GET' },
234
- { label: 'GraphQL', query: 'is:graphql' },
235
- { label: 'Axios', query: 'client:axios' },
236
- { label: '200 OK', query: 'status:200' },
237
- { label: '404', query: 'status:404' },
238
- { label: '500', query: 'status:500' },
239
- { label: '🔒 HTTPS', query: 'is:https' },
250
+ {
251
+ label: 'Failed',
252
+ query: 'is:error',
253
+ icon: (color) => <NetworkIcons_1.CircleXIcon size={9.5} color={color}/>,
254
+ },
255
+ {
256
+ label: 'Slow (>1s)',
257
+ query: 'slow:>1s',
258
+ icon: (color) => <NetworkIcons_1.ClockIcon size={9.5} color={color}/>,
259
+ },
260
+ {
261
+ label: 'POST',
262
+ query: 'm:POST',
263
+ icon: (color) => <NetworkIcons_1.RequestIcon size={9.5} color={color}/>,
264
+ },
265
+ {
266
+ label: 'GET',
267
+ query: 'm:GET',
268
+ icon: (color) => <NetworkIcons_1.ResponseIcon size={9.5} color={color}/>,
269
+ },
270
+ {
271
+ label: 'GraphQL',
272
+ query: 'is:graphql',
273
+ icon: (color) => <NetworkIcons_1.AtomIcon size={9.5} color={color}/>,
274
+ },
275
+ {
276
+ label: 'Axios',
277
+ query: 'client:axios',
278
+ icon: (color) => <NetworkIcons_1.BoltIcon size={9.5} color={color}/>,
279
+ },
280
+ {
281
+ label: '200 OK',
282
+ query: 'status:200',
283
+ icon: (color) => <NetworkIcons_1.CircleCheckIcon size={9.5} color={color}/>,
284
+ },
285
+ {
286
+ label: '404',
287
+ query: 'status:404',
288
+ icon: (color) => <NetworkIcons_1.CircleAlertIcon size={9.5} color={color}/>,
289
+ },
290
+ {
291
+ label: '500',
292
+ query: 'status:500',
293
+ icon: (color) => <NetworkIcons_1.CircleXIcon size={9.5} color={color}/>,
294
+ },
295
+ {
296
+ label: 'HTTPS',
297
+ query: 'is:https',
298
+ icon: (color) => <NetworkIcons_1.ShieldAlertIcon size={9.5} color={color}/>,
299
+ },
240
300
  ], []);
241
301
  const networkMetrics = (0, react_1.useMemo)(() => {
242
302
  if (!logs || logs.length === 0)
@@ -519,6 +579,7 @@ const NetworkTab = react_1.default.memo(() => {
519
579
  {QUICK_CHIPS.map(chip => {
520
580
  const isActive = quickFilter === chip.id;
521
581
  const chipColor = chip.color || AppColors_1.AppColors.purple;
582
+ const iconColor = isActive ? AppColors_1.AppColors.white : chipColor;
522
583
  return (<TouchableScale_1.default key={chip.id} onPress={() => {
523
584
  setQuickFilter(isActive ? 'all' : chip.id);
524
585
  }}>
@@ -537,6 +598,13 @@ const NetworkTab = react_1.default.memo(() => {
537
598
  : `${chipColor}30`,
538
599
  gap: 5,
539
600
  }}>
601
+ {chip.id === 'all' && <NetworkIcons_1.LayersIcon size={11} color={iconColor}/>}
602
+ {chip.id === 'errors' && <NetworkIcons_1.CircleXIcon size={11} color={iconColor}/>}
603
+ {chip.id === 'success' && <NetworkIcons_1.CircleCheckIcon size={11} color={iconColor}/>}
604
+ {chip.id === 'slow' && <NetworkIcons_1.ClockIcon size={11} color={iconColor}/>}
605
+ {chip.id === 'POST' && <NetworkIcons_1.RequestIcon size={11} color={iconColor}/>}
606
+ {chip.id === 'GET' && <NetworkIcons_1.ResponseIcon size={11} color={iconColor}/>}
607
+ {chip.id === 'graphql' && <NetworkIcons_1.AtomIcon size={11} color={iconColor}/>}
540
608
  <react_native_1.Text style={{
541
609
  fontFamily: AppFonts_1.AppFonts.interBold,
542
610
  fontSize: 10.5,
@@ -592,8 +660,12 @@ const NetworkTab = react_1.default.memo(() => {
592
660
  }}>
593
661
  {SEARCH_SCOPES.map(s => {
594
662
  const isSelected = searchScope === s.id;
663
+ const iconColor = isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayText;
595
664
  return (<TouchableScale_1.default key={s.id} onPress={() => setSearchScope(s.id)}>
596
665
  <react_native_1.View style={{
666
+ flexDirection: 'row',
667
+ alignItems: 'center',
668
+ gap: 4,
597
669
  paddingHorizontal: 7,
598
670
  paddingVertical: 2.5,
599
671
  borderRadius: 5,
@@ -605,6 +677,7 @@ const NetworkTab = react_1.default.memo(() => {
605
677
  ? AppColors_1.AppColors.purple
606
678
  : AppColors_1.AppColors.grayBorderSecondary,
607
679
  }}>
680
+ {s.icon(iconColor)}
608
681
  <react_native_1.Text style={{
609
682
  fontFamily: AppFonts_1.AppFonts.interBold,
610
683
  fontSize: 9.5,
@@ -638,6 +711,9 @@ const NetworkTab = react_1.default.memo(() => {
638
711
  }
639
712
  }}>
640
713
  <react_native_1.View style={{
714
+ flexDirection: 'row',
715
+ alignItems: 'center',
716
+ gap: 4,
641
717
  paddingHorizontal: 7,
642
718
  paddingVertical: 2.5,
643
719
  borderRadius: 5,
@@ -649,6 +725,7 @@ const NetworkTab = react_1.default.memo(() => {
649
725
  ? AppColors_1.AppColors.purple
650
726
  : `${AppColors_1.AppColors.purple}30`,
651
727
  }}>
728
+ {item.icon(isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.purple)}
652
729
  <react_native_1.Text style={{
653
730
  fontFamily: AppFonts_1.AppFonts.interBold,
654
731
  fontSize: 9.5,
@@ -411,18 +411,45 @@ const PerformanceTab = react_1.default.memo(() => {
411
411
  <react_native_1.View style={perfStyles.categoryScrollWrapper}>
412
412
  <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} style={perfStyles.categoryScrollView} contentContainerStyle={perfStyles.categoryScroll}>
413
413
  {[
414
- { key: 'ALL', label: t('performance.catAll') },
415
- { key: 'JANKY', label: t('performance.catJanky') },
416
- { key: 'NAVIGATION', label: t('performance.catNavigation') },
417
- { key: 'RENDER', label: t('performance.catRender') },
418
- { key: 'MEMORY', label: t('performance.catMemory') },
419
- { key: 'IO', label: t('performance.catIo') },
414
+ {
415
+ key: 'ALL',
416
+ label: t('performance.catAll'),
417
+ icon: (color) => <NetworkIcons_1.PerformanceIcon size={12} color={color}/>,
418
+ },
419
+ {
420
+ key: 'JANKY',
421
+ label: t('performance.catJanky'),
422
+ icon: (color) => <NetworkIcons_1.CircleAlertIcon size={12} color={color}/>,
423
+ },
424
+ {
425
+ key: 'NAVIGATION',
426
+ label: t('performance.catNavigation'),
427
+ icon: (color) => <NetworkIcons_1.MapIcon size={12} color={color}/>,
428
+ },
429
+ {
430
+ key: 'RENDER',
431
+ label: t('performance.catRender'),
432
+ icon: (color) => <NetworkIcons_1.AtomIcon size={12} color={color}/>,
433
+ },
434
+ {
435
+ key: 'MEMORY',
436
+ label: t('performance.catMemory'),
437
+ icon: (color) => <NetworkIcons_1.BrainIcon size={12} color={color}/>,
438
+ },
439
+ {
440
+ key: 'IO',
441
+ label: t('performance.catIo'),
442
+ icon: (color) => <NetworkIcons_1.GlobeIcon size={12} color={color}/>,
443
+ },
420
444
  ].map(cat => {
421
445
  const isSelected = filterCategory === cat.key;
446
+ const iconColor = isSelected ? AppColors_1.AppColors.white : AppColors_1.AppColors.grayTextWeak;
422
447
  return (<TouchableScale_1.default key={cat.key} onPress={() => setFilterCategory(cat.key)} style={[
423
448
  perfStyles.categoryChip,
424
449
  isSelected && perfStyles.categoryChipActive,
450
+ { flexDirection: 'row', alignItems: 'center', gap: 5 },
425
451
  ]}>
452
+ {cat.icon(iconColor)}
426
453
  <react_native_1.Text style={[
427
454
  perfStyles.categoryChipText,
428
455
  isSelected && perfStyles.categoryChipTextActive,
@@ -844,12 +871,13 @@ const PerformanceTab = react_1.default.memo(() => {
844
871
  </react_native_1.View>
845
872
 
846
873
  {/* Bottleneck Thread Tag */}
847
- {event.bottleneckThread && (<react_native_1.View style={perfStyles.bottleneckTag}>
874
+ {event.bottleneckThread && (<react_native_1.View style={[perfStyles.bottleneckTag, { flexDirection: 'row', alignItems: 'center', gap: 3 }]}>
875
+ {event.bottleneckThread === 'JS Thread' && (<NetworkIcons_1.BoltIcon size={10} color={AppColors_1.AppColors.warningIconGold}/>)}
848
876
  <react_native_1.Text style={perfStyles.bottleneckTagText}>
849
877
  {event.bottleneckThread === 'JS Thread'
850
- ? `⚡ ${t('performance.jsBound')}`
878
+ ? t('performance.jsBound')
851
879
  : event.bottleneckThread === 'UI Thread'
852
- ? `🎨 ${t('performance.uiBound')}`
880
+ ? t('performance.uiBound')
853
881
  : t('performance.balanced')}
854
882
  </react_native_1.Text>
855
883
  </react_native_1.View>)}
@@ -857,9 +885,7 @@ const PerformanceTab = react_1.default.memo(() => {
857
885
 
858
886
  <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6 }}>
859
887
  <CopyButton_1.default value={() => event} label={t('common.copyJson')}/>
860
- <react_native_1.Text style={perfStyles.expandChevron}>
861
- {isExpanded ? '▲' : '▼'}
862
- </react_native_1.Text>
888
+ <NetworkIcons_1.ChevronIcon isExpanded={isExpanded} size={14} color={AppColors_1.AppColors.grayTextWeak}/>
863
889
  </react_native_1.View>
864
890
  </react_native_1.View>
865
891