react-native-inapp-inspector 2.3.12 → 2.3.13

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 (54) hide show
  1. package/dist/commonjs/components/HeadersSection.js +3 -2
  2. package/dist/commonjs/components/Inspector/BundleTab.js +4 -4
  3. package/dist/commonjs/components/Inspector/DebuggingTab.js +26 -14
  4. package/dist/commonjs/components/Inspector/NetworkDetail.js +2 -2
  5. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +18 -12
  6. package/dist/commonjs/components/Inspector/StorageTab.js +10 -4
  7. package/dist/commonjs/components/JsonViewer.js +3 -2
  8. package/dist/commonjs/components/NetworkIcons.d.ts +4 -1
  9. package/dist/commonjs/components/NetworkIcons.js +26 -3
  10. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  11. package/dist/commonjs/constants/telemetryConfig.js +3 -3
  12. package/dist/commonjs/constants/version.d.ts +1 -1
  13. package/dist/commonjs/constants/version.js +1 -1
  14. package/dist/esm/components/HeadersSection.js +3 -2
  15. package/dist/esm/components/Inspector/BundleTab.js +5 -5
  16. package/dist/esm/components/Inspector/DebuggingTab.js +27 -15
  17. package/dist/esm/components/Inspector/NetworkDetail.js +2 -2
  18. package/dist/esm/components/Inspector/NetworkFilterModal.js +19 -13
  19. package/dist/esm/components/Inspector/StorageTab.js +11 -5
  20. package/dist/esm/components/JsonViewer.js +4 -3
  21. package/dist/esm/components/NetworkIcons.d.ts +4 -1
  22. package/dist/esm/components/NetworkIcons.js +22 -2
  23. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  24. package/dist/esm/constants/telemetryConfig.js +3 -3
  25. package/dist/esm/constants/version.d.ts +1 -1
  26. package/dist/esm/constants/version.js +1 -1
  27. package/package.json +1 -1
  28. package/src/components/HeadersSection.tsx +7 -2
  29. package/src/components/Inspector/BundleTab.tsx +9 -4
  30. package/src/components/Inspector/DebuggingTab.tsx +34 -15
  31. package/src/components/Inspector/NetworkDetail.tsx +2 -2
  32. package/src/components/Inspector/NetworkFilterModal.tsx +32 -12
  33. package/src/components/Inspector/StorageTab.tsx +15 -4
  34. package/src/components/JsonViewer.tsx +8 -3
  35. package/src/components/NetworkIcons.tsx +71 -1
  36. package/src/constants/telemetryConfig.ts +3 -5
  37. package/src/constants/version.ts +1 -1
  38. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  39. package/android/.gradle/8.9/checksums/md5-checksums.bin +0 -0
  40. package/android/.gradle/8.9/checksums/sha1-checksums.bin +0 -0
  41. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  42. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  43. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  44. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  45. package/android/.gradle/8.9/gc.properties +0 -0
  46. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  47. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  48. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  49. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  50. package/android/.gradle/9.2.0/gc.properties +0 -0
  51. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  52. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  53. package/android/.gradle/vcs-1/gc.properties +0 -0
  54. package/android/build/reports/problems/problems-report.html +0 -659
