react-native-inapp-inspector 1.0.9 → 1.0.10
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.
- package/README.md +5 -6
- package/dist/commonjs/components/AnalyticsDetail.js +28 -23
- package/dist/commonjs/components/AnalyticsEventCard.js +9 -9
- package/dist/commonjs/components/BrandSquareIcon.d.ts +5 -0
- package/dist/commonjs/components/BrandSquareIcon.js +180 -0
- package/dist/commonjs/components/CodeSnippet.js +32 -24
- package/dist/commonjs/components/ConsoleLogCard.js +127 -70
- package/dist/commonjs/components/JsonViewer.d.ts +2 -1
- package/dist/commonjs/components/JsonViewer.js +2 -2
- package/dist/commonjs/components/MetaAccordion.d.ts +1 -1
- package/dist/commonjs/components/MetaAccordion.js +45 -2
- package/dist/commonjs/components/NetworkIcons.d.ts +7 -0
- package/dist/commonjs/components/NetworkIcons.js +42 -1
- package/dist/commonjs/components/ReduxTreeView.d.ts +6 -0
- package/dist/commonjs/components/ReduxTreeView.js +403 -0
- package/dist/commonjs/components/TouchableScale.js +15 -1
- package/dist/commonjs/components/TreeNode.js +3 -3
- package/dist/commonjs/customHooks/reduxLogger.d.ts +4 -0
- package/dist/commonjs/customHooks/reduxLogger.js +48 -2
- package/dist/commonjs/index.js +1520 -504
- package/dist/commonjs/styles/index.d.ts +11 -1
- package/dist/commonjs/styles/index.js +19 -9
- package/dist/commonjs/types/index.d.ts +4 -0
- package/dist/esm/components/AnalyticsDetail.js +28 -23
- package/dist/esm/components/AnalyticsEventCard.js +9 -9
- package/dist/esm/components/BrandSquareIcon.d.ts +5 -0
- package/dist/esm/components/BrandSquareIcon.js +140 -0
- package/dist/esm/components/CodeSnippet.js +32 -24
- package/dist/esm/components/ConsoleLogCard.js +127 -70
- package/dist/esm/components/JsonViewer.d.ts +2 -1
- package/dist/esm/components/JsonViewer.js +2 -2
- package/dist/esm/components/MetaAccordion.d.ts +1 -1
- package/dist/esm/components/MetaAccordion.js +46 -3
- package/dist/esm/components/NetworkIcons.d.ts +7 -0
- package/dist/esm/components/NetworkIcons.js +34 -0
- package/dist/esm/components/ReduxTreeView.d.ts +6 -0
- package/dist/esm/components/ReduxTreeView.js +366 -0
- package/dist/esm/components/TouchableScale.js +16 -2
- package/dist/esm/components/TreeNode.js +3 -3
- package/dist/esm/customHooks/reduxLogger.d.ts +4 -0
- package/dist/esm/customHooks/reduxLogger.js +43 -1
- package/dist/esm/index.js +1523 -507
- package/dist/esm/styles/index.d.ts +11 -1
- package/dist/esm/styles/index.js +19 -9
- package/dist/esm/types/index.d.ts +4 -0
- package/example/App.tsx +46 -0
- package/package.json +7 -5
|
@@ -161,7 +161,7 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
|
|
|
161
161
|
iconBtnMinimal: {
|
|
162
162
|
padding: number;
|
|
163
163
|
};
|
|
164
|
-
|
|
164
|
+
closeButtonSquare: {
|
|
165
165
|
width: number;
|
|
166
166
|
height: number;
|
|
167
167
|
borderRadius: number;
|
|
@@ -198,6 +198,16 @@ export declare const getRawStyles: (colors: typeof AppColors) => {
|
|
|
198
198
|
shadowOpacity: number;
|
|
199
199
|
shadowRadius: number;
|
|
200
200
|
};
|
|
201
|
+
fabIconContainer: {
|
|
202
|
+
backgroundColor: string;
|
|
203
|
+
borderRadius: number;
|
|
204
|
+
width: number;
|
|
205
|
+
height: number;
|
|
206
|
+
borderWidth: number;
|
|
207
|
+
borderColor: string;
|
|
208
|
+
alignItems: string;
|
|
209
|
+
justifyContent: string;
|
|
210
|
+
};
|
|
201
211
|
fabPulseRing: {
|
|
202
212
|
position: string;
|
|
203
213
|
width: number;
|
|
@@ -42,16 +42,16 @@ const getRawStyles = (colors) => ({
|
|
|
42
42
|
flexDirection: 'row',
|
|
43
43
|
alignItems: 'center',
|
|
44
44
|
paddingHorizontal: 12,
|
|
45
|
-
paddingVertical:
|
|
45
|
+
paddingVertical: 10,
|
|
46
46
|
zIndex: 10,
|
|
47
|
-
minHeight:
|
|
47
|
+
minHeight: 64,
|
|
48
48
|
shadowColor: '#000000',
|
|
49
49
|
shadowOffset: { width: 0, height: 2 },
|
|
50
50
|
shadowOpacity: 0.08,
|
|
51
51
|
shadowRadius: 4,
|
|
52
52
|
elevation: 4,
|
|
53
53
|
},
|
|
54
|
-
headerLeft: { flex:
|
|
54
|
+
headerLeft: { flex: 2, alignItems: 'flex-start' },
|
|
55
55
|
headerCenter: { flex: 3, alignItems: 'center' },
|
|
56
56
|
headerRight: {
|
|
57
57
|
flex: 1,
|
|
@@ -176,10 +176,10 @@ const getRawStyles = (colors) => ({
|
|
|
176
176
|
letterSpacing: 0.2,
|
|
177
177
|
},
|
|
178
178
|
iconBtnMinimal: { padding: 6 },
|
|
179
|
-
|
|
179
|
+
closeButtonSquare: {
|
|
180
180
|
width: 32,
|
|
181
181
|
height: 32,
|
|
182
|
-
borderRadius:
|
|
182
|
+
borderRadius: 8,
|
|
183
183
|
backgroundColor: 'rgba(255, 255, 255, 0.15)',
|
|
184
184
|
alignItems: 'center',
|
|
185
185
|
justifyContent: 'center',
|
|
@@ -202,6 +202,16 @@ const getRawStyles = (colors) => ({
|
|
|
202
202
|
shadowOpacity: 0.4,
|
|
203
203
|
shadowRadius: 12,
|
|
204
204
|
},
|
|
205
|
+
fabIconContainer: {
|
|
206
|
+
backgroundColor: '#FFFFFF',
|
|
207
|
+
borderRadius: 28,
|
|
208
|
+
width: 56,
|
|
209
|
+
height: 56,
|
|
210
|
+
borderWidth: 1.5,
|
|
211
|
+
borderColor: colors.purple,
|
|
212
|
+
alignItems: 'center',
|
|
213
|
+
justifyContent: 'center',
|
|
214
|
+
},
|
|
205
215
|
fabPulseRing: {
|
|
206
216
|
position: 'absolute',
|
|
207
217
|
width: 60,
|
|
@@ -1447,10 +1457,10 @@ const getRawStyles = (colors) => ({
|
|
|
1447
1457
|
gap: 10,
|
|
1448
1458
|
},
|
|
1449
1459
|
dashboardModuleCard: {
|
|
1450
|
-
backgroundColor:
|
|
1460
|
+
backgroundColor: colors.primaryLight,
|
|
1451
1461
|
borderRadius: 10,
|
|
1452
1462
|
borderWidth: 1,
|
|
1453
|
-
borderColor:
|
|
1463
|
+
borderColor: colors.grayBorderSecondary,
|
|
1454
1464
|
padding: 12,
|
|
1455
1465
|
shadowColor: '#000000',
|
|
1456
1466
|
shadowOpacity: 0.03,
|
|
@@ -1464,7 +1474,7 @@ const getRawStyles = (colors) => ({
|
|
|
1464
1474
|
alignItems: 'center',
|
|
1465
1475
|
marginBottom: 10,
|
|
1466
1476
|
borderBottomWidth: 1,
|
|
1467
|
-
borderBottomColor:
|
|
1477
|
+
borderBottomColor: colors.dividerColor,
|
|
1468
1478
|
paddingBottom: 8,
|
|
1469
1479
|
},
|
|
1470
1480
|
dashboardModuleTitle: {
|
|
@@ -1486,7 +1496,7 @@ const getRawStyles = (colors) => ({
|
|
|
1486
1496
|
dashboardGridItem: {
|
|
1487
1497
|
flex: 1,
|
|
1488
1498
|
minWidth: '22%',
|
|
1489
|
-
backgroundColor:
|
|
1499
|
+
backgroundColor: colors.grayBackground,
|
|
1490
1500
|
borderRadius: 8,
|
|
1491
1501
|
paddingVertical: 8,
|
|
1492
1502
|
paddingHorizontal: 4,
|
|
@@ -92,6 +92,7 @@ export interface TreeNodeProps {
|
|
|
92
92
|
level?: number;
|
|
93
93
|
search?: string;
|
|
94
94
|
forceOpen?: boolean;
|
|
95
|
+
defaultExpandDepth?: number;
|
|
95
96
|
}
|
|
96
97
|
export interface LogCardProps {
|
|
97
98
|
item: NetworkLog;
|
|
@@ -109,6 +110,9 @@ export interface MetaAccordionProps {
|
|
|
109
110
|
duration: number | null;
|
|
110
111
|
size: string;
|
|
111
112
|
triggeredAt: string;
|
|
113
|
+
method?: string;
|
|
114
|
+
contentType?: string;
|
|
115
|
+
url?: string;
|
|
112
116
|
}
|
|
113
117
|
export interface HeadersSectionProps {
|
|
114
118
|
title: string;
|
|
@@ -20,20 +20,20 @@ const ParamRowItem = ({ paramKey, value, }) => {
|
|
|
20
20
|
const valStr = isObject ? JSON.stringify(value, null, 2) : String(value);
|
|
21
21
|
const [expanded, setExpanded] = useState(false);
|
|
22
22
|
const isLong = valStr.length > 80 || valStr.includes('\n') || isObject;
|
|
23
|
-
return (<View style={detailStyles.dataBox}>
|
|
23
|
+
return (<View style={[detailStyles.dataBox, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
24
24
|
<View style={detailStyles.dataBoxHeader}>
|
|
25
|
-
<Text style={detailStyles.dataBoxKey} numberOfLines={1}>
|
|
25
|
+
<Text style={[detailStyles.dataBoxKey, { color: AppColors.primaryBlack }]} numberOfLines={1}>
|
|
26
26
|
{paramKey}
|
|
27
27
|
</Text>
|
|
28
28
|
<CopyButton value={valStr} label={paramKey}/>
|
|
29
29
|
</View>
|
|
30
|
-
{expanded && isObject ? (<View style={detailStyles.jsonBlock}>
|
|
30
|
+
{expanded && isObject ? (<View style={[detailStyles.jsonBlock, { backgroundColor: AppColors.grayBackground, borderColor: AppColors.grayBorderSecondary }]}>
|
|
31
31
|
<JsonViewer data={value}/>
|
|
32
|
-
</View>) : (<Text style={detailStyles.dataBoxVal} selectable numberOfLines={expanded ? undefined : 2}>
|
|
32
|
+
</View>) : (<Text style={[detailStyles.dataBoxVal, { color: AppColors.primaryBlack }]} selectable numberOfLines={expanded ? undefined : 2}>
|
|
33
33
|
{valStr}
|
|
34
34
|
</Text>)}
|
|
35
|
-
{isLong && (<Pressable onPress={() => setExpanded(!expanded)} style={detailStyles.showMoreBtn}>
|
|
36
|
-
<Text style={detailStyles.showMoreText}>
|
|
35
|
+
{isLong && (<Pressable onPress={() => setExpanded(!expanded)} style={[detailStyles.showMoreBtn, { backgroundColor: AppColors.grayBackground }]}>
|
|
36
|
+
<Text style={[detailStyles.showMoreText, { color: AppColors.grayTextStrong }]}>
|
|
37
37
|
{expanded ? 'Show Less' : 'Show More'}
|
|
38
38
|
</Text>
|
|
39
39
|
</Pressable>)}
|
|
@@ -45,8 +45,8 @@ const ParamTable = ({ data, emptyLabel, }) => {
|
|
|
45
45
|
value: data[key],
|
|
46
46
|
}));
|
|
47
47
|
if (entries.length === 0) {
|
|
48
|
-
return (<View style={detailStyles.emptyParams}>
|
|
49
|
-
<Text style={detailStyles.emptyParamsText}>
|
|
48
|
+
return (<View style={[detailStyles.emptyParams, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
49
|
+
<Text style={[detailStyles.emptyParamsText, { color: AppColors.grayTextWeak }]}>
|
|
50
50
|
{emptyLabel ?? 'No parameters'}
|
|
51
51
|
</Text>
|
|
52
52
|
</View>);
|
|
@@ -61,14 +61,14 @@ const SectionCard = ({ title, children, count, accentColor = AppColors.purple, }
|
|
|
61
61
|
{children}
|
|
62
62
|
</View>);
|
|
63
63
|
}
|
|
64
|
-
return (<View style={detailStyles.sectionCard}>
|
|
64
|
+
return (<View style={[detailStyles.sectionCard, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
65
65
|
<View style={detailStyles.sectionHeader}>
|
|
66
66
|
<View style={detailStyles.sectionTitleRow}>
|
|
67
67
|
<View style={[
|
|
68
68
|
detailStyles.sectionAccentDot,
|
|
69
69
|
{ backgroundColor: accentColor },
|
|
70
70
|
]}/>
|
|
71
|
-
<Text style={detailStyles.sectionTitle}>{title.toUpperCase()}</Text>
|
|
71
|
+
<Text style={[detailStyles.sectionTitle, { color: AppColors.primaryBlack }]}>{title.toUpperCase()}</Text>
|
|
72
72
|
</View>
|
|
73
73
|
{typeof count === 'number' && (<View style={[
|
|
74
74
|
detailStyles.countBadge,
|
|
@@ -167,7 +167,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
167
167
|
value: event.source,
|
|
168
168
|
color: sourceColor,
|
|
169
169
|
});
|
|
170
|
-
return (<ScrollView style={detailStyles.scroll} contentContainerStyle={detailStyles.content} showsVerticalScrollIndicator contentInsetAdjustmentBehavior="never" automaticallyAdjustContentInsets={false}>
|
|
170
|
+
return (<ScrollView style={[detailStyles.scroll, { backgroundColor: AppColors.grayBackground }]} contentContainerStyle={detailStyles.content} showsVerticalScrollIndicator contentInsetAdjustmentBehavior="never" automaticallyAdjustContentInsets={false}>
|
|
171
171
|
<LinearGradient colors={[
|
|
172
172
|
`${eventColor}18`,
|
|
173
173
|
`${eventColor}06`,
|
|
@@ -213,9 +213,12 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
213
213
|
{topMetrics.length > 0 && (<ScrollView horizontal showsHorizontalScrollIndicator={false} style={detailStyles.metricsScroll} contentContainerStyle={detailStyles.metricsGrid}>
|
|
214
214
|
{topMetrics.map((item, idx) => (<View key={idx} style={[
|
|
215
215
|
detailStyles.metricCard,
|
|
216
|
-
{
|
|
216
|
+
{
|
|
217
|
+
borderLeftColor: item.color,
|
|
218
|
+
backgroundColor: AppColors.primaryLight,
|
|
219
|
+
},
|
|
217
220
|
]}>
|
|
218
|
-
<Text style={detailStyles.metricLabel}>{item.key}</Text>
|
|
221
|
+
<Text style={[detailStyles.metricLabel, { color: AppColors.grayTextWeak }]}>{item.key}</Text>
|
|
219
222
|
<Text style={[detailStyles.metricValue, { color: item.color }]} numberOfLines={1}>
|
|
220
223
|
{item.value}
|
|
221
224
|
</Text>
|
|
@@ -223,25 +226,27 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
223
226
|
</ScrollView>)}
|
|
224
227
|
</LinearGradient>
|
|
225
228
|
|
|
226
|
-
<View style={detailStyles.tabRow}>
|
|
229
|
+
<View style={[detailStyles.tabRow, { backgroundColor: AppColors.grayBackground }]}>
|
|
227
230
|
<Pressable style={[
|
|
228
231
|
detailStyles.tabButton,
|
|
229
|
-
activeTab === 'unformatted' && detailStyles.tabActive,
|
|
232
|
+
activeTab === 'unformatted' && [detailStyles.tabActive, { backgroundColor: AppColors.primaryLight }],
|
|
230
233
|
]} onPress={() => setActiveTab('unformatted')}>
|
|
231
234
|
<Text style={[
|
|
232
235
|
detailStyles.tabText,
|
|
233
|
-
|
|
236
|
+
{ color: AppColors.grayTextWeak },
|
|
237
|
+
activeTab === 'unformatted' && [detailStyles.tabTextActive, { color: AppColors.primaryBlack }],
|
|
234
238
|
]}>
|
|
235
239
|
JSON Viewer
|
|
236
240
|
</Text>
|
|
237
241
|
</Pressable>
|
|
238
242
|
<Pressable style={[
|
|
239
243
|
detailStyles.tabButton,
|
|
240
|
-
activeTab === 'formatted' && detailStyles.tabActive,
|
|
244
|
+
activeTab === 'formatted' && [detailStyles.tabActive, { backgroundColor: AppColors.primaryLight }],
|
|
241
245
|
]} onPress={() => setActiveTab('formatted')}>
|
|
242
246
|
<Text style={[
|
|
243
247
|
detailStyles.tabText,
|
|
244
|
-
|
|
248
|
+
{ color: AppColors.grayTextWeak },
|
|
249
|
+
activeTab === 'formatted' && [detailStyles.tabTextActive, { color: AppColors.primaryBlack }],
|
|
245
250
|
]}>
|
|
246
251
|
Tabular View
|
|
247
252
|
</Text>
|
|
@@ -249,8 +254,8 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
249
254
|
</View>
|
|
250
255
|
|
|
251
256
|
{activeTab === 'unformatted' && (<View style={detailStyles.searchRow}>
|
|
252
|
-
<View style={styles.detailSearchBox}>
|
|
253
|
-
<TextInput placeholder="Search JSON data..." placeholderTextColor={AppColors.grayTextWeak} value={search} onChangeText={setSearch} style={styles.detailSearchInput} autoCorrect={false} autoCapitalize="none"/>
|
|
257
|
+
<View style={[styles.detailSearchBox, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
258
|
+
<TextInput placeholder="Search JSON data..." placeholderTextColor={AppColors.grayTextWeak} value={search} onChangeText={setSearch} style={[styles.detailSearchInput, { color: AppColors.primaryBlack }]} autoCorrect={false} autoCapitalize="none"/>
|
|
254
259
|
{search.length > 0 && (<Pressable onPress={() => setSearch('')} hitSlop={10} style={{ padding: 8 }}>
|
|
255
260
|
<ClearIcon color={AppColors.grayTextWeak} size={14}/>
|
|
256
261
|
</Pressable>)}
|
|
@@ -268,7 +273,7 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
268
273
|
</View>)}
|
|
269
274
|
|
|
270
275
|
{activeTab === 'unformatted' && (<SectionCard accentColor={AppColors.purple}>
|
|
271
|
-
<View style={[detailStyles.jsonBlock, { marginLeft: 0, marginTop: 0 }]}>
|
|
276
|
+
<View style={[detailStyles.jsonBlock, { marginLeft: 0, marginTop: 0, backgroundColor: AppColors.grayBackground, borderColor: AppColors.grayBorderSecondary }]}>
|
|
272
277
|
<JsonViewer data={{
|
|
273
278
|
name: event.name,
|
|
274
279
|
params: params,
|
|
@@ -282,8 +287,8 @@ const AnalyticsDetail = ({ event, }) => {
|
|
|
282
287
|
</SectionCard>)}
|
|
283
288
|
|
|
284
289
|
{/* Empty state */}
|
|
285
|
-
{paramCount === 0 && upCount === 0 && activeTab !== 'unformatted' && (<View style={detailStyles.emptyParams}>
|
|
286
|
-
<Text style={detailStyles.emptyParamsText}>
|
|
290
|
+
{paramCount === 0 && upCount === 0 && activeTab !== 'unformatted' && (<View style={[detailStyles.emptyParams, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
291
|
+
<Text style={[detailStyles.emptyParamsText, { color: AppColors.grayTextWeak }]}>
|
|
287
292
|
No parameters recorded for this event
|
|
288
293
|
</Text>
|
|
289
294
|
</View>)}
|
|
@@ -63,11 +63,11 @@ const AnalyticsEventCard = React.memo(function AnalyticsEventCard({ event, onPre
|
|
|
63
63
|
return (<View style={cardStyles.container}>
|
|
64
64
|
{/* ── Gap Indicator ─────────────────────────────────────────────────── */}
|
|
65
65
|
{showGap && (<View style={cardStyles.gapContainer}>
|
|
66
|
-
<Text style={cardStyles.gapText}>{formatGap(msSincePrev)}</Text>
|
|
66
|
+
<Text style={[cardStyles.gapText, { color: AppColors.grayTextWeak }]}>{formatGap(msSincePrev)}</Text>
|
|
67
67
|
</View>)}
|
|
68
68
|
|
|
69
69
|
{/* ── Main Card ─────────────────────────────────────────────────────── */}
|
|
70
|
-
<TouchableScale onPress={onPress} style={cardStyles.modernCard}>
|
|
70
|
+
<TouchableScale onPress={onPress} style={[cardStyles.modernCard, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
71
71
|
<Animated.View style={[
|
|
72
72
|
StyleSheet.absoluteFill,
|
|
73
73
|
{
|
|
@@ -104,7 +104,7 @@ const AnalyticsEventCard = React.memo(function AnalyticsEventCard({ event, onPre
|
|
|
104
104
|
</Text>
|
|
105
105
|
</View>) : null}
|
|
106
106
|
</View>
|
|
107
|
-
<Text style={cardStyles.timestamp}>
|
|
107
|
+
<Text style={[cardStyles.timestamp, { color: AppColors.grayTextWeak }]}>
|
|
108
108
|
{formatTime(event.timestamp)}
|
|
109
109
|
</Text>
|
|
110
110
|
</View>
|
|
@@ -116,9 +116,9 @@ const AnalyticsEventCard = React.memo(function AnalyticsEventCard({ event, onPre
|
|
|
116
116
|
event.screenName ||
|
|
117
117
|
event.params?.firebase_screen ||
|
|
118
118
|
event.params?.screen_name ||
|
|
119
|
-
event.params?.firebase_screen_class ? (<View style={cardStyles.chip}>
|
|
119
|
+
event.params?.firebase_screen_class ? (<View style={[cardStyles.chip, { backgroundColor: AppColors.grayBackground, borderColor: AppColors.grayBorderSecondary }]}>
|
|
120
120
|
<View style={[cardStyles.screenDot, { backgroundColor: color }]}/>
|
|
121
|
-
<Text style={cardStyles.chipText} numberOfLines={1}>
|
|
121
|
+
<Text style={[cardStyles.chipText, { color: AppColors.grayText }]} numberOfLines={1}>
|
|
122
122
|
{computedScreenName ||
|
|
123
123
|
event.screenName ||
|
|
124
124
|
event.params?.firebase_screen ||
|
|
@@ -127,14 +127,14 @@ const AnalyticsEventCard = React.memo(function AnalyticsEventCard({ event, onPre
|
|
|
127
127
|
</Text>
|
|
128
128
|
</View>) : null}
|
|
129
129
|
|
|
130
|
-
<View style={cardStyles.chip}>
|
|
131
|
-
<Text style={cardStyles.chipText}>
|
|
130
|
+
<View style={[cardStyles.chip, { backgroundColor: AppColors.grayBackground, borderColor: AppColors.grayBorderSecondary }]}>
|
|
131
|
+
<Text style={[cardStyles.chipText, { color: AppColors.grayText }]}>
|
|
132
132
|
{'{} '} {paramCount} params
|
|
133
133
|
</Text>
|
|
134
134
|
</View>
|
|
135
135
|
|
|
136
|
-
{userPropCount > 0 && (<View style={cardStyles.chip}>
|
|
137
|
-
<Text style={cardStyles.chipText}>★ {userPropCount} props</Text>
|
|
136
|
+
{userPropCount > 0 && (<View style={[cardStyles.chip, { backgroundColor: AppColors.grayBackground, borderColor: AppColors.grayBorderSecondary }]}>
|
|
137
|
+
<Text style={[cardStyles.chipText, { color: AppColors.grayText }]}>★ {userPropCount} props</Text>
|
|
138
138
|
</View>)}
|
|
139
139
|
</View>
|
|
140
140
|
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Svg, { Circle, Path, G, Defs, LinearGradient, RadialGradient, Stop, Rect, Ellipse, Line } from 'react-native-svg';
|
|
3
|
+
export const BrandSquareIcon = ({ size = 56 }) => {
|
|
4
|
+
return (<Svg width={size} height={size} viewBox="0 0 256 256" fill="none">
|
|
5
|
+
<Defs>
|
|
6
|
+
<LinearGradient id="tileSquare" x1="30" y1="30" x2="210" y2="222" gradientUnits="userSpaceOnUse">
|
|
7
|
+
<Stop offset="0" stopColor="#141B33"/>
|
|
8
|
+
<Stop offset="1" stopColor="#0A0E1C"/>
|
|
9
|
+
</LinearGradient>
|
|
10
|
+
<LinearGradient id="edgeSquare" x1="14" y1="22" x2="220" y2="228" gradientUnits="userSpaceOnUse">
|
|
11
|
+
<Stop offset="0" stopColor="#3A4E7A"/>
|
|
12
|
+
<Stop offset="1" stopColor="#1A2238"/>
|
|
13
|
+
</LinearGradient>
|
|
14
|
+
<LinearGradient id="beamSquare" x1="70" y1="74" x2="194" y2="187" gradientUnits="userSpaceOnUse">
|
|
15
|
+
<Stop offset="0" stopColor="#5EEAD4"/>
|
|
16
|
+
<Stop offset="0.5" stopColor="#38BDF8"/>
|
|
17
|
+
<Stop offset="1" stopColor="#A78BFA"/>
|
|
18
|
+
</LinearGradient>
|
|
19
|
+
<RadialGradient id="haloSquare" cx="0.5" cy="0.45" r="0.55">
|
|
20
|
+
<Stop offset="0" stopColor="#38BDF8" stopOpacity={0.12}/>
|
|
21
|
+
<Stop offset="1" stopColor="#38BDF8" stopOpacity={0}/>
|
|
22
|
+
</RadialGradient>
|
|
23
|
+
<LinearGradient id="owlbodySquare" x1="78" y1="60" x2="178" y2="186" gradientUnits="userSpaceOnUse">
|
|
24
|
+
<Stop offset="0" stopColor="#202E55"/>
|
|
25
|
+
<Stop offset="1" stopColor="#10182F"/>
|
|
26
|
+
</LinearGradient>
|
|
27
|
+
<LinearGradient id="beakSquare" x1="120" y1="151" x2="136" y2="168" gradientUnits="userSpaceOnUse">
|
|
28
|
+
<Stop offset="0" stopColor="#FCD34D"/>
|
|
29
|
+
<Stop offset="1" stopColor="#FB923C"/>
|
|
30
|
+
</LinearGradient>
|
|
31
|
+
<RadialGradient id="irisSquare" cx="0.42" cy="0.38" r="0.72">
|
|
32
|
+
<Stop offset="0" stopColor="#FDE68A"/>
|
|
33
|
+
<Stop offset="0.5" stopColor="#FBBF24"/>
|
|
34
|
+
<Stop offset="1" stopColor="#F59E0B"/>
|
|
35
|
+
</RadialGradient>
|
|
36
|
+
<RadialGradient id="blushSquare" cx="0.5" cy="0.5" r="0.5">
|
|
37
|
+
<Stop offset="0" stopColor="#FB7185" stopOpacity={0.5}/>
|
|
38
|
+
<Stop offset="1" stopColor="#FB7185" stopOpacity={0}/>
|
|
39
|
+
</RadialGradient>
|
|
40
|
+
<LinearGradient id="wingSquare" x1="70" y1="120" x2="190" y2="206" gradientUnits="userSpaceOnUse">
|
|
41
|
+
<Stop offset="0" stopColor="#1A2545"/>
|
|
42
|
+
<Stop offset="1" stopColor="#0E1530"/>
|
|
43
|
+
</LinearGradient>
|
|
44
|
+
<LinearGradient id="faceplateSquare" x1="70" y1="72" x2="186" y2="152" gradientUnits="userSpaceOnUse">
|
|
45
|
+
<Stop offset="0" stopColor="#35497E"/>
|
|
46
|
+
<Stop offset="1" stopColor="#1E2D4D"/>
|
|
47
|
+
</LinearGradient>
|
|
48
|
+
<RadialGradient id="lensglassSquare" cx="0.4" cy="0.32" r="0.75">
|
|
49
|
+
<Stop offset="0" stopColor="#7DE8FF" stopOpacity={0.22}/>
|
|
50
|
+
<Stop offset="0.7" stopColor="#7DE8FF" stopOpacity={0.05}/>
|
|
51
|
+
<Stop offset="1" stopColor="#7DE8FF" stopOpacity={0}/>
|
|
52
|
+
</RadialGradient>
|
|
53
|
+
<LinearGradient id="bellySquare" x1="94" y1="126" x2="162" y2="212" gradientUnits="userSpaceOnUse">
|
|
54
|
+
<Stop offset="0" stopColor="#33477A"/>
|
|
55
|
+
<Stop offset="1" stopColor="#1D2B53"/>
|
|
56
|
+
</LinearGradient>
|
|
57
|
+
</Defs>
|
|
58
|
+
<Rect x={8} y={8} width={240} height={240} rx={58} fill="url(#tileSquare)"/>
|
|
59
|
+
<Rect x={8.6} y={8.6} width={238.8} height={238.8} rx={57.4} fill="none" stroke="url(#edgeSquare)" strokeOpacity={0.6} strokeWidth={1.2}/>
|
|
60
|
+
<Circle cx={128} cy={128} r={104} fill="url(#haloSquare)"/>
|
|
61
|
+
<G transform="translate(128 128) scale(1.16) translate(-128 -134)">
|
|
62
|
+
{/* wing 1 */}
|
|
63
|
+
<Path d="M74 124 C58 154 60 190 86 204 C79 176 77 148 88 126 Z" fill="url(#wingSquare)" stroke="url(#beamSquare)" strokeWidth={2.5} strokeOpacity={0.45}/>
|
|
64
|
+
{/* wing 2 */}
|
|
65
|
+
<Path d="M182 124 C198 154 196 190 170 204 C177 176 179 148 168 126 Z" fill="url(#wingSquare)" stroke="url(#beamSquare)" strokeWidth={2.5} strokeOpacity={0.45}/>
|
|
66
|
+
{/* body */}
|
|
67
|
+
<Path d="M62 150 C58 104 70 70 90 58 L98 42 L116 62 Q128 57 140 62 L158 42 L166 58 C186 70 198 104 194 150 C198 180 184 204 152 212 C140 216 116 216 104 212 C72 204 58 180 62 150 Z" fill="url(#owlbodySquare)" stroke="url(#beamSquare)" strokeWidth={4} strokeLinejoin="round"/>
|
|
68
|
+
|
|
69
|
+
{/* inner-ear shadows */}
|
|
70
|
+
<Path d="M99 48 L114 62 L104 63 L98 55 Z" fill="#080F22" opacity={0.5}/>
|
|
71
|
+
<Path d="M157 48 L142 62 L152 63 L158 55 Z" fill="#080F22" opacity={0.5}/>
|
|
72
|
+
|
|
73
|
+
{/* wing feather lines */}
|
|
74
|
+
<G stroke="#22325A" strokeWidth={2.2} fill="none" strokeLinecap="round" opacity={0.75}>
|
|
75
|
+
<Path d="M80 138 q-5 26 3 50"/>
|
|
76
|
+
<Path d="M90 134 q-4 26 3 48"/>
|
|
77
|
+
<Path d="M176 138 q5 26 -3 50"/>
|
|
78
|
+
<Path d="M166 134 q4 26 -3 48"/>
|
|
79
|
+
</G>
|
|
80
|
+
|
|
81
|
+
{/* belly plate */}
|
|
82
|
+
<Path d="M128 126 C151 126 164 148 162 174 C160 198 146 212 128 212 C110 212 96 198 94 174 C92 148 105 126 128 126 Z" fill="url(#bellySquare)"/>
|
|
83
|
+
|
|
84
|
+
{/* belly feather scallops */}
|
|
85
|
+
<G stroke="#3E588C" strokeWidth={2.3} fill="none" strokeLinecap="round" opacity={0.4}>
|
|
86
|
+
<Path d="M110 154 Q118 162 126 154"/>
|
|
87
|
+
<Path d="M126 154 Q134 162 142 154"/>
|
|
88
|
+
<Path d="M142 154 Q150 162 158 154"/>
|
|
89
|
+
<Path d="M102 172 Q110 180 118 172"/>
|
|
90
|
+
<Path d="M150 172 Q158 180 166 172"/>
|
|
91
|
+
<Path d="M112 190 Q120 198 128 190"/>
|
|
92
|
+
<Path d="M128 190 Q136 198 144 190"/>
|
|
93
|
+
</G>
|
|
94
|
+
|
|
95
|
+
{/* developer chest screen + code emblem */}
|
|
96
|
+
<Rect x={107} y={161} width={42} height={32} rx={9} fill="#0C1426" stroke="url(#beamSquare)" strokeWidth={2} strokeOpacity={0.7}/>
|
|
97
|
+
<G stroke="#8FD0EC" strokeWidth={3} strokeLinecap="round" strokeLinejoin="round" fill="none">
|
|
98
|
+
<Path d="M122 170 L115 177 L122 184"/>
|
|
99
|
+
<Path d="M134 170 L141 177 L134 184"/>
|
|
100
|
+
<Path d="M130 168 L126 186"/>
|
|
101
|
+
</G>
|
|
102
|
+
|
|
103
|
+
{/* facial disc */}
|
|
104
|
+
<Path d="M128 92 C148 70 186 78 186 108 C186 134 160 152 128 152 C96 152 70 134 70 108 C70 78 108 70 128 92 Z" fill="url(#faceplateSquare)" stroke="#52709E" strokeWidth={2.6} strokeOpacity={0.7}/>
|
|
105
|
+
{/* facial-disc centre ridge */}
|
|
106
|
+
<Path d="M128 96 L128 120" stroke="#52709E" strokeWidth={2} strokeLinecap="round" strokeOpacity={0.45}/>
|
|
107
|
+
|
|
108
|
+
{/* feet */}
|
|
109
|
+
<G stroke="url(#beakSquare)" strokeWidth={5} strokeLinecap="round" fill="none">
|
|
110
|
+
<Path d="M111 209 L105 224 M111 209 L111 226 M111 209 L117 224"/>
|
|
111
|
+
<Path d="M145 209 L139 224 M145 209 L145 226 M145 209 L151 224"/>
|
|
112
|
+
</G>
|
|
113
|
+
|
|
114
|
+
{/* normal eye: big cute yellow iris, dark pupil, sparkles */}
|
|
115
|
+
<Circle cx={153} cy={107} r={17} fill="url(#irisSquare)" stroke="#1A1205" strokeWidth={2.2}/>
|
|
116
|
+
<Circle cx={153} cy={108} r={8.2} fill="#0A0E18"/>
|
|
117
|
+
<Circle cx={156.2} cy={104} r={3.1} fill="#ffffff" opacity={0.95}/>
|
|
118
|
+
<Circle cx={149.6} cy={111} r={1.6} fill="#ffffff" opacity={0.7}/>
|
|
119
|
+
|
|
120
|
+
{/* beak */}
|
|
121
|
+
<Path d="M123.5 123 Q128 121 132.5 123 Q131 132 128 134.5 Q125 132 123.5 123 Z" fill="url(#beakSquare)"/>
|
|
122
|
+
|
|
123
|
+
{/* magnifier held to the big (debug) eye */}
|
|
124
|
+
<Circle cx={95} cy={103} r={20} fill="url(#irisSquare)" stroke="#1A1205" strokeWidth={2.6}/>
|
|
125
|
+
<Circle cx={95} cy={104} r={10} fill="#0A0E18"/>
|
|
126
|
+
<Circle cx={98.6} cy={100} r={3.4} fill="#ffffff" opacity={0.95}/>
|
|
127
|
+
<Circle cx={91} cy={107} r={1.8} fill="#ffffff" opacity={0.7}/>
|
|
128
|
+
<Circle cx={95} cy={103} r={28} fill="url(#lensglassSquare)"/>
|
|
129
|
+
<Path d="M77 87 A28 28 0 0 1 106 79" fill="none" stroke="#ffffff" strokeWidth={4} strokeLinecap="round" strokeOpacity={0.5}/>
|
|
130
|
+
<Line x1={75} y1={123} x2={54} y2={147} stroke="#0A0F1C" strokeWidth={14} strokeLinecap="round"/>
|
|
131
|
+
<Line x1={75} y1={123} x2={54} y2={147} stroke="url(#beamSquare)" strokeWidth={8.5} strokeLinecap="round"/>
|
|
132
|
+
<Circle cx={95} cy={103} r={28} fill="none" stroke="url(#beamSquare)" strokeWidth={7}/>
|
|
133
|
+
|
|
134
|
+
{/* rosy cheeks */}
|
|
135
|
+
<Ellipse cx={83} cy={127} rx={9} ry={6} fill="url(#blushSquare)"/>
|
|
136
|
+
<Ellipse cx={167} cy={122} rx={9} ry={6} fill="url(#blushSquare)"/>
|
|
137
|
+
</G>
|
|
138
|
+
</Svg>);
|
|
139
|
+
};
|
|
140
|
+
export default BrandSquareIcon;
|
|
@@ -224,7 +224,7 @@ const getStyleForType = (type) => {
|
|
|
224
224
|
case 'value':
|
|
225
225
|
return styles.value;
|
|
226
226
|
default:
|
|
227
|
-
return styles.plain;
|
|
227
|
+
return [styles.plain, { color: AppColors.primaryBlack }];
|
|
228
228
|
}
|
|
229
229
|
};
|
|
230
230
|
const ArrowUpIcon = ({ color = '#64748B', size = 16 }) => (<Svg width={size} height={size} viewBox="0 0 24 24" fill="none">
|
|
@@ -258,26 +258,32 @@ const CodeSnippetLine = React.memo(({ line, lineIndex, language, search, isActiv
|
|
|
258
258
|
};
|
|
259
259
|
return (<View style={[styles.lineRow, isActiveMatch && styles.activeMatchRow]}>
|
|
260
260
|
{/* Gutter Line Number */}
|
|
261
|
-
<View style={[styles.gutter, isActiveMatch && styles.activeMatchGutter]}>
|
|
262
|
-
<Text style={[styles.lineNumber, isActiveMatch && styles.activeMatchLineNumber]}>{lineIndex + 1}</Text>
|
|
261
|
+
<View style={[styles.gutter, { backgroundColor: AppColors.grayBackground, borderRightColor: AppColors.grayBorderSecondary }, isActiveMatch && styles.activeMatchGutter]}>
|
|
262
|
+
<Text style={[styles.lineNumber, { color: AppColors.grayTextWeak }, isActiveMatch && styles.activeMatchLineNumber]}>{lineIndex + 1}</Text>
|
|
263
263
|
</View>
|
|
264
264
|
|
|
265
265
|
{/* Highlighted Code Line */}
|
|
266
266
|
<View style={styles.codeLine}>
|
|
267
|
-
<Text style={styles.codeLineText}>
|
|
268
|
-
{tokens.length === 0 ? (<Text style={styles.plain}> </Text>) : (tokens.map((token, tokenIdx) => (<React.Fragment key={tokenIdx}>
|
|
267
|
+
<Text style={[styles.codeLineText, { color: AppColors.primaryBlack }]}>
|
|
268
|
+
{tokens.length === 0 ? (<Text style={[styles.plain, { color: AppColors.primaryBlack }]}> </Text>) : (tokens.map((token, tokenIdx) => (<React.Fragment key={tokenIdx}>
|
|
269
269
|
{renderTokenText(token.text, token.type)}
|
|
270
270
|
</React.Fragment>)))}
|
|
271
271
|
</Text>
|
|
272
272
|
</View>
|
|
273
273
|
</View>);
|
|
274
274
|
});
|
|
275
|
-
const CodeSnippet = ({ code, language, }) => {
|
|
275
|
+
const CodeSnippet = ({ code, language, search, }) => {
|
|
276
276
|
const [searchQuery, setSearchQuery] = useState('');
|
|
277
277
|
const [debouncedQuery, setDebouncedQuery] = useState('');
|
|
278
278
|
const [currentMatchIdx, setCurrentMatchIdx] = useState(-1);
|
|
279
279
|
const [visibleLinesCount, setVisibleLinesCount] = useState(200);
|
|
280
280
|
const flatListRef = useRef(null);
|
|
281
|
+
// Sync prop search to searchQuery
|
|
282
|
+
useEffect(() => {
|
|
283
|
+
if (search !== undefined) {
|
|
284
|
+
setSearchQuery(search);
|
|
285
|
+
}
|
|
286
|
+
}, [search]);
|
|
281
287
|
// Debounce search query updates
|
|
282
288
|
useEffect(() => {
|
|
283
289
|
const timer = setTimeout(() => {
|
|
@@ -322,7 +328,7 @@ const CodeSnippet = ({ code, language, }) => {
|
|
|
322
328
|
// Reset scroll and states on code/language changes
|
|
323
329
|
useEffect(() => {
|
|
324
330
|
setVisibleLinesCount(200);
|
|
325
|
-
setSearchQuery('');
|
|
331
|
+
setSearchQuery(search || '');
|
|
326
332
|
setCurrentMatchIdx(-1);
|
|
327
333
|
}, [code, language]);
|
|
328
334
|
// Auto-scroll to the first match when search query returns matches
|
|
@@ -348,32 +354,32 @@ const CodeSnippet = ({ code, language, }) => {
|
|
|
348
354
|
try {
|
|
349
355
|
flatListRef.current?.scrollToIndex({
|
|
350
356
|
index: lineIdx,
|
|
351
|
-
animated:
|
|
352
|
-
viewPosition: 0.
|
|
357
|
+
animated: false,
|
|
358
|
+
viewPosition: 0.3,
|
|
353
359
|
});
|
|
354
360
|
}
|
|
355
361
|
catch (e) {
|
|
356
362
|
// Fallback recovery is handled by onScrollToIndexFailed
|
|
357
363
|
}
|
|
358
|
-
},
|
|
364
|
+
}, 50);
|
|
359
365
|
};
|
|
360
366
|
const onScrollToIndexFailed = (error) => {
|
|
361
367
|
flatListRef.current?.scrollToOffset({
|
|
362
368
|
offset: error.averageItemLength * error.index,
|
|
363
|
-
animated:
|
|
369
|
+
animated: false,
|
|
364
370
|
});
|
|
365
371
|
setTimeout(() => {
|
|
366
372
|
try {
|
|
367
373
|
flatListRef.current?.scrollToIndex({
|
|
368
374
|
index: error.index,
|
|
369
|
-
animated:
|
|
370
|
-
viewPosition: 0.
|
|
375
|
+
animated: false,
|
|
376
|
+
viewPosition: 0.3,
|
|
371
377
|
});
|
|
372
378
|
}
|
|
373
379
|
catch (err) {
|
|
374
380
|
console.warn('Scroll to line index failed after fallback retry:', err);
|
|
375
381
|
}
|
|
376
|
-
},
|
|
382
|
+
}, 60);
|
|
377
383
|
};
|
|
378
384
|
const handleNextMatch = () => {
|
|
379
385
|
if (matches.length === 0)
|
|
@@ -404,12 +410,12 @@ const CodeSnippet = ({ code, language, }) => {
|
|
|
404
410
|
return (<View style={{ flex: 1 }}>
|
|
405
411
|
{/* Search Header Row */}
|
|
406
412
|
<View style={styles.searchRow}>
|
|
407
|
-
<View style={styles.searchBar}>
|
|
413
|
+
<View style={[styles.searchBar, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
408
414
|
<SearchIcon color={AppColors.grayTextWeak} size={15}/>
|
|
409
|
-
<TextInput placeholder={`Search ${language.toUpperCase()}...`} placeholderTextColor={AppColors.grayTextWeak} value={searchQuery} onChangeText={setSearchQuery} style={styles.searchInput} autoCorrect={false} autoCapitalize="none"/>
|
|
415
|
+
<TextInput placeholder={`Search ${language.toUpperCase()}...`} placeholderTextColor={AppColors.grayTextWeak} value={searchQuery} onChangeText={setSearchQuery} style={[styles.searchInput, { color: AppColors.primaryBlack }]} autoCorrect={false} autoCapitalize="none"/>
|
|
410
416
|
|
|
411
417
|
{/* Matches Info */}
|
|
412
|
-
{debouncedQuery.length >= 2 && (<Text style={styles.matchCountText}>
|
|
418
|
+
{debouncedQuery.length >= 2 && (<Text style={[styles.matchCountText, { backgroundColor: AppColors.grayBackground, color: AppColors.grayTextWeak }]}>
|
|
413
419
|
{matches.length > 0 ? `${currentMatchIdx + 1}/${matches.length}` : '0/0'}
|
|
414
420
|
</Text>)}
|
|
415
421
|
|
|
@@ -419,12 +425,12 @@ const CodeSnippet = ({ code, language, }) => {
|
|
|
419
425
|
</View>
|
|
420
426
|
|
|
421
427
|
{/* Up / Down Arrow Navigation Buttons */}
|
|
422
|
-
{matches.length > 0 && (<View style={styles.navArrowsGroup}>
|
|
428
|
+
{matches.length > 0 && (<View style={[styles.navArrowsGroup, { backgroundColor: AppColors.primaryLight, borderColor: AppColors.grayBorderSecondary }]}>
|
|
423
429
|
<TouchableScale onPress={handlePrevMatch} hitSlop={8} style={styles.navArrowBtn}>
|
|
424
|
-
<ArrowUpIcon color=
|
|
430
|
+
<ArrowUpIcon color={AppColors.grayTextStrong} size={14}/>
|
|
425
431
|
</TouchableScale>
|
|
426
432
|
<TouchableScale onPress={handleNextMatch} hitSlop={8} style={styles.navArrowBtn}>
|
|
427
|
-
<ArrowDownIcon color=
|
|
433
|
+
<ArrowDownIcon color={AppColors.grayTextStrong} size={14}/>
|
|
428
434
|
</TouchableScale>
|
|
429
435
|
</View>)}
|
|
430
436
|
|
|
@@ -432,7 +438,7 @@ const CodeSnippet = ({ code, language, }) => {
|
|
|
432
438
|
</View>
|
|
433
439
|
|
|
434
440
|
{/* Code Snippet list container */}
|
|
435
|
-
<View style={styles.container}>
|
|
441
|
+
<View style={[styles.container, { backgroundColor: AppColors.grayBackground, borderColor: AppColors.grayBorderSecondary }]}>
|
|
436
442
|
<FlatList ref={flatListRef} data={visibleLines} renderItem={renderLine} keyExtractor={(_, index) => String(index)} maxToRenderPerBatch={30} windowSize={5} initialNumToRender={50} removeClippedSubviews={Platform.OS === 'android'} onEndReached={handleEndReached} onEndReachedThreshold={0.5} onScrollToIndexFailed={onScrollToIndexFailed}/>
|
|
437
443
|
</View>
|
|
438
444
|
</View>);
|
|
@@ -508,7 +514,9 @@ const styles = StyleSheet.create({
|
|
|
508
514
|
paddingVertical: 1,
|
|
509
515
|
},
|
|
510
516
|
activeMatchRow: {
|
|
511
|
-
backgroundColor: 'rgba(234, 179, 8, 0.
|
|
517
|
+
backgroundColor: 'rgba(234, 179, 8, 0.22)',
|
|
518
|
+
borderLeftWidth: 4,
|
|
519
|
+
borderLeftColor: '#EAB308',
|
|
512
520
|
},
|
|
513
521
|
gutter: {
|
|
514
522
|
width: 40,
|
|
@@ -521,8 +529,8 @@ const styles = StyleSheet.create({
|
|
|
521
529
|
paddingTop: 1,
|
|
522
530
|
},
|
|
523
531
|
activeMatchGutter: {
|
|
524
|
-
backgroundColor: 'rgba(234, 179, 8, 0.
|
|
525
|
-
borderRightColor: 'rgba(234, 179, 8, 0.
|
|
532
|
+
backgroundColor: 'rgba(234, 179, 8, 0.35)',
|
|
533
|
+
borderRightColor: 'rgba(234, 179, 8, 0.5)',
|
|
526
534
|
},
|
|
527
535
|
lineNumber: {
|
|
528
536
|
fontFamily: monoFont,
|