react-native-debug-toolkit 2.2.0 → 3.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 (115) hide show
  1. package/README.md +5 -8
  2. package/README.zh-CN.md +5 -8
  3. package/bin/debug-toolkit.js +114 -0
  4. package/lib/commonjs/features/network/index.js +32 -12
  5. package/lib/commonjs/features/network/index.js.map +1 -1
  6. package/lib/commonjs/features/network/networkInterceptor.js +164 -201
  7. package/lib/commonjs/features/network/networkInterceptor.js.map +1 -1
  8. package/lib/commonjs/index.js +59 -0
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/ui/panel/DebugPanel.js +25 -0
  11. package/lib/commonjs/ui/panel/DebugPanel.js.map +1 -1
  12. package/lib/commonjs/ui/panel/FloatPanelView.js +15 -62
  13. package/lib/commonjs/ui/panel/FloatPanelView.js.map +1 -1
  14. package/lib/commonjs/ui/panel/StreamingSettingsModal.js +529 -0
  15. package/lib/commonjs/ui/panel/StreamingSettingsModal.js.map +1 -0
  16. package/lib/commonjs/ui/panel/useTabAnimation.js +71 -0
  17. package/lib/commonjs/ui/panel/useTabAnimation.js.map +1 -0
  18. package/lib/commonjs/utils/autoDetectDaemon.js +141 -0
  19. package/lib/commonjs/utils/autoDetectDaemon.js.map +1 -0
  20. package/lib/commonjs/utils/createPersistedObservableStore.js +23 -3
  21. package/lib/commonjs/utils/createPersistedObservableStore.js.map +1 -1
  22. package/lib/commonjs/utils/daemonConnection.js +81 -0
  23. package/lib/commonjs/utils/daemonConnection.js.map +1 -0
  24. package/lib/commonjs/utils/daemonSettings.js +110 -0
  25. package/lib/commonjs/utils/daemonSettings.js.map +1 -0
  26. package/lib/commonjs/utils/reportToDaemon.js +112 -0
  27. package/lib/commonjs/utils/reportToDaemon.js.map +1 -0
  28. package/lib/commonjs/utils/sessionReport.js +132 -0
  29. package/lib/commonjs/utils/sessionReport.js.map +1 -0
  30. package/lib/commonjs/utils/streamToDaemon.js +334 -0
  31. package/lib/commonjs/utils/streamToDaemon.js.map +1 -0
  32. package/lib/module/features/network/index.js +30 -12
  33. package/lib/module/features/network/index.js.map +1 -1
  34. package/lib/module/features/network/networkInterceptor.js +163 -200
  35. package/lib/module/features/network/networkInterceptor.js.map +1 -1
  36. package/lib/module/index.js +5 -0
  37. package/lib/module/index.js.map +1 -1
  38. package/lib/module/ui/panel/DebugPanel.js +26 -1
  39. package/lib/module/ui/panel/DebugPanel.js.map +1 -1
  40. package/lib/module/ui/panel/FloatPanelView.js +16 -63
  41. package/lib/module/ui/panel/FloatPanelView.js.map +1 -1
  42. package/lib/module/ui/panel/StreamingSettingsModal.js +524 -0
  43. package/lib/module/ui/panel/StreamingSettingsModal.js.map +1 -0
  44. package/lib/module/ui/panel/useTabAnimation.js +67 -0
  45. package/lib/module/ui/panel/useTabAnimation.js.map +1 -0
  46. package/lib/module/utils/autoDetectDaemon.js +136 -0
  47. package/lib/module/utils/autoDetectDaemon.js.map +1 -0
  48. package/lib/module/utils/createPersistedObservableStore.js +23 -3
  49. package/lib/module/utils/createPersistedObservableStore.js.map +1 -1
  50. package/lib/module/utils/daemonConnection.js +77 -0
  51. package/lib/module/utils/daemonConnection.js.map +1 -0
  52. package/lib/module/utils/daemonSettings.js +102 -0
  53. package/lib/module/utils/daemonSettings.js.map +1 -0
  54. package/lib/module/utils/reportToDaemon.js +105 -0
  55. package/lib/module/utils/reportToDaemon.js.map +1 -0
  56. package/lib/module/utils/sessionReport.js +128 -0
  57. package/lib/module/utils/sessionReport.js.map +1 -0
  58. package/lib/module/utils/streamToDaemon.js +328 -0
  59. package/lib/module/utils/streamToDaemon.js.map +1 -0
  60. package/lib/typescript/src/features/network/index.d.ts +2 -4
  61. package/lib/typescript/src/features/network/index.d.ts.map +1 -1
  62. package/lib/typescript/src/features/network/networkInterceptor.d.ts +2 -15
  63. package/lib/typescript/src/features/network/networkInterceptor.d.ts.map +1 -1
  64. package/lib/typescript/src/index.d.ts +11 -1
  65. package/lib/typescript/src/index.d.ts.map +1 -1
  66. package/lib/typescript/src/ui/panel/DebugPanel.d.ts.map +1 -1
  67. package/lib/typescript/src/ui/panel/FloatPanelView.d.ts.map +1 -1
  68. package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts +8 -0
  69. package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts.map +1 -0
  70. package/lib/typescript/src/ui/panel/useTabAnimation.d.ts +14 -0
  71. package/lib/typescript/src/ui/panel/useTabAnimation.d.ts.map +1 -0
  72. package/lib/typescript/src/utils/autoDetectDaemon.d.ts +15 -0
  73. package/lib/typescript/src/utils/autoDetectDaemon.d.ts.map +1 -0
  74. package/lib/typescript/src/utils/createPersistedObservableStore.d.ts +2 -1
  75. package/lib/typescript/src/utils/createPersistedObservableStore.d.ts.map +1 -1
  76. package/lib/typescript/src/utils/daemonConnection.d.ts +18 -0
  77. package/lib/typescript/src/utils/daemonConnection.d.ts.map +1 -0
  78. package/lib/typescript/src/utils/daemonSettings.d.ts +19 -0
  79. package/lib/typescript/src/utils/daemonSettings.d.ts.map +1 -0
  80. package/lib/typescript/src/utils/reportToDaemon.d.ts +34 -0
  81. package/lib/typescript/src/utils/reportToDaemon.d.ts.map +1 -0
  82. package/lib/typescript/src/utils/sessionReport.d.ts +18 -0
  83. package/lib/typescript/src/utils/sessionReport.d.ts.map +1 -0
  84. package/lib/typescript/src/utils/streamToDaemon.d.ts +23 -0
  85. package/lib/typescript/src/utils/streamToDaemon.d.ts.map +1 -0
  86. package/node/daemon/src/cli.js +75 -0
  87. package/node/daemon/src/console/console.html +936 -0
  88. package/node/daemon/src/console/index.js +47 -0
  89. package/node/daemon/src/constants.js +32 -0
  90. package/node/daemon/src/index.js +11 -0
  91. package/node/daemon/src/server.js +365 -0
  92. package/node/daemon/src/store.js +110 -0
  93. package/node/mcp/src/cli.js +31 -0
  94. package/node/mcp/src/constants.js +13 -0
  95. package/node/mcp/src/daemonClient.js +132 -0
  96. package/node/mcp/src/httpClient.js +49 -0
  97. package/node/mcp/src/index.js +15 -0
  98. package/node/mcp/src/logs.js +95 -0
  99. package/node/mcp/src/server.js +144 -0
  100. package/node/mcp/src/tools.js +84 -0
  101. package/package.json +10 -5
  102. package/src/features/network/index.ts +35 -19
  103. package/src/features/network/networkInterceptor.ts +224 -236
  104. package/src/index.ts +15 -1
  105. package/src/ui/panel/DebugPanel.tsx +23 -1
  106. package/src/ui/panel/FloatPanelView.tsx +10 -68
  107. package/src/ui/panel/StreamingSettingsModal.tsx +566 -0
  108. package/src/ui/panel/useTabAnimation.ts +77 -0
  109. package/src/utils/autoDetectDaemon.ts +175 -0
  110. package/src/utils/createPersistedObservableStore.ts +16 -3
  111. package/src/utils/daemonConnection.ts +133 -0
  112. package/src/utils/daemonSettings.ts +134 -0
  113. package/src/utils/reportToDaemon.ts +172 -0
  114. package/src/utils/sessionReport.ts +203 -0
  115. package/src/utils/streamToDaemon.ts +419 -0