@@ -80,10 +80,11 @@ const HeaderRow = react_1.default.memo(function HeaderRow({ headerKey, value, is
80
80
  <react_native_1.Text style={styles_1.default.htValue} selectable numberOfLines={expanded ? undefined : 3}>
81
81
  {value}
82
82
  </react_native_1.Text>
83
- {isLong && (<react_native_1.View style={styles_1.default.htExpandRow}>
83
+ {isLong && (<react_native_1.View style={[styles_1.default.htExpandRow, { flexDirection: 'row', alignItems: 'center', gap: 4 }]}>
84
84
  <react_native_1.Text style={styles_1.default.htExpandText}>
85
- {expanded ? 'less' : 'more'}
85
+ {expanded ? 'less' : 'more'}
86
86
  </react_native_1.Text>
87
+ <NetworkIcons_1.ChevronIcon direction={expanded ? 'up' : 'down'} color={AppColors_1.AppColors.purple} size={10}/>
87
88
  </react_native_1.View>)}
88
89
  </react_native_1.Pressable>
89
90
  <TouchableScale_1.default onPress={() => (0, helpers_1.copyToClipboard)(value, headerKey)} hitSlop={8} style={styles_1.default.htCopyBtn}>
@@ -418,9 +418,9 @@ const BundleTreeNodeView = ({ node, level, search, totalBundleKb, expandedFolder
418
418
  ? `${(node.sizeKb / 1024).toFixed(2)} MB`
419
419
  : `${node.sizeKb} KB`}`} accessibilityState={{ expanded: isExpanded }} accessibilityHint="Double tap to expand or collapse folder" onPress={() => toggleFolder(node.fullPath)} style={[bundleStyles.treeFolderRow, { paddingLeft: indentLeft }]}>
420
420
  <react_native_1.View style={bundleStyles.treeRowLeft}>
421
- <react_native_1.Text style={bundleStyles.treeChevron}>
422
- {isCollapsed ? '' : ''}
423
- </react_native_1.Text>
421
+ <react_native_1.View style={{ marginRight: 4 }}>
422
+ <NetworkIcons_1.ChevronIcon direction={isCollapsed ? 'right' : 'down'} size={12} color={AppColors_1.AppColors.grayTextWeak}/>
423
+ </react_native_1.View>
424
424
  {isCollapsed ? (<NetworkIcons_1.FolderIcon color={AppColors_1.AppColors.amber500} size={15}/>) : (<NetworkIcons_1.FolderOpenIcon color={AppColors_1.AppColors.amber500} size={15}/>)}
425
425
  <HighlightText_1.default text={node.name + '/'} search={search} style={bundleStyles.treeFolderName} highlightStyle={bundleStyles.searchHighlight}/>
426
426
  <react_native_1.View style={bundleStyles.treeCountBadge}>
@@ -876,7 +876,7 @@ const BundleTab = react_1.default.memo(() => {
876
876
  letterSpacing: 0.3,
877
877
  textTransform: 'uppercase',
878
878
  }}>
879
- Live Metro URL
879
+ Live Metro URL
880
880
  </react_native_1.Text>
881
881
  </react_native_1.View>
882
882
  <react_native_1.Text style={{
@@ -164,10 +164,10 @@ const DebuggingTab = () => {
164
164
  </react_native_1.View>
165
165
  <react_native_1.Text style={styles.serverSubtitle}>
166
166
  {activePortInfo?.status === 'active'
167
- ? `🟢 Active & Bundling (${activePortInfo.latencyMs}ms)`
167
+ ? `Active & Bundling (${activePortInfo.latencyMs}ms)`
168
168
  : activePortInfo?.status === 'checking'
169
- ? '🟡 Probing Metro Ports...'
170
- : '🔴 Standby / Select active port'}
169
+ ? 'Probing Metro Ports...'
170
+ : 'Standby / Select active port'}
171
171
  </react_native_1.Text>
172
172
  </react_native_1.View>
173
173
  </react_native_1.View>
@@ -232,9 +232,12 @@ const DebuggingTab = () => {
232
232
  <react_native_1.TextInput style={styles.input} value={hostIp} onChangeText={setHostIp} placeholder="192.168.1.15" placeholderTextColor={AppColors_1.AppColors.grayTextWeak} autoCapitalize="none" autoCorrect={false}/>
233
233
  <react_native_1.Text style={styles.inputSuffix}>:{selectedPort}</react_native_1.Text>
234
234
  </react_native_1.View>
235
- <react_native_1.Text style={styles.inputHint}>
236
- 💡 Ensure your physical Android device and Mac are connected to the same Wi-Fi network.
237
- </react_native_1.Text>
235
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, marginTop: 6 }}>
236
+ <NetworkIcons_1.InfoCircleIcon size={13} color={AppColors_1.AppColors.grayTextWeak}/>
237
+ <react_native_1.Text style={[styles.inputHint, { marginTop: 0, flex: 1 }]}>
238
+ Ensure your physical Android device and Mac are connected to the same Wi-Fi network.
239
+ </react_native_1.Text>
240
+ </react_native_1.View>
238
241
  </react_native_1.View>
239
242
 
240
243
 
@@ -286,13 +289,16 @@ const DebuggingTab = () => {
286
289
  <QRCodeView_1.default value={currentQrValue} size={190} color={AppColors_1.AppColors.primaryBlack} backgroundColor={AppColors_1.AppColors.white}/>
287
290
 
288
291
  <react_native_1.View style={styles.qrInfoBox}>
289
- <react_native_1.Text style={styles.qrTargetTitle}>
290
- {activeQrTab === 'apk'
291
- ? '📦 Direct APK Download URL'
292
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, marginBottom: 2 }}>
293
+ {activeQrTab === 'apk' ? (<NetworkIcons_1.PackageIcon size={14} color={AppColors_1.AppColors.purple}/>) : activeQrTab === 'host' ? (<NetworkIcons_1.SmartphoneIcon size={14} color={AppColors_1.AppColors.purple}/>) : (<NetworkIcons_1.BoltIcon size={14} color={AppColors_1.AppColors.amber500}/>)}
294
+ <react_native_1.Text style={styles.qrTargetTitle}>
295
+ {activeQrTab === 'apk'
296
+ ? 'Direct APK Download URL'
292
297
  : activeQrTab === 'host'
293
- ? '📱 Dev Settings Bundle Host'
294
- : 'Live Metro Fast-Refresh Endpoint'}
295
- </react_native_1.Text>
298
+ ? 'Dev Settings Bundle Host'
299
+ : 'Live Metro Fast-Refresh Endpoint'}
300
+ </react_native_1.Text>
301
+ </react_native_1.View>
296
302
  <react_native_1.Text style={styles.qrTargetUrl} numberOfLines={2} ellipsizeMode="middle">
297
303
  {currentQrValue}
298
304
  </react_native_1.Text>
@@ -318,7 +324,10 @@ const DebuggingTab = () => {
318
324
 
319
325
 
320
326
  <react_native_1.View style={styles.guideCard}>
321
- <react_native_1.Text style={styles.guideHeading}>📱 HOW TO CONNECT ANDROID DEVICE:</react_native_1.Text>
327
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, marginBottom: 12 }}>
328
+ <NetworkIcons_1.SmartphoneIcon size={15} color={AppColors_1.AppColors.primaryLight}/>
329
+ <react_native_1.Text style={[styles.guideHeading, { marginBottom: 0 }]}>HOW TO CONNECT ANDROID DEVICE:</react_native_1.Text>
330
+ </react_native_1.View>
322
331
 
323
332
  <react_native_1.View style={styles.stepRow}>
324
333
  <react_native_1.View style={styles.stepNumberBadge}>
@@ -349,7 +358,10 @@ const DebuggingTab = () => {
349
358
  <react_native_1.Text style={styles.stepNumberText}>3</react_native_1.Text>
350
359
  </react_native_1.View>
351
360
  <react_native_1.View style={{ flex: 1 }}>
352
- <react_native_1.Text style={styles.stepTitle}>Simultaneous Live Fast-Refresh ⚡</react_native_1.Text>
361
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
362
+ <react_native_1.Text style={styles.stepTitle}>Simultaneous Live Fast-Refresh</react_native_1.Text>
363
+ <NetworkIcons_1.BoltIcon size={13} color={AppColors_1.AppColors.amber500}/>
364
+ </react_native_1.View>
353
365
  <react_native_1.Text style={styles.stepDesc}>
354
366
  Any changes saved in VS Code will immediately update <react_native_1.Text style={{ fontWeight: '700' }}>both the iOS Simulator and physical Android phone</react_native_1.Text> in real-time!
355
367
  </react_native_1.Text>
@@ -303,7 +303,7 @@ const NetworkDetail = react_1.default.memo(() => {
303
303
  letterSpacing: 0.4,
304
304
  textTransform: 'uppercase',
305
305
  }}>
306
- ENDPOINT URL
306
+ ENDPOINT URL
307
307
  </react_native_1.Text>
308
308
  </react_native_1.View>
309
309
 
@@ -338,7 +338,7 @@ const NetworkDetail = react_1.default.memo(() => {
338
338
  fontSize: 9,
339
339
  color: AppColors_1.AppColors.sky600,
340
340
  }}>
341
- Open
341
+ Open
342
342
  </react_native_1.Text>
343
343
  </react_native_1.View>
344
344
  </react_native_1.View>
@@ -370,12 +370,13 @@ const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQuery =
370
370
  <react_native_1.Text style={styles.sectionTitle}>LATENCY & SPEED</react_native_1.Text>
371
371
  <react_native_1.View style={styles.chipsWrap}>
372
372
  {[
373
- { key: 'all', label: 'All Speeds', color: AppColors_1.AppColors.purple },
374
- { key: 'fast', label: 'Fast (<200ms)', color: AppColors_1.AppColors.greenColor, count: counts.fastCount },
375
- { key: 'normal', label: '⏱️ Normal (200-500ms)', color: AppColors_1.AppColors.skyBlue, count: counts.normalCount },
376
- { key: 'slow', label: '⚠️ Slow (>500ms)', color: AppColors_1.AppColors.errorColor, count: counts.slowCount },
373
+ { key: 'all', label: 'All Speeds', color: AppColors_1.AppColors.purple, icon: NetworkIcons_1.LayersIcon },
374
+ { key: 'fast', label: 'Fast (<200ms)', color: AppColors_1.AppColors.greenColor, icon: NetworkIcons_1.BoltIcon, count: counts.fastCount },
375
+ { key: 'normal', label: 'Normal (200-500ms)', color: AppColors_1.AppColors.skyBlue, icon: NetworkIcons_1.ClockIcon, count: counts.normalCount },
376
+ { key: 'slow', label: 'Slow (>500ms)', color: AppColors_1.AppColors.errorColor, icon: NetworkIcons_1.CircleAlertIcon, count: counts.slowCount },
377
377
  ].map(item => {
378
378
  const isSelected = draft.latency === item.key;
379
+ const IconComp = item.icon;
379
380
  return (<react_native_1.TouchableOpacity key={item.key} activeOpacity={0.7} onPress={() => setDraft(prev => ({ ...prev, latency: item.key }))} style={[
380
381
  styles.chip,
381
382
  isSelected && {
@@ -383,6 +384,7 @@ const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQuery =
383
384
  borderColor: item.color,
384
385
  },
385
386
  ]}>
387
+ <IconComp size={13} color={isSelected ? item.color : AppColors_1.AppColors.grayTextWeak}/>
386
388
  <react_native_1.Text style={[
387
389
  styles.chipLabel,
388
390
  isSelected && { color: item.color, fontFamily: AppFonts_1.AppFonts.interBold },
@@ -404,11 +406,12 @@ const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQuery =
404
406
  <react_native_1.Text style={styles.sectionTitle}>PROTOCOL</react_native_1.Text>
405
407
  <react_native_1.View style={styles.chipsWrap}>
406
408
  {[
407
- { key: 'all', label: 'All Protocols', color: AppColors_1.AppColors.purple },
408
- { key: 'https', label: '🔒 HTTPS Secure', color: AppColors_1.AppColors.mintGreenText, count: counts.httpsCount },
409
- { key: 'http', label: '🔓 HTTP Insecure', color: AppColors_1.AppColors.amber700, count: counts.httpCount },
409
+ { key: 'all', label: 'All Protocols', color: AppColors_1.AppColors.purple, icon: NetworkIcons_1.GlobeIcon },
410
+ { key: 'https', label: 'HTTPS Secure', color: AppColors_1.AppColors.mintGreenText, icon: NetworkIcons_1.LockIcon, count: counts.httpsCount },
411
+ { key: 'http', label: 'HTTP Insecure', color: AppColors_1.AppColors.amber700, icon: NetworkIcons_1.UnlockIcon, count: counts.httpCount },
410
412
  ].map(item => {
411
413
  const isSelected = draft.protocol === item.key;
414
+ const IconComp = item.icon;
412
415
  return (<react_native_1.TouchableOpacity key={item.key} activeOpacity={0.7} onPress={() => setDraft(prev => ({ ...prev, protocol: item.key }))} style={[
413
416
  styles.chip,
414
417
  isSelected && {
@@ -416,6 +419,7 @@ const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQuery =
416
419
  borderColor: item.color,
417
420
  },
418
421
  ]}>
422
+ <IconComp size={13} color={isSelected ? item.color : AppColors_1.AppColors.grayTextWeak}/>
419
423
  <react_native_1.Text style={[
420
424
  styles.chipLabel,
421
425
  isSelected && { color: item.color, fontFamily: AppFonts_1.AppFonts.interBold },
@@ -437,13 +441,14 @@ const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQuery =
437
441
  <react_native_1.Text style={styles.sectionTitle}>SORT BY</react_native_1.Text>
438
442
  <react_native_1.View style={styles.chipsWrap}>
439
443
  {[
440
- { key: 'time_desc', label: '⏱️ Newest First (Default)' },
441
- { key: 'time_asc', label: 'Oldest First' },
442
- { key: 'duration_desc', label: '🐢 Slowest Response' },
443
- { key: 'duration_asc', label: '🚀 Fastest Response' },
444
- { key: 'size_desc', label: '📦 Largest Response Size' },
444
+ { key: 'time_desc', label: 'Newest First (Default)', icon: NetworkIcons_1.ClockIcon },
445
+ { key: 'time_asc', label: 'Oldest First', icon: NetworkIcons_1.HourglassIcon },
446
+ { key: 'duration_desc', label: 'Slowest Response', icon: NetworkIcons_1.TurtleIcon },
447
+ { key: 'duration_asc', label: 'Fastest Response', icon: NetworkIcons_1.RocketIcon },
448
+ { key: 'size_desc', label: 'Largest Response Size', icon: NetworkIcons_1.PackageIcon },
445
449
  ].map(item => {
446
450
  const isSelected = draft.sortBy === item.key;
451
+ const IconComp = item.icon;
447
452
  return (<react_native_1.TouchableOpacity key={item.key} activeOpacity={0.7} onPress={() => setDraft(prev => ({ ...prev, sortBy: item.key }))} style={[
448
453
  styles.chip,
449
454
  isSelected && {
@@ -451,6 +456,7 @@ const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQuery =
451
456
  borderColor: AppColors_1.AppColors.purple,
452
457
  },
453
458
  ]}>
459
+ <IconComp size={13} color={isSelected ? AppColors_1.AppColors.purple : AppColors_1.AppColors.grayTextWeak}/>
454
460
  <react_native_1.Text style={[
455
461
  styles.chipLabel,
456
462
  isSelected && { color: AppColors_1.AppColors.purple, fontFamily: AppFonts_1.AppFonts.interBold },
@@ -127,9 +127,12 @@ const StorageEntryCard = react_1.default.memo(function StorageEntryCard({ entry,
127
127
  <react_native_1.Text style={styles.valuePreviewText} numberOfLines={isExpanded ? undefined : 3} selectable={isExpanded}>
128
128
  {displayValue}
129
129
  </react_native_1.Text>
130
- {entry.value.length > 80 && (<react_native_1.Text style={styles.expandHint}>
131
- {isExpanded ? '▲ Collapse' : '▼ Expand'}
132
- </react_native_1.Text>)}
130
+ {entry.value.length > 80 && (<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 4, marginTop: 4 }}>
131
+ <react_native_1.Text style={styles.expandHint}>
132
+ {isExpanded ? 'Collapse' : 'Expand'}
133
+ </react_native_1.Text>
134
+ <NetworkIcons_1.ChevronIcon direction={isExpanded ? 'up' : 'down'} size={10} color={AppColors_1.AppColors.purple}/>
135
+ </react_native_1.View>)}
133
136
  </TouchableScale_1.default>
134
137
  </react_native_1.View>);
135
138
  });
@@ -504,7 +507,10 @@ exports.StorageTab = react_1.default.memo(() => {
504
507
  : editType === 'boolean'
505
508
  ? 'true'
506
509
  : 'String value...'} placeholderTextColor={AppColors_1.AppColors.grayTextWeak} style={[styles.textInput, styles.textAreaInput]} multiline textAlignVertical="top" autoCapitalize="none"/>
507
- {jsonError && (<react_native_1.Text style={styles.errorText}>⚠️ {jsonError}</react_native_1.Text>)}
510
+ {jsonError && (<react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, marginTop: 4 }}>
511
+ <NetworkIcons_1.WarningTriangleIcon size={12} color={AppColors_1.AppColors.errorColor}/>
512
+ <react_native_1.Text style={styles.errorText}>{jsonError}</react_native_1.Text>
513
+ </react_native_1.View>)}
508
514
  </react_native_1.View>
509
515
 
510
516
 
@@ -82,10 +82,11 @@ const JsonTableRow = react_1.default.memo(({ itemKey, val, search, }) => {
82
82
  localStyles.tableCellValue,
83
83
  isObject && localStyles.tableCellRawCode,
84
84
  ]} highlightStyle={localStyles.highlight} numberOfLines={expanded ? undefined : 3} selectable={true}/>
85
- {isMultiline && (<react_native_1.TouchableOpacity onPress={() => setExpanded(prev => !prev)} hitSlop={6} style={localStyles.showMoreBtn}>
85
+ {isMultiline && (<react_native_1.TouchableOpacity onPress={() => setExpanded(prev => !prev)} hitSlop={6} style={[localStyles.showMoreBtn, { flexDirection: 'row', alignItems: 'center', gap: 4 }]}>
86
86
  <react_native_1.Text style={localStyles.showMoreText}>
87
- {expanded ? 'Show less' : 'Show more'}
87
+ {expanded ? 'Show less' : 'Show more'}
88
88
  </react_native_1.Text>
89
+ <NetworkIcons_1.ChevronIcon direction={expanded ? 'up' : 'down'} size={10} color={AppColors_1.AppColors.purple}/>
89
90
  </react_native_1.TouchableOpacity>)}
90
91
  </react_native_1.View>
91
92
  </react_native_1.View>);
@@ -37,7 +37,7 @@ export declare const SignalIcon: ({ color, size, }: IconProps) => React.JSX.Elem
37
37
  export declare const DiffIcon: ({ color, size }: IconProps) => React.JSX.Element;
38
38
  export declare const GlobeIcon: ({ color, size }: IconProps) => React.JSX.Element;
39
39
  export declare const SortArrowIcon: ({ color, size, direction, }: IconProps) => React.JSX.Element;
40
- export declare const ChevronIcon: ({ color, size, }: IconProps) => React.JSX.Element;
40
+ export declare const ChevronIcon: ({ color, size, direction, }: IconProps) => React.JSX.Element;
41
41
  export declare const FilterIcon: ({ color, size, }: IconProps) => React.JSX.Element;
42
42
  export declare const DownloadIcon: ({ color, size, }: IconProps) => React.JSX.Element;
43
43
  export declare const CloseWhite: ({ color, size }: IconProps) => React.JSX.Element;
@@ -135,3 +135,6 @@ export declare const PencilIcon: ({ color, size, }: IconProps) => React.JSX.Elem
135
135
  export declare const PlusIcon: ({ color, size, }: IconProps) => React.JSX.Element;
136
136
  export declare const LockIcon: ({ color, size, }: IconProps) => React.JSX.Element;
137
137
  export declare const QrCodeIcon: ({ color, size, }: IconProps) => React.JSX.Element;
138
+ export declare const UnlockIcon: ({ color, size, }: IconProps) => React.JSX.Element;
139
+ export declare const RocketIcon: ({ color, size, }: IconProps) => React.JSX.Element;
140
+ export declare const TurtleIcon: ({ color, size, }: IconProps) => React.JSX.Element;
@@ -38,7 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.InfoCircleIcon = exports.UserIcon = exports.LayersIcon = exports.WipeIcon = exports.FolderIcon = exports.SettingsIcon = exports.EyeIcon = exports.JsIcon = exports.CssIcon = exports.HtmlIcon = exports.BrandSquareIcon = exports.BrandCircleIcon = exports.MoonIcon = exports.SunIcon = exports.DebugIcon = exports.InsightsIcon = exports.AnalyticsIcon = exports.WhiteBackNavigation = exports.CloseWhite = exports.DownloadIcon = exports.FilterIcon = exports.ChevronIcon = exports.SortArrowIcon = exports.GlobeIcon = exports.DiffIcon = exports.SignalIcon = exports.ExportIcon = exports.HeaderPauseIcon = exports.TrashIcon = exports.FailIcon = exports.CircleAlertIcon = exports.CircleXIcon = exports.CircleCheckIcon = exports.CheckIcon = exports.TerminalIcon = exports.FetchIcon = exports.CopyIcon = exports.HeadersIcon = exports.ResponseIcon = exports.RequestIcon = exports.SizeIcon = exports.StatusIcon = exports.CalendarIcon = exports.ClockIcon = exports.ClearIcon = exports.SearchIcon = exports.ExpandCollapseIcon = exports.ScreenIcon = exports.MapPinIcon = exports.EmptyRadarIcon = void 0;
40
40
  exports.DiagnosticsIcon = exports.StackTraceIcon = exports.LayoutIcon = exports.ChipIcon = exports.SkullIcon = exports.ShieldAlertIcon = exports.CrashIcon = exports.UserCheckIcon = exports.TargetGoalIcon = exports.RepeatIcon = exports.PinIcon = exports.HourglassIcon = exports.FlameIcon = exports.CodeBracketsIcon = exports.AndroidIcon = exports.AppleIcon = exports.LinkChainIcon = exports.GitHubIcon = exports.PackageBoxIcon = exports.ExternalLinkIcon = exports.MoneyIcon = exports.CartIcon = exports.TextAaIcon = exports.BrainIcon = exports.AtomIcon = exports.MapIcon = exports.SparkleIcon = exports.LightbulbIcon = exports.DocIcon = exports.FolderOpenIcon = exports.BanIcon = exports.BoltIcon = exports.PerformanceIcon = exports.ReduxIcon = exports.MetadataIcon = exports.StorageIcon = exports.RefreshCcwIcon = exports.TimelineIcon = exports.LiveStateIcon = exports.BundleIcon = exports.ForwardChevronIcon = exports.PackageIcon = exports.TableIcon = exports.RawIcon = exports.PrettyIcon = exports.SortIcon = exports.MotionIcon = exports.TrendingUpIcon = exports.ErrorCircleIcon = exports.WarningTriangleIcon = void 0;
41
- exports.QrCodeIcon = exports.LockIcon = exports.PlusIcon = exports.PencilIcon = exports.DatabaseIcon = exports.ShieldCheckIcon = exports.WifiIcon = exports.CpuIcon = exports.ChevronDownIcon = exports.ResetIcon = exports.NpmIcon = exports.TagIcon = exports.BugIcon = exports.AlertTriangleIcon = exports.SmartphoneIcon = exports.KeyIcon = exports.BarChartIcon = exports.DiceIcon = exports.ZapIcon = exports.FlaskIcon = exports.LoadingSpinnerIcon = exports.ListenerIcon = exports.AllFramesIcon = exports.AppFramesIcon = exports.RawJsonIcon = exports.TrailIcon = void 0;
41
+ exports.TurtleIcon = exports.RocketIcon = exports.UnlockIcon = exports.QrCodeIcon = exports.LockIcon = exports.PlusIcon = exports.PencilIcon = exports.DatabaseIcon = exports.ShieldCheckIcon = exports.WifiIcon = exports.CpuIcon = exports.ChevronDownIcon = exports.ResetIcon = exports.NpmIcon = exports.TagIcon = exports.BugIcon = exports.AlertTriangleIcon = exports.SmartphoneIcon = exports.KeyIcon = exports.BarChartIcon = exports.DiceIcon = exports.ZapIcon = exports.FlaskIcon = exports.LoadingSpinnerIcon = exports.ListenerIcon = exports.AllFramesIcon = exports.AppFramesIcon = exports.RawJsonIcon = exports.TrailIcon = void 0;
42
42
  const react_1 = __importDefault(require("react"));
43
43
  const react_native_svg_1 = __importStar(require("react-native-svg"));
44
44
  const AppColors_1 = require("../styles/AppColors");
@@ -236,9 +236,16 @@ const SortArrowIcon = ({ color = AppColors_1.AppColors.primaryLight, size = 20,
236
236
  </react_native_svg_1.default>);
237
237
  };
238
238
  exports.SortArrowIcon = SortArrowIcon;
239
- const ChevronIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => {
239
+ const ChevronIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, direction = 'down', }) => {
240
+ let path = 'M6 9l6 6 6-6';
241
+ if (direction === 'up')
242
+ path = 'M18 15l-6-6-6 6';
243
+ else if (direction === 'right')
244
+ path = 'M9 18l6-6-6-6';
245
+ else if (direction === 'left')
246
+ path = 'M15 18l-6-6 6-6';
240
247
  return (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
241
- <react_native_svg_1.Path d="M6 9l6 6 6-6" stroke={color} strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"/>
248
+ <react_native_svg_1.Path d={path} stroke={color} strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round"/>
242
249
  </react_native_svg_1.default>);
243
250
  };
244
251
  exports.ChevronIcon = ChevronIcon;
@@ -906,3 +913,19 @@ const QrCodeIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, })
906
913
  <react_native_svg_1.Path d="M14 14h3v3h-3zM18 18h3v3h-3zM14 19h3v2h-3zM19 14h2v3h-2z" fill={color}/>
907
914
  </react_native_svg_1.default>);
908
915
  exports.QrCodeIcon = QrCodeIcon;
916
+ const UnlockIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
917
+ <react_native_svg_1.Rect x="3" y="11" width="18" height="11" rx="2" ry="2" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
918
+ <react_native_svg_1.Path d="M7 11V7a5 5 0 0 1 9.9-1" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
919
+ </react_native_svg_1.default>);
920
+ exports.UnlockIcon = UnlockIcon;
921
+ const RocketIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
922
+ <react_native_svg_1.Path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09zM12 15l-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6.05 11a22.35 22.35 0 0 1-3.95 2z" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
923
+ <react_native_svg_1.Path d="M9 12l-4 4M15 6l-3 3" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
924
+ </react_native_svg_1.default>);
925
+ exports.RocketIcon = RocketIcon;
926
+ const TurtleIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
927
+ <react_native_svg_1.Ellipse cx="12" cy="14" rx="7" ry="5" stroke={color} strokeWidth="2"/>
928
+ <react_native_svg_1.Circle cx="12" cy="6" r="3" stroke={color} strokeWidth="2"/>
929
+ <react_native_svg_1.Path d="M5 12l-2-2M19 12l2-2M6 18l-2 2M18 18l2 2" stroke={color} strokeWidth="2" strokeLinecap="round"/>
930
+ </react_native_svg_1.default>);
931
+ exports.TurtleIcon = TurtleIcon;
@@ -1,3 +1,3 @@
1
- export declare const ENC_MID = "df8ace0290a695bd05986213";
2
- export declare const ENC_SEC = "db93cb0186b1f7bb0ba63a0d0a64997586849455ce37";
3
- export declare const TELEMETRY_SALT = "rn-inapp-inspector-telemetry-v1";
1
+ export declare const ENC_MID = "";
2
+ export declare const ENC_SEC = "";
3
+ export declare const TELEMETRY_SALT = "";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TELEMETRY_SALT = exports.ENC_SEC = exports.ENC_MID = void 0;
4
- exports.ENC_MID = 'df8ace0290a695bd05986213';
5
- exports.ENC_SEC = 'db93cb0186b1f7bb0ba63a0d0a64997586849455ce37';
6
- exports.TELEMETRY_SALT = 'rn-inapp-inspector-telemetry-v1';
4
+ exports.ENC_MID = '';
5
+ exports.ENC_SEC = '';
6
+ exports.TELEMETRY_SALT = '';
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "2.3.12";
1
+ export declare const LIB_VERSION = "2.3.13";
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LIB_VERSION = void 0;
4
- exports.LIB_VERSION = '2.3.12';
4
+ exports.LIB_VERSION = '2.3.13';
@@ -42,10 +42,11 @@ const HeaderRow = React.memo(function HeaderRow({ headerKey, value, isLast, inde
42
42
  <Text style={styles.htValue} selectable numberOfLines={expanded ? undefined : 3}>
43
43
  {value}
44
44
  </Text>
45
- {isLong && (<View style={styles.htExpandRow}>
45
+ {isLong && (<View style={[styles.htExpandRow, { flexDirection: 'row', alignItems: 'center', gap: 4 }]}>
46
46
  <Text style={styles.htExpandText}>
47
- {expanded ? 'less' : 'more'}
47
+ {expanded ? 'less' : 'more'}
48
48
  </Text>
49
+ <ChevronIcon direction={expanded ? 'up' : 'down'} color={AppColors.purple} size={10}/>
49
50
  </View>)}
50
51
  </Pressable>
51
52
  <TouchableScale onPress={() => copyToClipboard(value, headerKey)} hitSlop={8} style={styles.htCopyBtn}>
@@ -8,7 +8,7 @@ import FeatureUnderDevNotice from './FeatureUnderDevNotice';
8
8
  import { AppColors } from '../../styles/AppColors';
9
9
  import { AppFonts } from '../../styles/AppFonts';
10
10
  import { copyToClipboard } from '../../helpers';
11
- import { PackageIcon, SearchIcon, ClearIcon, CircleAlertIcon, LayersIcon, TimelineIcon, LiveStateIcon, StorageIcon, MetadataIcon, FolderIcon, FolderOpenIcon, TrashIcon, LightbulbIcon, SparkleIcon, ClockIcon, RefreshCcwIcon, ExternalLinkIcon, DownloadIcon, } from '../NetworkIcons';
11
+ import { PackageIcon, SearchIcon, ClearIcon, CircleAlertIcon, LayersIcon, TimelineIcon, LiveStateIcon, StorageIcon, MetadataIcon, FolderIcon, FolderOpenIcon, TrashIcon, LightbulbIcon, SparkleIcon, ClockIcon, RefreshCcwIcon, ExternalLinkIcon, DownloadIcon, ChevronIcon, } from '../NetworkIcons';
12
12
  import Svg, { Path, Rect, Circle, Ellipse, G, Defs, LinearGradient, Stop, } from 'react-native-svg';
13
13
  import { analyzeHostAppBundle, getCachedBundleAnalysis, getInitialBundleAnalysis, getHostScriptURL, } from '../../customHooks/bundleAnalyzer';
14
14
  const PackageLogoRenderer = ({ name, size = 28 }) => {
@@ -378,9 +378,9 @@ const BundleTreeNodeView = ({ node, level, search, totalBundleKb, expandedFolder
378
378
  ? `${(node.sizeKb / 1024).toFixed(2)} MB`
379
379
  : `${node.sizeKb} KB`}`} accessibilityState={{ expanded: isExpanded }} accessibilityHint="Double tap to expand or collapse folder" onPress={() => toggleFolder(node.fullPath)} style={[bundleStyles.treeFolderRow, { paddingLeft: indentLeft }]}>
380
380
  <View style={bundleStyles.treeRowLeft}>
381
- <Text style={bundleStyles.treeChevron}>
382
- {isCollapsed ? '' : ''}
383
- </Text>
381
+ <View style={{ marginRight: 4 }}>
382
+ <ChevronIcon direction={isCollapsed ? 'right' : 'down'} size={12} color={AppColors.grayTextWeak}/>
383
+ </View>
384
384
  {isCollapsed ? (<FolderIcon color={AppColors.amber500} size={15}/>) : (<FolderOpenIcon color={AppColors.amber500} size={15}/>)}
385
385
  <HighlightText text={node.name + '/'} search={search} style={bundleStyles.treeFolderName} highlightStyle={bundleStyles.searchHighlight}/>
386
386
  <View style={bundleStyles.treeCountBadge}>
@@ -836,7 +836,7 @@ const BundleTab = React.memo(() => {
836
836
  letterSpacing: 0.3,
837
837
  textTransform: 'uppercase',
838
838
  }}>
839
- Live Metro URL
839
+ Live Metro URL
840
840
  </Text>
841
841
  </View>
842
842
  <Text style={{
@@ -7,7 +7,7 @@ import TouchableScale from '../TouchableScale';
7
7
  import { copyToClipboard } from '../../helpers';
8
8
  import { showToast } from '../../helpers/toast';
9
9
  import { useTranslation } from '../../i18n';
10
- import { BoltIcon, SmartphoneIcon, PackageIcon, RepeatIcon, } from '../NetworkIcons';
10
+ import { BoltIcon, SmartphoneIcon, PackageIcon, RepeatIcon, InfoCircleIcon, } from '../NetworkIcons';
11
11
  const COMMON_PORTS = [8081, 8082, 8083, 19000];
12
12
  export const DebuggingTab = () => {
13
13
  const { t } = useTranslation();
@@ -125,10 +125,10 @@ export const DebuggingTab = () => {
125
125
  </View>
126
126
  <Text style={styles.serverSubtitle}>
127
127
  {activePortInfo?.status === 'active'
128
- ? `🟢 Active & Bundling (${activePortInfo.latencyMs}ms)`
128
+ ? `Active & Bundling (${activePortInfo.latencyMs}ms)`
129
129
  : activePortInfo?.status === 'checking'
130
- ? '🟡 Probing Metro Ports...'
131
- : '🔴 Standby / Select active port'}
130
+ ? 'Probing Metro Ports...'
131
+ : 'Standby / Select active port'}
132
132
  </Text>
133
133
  </View>
134
134
  </View>
@@ -193,9 +193,12 @@ export const DebuggingTab = () => {
193
193
  <TextInput style={styles.input} value={hostIp} onChangeText={setHostIp} placeholder="192.168.1.15" placeholderTextColor={AppColors.grayTextWeak} autoCapitalize="none" autoCorrect={false}/>
194
194
  <Text style={styles.inputSuffix}>:{selectedPort}</Text>
195
195
  </View>
196
- <Text style={styles.inputHint}>
197
- 💡 Ensure your physical Android device and Mac are connected to the same Wi-Fi network.
198
- </Text>
196
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, marginTop: 6 }}>
197
+ <InfoCircleIcon size={13} color={AppColors.grayTextWeak}/>
198
+ <Text style={[styles.inputHint, { marginTop: 0, flex: 1 }]}>
199
+ Ensure your physical Android device and Mac are connected to the same Wi-Fi network.
200
+ </Text>
201
+ </View>
199
202
  </View>
200
203
 
201
204
 
@@ -247,13 +250,16 @@ export const DebuggingTab = () => {
247
250
  <QRCodeView value={currentQrValue} size={190} color={AppColors.primaryBlack} backgroundColor={AppColors.white}/>
248
251
 
249
252
  <View style={styles.qrInfoBox}>
250
- <Text style={styles.qrTargetTitle}>
251
- {activeQrTab === 'apk'
252
- ? '📦 Direct APK Download URL'
253
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 5, marginBottom: 2 }}>
254
+ {activeQrTab === 'apk' ? (<PackageIcon size={14} color={AppColors.purple}/>) : activeQrTab === 'host' ? (<SmartphoneIcon size={14} color={AppColors.purple}/>) : (<BoltIcon size={14} color={AppColors.amber500}/>)}
255
+ <Text style={styles.qrTargetTitle}>
256
+ {activeQrTab === 'apk'
257
+ ? 'Direct APK Download URL'
253
258
  : activeQrTab === 'host'
254
- ? '📱 Dev Settings Bundle Host'
255
- : 'Live Metro Fast-Refresh Endpoint'}
256
- </Text>
259
+ ? 'Dev Settings Bundle Host'
260
+ : 'Live Metro Fast-Refresh Endpoint'}
261
+ </Text>
262
+ </View>
257
263
  <Text style={styles.qrTargetUrl} numberOfLines={2} ellipsizeMode="middle">
258
264
  {currentQrValue}
259
265
  </Text>
@@ -279,7 +285,10 @@ export const DebuggingTab = () => {
279
285
 
280
286
 
281
287
  <View style={styles.guideCard}>
282
- <Text style={styles.guideHeading}>📱 HOW TO CONNECT ANDROID DEVICE:</Text>
288
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, marginBottom: 12 }}>
289
+ <SmartphoneIcon size={15} color={AppColors.primaryLight}/>
290
+ <Text style={[styles.guideHeading, { marginBottom: 0 }]}>HOW TO CONNECT ANDROID DEVICE:</Text>
291
+ </View>
283
292
 
284
293
  <View style={styles.stepRow}>
285
294
  <View style={styles.stepNumberBadge}>
@@ -310,7 +319,10 @@ export const DebuggingTab = () => {
310
319
  <Text style={styles.stepNumberText}>3</Text>
311
320
  </View>
312
321
  <View style={{ flex: 1 }}>
313
- <Text style={styles.stepTitle}>Simultaneous Live Fast-Refresh ⚡</Text>
322
+ <View style={{ flexDirection: 'row', alignItems: 'center', gap: 4 }}>
323
+ <Text style={styles.stepTitle}>Simultaneous Live Fast-Refresh</Text>
324
+ <BoltIcon size={13} color={AppColors.amber500}/>
325
+ </View>
314
326
  <Text style={styles.stepDesc}>
315
327
  Any changes saved in VS Code will immediately update <Text style={{ fontWeight: '700' }}>both the iOS Simulator and physical Android phone</Text> in real-time!
316
328
  </Text>
@@ -298,7 +298,7 @@ const NetworkDetail = React.memo(() => {
298
298
  letterSpacing: 0.4,
299
299
  textTransform: 'uppercase',
300
300
  }}>
301
- ENDPOINT URL
301
+ ENDPOINT URL
302
302
  </Text>
303
303
  </View>
304
304
 
@@ -333,7 +333,7 @@ const NetworkDetail = React.memo(() => {
333
333
  fontSize: 9,
334
334
  color: AppColors.sky600,
335
335
  }}>
336
- Open
336
+ Open
337
337
  </Text>
338
338
  </View>
339
339
  </View>
@@ -5,7 +5,7 @@ import { AppColors } from '../../styles/AppColors';
5
5
  import { AppFonts } from '../../styles/AppFonts';
6
6
  import { useTranslation } from '../../i18n';
7
7
  import { METHOD_COLORS } from '../../constants';
8
- import { FilterIcon, CloseWhite, CircleCheckIcon, CircleAlertIcon, CircleXIcon, LayersIcon, RepeatIcon, ShieldAlertIcon, } from '../NetworkIcons';
8
+ import { FilterIcon, CloseWhite, ClockIcon, CircleCheckIcon, CircleAlertIcon, CircleXIcon, LayersIcon, RepeatIcon, ShieldAlertIcon, BoltIcon, GlobeIcon, LockIcon, UnlockIcon, RocketIcon, TurtleIcon, HourglassIcon, PackageIcon, } from '../NetworkIcons';
9
9
  import TouchableScale from '../TouchableScale';
10
10
  export const DEFAULT_NETWORK_FILTERS = {
11
11
  statusCodes: new Set(['all']),
@@ -330,12 +330,13 @@ export const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQ
330
330
  <Text style={styles.sectionTitle}>LATENCY & SPEED</Text>
331
331
  <View style={styles.chipsWrap}>
332
332
  {[
333
- { key: 'all', label: 'All Speeds', color: AppColors.purple },
334
- { key: 'fast', label: 'Fast (<200ms)', color: AppColors.greenColor, count: counts.fastCount },
335
- { key: 'normal', label: '⏱️ Normal (200-500ms)', color: AppColors.skyBlue, count: counts.normalCount },
336
- { key: 'slow', label: '⚠️ Slow (>500ms)', color: AppColors.errorColor, count: counts.slowCount },
333
+ { key: 'all', label: 'All Speeds', color: AppColors.purple, icon: LayersIcon },
334
+ { key: 'fast', label: 'Fast (<200ms)', color: AppColors.greenColor, icon: BoltIcon, count: counts.fastCount },
335
+ { key: 'normal', label: 'Normal (200-500ms)', color: AppColors.skyBlue, icon: ClockIcon, count: counts.normalCount },
336
+ { key: 'slow', label: 'Slow (>500ms)', color: AppColors.errorColor, icon: CircleAlertIcon, count: counts.slowCount },
337
337
  ].map(item => {
338
338
  const isSelected = draft.latency === item.key;
339
+ const IconComp = item.icon;
339
340
  return (<TouchableOpacity key={item.key} activeOpacity={0.7} onPress={() => setDraft(prev => ({ ...prev, latency: item.key }))} style={[
340
341
  styles.chip,
341
342
  isSelected && {
@@ -343,6 +344,7 @@ export const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQ
343
344
  borderColor: item.color,
344
345
  },
345
346
  ]}>
347
+ <IconComp size={13} color={isSelected ? item.color : AppColors.grayTextWeak}/>
346
348
  <Text style={[
347
349
  styles.chipLabel,
348
350
  isSelected && { color: item.color, fontFamily: AppFonts.interBold },
@@ -364,11 +366,12 @@ export const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQ
364
366
  <Text style={styles.sectionTitle}>PROTOCOL</Text>
365
367
  <View style={styles.chipsWrap}>
366
368
  {[
367
- { key: 'all', label: 'All Protocols', color: AppColors.purple },
368
- { key: 'https', label: '🔒 HTTPS Secure', color: AppColors.mintGreenText, count: counts.httpsCount },
369
- { key: 'http', label: '🔓 HTTP Insecure', color: AppColors.amber700, count: counts.httpCount },
369
+ { key: 'all', label: 'All Protocols', color: AppColors.purple, icon: GlobeIcon },
370
+ { key: 'https', label: 'HTTPS Secure', color: AppColors.mintGreenText, icon: LockIcon, count: counts.httpsCount },
371
+ { key: 'http', label: 'HTTP Insecure', color: AppColors.amber700, icon: UnlockIcon, count: counts.httpCount },
370
372
  ].map(item => {
371
373
  const isSelected = draft.protocol === item.key;
374
+ const IconComp = item.icon;
372
375
  return (<TouchableOpacity key={item.key} activeOpacity={0.7} onPress={() => setDraft(prev => ({ ...prev, protocol: item.key }))} style={[
373
376
  styles.chip,
374
377
  isSelected && {
@@ -376,6 +379,7 @@ export const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQ
376
379
  borderColor: item.color,
377
380
  },
378
381
  ]}>
382
+ <IconComp size={13} color={isSelected ? item.color : AppColors.grayTextWeak}/>
379
383
  <Text style={[
380
384
  styles.chipLabel,
381
385
  isSelected && { color: item.color, fontFamily: AppFonts.interBold },
@@ -397,13 +401,14 @@ export const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQ
397
401
  <Text style={styles.sectionTitle}>SORT BY</Text>
398
402
  <View style={styles.chipsWrap}>
399
403
  {[
400
- { key: 'time_desc', label: '⏱️ Newest First (Default)' },
401
- { key: 'time_asc', label: 'Oldest First' },
402
- { key: 'duration_desc', label: '🐢 Slowest Response' },
403
- { key: 'duration_asc', label: '🚀 Fastest Response' },
404
- { key: 'size_desc', label: '📦 Largest Response Size' },
404
+ { key: 'time_desc', label: 'Newest First (Default)', icon: ClockIcon },
405
+ { key: 'time_asc', label: 'Oldest First', icon: HourglassIcon },
406
+ { key: 'duration_desc', label: 'Slowest Response', icon: TurtleIcon },
407
+ { key: 'duration_asc', label: 'Fastest Response', icon: RocketIcon },
408
+ { key: 'size_desc', label: 'Largest Response Size', icon: PackageIcon },
405
409
  ].map(item => {
406
410
  const isSelected = draft.sortBy === item.key;
411
+ const IconComp = item.icon;
407
412
  return (<TouchableOpacity key={item.key} activeOpacity={0.7} onPress={() => setDraft(prev => ({ ...prev, sortBy: item.key }))} style={[
408
413
  styles.chip,
409
414
  isSelected && {
@@ -411,6 +416,7 @@ export const NetworkFilterModal = ({ visible, onClose, filters, onApply, searchQ
411
416
  borderColor: AppColors.purple,
412
417
  },
413
418
  ]}>
419
+ <IconComp size={13} color={isSelected ? AppColors.purple : AppColors.grayTextWeak}/>
414
420
  <Text style={[
415
421
  styles.chipLabel,
416
422
  isSelected && { color: AppColors.purple, fontFamily: AppFonts.interBold },