react-native-debug-toolkit 3.1.4 → 3.2.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 (125) hide show
  1. package/README.md +88 -65
  2. package/README.zh-CN.md +87 -64
  3. package/bin/debug-toolkit.js +10 -2
  4. package/lib/commonjs/core/initialize.js +5 -3
  5. package/lib/commonjs/core/initialize.js.map +1 -1
  6. package/lib/commonjs/features/devConnect/DevConnectQrScanner.js +146 -0
  7. package/lib/commonjs/features/devConnect/DevConnectQrScanner.js.map +1 -0
  8. package/lib/commonjs/features/devConnect/DevConnectTab.js +426 -0
  9. package/lib/commonjs/features/devConnect/DevConnectTab.js.map +1 -0
  10. package/lib/commonjs/features/devConnect/cameraKit.js +54 -0
  11. package/lib/commonjs/features/devConnect/cameraKit.js.map +1 -0
  12. package/lib/commonjs/features/devConnect/devConnectPreferences.js +35 -0
  13. package/lib/commonjs/features/devConnect/devConnectPreferences.js.map +1 -0
  14. package/lib/commonjs/features/devConnect/devConnectUtils.js +53 -0
  15. package/lib/commonjs/features/devConnect/devConnectUtils.js.map +1 -0
  16. package/lib/commonjs/features/devConnect/index.js +92 -0
  17. package/lib/commonjs/features/devConnect/index.js.map +1 -0
  18. package/lib/commonjs/features/devConnect/platformDetect.js +30 -0
  19. package/lib/commonjs/features/devConnect/platformDetect.js.map +1 -0
  20. package/lib/commonjs/features/devConnect/types.js +2 -0
  21. package/lib/commonjs/features/devConnect/types.js.map +1 -0
  22. package/lib/commonjs/features/network/NetworkLogTab.js +7 -3
  23. package/lib/commonjs/features/network/NetworkLogTab.js.map +1 -1
  24. package/lib/commonjs/index.js +7 -0
  25. package/lib/commonjs/index.js.map +1 -1
  26. package/lib/commonjs/ui/DebugView.js +1 -0
  27. package/lib/commonjs/ui/DebugView.js.map +1 -1
  28. package/lib/commonjs/ui/panel/DebugPanel.js +0 -25
  29. package/lib/commonjs/ui/panel/DebugPanel.js.map +1 -1
  30. package/lib/commonjs/utils/DaemonClient.js +25 -1
  31. package/lib/commonjs/utils/DaemonClient.js.map +1 -1
  32. package/lib/commonjs/utils/debugPreferences.js +2 -1
  33. package/lib/commonjs/utils/debugPreferences.js.map +1 -1
  34. package/lib/commonjs/utils/deviceReport.js +1 -0
  35. package/lib/commonjs/utils/deviceReport.js.map +1 -1
  36. package/lib/module/core/initialize.js +5 -3
  37. package/lib/module/core/initialize.js.map +1 -1
  38. package/lib/module/features/devConnect/DevConnectQrScanner.js +141 -0
  39. package/lib/module/features/devConnect/DevConnectQrScanner.js.map +1 -0
  40. package/lib/module/features/devConnect/DevConnectTab.js +421 -0
  41. package/lib/module/features/devConnect/DevConnectTab.js.map +1 -0
  42. package/lib/module/features/devConnect/cameraKit.js +49 -0
  43. package/lib/module/features/devConnect/cameraKit.js.map +1 -0
  44. package/lib/module/features/devConnect/devConnectPreferences.js +29 -0
  45. package/lib/module/features/devConnect/devConnectPreferences.js.map +1 -0
  46. package/lib/module/features/devConnect/devConnectUtils.js +47 -0
  47. package/lib/module/features/devConnect/devConnectUtils.js.map +1 -0
  48. package/lib/module/features/devConnect/index.js +52 -0
  49. package/lib/module/features/devConnect/index.js.map +1 -0
  50. package/lib/module/features/devConnect/platformDetect.js +26 -0
  51. package/lib/module/features/devConnect/platformDetect.js.map +1 -0
  52. package/lib/module/features/devConnect/types.js +2 -0
  53. package/lib/module/features/devConnect/types.js.map +1 -0
  54. package/lib/module/features/network/NetworkLogTab.js +7 -3
  55. package/lib/module/features/network/NetworkLogTab.js.map +1 -1
  56. package/lib/module/index.js +1 -1
  57. package/lib/module/index.js.map +1 -1
  58. package/lib/module/ui/DebugView.js +1 -0
  59. package/lib/module/ui/DebugView.js.map +1 -1
  60. package/lib/module/ui/panel/DebugPanel.js +1 -26
  61. package/lib/module/ui/panel/DebugPanel.js.map +1 -1
  62. package/lib/module/utils/DaemonClient.js +25 -1
  63. package/lib/module/utils/DaemonClient.js.map +1 -1
  64. package/lib/module/utils/debugPreferences.js +2 -1
  65. package/lib/module/utils/debugPreferences.js.map +1 -1
  66. package/lib/module/utils/deviceReport.js +1 -0
  67. package/lib/module/utils/deviceReport.js.map +1 -1
  68. package/lib/typescript/src/core/initialize.d.ts +1 -0
  69. package/lib/typescript/src/core/initialize.d.ts.map +1 -1
  70. package/lib/typescript/src/features/devConnect/DevConnectQrScanner.d.ts +9 -0
  71. package/lib/typescript/src/features/devConnect/DevConnectQrScanner.d.ts.map +1 -0
  72. package/lib/typescript/src/features/devConnect/DevConnectTab.d.ts +5 -0
  73. package/lib/typescript/src/features/devConnect/DevConnectTab.d.ts.map +1 -0
  74. package/lib/typescript/src/features/devConnect/cameraKit.d.ts +47 -0
  75. package/lib/typescript/src/features/devConnect/cameraKit.d.ts.map +1 -0
  76. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts +7 -0
  77. package/lib/typescript/src/features/devConnect/devConnectPreferences.d.ts.map +1 -0
  78. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts +12 -0
  79. package/lib/typescript/src/features/devConnect/devConnectUtils.d.ts.map +1 -0
  80. package/lib/typescript/src/features/devConnect/index.d.ts +7 -0
  81. package/lib/typescript/src/features/devConnect/index.d.ts.map +1 -0
  82. package/lib/typescript/src/features/devConnect/platformDetect.d.ts +2 -0
  83. package/lib/typescript/src/features/devConnect/platformDetect.d.ts.map +1 -0
  84. package/lib/typescript/src/features/devConnect/types.d.ts +7 -0
  85. package/lib/typescript/src/features/devConnect/types.d.ts.map +1 -0
  86. package/lib/typescript/src/features/network/NetworkLogTab.d.ts.map +1 -1
  87. package/lib/typescript/src/index.d.ts +2 -0
  88. package/lib/typescript/src/index.d.ts.map +1 -1
  89. package/lib/typescript/src/types/feature.d.ts +1 -1
  90. package/lib/typescript/src/types/feature.d.ts.map +1 -1
  91. package/lib/typescript/src/ui/DebugView.d.ts.map +1 -1
  92. package/lib/typescript/src/ui/panel/DebugPanel.d.ts.map +1 -1
  93. package/lib/typescript/src/utils/DaemonClient.d.ts +1 -0
  94. package/lib/typescript/src/utils/DaemonClient.d.ts.map +1 -1
  95. package/lib/typescript/src/utils/debugPreferences.d.ts +1 -0
  96. package/lib/typescript/src/utils/debugPreferences.d.ts.map +1 -1
  97. package/lib/typescript/src/utils/deviceReport.d.ts +6 -0
  98. package/lib/typescript/src/utils/deviceReport.d.ts.map +1 -1
  99. package/node/daemon/src/console/console.html +166 -27
  100. package/node/daemon/src/store.js +45 -6
  101. package/package.json +15 -3
  102. package/src/core/initialize.ts +7 -1
  103. package/src/features/devConnect/DevConnectQrScanner.tsx +122 -0
  104. package/src/features/devConnect/DevConnectTab.tsx +357 -0
  105. package/src/features/devConnect/cameraKit.ts +93 -0
  106. package/src/features/devConnect/devConnectPreferences.ts +33 -0
  107. package/src/features/devConnect/devConnectUtils.ts +59 -0
  108. package/src/features/devConnect/index.ts +64 -0
  109. package/src/features/devConnect/platformDetect.ts +26 -0
  110. package/src/features/devConnect/types.ts +6 -0
  111. package/src/features/network/NetworkLogTab.tsx +6 -3
  112. package/src/index.ts +2 -0
  113. package/src/types/feature.ts +2 -1
  114. package/src/ui/DebugView.tsx +1 -0
  115. package/src/ui/panel/DebugPanel.tsx +1 -23
  116. package/src/utils/DaemonClient.ts +26 -1
  117. package/src/utils/debugPreferences.ts +1 -0
  118. package/src/utils/deviceReport.ts +8 -1
  119. package/lib/commonjs/ui/panel/StreamingSettingsModal.js +0 -495
  120. package/lib/commonjs/ui/panel/StreamingSettingsModal.js.map +0 -1
  121. package/lib/module/ui/panel/StreamingSettingsModal.js +0 -490
  122. package/lib/module/ui/panel/StreamingSettingsModal.js.map +0 -1
  123. package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts +0 -8
  124. package/lib/typescript/src/ui/panel/StreamingSettingsModal.d.ts.map +0 -1
  125. package/src/ui/panel/StreamingSettingsModal.tsx +0 -528
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+
3
+ import React, { useCallback, useEffect, useRef, useState } from 'react';
4
+ import { KeyboardAvoidingView, Platform, ScrollView, StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native';
5
+ import { Colors } from '../../ui/theme/colors';
6
+ import { copyToComputer } from '../../utils/copyToComputer';
7
+ import { buildDeviceDaemonEndpoint, daemonClient, getDefaultDaemonEndpoint, normalizeDaemonSettings } from '../../utils/DaemonClient';
8
+ import { buildMetroUrls, normalizeComputerHost } from './devConnectUtils';
9
+ import { saveComputerHost } from './devConnectPreferences';
10
+ import { DevConnectQrScanner } from './DevConnectQrScanner';
11
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
12
+ const CONNECTION_TIMEOUT_MS = 2000;
13
+ const METRO_PORT = '8081';
14
+ export function DevConnectTab({
15
+ snapshot
16
+ }) {
17
+ const inputRef = useRef(null);
18
+ const [computerHost, setComputerHost] = useState(snapshot.computerHost);
19
+ const [streaming, setStreaming] = useState(snapshot.streaming);
20
+ const [syncState, setSyncState] = useState(snapshot.streaming ? 'running' : 'idle');
21
+ const [message, setMessage] = useState(null);
22
+ const [sending, setSending] = useState(false);
23
+ const [qrVisible, setQrVisible] = useState(false);
24
+ const isSim = snapshot.isSimulator;
25
+ useEffect(() => {
26
+ setComputerHost(snapshot.computerHost);
27
+ setStreaming(snapshot.streaming);
28
+ setSyncState(snapshot.streaming ? 'running' : 'idle');
29
+ }, [snapshot.computerHost, snapshot.streaming]);
30
+ const metroUrls = isSim ? {
31
+ expUrl: `exp://localhost:${METRO_PORT}`,
32
+ httpUrl: `http://localhost:${METRO_PORT}`
33
+ } : buildMetroUrls(computerHost);
34
+ const handleHostChange = useCallback(value => {
35
+ setComputerHost(value);
36
+ const normalized = normalizeComputerHost(value);
37
+ if (normalized) {
38
+ saveComputerHost(normalized).catch(() => {});
39
+ }
40
+ setSyncState(prev => prev === 'failed' ? 'idle' : prev);
41
+ setMessage(null);
42
+ }, []);
43
+ const handleQrHost = useCallback(host => {
44
+ setComputerHost(host);
45
+ saveComputerHost(host).catch(() => {});
46
+ setMessage('Computer IP updated from QR code.');
47
+ }, []);
48
+ const validateSettings = useCallback(() => {
49
+ if (!isSim && !normalizeComputerHost(computerHost)) {
50
+ setMessage('Enter your computer IP first.');
51
+ return false;
52
+ }
53
+ return true;
54
+ }, [computerHost, isSim]);
55
+ const configureDaemon = useCallback(() => {
56
+ const normalizedHost = isSim ? '' : normalizeComputerHost(computerHost) ?? '';
57
+ const settings = {
58
+ mode: isSim ? 'simulator' : 'device',
59
+ endpoint: '',
60
+ deviceHost: normalizedHost,
61
+ token: ''
62
+ };
63
+ daemonClient.configure(settings);
64
+ const normalized = normalizeDaemonSettings(settings);
65
+ const endpoint = normalized.endpoint || (isSim ? getDefaultDaemonEndpoint() : buildDeviceDaemonEndpoint(normalizedHost));
66
+ return {
67
+ ...normalized,
68
+ endpoint
69
+ };
70
+ }, [computerHost, isSim]);
71
+ const toggleLiveSync = useCallback(async () => {
72
+ if (streaming) {
73
+ daemonClient.disconnect();
74
+ daemonClient.setStreamingEnabled(false);
75
+ setStreaming(false);
76
+ setSyncState('idle');
77
+ setMessage(null);
78
+ return;
79
+ }
80
+ if (!validateSettings()) return;
81
+ const daemonOptions = configureDaemon();
82
+ setMessage('Checking desktop connection...');
83
+ setSyncState('checking');
84
+ const connection = await daemonClient.checkConnection({
85
+ ...daemonOptions,
86
+ timeoutMs: CONNECTION_TIMEOUT_MS
87
+ });
88
+ if (!connection.ok) {
89
+ setStreaming(false);
90
+ setSyncState('failed');
91
+ setMessage('Cannot reach desktop. Try /health in phone browser.');
92
+ return;
93
+ }
94
+ daemonClient.setStreamingEnabled(true);
95
+ daemonClient.connect({
96
+ ...daemonOptions,
97
+ timeoutMs: 3000,
98
+ onStatus: status => {
99
+ if (status.state === 'connected') {
100
+ setStreaming(true);
101
+ setSyncState('connected');
102
+ setMessage(null);
103
+ } else if (status.state === 'retrying') {
104
+ setSyncState('retrying');
105
+ setMessage('Desktop not reachable. Retrying...');
106
+ } else if (status.state === 'failed') {
107
+ setStreaming(false);
108
+ setSyncState('failed');
109
+ setMessage(status.reason === 'auth' ? 'Desktop token rejected.' : 'Desktop not reachable after multiple retries.');
110
+ } else {
111
+ setSyncState('checking');
112
+ }
113
+ }
114
+ });
115
+ setStreaming(true);
116
+ }, [configureDaemon, streaming, validateSettings]);
117
+ const sendOnce = useCallback(async () => {
118
+ if (!validateSettings()) return;
119
+ const daemonOptions = configureDaemon();
120
+ setSending(true);
121
+ setMessage('Checking desktop connection...');
122
+ try {
123
+ const connection = await daemonClient.checkConnection({
124
+ ...daemonOptions,
125
+ timeoutMs: CONNECTION_TIMEOUT_MS
126
+ });
127
+ if (!connection.ok) {
128
+ setMessage('Cannot reach desktop. Try /health in phone browser.');
129
+ return;
130
+ }
131
+ setMessage('Sending logs...');
132
+ const result = await daemonClient.reportOnce({
133
+ ...daemonOptions,
134
+ timeoutMs: 2000
135
+ });
136
+ if (result.ok) {
137
+ const totalLogs = Object.values(result.logCount ?? {}).reduce((total, count) => total + count, 0);
138
+ setMessage(`Sent ${totalLogs} logs.`);
139
+ } else {
140
+ setMessage(result.error ? `Send failed: ${result.error}` : 'Send failed.');
141
+ }
142
+ } finally {
143
+ setSending(false);
144
+ }
145
+ }, [configureDaemon, validateSettings]);
146
+ const copyUrl = useCallback((label, url) => {
147
+ copyToComputer(url, {
148
+ label
149
+ });
150
+ setMessage('Copied to computer output.');
151
+ setTimeout(() => setMessage(null), 1500);
152
+ }, []);
153
+ const canConnect = isSim || Boolean(normalizeComputerHost(computerHost));
154
+ const busy = sending || syncState === 'checking';
155
+ return /*#__PURE__*/_jsxs(KeyboardAvoidingView, {
156
+ style: styles.container,
157
+ behavior: Platform.OS === 'ios' ? 'padding' : undefined,
158
+ children: [/*#__PURE__*/_jsxs(ScrollView, {
159
+ keyboardShouldPersistTaps: "handled",
160
+ showsVerticalScrollIndicator: false,
161
+ contentContainerStyle: styles.scrollContent,
162
+ children: [isSim ? /*#__PURE__*/_jsx(View, {
163
+ style: styles.badge,
164
+ children: /*#__PURE__*/_jsx(Text, {
165
+ style: styles.badgeText,
166
+ children: "Simulator \u2014 using localhost"
167
+ })
168
+ }) : /*#__PURE__*/_jsxs(View, {
169
+ style: styles.section,
170
+ children: [/*#__PURE__*/_jsx(Text, {
171
+ style: styles.label,
172
+ children: "Computer IP"
173
+ }), /*#__PURE__*/_jsxs(View, {
174
+ style: styles.inputRow,
175
+ children: [/*#__PURE__*/_jsx(TextInput, {
176
+ ref: inputRef,
177
+ style: styles.input,
178
+ value: computerHost,
179
+ onChangeText: handleHostChange,
180
+ placeholder: "192.168.1.10",
181
+ placeholderTextColor: Colors.textLight,
182
+ autoCapitalize: "none",
183
+ autoCorrect: false,
184
+ keyboardType: "numbers-and-punctuation",
185
+ returnKeyType: "done",
186
+ onSubmitEditing: () => inputRef.current?.blur(),
187
+ editable: !streaming
188
+ }), snapshot.qrAvailable ? /*#__PURE__*/_jsx(TouchableOpacity, {
189
+ style: styles.scanButton,
190
+ onPress: () => setQrVisible(true),
191
+ disabled: streaming,
192
+ activeOpacity: 0.7,
193
+ children: /*#__PURE__*/_jsx(Text, {
194
+ style: styles.scanButtonText,
195
+ children: "Scan"
196
+ })
197
+ }) : null]
198
+ })]
199
+ }), /*#__PURE__*/_jsxs(View, {
200
+ style: styles.actions,
201
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
202
+ style: [styles.primaryButton, (!canConnect || busy) && styles.buttonDisabled],
203
+ onPress: toggleLiveSync,
204
+ disabled: !canConnect || busy,
205
+ activeOpacity: 0.75,
206
+ children: /*#__PURE__*/_jsx(Text, {
207
+ style: styles.primaryButtonText,
208
+ children: streaming ? 'Stop' : busy ? 'Checking...' : 'Live Sync'
209
+ })
210
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
211
+ style: [styles.secondaryButton, (!canConnect || busy) && styles.buttonDisabled],
212
+ onPress: sendOnce,
213
+ disabled: !canConnect || busy,
214
+ activeOpacity: 0.75,
215
+ children: /*#__PURE__*/_jsx(Text, {
216
+ style: styles.secondaryButtonText,
217
+ children: sending ? 'Sending...' : 'Send Once'
218
+ })
219
+ })]
220
+ }), message ? /*#__PURE__*/_jsx(Text, {
221
+ style: styles.message,
222
+ children: message
223
+ }) : null, /*#__PURE__*/_jsxs(View, {
224
+ style: styles.section,
225
+ children: [/*#__PURE__*/_jsx(Text, {
226
+ style: styles.sectionTitle,
227
+ children: "Metro Bundler"
228
+ }), metroUrls ? /*#__PURE__*/_jsxs(_Fragment, {
229
+ children: [/*#__PURE__*/_jsxs(View, {
230
+ style: styles.urlRow,
231
+ children: [/*#__PURE__*/_jsx(Text, {
232
+ style: styles.urlText,
233
+ numberOfLines: 1,
234
+ children: metroUrls.expUrl
235
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
236
+ style: styles.copyButton,
237
+ onPress: () => copyUrl('Metro exp URL', metroUrls.expUrl),
238
+ activeOpacity: 0.7,
239
+ children: /*#__PURE__*/_jsx(Text, {
240
+ style: styles.copyButtonText,
241
+ children: "Copy"
242
+ })
243
+ })]
244
+ }), /*#__PURE__*/_jsxs(View, {
245
+ style: styles.urlRow,
246
+ children: [/*#__PURE__*/_jsx(Text, {
247
+ style: styles.urlText,
248
+ numberOfLines: 1,
249
+ children: metroUrls.httpUrl
250
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
251
+ style: styles.copyButton,
252
+ onPress: () => copyUrl('Metro HTTP URL', metroUrls.httpUrl),
253
+ activeOpacity: 0.7,
254
+ children: /*#__PURE__*/_jsx(Text, {
255
+ style: styles.copyButtonText,
256
+ children: "Copy"
257
+ })
258
+ })]
259
+ })]
260
+ }) : /*#__PURE__*/_jsx(Text, {
261
+ style: styles.hint,
262
+ children: "Enter a computer IP to show Metro URLs."
263
+ })]
264
+ })]
265
+ }), /*#__PURE__*/_jsx(DevConnectQrScanner, {
266
+ visible: qrVisible,
267
+ onClose: () => setQrVisible(false),
268
+ onScanHost: handleQrHost
269
+ })]
270
+ });
271
+ }
272
+ const styles = StyleSheet.create({
273
+ container: {
274
+ flex: 1
275
+ },
276
+ scrollContent: {
277
+ paddingHorizontal: 16,
278
+ paddingTop: 12,
279
+ paddingBottom: 24
280
+ },
281
+ badge: {
282
+ paddingHorizontal: 12,
283
+ paddingVertical: 8,
284
+ borderRadius: 8,
285
+ backgroundColor: `${Colors.primary}15`,
286
+ borderWidth: 1,
287
+ borderColor: `${Colors.primary}30`,
288
+ marginBottom: 14
289
+ },
290
+ badgeText: {
291
+ fontSize: 13,
292
+ fontWeight: '500',
293
+ color: Colors.primary
294
+ },
295
+ section: {
296
+ marginBottom: 14
297
+ },
298
+ sectionTitle: {
299
+ fontSize: 14,
300
+ fontWeight: '600',
301
+ color: Colors.text,
302
+ marginBottom: 8
303
+ },
304
+ label: {
305
+ fontSize: 13,
306
+ fontWeight: '500',
307
+ color: Colors.textSecondary,
308
+ marginBottom: 6
309
+ },
310
+ inputRow: {
311
+ flexDirection: 'row',
312
+ alignItems: 'center',
313
+ gap: 8
314
+ },
315
+ input: {
316
+ flex: 1,
317
+ backgroundColor: Colors.surface,
318
+ borderWidth: 1,
319
+ borderColor: Colors.border,
320
+ borderRadius: 8,
321
+ paddingHorizontal: 12,
322
+ paddingVertical: 10,
323
+ fontSize: 14,
324
+ color: Colors.text,
325
+ fontFamily: 'Courier'
326
+ },
327
+ scanButton: {
328
+ minWidth: 62,
329
+ alignItems: 'center',
330
+ justifyContent: 'center',
331
+ paddingHorizontal: 12,
332
+ paddingVertical: 10,
333
+ borderRadius: 8,
334
+ backgroundColor: Colors.surface,
335
+ borderWidth: 1,
336
+ borderColor: Colors.primary
337
+ },
338
+ scanButtonText: {
339
+ color: Colors.primary,
340
+ fontSize: 13,
341
+ fontWeight: '600'
342
+ },
343
+ actions: {
344
+ flexDirection: 'row',
345
+ gap: 10,
346
+ marginTop: 4,
347
+ marginBottom: 12
348
+ },
349
+ primaryButton: {
350
+ flex: 1,
351
+ alignItems: 'center',
352
+ justifyContent: 'center',
353
+ paddingVertical: 11,
354
+ borderRadius: 10,
355
+ backgroundColor: Colors.primary
356
+ },
357
+ primaryButtonText: {
358
+ color: '#fff',
359
+ fontSize: 14,
360
+ fontWeight: '600'
361
+ },
362
+ secondaryButton: {
363
+ flex: 1,
364
+ alignItems: 'center',
365
+ justifyContent: 'center',
366
+ paddingVertical: 11,
367
+ borderRadius: 10,
368
+ backgroundColor: Colors.surface,
369
+ borderWidth: 1,
370
+ borderColor: Colors.border
371
+ },
372
+ secondaryButtonText: {
373
+ color: Colors.primary,
374
+ fontSize: 14,
375
+ fontWeight: '600'
376
+ },
377
+ buttonDisabled: {
378
+ opacity: 0.5
379
+ },
380
+ message: {
381
+ fontSize: 12,
382
+ lineHeight: 17,
383
+ color: Colors.textSecondary,
384
+ marginBottom: 12
385
+ },
386
+ hint: {
387
+ fontSize: 12,
388
+ color: Colors.textLight
389
+ },
390
+ urlRow: {
391
+ flexDirection: 'row',
392
+ alignItems: 'center',
393
+ backgroundColor: Colors.surface,
394
+ borderWidth: 1,
395
+ borderColor: Colors.border,
396
+ borderRadius: 8,
397
+ paddingLeft: 12,
398
+ paddingRight: 4,
399
+ paddingVertical: 4,
400
+ marginBottom: 8
401
+ },
402
+ urlText: {
403
+ flex: 1,
404
+ fontSize: 13,
405
+ fontFamily: 'Courier',
406
+ color: Colors.text,
407
+ paddingVertical: 6
408
+ },
409
+ copyButton: {
410
+ paddingHorizontal: 12,
411
+ paddingVertical: 8,
412
+ borderRadius: 6,
413
+ backgroundColor: Colors.primary
414
+ },
415
+ copyButtonText: {
416
+ color: '#fff',
417
+ fontSize: 12,
418
+ fontWeight: '600'
419
+ }
420
+ });
421
+ //# sourceMappingURL=DevConnectTab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useCallback","useEffect","useRef","useState","KeyboardAvoidingView","Platform","ScrollView","StyleSheet","Text","TextInput","TouchableOpacity","View","Colors","copyToComputer","buildDeviceDaemonEndpoint","daemonClient","getDefaultDaemonEndpoint","normalizeDaemonSettings","buildMetroUrls","normalizeComputerHost","saveComputerHost","DevConnectQrScanner","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","CONNECTION_TIMEOUT_MS","METRO_PORT","DevConnectTab","snapshot","inputRef","computerHost","setComputerHost","streaming","setStreaming","syncState","setSyncState","message","setMessage","sending","setSending","qrVisible","setQrVisible","isSim","isSimulator","metroUrls","expUrl","httpUrl","handleHostChange","value","normalized","catch","prev","handleQrHost","host","validateSettings","configureDaemon","normalizedHost","settings","mode","endpoint","deviceHost","token","configure","toggleLiveSync","disconnect","setStreamingEnabled","daemonOptions","connection","checkConnection","timeoutMs","ok","connect","onStatus","status","state","reason","sendOnce","result","reportOnce","totalLogs","Object","values","logCount","reduce","total","count","error","copyUrl","label","url","setTimeout","canConnect","Boolean","busy","style","styles","container","behavior","OS","undefined","children","keyboardShouldPersistTaps","showsVerticalScrollIndicator","contentContainerStyle","scrollContent","badge","badgeText","section","inputRow","ref","input","onChangeText","placeholder","placeholderTextColor","textLight","autoCapitalize","autoCorrect","keyboardType","returnKeyType","onSubmitEditing","current","blur","editable","qrAvailable","scanButton","onPress","disabled","activeOpacity","scanButtonText","actions","primaryButton","buttonDisabled","primaryButtonText","secondaryButton","secondaryButtonText","sectionTitle","urlRow","urlText","numberOfLines","copyButton","copyButtonText","hint","visible","onClose","onScanHost","create","flex","paddingHorizontal","paddingTop","paddingBottom","paddingVertical","borderRadius","backgroundColor","primary","borderWidth","borderColor","marginBottom","fontSize","fontWeight","color","text","textSecondary","flexDirection","alignItems","gap","surface","border","fontFamily","minWidth","justifyContent","marginTop","opacity","lineHeight","paddingLeft","paddingRight"],"sourceRoot":"../../../../src","sources":["features/devConnect/DevConnectTab.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACvE,SACEC,oBAAoB,EACpBC,QAAQ,EACRC,UAAU,EACVC,UAAU,EACVC,IAAI,EACJC,SAAS,EACTC,gBAAgB,EAChBC,IAAI,QACC,cAAc;AAGrB,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,cAAc,QAAQ,4BAA4B;AAC3D,SACEC,yBAAyB,EACzBC,YAAY,EACZC,wBAAwB,EACxBC,uBAAuB,QAElB,0BAA0B;AACjC,SAASC,cAAc,EAAEC,qBAAqB,QAAQ,mBAAmB;AACzE,SAASC,gBAAgB,QAAQ,yBAAyB;AAE1D,SAASC,mBAAmB,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA,EAAAC,QAAA,IAAAC,SAAA;AAE5D,MAAMC,qBAAqB,GAAG,IAAI;AAClC,MAAMC,UAAU,GAAG,MAAM;AAIzB,OAAO,SAASC,aAAaA,CAAC;EAAEC;AAAmD,CAAC,EAAE;EACpF,MAAMC,QAAQ,GAAG9B,MAAM,CAAY,IAAI,CAAC;EACxC,MAAM,CAAC+B,YAAY,EAAEC,eAAe,CAAC,GAAG/B,QAAQ,CAAC4B,QAAQ,CAACE,YAAY,CAAC;EACvE,MAAM,CAACE,SAAS,EAAEC,YAAY,CAAC,GAAGjC,QAAQ,CAAC4B,QAAQ,CAACI,SAAS,CAAC;EAC9D,MAAM,CAACE,SAAS,EAAEC,YAAY,CAAC,GAAGnC,QAAQ,CAAc4B,QAAQ,CAACI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;EAChG,MAAM,CAACI,OAAO,EAAEC,UAAU,CAAC,GAAGrC,QAAQ,CAAgB,IAAI,CAAC;EAC3D,MAAM,CAACsC,OAAO,EAAEC,UAAU,CAAC,GAAGvC,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM,CAACwC,SAAS,EAAEC,YAAY,CAAC,GAAGzC,QAAQ,CAAC,KAAK,CAAC;EAEjD,MAAM0C,KAAK,GAAGd,QAAQ,CAACe,WAAW;EAElC7C,SAAS,CAAC,MAAM;IACdiC,eAAe,CAACH,QAAQ,CAACE,YAAY,CAAC;IACtCG,YAAY,CAACL,QAAQ,CAACI,SAAS,CAAC;IAChCG,YAAY,CAACP,QAAQ,CAACI,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;EACvD,CAAC,EAAE,CAACJ,QAAQ,CAACE,YAAY,EAAEF,QAAQ,CAACI,SAAS,CAAC,CAAC;EAE/C,MAAMY,SAAS,GAAGF,KAAK,GACnB;IAAEG,MAAM,EAAE,mBAAmBnB,UAAU,EAAE;IAAEoB,OAAO,EAAE,oBAAoBpB,UAAU;EAAG,CAAC,GACtFX,cAAc,CAACe,YAAY,CAAC;EAEhC,MAAMiB,gBAAgB,GAAGlD,WAAW,CAAEmD,KAAa,IAAK;IACtDjB,eAAe,CAACiB,KAAK,CAAC;IACtB,MAAMC,UAAU,GAAGjC,qBAAqB,CAACgC,KAAK,CAAC;IAC/C,IAAIC,UAAU,EAAE;MACdhC,gBAAgB,CAACgC,UAAU,CAAC,CAACC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C;IACAf,YAAY,CAAEgB,IAAI,IAAMA,IAAI,KAAK,QAAQ,GAAG,MAAM,GAAGA,IAAK,CAAC;IAC3Dd,UAAU,CAAC,IAAI,CAAC;EAClB,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMe,YAAY,GAAGvD,WAAW,CAAEwD,IAAY,IAAK;IACjDtB,eAAe,CAACsB,IAAI,CAAC;IACrBpC,gBAAgB,CAACoC,IAAI,CAAC,CAACH,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACtCb,UAAU,CAAC,mCAAmC,CAAC;EACjD,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMiB,gBAAgB,GAAGzD,WAAW,CAAC,MAAe;IAClD,IAAI,CAAC6C,KAAK,IAAI,CAAC1B,qBAAqB,CAACc,YAAY,CAAC,EAAE;MAClDO,UAAU,CAAC,+BAA+B,CAAC;MAC3C,OAAO,KAAK;IACd;IACA,OAAO,IAAI;EACb,CAAC,EAAE,CAACP,YAAY,EAAEY,KAAK,CAAC,CAAC;EAEzB,MAAMa,eAAe,GAAG1D,WAAW,CAAC,MAAM;IACxC,MAAM2D,cAAc,GAAGd,KAAK,GAAG,EAAE,GAAI1B,qBAAqB,CAACc,YAAY,CAAC,IAAI,EAAG;IAC/E,MAAM2B,QAAwB,GAAG;MAC/BC,IAAI,EAAEhB,KAAK,GAAG,WAAW,GAAG,QAAQ;MACpCiB,QAAQ,EAAE,EAAE;MACZC,UAAU,EAAEJ,cAAc;MAC1BK,KAAK,EAAE;IACT,CAAC;IACDjD,YAAY,CAACkD,SAAS,CAACL,QAAQ,CAAC;IAChC,MAAMR,UAAU,GAAGnC,uBAAuB,CAAC2C,QAAQ,CAAC;IACpD,MAAME,QAAQ,GAAGV,UAAU,CAACU,QAAQ,KAAKjB,KAAK,GAAG7B,wBAAwB,CAAC,CAAC,GAAGF,yBAAyB,CAAC6C,cAAc,CAAC,CAAC;IACxH,OAAO;MAAE,GAAGP,UAAU;MAAEU;IAAS,CAAC;EACpC,CAAC,EAAE,CAAC7B,YAAY,EAAEY,KAAK,CAAC,CAAC;EAEzB,MAAMqB,cAAc,GAAGlE,WAAW,CAAC,YAAY;IAC7C,IAAImC,SAAS,EAAE;MACbpB,YAAY,CAACoD,UAAU,CAAC,CAAC;MACzBpD,YAAY,CAACqD,mBAAmB,CAAC,KAAK,CAAC;MACvChC,YAAY,CAAC,KAAK,CAAC;MACnBE,YAAY,CAAC,MAAM,CAAC;MACpBE,UAAU,CAAC,IAAI,CAAC;MAChB;IACF;IAEA,IAAI,CAACiB,gBAAgB,CAAC,CAAC,EAAE;IAEzB,MAAMY,aAAa,GAAGX,eAAe,CAAC,CAAC;IACvClB,UAAU,CAAC,gCAAgC,CAAC;IAC5CF,YAAY,CAAC,UAAU,CAAC;IAExB,MAAMgC,UAAU,GAAG,MAAMvD,YAAY,CAACwD,eAAe,CAAC;MACpD,GAAGF,aAAa;MAChBG,SAAS,EAAE5C;IACb,CAAC,CAAC;IACF,IAAI,CAAC0C,UAAU,CAACG,EAAE,EAAE;MAClBrC,YAAY,CAAC,KAAK,CAAC;MACnBE,YAAY,CAAC,QAAQ,CAAC;MACtBE,UAAU,CAAC,qDAAqD,CAAC;MACjE;IACF;IAEAzB,YAAY,CAACqD,mBAAmB,CAAC,IAAI,CAAC;IACtCrD,YAAY,CAAC2D,OAAO,CAAC;MACnB,GAAGL,aAAa;MAChBG,SAAS,EAAE,IAAI;MACfG,QAAQ,EAAGC,MAAM,IAAK;QACpB,IAAIA,MAAM,CAACC,KAAK,KAAK,WAAW,EAAE;UAChCzC,YAAY,CAAC,IAAI,CAAC;UAClBE,YAAY,CAAC,WAAW,CAAC;UACzBE,UAAU,CAAC,IAAI,CAAC;QAClB,CAAC,MAAM,IAAIoC,MAAM,CAACC,KAAK,KAAK,UAAU,EAAE;UACtCvC,YAAY,CAAC,UAAU,CAAC;UACxBE,UAAU,CAAC,oCAAoC,CAAC;QAClD,CAAC,MAAM,IAAIoC,MAAM,CAACC,KAAK,KAAK,QAAQ,EAAE;UACpCzC,YAAY,CAAC,KAAK,CAAC;UACnBE,YAAY,CAAC,QAAQ,CAAC;UACtBE,UAAU,CAACoC,MAAM,CAACE,MAAM,KAAK,MAAM,GAAG,yBAAyB,GAAG,+CAA+C,CAAC;QACpH,CAAC,MAAM;UACLxC,YAAY,CAAC,UAAU,CAAC;QAC1B;MACF;IACF,CAAC,CAAC;IACFF,YAAY,CAAC,IAAI,CAAC;EACpB,CAAC,EAAE,CAACsB,eAAe,EAAEvB,SAAS,EAAEsB,gBAAgB,CAAC,CAAC;EAElD,MAAMsB,QAAQ,GAAG/E,WAAW,CAAC,YAAY;IACvC,IAAI,CAACyD,gBAAgB,CAAC,CAAC,EAAE;IAEzB,MAAMY,aAAa,GAAGX,eAAe,CAAC,CAAC;IACvChB,UAAU,CAAC,IAAI,CAAC;IAChBF,UAAU,CAAC,gCAAgC,CAAC;IAE5C,IAAI;MACF,MAAM8B,UAAU,GAAG,MAAMvD,YAAY,CAACwD,eAAe,CAAC;QACpD,GAAGF,aAAa;QAChBG,SAAS,EAAE5C;MACb,CAAC,CAAC;MACF,IAAI,CAAC0C,UAAU,CAACG,EAAE,EAAE;QAClBjC,UAAU,CAAC,qDAAqD,CAAC;QACjE;MACF;MAEAA,UAAU,CAAC,iBAAiB,CAAC;MAC7B,MAAMwC,MAAM,GAAG,MAAMjE,YAAY,CAACkE,UAAU,CAAC;QAC3C,GAAGZ,aAAa;QAChBG,SAAS,EAAE;MACb,CAAC,CAAC;MAEF,IAAIQ,MAAM,CAACP,EAAE,EAAE;QACb,MAAMS,SAAS,GAAGC,MAAM,CAACC,MAAM,CAACJ,MAAM,CAACK,QAAQ,IAAI,CAAC,CAAC,CAAC,CAACC,MAAM,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKD,KAAK,GAAGC,KAAK,EAAE,CAAC,CAAC;QACjGhD,UAAU,CAAC,QAAQ0C,SAAS,QAAQ,CAAC;MACvC,CAAC,MAAM;QACL1C,UAAU,CAACwC,MAAM,CAACS,KAAK,GAAG,gBAAgBT,MAAM,CAACS,KAAK,EAAE,GAAG,cAAc,CAAC;MAC5E;IACF,CAAC,SAAS;MACR/C,UAAU,CAAC,KAAK,CAAC;IACnB;EACF,CAAC,EAAE,CAACgB,eAAe,EAAED,gBAAgB,CAAC,CAAC;EAEvC,MAAMiC,OAAO,GAAG1F,WAAW,CAAC,CAAC2F,KAAa,EAAEC,GAAW,KAAK;IAC1D/E,cAAc,CAAC+E,GAAG,EAAE;MAAED;IAAM,CAAC,CAAC;IAC9BnD,UAAU,CAAC,4BAA4B,CAAC;IACxCqD,UAAU,CAAC,MAAMrD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;EAC1C,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMsD,UAAU,GAAGjD,KAAK,IAAIkD,OAAO,CAAC5E,qBAAqB,CAACc,YAAY,CAAC,CAAC;EACxE,MAAM+D,IAAI,GAAGvD,OAAO,IAAIJ,SAAS,KAAK,UAAU;EAEhD,oBACEZ,KAAA,CAACrB,oBAAoB;IAAC6F,KAAK,EAAEC,MAAM,CAACC,SAAU;IAACC,QAAQ,EAAE/F,QAAQ,CAACgG,EAAE,KAAK,KAAK,GAAG,SAAS,GAAGC,SAAU;IAAAC,QAAA,gBACrG9E,KAAA,CAACnB,UAAU;MAACkG,yBAAyB,EAAC,SAAS;MAACC,4BAA4B,EAAE,KAAM;MAACC,qBAAqB,EAAER,MAAM,CAACS,aAAc;MAAAJ,QAAA,GAE9H1D,KAAK,gBACJtB,IAAA,CAACZ,IAAI;QAACsF,KAAK,EAAEC,MAAM,CAACU,KAAM;QAAAL,QAAA,eACxBhF,IAAA,CAACf,IAAI;UAACyF,KAAK,EAAEC,MAAM,CAACW,SAAU;UAAAN,QAAA,EAAC;QAA2B,CAAM;MAAC,CAC7D,CAAC,gBAEP9E,KAAA,CAACd,IAAI;QAACsF,KAAK,EAAEC,MAAM,CAACY,OAAQ;QAAAP,QAAA,gBAC1BhF,IAAA,CAACf,IAAI;UAACyF,KAAK,EAAEC,MAAM,CAACP,KAAM;UAAAY,QAAA,EAAC;QAAW,CAAM,CAAC,eAC7C9E,KAAA,CAACd,IAAI;UAACsF,KAAK,EAAEC,MAAM,CAACa,QAAS;UAAAR,QAAA,gBAC3BhF,IAAA,CAACd,SAAS;YACRuG,GAAG,EAAEhF,QAAS;YACdiE,KAAK,EAAEC,MAAM,CAACe,KAAM;YACpB9D,KAAK,EAAElB,YAAa;YACpBiF,YAAY,EAAEhE,gBAAiB;YAC/BiE,WAAW,EAAC,cAAc;YAC1BC,oBAAoB,EAAExG,MAAM,CAACyG,SAAU;YACvCC,cAAc,EAAC,MAAM;YACrBC,WAAW,EAAE,KAAM;YACnBC,YAAY,EAAC,yBAAyB;YACtCC,aAAa,EAAC,MAAM;YACpBC,eAAe,EAAEA,CAAA,KAAM1F,QAAQ,CAAC2F,OAAO,EAAEC,IAAI,CAAC,CAAE;YAChDC,QAAQ,EAAE,CAAC1F;UAAU,CACtB,CAAC,EACDJ,QAAQ,CAAC+F,WAAW,gBACnBvG,IAAA,CAACb,gBAAgB;YAACuF,KAAK,EAAEC,MAAM,CAAC6B,UAAW;YAACC,OAAO,EAAEA,CAAA,KAAMpF,YAAY,CAAC,IAAI,CAAE;YAACqF,QAAQ,EAAE9F,SAAU;YAAC+F,aAAa,EAAE,GAAI;YAAA3B,QAAA,eACrHhF,IAAA,CAACf,IAAI;cAACyF,KAAK,EAAEC,MAAM,CAACiC,cAAe;cAAA5B,QAAA,EAAC;YAAI,CAAM;UAAC,CAC/B,CAAC,GACjB,IAAI;QAAA,CACJ,CAAC;MAAA,CACH,CACP,eAED9E,KAAA,CAACd,IAAI;QAACsF,KAAK,EAAEC,MAAM,CAACkC,OAAQ;QAAA7B,QAAA,gBAC1BhF,IAAA,CAACb,gBAAgB;UACfuF,KAAK,EAAE,CAACC,MAAM,CAACmC,aAAa,EAAE,CAAC,CAACvC,UAAU,IAAIE,IAAI,KAAKE,MAAM,CAACoC,cAAc,CAAE;UAC9EN,OAAO,EAAE9D,cAAe;UACxB+D,QAAQ,EAAE,CAACnC,UAAU,IAAIE,IAAK;UAC9BkC,aAAa,EAAE,IAAK;UAAA3B,QAAA,eAEpBhF,IAAA,CAACf,IAAI;YAACyF,KAAK,EAAEC,MAAM,CAACqC,iBAAkB;YAAAhC,QAAA,EACnCpE,SAAS,GAAG,MAAM,GAAG6D,IAAI,GAAG,aAAa,GAAG;UAAW,CACpD;QAAC,CACS,CAAC,eACnBzE,IAAA,CAACb,gBAAgB;UACfuF,KAAK,EAAE,CAACC,MAAM,CAACsC,eAAe,EAAE,CAAC,CAAC1C,UAAU,IAAIE,IAAI,KAAKE,MAAM,CAACoC,cAAc,CAAE;UAChFN,OAAO,EAAEjD,QAAS;UAClBkD,QAAQ,EAAE,CAACnC,UAAU,IAAIE,IAAK;UAC9BkC,aAAa,EAAE,IAAK;UAAA3B,QAAA,eAEpBhF,IAAA,CAACf,IAAI;YAACyF,KAAK,EAAEC,MAAM,CAACuC,mBAAoB;YAAAlC,QAAA,EACrC9D,OAAO,GAAG,YAAY,GAAG;UAAW,CACjC;QAAC,CACS,CAAC;MAAA,CACf,CAAC,EAENF,OAAO,gBAAGhB,IAAA,CAACf,IAAI;QAACyF,KAAK,EAAEC,MAAM,CAAC3D,OAAQ;QAAAgE,QAAA,EAAEhE;MAAO,CAAO,CAAC,GAAG,IAAI,eAE/Dd,KAAA,CAACd,IAAI;QAACsF,KAAK,EAAEC,MAAM,CAACY,OAAQ;QAAAP,QAAA,gBAC1BhF,IAAA,CAACf,IAAI;UAACyF,KAAK,EAAEC,MAAM,CAACwC,YAAa;UAAAnC,QAAA,EAAC;QAAa,CAAM,CAAC,EACrDxD,SAAS,gBACRtB,KAAA,CAAAE,SAAA;UAAA4E,QAAA,gBACE9E,KAAA,CAACd,IAAI;YAACsF,KAAK,EAAEC,MAAM,CAACyC,MAAO;YAAApC,QAAA,gBACzBhF,IAAA,CAACf,IAAI;cAACyF,KAAK,EAAEC,MAAM,CAAC0C,OAAQ;cAACC,aAAa,EAAE,CAAE;cAAAtC,QAAA,EAAExD,SAAS,CAACC;YAAM,CAAO,CAAC,eACxEzB,IAAA,CAACb,gBAAgB;cAACuF,KAAK,EAAEC,MAAM,CAAC4C,UAAW;cAACd,OAAO,EAAEA,CAAA,KAAMtC,OAAO,CAAC,eAAe,EAAE3C,SAAS,CAACC,MAAM,CAAE;cAACkF,aAAa,EAAE,GAAI;cAAA3B,QAAA,eACxHhF,IAAA,CAACf,IAAI;gBAACyF,KAAK,EAAEC,MAAM,CAAC6C,cAAe;gBAAAxC,QAAA,EAAC;cAAI,CAAM;YAAC,CAC/B,CAAC;UAAA,CACf,CAAC,eACP9E,KAAA,CAACd,IAAI;YAACsF,KAAK,EAAEC,MAAM,CAACyC,MAAO;YAAApC,QAAA,gBACzBhF,IAAA,CAACf,IAAI;cAACyF,KAAK,EAAEC,MAAM,CAAC0C,OAAQ;cAACC,aAAa,EAAE,CAAE;cAAAtC,QAAA,EAAExD,SAAS,CAACE;YAAO,CAAO,CAAC,eACzE1B,IAAA,CAACb,gBAAgB;cAACuF,KAAK,EAAEC,MAAM,CAAC4C,UAAW;cAACd,OAAO,EAAEA,CAAA,KAAMtC,OAAO,CAAC,gBAAgB,EAAE3C,SAAS,CAACE,OAAO,CAAE;cAACiF,aAAa,EAAE,GAAI;cAAA3B,QAAA,eAC1HhF,IAAA,CAACf,IAAI;gBAACyF,KAAK,EAAEC,MAAM,CAAC6C,cAAe;gBAAAxC,QAAA,EAAC;cAAI,CAAM;YAAC,CAC/B,CAAC;UAAA,CACf,CAAC;QAAA,CACP,CAAC,gBAEHhF,IAAA,CAACf,IAAI;UAACyF,KAAK,EAAEC,MAAM,CAAC8C,IAAK;UAAAzC,QAAA,EAAC;QAAuC,CAAM,CACxE;MAAA,CACG,CAAC;IAAA,CACG,CAAC,eACbhF,IAAA,CAACF,mBAAmB;MAClB4H,OAAO,EAAEtG,SAAU;MACnBuG,OAAO,EAAEA,CAAA,KAAMtG,YAAY,CAAC,KAAK,CAAE;MACnCuG,UAAU,EAAE5F;IAAa,CAC1B,CAAC;EAAA,CACkB,CAAC;AAE3B;AAEA,MAAM2C,MAAM,GAAG3F,UAAU,CAAC6I,MAAM,CAAC;EAC/BjD,SAAS,EAAE;IAAEkD,IAAI,EAAE;EAAE,CAAC;EACtB1C,aAAa,EAAE;IAAE2C,iBAAiB,EAAE,EAAE;IAAEC,UAAU,EAAE,EAAE;IAAEC,aAAa,EAAE;EAAG,CAAC;EAC3E5C,KAAK,EAAE;IACL0C,iBAAiB,EAAE,EAAE;IACrBG,eAAe,EAAE,CAAC;IAClBC,YAAY,EAAE,CAAC;IACfC,eAAe,EAAE,GAAG/I,MAAM,CAACgJ,OAAO,IAAI;IACtCC,WAAW,EAAE,CAAC;IACdC,WAAW,EAAE,GAAGlJ,MAAM,CAACgJ,OAAO,IAAI;IAClCG,YAAY,EAAE;EAChB,CAAC;EACDlD,SAAS,EAAE;IAAEmD,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE,KAAK;IAAEC,KAAK,EAAEtJ,MAAM,CAACgJ;EAAQ,CAAC;EACrE9C,OAAO,EAAE;IAAEiD,YAAY,EAAE;EAAG,CAAC;EAC7BrB,YAAY,EAAE;IAAEsB,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE,KAAK;IAAEC,KAAK,EAAEtJ,MAAM,CAACuJ,IAAI;IAAEJ,YAAY,EAAE;EAAE,CAAC;EACtFpE,KAAK,EAAE;IAAEqE,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE,KAAK;IAAEC,KAAK,EAAEtJ,MAAM,CAACwJ,aAAa;IAAEL,YAAY,EAAE;EAAE,CAAC;EACxFhD,QAAQ,EAAE;IAAEsD,aAAa,EAAE,KAAK;IAAEC,UAAU,EAAE,QAAQ;IAAEC,GAAG,EAAE;EAAE,CAAC;EAChEtD,KAAK,EAAE;IACLoC,IAAI,EAAE,CAAC;IACPM,eAAe,EAAE/I,MAAM,CAAC4J,OAAO;IAC/BX,WAAW,EAAE,CAAC;IACdC,WAAW,EAAElJ,MAAM,CAAC6J,MAAM;IAC1Bf,YAAY,EAAE,CAAC;IACfJ,iBAAiB,EAAE,EAAE;IACrBG,eAAe,EAAE,EAAE;IACnBO,QAAQ,EAAE,EAAE;IACZE,KAAK,EAAEtJ,MAAM,CAACuJ,IAAI;IAClBO,UAAU,EAAE;EACd,CAAC;EACD3C,UAAU,EAAE;IACV4C,QAAQ,EAAE,EAAE;IACZL,UAAU,EAAE,QAAQ;IACpBM,cAAc,EAAE,QAAQ;IACxBtB,iBAAiB,EAAE,EAAE;IACrBG,eAAe,EAAE,EAAE;IACnBC,YAAY,EAAE,CAAC;IACfC,eAAe,EAAE/I,MAAM,CAAC4J,OAAO;IAC/BX,WAAW,EAAE,CAAC;IACdC,WAAW,EAAElJ,MAAM,CAACgJ;EACtB,CAAC;EACDzB,cAAc,EAAE;IAAE+B,KAAK,EAAEtJ,MAAM,CAACgJ,OAAO;IAAEI,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM,CAAC;EAC1E7B,OAAO,EAAE;IAAEiC,aAAa,EAAE,KAAK;IAAEE,GAAG,EAAE,EAAE;IAAEM,SAAS,EAAE,CAAC;IAAEd,YAAY,EAAE;EAAG,CAAC;EAC1E1B,aAAa,EAAE;IACbgB,IAAI,EAAE,CAAC;IACPiB,UAAU,EAAE,QAAQ;IACpBM,cAAc,EAAE,QAAQ;IACxBnB,eAAe,EAAE,EAAE;IACnBC,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE/I,MAAM,CAACgJ;EAC1B,CAAC;EACDrB,iBAAiB,EAAE;IAAE2B,KAAK,EAAE,MAAM;IAAEF,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM,CAAC;EACrEzB,eAAe,EAAE;IACfa,IAAI,EAAE,CAAC;IACPiB,UAAU,EAAE,QAAQ;IACpBM,cAAc,EAAE,QAAQ;IACxBnB,eAAe,EAAE,EAAE;IACnBC,YAAY,EAAE,EAAE;IAChBC,eAAe,EAAE/I,MAAM,CAAC4J,OAAO;IAC/BX,WAAW,EAAE,CAAC;IACdC,WAAW,EAAElJ,MAAM,CAAC6J;EACtB,CAAC;EACDhC,mBAAmB,EAAE;IAAEyB,KAAK,EAAEtJ,MAAM,CAACgJ,OAAO;IAAEI,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM,CAAC;EAC/E3B,cAAc,EAAE;IAAEwC,OAAO,EAAE;EAAI,CAAC;EAChCvI,OAAO,EAAE;IAAEyH,QAAQ,EAAE,EAAE;IAAEe,UAAU,EAAE,EAAE;IAAEb,KAAK,EAAEtJ,MAAM,CAACwJ,aAAa;IAAEL,YAAY,EAAE;EAAG,CAAC;EACxFf,IAAI,EAAE;IAAEgB,QAAQ,EAAE,EAAE;IAAEE,KAAK,EAAEtJ,MAAM,CAACyG;EAAU,CAAC;EAC/CsB,MAAM,EAAE;IACN0B,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBX,eAAe,EAAE/I,MAAM,CAAC4J,OAAO;IAC/BX,WAAW,EAAE,CAAC;IACdC,WAAW,EAAElJ,MAAM,CAAC6J,MAAM;IAC1Bf,YAAY,EAAE,CAAC;IACfsB,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,CAAC;IACfxB,eAAe,EAAE,CAAC;IAClBM,YAAY,EAAE;EAChB,CAAC;EACDnB,OAAO,EAAE;IAAES,IAAI,EAAE,CAAC;IAAEW,QAAQ,EAAE,EAAE;IAAEU,UAAU,EAAE,SAAS;IAAER,KAAK,EAAEtJ,MAAM,CAACuJ,IAAI;IAAEV,eAAe,EAAE;EAAE,CAAC;EACjGX,UAAU,EAAE;IAAEQ,iBAAiB,EAAE,EAAE;IAAEG,eAAe,EAAE,CAAC;IAAEC,YAAY,EAAE,CAAC;IAAEC,eAAe,EAAE/I,MAAM,CAACgJ;EAAQ,CAAC;EAC3Gb,cAAc,EAAE;IAAEmB,KAAK,EAAE,MAAM;IAAEF,QAAQ,EAAE,EAAE;IAAEC,UAAU,EAAE;EAAM;AACnE,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ // ---- react-native-camera-kit types ----
4
+
5
+ // ---- expo-camera types ----
6
+
7
+ // ---- Unified scanner ----
8
+
9
+ let cached = false;
10
+ function tryCameraKit() {
11
+ try {
12
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
13
+ const mod = require('react-native-camera-kit');
14
+ if (mod.Camera) {
15
+ return {
16
+ kind: 'camera-kit',
17
+ CameraKit: {
18
+ Camera: mod.Camera,
19
+ CameraType: mod.CameraType
20
+ }
21
+ };
22
+ }
23
+ } catch {/* not installed */}
24
+ return null;
25
+ }
26
+ function tryExpoCamera() {
27
+ try {
28
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
29
+ const mod = require('expo-camera');
30
+ if (mod.Camera) {
31
+ return {
32
+ kind: 'expo-camera',
33
+ ExpoCamera: {
34
+ Camera: mod.Camera
35
+ }
36
+ };
37
+ }
38
+ } catch {/* not installed */}
39
+ return null;
40
+ }
41
+ export function getScannerModule() {
42
+ if (cached !== false) return cached;
43
+ cached = tryCameraKit() ?? tryExpoCamera();
44
+ return cached;
45
+ }
46
+ export function isCameraKitAvailable() {
47
+ return getScannerModule() !== null;
48
+ }
49
+ //# sourceMappingURL=cameraKit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cached","tryCameraKit","mod","require","Camera","kind","CameraKit","CameraType","tryExpoCamera","ExpoCamera","getScannerModule","isCameraKitAvailable"],"sourceRoot":"../../../../src","sources":["features/devConnect/cameraKit.ts"],"mappings":";;AAGA;;AAwBA;;AAiBA;;AAUA,IAAIA,MAAoC,GAAG,KAAK;AAEhD,SAASC,YAAYA,CAAA,EAAyB;EAC5C,IAAI;IACF;IACA,MAAMC,GAAG,GAAGC,OAAO,CAAC,yBAAyB,CAA6B;IAC1E,IAAID,GAAG,CAACE,MAAM,EAAE;MACd,OAAO;QACLC,IAAI,EAAE,YAAY;QAClBC,SAAS,EAAE;UAAEF,MAAM,EAAEF,GAAG,CAACE,MAAM;UAAEG,UAAU,EAAEL,GAAG,CAACK;QAAW;MAC9D,CAAC;IACH;EACF,CAAC,CAAC,MAAM,CAAE;EACV,OAAO,IAAI;AACb;AAEA,SAASC,aAAaA,CAAA,EAAyB;EAC7C,IAAI;IACF;IACA,MAAMN,GAAG,GAAGC,OAAO,CAAC,aAAa,CAA8B;IAC/D,IAAID,GAAG,CAACE,MAAM,EAAE;MACd,OAAO;QACLC,IAAI,EAAE,aAAa;QACnBI,UAAU,EAAE;UAAEL,MAAM,EAAEF,GAAG,CAACE;QAAO;MACnC,CAAC;IACH;EACF,CAAC,CAAC,MAAM,CAAE;EACV,OAAO,IAAI;AACb;AAEA,OAAO,SAASM,gBAAgBA,CAAA,EAAyB;EACvD,IAAIV,MAAM,KAAK,KAAK,EAAE,OAAOA,MAAM;EACnCA,MAAM,GAAGC,YAAY,CAAC,CAAC,IAAIO,aAAa,CAAC,CAAC;EAC1C,OAAOR,MAAM;AACf;AAEA,OAAO,SAASW,oBAAoBA,CAAA,EAAY;EAC9C,OAAOD,gBAAgB,CAAC,CAAC,KAAK,IAAI;AACpC","ignoreList":[]}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ import { daemonClient } from '../../utils/DaemonClient';
4
+ import { getPreference, KEYS, setPreference } from '../../utils/debugPreferences';
5
+ import { normalizeComputerHost } from './devConnectUtils';
6
+ import { isSimulator } from './platformDetect';
7
+ export async function loadDevConnectPreferences() {
8
+ const storedHost = await getPreference(KEYS.computerHost);
9
+ return {
10
+ computerHost: storedHost ? normalizeComputerHost(storedHost) ?? '' : ''
11
+ };
12
+ }
13
+ export async function saveComputerHost(value) {
14
+ const normalized = normalizeComputerHost(value);
15
+ if (!normalized) return null;
16
+ await setPreference(KEYS.computerHost, normalized);
17
+ return normalized;
18
+ }
19
+ export async function restoreDevConnectSettingsToDaemon() {
20
+ const preferences = await loadDevConnectPreferences();
21
+ const mode = isSimulator() ? 'simulator' : 'device';
22
+ daemonClient.configure({
23
+ mode,
24
+ endpoint: '',
25
+ deviceHost: mode === 'simulator' ? '' : preferences.computerHost,
26
+ token: ''
27
+ });
28
+ }
29
+ //# sourceMappingURL=devConnectPreferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["daemonClient","getPreference","KEYS","setPreference","normalizeComputerHost","isSimulator","loadDevConnectPreferences","storedHost","computerHost","saveComputerHost","value","normalized","restoreDevConnectSettingsToDaemon","preferences","mode","configure","endpoint","deviceHost","token"],"sourceRoot":"../../../../src","sources":["features/devConnect/devConnectPreferences.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,0BAA0B;AACvD,SAASC,aAAa,EAAEC,IAAI,EAAEC,aAAa,QAAQ,8BAA8B;AACjF,SAASC,qBAAqB,QAAQ,mBAAmB;AACzD,SAASC,WAAW,QAAQ,kBAAkB;AAM9C,OAAO,eAAeC,yBAAyBA,CAAA,EAAmC;EAChF,MAAMC,UAAU,GAAG,MAAMN,aAAa,CAACC,IAAI,CAACM,YAAY,CAAC;EACzD,OAAO;IACLA,YAAY,EAAED,UAAU,GAAGH,qBAAqB,CAACG,UAAU,CAAC,IAAI,EAAE,GAAG;EACvE,CAAC;AACH;AAEA,OAAO,eAAeE,gBAAgBA,CAACC,KAAa,EAA0B;EAC5E,MAAMC,UAAU,GAAGP,qBAAqB,CAACM,KAAK,CAAC;EAC/C,IAAI,CAACC,UAAU,EAAE,OAAO,IAAI;EAC5B,MAAMR,aAAa,CAACD,IAAI,CAACM,YAAY,EAAEG,UAAU,CAAC;EAClD,OAAOA,UAAU;AACnB;AAEA,OAAO,eAAeC,iCAAiCA,CAAA,EAAkB;EACvE,MAAMC,WAAW,GAAG,MAAMP,yBAAyB,CAAC,CAAC;EACrD,MAAMQ,IAAI,GAAGT,WAAW,CAAC,CAAC,GAAG,WAAW,GAAY,QAAiB;EACrEL,YAAY,CAACe,SAAS,CAAC;IACrBD,IAAI;IACJE,QAAQ,EAAE,EAAE;IACZC,UAAU,EAAEH,IAAI,KAAK,WAAW,GAAG,EAAE,GAAGD,WAAW,CAACL,YAAY;IAChEU,KAAK,EAAE;EACT,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ const METRO_PORT = '8081';
4
+ function isValidIpv4(host) {
5
+ const parts = host.split('.');
6
+ if (parts.length !== 4) return false;
7
+ return parts.every(part => {
8
+ if (!/^\d{1,3}$/.test(part)) return false;
9
+ const value = Number(part);
10
+ return value >= 0 && value <= 255 && String(value) === part;
11
+ });
12
+ }
13
+ function toUrlInput(raw) {
14
+ const trimmed = raw.trim();
15
+ if (/^[a-zA-Z][a-zA-Z\d+.-]*:\/\//.test(trimmed)) {
16
+ return trimmed;
17
+ }
18
+ return `http://${trimmed}`;
19
+ }
20
+ export function normalizeComputerHost(raw) {
21
+ const trimmed = raw.trim();
22
+ if (!trimmed) return null;
23
+ try {
24
+ const parsed = new URL(toUrlInput(trimmed));
25
+ const host = parsed.hostname.trim();
26
+ return isValidIpv4(host) ? host : null;
27
+ } catch {
28
+ return null;
29
+ }
30
+ }
31
+ export function buildMetroUrls(rawHost) {
32
+ const host = normalizeComputerHost(rawHost);
33
+ if (!host) return null;
34
+ return {
35
+ expUrl: `exp://${host}:${METRO_PORT}`,
36
+ httpUrl: `http://${host}:${METRO_PORT}`
37
+ };
38
+ }
39
+ export function parseMetroQrPayload(payload) {
40
+ const computerHost = normalizeComputerHost(payload);
41
+ if (!computerHost) return null;
42
+ return {
43
+ computerHost,
44
+ source: payload
45
+ };
46
+ }
47
+ //# sourceMappingURL=devConnectUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["METRO_PORT","isValidIpv4","host","parts","split","length","every","part","test","value","Number","String","toUrlInput","raw","trimmed","trim","normalizeComputerHost","parsed","URL","hostname","buildMetroUrls","rawHost","expUrl","httpUrl","parseMetroQrPayload","payload","computerHost","source"],"sourceRoot":"../../../../src","sources":["features/devConnect/devConnectUtils.ts"],"mappings":";;AAAA,MAAMA,UAAU,GAAG,MAAM;AAYzB,SAASC,WAAWA,CAACC,IAAY,EAAW;EAC1C,MAAMC,KAAK,GAAGD,IAAI,CAACE,KAAK,CAAC,GAAG,CAAC;EAC7B,IAAID,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE,OAAO,KAAK;EAEpC,OAAOF,KAAK,CAACG,KAAK,CAAEC,IAAI,IAAK;IAC3B,IAAI,CAAC,WAAW,CAACC,IAAI,CAACD,IAAI,CAAC,EAAE,OAAO,KAAK;IACzC,MAAME,KAAK,GAAGC,MAAM,CAACH,IAAI,CAAC;IAC1B,OAAOE,KAAK,IAAI,CAAC,IAAIA,KAAK,IAAI,GAAG,IAAIE,MAAM,CAACF,KAAK,CAAC,KAAKF,IAAI;EAC7D,CAAC,CAAC;AACJ;AAEA,SAASK,UAAUA,CAACC,GAAW,EAAU;EACvC,MAAMC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;EAC1B,IAAI,8BAA8B,CAACP,IAAI,CAACM,OAAO,CAAC,EAAE;IAChD,OAAOA,OAAO;EAChB;EACA,OAAO,UAAUA,OAAO,EAAE;AAC5B;AAEA,OAAO,SAASE,qBAAqBA,CAACH,GAAW,EAAiB;EAChE,MAAMC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;EAC1B,IAAI,CAACD,OAAO,EAAE,OAAO,IAAI;EAEzB,IAAI;IACF,MAAMG,MAAM,GAAG,IAAIC,GAAG,CAACN,UAAU,CAACE,OAAO,CAAC,CAAC;IAC3C,MAAMZ,IAAI,GAAGe,MAAM,CAACE,QAAQ,CAACJ,IAAI,CAAC,CAAC;IACnC,OAAOd,WAAW,CAACC,IAAI,CAAC,GAAGA,IAAI,GAAG,IAAI;EACxC,CAAC,CAAC,MAAM;IACN,OAAO,IAAI;EACb;AACF;AAEA,OAAO,SAASkB,cAAcA,CAACC,OAAe,EAAoB;EAChE,MAAMnB,IAAI,GAAGc,qBAAqB,CAACK,OAAO,CAAC;EAC3C,IAAI,CAACnB,IAAI,EAAE,OAAO,IAAI;EAEtB,OAAO;IACLoB,MAAM,EAAE,SAASpB,IAAI,IAAIF,UAAU,EAAE;IACrCuB,OAAO,EAAE,UAAUrB,IAAI,IAAIF,UAAU;EACvC,CAAC;AACH;AAEA,OAAO,SAASwB,mBAAmBA,CAACC,OAAe,EAA+B;EAChF,MAAMC,YAAY,GAAGV,qBAAqB,CAACS,OAAO,CAAC;EACnD,IAAI,CAACC,YAAY,EAAE,OAAO,IAAI;EAC9B,OAAO;IAAEA,YAAY;IAAEC,MAAM,EAAEF;EAAQ,CAAC;AAC1C","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ import { DevConnectTab } from './DevConnectTab';
4
+ import { isCameraKitAvailable } from './cameraKit';
5
+ import { loadDevConnectPreferences } from './devConnectPreferences';
6
+ import { isSimulator } from './platformDetect';
7
+ import { daemonClient } from '../../utils/DaemonClient';
8
+ export { buildMetroUrls, normalizeComputerHost, parseMetroQrPayload } from './devConnectUtils';
9
+ export { loadDevConnectPreferences, restoreDevConnectSettingsToDaemon, saveComputerHost } from './devConnectPreferences';
10
+ export const createDevConnectFeature = () => {
11
+ const listeners = new Set();
12
+ let state = {
13
+ isSimulator: isSimulator(),
14
+ computerHost: '',
15
+ qrAvailable: isCameraKitAvailable(),
16
+ streaming: daemonClient.isConnected()
17
+ };
18
+ const notify = () => {
19
+ state = {
20
+ ...state,
21
+ streaming: daemonClient.isConnected()
22
+ };
23
+ listeners.forEach(listener => listener());
24
+ };
25
+ return {
26
+ name: 'devConnect',
27
+ label: 'DevConnect',
28
+ renderContent: DevConnectTab,
29
+ setup() {
30
+ loadDevConnectPreferences().then(preferences => {
31
+ state = {
32
+ ...state,
33
+ computerHost: preferences.computerHost
34
+ };
35
+ notify();
36
+ }).catch(() => {
37
+ notify();
38
+ });
39
+ },
40
+ getSnapshot: () => state,
41
+ cleanup() {
42
+ listeners.clear();
43
+ },
44
+ subscribe(listener) {
45
+ listeners.add(listener);
46
+ return () => {
47
+ listeners.delete(listener);
48
+ };
49
+ }
50
+ };
51
+ };
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["DevConnectTab","isCameraKitAvailable","loadDevConnectPreferences","isSimulator","daemonClient","buildMetroUrls","normalizeComputerHost","parseMetroQrPayload","restoreDevConnectSettingsToDaemon","saveComputerHost","createDevConnectFeature","listeners","Set","state","computerHost","qrAvailable","streaming","isConnected","notify","forEach","listener","name","label","renderContent","setup","then","preferences","catch","getSnapshot","cleanup","clear","subscribe","add","delete"],"sourceRoot":"../../../../src","sources":["features/devConnect/index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,oBAAoB,QAAQ,aAAa;AAClD,SAASC,yBAAyB,QAAQ,yBAAyB;AACnE,SAASC,WAAW,QAAQ,kBAAkB;AAC9C,SAASC,YAAY,QAAQ,0BAA0B;AAKvD,SACEC,cAAc,EACdC,qBAAqB,EACrBC,mBAAmB,QACd,mBAAmB;AAC1B,SACEL,yBAAyB,EACzBM,iCAAiC,EACjCC,gBAAgB,QACX,yBAAyB;AAEhC,OAAO,MAAMC,uBAAuB,GAAGA,CAAA,KAAqC;EAC1E,MAAMC,SAAS,GAAG,IAAIC,GAAG,CAAuB,CAAC;EACjD,IAAIC,KAAsB,GAAG;IAC3BV,WAAW,EAAEA,WAAW,CAAC,CAAC;IAC1BW,YAAY,EAAE,EAAE;IAChBC,WAAW,EAAEd,oBAAoB,CAAC,CAAC;IACnCe,SAAS,EAAEZ,YAAY,CAACa,WAAW,CAAC;EACtC,CAAC;EAED,MAAMC,MAAM,GAAGA,CAAA,KAAM;IACnBL,KAAK,GAAG;MACN,GAAGA,KAAK;MACRG,SAAS,EAAEZ,YAAY,CAACa,WAAW,CAAC;IACtC,CAAC;IACDN,SAAS,CAACQ,OAAO,CAAEC,QAAQ,IAAKA,QAAQ,CAAC,CAAC,CAAC;EAC7C,CAAC;EAED,OAAO;IACLC,IAAI,EAAE,YAAY;IAClBC,KAAK,EAAE,YAAY;IACnBC,aAAa,EAAEvB,aAAa;IAC5BwB,KAAKA,CAAA,EAAG;MACNtB,yBAAyB,CAAC,CAAC,CAACuB,IAAI,CAAEC,WAAW,IAAK;QAChDb,KAAK,GAAG;UACN,GAAGA,KAAK;UACRC,YAAY,EAAEY,WAAW,CAACZ;QAC5B,CAAC;QACDI,MAAM,CAAC,CAAC;MACV,CAAC,CAAC,CAACS,KAAK,CAAC,MAAM;QACbT,MAAM,CAAC,CAAC;MACV,CAAC,CAAC;IACJ,CAAC;IACDU,WAAW,EAAEA,CAAA,KAAMf,KAAK;IACxBgB,OAAOA,CAAA,EAAG;MACRlB,SAAS,CAACmB,KAAK,CAAC,CAAC;IACnB,CAAC;IACDC,SAASA,CAACX,QAAQ,EAAE;MAClBT,SAAS,CAACqB,GAAG,CAACZ,QAAQ,CAAC;MACvB,OAAO,MAAM;QACXT,SAAS,CAACsB,MAAM,CAACb,QAAQ,CAAC;MAC5B,CAAC;IACH;EACF,CAAC;AACH,CAAC","ignoreList":[]}