rn-backstage 1.2.1 → 1.4.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 (99) hide show
  1. package/README.md +109 -2
  2. package/lib/commonjs/Backstage.js +19 -2
  3. package/lib/commonjs/Backstage.js.map +1 -1
  4. package/lib/commonjs/bug-report.js +173 -0
  5. package/lib/commonjs/bug-report.js.map +1 -0
  6. package/lib/commonjs/components/BackstagePanel.js +100 -17
  7. package/lib/commonjs/components/BackstagePanel.js.map +1 -1
  8. package/lib/commonjs/components/BugReportComposer.js +510 -0
  9. package/lib/commonjs/components/BugReportComposer.js.map +1 -0
  10. package/lib/commonjs/components/FlagsTab.js +21 -11
  11. package/lib/commonjs/components/FlagsTab.js.map +1 -1
  12. package/lib/commonjs/components/FloatingPill.js +82 -22
  13. package/lib/commonjs/components/FloatingPill.js.map +1 -1
  14. package/lib/commonjs/components/InfoTab.js +5 -1
  15. package/lib/commonjs/components/InfoTab.js.map +1 -1
  16. package/lib/commonjs/components/LogItem.js +6 -0
  17. package/lib/commonjs/components/LogItem.js.map +1 -1
  18. package/lib/commonjs/components/LogsTab.js +3 -3
  19. package/lib/commonjs/components/LogsTab.js.map +1 -1
  20. package/lib/commonjs/components/NetworkTab.js +3 -2
  21. package/lib/commonjs/components/NetworkTab.js.map +1 -1
  22. package/lib/commonjs/components/StorageTab.js +672 -0
  23. package/lib/commonjs/components/StorageTab.js.map +1 -0
  24. package/lib/commonjs/constants.js +88 -6
  25. package/lib/commonjs/constants.js.map +1 -1
  26. package/lib/commonjs/index.js +84 -0
  27. package/lib/commonjs/index.js.map +1 -1
  28. package/lib/commonjs/types.js +2 -0
  29. package/lib/commonjs/types.js.map +1 -1
  30. package/lib/module/Backstage.js +19 -2
  31. package/lib/module/Backstage.js.map +1 -1
  32. package/lib/module/bug-report.js +164 -0
  33. package/lib/module/bug-report.js.map +1 -0
  34. package/lib/module/components/BackstagePanel.js +101 -18
  35. package/lib/module/components/BackstagePanel.js.map +1 -1
  36. package/lib/module/components/BugReportComposer.js +505 -0
  37. package/lib/module/components/BugReportComposer.js.map +1 -0
  38. package/lib/module/components/FlagsTab.js +23 -13
  39. package/lib/module/components/FlagsTab.js.map +1 -1
  40. package/lib/module/components/FloatingPill.js +86 -26
  41. package/lib/module/components/FloatingPill.js.map +1 -1
  42. package/lib/module/components/InfoTab.js +6 -2
  43. package/lib/module/components/InfoTab.js.map +1 -1
  44. package/lib/module/components/LogItem.js +7 -1
  45. package/lib/module/components/LogItem.js.map +1 -1
  46. package/lib/module/components/LogsTab.js +3 -3
  47. package/lib/module/components/LogsTab.js.map +1 -1
  48. package/lib/module/components/NetworkTab.js +3 -2
  49. package/lib/module/components/NetworkTab.js.map +1 -1
  50. package/lib/module/components/StorageTab.js +667 -0
  51. package/lib/module/components/StorageTab.js.map +1 -0
  52. package/lib/module/constants.js +88 -6
  53. package/lib/module/constants.js.map +1 -1
  54. package/lib/module/index.js +14 -0
  55. package/lib/module/index.js.map +1 -1
  56. package/lib/module/types.js +4 -0
  57. package/lib/module/types.js.map +1 -1
  58. package/lib/typescript/Backstage.d.ts.map +1 -1
  59. package/lib/typescript/bug-report.d.ts +12 -0
  60. package/lib/typescript/bug-report.d.ts.map +1 -0
  61. package/lib/typescript/components/BackstagePanel.d.ts +4 -1
  62. package/lib/typescript/components/BackstagePanel.d.ts.map +1 -1
  63. package/lib/typescript/components/BugReportComposer.d.ts +17 -0
  64. package/lib/typescript/components/BugReportComposer.d.ts.map +1 -0
  65. package/lib/typescript/components/FlagsTab.d.ts.map +1 -1
  66. package/lib/typescript/components/FloatingPill.d.ts +2 -0
  67. package/lib/typescript/components/FloatingPill.d.ts.map +1 -1
  68. package/lib/typescript/components/InfoTab.d.ts.map +1 -1
  69. package/lib/typescript/components/LogItem.d.ts.map +1 -1
  70. package/lib/typescript/components/LogsTab.d.ts.map +1 -1
  71. package/lib/typescript/components/NetworkTab.d.ts.map +1 -1
  72. package/lib/typescript/components/StorageTab.d.ts +9 -0
  73. package/lib/typescript/components/StorageTab.d.ts.map +1 -0
  74. package/lib/typescript/constants.d.ts +74 -4
  75. package/lib/typescript/constants.d.ts.map +1 -1
  76. package/lib/typescript/index.d.ts +13 -1
  77. package/lib/typescript/index.d.ts.map +1 -1
  78. package/lib/typescript/types.d.ts +55 -0
  79. package/lib/typescript/types.d.ts.map +1 -1
  80. package/package.json +7 -6
  81. package/src/Backstage.tsx +0 -209
  82. package/src/ThemeContext.tsx +0 -38
  83. package/src/components/BackstagePanel.tsx +0 -258
  84. package/src/components/FlagsTab.tsx +0 -198
  85. package/src/components/FloatingPill.tsx +0 -153
  86. package/src/components/InfoTab.tsx +0 -230
  87. package/src/components/JsonTreeView.tsx +0 -239
  88. package/src/components/LogItem.tsx +0 -144
  89. package/src/components/LogsTab.tsx +0 -217
  90. package/src/components/NetworkItem.tsx +0 -425
  91. package/src/components/NetworkTab.tsx +0 -240
  92. package/src/components/TabBar.tsx +0 -154
  93. package/src/constants.ts +0 -114
  94. package/src/index.ts +0 -18
  95. package/src/log-interceptor.ts +0 -148
  96. package/src/network-interceptor.ts +0 -468
  97. package/src/types.ts +0 -213
  98. package/src/utils/formatTimestamp.ts +0 -22
  99. package/src/utils/stringify.ts +0 -90
