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.
Files changed (35) hide show
  1. package/README.md +39 -19
  2. package/lib/commonjs/Backstage.js +4 -0
  3. package/lib/commonjs/Backstage.js.map +1 -1
  4. package/lib/commonjs/components/BackstagePanel.js +21 -6
  5. package/lib/commonjs/components/BackstagePanel.js.map +1 -1
  6. package/lib/commonjs/components/FlagsTab.js +255 -0
  7. package/lib/commonjs/components/FlagsTab.js.map +1 -0
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/types.js +1 -0
  10. package/lib/commonjs/types.js.map +1 -1
  11. package/lib/module/Backstage.js +4 -0
  12. package/lib/module/Backstage.js.map +1 -1
  13. package/lib/module/components/BackstagePanel.js +21 -6
  14. package/lib/module/components/BackstagePanel.js.map +1 -1
  15. package/lib/module/components/FlagsTab.js +250 -0
  16. package/lib/module/components/FlagsTab.js.map +1 -0
  17. package/lib/module/index.js.map +1 -1
  18. package/lib/module/types.js +2 -0
  19. package/lib/module/types.js.map +1 -1
  20. package/lib/typescript/Backstage.d.ts.map +1 -1
  21. package/lib/typescript/components/BackstagePanel.d.ts +3 -1
  22. package/lib/typescript/components/BackstagePanel.d.ts.map +1 -1
  23. package/lib/typescript/components/FlagsTab.d.ts +9 -0
  24. package/lib/typescript/components/FlagsTab.d.ts.map +1 -0
  25. package/lib/typescript/index.d.ts +1 -1
  26. package/lib/typescript/index.d.ts.map +1 -1
  27. package/lib/typescript/types.d.ts +14 -0
  28. package/lib/typescript/types.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/src/Backstage.tsx +4 -0
  31. package/src/components/BackstagePanel.tsx +24 -5
  32. package/src/components/FlagsTab.tsx +249 -0
  33. package/src/components/InfoTab.tsx +1 -1
  34. package/src/index.ts +1 -0
  35. 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 BUILT_IN_TABS = [{
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 allTabs = [...BUILT_IN_TABS, ...extraTabs.map(t => ({
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","BUILT_IN_TABS","key","title","icon","BackstagePanel","visible","onClose","appVersion","buildNumber","bundleId","deviceInfo","state","quickActions","logs","onRefreshLogs","onCopyLogs","networkEntries","onRefreshNetwork","onClearNetwork","onCopyNetwork","extraTabs","styles","propStyles","children","activeTab","setActiveTab","allTabs","map","t","renderTabContent","onClosePanel","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":[]}
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":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SACEC,KAAK,EACLC,YAAY,EACZC,SAAS,EACTC,UAAU,EACVC,IAAI,EACJC,gBAAgB,EAChBC,IAAI,QACC,cAAc;AACrB,SAASC,SAAS,EAAEC,aAAa,EAAEC,OAAO,QAAQ,cAAc;AAChE,SAASC,MAAM,QAAQ,UAAU;AACjC,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,OAAO,QAAQ,WAAW;AACnC,SAASC,UAAU,QAAQ,cAAc;AACzC,SAASC,QAAQ,QAAQ,YAAY;;AAWrC;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAmCA;;AAEA,MAAMC,cAAc,GAAG,CACrB;EAAEC,GAAG,EAAE,MAAM;EAAEC,KAAK,EAAE,MAAM;EAAEC,IAAI,EAAE;AAAK,CAAC,EAC1C;EAAEF,GAAG,EAAE,SAAS;EAAEC,KAAK,EAAE,SAAS;EAAEC,IAAI,EAAE;AAAK,CAAC,CACjD;AAED,MAAMC,SAAS,GAAG;EAAEH,GAAG,EAAE,OAAO;EAAEC,KAAK,EAAE,OAAO;EAAEC,IAAI,EAAE;AAAK,CAAC;AAE9D,MAAME,QAAQ,GAAG;EAAEJ,GAAG,EAAE,MAAM;EAAEC,KAAK,EAAE,MAAM;EAAEC,IAAI,EAAE;AAAK,CAAC;;AAE3D;;AAEA,OAAO,MAAMG,cAA6C,GAAGA,CAAC;EAC5DC,OAAO;EACPC,OAAO;EACPC,UAAU;EACVC,WAAW;EACXC,QAAQ;EACRC,UAAU;EACVC,KAAK;EACLC,YAAY;EACZC,YAAY;EACZC,mBAAmB;EACnBC,IAAI;EACJC,aAAa;EACbC,UAAU;EACVC,cAAc;EACdC,gBAAgB;EAChBC,cAAc;EACdC,aAAa;EACbC,SAAS,GAAG,EAAE;EACdC,MAAM,EAAEC,UAAU;EAClBC;AACF,CAAC,KAAK;EACJ,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGnD,QAAQ,CAAC,MAAM,CAAC;;EAElD;EACA,MAAMoD,QAAQ,GAAGf,YAAY,IAAIA,YAAY,CAACgB,MAAM,GAAG,CAAC;EACxD,MAAMC,OAAO,GAAG,CACd,GAAGhC,cAAc,EACjB,IAAI8B,QAAQ,GAAG,CAAC1B,SAAS,CAAC,GAAG,EAAE,CAAC,EAChCC,QAAQ,EACR,GAAGmB,SAAS,CAACS,GAAG,CAACC,CAAC,KAAK;IAAEjC,GAAG,EAAEiC,CAAC,CAACjC,GAAG;IAAEC,KAAK,EAAEgC,CAAC,CAAChC,KAAK;IAAEC,IAAI,EAAE+B,CAAC,CAAC/B;EAAK,CAAC,CAAC,CAAC,CACtE;;EAED;EACA,MAAMgC,gBAAgB,GAAGA,CAAA,KAAM;IAC7B,QAAQP,SAAS;MACf,KAAK,MAAM;QACT,oBACEjC,IAAA,CAACL,OAAO;UACNmB,UAAU,EAAEA,UAAW;UACvBC,WAAW,EAAEA,WAAY;UACzBC,QAAQ,EAAEA,QAAS;UACnBC,UAAU,EAAEA,UAAW;UACvBC,KAAK,EAAEA,KAAM;UACbC,YAAY,EAAEA,YAAa;UAC3BsB,YAAY,EAAE5B,OAAQ;UACtBiB,MAAM,EAAEC,UAAW;UAAAC,QAAA,EAElBA;QAAQ,CACF,CAAC;MAEd,KAAK,OAAO;QACV,oBACEhC,IAAA,CAACF,QAAQ;UACP4C,KAAK,EAAEtB,YAAY,IAAI,EAAG;UAC1BuB,QAAQ,EAAEtB;QAAoB,CAC/B,CAAC;MAEN,KAAK,SAAS;QACZ,oBACErB,IAAA,CAACH,UAAU;UACT+C,OAAO,EAAEnB,cAAe;UACxBoB,SAAS,EAAEnB,gBAAiB;UAC5BoB,OAAO,EAAEnB,cAAe;UACxBoB,MAAM,EAAEnB;QAAc,CACvB,CAAC;MAEN,KAAK,MAAM;QACT,oBACE5B,IAAA,CAACJ,OAAO;UACN0B,IAAI,EAAEA,IAAK;UACXuB,SAAS,EAAEtB,aAAc;UACzBC,UAAU,EAAEA,UAAW;UACvBM,MAAM,EAAEC;QAAW,CACpB,CAAC;MAEN;QAAS;UACP;UACA,MAAMiB,QAAQ,GAAGnB,SAAS,CAACoB,IAAI,CAACV,CAAC,IAAIA,CAAC,CAACjC,GAAG,KAAK2B,SAAS,CAAC;UACzD,IAAIe,QAAQ,EAAE;YACZ,oBAAOhD,IAAA,CAAAE,SAAA;cAAA8B,QAAA,EAAGgB,QAAQ,CAACE,MAAM,CAAC;YAAC,CAAG,CAAC;UACjC;UACA,OAAO,IAAI;QACb;IACF;EACF,CAAC;EAED,oBACE9C,KAAA,CAACpB,KAAK;IACJmE,MAAM,EAAE1D,OAAO,CAAC2D,KAAM;IACtBC,aAAa,EAAC,OAAO;IACrBC,WAAW,EAAE,KAAM;IACnB1C,OAAO,EAAEA,OAAQ;IACjB2C,cAAc,EAAE1C,OAAQ;IACxB2C,oBAAoB;IAAAxB,QAAA,gBAEpBhC,IAAA,CAACd,SAAS;MAACuE,QAAQ,EAAC,eAAe;MAACC,eAAe,EAAEnE,SAAS,CAACoE;IAAW,CAAE,CAAC,eAC7EvD,KAAA,CAACnB,YAAY;MAAC2E,KAAK,EAAE,CAAC9B,MAAM,CAAC+B,QAAQ,EAAE9B,UAAU,EAAE+B,UAAU,CAAE;MAAA9B,QAAA,gBAE7D5B,KAAA,CAACd,IAAI;QAACsE,KAAK,EAAE9B,MAAM,CAACiC,MAAO;QAAA/B,QAAA,gBACzB5B,KAAA,CAACd,IAAI;UAACsE,KAAK,EAAE9B,MAAM,CAACkC,UAAW;UAAAhC,QAAA,gBAC7BhC,IAAA,CAACZ,IAAI;YAACwE,KAAK,EAAE9B,MAAM,CAACmC,WAAY;YAAAjC,QAAA,EAAC;UAAC,CAAM,CAAC,eACzChC,IAAA,CAACZ,IAAI;YAACwE,KAAK,EAAE,CAAC9B,MAAM,CAACoC,WAAW,EAAEnC,UAAU,EAAEoC,gBAAgB,CAAE;YAAAnC,QAAA,EAAC;UAAS,CAAM,CAAC;QAAA,CAC7E,CAAC,eACPhC,IAAA,CAACX,gBAAgB;UACf8D,MAAM,EAAE1D,OAAO,CAACsE,MAAM,CAACK,WAAY;UACnCR,KAAK,EAAE9B,MAAM,CAACsC,WAAY;UAC1BC,OAAO,EAAExD,OAAQ;UACjByD,aAAa,EAAE,GAAI;UACnBC,OAAO,EAAE;YAAEC,GAAG,EAAE,CAAC;YAAEC,MAAM,EAAE,CAAC;YAAEC,IAAI,EAAE,CAAC;YAAEC,KAAK,EAAE;UAAE,CAAE;UAAA3C,QAAA,eAElDhC,IAAA,CAACZ,IAAI;YAACwE,KAAK,EAAE9B,MAAM,CAAC8C,eAAgB;YAAA5C,QAAA,EAAC;UAAC,CAAM;QAAC,CAC7B,CAAC;MAAA,CACf,CAAC,eAGPhC,IAAA,CAACN,MAAM;QAACmF,IAAI,EAAExC,OAAQ;QAACJ,SAAS,EAAEA,SAAU;QAAC6C,WAAW,EAAE5C;MAAa,CAAE,CAAC,eAG1ElC,IAAA,CAACV,IAAI;QAACsE,KAAK,EAAE9B,MAAM,CAACiD,OAAQ;QAAA/C,QAAA,EAAEQ,gBAAgB,CAAC;MAAC,CAAO,CAAC;IAAA,CAC5C,CAAC;EAAA,CACV,CAAC;AAEZ,CAAC;;AAED;;AAEA,MAAMV,MAAM,GAAG3C,UAAU,CAAC6F,MAAM,CAAC;EAC/BnB,QAAQ,EAAE;IACRoB,IAAI,EAAE,CAAC;IACPvB,eAAe,EAAEnE,SAAS,CAACoE;EAC7B,CAAC;EACDI,MAAM,EAAE;IACNmB,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,eAAe;IAC/BC,iBAAiB,EAAE,EAAE;IACrBC,eAAe,EAAE,EAAE;IACnBC,iBAAiB,EAAE,CAAC;IACpBC,iBAAiB,EAAEjG,SAAS,CAACkG;EAC/B,CAAC;EACDzB,UAAU,EAAE;IACVkB,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE;EACd,CAAC;EACDlB,WAAW,EAAE;IACXyB,QAAQ,EAAE,EAAE;IACZC,WAAW,EAAE;EACf,CAAC;EACDzB,WAAW,EAAE;IACX0B,UAAU,EAAEpG,aAAa;IACzBkG,QAAQ,EAAE,EAAE;IACZG,UAAU,EAAE,KAAK;IACjBC,KAAK,EAAEvG,SAAS,CAACwG,IAAI;IACrBC,aAAa,EAAE;EACjB,CAAC;EACD5B,WAAW,EAAE;IACX6B,KAAK,EAAE,EAAE;IACTC,MAAM,EAAE,EAAE;IACVC,YAAY,EAAE,EAAE;IAChBzC,eAAe,EAAEnE,SAAS,CAAC6G,eAAe;IAC1CC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE/G,SAAS,CAACkG,MAAM;IAC7BN,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDR,eAAe,EAAE;IACfc,QAAQ,EAAE,EAAE;IACZI,KAAK,EAAEvG,SAAS,CAACgH,aAAa;IAC9BV,UAAU,EAAE;EACd,CAAC;EACDd,OAAO,EAAE;IACPE,IAAI,EAAE;EACR;AACF,CAAC,CAAC","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":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["Backstage","LogLevel","NetworkState"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,SAAS,QAAQ,aAAa;AAcvC,SAASC,QAAQ,EAAEC,YAAY,QAAQ,SAAS","ignoreList":[]}
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":[]}
@@ -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 ───────────────────────────────────────────────────────────────────
@@ -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;;AAiFA","ignoreList":[]}
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,qFAoKrB,CAAA"}
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;AAevC,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ,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;IAG5B,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;AAYD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+GxD,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rn-backstage",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "A zero-dependency developer/QA debug panel for React Native apps",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
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 BUILT_IN_TABS = [
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
- ...BUILT_IN_TABS,
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