@@ -0,0 +1,529 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StreamingSettingsModal = StreamingSettingsModal;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _reactNative = require("react-native");
9
+ var _colors = require("../theme/colors");
10
+ var _daemonSettings = require("../../utils/daemonSettings");
11
+ var _daemonConnection = require("../../utils/daemonConnection");
12
+ var _reportToDaemon = require("../../utils/reportToDaemon");
13
+ var _autoDetectDaemon = require("../../utils/autoDetectDaemon");
14
+ var _streamToDaemon = require("../../utils/streamToDaemon");
15
+ var _jsxRuntime = require("react/jsx-runtime");
16
+ 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); }
17
+ const CONNECTION_TIMEOUT_MS = 2000;
18
+ function formatConnectionFailure() {
19
+ return 'Cannot reach desktop. Try /health in phone browser.';
20
+ }
21
+ function StreamingSettingsModal({
22
+ visible,
23
+ onClose
24
+ }) {
25
+ const inputRef = (0, _react.useRef)(null);
26
+ const [mode, setMode] = (0, _react.useState)('simulator');
27
+ const [deviceHost, setDeviceHost] = (0, _react.useState)('');
28
+ const [streaming, setStreaming] = (0, _react.useState)((0, _streamToDaemon.isStreaming)());
29
+ const [syncState, setSyncState] = (0, _react.useState)((0, _streamToDaemon.isStreaming)() ? 'running' : 'idle');
30
+ const [message, setMessage] = (0, _react.useState)(null);
31
+ const [sending, setSending] = (0, _react.useState)(false);
32
+ const [detecting, setDetecting] = (0, _react.useState)(false);
33
+ const handleDeviceHostChange = (0, _react.useCallback)(value => {
34
+ setDeviceHost(value);
35
+ if (syncState === 'failed') {
36
+ setSyncState('idle');
37
+ }
38
+ setMessage(null);
39
+ }, [syncState]);
40
+ const detectDeviceHost = (0, _react.useCallback)(async () => {
41
+ setDetecting(true);
42
+ setMessage('Detecting desktop...');
43
+ const result = await (0, _autoDetectDaemon.autoDetectDaemonIp)({
44
+ timeoutMs: 800,
45
+ scanSubnets: false
46
+ });
47
+ setDetecting(false);
48
+ if (result.ip) {
49
+ setDeviceHost(current => current.trim() ? current : result.ip || current);
50
+ setMessage(`Detected desktop at ${(0, _daemonSettings.buildDeviceDaemonEndpoint)(result.ip)}.`);
51
+ return;
52
+ }
53
+ setMessage('Enter your Mac IP, or open /health on the phone browser to verify reachability.');
54
+ }, []);
55
+ (0, _react.useEffect)(() => {
56
+ if (visible) {
57
+ (0, _daemonSettings.loadDaemonSettings)().then(settings => {
58
+ setMode(settings.mode);
59
+ const savedHost = settings.deviceHost;
60
+ if (settings.mode === 'device' && !savedHost) {
61
+ const metroHost = (0, _autoDetectDaemon.getMetroHost)();
62
+ if (metroHost) {
63
+ setDeviceHost(metroHost);
64
+ } else {
65
+ detectDeviceHost();
66
+ }
67
+ } else {
68
+ setDeviceHost(savedHost);
69
+ }
70
+ });
71
+ }
72
+ }, [detectDeviceHost, visible]);
73
+ (0, _react.useEffect)(() => {
74
+ const active = (0, _streamToDaemon.isStreaming)();
75
+ setStreaming(active);
76
+ setSyncState(active ? 'running' : 'idle');
77
+ }, [visible]);
78
+ const getSettings = (0, _react.useCallback)(() => ({
79
+ mode,
80
+ endpoint: '',
81
+ deviceHost,
82
+ token: ''
83
+ }), [deviceHost, mode]);
84
+ const validateSettings = (0, _react.useCallback)(() => {
85
+ if (mode === 'device' && !deviceHost.trim()) {
86
+ setMessage('Enter your Mac IP first.');
87
+ return false;
88
+ }
89
+ return true;
90
+ }, [deviceHost, mode]);
91
+ const handleModeChange = (0, _react.useCallback)(nextMode => {
92
+ setMode(nextMode);
93
+ if (nextMode === 'device' && !deviceHost) {
94
+ const metroHost = (0, _autoDetectDaemon.getMetroHost)();
95
+ if (metroHost) {
96
+ setDeviceHost(metroHost);
97
+ } else {
98
+ detectDeviceHost();
99
+ }
100
+ }
101
+ }, [detectDeviceHost, deviceHost]);
102
+ const toggleLiveSync = (0, _react.useCallback)(async () => {
103
+ if (streaming) {
104
+ (0, _streamToDaemon.stopStreaming)();
105
+ setStreaming(false);
106
+ setSyncState('idle');
107
+ setMessage(null);
108
+ return;
109
+ }
110
+ if (!validateSettings()) {
111
+ return;
112
+ }
113
+ const settings = getSettings();
114
+ const daemonOptions = (0, _daemonSettings.normalizeDaemonSettings)(settings);
115
+ setMessage('Checking desktop connection...');
116
+ setSyncState('connecting');
117
+ await (0, _daemonSettings.saveDaemonSettings)(settings);
118
+ const connection = await (0, _daemonConnection.checkDaemonConnection)({
119
+ ...daemonOptions,
120
+ timeoutMs: CONNECTION_TIMEOUT_MS
121
+ });
122
+ if (!connection.ok) {
123
+ setStreaming(false);
124
+ setSyncState('failed');
125
+ setMessage(formatConnectionFailure());
126
+ return;
127
+ }
128
+ (0, _streamToDaemon.startStreaming)({
129
+ ...daemonOptions,
130
+ timeoutMs: 3000,
131
+ onStatus: status => {
132
+ if (status.state === 'connected') {
133
+ setSyncState('connected');
134
+ setMessage(null);
135
+ } else if (status.state === 'retrying') {
136
+ setSyncState('retrying');
137
+ setMessage('Desktop not reachable. Retrying...');
138
+ } else if (status.state === 'failed') {
139
+ setStreaming(false);
140
+ setSyncState('failed');
141
+ setMessage(status.reason === 'auth' ? 'Desktop token rejected.' : 'Desktop not reachable after multiple retries.');
142
+ } else {
143
+ setSyncState('connecting');
144
+ }
145
+ }
146
+ });
147
+ setStreaming(true);
148
+ }, [getSettings, streaming, validateSettings]);
149
+ const sendOnce = (0, _react.useCallback)(async () => {
150
+ if (!validateSettings()) {
151
+ return;
152
+ }
153
+ const settings = getSettings();
154
+ const daemonOptions = (0, _daemonSettings.normalizeDaemonSettings)(settings);
155
+ setSending(true);
156
+ setMessage('Checking desktop connection...');
157
+ await (0, _daemonSettings.saveDaemonSettings)(settings);
158
+ try {
159
+ const connection = await (0, _daemonConnection.checkDaemonConnection)({
160
+ ...daemonOptions,
161
+ timeoutMs: CONNECTION_TIMEOUT_MS
162
+ });
163
+ if (!connection.ok) {
164
+ setMessage(formatConnectionFailure());
165
+ return;
166
+ }
167
+ setMessage('Sending logs...');
168
+ const result = await (0, _reportToDaemon.reportDebugSessionToDaemon)({
169
+ ...daemonOptions,
170
+ timeoutMs: 2000
171
+ });
172
+ if (result.ok) {
173
+ const totalLogs = Object.values(result.logCount ?? {}).reduce((total, count) => total + count, 0);
174
+ setMessage(`Sent ${totalLogs} logs.`);
175
+ } else {
176
+ setMessage(result.error ? `Send failed: ${result.error}` : 'Send failed.');
177
+ }
178
+ } finally {
179
+ setSending(false);
180
+ }
181
+ }, [getSettings, validateSettings]);
182
+ const target = mode === 'device' ? (0, _daemonSettings.buildDeviceDaemonEndpoint)(deviceHost) || 'Enter Mac IP' : (0, _reportToDaemon.getDefaultDaemonEndpoint)();
183
+ const canConnect = mode === 'simulator' || Boolean(deviceHost.trim());
184
+ const connecting = !streaming && syncState === 'connecting';
185
+ const busy = detecting || sending || connecting;
186
+ const statusTitle = detecting ? 'Checking' : sending ? 'Checking' : connecting ? 'Checking' : streaming && syncState === 'connected' ? 'Live sync connected' : streaming && syncState === 'retrying' ? 'Retrying desktop sync' : syncState === 'failed' ? 'Failed' : streaming ? 'Live sync running' : mode === 'device' && !deviceHost.trim() ? 'Enter Mac IP' : 'Ready';
187
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Modal, {
188
+ visible: visible,
189
+ transparent: true,
190
+ animationType: "fade",
191
+ onRequestClose: onClose,
192
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.KeyboardAvoidingView, {
193
+ style: styles.keyboardAvoiding,
194
+ behavior: _reactNative.Platform.OS === 'ios' ? 'padding' : undefined,
195
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
196
+ style: styles.backdrop,
197
+ onPress: onClose,
198
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
199
+ style: styles.sheet,
200
+ onPress: e => e.stopPropagation(),
201
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
202
+ style: styles.handle
203
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
204
+ style: styles.header,
205
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
206
+ style: styles.title,
207
+ children: "Desktop Logs"
208
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
209
+ onPress: onClose,
210
+ style: styles.closeButton,
211
+ activeOpacity: 0.7,
212
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
213
+ style: styles.closeButtonText,
214
+ children: "Close"
215
+ })
216
+ })]
217
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
218
+ keyboardShouldPersistTaps: "handled",
219
+ showsVerticalScrollIndicator: false,
220
+ contentContainerStyle: styles.scrollContent,
221
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
222
+ style: styles.statusCard,
223
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
224
+ style: [styles.statusDot, streaming ? styles.dotActive : styles.dotInactive]
225
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
226
+ style: styles.statusCopy,
227
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
228
+ style: styles.statusTitle,
229
+ children: statusTitle
230
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
231
+ style: styles.statusTarget,
232
+ numberOfLines: 1,
233
+ children: target
234
+ })]
235
+ })]
236
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
237
+ style: styles.section,
238
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
239
+ style: styles.label,
240
+ children: "Connection"
241
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
242
+ style: styles.segment,
243
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
244
+ style: [styles.segmentButton, mode === 'simulator' && styles.segmentButtonActive],
245
+ onPress: () => handleModeChange('simulator'),
246
+ disabled: streaming,
247
+ activeOpacity: 0.7,
248
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
249
+ style: [styles.segmentText, mode === 'simulator' && styles.segmentTextActive],
250
+ children: "Simulator"
251
+ })
252
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
253
+ style: [styles.segmentButton, mode === 'device' && styles.segmentButtonActive],
254
+ onPress: () => handleModeChange('device'),
255
+ disabled: streaming,
256
+ activeOpacity: 0.7,
257
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
258
+ style: [styles.segmentText, mode === 'device' && styles.segmentTextActive],
259
+ children: "Real device"
260
+ })
261
+ })]
262
+ })]
263
+ }), mode === 'device' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
264
+ style: styles.section,
265
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
266
+ style: styles.inputRow,
267
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
268
+ style: styles.inputLabel,
269
+ children: "Mac IP"
270
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
271
+ ref: inputRef,
272
+ style: styles.input,
273
+ value: deviceHost,
274
+ onChangeText: handleDeviceHostChange,
275
+ placeholder: "192.168.1.10",
276
+ placeholderTextColor: _colors.Colors.textLight,
277
+ autoCapitalize: "none",
278
+ autoCorrect: false,
279
+ keyboardType: "numbers-and-punctuation",
280
+ returnKeyType: "done",
281
+ onSubmitEditing: () => inputRef.current?.blur(),
282
+ editable: !streaming
283
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
284
+ style: [styles.detectButton, (streaming || busy) && styles.buttonDisabled],
285
+ onPress: detectDeviceHost,
286
+ disabled: streaming || busy,
287
+ activeOpacity: 0.7,
288
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
289
+ style: styles.detectButtonText,
290
+ children: detecting ? '...' : 'Detect'
291
+ })
292
+ })]
293
+ })
294
+ }) : null, message ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
295
+ style: styles.message,
296
+ children: message
297
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
298
+ style: styles.actions,
299
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
300
+ style: [styles.primaryButton, (!canConnect || busy) && styles.buttonDisabled],
301
+ onPress: toggleLiveSync,
302
+ disabled: !canConnect || busy,
303
+ activeOpacity: 0.75,
304
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
305
+ style: styles.primaryButtonText,
306
+ children: streaming ? 'Stop Live Sync' : busy ? 'Checking...' : 'Start Live Sync'
307
+ })
308
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
309
+ style: [styles.secondaryButton, (!canConnect || busy) && styles.buttonDisabled],
310
+ onPress: sendOnce,
311
+ disabled: !canConnect || busy,
312
+ activeOpacity: 0.75,
313
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
314
+ style: styles.secondaryButtonText,
315
+ children: sending ? 'Sending...' : 'Send Once'
316
+ })
317
+ })]
318
+ })]
319
+ })]
320
+ })
321
+ })
322
+ })
323
+ });
324
+ }
325
+ const styles = _reactNative.StyleSheet.create({
326
+ keyboardAvoiding: {
327
+ flex: 1
328
+ },
329
+ backdrop: {
330
+ flex: 1,
331
+ backgroundColor: 'rgba(0,0,0,0.4)',
332
+ justifyContent: 'flex-end'
333
+ },
334
+ sheet: {
335
+ backgroundColor: _colors.Colors.surface,
336
+ borderTopLeftRadius: 20,
337
+ borderTopRightRadius: 20,
338
+ paddingHorizontal: 20,
339
+ paddingTop: 12,
340
+ paddingBottom: 20,
341
+ maxHeight: '82%'
342
+ },
343
+ handle: {
344
+ width: 40,
345
+ height: 4,
346
+ borderRadius: 2,
347
+ backgroundColor: _colors.Colors.textLight,
348
+ alignSelf: 'center',
349
+ marginBottom: 16
350
+ },
351
+ header: {
352
+ flexDirection: 'row',
353
+ alignItems: 'center',
354
+ justifyContent: 'space-between',
355
+ marginBottom: 14
356
+ },
357
+ title: {
358
+ fontSize: 18,
359
+ fontWeight: '600',
360
+ color: _colors.Colors.text
361
+ },
362
+ closeButton: {
363
+ paddingHorizontal: 4,
364
+ paddingVertical: 4
365
+ },
366
+ closeButtonText: {
367
+ fontSize: 14,
368
+ fontWeight: '500',
369
+ color: _colors.Colors.primary
370
+ },
371
+ scrollContent: {
372
+ paddingBottom: 4
373
+ },
374
+ statusCard: {
375
+ flexDirection: 'row',
376
+ alignItems: 'center',
377
+ gap: 10,
378
+ padding: 12,
379
+ borderRadius: 8,
380
+ backgroundColor: _colors.Colors.background,
381
+ borderWidth: 1,
382
+ borderColor: _colors.Colors.border,
383
+ marginBottom: 16
384
+ },
385
+ statusCopy: {
386
+ flex: 1
387
+ },
388
+ statusTitle: {
389
+ fontSize: 14,
390
+ fontWeight: '600',
391
+ color: _colors.Colors.text
392
+ },
393
+ statusTarget: {
394
+ marginTop: 2,
395
+ fontSize: 12,
396
+ color: _colors.Colors.textLight,
397
+ fontFamily: 'Courier'
398
+ },
399
+ section: {
400
+ marginBottom: 14
401
+ },
402
+ label: {
403
+ fontSize: 13,
404
+ fontWeight: '500',
405
+ color: _colors.Colors.textSecondary,
406
+ marginBottom: 6
407
+ },
408
+ segment: {
409
+ flexDirection: 'row',
410
+ padding: 3,
411
+ borderRadius: 10,
412
+ backgroundColor: _colors.Colors.background,
413
+ borderWidth: 1,
414
+ borderColor: _colors.Colors.border
415
+ },
416
+ segmentButton: {
417
+ flex: 1,
418
+ alignItems: 'center',
419
+ paddingVertical: 9,
420
+ borderRadius: 7
421
+ },
422
+ segmentButtonActive: {
423
+ backgroundColor: _colors.Colors.surface,
424
+ borderWidth: 1,
425
+ borderColor: _colors.Colors.primary
426
+ },
427
+ segmentText: {
428
+ fontSize: 13,
429
+ fontWeight: '500',
430
+ color: _colors.Colors.textSecondary
431
+ },
432
+ segmentTextActive: {
433
+ color: _colors.Colors.primary,
434
+ fontWeight: '600'
435
+ },
436
+ inputRow: {
437
+ flexDirection: 'row',
438
+ alignItems: 'center',
439
+ gap: 8
440
+ },
441
+ inputLabel: {
442
+ width: 50,
443
+ fontSize: 13,
444
+ fontWeight: '600',
445
+ color: _colors.Colors.textSecondary
446
+ },
447
+ input: {
448
+ flex: 1,
449
+ backgroundColor: _colors.Colors.background,
450
+ borderWidth: 1,
451
+ borderColor: _colors.Colors.border,
452
+ borderRadius: 8,
453
+ paddingHorizontal: 12,
454
+ paddingVertical: 10,
455
+ fontSize: 14,
456
+ color: _colors.Colors.text,
457
+ fontFamily: 'Courier'
458
+ },
459
+ detectButton: {
460
+ minWidth: 68,
461
+ alignItems: 'center',
462
+ justifyContent: 'center',
463
+ paddingHorizontal: 10,
464
+ paddingVertical: 10,
465
+ borderRadius: 8,
466
+ backgroundColor: _colors.Colors.surface,
467
+ borderWidth: 1,
468
+ borderColor: _colors.Colors.primary
469
+ },
470
+ detectButtonText: {
471
+ color: _colors.Colors.primary,
472
+ fontSize: 13,
473
+ fontWeight: '600'
474
+ },
475
+ statusDot: {
476
+ width: 8,
477
+ height: 8,
478
+ borderRadius: 4
479
+ },
480
+ dotActive: {
481
+ backgroundColor: _colors.Colors.success
482
+ },
483
+ dotInactive: {
484
+ backgroundColor: _colors.Colors.textLight
485
+ },
486
+ message: {
487
+ fontSize: 12,
488
+ lineHeight: 17,
489
+ color: _colors.Colors.textSecondary,
490
+ marginBottom: 12
491
+ },
492
+ actions: {
493
+ flexDirection: 'row',
494
+ gap: 10,
495
+ marginTop: 4
496
+ },
497
+ primaryButton: {
498
+ flex: 1,
499
+ alignItems: 'center',
500
+ justifyContent: 'center',
501
+ paddingVertical: 11,
502
+ borderRadius: 10,
503
+ backgroundColor: _colors.Colors.primary
504
+ },
505
+ primaryButtonText: {
506
+ color: '#fff',
507
+ fontSize: 14,
508
+ fontWeight: '600'
509
+ },
510
+ secondaryButton: {
511
+ flex: 1,
512
+ alignItems: 'center',
513
+ justifyContent: 'center',
514
+ paddingVertical: 11,
515
+ borderRadius: 10,
516
+ backgroundColor: _colors.Colors.background,
517
+ borderWidth: 1,
518
+ borderColor: _colors.Colors.border
519
+ },
520
+ secondaryButtonText: {
521
+ color: _colors.Colors.primary,
522
+ fontSize: 14,
523
+ fontWeight: '600'
524
+ },
525
+ buttonDisabled: {
526
+ opacity: 0.5
527
+ }
528
+ });
529
+ //# sourceMappingURL=StreamingSettingsModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colors","_daemonSettings","_daemonConnection","_reportToDaemon","_autoDetectDaemon","_streamToDaemon","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CONNECTION_TIMEOUT_MS","formatConnectionFailure","StreamingSettingsModal","visible","onClose","inputRef","useRef","mode","setMode","useState","deviceHost","setDeviceHost","streaming","setStreaming","isStreaming","syncState","setSyncState","message","setMessage","sending","setSending","detecting","setDetecting","handleDeviceHostChange","useCallback","value","detectDeviceHost","result","autoDetectDaemonIp","timeoutMs","scanSubnets","ip","current","trim","buildDeviceDaemonEndpoint","useEffect","loadDaemonSettings","then","settings","savedHost","metroHost","getMetroHost","active","getSettings","endpoint","token","validateSettings","handleModeChange","nextMode","toggleLiveSync","stopStreaming","daemonOptions","normalizeDaemonSettings","saveDaemonSettings","connection","checkDaemonConnection","ok","startStreaming","onStatus","status","state","reason","sendOnce","reportDebugSessionToDaemon","totalLogs","values","logCount","reduce","total","count","error","target","getDefaultDaemonEndpoint","canConnect","Boolean","connecting","busy","statusTitle","jsx","Modal","transparent","animationType","onRequestClose","children","KeyboardAvoidingView","style","styles","keyboardAvoiding","behavior","Platform","OS","undefined","Pressable","backdrop","onPress","jsxs","sheet","stopPropagation","View","handle","header","Text","title","TouchableOpacity","closeButton","activeOpacity","closeButtonText","ScrollView","keyboardShouldPersistTaps","showsVerticalScrollIndicator","contentContainerStyle","scrollContent","statusCard","statusDot","dotActive","dotInactive","statusCopy","statusTarget","numberOfLines","section","label","segment","segmentButton","segmentButtonActive","disabled","segmentText","segmentTextActive","inputRow","inputLabel","TextInput","ref","input","onChangeText","placeholder","placeholderTextColor","Colors","textLight","autoCapitalize","autoCorrect","keyboardType","returnKeyType","onSubmitEditing","blur","editable","detectButton","buttonDisabled","detectButtonText","actions","primaryButton","primaryButtonText","secondaryButton","secondaryButtonText","StyleSheet","create","flex","backgroundColor","justifyContent","surface","borderTopLeftRadius","borderTopRightRadius","paddingHorizontal","paddingTop","paddingBottom","maxHeight","width","height","borderRadius","alignSelf","marginBottom","flexDirection","alignItems","fontSize","fontWeight","color","text","paddingVertical","primary","gap","padding","background","borderWidth","borderColor","border","marginTop","fontFamily","textSecondary","minWidth","success","lineHeight","opacity"],"sourceRoot":"../../../../src","sources":["ui/panel/StreamingSettingsModal.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useTabAnimation = useTabAnimation;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ function useTabAnimation({
10
+ activeTab,
11
+ tabCount,
12
+ onTabChange
13
+ }) {
14
+ const contentOpacity = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
15
+ const contentTranslateX = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
16
+ const isSwitchingTab = (0, _react.useRef)(false);
17
+ const activeTabRef = (0, _react.useRef)(activeTab);
18
+ activeTabRef.current = activeTab;
19
+ const tabCountRef = (0, _react.useRef)(tabCount);
20
+ tabCountRef.current = tabCount;
21
+ const switchTabRef = (0, _react.useRef)(() => {});
22
+ const swipeResponder = (0, _react.useRef)(_reactNative.PanResponder.create({
23
+ onStartShouldSetPanResponder: () => false,
24
+ onMoveShouldSetPanResponder: (_, gs) => {
25
+ if (isSwitchingTab.current) return false;
26
+ return Math.abs(gs.dx) > 25 && Math.abs(gs.dx) > Math.abs(gs.dy) * 2.5;
27
+ },
28
+ onPanResponderRelease: (_, gs) => {
29
+ const tab = activeTabRef.current;
30
+ if (gs.dx < -40 && tab < tabCountRef.current - 1) switchTabRef.current(tab + 1);else if (gs.dx > 40 && tab > 0) switchTabRef.current(tab - 1);
31
+ },
32
+ onPanResponderTerminationRequest: () => true
33
+ })).current;
34
+ const switchTab = (0, _react.useCallback)(index => {
35
+ if (isSwitchingTab.current || index === activeTabRef.current) return;
36
+ isSwitchingTab.current = true;
37
+ const direction = index > activeTabRef.current ? 1 : -1;
38
+ _reactNative.Animated.parallel([_reactNative.Animated.timing(contentOpacity, {
39
+ toValue: 0,
40
+ duration: 80,
41
+ useNativeDriver: true
42
+ }), _reactNative.Animated.timing(contentTranslateX, {
43
+ toValue: -direction * 40,
44
+ duration: 80,
45
+ useNativeDriver: true
46
+ })]).start(() => {
47
+ onTabChange(index);
48
+ contentTranslateX.setValue(direction * 40);
49
+ _reactNative.Animated.parallel([_reactNative.Animated.timing(contentOpacity, {
50
+ toValue: 1,
51
+ duration: 150,
52
+ useNativeDriver: true
53
+ }), _reactNative.Animated.timing(contentTranslateX, {
54
+ toValue: 0,
55
+ duration: 200,
56
+ easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
57
+ useNativeDriver: true
58
+ })]).start(() => {
59
+ isSwitchingTab.current = false;
60
+ });
61
+ });
62
+ }, [contentOpacity, contentTranslateX, onTabChange]);
63
+ switchTabRef.current = switchTab;
64
+ return {
65
+ contentOpacity,
66
+ contentTranslateX,
67
+ panHandlers: swipeResponder.panHandlers,
68
+ switchTab
69
+ };
70
+ }
71
+ //# sourceMappingURL=useTabAnimation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","useTabAnimation","activeTab","tabCount","onTabChange","contentOpacity","useRef","Animated","Value","current","contentTranslateX","isSwitchingTab","activeTabRef","tabCountRef","switchTabRef","swipeResponder","PanResponder","create","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","_","gs","Math","abs","dx","dy","onPanResponderRelease","tab","onPanResponderTerminationRequest","switchTab","useCallback","index","direction","parallel","timing","toValue","duration","useNativeDriver","start","setValue","easing","Easing","out","cubic","panHandlers"],"sourceRoot":"../../../../src","sources":["ui/panel/useTabAnimation.ts"],"mappings":"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","ignoreList":[]}