react-native-inapp-inspector 2.3.9 → 2.3.11

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 (65) hide show
  1. package/dist/commonjs/components/Inspector/DebuggingTab.d.ts +3 -0
  2. package/dist/commonjs/components/Inspector/DebuggingTab.js +682 -0
  3. package/dist/commonjs/components/Inspector/MainScreen.js +2 -0
  4. package/dist/commonjs/components/Inspector/NetworkDetail.js +2 -1
  5. package/dist/commonjs/components/Inspector/NetworkFilterModal.d.ts +19 -0
  6. package/dist/commonjs/components/Inspector/NetworkFilterModal.js +648 -0
  7. package/dist/commonjs/components/Inspector/NetworkTab.js +89 -147
  8. package/dist/commonjs/components/Inspector/SettingsPanel.js +12 -0
  9. package/dist/commonjs/components/Inspector/TabBar.js +9 -0
  10. package/dist/commonjs/components/LogCard.js +5 -26
  11. package/dist/commonjs/components/NetworkIcons.d.ts +2 -0
  12. package/dist/commonjs/components/NetworkIcons.js +13 -1
  13. package/dist/commonjs/components/QRCodeView.d.ts +9 -0
  14. package/dist/commonjs/components/QRCodeView.js +79 -0
  15. package/dist/commonjs/constants/index.js +3 -0
  16. package/dist/commonjs/constants/version.d.ts +1 -1
  17. package/dist/commonjs/constants/version.js +1 -1
  18. package/dist/commonjs/helpers/qrGenerator.d.ts +2 -0
  19. package/dist/commonjs/helpers/qrGenerator.js +170 -0
  20. package/dist/commonjs/index.js +2 -0
  21. package/dist/commonjs/styles/index.d.ts +11 -0
  22. package/dist/commonjs/styles/index.js +20 -5
  23. package/dist/commonjs/types/enums.d.ts +5 -0
  24. package/dist/commonjs/types/enums.js +5 -0
  25. package/dist/esm/components/Inspector/DebuggingTab.d.ts +3 -0
  26. package/dist/esm/components/Inspector/DebuggingTab.js +642 -0
  27. package/dist/esm/components/Inspector/MainScreen.js +2 -0
  28. package/dist/esm/components/Inspector/NetworkDetail.js +2 -1
  29. package/dist/esm/components/Inspector/NetworkFilterModal.d.ts +19 -0
  30. package/dist/esm/components/Inspector/NetworkFilterModal.js +607 -0
  31. package/dist/esm/components/Inspector/NetworkTab.js +91 -149
  32. package/dist/esm/components/Inspector/SettingsPanel.js +13 -1
  33. package/dist/esm/components/Inspector/TabBar.js +10 -1
  34. package/dist/esm/components/LogCard.js +5 -26
  35. package/dist/esm/components/NetworkIcons.d.ts +2 -0
  36. package/dist/esm/components/NetworkIcons.js +10 -0
  37. package/dist/esm/components/QRCodeView.d.ts +9 -0
  38. package/dist/esm/components/QRCodeView.js +42 -0
  39. package/dist/esm/constants/index.js +3 -0
  40. package/dist/esm/constants/version.d.ts +1 -1
  41. package/dist/esm/constants/version.js +1 -1
  42. package/dist/esm/helpers/qrGenerator.d.ts +2 -0
  43. package/dist/esm/helpers/qrGenerator.js +167 -0
  44. package/dist/esm/index.js +2 -0
  45. package/dist/esm/styles/index.d.ts +11 -0
  46. package/dist/esm/styles/index.js +20 -5
  47. package/dist/esm/types/enums.d.ts +5 -0
  48. package/dist/esm/types/enums.js +5 -0
  49. package/package.json +2 -2
  50. package/src/components/Inspector/DebuggingTab.tsx +755 -0
  51. package/src/components/Inspector/MainScreen.tsx +2 -0
  52. package/src/components/Inspector/NetworkDetail.tsx +2 -1
  53. package/src/components/Inspector/NetworkFilterModal.tsx +710 -0
  54. package/src/components/Inspector/NetworkTab.tsx +127 -204
  55. package/src/components/Inspector/SettingsPanel.tsx +20 -0
  56. package/src/components/Inspector/TabBar.tsx +11 -0
  57. package/src/components/LogCard.tsx +5 -30
  58. package/src/components/NetworkIcons.tsx +66 -0
  59. package/src/components/QRCodeView.tsx +71 -0
  60. package/src/constants/index.ts +3 -0
  61. package/src/constants/version.ts +1 -1
  62. package/src/helpers/qrGenerator.ts +184 -0
  63. package/src/index.tsx +2 -0
  64. package/src/styles/index.ts +20 -5
  65. package/src/types/enums.ts +5 -0
