rn-backstage 1.1.0 → 1.2.0
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 +39 -19
- package/lib/commonjs/Backstage.js +4 -0
- package/lib/commonjs/Backstage.js.map +1 -1
- package/lib/commonjs/components/BackstagePanel.js +21 -6
- package/lib/commonjs/components/BackstagePanel.js.map +1 -1
- package/lib/commonjs/components/FlagsTab.js +255 -0
- package/lib/commonjs/components/FlagsTab.js.map +1 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js +1 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/module/Backstage.js +4 -0
- package/lib/module/Backstage.js.map +1 -1
- package/lib/module/components/BackstagePanel.js +21 -6
- package/lib/module/components/BackstagePanel.js.map +1 -1
- package/lib/module/components/FlagsTab.js +250 -0
- package/lib/module/components/FlagsTab.js.map +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -1
- package/lib/typescript/Backstage.d.ts.map +1 -1
- package/lib/typescript/components/BackstagePanel.d.ts +3 -1
- package/lib/typescript/components/BackstagePanel.d.ts.map +1 -1
- package/lib/typescript/components/FlagsTab.d.ts +9 -0
- package/lib/typescript/components/FlagsTab.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +14 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Backstage.tsx +4 -0
- package/src/components/BackstagePanel.tsx +24 -5
- package/src/components/FlagsTab.tsx +249 -0
- package/src/components/InfoTab.tsx +1 -1
- package/src/index.ts +1 -0
- package/src/types.ts +19 -0
|
@@ -7,12 +7,13 @@ import { TabBar } from './TabBar';
|
|
|
7
7
|
import { InfoTab } from './InfoTab';
|
|
8
8
|
import { LogsTab } from './LogsTab';
|
|
9
9
|
import { NetworkTab } from './NetworkTab';
|
|
10
|
+
import { FlagsTab } from './FlagsTab';
|
|
10
11
|
|
|
11
12
|
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
12
13
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
-
// ─── Built-in Tab Definitions
|
|
14
|
+
// ─── Built-in Tab Definitions ────────────────────────────────────────────
|
|
14
15
|
|
|
15
|
-
const
|
|
16
|
+
const ALWAYS_ON_TABS = [{
|
|
16
17
|
key: 'info',
|
|
17
18
|
title: 'Info',
|
|
18
19
|
icon: 'ℹ️'
|
|
@@ -20,11 +21,17 @@ const BUILT_IN_TABS = [{
|
|
|
20
21
|
key: 'network',
|
|
21
22
|
title: 'Network',
|
|
22
23
|
icon: '🌐'
|
|
23
|
-
}
|
|
24
|
+
}];
|
|
25
|
+
const FLAGS_TAB = {
|
|
26
|
+
key: 'flags',
|
|
27
|
+
title: 'Flags',
|
|
28
|
+
icon: '🎚'
|
|
29
|
+
};
|
|
30
|
+
const LOGS_TAB = {
|
|
24
31
|
key: 'logs',
|
|
25
32
|
title: 'Logs',
|
|
26
33
|
icon: '📋'
|
|
27
|
-
}
|
|
34
|
+
};
|
|
28
35
|
|
|
29
36
|
// ─── Component ───────────────────────────────────────────────────────────────
|
|
30
37
|
|
|
@@ -37,6 +44,8 @@ export const BackstagePanel = ({
|
|
|
37
44
|
deviceInfo,
|
|
38
45
|
state,
|
|
39
46
|
quickActions,
|
|
47
|
+
featureFlags,
|
|
48
|
+
onToggleFeatureFlag,
|
|
40
49
|
logs,
|
|
41
50
|
onRefreshLogs,
|
|
42
51
|
onCopyLogs,
|
|
@@ -50,8 +59,9 @@ export const BackstagePanel = ({
|
|
|
50
59
|
}) => {
|
|
51
60
|
const [activeTab, setActiveTab] = useState('info');
|
|
52
61
|
|
|
53
|
-
// Compose all tabs: built-in + extra
|
|
54
|
-
const
|
|
62
|
+
// Compose all tabs: built-in (conditionally including Flags) + extra
|
|
63
|
+
const hasFlags = featureFlags && featureFlags.length > 0;
|
|
64
|
+
const allTabs = [...ALWAYS_ON_TABS, ...(hasFlags ? [FLAGS_TAB] : []), LOGS_TAB, ...extraTabs.map(t => ({
|
|
55
65
|
key: t.key,
|
|
56
66
|
title: t.title,
|
|
57
67
|
icon: t.icon
|
|
@@ -72,6 +82,11 @@ export const BackstagePanel = ({
|
|
|
72
82
|
styles: propStyles,
|
|
73
83
|
children: children
|
|
74
84
|
});
|
|
85
|
+
case 'flags':
|
|
86
|
+
return /*#__PURE__*/_jsx(FlagsTab, {
|
|
87
|
+
flags: featureFlags ?? [],
|
|
88
|
+
onToggle: onToggleFeatureFlag
|
|
89
|
+
});
|
|
75
90
|
case 'network':
|
|
76
91
|
return /*#__PURE__*/_jsx(NetworkTab, {
|
|
77
92
|
entries: networkEntries,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","Modal","SafeAreaView","StatusBar","StyleSheet","Text","TouchableOpacity","View","DarkTheme","MonospaceFont","TestIDs","TabBar","InfoTab","LogsTab","NetworkTab","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","
|
|
1
|
+
{"version":3,"names":["React","useState","Modal","SafeAreaView","StatusBar","StyleSheet","Text","TouchableOpacity","View","DarkTheme","MonospaceFont","TestIDs","TabBar","InfoTab","LogsTab","NetworkTab","FlagsTab","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","ALWAYS_ON_TABS","key","title","icon","FLAGS_TAB","LOGS_TAB","BackstagePanel","visible","onClose","appVersion","buildNumber","bundleId","deviceInfo","state","quickActions","featureFlags","onToggleFeatureFlag","logs","onRefreshLogs","onCopyLogs","networkEntries","onRefreshNetwork","onClearNetwork","onCopyNetwork","extraTabs","styles","propStyles","children","activeTab","setActiveTab","hasFlags","length","allTabs","map","t","renderTabContent","onClosePanel","flags","onToggle","entries","onRefresh","onClear","onCopy","extraTab","find","render","testID","panel","animationType","transparent","onRequestClose","statusBarTranslucent","barStyle","backgroundColor","background","style","safeArea","panelStyle","header","headerLeft","headerBrand","headerTitle","headerTitleStyle","closeButton","onPress","activeOpacity","hitSlop","top","bottom","left","right","closeButtonText","tabs","onTabChange","content","create","flex","flexDirection","alignItems","justifyContent","paddingHorizontal","paddingVertical","borderBottomWidth","borderBottomColor","border","fontSize","marginRight","fontFamily","fontWeight","color","text","letterSpacing","width","height","borderRadius","surfaceElevated","borderWidth","borderColor","textSecondary"],"sourceRoot":"../../../src","sources":["components/BackstagePanel.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useMemo, useState } from 'react';
|
|
4
|
+
import { ScrollView, StyleSheet, Switch, Text, TextInput, View } from 'react-native';
|
|
5
|
+
import { DarkTheme, MonospaceFont } from '../constants';
|
|
6
|
+
|
|
7
|
+
// ─── Types ───────────────────────────────────────────────────────────────────
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
// ─── Component ───────────────────────────────────────────────────────────────
|
|
10
|
+
|
|
11
|
+
export const FlagsTab = ({
|
|
12
|
+
flags,
|
|
13
|
+
onToggle
|
|
14
|
+
}) => {
|
|
15
|
+
const [searchText, setSearchText] = useState('');
|
|
16
|
+
const filteredFlags = useMemo(() => {
|
|
17
|
+
if (!searchText.trim()) return flags;
|
|
18
|
+
const query = searchText.toLowerCase();
|
|
19
|
+
return flags.filter(f => f.label.toLowerCase().includes(query) || f.key.toLowerCase().includes(query) || f.description && f.description.toLowerCase().includes(query));
|
|
20
|
+
}, [flags, searchText]);
|
|
21
|
+
|
|
22
|
+
// Stats
|
|
23
|
+
const enabledCount = flags.filter(f => f.value).length;
|
|
24
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
25
|
+
style: styles.container,
|
|
26
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
27
|
+
style: styles.searchContainer,
|
|
28
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
29
|
+
style: styles.searchInputWrapper,
|
|
30
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
31
|
+
style: styles.searchIcon,
|
|
32
|
+
children: "\u2315"
|
|
33
|
+
}), /*#__PURE__*/_jsx(TextInput, {
|
|
34
|
+
style: styles.searchInput,
|
|
35
|
+
placeholder: "Filter flags...",
|
|
36
|
+
placeholderTextColor: DarkTheme.textMuted,
|
|
37
|
+
value: searchText,
|
|
38
|
+
onChangeText: setSearchText,
|
|
39
|
+
autoCapitalize: "none",
|
|
40
|
+
autoCorrect: false,
|
|
41
|
+
clearButtonMode: "while-editing",
|
|
42
|
+
returnKeyType: "search"
|
|
43
|
+
})]
|
|
44
|
+
})
|
|
45
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
46
|
+
style: styles.statsBar,
|
|
47
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
48
|
+
style: styles.statText,
|
|
49
|
+
children: filteredFlags.length === flags.length ? `${flags.length} flag${flags.length !== 1 ? 's' : ''}` : `${filteredFlags.length} of ${flags.length}`
|
|
50
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
51
|
+
style: styles.statText,
|
|
52
|
+
children: [/*#__PURE__*/_jsxs(Text, {
|
|
53
|
+
style: styles.statEnabled,
|
|
54
|
+
children: [enabledCount, " on"]
|
|
55
|
+
}), ' · ', /*#__PURE__*/_jsxs(Text, {
|
|
56
|
+
style: styles.statDisabled,
|
|
57
|
+
children: [flags.length - enabledCount, " off"]
|
|
58
|
+
})]
|
|
59
|
+
})]
|
|
60
|
+
}), /*#__PURE__*/_jsx(ScrollView, {
|
|
61
|
+
style: styles.list,
|
|
62
|
+
contentContainerStyle: filteredFlags.length === 0 ? styles.emptyContainer : styles.listContent,
|
|
63
|
+
showsVerticalScrollIndicator: false,
|
|
64
|
+
children: filteredFlags.length === 0 ? /*#__PURE__*/_jsxs(View, {
|
|
65
|
+
style: styles.emptyState,
|
|
66
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
67
|
+
style: styles.emptyIcon,
|
|
68
|
+
children: "\uD83C\uDF9A"
|
|
69
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
70
|
+
style: styles.emptyTitle,
|
|
71
|
+
children: "No flags match"
|
|
72
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
73
|
+
style: styles.emptySubtitle,
|
|
74
|
+
children: "Try adjusting your search"
|
|
75
|
+
})]
|
|
76
|
+
}) : filteredFlags.map((flag, index) => /*#__PURE__*/_jsxs(View, {
|
|
77
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
78
|
+
style: styles.flagRow,
|
|
79
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
80
|
+
style: styles.flagInfo,
|
|
81
|
+
children: [/*#__PURE__*/_jsxs(View, {
|
|
82
|
+
style: styles.flagHeader,
|
|
83
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
84
|
+
style: styles.flagLabel,
|
|
85
|
+
children: flag.label
|
|
86
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
87
|
+
style: [styles.flagKey, flag.value && styles.flagKeyActive],
|
|
88
|
+
children: flag.key
|
|
89
|
+
})]
|
|
90
|
+
}), flag.description && /*#__PURE__*/_jsx(Text, {
|
|
91
|
+
style: styles.flagDescription,
|
|
92
|
+
children: flag.description
|
|
93
|
+
})]
|
|
94
|
+
}), /*#__PURE__*/_jsx(Switch, {
|
|
95
|
+
testID: `backstage.flag.${flag.key}`,
|
|
96
|
+
value: flag.value,
|
|
97
|
+
onValueChange: newValue => onToggle?.(flag.key, newValue),
|
|
98
|
+
trackColor: {
|
|
99
|
+
false: DarkTheme.border,
|
|
100
|
+
true: DarkTheme.accent
|
|
101
|
+
},
|
|
102
|
+
thumbColor: flag.value ? '#FFFFFF' : DarkTheme.textMuted,
|
|
103
|
+
ios_backgroundColor: DarkTheme.border
|
|
104
|
+
})]
|
|
105
|
+
}), index < filteredFlags.length - 1 && /*#__PURE__*/_jsx(View, {
|
|
106
|
+
style: styles.divider
|
|
107
|
+
})]
|
|
108
|
+
}, flag.key))
|
|
109
|
+
})]
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
// ─── Styles ──────────────────────────────────────────────────────────────────
|
|
114
|
+
|
|
115
|
+
const styles = StyleSheet.create({
|
|
116
|
+
container: {
|
|
117
|
+
flex: 1
|
|
118
|
+
},
|
|
119
|
+
searchContainer: {
|
|
120
|
+
paddingHorizontal: 14,
|
|
121
|
+
paddingVertical: 10,
|
|
122
|
+
borderBottomWidth: 1,
|
|
123
|
+
borderBottomColor: DarkTheme.border
|
|
124
|
+
},
|
|
125
|
+
searchInputWrapper: {
|
|
126
|
+
flexDirection: 'row',
|
|
127
|
+
alignItems: 'center',
|
|
128
|
+
backgroundColor: DarkTheme.surfaceElevated,
|
|
129
|
+
borderRadius: 10,
|
|
130
|
+
borderWidth: 1,
|
|
131
|
+
borderColor: DarkTheme.border,
|
|
132
|
+
paddingHorizontal: 12,
|
|
133
|
+
height: 38
|
|
134
|
+
},
|
|
135
|
+
searchIcon: {
|
|
136
|
+
fontSize: 16,
|
|
137
|
+
color: DarkTheme.textMuted,
|
|
138
|
+
marginRight: 8
|
|
139
|
+
},
|
|
140
|
+
searchInput: {
|
|
141
|
+
flex: 1,
|
|
142
|
+
fontFamily: MonospaceFont,
|
|
143
|
+
fontSize: 13,
|
|
144
|
+
color: DarkTheme.text,
|
|
145
|
+
padding: 0
|
|
146
|
+
},
|
|
147
|
+
statsBar: {
|
|
148
|
+
flexDirection: 'row',
|
|
149
|
+
justifyContent: 'space-between',
|
|
150
|
+
alignItems: 'center',
|
|
151
|
+
paddingHorizontal: 16,
|
|
152
|
+
paddingVertical: 6,
|
|
153
|
+
backgroundColor: DarkTheme.surface
|
|
154
|
+
},
|
|
155
|
+
statText: {
|
|
156
|
+
fontFamily: MonospaceFont,
|
|
157
|
+
fontSize: 11,
|
|
158
|
+
color: DarkTheme.textMuted
|
|
159
|
+
},
|
|
160
|
+
statEnabled: {
|
|
161
|
+
color: DarkTheme.success,
|
|
162
|
+
fontWeight: '700'
|
|
163
|
+
},
|
|
164
|
+
statDisabled: {
|
|
165
|
+
color: DarkTheme.textMuted
|
|
166
|
+
},
|
|
167
|
+
list: {
|
|
168
|
+
flex: 1
|
|
169
|
+
},
|
|
170
|
+
listContent: {
|
|
171
|
+
paddingHorizontal: 16,
|
|
172
|
+
paddingVertical: 8
|
|
173
|
+
},
|
|
174
|
+
emptyContainer: {
|
|
175
|
+
flex: 1,
|
|
176
|
+
justifyContent: 'center'
|
|
177
|
+
},
|
|
178
|
+
emptyState: {
|
|
179
|
+
alignItems: 'center',
|
|
180
|
+
justifyContent: 'center',
|
|
181
|
+
padding: 40
|
|
182
|
+
},
|
|
183
|
+
emptyIcon: {
|
|
184
|
+
fontSize: 48,
|
|
185
|
+
marginBottom: 16,
|
|
186
|
+
opacity: 0.5
|
|
187
|
+
},
|
|
188
|
+
emptyTitle: {
|
|
189
|
+
fontFamily: MonospaceFont,
|
|
190
|
+
fontSize: 16,
|
|
191
|
+
fontWeight: '700',
|
|
192
|
+
color: DarkTheme.textSecondary,
|
|
193
|
+
marginBottom: 8
|
|
194
|
+
},
|
|
195
|
+
emptySubtitle: {
|
|
196
|
+
fontFamily: MonospaceFont,
|
|
197
|
+
fontSize: 13,
|
|
198
|
+
color: DarkTheme.textMuted,
|
|
199
|
+
textAlign: 'center'
|
|
200
|
+
},
|
|
201
|
+
flagRow: {
|
|
202
|
+
flexDirection: 'row',
|
|
203
|
+
justifyContent: 'space-between',
|
|
204
|
+
alignItems: 'center',
|
|
205
|
+
paddingVertical: 14,
|
|
206
|
+
paddingHorizontal: 4
|
|
207
|
+
},
|
|
208
|
+
flagInfo: {
|
|
209
|
+
flex: 1,
|
|
210
|
+
marginRight: 16
|
|
211
|
+
},
|
|
212
|
+
flagHeader: {
|
|
213
|
+
flexDirection: 'row',
|
|
214
|
+
alignItems: 'center',
|
|
215
|
+
gap: 8
|
|
216
|
+
},
|
|
217
|
+
flagLabel: {
|
|
218
|
+
fontFamily: MonospaceFont,
|
|
219
|
+
fontSize: 14,
|
|
220
|
+
color: DarkTheme.text,
|
|
221
|
+
fontWeight: '600'
|
|
222
|
+
},
|
|
223
|
+
flagKey: {
|
|
224
|
+
fontFamily: MonospaceFont,
|
|
225
|
+
fontSize: 10,
|
|
226
|
+
color: DarkTheme.textMuted,
|
|
227
|
+
backgroundColor: DarkTheme.surfaceElevated,
|
|
228
|
+
borderRadius: 4,
|
|
229
|
+
paddingHorizontal: 6,
|
|
230
|
+
paddingVertical: 1,
|
|
231
|
+
overflow: 'hidden'
|
|
232
|
+
},
|
|
233
|
+
flagKeyActive: {
|
|
234
|
+
color: DarkTheme.accent,
|
|
235
|
+
backgroundColor: DarkTheme.accentDim
|
|
236
|
+
},
|
|
237
|
+
flagDescription: {
|
|
238
|
+
fontFamily: MonospaceFont,
|
|
239
|
+
fontSize: 12,
|
|
240
|
+
color: DarkTheme.textMuted,
|
|
241
|
+
marginTop: 4,
|
|
242
|
+
lineHeight: 18
|
|
243
|
+
},
|
|
244
|
+
divider: {
|
|
245
|
+
height: 1,
|
|
246
|
+
backgroundColor: DarkTheme.border,
|
|
247
|
+
marginHorizontal: 4
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
//# sourceMappingURL=FlagsTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useMemo","useState","ScrollView","StyleSheet","Switch","Text","TextInput","View","DarkTheme","MonospaceFont","jsx","_jsx","jsxs","_jsxs","FlagsTab","flags","onToggle","searchText","setSearchText","filteredFlags","trim","query","toLowerCase","filter","f","label","includes","key","description","enabledCount","value","length","style","styles","container","children","searchContainer","searchInputWrapper","searchIcon","searchInput","placeholder","placeholderTextColor","textMuted","onChangeText","autoCapitalize","autoCorrect","clearButtonMode","returnKeyType","statsBar","statText","statEnabled","statDisabled","list","contentContainerStyle","emptyContainer","listContent","showsVerticalScrollIndicator","emptyState","emptyIcon","emptyTitle","emptySubtitle","map","flag","index","flagRow","flagInfo","flagHeader","flagLabel","flagKey","flagKeyActive","flagDescription","testID","onValueChange","newValue","trackColor","false","border","true","accent","thumbColor","ios_backgroundColor","divider","create","flex","paddingHorizontal","paddingVertical","borderBottomWidth","borderBottomColor","flexDirection","alignItems","backgroundColor","surfaceElevated","borderRadius","borderWidth","borderColor","height","fontSize","color","marginRight","fontFamily","text","padding","justifyContent","surface","success","fontWeight","marginBottom","opacity","textSecondary","textAlign","gap","overflow","accentDim","marginTop","lineHeight","marginHorizontal"],"sourceRoot":"../../../src","sources":["components/FlagsTab.tsx"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Backstage","LogLevel","NetworkState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,aAAa;
|
|
1
|
+
{"version":3,"names":["Backstage","LogLevel","NetworkState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,aAAa;AAevC,SAASC,QAAQ,EAAEC,YAAY,QAAQ,SAAS","ignoreList":[]}
|
package/lib/module/types.js
CHANGED
|
@@ -23,6 +23,8 @@ export let NetworkState = /*#__PURE__*/function (NetworkState) {
|
|
|
23
23
|
|
|
24
24
|
// ─── Quick Actions ───────────────────────────────────────────────────────────
|
|
25
25
|
|
|
26
|
+
// ─── Feature Flags ─────────────────────────────────────────────────────────
|
|
27
|
+
|
|
26
28
|
// ─── Extensible Tabs ─────────────────────────────────────────────────────────
|
|
27
29
|
|
|
28
30
|
// ─── Theme ───────────────────────────────────────────────────────────────────
|
package/lib/module/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LogLevel","NetworkState"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAGA;;AAEA,WAAYA,QAAQ,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAgBpB;;AAEA,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;;AAwBxB;;AAOA;;AAWA;;AASA;;AAuBA;;
|
|
1
|
+
{"version":3,"names":["LogLevel","NetworkState"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;AAGA;;AAEA,WAAYA,QAAQ,0BAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAgBpB;;AAEA,WAAYC,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;;AAwBxB;;AAOA;;AAWA;;AAaA;;AASA;;AAuBA;;AAuFA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Backstage.d.ts","sourceRoot":"","sources":["../../src/Backstage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAA;AAWd,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAA0B,MAAM,SAAS,CAAA;AAInF,eAAO,MAAM,SAAS,
|
|
1
|
+
{"version":3,"file":"Backstage.d.ts","sourceRoot":"","sources":["../../src/Backstage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAON,MAAM,OAAO,CAAA;AAWd,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAA0B,MAAM,SAAS,CAAA;AAInF,eAAO,MAAM,SAAS,qFAwKrB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { AppInfoItem, BackstageStyleOverrides, BackstageTab, LogEntry, NetworkEntry, QuickAction } from '../types';
|
|
2
|
+
import type { AppInfoItem, BackstageStyleOverrides, BackstageTab, FeatureFlag, LogEntry, NetworkEntry, QuickAction } from '../types';
|
|
3
3
|
interface BackstagePanelProps {
|
|
4
4
|
visible: boolean;
|
|
5
5
|
onClose: () => void;
|
|
@@ -9,6 +9,8 @@ interface BackstagePanelProps {
|
|
|
9
9
|
deviceInfo?: AppInfoItem[];
|
|
10
10
|
state?: Record<string, unknown>;
|
|
11
11
|
quickActions?: QuickAction[];
|
|
12
|
+
featureFlags?: FeatureFlag[];
|
|
13
|
+
onToggleFeatureFlag?: (key: string, value: boolean) => void;
|
|
12
14
|
logs: LogEntry[];
|
|
13
15
|
onRefreshLogs: () => void;
|
|
14
16
|
onCopyLogs?: (logs: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackstagePanel.d.ts","sourceRoot":"","sources":["../../../src/components/BackstagePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"BackstagePanel.d.ts","sourceRoot":"","sources":["../../../src/components/BackstagePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAgBvC,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,WAAW,EACZ,MAAM,UAAU,CAAA;AAIjB,UAAU,mBAAmB;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,IAAI,CAAA;IAGnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,WAAW,EAAE,CAAA;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAA;IAC5B,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAG3D,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,aAAa,EAAE,MAAM,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAGnC,cAAc,EAAE,YAAY,EAAE,CAAA;IAC9B,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAGtC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAA;IAG1B,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAeD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA2HxD,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FeatureFlag } from '../types';
|
|
3
|
+
interface FlagsTabProps {
|
|
4
|
+
flags: FeatureFlag[];
|
|
5
|
+
onToggle?: (key: string, value: boolean) => void;
|
|
6
|
+
}
|
|
7
|
+
export declare const FlagsTab: React.FC<FlagsTabProps>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=FlagsTab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlagsTab.d.ts","sourceRoot":"","sources":["../../../src/components/FlagsTab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAA;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAI3C,UAAU,aAAa;IACrB,KAAK,EAAE,WAAW,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;CACjD;AAID,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAgG5C,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { Backstage } from './Backstage';
|
|
2
|
-
export type { BackstageProps, BackstageRef, BackstageTab, BackstageStyleOverrides, BackstageTheme, QuickAction, AppInfoItem, LogEntry, NetworkEntry, } from './types';
|
|
2
|
+
export type { BackstageProps, BackstageRef, BackstageTab, BackstageStyleOverrides, BackstageTheme, QuickAction, FeatureFlag, AppInfoItem, LogEntry, NetworkEntry, } from './types';
|
|
3
3
|
export { LogLevel, NetworkState } from './types';
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,YAAY,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,WAAW,EACX,QAAQ,EACR,YAAY,GACb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,YAAY,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,uBAAuB,EACvB,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,QAAQ,EACR,YAAY,GACb,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -48,6 +48,16 @@ export interface QuickAction {
|
|
|
48
48
|
destructive?: boolean;
|
|
49
49
|
testID?: string;
|
|
50
50
|
}
|
|
51
|
+
export interface FeatureFlag {
|
|
52
|
+
/** Unique key for this flag */
|
|
53
|
+
key: string;
|
|
54
|
+
/** Display label */
|
|
55
|
+
label: string;
|
|
56
|
+
/** Current value */
|
|
57
|
+
value: boolean;
|
|
58
|
+
/** Optional description shown below the label */
|
|
59
|
+
description?: string;
|
|
60
|
+
}
|
|
51
61
|
export interface BackstageTab {
|
|
52
62
|
key: string;
|
|
53
63
|
title: string;
|
|
@@ -89,6 +99,10 @@ export interface BackstageProps {
|
|
|
89
99
|
state?: Record<string, unknown>;
|
|
90
100
|
/** Custom action buttons in the Info tab */
|
|
91
101
|
quickActions?: QuickAction[];
|
|
102
|
+
/** Feature flags to display with toggle switches */
|
|
103
|
+
featureFlags?: FeatureFlag[];
|
|
104
|
+
/** Callback when a feature flag is toggled */
|
|
105
|
+
onToggleFeatureFlag?: (key: string, value: boolean) => void;
|
|
92
106
|
/** Maximum number of logs to retain in memory. Default: 500 */
|
|
93
107
|
maxLogs?: number;
|
|
94
108
|
/** Log messages containing these strings will be excluded */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/Backstage.tsx
CHANGED
|
@@ -30,6 +30,8 @@ export const Backstage = forwardRef<BackstageRef, BackstageProps>(
|
|
|
30
30
|
deviceInfo,
|
|
31
31
|
state,
|
|
32
32
|
quickActions,
|
|
33
|
+
featureFlags,
|
|
34
|
+
onToggleFeatureFlag,
|
|
33
35
|
maxLogs = DEFAULT_MAX_LOGS,
|
|
34
36
|
logFilters,
|
|
35
37
|
onCopyLogs,
|
|
@@ -169,6 +171,8 @@ export const Backstage = forwardRef<BackstageRef, BackstageProps>(
|
|
|
169
171
|
deviceInfo={deviceInfo}
|
|
170
172
|
state={state}
|
|
171
173
|
quickActions={quickActions}
|
|
174
|
+
featureFlags={featureFlags}
|
|
175
|
+
onToggleFeatureFlag={onToggleFeatureFlag}
|
|
172
176
|
logs={logs}
|
|
173
177
|
onRefreshLogs={refreshLogs}
|
|
174
178
|
onCopyLogs={onCopyLogs}
|
|
@@ -13,10 +13,12 @@ import { TabBar } from './TabBar'
|
|
|
13
13
|
import { InfoTab } from './InfoTab'
|
|
14
14
|
import { LogsTab } from './LogsTab'
|
|
15
15
|
import { NetworkTab } from './NetworkTab'
|
|
16
|
+
import { FlagsTab } from './FlagsTab'
|
|
16
17
|
import type {
|
|
17
18
|
AppInfoItem,
|
|
18
19
|
BackstageStyleOverrides,
|
|
19
20
|
BackstageTab,
|
|
21
|
+
FeatureFlag,
|
|
20
22
|
LogEntry,
|
|
21
23
|
NetworkEntry,
|
|
22
24
|
QuickAction,
|
|
@@ -35,6 +37,8 @@ interface BackstagePanelProps {
|
|
|
35
37
|
deviceInfo?: AppInfoItem[]
|
|
36
38
|
state?: Record<string, unknown>
|
|
37
39
|
quickActions?: QuickAction[]
|
|
40
|
+
featureFlags?: FeatureFlag[]
|
|
41
|
+
onToggleFeatureFlag?: (key: string, value: boolean) => void
|
|
38
42
|
|
|
39
43
|
// Logs tab props
|
|
40
44
|
logs: LogEntry[]
|
|
@@ -55,14 +59,17 @@ interface BackstagePanelProps {
|
|
|
55
59
|
children?: React.ReactNode
|
|
56
60
|
}
|
|
57
61
|
|
|
58
|
-
// ─── Built-in Tab Definitions
|
|
62
|
+
// ─── Built-in Tab Definitions ────────────────────────────────────────────
|
|
59
63
|
|
|
60
|
-
const
|
|
64
|
+
const ALWAYS_ON_TABS = [
|
|
61
65
|
{ key: 'info', title: 'Info', icon: 'ℹ️' },
|
|
62
66
|
{ key: 'network', title: 'Network', icon: '🌐' },
|
|
63
|
-
{ key: 'logs', title: 'Logs', icon: '📋' },
|
|
64
67
|
]
|
|
65
68
|
|
|
69
|
+
const FLAGS_TAB = { key: 'flags', title: 'Flags', icon: '🎚' }
|
|
70
|
+
|
|
71
|
+
const LOGS_TAB = { key: 'logs', title: 'Logs', icon: '📋' }
|
|
72
|
+
|
|
66
73
|
// ─── Component ───────────────────────────────────────────────────────────────
|
|
67
74
|
|
|
68
75
|
export const BackstagePanel: React.FC<BackstagePanelProps> = ({
|
|
@@ -74,6 +81,8 @@ export const BackstagePanel: React.FC<BackstagePanelProps> = ({
|
|
|
74
81
|
deviceInfo,
|
|
75
82
|
state,
|
|
76
83
|
quickActions,
|
|
84
|
+
featureFlags,
|
|
85
|
+
onToggleFeatureFlag,
|
|
77
86
|
logs,
|
|
78
87
|
onRefreshLogs,
|
|
79
88
|
onCopyLogs,
|
|
@@ -87,9 +96,12 @@ export const BackstagePanel: React.FC<BackstagePanelProps> = ({
|
|
|
87
96
|
}) => {
|
|
88
97
|
const [activeTab, setActiveTab] = useState('info')
|
|
89
98
|
|
|
90
|
-
// Compose all tabs: built-in + extra
|
|
99
|
+
// Compose all tabs: built-in (conditionally including Flags) + extra
|
|
100
|
+
const hasFlags = featureFlags && featureFlags.length > 0
|
|
91
101
|
const allTabs = [
|
|
92
|
-
...
|
|
102
|
+
...ALWAYS_ON_TABS,
|
|
103
|
+
...(hasFlags ? [FLAGS_TAB] : []),
|
|
104
|
+
LOGS_TAB,
|
|
93
105
|
...extraTabs.map(t => ({ key: t.key, title: t.title, icon: t.icon })),
|
|
94
106
|
]
|
|
95
107
|
|
|
@@ -111,6 +123,13 @@ export const BackstagePanel: React.FC<BackstagePanelProps> = ({
|
|
|
111
123
|
{children}
|
|
112
124
|
</InfoTab>
|
|
113
125
|
)
|
|
126
|
+
case 'flags':
|
|
127
|
+
return (
|
|
128
|
+
<FlagsTab
|
|
129
|
+
flags={featureFlags ?? []}
|
|
130
|
+
onToggle={onToggleFeatureFlag}
|
|
131
|
+
/>
|
|
132
|
+
)
|
|
114
133
|
case 'network':
|
|
115
134
|
return (
|
|
116
135
|
<NetworkTab
|