react-native-debug-toolkit 3.2.1 → 3.2.3

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 (66) hide show
  1. package/README.md +13 -2
  2. package/README.zh-CN.md +13 -2
  3. package/android/build.gradle +34 -0
  4. package/android/src/main/AndroidManifest.xml +1 -0
  5. package/android/src/main/java/com/reactnativedebugtoolkit/DebugToolkitDevConnectModule.java +154 -0
  6. package/android/src/main/java/com/reactnativedebugtoolkit/ReactNativeDebugToolkitPackage.java +25 -0
  7. package/ios/DebugToolkitDevConnect.mm +81 -0
  8. package/lib/commonjs/features/devConnect/DevConnectQrScanner.js +115 -70
  9. package/lib/commonjs/features/devConnect/DevConnectQrScanner.js.map +1 -1
  10. package/lib/commonjs/features/devConnect/DevConnectTab.js +232 -161
  11. package/lib/commonjs/features/devConnect/DevConnectTab.js.map +1 -1
  12. package/lib/commonjs/features/devConnect/devConnectPreferences.js +35 -5
  13. package/lib/commonjs/features/devConnect/devConnectPreferences.js.map +1 -1
  14. package/lib/commonjs/features/devConnect/devConnectUtils.js +99 -15
  15. package/lib/commonjs/features/devConnect/devConnectUtils.js.map +1 -1
  16. package/lib/commonjs/features/devConnect/index.js +39 -2
  17. package/lib/commonjs/features/devConnect/index.js.map +1 -1
  18. package/lib/commonjs/features/devConnect/nativeDevConnect.js +108 -0
  19. package/lib/commonjs/features/devConnect/nativeDevConnect.js.map +1 -0
  20. package/lib/commonjs/features/devConnect/platformDetect.js +7 -11
  21. package/lib/commonjs/features/devConnect/platformDetect.js.map +1 -1
  22. package/lib/commonjs/utils/debugPreferences.js +43 -6
  23. package/lib/commonjs/utils/debugPreferences.js.map +1 -1
  24. package/lib/module/features/devConnect/DevConnectQrScanner.js +116 -71
  25. package/lib/module/features/devConnect/DevConnectQrScanner.js.map +1 -1
  26. package/lib/module/features/devConnect/DevConnectTab.js +235 -164
  27. package/lib/module/features/devConnect/DevConnectTab.js.map +1 -1
  28. package/lib/module/features/devConnect/devConnectPreferences.js +33 -6
  29. package/lib/module/features/devConnect/devConnectPreferences.js.map +1 -1
  30. package/lib/module/features/devConnect/devConnectUtils.js +94 -15
  31. package/lib/module/features/devConnect/devConnectUtils.js.map +1 -1
  32. package/lib/module/features/devConnect/index.js +11 -3
  33. package/lib/module/features/devConnect/index.js.map +1 -1
  34. package/lib/module/features/devConnect/nativeDevConnect.js +102 -0
  35. package/lib/module/features/devConnect/nativeDevConnect.js.map +1 -0
  36. package/lib/module/features/devConnect/platformDetect.js +8 -12
  37. package/lib/module/features/devConnect/platformDetect.js.map +1 -1
  38. package/lib/module/utils/debugPreferences.js +43 -6
  39. package/lib/module/utils/debugPreferences.js.map +1 -1
  40. package/lib/typescript/src/features/devConnect/DevConnectQrScanner.d.ts +3 -2
  41. package/lib/typescript/src/features/devConnect/DevConnectQrScanner.d.ts.map +1 -1
  42. package/lib/typescript/src/features/devConnect/DevConnectTab.d.ts.map +1 -1
  43. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts +6 -0
  44. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts.map +1 -1
  45. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts +18 -1
  46. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts.map +1 -1
  47. package/lib/typescript/src/features/devConnect/index.d.ts +2 -2
  48. package/lib/typescript/src/features/devConnect/index.d.ts.map +1 -1
  49. package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts +17 -0
  50. package/lib/typescript/src/features/devConnect/nativeDevConnect.d.ts.map +1 -0
  51. package/lib/typescript/src/features/devConnect/platformDetect.d.ts.map +1 -1
  52. package/lib/typescript/src/features/devConnect/types.d.ts +3 -0
  53. package/lib/typescript/src/features/devConnect/types.d.ts.map +1 -1
  54. package/lib/typescript/src/utils/debugPreferences.d.ts +2 -0
  55. package/lib/typescript/src/utils/debugPreferences.d.ts.map +1 -1
  56. package/package.json +4 -1
  57. package/react-native-debug-toolkit.podspec +18 -0
  58. package/src/features/devConnect/DevConnectQrScanner.tsx +101 -60
  59. package/src/features/devConnect/DevConnectTab.tsx +227 -105
  60. package/src/features/devConnect/devConnectPreferences.ts +50 -5
  61. package/src/features/devConnect/devConnectUtils.ts +122 -15
  62. package/src/features/devConnect/index.ts +13 -0
  63. package/src/features/devConnect/nativeDevConnect.ts +126 -0
  64. package/src/features/devConnect/platformDetect.ts +8 -13
  65. package/src/features/devConnect/types.ts +3 -0
  66. package/src/utils/debugPreferences.ts +49 -4
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colors","_cameraKit","_devConnectUtils","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CameraErrorBoundary","Component","state","hasError","getDerivedStateFromError","componentDidCatch","error","console","warn","message","props","onCameraError","render","children","DevConnectQrScanner","visible","onClose","onScanHost","scannedRef","useRef","setError","useState","cameraFailed","setCameraFailed","scanner","getScannerModule","useEffect","current","handleScanned","useCallback","rawValue","parsed","parseMetroQrPayload","computerHost","handleCameraKitRead","event","nativeEvent","codeStringValue","handleExpoScanned","result","value","handleCameraError","_msg","jsx","Modal","animationType","onRequestClose","jsxs","View","style","styles","container","kind","CameraKit","Camera","camera","cameraType","CameraType","Back","scanBarcode","onReadCode","showFrame","laserColor","Colors","primary","frameColor","allowedBarcodeTypes","ExpoCamera","onBarCodeScanned","barCodeScannerSettings","barCodeTypes","cameraFallback","Text","cameraFallbackText","cameraFallbackHint","footer","hint","TouchableOpacity","closeButton","onPress","activeOpacity","closeButtonText","Pressable","topClose","topCloseText","StyleSheet","create","flex","backgroundColor","justifyContent","alignItems","padding","fontSize","color","fontWeight","marginBottom","textAlign","surface","textSecondary","paddingVertical","borderRadius","position","top","right","paddingHorizontal"],"sourceRoot":"../../../../src","sources":["features/devConnect/DevConnectQrScanner.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_colors","_cameraKit","_devConnectUtils","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","CameraErrorBoundary","Component","state","hasError","getDerivedStateFromError","componentDidCatch","error","console","warn","message","props","onCameraError","render","children","DevConnectQrScanner","visible","onClose","onScanTarget","scannedRef","useRef","setError","useState","cameraFailed","setCameraFailed","scanner","getScannerModule","useEffect","current","handleScanned","useCallback","rawValue","parsed","parseMetroQrPayload","computerHost","metroPort","handleCameraKitRead","event","nativeEvent","codeStringValue","handleExpoScanned","result","value","handleCameraError","_msg","jsx","Modal","animationType","presentationStyle","onRequestClose","jsxs","View","style","styles","container","previewLayer","kind","CameraKit","Camera","camera","cameraType","CameraType","Back","scanBarcode","onReadCode","showFrame","laserColor","Colors","primary","frameColor","allowedBarcodeTypes","ExpoCamera","onBarCodeScanned","barCodeScannerSettings","barCodeTypes","cameraFallback","Text","cameraFallbackText","cameraFallbackHint","topBar","titleGroup","title","subtitle","TouchableOpacity","closeButton","onPress","activeOpacity","closeButtonText","statusPill","statusPillError","statusText","statusTextError","StyleSheet","create","flex","backgroundColor","absoluteFillObject","justifyContent","alignItems","padding","fontSize","color","fontWeight","marginBottom","textAlign","position","top","left","right","flexDirection","paddingLeft","paddingRight","paddingVertical","borderRadius","marginTop","paddingHorizontal","bottom","borderWidth","borderColor","lineHeight"],"sourceRoot":"../../../../src","sources":["features/devConnect/DevConnectQrScanner.tsx"],"mappings":"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","ignoreList":[]}
@@ -7,47 +7,86 @@ exports.DevConnectTab = DevConnectTab;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
9
  var _colors = require("../../ui/theme/colors");