@@ -39,99 +39,53 @@ Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const react_1 = __importStar(require("react"));
40
40
  const react_native_1 = require("react-native");
41
41
  const InspectorContext_1 = require("./InspectorContext");
42
- const useAccordion_1 = __importDefault(require("../../customHooks/useAccordion"));
43
42
  const TouchableScale_1 = __importDefault(require("../TouchableScale"));
44
43
  const AnimatedEntrance_1 = __importDefault(require("../AnimatedEntrance"));
45
44
  const DomainHeader_1 = __importDefault(require("../DomainHeader"));
46
45
  const LogCard_1 = __importDefault(require("../LogCard"));
47
46
  const EmptyState_1 = __importDefault(require("../EmptyState"));
48
47
  const EndOfListFooter_1 = __importDefault(require("../EndOfListFooter"));
48
+ const NetworkFilterModal_1 = __importDefault(require("./NetworkFilterModal"));
49
49
  const styles_1 = __importDefault(require("../../styles"));
50
50
  const AppColors_1 = require("../../styles/AppColors");
51
51
  const AppFonts_1 = require("../../styles/AppFonts");
52
52
  const constants_1 = require("../../constants");
53
53
  const i18n_1 = require("../../i18n");
54
54
  const NetworkIcons_1 = require("../NetworkIcons");
