@godscene/playground-electron 1.7.11

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 (98) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -0
  3. package/dist/es/DeviceInteractionLayer.mjs +383 -0
  4. package/dist/es/PlaygroundApp.css +207 -0
  5. package/dist/es/PlaygroundApp.mjs +776 -0
  6. package/dist/es/PlaygroundPreview.mjs +29 -0
  7. package/dist/es/PlaygroundThemeProvider.mjs +10 -0
  8. package/dist/es/PreviewRenderer.mjs +270 -0
  9. package/dist/es/ScrcpyPanel.mjs +390 -0
  10. package/dist/es/SessionSetupPanel.css +299 -0
  11. package/dist/es/SessionSetupPanel.mjs +169 -0
  12. package/dist/es/components/Header/index.css +19 -0
  13. package/dist/es/components/Header/index.mjs +37 -0
  14. package/dist/es/components/Nav/index.css +15 -0
  15. package/dist/es/components/Nav/index.mjs +93 -0
  16. package/dist/es/components/WinControlTool/index.css +5 -0
  17. package/dist/es/components/WinControlTool/index.mjs +76 -0
  18. package/dist/es/controller/ai-config.mjs +40 -0
  19. package/dist/es/controller/auto-create.mjs +19 -0
  20. package/dist/es/controller/selectors.mjs +78 -0
  21. package/dist/es/controller/single-flight.mjs +13 -0
  22. package/dist/es/controller/types.mjs +0 -0
  23. package/dist/es/controller/usePlaygroundController.mjs +400 -0
  24. package/dist/es/icons/dropdown-chevron.mjs +61 -0
  25. package/dist/es/icons/midscene-logo.mjs +247 -0
  26. package/dist/es/icons/server-offline-background.mjs +102 -0
  27. package/dist/es/icons/server-offline-foreground.mjs +200 -0
  28. package/dist/es/index.mjs +7 -0
  29. package/dist/es/manual-interaction.mjs +56 -0
  30. package/dist/es/panels/PlaygroundConversationPanel.css +20 -0
  31. package/dist/es/panels/PlaygroundConversationPanel.mjs +140 -0
  32. package/dist/es/runtime-info.mjs +128 -0
  33. package/dist/es/scrcpy-preview.mjs +30 -0
  34. package/dist/es/scrcpy-stream.mjs +53 -0
  35. package/dist/es/session-setup.mjs +13 -0
  36. package/dist/es/session-state.mjs +32 -0
  37. package/dist/es/useServerStatus.mjs +120 -0
  38. package/dist/lib/DeviceInteractionLayer.js +434 -0
  39. package/dist/lib/PlaygroundApp.css +207 -0
  40. package/dist/lib/PlaygroundApp.js +821 -0
  41. package/dist/lib/PlaygroundPreview.js +63 -0
  42. package/dist/lib/PlaygroundThemeProvider.js +44 -0
  43. package/dist/lib/PreviewRenderer.js +304 -0
  44. package/dist/lib/ScrcpyPanel.js +424 -0
  45. package/dist/lib/SessionSetupPanel.css +299 -0
  46. package/dist/lib/SessionSetupPanel.js +217 -0
  47. package/dist/lib/components/Header/index.css +19 -0
  48. package/dist/lib/components/Header/index.js +81 -0
  49. package/dist/lib/components/Nav/index.css +15 -0
  50. package/dist/lib/components/Nav/index.js +127 -0
  51. package/dist/lib/components/WinControlTool/index.css +5 -0
  52. package/dist/lib/components/WinControlTool/index.js +110 -0
  53. package/dist/lib/controller/ai-config.js +80 -0
  54. package/dist/lib/controller/auto-create.js +59 -0
  55. package/dist/lib/controller/selectors.js +115 -0
  56. package/dist/lib/controller/single-flight.js +47 -0
  57. package/dist/lib/controller/types.js +18 -0
  58. package/dist/lib/controller/usePlaygroundController.js +434 -0
  59. package/dist/lib/icons/dropdown-chevron.js +95 -0
  60. package/dist/lib/icons/midscene-logo.js +281 -0
  61. package/dist/lib/icons/server-offline-background.js +136 -0
  62. package/dist/lib/icons/server-offline-foreground.js +234 -0
  63. package/dist/lib/index.js +56 -0
  64. package/dist/lib/manual-interaction.js +90 -0
  65. package/dist/lib/panels/PlaygroundConversationPanel.css +20 -0
  66. package/dist/lib/panels/PlaygroundConversationPanel.js +174 -0
  67. package/dist/lib/runtime-info.js +174 -0
  68. package/dist/lib/scrcpy-preview.js +79 -0
  69. package/dist/lib/scrcpy-stream.js +87 -0
  70. package/dist/lib/session-setup.js +47 -0
  71. package/dist/lib/session-state.js +69 -0
  72. package/dist/lib/useServerStatus.js +154 -0
  73. package/dist/types/DeviceInteractionLayer.d.ts +50 -0
  74. package/dist/types/PlaygroundApp.d.ts +14 -0
  75. package/dist/types/PlaygroundPreview.d.ts +22 -0
  76. package/dist/types/PlaygroundThemeProvider.d.ts +2 -0
  77. package/dist/types/PreviewRenderer.d.ts +27 -0
  78. package/dist/types/ScrcpyPanel.d.ts +21 -0
  79. package/dist/types/SessionSetupPanel.d.ts +16 -0
  80. package/dist/types/components/Header/index.d.ts +3 -0
  81. package/dist/types/components/Nav/index.d.ts +3 -0
  82. package/dist/types/components/WinControlTool/index.d.ts +3 -0
  83. package/dist/types/controller/ai-config.d.ts +5 -0
  84. package/dist/types/controller/auto-create.d.ts +15 -0
  85. package/dist/types/controller/selectors.d.ts +5 -0
  86. package/dist/types/controller/single-flight.d.ts +3 -0
  87. package/dist/types/controller/types.d.ts +36 -0
  88. package/dist/types/controller/usePlaygroundController.d.ts +16 -0
  89. package/dist/types/index.d.ts +13 -0
  90. package/dist/types/manual-interaction.d.ts +21 -0
  91. package/dist/types/panels/PlaygroundConversationPanel.d.ts +25 -0
  92. package/dist/types/runtime-info.d.ts +22 -0
  93. package/dist/types/scrcpy-preview.d.ts +11 -0
  94. package/dist/types/scrcpy-stream.d.ts +16 -0
  95. package/dist/types/session-setup.d.ts +2 -0
  96. package/dist/types/session-state.d.ts +9 -0
  97. package/dist/types/useServerStatus.d.ts +12 -0
  98. package/package.json +69 -0