10
- var _copyToComputer = require("../../utils/copyToComputer");
11
10
  var _DaemonClient = require("../../utils/DaemonClient");
12
11
  var _devConnectUtils = require("./devConnectUtils");
13
12
  var _devConnectPreferences = require("./devConnectPreferences");
13
+ var _nativeDevConnect = require("./nativeDevConnect");
14
14
  var _DevConnectQrScanner = require("./DevConnectQrScanner");
15
15
  var _jsxRuntime = require("react/jsx-runtime");
16
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
17
  const CONNECTION_TIMEOUT_MS = 2000;
18
- const METRO_PORT = '8081';
18
+ function getSimulatorMetroHost() {
19
+ return _reactNative.Platform.OS === 'android' ? '10.0.2.2' : 'localhost';
20
+ }
21
+ function describeMetroFailure(result) {
22
+ if (result.reason === 'native_unavailable') {
23
+ return 'Native DevConnect not installed. Rebuild app after installing native module.';
24
+ }
25
+ if (result.reason === 'metro_unreachable') {
26
+ return result.error ? `Metro not reachable: ${result.error}` : 'Metro not reachable. Start Metro on that port.';
27
+ }
28
+ if (result.reason === 'fetch_unavailable') {
29
+ return 'Cannot check Metro because fetch is unavailable.';
30
+ }
31
+ if (result.reason === 'invalid_target') {
32
+ return 'Enter a valid computer IP and Metro port.';
33
+ }
34
+ return result.error ? `Metro switch failed: ${result.error}` : 'Metro switch failed.';
35
+ }
19
36
  function DevConnectTab({
20
37
  snapshot
21
38
  }) {
22
39
  const inputRef = (0, _react.useRef)(null);
23
40
  const [computerHost, setComputerHost] = (0, _react.useState)(snapshot.computerHost);
41
+ const [metroPort, setMetroPort] = (0, _react.useState)(snapshot.metroPort);
42
+ const [daemonPort, setDaemonPort] = (0, _react.useState)(snapshot.daemonPort);
24
43
  const [streaming, setStreaming] = (0, _react.useState)(snapshot.streaming);
25
44
  const [syncState, setSyncState] = (0, _react.useState)(snapshot.streaming ? 'running' : 'idle');
26
45
  const [message, setMessage] = (0, _react.useState)(null);
27
46
  const [sending, setSending] = (0, _react.useState)(false);
47
+ const [metroBusy, setMetroBusy] = (0, _react.useState)(false);
28
48
  const [qrVisible, setQrVisible] = (0, _react.useState)(false);
29
49
  const isSim = snapshot.isSimulator;
30
50
  (0, _react.useEffect)(() => {
31
51
  setComputerHost(snapshot.computerHost);
52
+ setMetroPort(snapshot.metroPort);
53
+ setDaemonPort(snapshot.daemonPort);
32
54
  setStreaming(snapshot.streaming);
33
55
  setSyncState(snapshot.streaming ? 'running' : 'idle');
34
- }, [snapshot.computerHost, snapshot.streaming]);
35
- const metroUrls = (0, _react.useMemo)(() => isSim ? {
36
- expUrl: `exp://localhost:${METRO_PORT}`,
37
- httpUrl: `http://localhost:${METRO_PORT}`
38
- } : (0, _devConnectUtils.buildMetroUrls)(computerHost), [isSim, computerHost]);
56
+ }, [snapshot.computerHost, snapshot.daemonPort, snapshot.metroPort, snapshot.streaming]);
57
+ const metroHost = isSim ? getSimulatorMetroHost() : computerHost;
58
+ const metroTarget = (0, _react.useMemo)(() => (0, _devConnectUtils.buildMetroTarget)(metroHost, metroPort), [metroHost, metroPort]);
59
+ const metroUrls = (0, _react.useMemo)(() => (0, _devConnectUtils.buildMetroUrls)(metroHost, metroPort), [metroHost, metroPort]);
39
60
  const handleHostChange = (0, _react.useCallback)(value => {
40
61
  setComputerHost(value);
41
- const normalized = (0, _devConnectUtils.normalizeComputerHost)(value);
42
- if (normalized) {
43
- (0, _devConnectPreferences.saveComputerHost)(normalized).catch(() => {});
62
+ const target = (0, _devConnectUtils.parseComputerTarget)(value);
63
+ if (target) {
64
+ setMetroPort(target.metroPort);
65
+ (0, _devConnectPreferences.saveComputerTarget)(value).catch(() => {});
44
66
  }
45
67
  setSyncState(prev => prev === 'failed' ? 'idle' : prev);
46
68
  setMessage(null);
47
69
  }, []);
48
- const handleQrHost = (0, _react.useCallback)(host => {
49
- setComputerHost(host);
50
- (0, _devConnectPreferences.saveComputerHost)(host).catch(() => {});
70
+ const handleMetroPortChange = (0, _react.useCallback)(value => {
71
+ setMetroPort(value);
72
+ const normalized = (0, _devConnectUtils.normalizePort)(value);
73
+ if (normalized) {
74
+ (0, _devConnectPreferences.saveMetroPort)(normalized).catch(() => {});
75
+ }
76
+ setMessage(null);
77
+ }, []);
78
+ const handleDaemonPortChange = (0, _react.useCallback)(value => {
79
+ setDaemonPort(value);
80
+ const normalized = (0, _devConnectUtils.normalizePort)(value);
81
+ if (normalized) {
82
+ (0, _devConnectPreferences.saveDaemonPort)(normalized).catch(() => {});
83
+ }
84
+ setMessage(null);
85
+ }, []);
86
+ const handleQrTarget = (0, _react.useCallback)(target => {
87
+ setComputerHost(target.computerHost);
88
+ setMetroPort(target.metroPort);
89
+ (0, _devConnectPreferences.saveComputerTarget)(`${target.computerHost}:${target.metroPort}`).catch(() => {});
51
90
  setMessage('Computer IP updated from QR code.');
52
91
  }, []);
53
92
  const validateSettings = (0, _react.useCallback)(() => {
@@ -55,24 +94,30 @@ function DevConnectTab({
55
94
  setMessage('Enter your computer IP first.');
56
95
  return false;
57
96
  }
97
+ if (!(0, _devConnectUtils.normalizePort)(daemonPort)) {
98
+ setMessage('Enter a valid desktop logs port.');
99
+ return false;
100
+ }
58
101
  return true;
59
- }, [computerHost, isSim]);
102
+ }, [computerHost, daemonPort, isSim]);
60
103
  const configureDaemon = (0, _react.useCallback)(() => {
61
104
  const normalizedHost = isSim ? '' : (0, _devConnectUtils.normalizeComputerHost)(computerHost) ?? '';
105
+ const normalizedDaemonPort = (0, _devConnectUtils.normalizePort)(daemonPort) ?? _devConnectUtils.DEFAULT_DAEMON_PORT;
106
+ const deviceHost = isSim ? '' : (0, _devConnectUtils.buildDaemonDeviceHost)(normalizedHost, normalizedDaemonPort);
62
107
  const settings = {
63
108
  mode: isSim ? 'simulator' : 'device',
64
109
  endpoint: '',
65
- deviceHost: normalizedHost,
110
+ deviceHost,
66
111
  token: ''
67
112
  };
68
113
  _DaemonClient.daemonClient.configure(settings);
69
114
  const normalized = (0, _DaemonClient.normalizeDaemonSettings)(settings);
70
- const endpoint = normalized.endpoint || (isSim ? (0, _DaemonClient.getDefaultDaemonEndpoint)() : (0, _DaemonClient.buildDeviceDaemonEndpoint)(normalizedHost));
115
+ const endpoint = normalized.endpoint || (isSim ? (0, _DaemonClient.getDefaultDaemonEndpoint)() : (0, _DaemonClient.buildDeviceDaemonEndpoint)(deviceHost));
71
116
  return {
72
117
  ...normalized,
73
118
  endpoint
74
119
  };
75
- }, [computerHost, isSim]);
120
+ }, [computerHost, daemonPort, isSim]);
76
121
  const toggleLiveSync = (0, _react.useCallback)(async () => {
77
122
  if (streaming) {
78
123
  _DaemonClient.daemonClient.disconnect();
@@ -82,7 +127,9 @@ function DevConnectTab({
82
127
  setMessage(null);
83
128
  return;
84
129
  }
85
- if (!validateSettings()) return;
130
+ if (!validateSettings()) {
131
+ return;
132
+ }
86
133
  const daemonOptions = configureDaemon();
87
134
  setMessage('Checking desktop connection...');
88
135
  setSyncState('checking');
@@ -120,7 +167,9 @@ function DevConnectTab({
120
167
  setStreaming(true);
121
168
  }, [configureDaemon, streaming, validateSettings]);
122
169
  const sendOnce = (0, _react.useCallback)(async () => {
123
- if (!validateSettings()) return;
170
+ if (!validateSettings()) {
171
+ return;
172
+ }
124
173
  const daemonOptions = configureDaemon();
125
174
  setSending(true);
126
175
  setMessage('Checking desktop connection...');
@@ -148,17 +197,51 @@ function DevConnectTab({
148
197
  setSending(false);
149
198
  }
150
199
  }, [configureDaemon, validateSettings]);
151
- const messageTimerRef = (0, _react.useRef)();
152
- const copyUrl = (0, _react.useCallback)((label, url) => {
153
- (0, _copyToComputer.copyToComputer)(url, {
154
- label
155
- });
156
- setMessage('Copied to computer output.');
157
- clearTimeout(messageTimerRef.current);
158
- messageTimerRef.current = setTimeout(() => setMessage(null), 1500);
159
- }, []);
160
- (0, _react.useEffect)(() => () => clearTimeout(messageTimerRef.current), []);
161
- const canConnect = isSim || Boolean((0, _devConnectUtils.normalizeComputerHost)(computerHost));
200
+ const applyRemoteBundle = (0, _react.useCallback)(async () => {
201
+ if (!metroTarget) {
202
+ setMessage('Enter a valid computer IP and Metro port.');
203
+ return;
204
+ }
205
+ if (!snapshot.nativeMetroAvailable) {
206
+ setMessage(describeMetroFailure({
207
+ reason: 'native_unavailable'
208
+ }));
209
+ return;
210
+ }
211
+ setMetroBusy(true);
212
+ setMessage('Checking Metro...');
213
+ try {
214
+ const result = await (0, _nativeDevConnect.applyMetroBundle)(metroTarget.host, metroTarget.port);
215
+ if (result.ok) {
216
+ setMessage(`Using Metro at ${result.hostPort}. Reloading...`);
217
+ } else {
218
+ setMessage(describeMetroFailure(result));
219
+ }
220
+ } finally {
221
+ setMetroBusy(false);
222
+ }
223
+ }, [metroTarget, snapshot.nativeMetroAvailable]);
224
+ const resetRemoteBundle = (0, _react.useCallback)(async () => {
225
+ if (!snapshot.nativeMetroAvailable) {
226
+ setMessage(describeMetroFailure({
227
+ reason: 'native_unavailable'
228
+ }));
229
+ return;
230
+ }
231
+ setMetroBusy(true);
232
+ try {
233
+ const result = await (0, _nativeDevConnect.resetMetroBundle)();
234
+ if (result.ok) {
235
+ setMessage('Metro host reset. Reloading...');
236
+ } else {
237
+ setMessage(describeMetroFailure(result));
238
+ }
239
+ } finally {
240
+ setMetroBusy(false);
241
+ }
242
+ }, [snapshot.nativeMetroAvailable]);
243
+ const canConnect = isSim || Boolean((0, _devConnectUtils.normalizeComputerHost)(computerHost)) && Boolean((0, _devConnectUtils.normalizePort)(daemonPort));
244
+ const canUseMetro = Boolean(metroTarget) && snapshot.nativeMetroAvailable && !metroBusy;
162
245
  const busy = sending || syncState === 'checking';
163
246
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.KeyboardAvoidingView, {
164
247
  style: styles.container,
@@ -169,9 +252,9 @@ function DevConnectTab({
169
252
  contentContainerStyle: styles.scrollContent,
170
253
  children: [isSim ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
171
254
  style: styles.badge,
172
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
255
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
173
256
  style: styles.badgeText,
174
- children: "Simulator \u2014 using localhost"
257
+ children: ["Simulator/emulator - using ", getSimulatorMetroHost()]
175
258
  })
176
259
  }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
177
260
  style: styles.section,
@@ -204,6 +287,47 @@ function DevConnectTab({
204
287
  })
205
288
  }) : null]
206
289
  })]