@@ -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,14 +1,13 @@
1
1
  {
2
2
  "name": "rn-backstage",
3
- "version": "1.2.1",
3
+ "version": "1.4.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",
7
7
  "types": "lib/typescript/index.d.ts",
8
- "react-native": "src/index",
8
+ "react-native": "lib/module/index",
9
9
  "source": "src/index",
10
10
  "files": [
11
- "src",
12
11
  "lib",
13
12
  "!**/__tests__",
14
13
  "!**/__fixtures__",
@@ -16,6 +15,8 @@
16
15
  "!**/.*"
17
16
  ],
18
17
  "scripts": {
18
+ "example:ios": "cd example && npx expo run:ios",
19
+ "example:android": "cd example && npx expo run:android",
19
20
  "typecheck": "tsc --noEmit",
20
21
  "lint": "prettier --write \"**/*.{js,ts,tsx}\" && eslint \"**/*.{js,ts,tsx}\"",
21
22
  "prepack": "bob build",
@@ -44,12 +45,12 @@
44
45
  "access": "public"
45
46
  },
46
47
  "devDependencies": {
47
- "@types/react": "~18.3.0",
48
+ "@types/react": "~19.2.10",
48
49
  "del-cli": "^6.0.0",
49
50
  "eslint": "^9.0.0",
50
51
  "prettier": "^3.0.0",
51
- "react": "18.3.1",
52
- "react-native": "^0.78.0",
52
+ "react": "19.2.0",
53
+ "react-native": "0.83.4",
53
54
  "react-native-builder-bob": "^0.35.0",
54
55
  "release-it": "^18.0.0",
55
56
  "typescript": "^5.0.0",
package/src/Backstage.tsx DELETED
@@ -1,209 +0,0 @@
1
- import React, {
2
- forwardRef,
3
- useCallback,
4
- useEffect,
5
- useImperativeHandle,
6
- useRef,
7
- useState,
8
- } from 'react'
9
- import { StyleSheet, View } from 'react-native'
10
- import { DEFAULT_MAX_LOGS, DEFAULT_MAX_NETWORK_ENTRIES } from './constants'
11
- import { installInterceptor, LogBuffer, uninstallInterceptor } from './log-interceptor'
12
- import {
13
- installNetworkInterceptor,
14
- NetworkBuffer,
15
- uninstallNetworkInterceptor,
16
- } from './network-interceptor'
17
- import { FloatingPill } from './components/FloatingPill'
18
- import { BackstagePanel } from './components/BackstagePanel'
19
- import { BackstageThemeProvider } from './ThemeContext'
20
- import type { BackstageProps, BackstageRef, LogEntry, NetworkEntry } from './types'
21
-
22
- // ─── Component ───────────────────────────────────────────────────────────────
23
-
24
- export const Backstage = forwardRef<BackstageRef, BackstageProps>(
25
- (
26
- {
27
- visible = true,
28
- theme: themePreference = 'auto',
29
- appVersion,
30
- buildNumber,
31
- bundleId,
32
- deviceInfo,
33
- state,
34
- quickActions,
35
- featureFlags,
36
- onToggleFeatureFlag,
37
- maxLogs = DEFAULT_MAX_LOGS,
38
- logFilters,
39
- onCopyLogs,
40
- extraTabs,
41
- children,
42
- styles: propStyles,
43
- initialX,
44
- initialY,
45
- pillText,
46
- enableNetworkInspector = true,
47
- maxNetworkEntries = DEFAULT_MAX_NETWORK_ENTRIES,
48
- maxNetworkBodySize,
49
- networkFilters,
50
- autoFilterNetworkLogs = true,
51
- jsonMaxDepth,
52
- },
53
- ref,
54
- ) => {
55
- const [panelVisible, setPanelVisible] = useState(false)
56
- const [hasError, setHasError] = useState(false)
57
- const [logs, setLogs] = useState<LogEntry[]>([])
58
- const [networkEntries, setNetworkEntries] = useState<NetworkEntry[]>([])
59
-
60
- const logBuffer = useRef(new LogBuffer(maxLogs))
61
- const networkBuffer = useRef(new NetworkBuffer(maxNetworkEntries))
62
-
63
- // ── Panel controls ────────────────────────────────────────
64
-
65
- const openPanel = useCallback(() => {
66
- setPanelVisible(true)
67
- // Sync logs and network entries when opening panel
68
- setLogs(logBuffer.current.getAll())
69
- setNetworkEntries(networkBuffer.current.getAll())
70
- }, [])
71
-
72
- const closePanel = useCallback(() => {
73
- setPanelVisible(false)
74
- }, [])
75
-
76
- const clearLogs = useCallback(() => {
77
- logBuffer.current.clear()
78
- setLogs([])
79
- setHasError(false)
80
- }, [])
81
-
82
- // ── Refresh logs ──────────────────────────────────────────────────
83
-
84
- const refreshLogs = useCallback(() => {
85
- setLogs(logBuffer.current.getAll())
86
- }, [])
87
-
88
- // ── Network controls ──────────────────────────────────────────────
89
-
90
- const refreshNetwork = useCallback(() => {
91
- setNetworkEntries(networkBuffer.current.getAll())
92
- }, [])
93
-
94
- const clearNetwork = useCallback(() => {
95
- networkBuffer.current.clear()
96
- setNetworkEntries([])
97
- }, [])
98
-
99
- // ── Install console interceptor ───────────────────────────
100
-
101
- useEffect(() => {
102
- const handleLogEntry = (entry: LogEntry) => {
103
- logBuffer.current.push(entry)
104
-
105
- // Track error state for the floating pill
106
- if (entry.level === 'error') {
107
- setHasError(true)
108
- }
109
- }
110
-
111
- installInterceptor(handleLogEntry, logFilters, {
112
- autoFilterNetworkLogs: enableNetworkInspector && autoFilterNetworkLogs,
113
- })
114
-
115
- return () => {
116
- uninstallInterceptor()
117
- }
118
- }, [logFilters, enableNetworkInspector, autoFilterNetworkLogs])
119
-
120
- // ── Install network interceptor ───────────────────────────────
121
-
122
- useEffect(() => {
123
- if (!enableNetworkInspector) return
124
-
125
- const handleNetworkEntry = (entry: NetworkEntry) => {
126
- networkBuffer.current.upsert(entry)
127
-
128
- // Auto-refresh if panel is open
129
- if (panelVisible) {
130
- setNetworkEntries(networkBuffer.current.getAll())
131
- }
132
- }
133
-
134
- installNetworkInterceptor(handleNetworkEntry, {
135
- filters: networkFilters,
136
- maxBodySize: maxNetworkBodySize,
137
- })
138
-
139
- return () => {
140
- uninstallNetworkInterceptor()
141
- }
142
- }, [enableNetworkInspector, networkFilters, maxNetworkBodySize, panelVisible])
143
-
144
- // ── Expose ref methods ────────────────────────────────────
145
-
146
- useImperativeHandle(ref, () => ({
147
- open: openPanel,
148
- close: closePanel,
149
- clearLogs,
150
- }))
151
-
152
- // ── Render ────────────────────────────────────────────────
153
-
154
- if (!visible) return null
155
-
156
- const displayText = pillText || (appVersion ? `v${appVersion}` : 'DEV')
157
-
158
- return (
159
- <BackstageThemeProvider preference={themePreference}>
160
- <View style={styles.container} pointerEvents="box-none">
161
- <FloatingPill
162
- text={displayText}
163
- hasError={hasError}
164
- onPress={openPanel}
165
- initialX={initialX}
166
- initialY={initialY}
167
- styles={propStyles}
168
- />
169
- <BackstagePanel
170
- visible={panelVisible}
171
- onClose={closePanel}
172
- appVersion={appVersion}
173
- buildNumber={buildNumber}
174
- bundleId={bundleId}
175
- deviceInfo={deviceInfo}
176
- state={state}
177
- quickActions={quickActions}
178
- featureFlags={featureFlags}
179
- onToggleFeatureFlag={onToggleFeatureFlag}
180
- logs={logs}
181
- onRefreshLogs={refreshLogs}
182
- onCopyLogs={onCopyLogs}
183
- networkEntries={networkEntries}
184
- onRefreshNetwork={refreshNetwork}
185
- onClearNetwork={clearNetwork}
186
- onCopyNetwork={onCopyLogs}
187
- extraTabs={extraTabs}
188
- jsonMaxDepth={jsonMaxDepth}
189
- styles={propStyles}
190
- >
191
- {children}
192
- </BackstagePanel>
193
- </View>
194
- </BackstageThemeProvider>
195
- )
196
- },
197
- )
198
-
199
- Backstage.displayName = 'Backstage'
200
-
201
- // ─── Styles ──────────────────────────────────────────────────────────────────
202
-
203
- const styles = StyleSheet.create({
204
- container: {
205
- ...StyleSheet.absoluteFillObject,
206
- zIndex: 99999,
207
- elevation: 99999,
208
- },
209
- })
@@ -1,38 +0,0 @@
1
- import React, { createContext, useContext, useMemo } from 'react'
2
- import { useColorScheme } from 'react-native'
3
- import { DarkTheme, LightTheme } from './constants'
4
- import type { BackstageTheme } from './types'
5
-
6
- // ─── Theme Preference ────────────────────────────────────────────────────────
7
-
8
- export type ThemePreference = 'light' | 'dark' | 'auto'
9
-
10
- // ─── Context ─────────────────────────────────────────────────────────────────
11
-
12
- const ThemeContext = createContext<BackstageTheme>(DarkTheme)
13
-
14
- // ─── Provider ────────────────────────────────────────────────────────────────
15
-
16
- interface ThemeProviderProps {
17
- preference: ThemePreference
18
- children: React.ReactNode
19
- }
20
-
21
- export const BackstageThemeProvider: React.FC<ThemeProviderProps> = ({ preference, children }) => {
22
- const systemScheme = useColorScheme()
23
-
24
- const theme = useMemo(() => {
25
- if (preference === 'light') return LightTheme
26
- if (preference === 'dark') return DarkTheme
27
- // 'auto' — follow system, fallback to dark
28
- return systemScheme === 'light' ? LightTheme : DarkTheme
29
- }, [preference, systemScheme])
30
-
31
- return <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>
32
- }
33
-
34
- // ─── Hook ────────────────────────────────────────────────────────────────────
35
-
36
- export function useBackstageTheme(): BackstageTheme {
37
- return useContext(ThemeContext)
38
- }
@@ -1,258 +0,0 @@
1
- import React, { useMemo, useState } from 'react'
2
- import {
3
- Modal,
4
- SafeAreaView,
5
- StatusBar,
6
- StyleSheet,
7
- Text,
8
- TouchableOpacity,
9
- View,
10
- } from 'react-native'
11
- import { MonospaceFont, TestIDs } from '../constants'
12
- import { useBackstageTheme } from '../ThemeContext'
13
- import { TabBar } from './TabBar'
14
- import { InfoTab } from './InfoTab'
15
- import { LogsTab } from './LogsTab'
16
- import { NetworkTab } from './NetworkTab'
17
- import { FlagsTab } from './FlagsTab'
18
- import type {
19
- AppInfoItem,
20
- BackstageStyleOverrides,
21
- BackstageTab,
22
- FeatureFlag,
23
- LogEntry,
24
- NetworkEntry,
25
- QuickAction,
26
- } from '../types'
27
-
28
- // ─── Types ───────────────────────────────────────────────────────────────────
29
-
30
- interface BackstagePanelProps {
31
- visible: boolean
32
- onClose: () => void
33
-
34
- // Info tab props
35
- appVersion?: string
36
- buildNumber?: string
37
- bundleId?: string
38
- deviceInfo?: AppInfoItem[]
39
- state?: Record<string, unknown>
40
- quickActions?: QuickAction[]
41
- featureFlags?: FeatureFlag[]
42
- onToggleFeatureFlag?: (key: string, value: boolean) => void
43
-
44
- // Logs tab props
45
- logs: LogEntry[]
46
- onRefreshLogs: () => void
47
- onCopyLogs?: (logs: string) => void
48
-
49
- // Network tab props
50
- networkEntries: NetworkEntry[]
51
- onRefreshNetwork: () => void
52
- onClearNetwork: () => void
53
- onCopyNetwork?: (text: string) => void
54
-
55
- // Extensibility
56
- extraTabs?: BackstageTab[]
57
-
58
- // JSON tree
59
- jsonMaxDepth?: number
60
-
61
- // Styling
62
- styles?: BackstageStyleOverrides
63
- children?: React.ReactNode
64
- }
65
-
66
- // ─── Built-in Tab Definitions ────────────────────────────────────────────
67
-
68
- const ALWAYS_ON_TABS = [
69
- { key: 'info', title: 'Info', icon: 'ℹ️' },
70
- { key: 'network', title: 'Network', icon: '🌐' },
71
- ]
72
-
73
- const FLAGS_TAB = { key: 'flags', title: 'Flags', icon: '🎚' }
74
-
75
- const LOGS_TAB = { key: 'logs', title: 'Logs', icon: '📋' }
76
-
77
- // ─── Component ───────────────────────────────────────────────────────────────
78
-
79
- export const BackstagePanel: React.FC<BackstagePanelProps> = ({
80
- visible,
81
- onClose,
82
- appVersion,
83
- buildNumber,
84
- bundleId,
85
- deviceInfo,
86
- state,
87
- quickActions,
88
- featureFlags,
89
- onToggleFeatureFlag,
90
- logs,
91
- onRefreshLogs,
92
- onCopyLogs,
93
- networkEntries,
94
- onRefreshNetwork,
95
- onClearNetwork,
96
- onCopyNetwork,
97
- extraTabs = [],
98
- jsonMaxDepth,
99
- styles: propStyles,
100
- children,
101
- }) => {
102
- const [activeTab, setActiveTab] = useState('info')
103
- const theme = useBackstageTheme()
104
- const styles = useMemo(() => createStyles(theme), [theme])
105
-
106
- // Compose all tabs: built-in (conditionally including Flags) + extra
107
- const hasFlags = featureFlags && featureFlags.length > 0
108
- const allTabs = [
109
- ...ALWAYS_ON_TABS,
110
- ...(hasFlags ? [FLAGS_TAB] : []),
111
- LOGS_TAB,
112
- ...extraTabs.map(t => ({ key: t.key, title: t.title, icon: t.icon })),
113
- ]
114
-
115
- // Render active tab content
116
- const renderTabContent = () => {
117
- switch (activeTab) {
118
- case 'info':
119
- return (
120
- <InfoTab
121
- appVersion={appVersion}
122
- buildNumber={buildNumber}
123
- bundleId={bundleId}
124
- deviceInfo={deviceInfo}
125
- state={state}
126
- quickActions={quickActions}
127
- jsonMaxDepth={jsonMaxDepth}
128
- onClosePanel={onClose}
129
- styles={propStyles}
130
- >
131
- {children}
132
- </InfoTab>
133
- )
134
- case 'flags':
135
- return <FlagsTab flags={featureFlags ?? []} onToggle={onToggleFeatureFlag} />
136
- case 'network':
137
- return (
138
- <NetworkTab
139
- entries={networkEntries}
140
- onRefresh={onRefreshNetwork}
141
- onClear={onClearNetwork}
142
- onCopy={onCopyNetwork}
143
- jsonMaxDepth={jsonMaxDepth}
144
- />
145
- )
146
- case 'logs':
147
- return (
148
- <LogsTab
149
- logs={logs}
150
- onRefresh={onRefreshLogs}
151
- onCopyLogs={onCopyLogs}
152
- jsonMaxDepth={jsonMaxDepth}
153
- styles={propStyles}
154
- />
155
- )
156
- default: {
157
- // Render extra tab content
158
- const extraTab = extraTabs.find(t => t.key === activeTab)
159
- if (extraTab) {
160
- return <>{extraTab.render()}</>
161
- }
162
- return null
163
- }
164
- }
165
- }
166
-
167
- return (
168
- <Modal
169
- testID={TestIDs.panel}
170
- animationType="slide"
171
- transparent={false}
172
- visible={visible}
173
- onRequestClose={onClose}
174
- statusBarTranslucent
175
- >
176
- <StatusBar
177
- barStyle={theme.background < '#888' ? 'light-content' : 'dark-content'}
178
- backgroundColor={theme.background}
179
- />
180
- <SafeAreaView style={[styles.safeArea, propStyles?.panelStyle]}>
181
- {/* ── Header ──────────────────────────────────────────── */}
182
- <View style={styles.header}>
183
- <View style={styles.headerLeft}>
184
- <Text style={styles.headerBrand}>⚙</Text>
185
- <Text style={[styles.headerTitle, propStyles?.headerTitleStyle]}>Backstage</Text>
186
- </View>
187
- <TouchableOpacity
188
- testID={TestIDs.header.closeButton}
189
- style={styles.closeButton}
190
- onPress={onClose}
191
- activeOpacity={0.7}
192
- hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}
193
- >
194
- <Text style={styles.closeButtonText}>✕</Text>
195
- </TouchableOpacity>
196
- </View>
197
-
198
- {/* ── Tab Bar ─────────────────────────────────────────── */}
199
- <TabBar tabs={allTabs} activeTab={activeTab} onTabChange={setActiveTab} />
200
-
201
- {/* ── Tab Content ─────────────────────────────────────── */}
202
- <View style={styles.content}>{renderTabContent()}</View>
203
- </SafeAreaView>
204
- </Modal>
205
- )
206
- }
207
-
208
- // ─── Styles ──────────────────────────────────────────────────────────────────
209
-
210
- const createStyles = (t: import('../types').BackstageTheme) =>
211
- StyleSheet.create({
212
- safeArea: {
213
- flex: 1,
214
- backgroundColor: t.background,
215
- },
216
- header: {
217
- flexDirection: 'row',
218
- alignItems: 'center',
219
- justifyContent: 'space-between',
220
- paddingHorizontal: 16,
221
- paddingVertical: 12,
222
- borderBottomWidth: 1,
223
- borderBottomColor: t.border,
224
- },
225
- headerLeft: {
226
- flexDirection: 'row',
227
- alignItems: 'center',
228
- },
229
- headerBrand: {
230
- fontSize: 20,
231
- marginRight: 8,
232
- },
233
- headerTitle: {
234
- fontFamily: MonospaceFont,
235
- fontSize: 18,
236
- fontWeight: '800',
237
- color: t.text,
238
- letterSpacing: 1,
239
- },
240
- closeButton: {
241
- width: 32,
242
- height: 32,
243
- borderRadius: 16,
244
- backgroundColor: t.surfaceElevated,
245
- borderWidth: 1,
246
- borderColor: t.border,
247
- alignItems: 'center',
248
- justifyContent: 'center',
249
- },
250
- closeButtonText: {
251
- fontSize: 14,
252
- color: t.textSecondary,
253
- fontWeight: '700',
254
- },
255
- content: {
256
- flex: 1,
257
- },
258
- })