rn-backstage 1.0.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 (102) hide show
  1. package/README.md +80 -0
  2. package/lib/commonjs/Backstage.js +130 -0
  3. package/lib/commonjs/Backstage.js.map +1 -0
  4. package/lib/commonjs/components/BackstagePanel.js +192 -0
  5. package/lib/commonjs/components/BackstagePanel.js.map +1 -0
  6. package/lib/commonjs/components/FloatingPill.js +147 -0
  7. package/lib/commonjs/components/FloatingPill.js.map +1 -0
  8. package/lib/commonjs/components/InfoTab.js +260 -0
  9. package/lib/commonjs/components/InfoTab.js.map +1 -0
  10. package/lib/commonjs/components/JsonTreeView.js +245 -0
  11. package/lib/commonjs/components/JsonTreeView.js.map +1 -0
  12. package/lib/commonjs/components/LogItem.js +191 -0
  13. package/lib/commonjs/components/LogItem.js.map +1 -0
  14. package/lib/commonjs/components/LogsTab.js +235 -0
  15. package/lib/commonjs/components/LogsTab.js.map +1 -0
  16. package/lib/commonjs/components/TabBar.js +132 -0
  17. package/lib/commonjs/components/TabBar.js.map +1 -0
  18. package/lib/commonjs/constants.js +89 -0
  19. package/lib/commonjs/constants.js.map +1 -0
  20. package/lib/commonjs/index.js +20 -0
  21. package/lib/commonjs/index.js.map +1 -0
  22. package/lib/commonjs/log-interceptor.js +114 -0
  23. package/lib/commonjs/log-interceptor.js.map +1 -0
  24. package/lib/commonjs/package.json +1 -0
  25. package/lib/commonjs/types.js +21 -0
  26. package/lib/commonjs/types.js.map +1 -0
  27. package/lib/commonjs/utils/formatTimestamp.js +26 -0
  28. package/lib/commonjs/utils/formatTimestamp.js.map +1 -0
  29. package/lib/commonjs/utils/stringify.js +78 -0
  30. package/lib/commonjs/utils/stringify.js.map +1 -0
  31. package/lib/module/Backstage.js +125 -0
  32. package/lib/module/Backstage.js.map +1 -0
  33. package/lib/module/components/BackstagePanel.js +187 -0
  34. package/lib/module/components/BackstagePanel.js.map +1 -0
  35. package/lib/module/components/FloatingPill.js +142 -0
  36. package/lib/module/components/FloatingPill.js.map +1 -0
  37. package/lib/module/components/InfoTab.js +255 -0
  38. package/lib/module/components/InfoTab.js.map +1 -0
  39. package/lib/module/components/JsonTreeView.js +241 -0
  40. package/lib/module/components/JsonTreeView.js.map +1 -0
  41. package/lib/module/components/LogItem.js +186 -0
  42. package/lib/module/components/LogItem.js.map +1 -0
  43. package/lib/module/components/LogsTab.js +230 -0
  44. package/lib/module/components/LogsTab.js.map +1 -0
  45. package/lib/module/components/TabBar.js +127 -0
  46. package/lib/module/components/TabBar.js.map +1 -0
  47. package/lib/module/constants.js +85 -0
  48. package/lib/module/constants.js.map +1 -0
  49. package/lib/module/index.js +5 -0
  50. package/lib/module/index.js.map +1 -0
  51. package/lib/module/log-interceptor.js +108 -0
  52. package/lib/module/log-interceptor.js.map +1 -0
  53. package/lib/module/package.json +1 -0
  54. package/lib/module/types.js +25 -0
  55. package/lib/module/types.js.map +1 -0
  56. package/lib/module/utils/formatTimestamp.js +22 -0
  57. package/lib/module/utils/formatTimestamp.js.map +1 -0
  58. package/lib/module/utils/stringify.js +73 -0
  59. package/lib/module/utils/stringify.js.map +1 -0
  60. package/lib/typescript/Backstage.d.ts +4 -0
  61. package/lib/typescript/Backstage.d.ts.map +1 -0
  62. package/lib/typescript/components/BackstagePanel.d.ts +21 -0
  63. package/lib/typescript/components/BackstagePanel.d.ts.map +1 -0
  64. package/lib/typescript/components/FloatingPill.d.ts +13 -0
  65. package/lib/typescript/components/FloatingPill.d.ts.map +1 -0
  66. package/lib/typescript/components/InfoTab.d.ts +16 -0
  67. package/lib/typescript/components/InfoTab.d.ts.map +1 -0
  68. package/lib/typescript/components/JsonTreeView.d.ts +10 -0
  69. package/lib/typescript/components/JsonTreeView.d.ts.map +1 -0
  70. package/lib/typescript/components/LogItem.d.ts +10 -0
  71. package/lib/typescript/components/LogItem.d.ts.map +1 -0
  72. package/lib/typescript/components/LogsTab.d.ts +11 -0
  73. package/lib/typescript/components/LogsTab.d.ts.map +1 -0
  74. package/lib/typescript/components/TabBar.d.ts +14 -0
  75. package/lib/typescript/components/TabBar.d.ts.map +1 -0
  76. package/lib/typescript/constants.d.ts +43 -0
  77. package/lib/typescript/constants.d.ts.map +1 -0
  78. package/lib/typescript/index.d.ts +4 -0
  79. package/lib/typescript/index.d.ts.map +1 -0
  80. package/lib/typescript/log-interceptor.d.ts +16 -0
  81. package/lib/typescript/log-interceptor.d.ts.map +1 -0
  82. package/lib/typescript/types.d.ts +110 -0
  83. package/lib/typescript/types.d.ts.map +1 -0
  84. package/lib/typescript/utils/formatTimestamp.d.ts +7 -0
  85. package/lib/typescript/utils/formatTimestamp.d.ts.map +1 -0
  86. package/lib/typescript/utils/stringify.d.ts +9 -0
  87. package/lib/typescript/utils/stringify.d.ts.map +1 -0
  88. package/package.json +91 -0
  89. package/src/Backstage.tsx +145 -0
  90. package/src/components/BackstagePanel.tsx +208 -0
  91. package/src/components/FloatingPill.tsx +150 -0
  92. package/src/components/InfoTab.tsx +264 -0
  93. package/src/components/JsonTreeView.tsx +259 -0
  94. package/src/components/LogItem.tsx +189 -0
  95. package/src/components/LogsTab.tsx +239 -0
  96. package/src/components/TabBar.tsx +150 -0
  97. package/src/constants.ts +82 -0
  98. package/src/index.ts +14 -0
  99. package/src/log-interceptor.ts +137 -0
  100. package/src/types.ts +147 -0
  101. package/src/utils/formatTimestamp.ts +22 -0
  102. package/src/utils/stringify.ts +90 -0
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LogItem = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _constants = require("../constants");
10
+ var _types = require("../types");
11
+ var _formatTimestamp = require("../utils/formatTimestamp");
12
+ var _JsonTreeView = require("./JsonTreeView");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
+ // ─── Types ───────────────────────────────────────────────────────────────────
16
+
17
+ // ─── Badge Colors ────────────────────────────────────────────────────────────
18
+
19
+ function getBadgeConfig(level) {
20
+ switch (level) {
21
+ case _types.LogLevel.error:
22
+ return {
23
+ label: 'ERROR',
24
+ color: _constants.DarkTheme.error,
25
+ bgColor: _constants.DarkTheme.errorDim,
26
+ rowBg: 'rgba(255, 77, 106, 0.06)'
27
+ };
28
+ case _types.LogLevel.warn:
29
+ return {
30
+ label: 'WARN',
31
+ color: _constants.DarkTheme.warning,
32
+ bgColor: _constants.DarkTheme.warningDim,
33
+ rowBg: 'rgba(255, 178, 36, 0.06)'
34
+ };
35
+ case _types.LogLevel.info:
36
+ return {
37
+ label: 'INFO',
38
+ color: _constants.DarkTheme.info,
39
+ bgColor: _constants.DarkTheme.infoDim,
40
+ rowBg: 'transparent'
41
+ };
42
+ case _types.LogLevel.debug:
43
+ return {
44
+ label: 'DEBUG',
45
+ color: _constants.DarkTheme.debugColor,
46
+ bgColor: _constants.DarkTheme.debugDim,
47
+ rowBg: 'transparent'
48
+ };
49
+ default:
50
+ return {
51
+ label: 'LOG',
52
+ color: _constants.DarkTheme.textSecondary,
53
+ bgColor: 'rgba(160, 160, 176, 0.1)',
54
+ rowBg: 'transparent'
55
+ };
56
+ }
57
+ }
58
+
59
+ // ─── Component ───────────────────────────────────────────────────────────────
60
+
61
+ const LogItem = exports.LogItem = /*#__PURE__*/_react.default.memo(({
62
+ item,
63
+ onCopy,
64
+ styles: propStyles
65
+ }) => {
66
+ const [expanded, setExpanded] = (0, _react.useState)(false);
67
+ const badge = getBadgeConfig(item.level);
68
+ const hasData = item.data !== undefined;
69
+ const toggleExpand = (0, _react.useCallback)(() => {
70
+ setExpanded(prev => !prev);
71
+ }, []);
72
+ const handleCopy = (0, _react.useCallback)(() => {
73
+ if (onCopy) {
74
+ const text = `[${badge.label}] ${(0, _formatTimestamp.formatTimestamp)(item.timestamp)} ${item.message}`;
75
+ onCopy(text);
76
+ }
77
+ }, [item, badge.label, onCopy]);
78
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
79
+ style: [styles.container, {
80
+ backgroundColor: badge.rowBg
81
+ }],
82
+ onPress: hasData ? toggleExpand : undefined,
83
+ onLongPress: handleCopy,
84
+ activeOpacity: hasData ? 0.7 : 1,
85
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
86
+ style: styles.headerRow,
87
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
88
+ style: [styles.badge, {
89
+ backgroundColor: badge.bgColor
90
+ }],
91
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
92
+ style: [styles.badgeText, {
93
+ color: badge.color
94
+ }],
95
+ children: badge.label
96
+ })
97
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
98
+ style: [styles.timestamp, propStyles?.logTimestampStyle],
99
+ children: (0, _formatTimestamp.formatTimestamp)(item.timestamp)
100
+ }), onCopy && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
101
+ style: styles.copyButton,
102
+ onPress: handleCopy,
103
+ hitSlop: {
104
+ top: 8,
105
+ bottom: 8,
106
+ left: 8,
107
+ right: 8
108
+ },
109
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
110
+ style: styles.copyButtonText,
111
+ children: "\u29C9"
112
+ })
113
+ })]
114
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
115
+ style: [styles.message, propStyles?.logMessageStyle],
116
+ numberOfLines: expanded ? undefined : 3,
117
+ children: item.message
118
+ }), expanded && hasData && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
119
+ style: styles.dataContainer,
120
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_JsonTreeView.JsonTreeView, {
121
+ data: item.data,
122
+ hideRoot: true,
123
+ maxDepth: 5
124
+ })
125
+ }), hasData && !expanded && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
126
+ style: styles.expandHint,
127
+ children: "tap to expand \u25BE"
128
+ })]
129
+ });
130
+ });
131
+
132
+ // ─── Styles ──────────────────────────────────────────────────────────────────
133
+
134
+ const styles = _reactNative.StyleSheet.create({
135
+ container: {
136
+ paddingHorizontal: 14,
137
+ paddingVertical: 10,
138
+ borderBottomWidth: 1,
139
+ borderBottomColor: _constants.DarkTheme.border
140
+ },
141
+ headerRow: {
142
+ flexDirection: 'row',
143
+ alignItems: 'center',
144
+ marginBottom: 4
145
+ },
146
+ badge: {
147
+ borderRadius: 4,
148
+ paddingHorizontal: 6,
149
+ paddingVertical: 2,
150
+ marginRight: 8
151
+ },
152
+ badgeText: {
153
+ fontFamily: _constants.MonospaceFont,
154
+ fontSize: 10,
155
+ fontWeight: '800',
156
+ letterSpacing: 0.5
157
+ },
158
+ timestamp: {
159
+ fontFamily: _constants.MonospaceFont,
160
+ fontSize: 11,
161
+ color: _constants.DarkTheme.textMuted,
162
+ flex: 1
163
+ },
164
+ copyButton: {
165
+ padding: 4
166
+ },
167
+ copyButtonText: {
168
+ fontSize: 16,
169
+ color: _constants.DarkTheme.textMuted
170
+ },
171
+ message: {
172
+ fontFamily: _constants.MonospaceFont,
173
+ fontSize: 12,
174
+ color: _constants.DarkTheme.text,
175
+ lineHeight: 18
176
+ },
177
+ dataContainer: {
178
+ marginTop: 8,
179
+ paddingTop: 8,
180
+ borderTopWidth: 1,
181
+ borderTopColor: _constants.DarkTheme.border
182
+ },
183
+ expandHint: {
184
+ fontFamily: _constants.MonospaceFont,
185
+ fontSize: 10,
186
+ color: _constants.DarkTheme.textMuted,
187
+ marginTop: 4,
188
+ fontStyle: 'italic'
189
+ }
190
+ });
191
+ //# sourceMappingURL=LogItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_constants","_types","_formatTimestamp","_JsonTreeView","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getBadgeConfig","level","LogLevel","error","label","color","DarkTheme","bgColor","errorDim","rowBg","warn","warning","warningDim","info","infoDim","debug","debugColor","debugDim","textSecondary","LogItem","exports","React","memo","item","onCopy","styles","propStyles","expanded","setExpanded","useState","badge","hasData","data","undefined","toggleExpand","useCallback","prev","handleCopy","text","formatTimestamp","timestamp","message","jsxs","TouchableOpacity","style","container","backgroundColor","onPress","onLongPress","activeOpacity","children","View","headerRow","jsx","Text","badgeText","logTimestampStyle","copyButton","hitSlop","top","bottom","left","right","copyButtonText","logMessageStyle","numberOfLines","dataContainer","JsonTreeView","hideRoot","maxDepth","expandHint","StyleSheet","create","paddingHorizontal","paddingVertical","borderBottomWidth","borderBottomColor","border","flexDirection","alignItems","marginBottom","borderRadius","marginRight","fontFamily","MonospaceFont","fontSize","fontWeight","letterSpacing","textMuted","flex","padding","lineHeight","marginTop","paddingTop","borderTopWidth","borderTopColor","fontStyle"],"sourceRoot":"../../../src","sources":["components/LogItem.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,235 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.LogsTab = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _constants = require("../constants");
10
+ var _LogItem = require("./LogItem");
11
+ var _formatTimestamp = require("../utils/formatTimestamp");
12
+ var _jsxRuntime = require("react/jsx-runtime");
13
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14
+ // ─── Types ───────────────────────────────────────────────────────────────────
15
+
16
+ // ─── Component ───────────────────────────────────────────────────────────────
17
+
18
+ const LogsTab = ({
19
+ logs,
20
+ onRefresh,
21
+ onCopyLogs,
22
+ styles: propStyles
23
+ }) => {
24
+ const [searchText, setSearchText] = (0, _react.useState)('');
25
+
26
+ // Filter logs based on search text
27
+ const filteredLogs = (0, _react.useMemo)(() => {
28
+ if (!searchText.trim()) return logs;
29
+ const query = searchText.toLowerCase();
30
+ return logs.filter(log => {
31
+ return log.message.toLowerCase().includes(query) || log.level.toLowerCase().includes(query);
32
+ });
33
+ }, [logs, searchText]);
34
+
35
+ // Copy all visible logs to text
36
+ const handleCopyAll = (0, _react.useCallback)(() => {
37
+ if (!onCopyLogs) return;
38
+ const text = filteredLogs.map(log => `[${log.level.toUpperCase()}] ${(0, _formatTimestamp.formatTimestamp)(log.timestamp)} ${log.message}`).join('\n');
39
+ onCopyLogs(text);
40
+ }, [filteredLogs, onCopyLogs]);
41
+
42
+ // Copy individual log
43
+ const handleCopyItem = (0, _react.useCallback)(text => {
44
+ if (onCopyLogs) {
45
+ onCopyLogs(text);
46
+ }
47
+ }, [onCopyLogs]);
48
+
49
+ // Render log item
50
+ const renderItem = (0, _react.useCallback)(({
51
+ item
52
+ }) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_LogItem.LogItem, {
53
+ item: item,
54
+ onCopy: onCopyLogs ? handleCopyItem : undefined,
55
+ styles: propStyles
56
+ }), [handleCopyItem, onCopyLogs, propStyles]);
57
+ const keyExtractor = (0, _react.useCallback)(item => item.id, []);
58
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
59
+ style: styles.container,
60
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
61
+ style: styles.searchContainer,
62
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
63
+ style: styles.searchInputWrapper,
64
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
65
+ style: styles.searchIcon,
66
+ children: "\u2315"
67
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
68
+ testID: _constants.TestIDs.logsTab.searchInput,
69
+ style: styles.searchInput,
70
+ placeholder: "Filter logs...",
71
+ placeholderTextColor: _constants.DarkTheme.textMuted,
72
+ value: searchText,
73
+ onChangeText: setSearchText,
74
+ autoCapitalize: "none",
75
+ autoCorrect: false,
76
+ clearButtonMode: "while-editing",
77
+ returnKeyType: "search"
78
+ })]
79
+ }), onCopyLogs && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
80
+ testID: _constants.TestIDs.logsTab.copyButton,
81
+ style: styles.copyAllButton,
82
+ onPress: handleCopyAll,
83
+ activeOpacity: 0.7,
84
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
85
+ style: styles.copyAllText,
86
+ children: "Copy All"
87
+ })
88
+ })]
89
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
90
+ style: styles.countBar,
91
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
92
+ style: styles.countText,
93
+ children: filteredLogs.length === logs.length ? `${logs.length} log${logs.length !== 1 ? 's' : ''}` : `${filteredLogs.length} of ${logs.length} logs`
94
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
95
+ style: styles.pullHint,
96
+ children: "\u2193 pull to refresh"
97
+ })]
98
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
99
+ testID: _constants.TestIDs.logsTab.list,
100
+ data: filteredLogs,
101
+ renderItem: renderItem,
102
+ keyExtractor: keyExtractor,
103
+ refreshing: false,
104
+ onRefresh: onRefresh,
105
+ style: styles.list,
106
+ contentContainerStyle: filteredLogs.length === 0 ? styles.emptyContainer : undefined,
107
+ ListEmptyComponent: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
108
+ style: styles.emptyState,
109
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
110
+ style: styles.emptyIcon,
111
+ children: "\uD83D\uDCCB"
112
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
113
+ style: styles.emptyTitle,
114
+ children: "No logs yet"
115
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
116
+ style: styles.emptySubtitle,
117
+ children: "Console output will appear here"
118
+ })]
119
+ })
120
+ // Perf optimizations
121
+ ,
122
+ maxToRenderPerBatch: 20,
123
+ windowSize: 10,
124
+ initialNumToRender: 20,
125
+ removeClippedSubviews: true,
126
+ getItemLayout: undefined
127
+ })]
128
+ });
129
+ };
130
+
131
+ // ─── Styles ──────────────────────────────────────────────────────────────────
132
+ exports.LogsTab = LogsTab;
133
+ const styles = _reactNative.StyleSheet.create({
134
+ container: {
135
+ flex: 1
136
+ },
137
+ searchContainer: {
138
+ flexDirection: 'row',
139
+ alignItems: 'center',
140
+ paddingHorizontal: 14,
141
+ paddingVertical: 10,
142
+ gap: 10,
143
+ borderBottomWidth: 1,
144
+ borderBottomColor: _constants.DarkTheme.border
145
+ },
146
+ searchInputWrapper: {
147
+ flex: 1,
148
+ flexDirection: 'row',
149
+ alignItems: 'center',
150
+ backgroundColor: _constants.DarkTheme.surfaceElevated,
151
+ borderRadius: 10,
152
+ borderWidth: 1,
153
+ borderColor: _constants.DarkTheme.border,
154
+ paddingHorizontal: 12,
155
+ height: 38
156
+ },
157
+ searchIcon: {
158
+ fontSize: 16,
159
+ color: _constants.DarkTheme.textMuted,
160
+ marginRight: 8
161
+ },
162
+ searchInput: {
163
+ flex: 1,
164
+ fontFamily: _constants.MonospaceFont,
165
+ fontSize: 13,
166
+ color: _constants.DarkTheme.text,
167
+ padding: 0
168
+ },
169
+ copyAllButton: {
170
+ backgroundColor: _constants.DarkTheme.accentDim,
171
+ borderRadius: 8,
172
+ borderWidth: 1,
173
+ borderColor: _constants.DarkTheme.accent,
174
+ paddingHorizontal: 14,
175
+ height: 38,
176
+ justifyContent: 'center'
177
+ },
178
+ copyAllText: {
179
+ fontFamily: _constants.MonospaceFont,
180
+ fontSize: 12,
181
+ fontWeight: '700',
182
+ color: _constants.DarkTheme.accent,
183
+ letterSpacing: 0.5
184
+ },
185
+ countBar: {
186
+ flexDirection: 'row',
187
+ justifyContent: 'space-between',
188
+ alignItems: 'center',
189
+ paddingHorizontal: 16,
190
+ paddingVertical: 6,
191
+ backgroundColor: _constants.DarkTheme.surface
192
+ },
193
+ countText: {
194
+ fontFamily: _constants.MonospaceFont,
195
+ fontSize: 11,
196
+ color: _constants.DarkTheme.textMuted
197
+ },
198
+ pullHint: {
199
+ fontFamily: _constants.MonospaceFont,
200
+ fontSize: 10,
201
+ color: _constants.DarkTheme.textMuted,
202
+ fontStyle: 'italic'
203
+ },
204
+ list: {
205
+ flex: 1
206
+ },
207
+ emptyContainer: {
208
+ flex: 1,
209
+ justifyContent: 'center'
210
+ },
211
+ emptyState: {
212
+ alignItems: 'center',
213
+ justifyContent: 'center',
214
+ padding: 40
215
+ },
216
+ emptyIcon: {
217
+ fontSize: 48,
218
+ marginBottom: 16,
219
+ opacity: 0.5
220
+ },
221
+ emptyTitle: {
222
+ fontFamily: _constants.MonospaceFont,
223
+ fontSize: 16,
224
+ fontWeight: '700',
225
+ color: _constants.DarkTheme.textSecondary,
226
+ marginBottom: 8
227
+ },
228
+ emptySubtitle: {
229
+ fontFamily: _constants.MonospaceFont,
230
+ fontSize: 13,
231
+ color: _constants.DarkTheme.textMuted,
232
+ textAlign: 'center'
233
+ }
234
+ });
235
+ //# sourceMappingURL=LogsTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_constants","_LogItem","_formatTimestamp","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","LogsTab","logs","onRefresh","onCopyLogs","styles","propStyles","searchText","setSearchText","useState","filteredLogs","useMemo","trim","query","toLowerCase","filter","log","message","includes","level","handleCopyAll","useCallback","text","map","toUpperCase","formatTimestamp","timestamp","join","handleCopyItem","renderItem","item","jsx","LogItem","onCopy","undefined","keyExtractor","id","jsxs","View","style","container","children","searchContainer","searchInputWrapper","Text","searchIcon","TextInput","testID","TestIDs","logsTab","searchInput","placeholder","placeholderTextColor","DarkTheme","textMuted","value","onChangeText","autoCapitalize","autoCorrect","clearButtonMode","returnKeyType","TouchableOpacity","copyButton","copyAllButton","onPress","activeOpacity","copyAllText","countBar","countText","length","pullHint","FlatList","list","data","refreshing","contentContainerStyle","emptyContainer","ListEmptyComponent","emptyState","emptyIcon","emptyTitle","emptySubtitle","maxToRenderPerBatch","windowSize","initialNumToRender","removeClippedSubviews","getItemLayout","exports","StyleSheet","create","flex","flexDirection","alignItems","paddingHorizontal","paddingVertical","gap","borderBottomWidth","borderBottomColor","border","backgroundColor","surfaceElevated","borderRadius","borderWidth","borderColor","height","fontSize","color","marginRight","fontFamily","MonospaceFont","padding","accentDim","accent","justifyContent","fontWeight","letterSpacing","surface","fontStyle","marginBottom","opacity","textSecondary","textAlign"],"sourceRoot":"../../../src","sources":["components/LogsTab.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.TabBar = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _constants = require("../constants");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
12
+ // ─── Types ───────────────────────────────────────────────────────────────────
13
+
14
+ // ─── Component ───────────────────────────────────────────────────────────────
15
+
16
+ const TabBar = ({
17
+ tabs,
18
+ activeTab,
19
+ onTabChange
20
+ }) => {
21
+ const indicatorAnim = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
22
+ const tabWidths = (0, _react.useRef)({});
23
+ const tabOffsets = (0, _react.useRef)({});
24
+ const scrollRef = (0, _react.useRef)(null);
25
+
26
+ // Animate indicator when active tab changes
27
+ (0, _react.useEffect)(() => {
28
+ const offset = tabOffsets.current[activeTab] || 0;
29
+ _reactNative.Animated.spring(indicatorAnim, {
30
+ toValue: offset,
31
+ useNativeDriver: true,
32
+ friction: 8,
33
+ tension: 60
34
+ }).start();
35
+ }, [activeTab, indicatorAnim]);
36
+ const handleTabLayout = (0, _react.useCallback)(key => e => {
37
+ const {
38
+ x,
39
+ width
40
+ } = e.nativeEvent.layout;
41
+ tabWidths.current[key] = width;
42
+ tabOffsets.current[key] = x;
43
+
44
+ // Re-animate if this is the active tab
45
+ if (key === activeTab) {
46
+ indicatorAnim.setValue(x);
47
+ }
48
+ }, [activeTab, indicatorAnim]);
49
+ const activeWidth = tabWidths.current[activeTab] || 80;
50
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
51
+ style: styles.container,
52
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
53
+ ref: scrollRef,
54
+ horizontal: true,
55
+ showsHorizontalScrollIndicator: false,
56
+ contentContainerStyle: styles.scrollContent,
57
+ children: [tabs.map(tab => {
58
+ const isActive = tab.key === activeTab;
59
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
60
+ onPress: () => onTabChange(tab.key),
61
+ onLayout: handleTabLayout(tab.key),
62
+ style: styles.tab,
63
+ activeOpacity: 0.7,
64
+ testID: `backstage.tab.${tab.key}`,
65
+ children: [tab.icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
66
+ style: [styles.tabIcon, isActive && styles.tabIconActive],
67
+ children: tab.icon
68
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
69
+ style: [styles.tabText, isActive && styles.tabTextActive],
70
+ children: tab.title
71
+ })]
72
+ }, tab.key);
73
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
74
+ style: [styles.indicator, {
75
+ width: activeWidth,
76
+ transform: [{
77
+ translateX: indicatorAnim
78
+ }]
79
+ }]
80
+ })]
81
+ })
82
+ });
83
+ };
84
+
85
+ // ─── Styles ──────────────────────────────────────────────────────────────────
86
+ exports.TabBar = TabBar;
87
+ const styles = _reactNative.StyleSheet.create({
88
+ container: {
89
+ borderBottomWidth: 1,
90
+ borderBottomColor: _constants.DarkTheme.border
91
+ },
92
+ scrollContent: {
93
+ flexDirection: 'row',
94
+ position: 'relative',
95
+ paddingBottom: 0
96
+ },
97
+ tab: {
98
+ flexDirection: 'row',
99
+ alignItems: 'center',
100
+ justifyContent: 'center',
101
+ paddingHorizontal: 20,
102
+ paddingVertical: 14,
103
+ minWidth: 80
104
+ },
105
+ tabIcon: {
106
+ fontSize: 14,
107
+ marginRight: 6,
108
+ opacity: 0.5
109
+ },
110
+ tabIconActive: {
111
+ opacity: 1
112
+ },
113
+ tabText: {
114
+ fontFamily: _constants.MonospaceFont,
115
+ fontSize: 13,
116
+ fontWeight: '600',
117
+ color: _constants.DarkTheme.textMuted,
118
+ textTransform: 'uppercase',
119
+ letterSpacing: 1
120
+ },
121
+ tabTextActive: {
122
+ color: _constants.DarkTheme.accent
123
+ },
124
+ indicator: {
125
+ position: 'absolute',
126
+ bottom: 0,
127
+ height: 2,
128
+ backgroundColor: _constants.DarkTheme.accent,
129
+ borderRadius: 1
130
+ }
131
+ });
132
+ //# sourceMappingURL=TabBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_constants","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","TabBar","tabs","activeTab","onTabChange","indicatorAnim","useRef","Animated","Value","current","tabWidths","tabOffsets","scrollRef","useEffect","offset","spring","toValue","useNativeDriver","friction","tension","start","handleTabLayout","useCallback","key","x","width","nativeEvent","layout","setValue","activeWidth","jsx","View","style","styles","container","children","jsxs","ScrollView","ref","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","scrollContent","map","tab","isActive","TouchableOpacity","onPress","onLayout","activeOpacity","testID","icon","Text","tabIcon","tabIconActive","tabText","tabTextActive","title","indicator","transform","translateX","exports","StyleSheet","create","borderBottomWidth","borderBottomColor","DarkTheme","border","flexDirection","position","paddingBottom","alignItems","justifyContent","paddingHorizontal","paddingVertical","minWidth","fontSize","marginRight","opacity","fontFamily","MonospaceFont","fontWeight","color","textMuted","textTransform","letterSpacing","accent","bottom","height","backgroundColor","borderRadius"],"sourceRoot":"../../../src","sources":["components/TabBar.tsx"],"mappings":"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","ignoreList":[]}