290
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
291
+ style: styles.section,
292
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
293
+ style: styles.label,
294
+ children: "Ports"
295
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
296
+ style: styles.portRow,
297
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
298
+ style: styles.portField,
299
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
300
+ style: styles.portLabel,
301
+ children: "Metro"
302
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
303
+ style: styles.portInput,
304
+ value: metroPort,
305
+ onChangeText: handleMetroPortChange,
306
+ placeholder: _devConnectUtils.DEFAULT_METRO_PORT,
307
+ placeholderTextColor: _colors.Colors.textLight,
308
+ autoCapitalize: "none",
309
+ autoCorrect: false,
310
+ keyboardType: "number-pad",
311
+ returnKeyType: "done"
312
+ })]
313
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
314
+ style: styles.portField,
315
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
316
+ style: styles.portLabel,
317
+ children: "Logs"
318
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
319
+ style: styles.portInput,
320
+ value: daemonPort,
321
+ onChangeText: handleDaemonPortChange,
322
+ placeholder: _devConnectUtils.DEFAULT_DAEMON_PORT,
323
+ placeholderTextColor: _colors.Colors.textLight,
324
+ autoCapitalize: "none",
325
+ autoCorrect: false,
326
+ keyboardType: "number-pad",
327
+ returnKeyType: "done"
328
+ })]
329
+ })]
330
+ })]
207
331
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
208
332
  style: styles.actions,