55
- const STATUS_META = {
56
- ALL: { color: AppColors_1.AppColors.grayText, Icon: NetworkIcons_1.LayersIcon },
57
- '2xx': { color: AppColors_1.AppColors.greenColor, Icon: NetworkIcons_1.CircleCheckIcon },
58
- '200': { color: AppColors_1.AppColors.greenColor, Icon: NetworkIcons_1.CircleCheckIcon },
59
- '3xx': { color: AppColors_1.AppColors.warningIconGold, Icon: NetworkIcons_1.CircleAlertIcon },
60
- '300': { color: AppColors_1.AppColors.warningIconGold, Icon: NetworkIcons_1.CircleAlertIcon },
61
- '4xx': { color: AppColors_1.AppColors.darkOrange, Icon: NetworkIcons_1.CircleAlertIcon },
62
- '400': { color: AppColors_1.AppColors.darkOrange, Icon: NetworkIcons_1.CircleAlertIcon },
63
- '404': { color: AppColors_1.AppColors.darkOrange, Icon: NetworkIcons_1.CircleAlertIcon },
64
- '5xx': { color: AppColors_1.AppColors.errorColor, Icon: NetworkIcons_1.CircleXIcon },
65
- '500': { color: AppColors_1.AppColors.errorColor, Icon: NetworkIcons_1.CircleXIcon },
66
- Failed: { color: AppColors_1.AppColors.errorColor, Icon: NetworkIcons_1.CircleXIcon },
67
- };
68
- const getStatusMeta = (filter) => {
69
- if (STATUS_META[filter])
70
- return STATUS_META[filter];
71
- const num = parseInt(filter, 10);
72
- if (!isNaN(num)) {
73
- if (num >= 200 && num < 300)
74
- return { color: AppColors_1.AppColors.greenColor, Icon: NetworkIcons_1.CircleCheckIcon };
75
- if (num >= 300 && num < 400)
76
- return { color: AppColors_1.AppColors.warningIconGold, Icon: NetworkIcons_1.CircleAlertIcon };
77
- if (num >= 400 && num < 500)
78
- return { color: AppColors_1.AppColors.darkOrange, Icon: NetworkIcons_1.CircleAlertIcon };
79
- if (num >= 500)
80
- return { color: AppColors_1.AppColors.errorColor, Icon: NetworkIcons_1.CircleXIcon };
81
- }
82
- if (filter.startsWith('2'))
83
- return { color: AppColors_1.AppColors.greenColor, Icon: NetworkIcons_1.CircleCheckIcon };
84
- if (filter.startsWith('3'))
85
- return { color: AppColors_1.AppColors.warningIconGold, Icon: NetworkIcons_1.CircleAlertIcon };
86
- if (filter.startsWith('4'))
87
- return { color: AppColors_1.AppColors.darkOrange, Icon: NetworkIcons_1.CircleAlertIcon };
88
- if (filter.startsWith('5'))
89
- return { color: AppColors_1.AppColors.errorColor, Icon: NetworkIcons_1.CircleXIcon };
90
- return { color: AppColors_1.AppColors.grayText, Icon: NetworkIcons_1.LayersIcon };
91
- };
92
- const FilterChip = react_1.default.memo(({ label, color, Icon, badge, active, onPress, }) => {
93
- const iconColor = active ? color : AppColors_1.AppColors.grayTextWeak;
94
- return (<TouchableScale_1.default style={styles_1.default.statusFilterWrap} onPress={onPress} hitSlop={10}>
95
- <react_native_1.View style={[
96
- styles_1.default.statusFilterChip,
97
- {
98
- paddingHorizontal: 9,
99
- paddingVertical: 5,
100
- borderRadius: 7,
101
- borderWidth: 1,
102
- borderColor: active ? color : `${AppColors_1.AppColors.grayBorderSecondary}`,
103
- backgroundColor: active ? `${color}14` : AppColors_1.AppColors.grayBackground,
104
- },
105
- active && {
106
- shadowColor: color,
107
- shadowOffset: { width: 0, height: 1 },
108
- shadowOpacity: 0.2,
109
- shadowRadius: 2,
110
- elevation: 1.5,
111
- },
112
- ]}>
113
- {badge != null ? (<react_native_1.View style={[
114
- styles_1.default.methodBadgeMini,
115
- { backgroundColor: badge },
116
- ]}/>) : (Icon && (<Icon color={iconColor} size={13}/>))}
117
- <react_native_1.Text numberOfLines={1} style={[
118
- styles_1.default.statusFilterText,
119
- {
120
- color: active ? color : AppColors_1.AppColors.grayText,
121
- fontFamily: active ? AppFonts_1.AppFonts.interBold : AppFonts_1.AppFonts.interMedium,
122
- },
123
- ]}>
124
- {label}
125
- </react_native_1.Text>
126
- </react_native_1.View>
127
- </TouchableScale_1.default>);
128
- });
129
55
  const NetworkTab = react_1.default.memo(() => {
130
56
  const { groupedData, search, setSearch, searchScope, setSearchScope, isRegexSearch, setIsRegexSearch, isCaseSensitive, setIsCaseSensitive, quickFilter, setQuickFilter, handleDelete, selectedLogs, sortOrder, setSortOrder, statusFilters, setStatusFilters, methodFilters, setMethodFilters, availableMethods, filteredLogs, logs, toggleSectionFilter, toggleSectionCollapse, minStart, totalRange, newLogIds, toggleSelect, setSelected, isNetworkPaused, setIsNetworkPaused, } = (0, InspectorContext_1.useInspector)();
131
57
  const { t } = (0, i18n_1.useTranslation)();
132
- const filtersAccordion = (0, useAccordion_1.default)(false, 300, 260);
133
58
  const apisListRef = (0, react_1.useRef)(null);
59
+ const [isFilterModalOpen, setIsFilterModalOpen] = react_1.default.useState(false);
134
60
  const [isSearchFocused, setIsSearchFocused] = react_1.default.useState(false);
61
+ const modalFilterState = (0, react_1.useMemo)(() => ({
62
+ statusCodes: statusFilters.size > 0 ? new Set(statusFilters) : new Set(['all']),
63
+ methods: methodFilters.size > 0 ? new Set(methodFilters) : new Set(['all']),
64
+ latency: 'all',
65
+ protocol: 'all',
66
+ sortBy: sortOrder === 'newest' ? 'time_desc' : 'time_asc',
67
+ }), [statusFilters, methodFilters, sortOrder]);
68
+ const handleApplyNetworkFilters = (0, react_1.useCallback)((newFilters) => {
69
+ if (newFilters.statusCodes.has('all') ||
70
+ newFilters.statusCodes.size === 0) {
71
+ setStatusFilters(new Set());
72
+ }
73
+ else {
74
+ setStatusFilters(new Set(newFilters.statusCodes));
75
+ }
76
+ if (newFilters.methods.has('all') || newFilters.methods.size === 0) {
77
+ setMethodFilters(new Set());
78
+ }
79
+ else {
80
+ setMethodFilters(new Set([...newFilters.methods].map(m => m)));
81
+ }
82
+ if (newFilters.sortBy === 'time_asc') {
83
+ setSortOrder('oldest');
84
+ }
85
+ else {
86
+ setSortOrder('newest');
87
+ }
88
+ }, [setStatusFilters, setMethodFilters, setSortOrder]);
135
89
  const quickCounts = (0, react_1.useMemo)(() => {
136
90
  let errorCount = 0;
137
91
  let successCount = 0;
@@ -558,10 +512,12 @@ const NetworkTab = react_1.default.memo(() => {
558
512
 
559
513
  <TouchableScale_1.default style={[
560
514
  styles_1.default.toolbarBtn,
561
- filtersAccordion.isOpen &&
562
- styles_1.default.toolbarBtnActive,
563
- ]} onPress={filtersAccordion.toggleOpen} hitSlop={6}>
564
- <NetworkIcons_1.FilterIcon color={filtersAccordion.isOpen
515
+ (statusFilters.size > 0 || methodFilters.size > 0) && {
516
+ borderColor: AppColors_1.AppColors.purple,
517
+ backgroundColor: `${AppColors_1.AppColors.purple}15`,
518
+ },
519
+ ]} onPress={() => setIsFilterModalOpen(true)} hitSlop={6}>
520
+ <NetworkIcons_1.FilterIcon color={statusFilters.size > 0 || methodFilters.size > 0
565
521
  ? AppColors_1.AppColors.purple
566
522
  : AppColors_1.AppColors.grayTextStrong} size={16}/>
567
523
  {(statusFilters.size > 0 ||
@@ -723,6 +679,51 @@ const NetworkTab = react_1.default.memo(() => {
723
679
  </react_native_1.View>
724
680
  </TouchableScale_1.default>);
725
681
  })}
682
+
683
+ <TouchableScale_1.default onPress={() => setIsFilterModalOpen(true)}>
684
+ <react_native_1.View style={{
685
+ flexDirection: 'row',
686
+ alignItems: 'center',
687
+ paddingHorizontal: 10,
688
+ paddingVertical: 4.5,
689
+ borderRadius: 8,
690
+ backgroundColor: statusFilters.size > 0 || methodFilters.size > 0
691
+ ? `${AppColors_1.AppColors.purple}20`
692
+ : AppColors_1.AppColors.grayBackground,
693
+ borderWidth: 1,
694
+ borderColor: statusFilters.size > 0 || methodFilters.size > 0
695
+ ? AppColors_1.AppColors.purple
696
+ : AppColors_1.AppColors.grayBorderSecondary,
697
+ gap: 5,
698
+ }}>
699
+ <NetworkIcons_1.FilterIcon size={11} color={statusFilters.size > 0 || methodFilters.size > 0
700
+ ? AppColors_1.AppColors.purple
701
+ : AppColors_1.AppColors.grayText}/>
702
+ <react_native_1.Text style={{
703
+ fontFamily: AppFonts_1.AppFonts.interBold,
704
+ fontSize: 10.5,
705
+ color: statusFilters.size > 0 || methodFilters.size > 0
706
+ ? AppColors_1.AppColors.purple
707
+ : AppColors_1.AppColors.grayText,
708
+ }}>
709
+ More Filters
710
+ </react_native_1.Text>
711
+ {(statusFilters.size > 0 || methodFilters.size > 0) && (<react_native_1.View style={{
712
+ backgroundColor: AppColors_1.AppColors.purple,
713
+ paddingHorizontal: 4.5,
714
+ paddingVertical: 1,
715
+ borderRadius: 6,
716
+ }}>
717
+ <react_native_1.Text style={{
718
+ fontFamily: AppFonts_1.AppFonts.interBold,
719
+ fontSize: 8.5,
720
+ color: AppColors_1.AppColors.white,
721
+ }}>
722
+ {statusFilters.size + methodFilters.size}
723
+ </react_native_1.Text>
724
+ </react_native_1.View>)}
725
+ </react_native_1.View>
726
+ </TouchableScale_1.default>
726
727
  </react_native_1.ScrollView>
727
728
  </react_native_1.View>
728
729
 
@@ -871,86 +872,24 @@ const NetworkTab = react_1.default.memo(() => {
871
872
  </TouchableScale_1.default>
872
873
  </react_native_1.View>)}
873
874
 
874
- <react_native_1.Animated.View style={[
875
- filtersAccordion.bodyStyle,
876
- { overflow: 'hidden' },
877
- ]}>
878
- <react_native_1.View style={styles_1.default.filtersContainer}>
879
- <react_native_1.Text style={styles_1.default.filtersHeading}>
880
- STATUS
881
- </react_native_1.Text>
882
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles_1.default.statusRowContent}>
883
- {constants_1.STATUS_FILTERS.map(filter => {
884
- const isAll = filter === 'ALL';
885
- const active = isAll
886
- ? statusFilters.size === 0
887
- : statusFilters.has(filter);
888
- const meta = getStatusMeta(filter);
889
- return (<FilterChip key={filter} label={filter} color={meta.color} Icon={meta.Icon} active={active} onPress={() => {
890
- if (isAll) {
891
- setStatusFilters(new Set());
892
- }
893
- else {
894
- setStatusFilters(prev => {
895
- const next = new Set(prev);
896
- next.has(filter)
897
- ? next.delete(filter)
898
- : next.add(filter);
899
- return next;
900
- });
901
- }
902
- }}/>);
903
- })}
904
- </react_native_1.ScrollView>
905
-
906
- <react_native_1.Text style={[
907
- styles_1.default.filtersHeading,
908
- { marginTop: 16 },
909
- ]}>
910
- METHOD
911
- </react_native_1.Text>
912
- <react_native_1.ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles_1.default.statusRowContent}>
913
- {availableMethods.map(filter => {
914
- const isAll = filter === 'ALL';
915
- const active = isAll
916
- ? methodFilters.size === 0
917
- : methodFilters.has(filter);
918
- const methodColor = constants_1.METHOD_COLORS[filter] ??
919
- constants_1.METHOD_COLORS.ALL;
920
- return (<FilterChip key={filter} label={filter} color={methodColor} badge={methodColor} active={active} onPress={() => {
921
- if (isAll) {
922
- setMethodFilters(new Set());
923
- }
924
- else {
925
- setMethodFilters(prev => {
926
- const next = new Set(prev);
927
- next.has(filter)
928
- ? next.delete(filter)
929
- : next.add(filter);
930
- return next;
931
- });
932
- }
933
- }}/>);
934
- })}
935
- </react_native_1.ScrollView>
936
- </react_native_1.View>
937
- </react_native_1.Animated.View>
938
-
939
875
  {(search ||
940
876
  statusFilters.size > 0 ||
941
- methodFilters.size > 0) && (<react_native_1.Text style={styles_1.default.resultCount}>
877
+ methodFilters.size > 0 ||
878
+ quickFilter !== 'all') && (<react_native_1.Text style={styles_1.default.resultCount}>
942
879
  {filteredLogs.length === logs.length
943
880
  ? `${logs.length} requests`
944
881
  : `${filteredLogs.length} of ${logs.length} filtered requests`}
945
882
  </react_native_1.Text>)}
946
883
  </react_native_1.View>} ListEmptyComponent={<EmptyState_1.default isSearch={search.length > 0 ||
947
884
  statusFilters.size > 0 ||
948
- methodFilters.size > 0} searchQuery={search} customTitle={search.length > 0
885
+ methodFilters.size > 0 ||
886
+ quickFilter !== 'all'} searchQuery={search} customTitle={search.length > 0
949
887
  ? 'No matching API requests'
950
888
  : 'No network activity'} onClearSearch={() => {
951
889
  setSearch('');
952
890
  setStatusFilters(new Set());
953
891
  setMethodFilters(new Set());
892
+ setQuickFilter('all');
954
893
  setSearchScope('all');
955
894
  }}/>} ListFooterComponent={groupedData.length > 0 ? (<EndOfListFooter_1.default count={filteredLogs.length} label="requests"/>) : null} contentContainerStyle={[
956
895
  styles_1.default.listContent,
@@ -978,6 +917,9 @@ const NetworkTab = react_1.default.memo(() => {
978
917
  <NetworkIcons_1.ChevronIcon color={AppColors_1.AppColors.white} size={18}/>
979
918
  </react_native_1.View>
980
919
  </TouchableScale_1.default>
920
+
921
+
922
+ <NetworkFilterModal_1.default visible={isFilterModalOpen} onClose={() => setIsFilterModalOpen(false)} filters={modalFilterState} onApply={handleApplyNetworkFilters} searchQuery={search}/>
981
923
  </react_native_1.View>);
982
924
  });
983
925
  exports.default = NetworkTab;
@@ -135,6 +135,13 @@ const SettingsPanel = () => {
135
135
  icon: 'storage',
136
136
  desc: 'AsyncStorage & MMKV key-value store viewer with full CRUD support',
137
137
  },
138
+ {
139
+ key: 'debugging',
140
+ label: 'Multi-Device Debugging',
141
+ category: 'diagnostic',
142
+ icon: 'debugging',
143
+ desc: 'QR Code bridge for direct Debug APK download & Metro live-reload sync',
144
+ },
138
145
  ];
139
146
  const [stagedTabVisibility, setStagedTabVisibility] = (0, react_1.useState)(() => ({
140
147
  apis: true,
@@ -146,6 +153,7 @@ const SettingsPanel = () => {
146
153
  crash: Boolean(tabVisibility?.crash),
147
154
  device: Boolean(tabVisibility?.device),
148
155
  storage: Boolean(tabVisibility?.storage),
156
+ debugging: Boolean(tabVisibility?.debugging ?? true),
149
157
  }));
150
158
  (0, react_1.useEffect)(() => {
151
159
  setStagedTabVisibility({
@@ -158,6 +166,7 @@ const SettingsPanel = () => {
158
166
  crash: Boolean(tabVisibility?.crash),
159
167
  device: Boolean(tabVisibility?.device),
160
168
  storage: Boolean(tabVisibility?.storage),
169
+ debugging: Boolean(tabVisibility?.debugging ?? true),
161
170
  });
162
171
  }, [tabVisibility]);
163
172
  const hasUnsavedChanges = (0, react_1.useMemo)(() => {
@@ -545,6 +554,9 @@ const SettingsPanel = () => {
545
554
  {moduleItem.icon === 'storage' && (<NetworkIcons_1.DatabaseIcon color={isChecked
546
555
  ? AppColors_1.AppColors.purple
547
556
  : AppColors_1.AppColors.grayTextWeak} size={16}/>)}
557
+ {moduleItem.icon === 'debugging' && (<NetworkIcons_1.QrCodeIcon color={isChecked
558
+ ? AppColors_1.AppColors.purple
559
+ : AppColors_1.AppColors.grayTextWeak} size={16}/>)}
548
560
  </react_native_1.View>
549
561
 
550
562
 
@@ -73,8 +73,16 @@ const TabBar = react_1.default.memo(() => {
73
73
  count: 0,
74
74
  icon: 'storage',
75
75
  },
76
+ {
77
+ key: 'debugging',
78
+ label: 'Debugging',
79
+ count: 0,
80
+ icon: 'debugging',
81
+ },
76
82
  ]
77
83
  .filter(tab => {
84
+ if (tab.key === 'debugging')
85
+ return true;
78
86
  if (!tabVisibility?.[tab.key])
79
87
  return false;
80
88
  if (tab.key === 'redux' && !isReduxAvail)
@@ -117,6 +125,7 @@ const TabBar = react_1.default.memo(() => {
117
125
  {tab.icon === 'crash' && (<NetworkIcons_1.CrashIcon color={iconColor} size={14}/>)}
118
126
  {tab.icon === 'device' && (<NetworkIcons_1.SmartphoneIcon color={iconColor} size={14}/>)}
119
127
  {tab.icon === 'storage' && (<NetworkIcons_1.DatabaseIcon color={iconColor} size={14}/>)}
128
+ {tab.icon === 'debugging' && (<NetworkIcons_1.QrCodeIcon color={iconColor} size={14}/>)}
120
129
  <react_native_1.Text numberOfLines={1} ellipsizeMode="tail" style={[
121
130
  styles_1.default.contentTabButtonText,
122
131
  isActive &&
@@ -236,29 +236,6 @@ const LogCard = react_1.default.memo(function LogCard({ item, onPress, timelineM
236
236
  GQL
237
237
  </react_native_1.Text>
238
238
  </react_native_1.View>)}
239
-
240
-
241
- {item.duration != null && !isFailed && (<react_native_1.View style={[
242
- styles_1.default.chip,
243
- {
244
- backgroundColor: `${durationColor}12`,
245
- borderColor: `${durationColor}2E`,
246
- paddingHorizontal: 4.5,
247
- paddingVertical: 1,
248
- borderRadius: 4,
249
- },
250
- ]}>
251
- <react_native_1.Text style={[
252
- styles_1.default.chipText,
253
- {
254
- fontFamily: AppFonts_1.AppFonts.interBold,
255
- fontSize: 8.5,
256
- color: durationColor,
257
- },
258
- ]}>
259
- {item.duration}ms
260
- </react_native_1.Text>
261
- </react_native_1.View>)}
262
239
  </react_native_1.View>
263
240
 
264
241
  <react_native_1.View style={[
@@ -277,6 +254,7 @@ const LogCard = react_1.default.memo(function LogCard({ item, onPress, timelineM
277
254
  : isLoading
278
255
  ? `${AppColors_1.AppColors.darkOrange}30`
279
256
  : `${statusColor}30`,
257
+ flexShrink: 0,
280
258
  },
281
259
  ]}>
282
260
  {renderStatusIcon()}
@@ -310,6 +288,7 @@ const LogCard = react_1.default.memo(function LogCard({ item, onPress, timelineM
310
288
  alignItems: 'center',
311
289
  justifyContent: 'center',
312
290
  marginRight: 4,
291
+ flexShrink: 0,
313
292
  }}>
314
293
  <NetworkIcons_1.GlobeIcon color={AppColors_1.AppColors.skyBlue} size={11}/>
315
294
  </react_native_1.View>
@@ -348,8 +327,8 @@ const LogCard = react_1.default.memo(function LogCard({ item, onPress, timelineM
348
327
 
349
328
 
350
329
  <react_native_1.View style={styles_1.default.cardFooterRow}>
351
- <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flexShrink: 1, minWidth: 0 }}>
352
- <react_native_1.View style={styles_1.default.cardDateRow}>
330
+ <react_native_1.View style={{ flexDirection: 'row', alignItems: 'center', gap: 6, flex: 1, minWidth: 0, marginRight: 8 }}>
331
+ <react_native_1.View style={[styles_1.default.cardDateRow, { flexShrink: 0 }]}>
353
332
  <NetworkIcons_1.CalendarIcon color={AppColors_1.AppColors.grayTextWeak} size={10}/>
354
333
  <react_native_1.Text style={styles_1.default.cardDateText}>{triggeredAt}</react_native_1.Text>
355
334
  </react_native_1.View>
@@ -366,7 +345,7 @@ const LogCard = react_1.default.memo(function LogCard({ item, onPress, timelineM
366
345
  paddingVertical: 1,
367
346
  borderRadius: 4,
368
347
  flexShrink: 1,
369
- maxWidth: 160,
348
+ minWidth: 0,
370
349
  },
371
350
  ]}>
372
351
  <NetworkIcons_1.PinIcon color={AppColors_1.AppColors.skyBlue} size={8.5}/>
@@ -133,3 +133,5 @@ export declare const ShieldCheckIcon: ({ color, size, }: IconProps) => React.JSX
133
133
  export declare const DatabaseIcon: ({ color, size, }: IconProps) => React.JSX.Element;
134
134
  export declare const PencilIcon: ({ color, size, }: IconProps) => React.JSX.Element;
135
135
  export declare const PlusIcon: ({ color, size, }: IconProps) => React.JSX.Element;
136
+ export declare const LockIcon: ({ color, size, }: IconProps) => React.JSX.Element;
137
+ export declare const QrCodeIcon: ({ 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.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.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");
@@ -894,3 +894,15 @@ const PlusIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) =>
894
894
  <react_native_svg_1.Path d="M12 5v14M5 12h14" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
895
895
  </react_native_svg_1.default>);
896
896
  exports.PlusIcon = PlusIcon;
897
+ const LockIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
898
+ <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"/>
899
+ <react_native_svg_1.Path d="M7 11V7a5 5 0 0 1 10 0v4" stroke={color} strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"/>
900
+ </react_native_svg_1.default>);
901
+ exports.LockIcon = LockIcon;
902
+ const QrCodeIcon = ({ color = AppColors_1.AppColors.grayTextWeak, size = 14, }) => (<react_native_svg_1.default width={size} height={size} viewBox="0 0 24 24" fill="none">
903
+ <react_native_svg_1.Rect x="3" y="3" width="7" height="7" rx="1.5" stroke={color} strokeWidth="2"/>
904
+ <react_native_svg_1.Rect x="14" y="3" width="7" height="7" rx="1.5" stroke={color} strokeWidth="2"/>
905
+ <react_native_svg_1.Rect x="3" y="14" width="7" height="7" rx="1.5" stroke={color} strokeWidth="2"/>
906
+ <react_native_svg_1.Path d="M14 14h3v3h-3zM18 18h3v3h-3zM14 19h3v2h-3zM19 14h2v3h-2z" fill={color}/>
907
+ </react_native_svg_1.default>);
908
+ exports.QrCodeIcon = QrCodeIcon;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ interface QRCodeViewProps {
3
+ value: string;
4
+ size?: number;
5
+ color?: string;
6
+ backgroundColor?: string;
7
+ }
8
+ export declare const QRCodeView: React.FC<QRCodeViewProps>;
9
+ export default QRCodeView;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.QRCodeView = void 0;
37
+ const react_1 = __importStar(require("react"));
38
+ const react_native_1 = require("react-native");
39
+ const react_native_svg_1 = __importStar(require("react-native-svg"));
40
+ const qrGenerator_1 = require("../helpers/qrGenerator");
41
+ const AppColors_1 = require("../styles/AppColors");
42
+ const QRCodeView = ({ value, size = 180, color = AppColors_1.AppColors.primaryBlack, backgroundColor = AppColors_1.AppColors.white, }) => {
43
+ const matrix = (0, react_1.useMemo)(() => (0, qrGenerator_1.generateQRMatrix)(value), [value]);
44
+ const numCells = matrix.length;
45
+ const cellSize = size / numCells;
46
+ return (<react_native_1.View style={[
47
+ styles.container,
48
+ {
49
+ width: size + 16,
50
+ height: size + 16,
51
+ backgroundColor,
52
+ },
53
+ ]}>
54
+ <react_native_svg_1.default width={size} height={size} viewBox={`0 0 ${size} ${size}`}>
55
+ <react_native_svg_1.G>
56
+ {matrix.map((row, r) => row.map((cell, c) => {
57
+ if (!cell)
58
+ return null;
59
+ return (<react_native_svg_1.Rect key={`${r}-${c}`} x={c * cellSize} y={r * cellSize} width={cellSize + 0.2} height={cellSize + 0.2} fill={color}/>);
60
+ }))}
61
+ </react_native_svg_1.G>
62
+ </react_native_svg_1.default>
63
+ </react_native_1.View>);
64
+ };
65
+ exports.QRCodeView = QRCodeView;
66
+ const styles = react_native_1.StyleSheet.create({
67
+ container: {
68
+ padding: 8,
69
+ borderRadius: 14,
70
+ alignItems: 'center',
71
+ justifyContent: 'center',
72
+ shadowColor: AppColors_1.AppColors.black,
73
+ shadowOffset: { width: 0, height: 2 },
74
+ shadowOpacity: 0.1,
75
+ shadowRadius: 6,
76
+ elevation: 3,
77
+ },
78
+ });
79
+ exports.default = exports.QRCodeView;
@@ -21,6 +21,9 @@ exports.METHOD_COLORS = {
21
21
  PUT: '#D97706',
22
22
  PATCH: '#7C3AED',
23
23
  DELETE: '#DC2626',
24
+ QUERY: '#0284C7',
25
+ OPTIONS: '#475569',
26
+ HEAD: '#0891B2',
24
27
  };
25
28
  exports.DOMAIN_COLORS = AppColors_1.AppColors.domainColors;
26
29
  exports.DURATION_FAST_MS = 200;
@@ -1 +1 @@
1
- export declare const LIB_VERSION = "2.3.9";
1
+ export declare const LIB_VERSION = "2.3.11";
@@ -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.9';
4
+ exports.LIB_VERSION = '2.3.11';
@@ -0,0 +1,2 @@
1
+ export type QRECC = 'L' | 'M' | 'Q' | 'H';
2
+ export declare function generateQRMatrix(text: string, ecc?: QRECC): boolean[][];