@@ -0,0 +1,424 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ ScrcpyPanel: ()=>ScrcpyPanel
28
+ });
29
+ const jsx_runtime_namespaceObject = require("react/jsx-runtime");
30
+ const scrcpy_namespaceObject = require("@yume-chan/scrcpy");
31
+ const scrcpy_decoder_webcodecs_namespaceObject = require("@yume-chan/scrcpy-decoder-webcodecs");
32
+ const external_antd_namespaceObject = require("antd");
33
+ const external_react_namespaceObject = require("react");
34
+ const external_socket_io_client_namespaceObject = require("socket.io-client");
35
+ const external_scrcpy_preview_js_namespaceObject = require("./scrcpy-preview.js");
36
+ const external_scrcpy_stream_js_namespaceObject = require("./scrcpy-stream.js");
37
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
38
+ try {
39
+ var info = gen[key](arg);
40
+ var value = info.value;
41
+ } catch (error) {
42
+ reject(error);
43
+ return;
44
+ }
45
+ if (info.done) resolve(value);
46
+ else Promise.resolve(value).then(_next, _throw);
47
+ }
48
+ function _async_to_generator(fn) {
49
+ return function() {
50
+ var self = this, args = arguments;
51
+ return new Promise(function(resolve, reject) {
52
+ var gen = fn.apply(self, args);
53
+ function _next(value) {
54
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
55
+ }
56
+ function _throw(err) {
57
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
58
+ }
59
+ _next(void 0);
60
+ });
61
+ };
62
+ }
63
+ function _define_property(obj, key, value) {
64
+ if (key in obj) Object.defineProperty(obj, key, {
65
+ value: value,
66
+ enumerable: true,
67
+ configurable: true,
68
+ writable: true
69
+ });
70
+ else obj[key] = value;
71
+ return obj;
72
+ }
73
+ function _object_spread(target) {
74
+ for(var i = 1; i < arguments.length; i++){
75
+ var source = null != arguments[i] ? arguments[i] : {};
76
+ var ownKeys = Object.keys(source);
77
+ if ("function" == typeof Object.getOwnPropertySymbols) ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
78
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
79
+ }));
80
+ ownKeys.forEach(function(key) {
81
+ _define_property(target, key, source[key]);
82
+ });
83
+ }
84
+ return target;
85
+ }
86
+ function ScrcpyPanel_ownKeys(object, enumerableOnly) {
87
+ var keys = Object.keys(object);
88
+ if (Object.getOwnPropertySymbols) {
89
+ var symbols = Object.getOwnPropertySymbols(object);
90
+ if (enumerableOnly) symbols = symbols.filter(function(sym) {
91
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
92
+ });
93
+ keys.push.apply(keys, symbols);
94
+ }
95
+ return keys;
96
+ }
97
+ function _object_spread_props(target, source) {
98
+ source = null != source ? source : {};
99
+ if (Object.getOwnPropertyDescriptors) Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
100
+ else ScrcpyPanel_ownKeys(Object(source)).forEach(function(key) {
101
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
102
+ });
103
+ return target;
104
+ }
105
+ const { Text } = external_antd_namespaceObject.Typography;
106
+ function ScrcpyPanel({ connectingOverlay, deviceId, onStatusChange, renderErrorOverlay, serverUrl, metadataTimeoutMs = external_scrcpy_preview_js_namespaceObject.SCRCPY_METADATA_TIMEOUT_MS, reconnectInterval = 3000, viewportStyle }) {
107
+ const canvasStageRef = (0, external_react_namespaceObject.useRef)(null);
108
+ const socketRef = (0, external_react_namespaceObject.useRef)(null);
109
+ const decoderRef = (0, external_react_namespaceObject.useRef)(null);
110
+ const metadataTimeoutRef = (0, external_react_namespaceObject.useRef)(null);
111
+ const reconnectTimerRef = (0, external_react_namespaceObject.useRef)(null);
112
+ const ignoreDisconnectRef = (0, external_react_namespaceObject.useRef)(false);
113
+ const [status, setStatus] = (0, external_react_namespaceObject.useState)('connecting');
114
+ const [errorMessage, setErrorMessage] = (0, external_react_namespaceObject.useState)(null);
115
+ const [waitingStatusMessage, setWaitingStatusMessage] = (0, external_react_namespaceObject.useState)(()=>(0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
116
+ const [webCodecsSupported, setWebCodecsSupported] = (0, external_react_namespaceObject.useState)(true);
117
+ const [retryNonce, setRetryNonce] = (0, external_react_namespaceObject.useState)(0);
118
+ const statusText = (0, external_react_namespaceObject.useMemo)(()=>(0, external_scrcpy_preview_js_namespaceObject.getScrcpyPreviewStatusText)(status, waitingStatusMessage), [
119
+ status,
120
+ waitingStatusMessage
121
+ ]);
122
+ const showCustomErrorOverlay = ('error' === status || 'disconnected' === status) && Boolean(renderErrorOverlay);
123
+ const renderResolvedErrorOverlay = renderErrorOverlay;
124
+ const requestRetry = (0, external_react_namespaceObject.useCallback)(()=>{
125
+ setStatus('connecting');
126
+ setErrorMessage(null);
127
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
128
+ setRetryNonce((current)=>current + 1);
129
+ }, []);
130
+ (0, external_react_namespaceObject.useEffect)(()=>{
131
+ null == onStatusChange || onStatusChange(status, statusText);
132
+ }, [
133
+ onStatusChange,
134
+ status,
135
+ statusText
136
+ ]);
137
+ const clearCanvas = ()=>{
138
+ const stage = canvasStageRef.current;
139
+ if (!stage) return;
140
+ stage.replaceChildren();
141
+ };
142
+ const disposeDecoder = ()=>{
143
+ if (!decoderRef.current) return;
144
+ decoderRef.current.dispose();
145
+ decoderRef.current = null;
146
+ };
147
+ const clearMetadataTimeout = ()=>{
148
+ if (metadataTimeoutRef.current) {
149
+ clearTimeout(metadataTimeoutRef.current);
150
+ metadataTimeoutRef.current = null;
151
+ }
152
+ };
153
+ (0, external_react_namespaceObject.useEffect)(()=>{
154
+ if (!serverUrl) {
155
+ setStatus('error');
156
+ setErrorMessage('scrcpy preview metadata is missing a server URL.');
157
+ return;
158
+ }
159
+ if (!scrcpy_decoder_webcodecs_namespaceObject.WebCodecsVideoDecoder.isSupported) {
160
+ setWebCodecsSupported(false);
161
+ setStatus('error');
162
+ setErrorMessage('Current browser does not support WebCodecs, so live scrcpy preview is unavailable.');
163
+ return;
164
+ }
165
+ let disposed = false;
166
+ let connectTimer = null;
167
+ const cleanup = ()=>{
168
+ if (connectTimer) {
169
+ clearTimeout(connectTimer);
170
+ connectTimer = null;
171
+ }
172
+ clearMetadataTimeout();
173
+ if (reconnectTimerRef.current) {
174
+ clearTimeout(reconnectTimerRef.current);
175
+ reconnectTimerRef.current = null;
176
+ }
177
+ if (socketRef.current) {
178
+ socketRef.current.disconnect();
179
+ socketRef.current = null;
180
+ }
181
+ disposeDecoder();
182
+ clearCanvas();
183
+ };
184
+ const scheduleReconnect = ()=>{
185
+ if (disposed || reconnectTimerRef.current) return;
186
+ reconnectTimerRef.current = setTimeout(()=>{
187
+ reconnectTimerRef.current = null;
188
+ cleanup();
189
+ connect();
190
+ }, reconnectInterval);
191
+ };
192
+ const createDecoder = (codecId)=>_async_to_generator(function*() {
193
+ var _canvasStageRef_current;
194
+ const renderer = scrcpy_decoder_webcodecs_namespaceObject.WebGLVideoFrameRenderer.isSupported ? new scrcpy_decoder_webcodecs_namespaceObject.WebGLVideoFrameRenderer() : new scrcpy_decoder_webcodecs_namespaceObject.BitmapVideoFrameRenderer();
195
+ const canvas = renderer.canvas;
196
+ canvas.style.width = '100%';
197
+ canvas.style.height = '100%';
198
+ canvas.style.objectFit = 'contain';
199
+ clearCanvas();
200
+ null == (_canvasStageRef_current = canvasStageRef.current) || _canvasStageRef_current.appendChild(canvas);
201
+ const decoder = new scrcpy_decoder_webcodecs_namespaceObject.WebCodecsVideoDecoder({
202
+ codec: codecId,
203
+ renderer
204
+ });
205
+ return decoder;
206
+ })();
207
+ const connect = ()=>{
208
+ if (disposed) return;
209
+ ignoreDisconnectRef.current = false;
210
+ setStatus('connecting');
211
+ setErrorMessage(null);
212
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
213
+ const socket = (0, external_socket_io_client_namespaceObject.io)(serverUrl, {
214
+ withCredentials: true,
215
+ reconnection: false,
216
+ timeout: 10000,
217
+ transports: [
218
+ 'websocket'
219
+ ]
220
+ });
221
+ socketRef.current = socket;
222
+ const videoStream = (0, external_scrcpy_stream_js_namespaceObject.createScrcpyVideoStream)(socket);
223
+ socket.on('connect', ()=>{
224
+ setStatus('waiting-for-stream');
225
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
226
+ clearMetadataTimeout();
227
+ metadataTimeoutRef.current = setTimeout(()=>{
228
+ if (disposed) return;
229
+ ignoreDisconnectRef.current = true;
230
+ setStatus('error');
231
+ setErrorMessage((0, external_scrcpy_preview_js_namespaceObject.getScrcpyMetadataTimeoutMessage)(metadataTimeoutMs));
232
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
233
+ socket.disconnect();
234
+ socketRef.current = null;
235
+ scheduleReconnect();
236
+ }, metadataTimeoutMs);
237
+ socket.emit('connect-device', _object_spread_props(_object_spread({}, 'string' == typeof deviceId && deviceId.trim() ? {
238
+ deviceId: deviceId.trim()
239
+ } : {}), {
240
+ maxSize: 1024
241
+ }));
242
+ });
243
+ socket.on('preview-status', (event)=>{
244
+ if (disposed || !(0, external_scrcpy_preview_js_namespaceObject.isScrcpyPreviewStatusEvent)(event)) return;
245
+ setStatus('waiting-for-stream');
246
+ setWaitingStatusMessage(event.message);
247
+ });
248
+ socket.on('video-metadata', (metadata)=>_async_to_generator(function*() {
249
+ try {
250
+ clearMetadataTimeout();
251
+ disposeDecoder();
252
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getScrcpyDecoderStatusText)());
253
+ const codecId = metadata.codec ? metadata.codec : scrcpy_namespaceObject.ScrcpyVideoCodecId.H264;
254
+ const decoder = yield createDecoder(codecId);
255
+ decoderRef.current = decoder;
256
+ videoStream.pipeTo(decoder.writable).catch((error)=>{
257
+ if (disposed) return;
258
+ setStatus('error');
259
+ setErrorMessage(error.message);
260
+ scheduleReconnect();
261
+ });
262
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
263
+ setStatus('connected');
264
+ } catch (error) {
265
+ if (disposed) return;
266
+ setStatus('error');
267
+ setErrorMessage(error instanceof Error ? error.message : 'Failed to start decoder.');
268
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
269
+ scheduleReconnect();
270
+ }
271
+ })());
272
+ socket.on('disconnect', ()=>{
273
+ clearMetadataTimeout();
274
+ if (disposed) return;
275
+ if (ignoreDisconnectRef.current) {
276
+ ignoreDisconnectRef.current = false;
277
+ return;
278
+ }
279
+ setStatus('disconnected');
280
+ setErrorMessage(null);
281
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
282
+ scheduleReconnect();
283
+ });
284
+ socket.on('connect_error', (error)=>{
285
+ clearMetadataTimeout();
286
+ if (disposed) return;
287
+ setStatus('error');
288
+ setErrorMessage(error.message);
289
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
290
+ scheduleReconnect();
291
+ });
292
+ socket.on('error', (error)=>{
293
+ clearMetadataTimeout();
294
+ if (disposed) return;
295
+ setStatus('error');
296
+ setErrorMessage(error.message);
297
+ setWaitingStatusMessage((0, external_scrcpy_preview_js_namespaceObject.getDefaultScrcpyWaitingStatusText)());
298
+ scheduleReconnect();
299
+ });
300
+ };
301
+ connectTimer = setTimeout(()=>{
302
+ connectTimer = null;
303
+ connect();
304
+ }, 0);
305
+ return ()=>{
306
+ disposed = true;
307
+ cleanup();
308
+ };
309
+ }, [
310
+ deviceId,
311
+ metadataTimeoutMs,
312
+ reconnectInterval,
313
+ retryNonce,
314
+ serverUrl
315
+ ]);
316
+ return /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
317
+ style: {
318
+ height: '100%',
319
+ display: 'flex',
320
+ flexDirection: 'column'
321
+ },
322
+ children: [
323
+ errorMessage && !showCustomErrorOverlay ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_antd_namespaceObject.Alert, {
324
+ type: "warning",
325
+ showIcon: true,
326
+ style: {
327
+ marginBottom: 12
328
+ },
329
+ message: statusText,
330
+ description: errorMessage
331
+ }) : null,
332
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
333
+ style: _object_spread({
334
+ position: 'relative',
335
+ flex: 1,
336
+ minHeight: 0,
337
+ display: 'flex',
338
+ alignItems: 'center',
339
+ justifyContent: 'center',
340
+ background: '#111827',
341
+ borderRadius: 8,
342
+ overflow: 'hidden'
343
+ }, viewportStyle),
344
+ children: [
345
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
346
+ ref: canvasStageRef,
347
+ style: {
348
+ position: 'absolute',
349
+ inset: 0,
350
+ display: 'flex',
351
+ alignItems: 'center',
352
+ justifyContent: 'center'
353
+ }
354
+ }),
355
+ 'connected' !== status ? showCustomErrorOverlay && renderResolvedErrorOverlay ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
356
+ style: {
357
+ position: 'absolute',
358
+ inset: 0,
359
+ zIndex: 1
360
+ },
361
+ children: renderResolvedErrorOverlay({
362
+ errorMessage,
363
+ retry: requestRetry,
364
+ status,
365
+ statusText
366
+ })
367
+ }) : 'error' !== status && 'disconnected' !== status && connectingOverlay ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)("div", {
368
+ style: {
369
+ position: 'absolute',
370
+ inset: 0,
371
+ zIndex: 1
372
+ },
373
+ children: connectingOverlay
374
+ }) : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsxs)("div", {
375
+ style: {
376
+ position: 'absolute',
377
+ inset: 0,
378
+ display: 'flex',
379
+ flexDirection: 'column',
380
+ alignItems: 'center',
381
+ justifyContent: 'center',
382
+ gap: 12,
383
+ color: '#fff',
384
+ background: 'rgba(17, 24, 39, 0.78)',
385
+ textAlign: 'center',
386
+ padding: 24,
387
+ zIndex: 1
388
+ },
389
+ children: [
390
+ 'error' === status ? null : /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(external_antd_namespaceObject.Spin, {
391
+ spinning: true
392
+ }),
393
+ /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Text, {
394
+ style: {
395
+ color: '#fff'
396
+ },
397
+ children: statusText
398
+ }),
399
+ 'error' === status ? /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Text, {
400
+ style: {
401
+ color: '#d1d5db'
402
+ },
403
+ children: "Scrcpy preview will retry automatically."
404
+ }) : null,
405
+ !webCodecsSupported && /*#__PURE__*/ (0, jsx_runtime_namespaceObject.jsx)(Text, {
406
+ style: {
407
+ color: '#d1d5db'
408
+ },
409
+ children: "Please use a modern Chromium browser to view the stream."
410
+ })
411
+ ]
412
+ }) : null
413
+ ]
414
+ })
415
+ ]
416
+ });
417
+ }
418
+ exports.ScrcpyPanel = __webpack_exports__.ScrcpyPanel;
419
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
420
+ "ScrcpyPanel"
421
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
422
+ Object.defineProperty(exports, '__esModule', {
423
+ value: true
424
+ });