209
333
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
@@ -235,99 +359,66 @@ function DevConnectTab({
235
359
  children: "Remote JS Bundle"
236
360
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
237
361
  style: styles.sectionDesc,
238
- children: "Load JavaScript from your computer instead of the bundled file. Requires app restart."
362
+ children: "Apply this Metro host to React Native dev settings and reload the app."
239
363
  }), !metroUrls ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
240
364
  style: styles.stepCard,
241
365
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
242
366
  style: styles.stepHint,
243
- children: "Enter your computer IP above to get started."
367
+ children: "Enter your computer IP and Metro port to get started."
244
368
  })
245
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
369
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
370
+ style: styles.stepCard,
246
371
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
247
- style: styles.stepCard,
248
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
249
- style: styles.stepHeader,
250
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
251
- style: styles.stepNumber,
252
- children: "1"
253
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
254
- style: styles.stepTitle,
255
- children: "Copy bundle URL"
256
- })]
372
+ style: styles.urlRow,
373
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
374
+ style: styles.urlLabel,
375
+ children: "HTTP"
257
376
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
258
- style: styles.stepDesc,
259
- children: "Use this URL as your remote JS bundle location:"
260
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
261
- style: styles.urlRow,
262
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
263
- style: styles.urlText,
264
- numberOfLines: 1,
265
- children: metroUrls.httpUrl
266
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
267
- style: styles.copyButton,
268
- onPress: () => copyUrl('Metro URL', metroUrls.httpUrl),
269
- activeOpacity: 0.7,
270
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
271
- style: styles.copyButtonText,
272
- children: "Copy"
273
- })
274
- })]
275
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
276
- style: styles.urlRow,
277
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
278
- style: styles.urlLabel,
279
- children: "Expo"
280
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
281
- style: styles.urlText,
282
- numberOfLines: 1,
283
- children: metroUrls.expUrl
284
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
285
- style: styles.copyButton,
286
- onPress: () => copyUrl('Expo URL', metroUrls.expUrl),
287
- activeOpacity: 0.7,
288
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
289
- style: styles.copyButtonText,
290
- children: "Copy"
291
- })
292
- })]
377
+ style: styles.urlText,
378
+ numberOfLines: 1,
379
+ children: metroUrls.httpUrl
293
380
  })]
