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