294
381
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
295
- style: styles.stepCard,
296
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
297
- style: styles.stepHeader,
298
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
299
- style: styles.stepNumber,
300
- children: "2"
301
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
302
- style: styles.stepTitle,
303
- children: "Configure remote debugging"
304
- })]
382
+ style: styles.urlRow,
383
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
384
+ style: styles.urlLabel,
385
+ children: "Expo"
305
386
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
306
- style: styles.stepDesc,
307
- children: isSim ? 'Simulator uses localhost automatically. Enable remote debugging in Dev Menu.' : 'In Dev Menu, set the bundle URL to the copied address.'
308
- })]
309
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
310
- style: styles.stepCard,
311
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
312
- style: styles.stepHeader,
313
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
314
- style: styles.stepNumber,
315
- children: "3"
316
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
317
- style: styles.stepTitle,
318
- children: "Restart the app"
319
- })]
320
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
321
- style: styles.stepDesc,
322
- children: "Close and reopen the app to load from Metro. Make sure Metro is running on your computer."
387
+ style: styles.urlText,
388
+ numberOfLines: 1,
389
+ children: metroUrls.expUrl
323
390
  })]
324
391
  })]
325
- })]
392
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
393
+ style: styles.actions,
394
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
395
+ style: [styles.primaryButton, !canUseMetro && styles.buttonDisabled],
396
+ onPress: applyRemoteBundle,
397
+ disabled: !canUseMetro,
398
+ activeOpacity: 0.75,
399
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
400
+ style: styles.primaryButtonText,
401
+ children: metroBusy ? 'Checking...' : 'Use Metro Bundle'
402
+ })
403
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
404
+ style: [styles.secondaryButton, (!snapshot.nativeMetroAvailable || metroBusy) && styles.buttonDisabled],
405
+ onPress: resetRemoteBundle,
406
+ disabled: !snapshot.nativeMetroAvailable || metroBusy,
407
+ activeOpacity: 0.75,
408
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
409
+ style: styles.secondaryButtonText,
410
+ children: "Reset"
411
+ })
412
+ })]
413
+ }), !snapshot.nativeMetroAvailable ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
414
+ style: styles.hint,
415
+ children: "Native DevConnect requires pod install / Gradle sync and app rebuild."
416
+ }) : null]
326
417
  })]
327
418
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_DevConnectQrScanner.DevConnectQrScanner, {
328
419
  visible: qrVisible,
329
420
  onClose: () => setQrVisible(false),
330
- onScanHost: handleQrHost
421
+ onScanTarget: handleQrTarget
331
422
  })]
332
423
  });
333
424
  }
@@ -408,6 +499,29 @@ const styles = _reactNative.StyleSheet.create({
408
499
  fontSize: 13,
409
500
  fontWeight: '600'
410
501
  },
502
+ portRow: {
503
+ flexDirection: 'row',
504
+ gap: 10
505
+ },
506
+ portField: {
507
+ flex: 1
508
+ },
509
+ portLabel: {
510
+ fontSize: 11,
511
+ color: _colors.Colors.textSecondary,
512
+ marginBottom: 4
513
+ },
514
+ portInput: {
515
+ backgroundColor: _colors.Colors.surface,
516
+ borderWidth: 1,
517
+ borderColor: _colors.Colors.border,
518
+ borderRadius: 8,
519
+ paddingHorizontal: 12,
520
+ paddingVertical: 9,
521
+ fontSize: 13,
522
+ color: _colors.Colors.text,
523
+ fontFamily: 'Courier'
524
+ },
411
525
  actions: {
412
526
  flexDirection: 'row',
413
527
  gap: 10,
@@ -453,7 +567,8 @@ const styles = _reactNative.StyleSheet.create({
453
567
  },
454
568
  hint: {
455
569
  fontSize: 12,
456
- color: _colors.Colors.textLight
570
+ color: _colors.Colors.textLight,
571
+ lineHeight: 17
457
572
  },
458
573
  stepCard: {
459
574
  backgroundColor: _colors.Colors.surface,
@@ -468,36 +583,8 @@ const styles = _reactNative.StyleSheet.create({
468
583
  color: _colors.Colors.textSecondary,
469
584
  lineHeight: 17
470
585
  },
471
- stepHeader: {
472
- flexDirection: 'row',
473
- alignItems: 'center',
474
- marginBottom: 4
475
- },
476
- stepNumber: {
477
- width: 20,
478
- height: 20,
479
- borderRadius: 10,
480
- backgroundColor: _colors.Colors.primary,
481
- color: '#fff',
482
- fontSize: 11,
483
- fontWeight: '700',
484
- textAlign: 'center',
485
- lineHeight: 20,
486
- marginRight: 8,
487
- overflow: 'hidden'
488
- },
489
- stepTitle: {
490
- fontSize: 13,
491
- fontWeight: '600',
492
- color: _colors.Colors.text
493
- },
494
- stepDesc: {
495
- fontSize: 12,
496
- color: _colors.Colors.textSecondary,
497
- lineHeight: 17,
498
- marginBottom: 8
499
- },
500
586
  urlLabel: {
587
+ minWidth: 40,
501
588
  fontSize: 10,
502
589
  fontWeight: '600',
503
590
  color: _colors.Colors.primary,
@@ -505,37 +592,21 @@ const styles = _reactNative.StyleSheet.create({
505
592
  paddingHorizontal: 6,
506
593
  paddingVertical: 2,
507
594
  borderRadius: 4,
508
- marginRight: 6
595
+ marginRight: 8,
596
+ textAlign: 'center'
509
597
  },
510
598
  urlRow: {
511
599
  flexDirection: 'row',
512
600
  alignItems: 'center',
513
- backgroundColor: _colors.Colors.surface,
514
- borderWidth: 1,
515
- borderColor: _colors.Colors.border,
516
- borderRadius: 8,
517
- paddingLeft: 12,
518
- paddingRight: 4,
519
- paddingVertical: 4,
520
- marginBottom: 8
601
+ borderBottomWidth: _reactNative.StyleSheet.hairlineWidth,
602
+ borderBottomColor: _colors.Colors.border,
603
+ paddingVertical: 7
521
604
  },
522
605
  urlText: {
523
606
  flex: 1,
524
607
  fontSize: 13,
525
608
  fontFamily: 'Courier',
526
- color: _colors.Colors.text,
527
- paddingVertical: 6
528
- },
529
- copyButton: {
530
- paddingHorizontal: 12,
531
- paddingVertical: 8,
532
- borderRadius: 6,
533
- backgroundColor: _colors.Colors.primary
534
- },
535
- copyButtonText: {
536
- color: '#fff',
537
- fontSize: 12,
538
- fontWeight: '600'
609
+ color: _colors.Colors.text
539
610
  }
540
611
  });
541
612
  //# sourceMappingURL=DevConnectTab.js.map