@omg-dev/app 0.6.210 → 0.6.212
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.
- package/dist-lib/{ChangelogPage-Dp-ue7MR.js → ChangelogPage-DCNaY-sr.js} +13 -1
- package/dist-lib/{SessionFilesPanel-BEsMBxDe.js → SessionFilesPanel-CfkEKcZI.js} +1 -1
- package/dist-lib/{TermView-pH7R8GPy.js → TermView-o2MgHCz_.js} +2 -2
- package/dist-lib/{board-page-CcyFMSbr.js → board-page-z1Jjd9wk.js} +1 -1
- package/dist-lib/{chat-engine-DvwCv6Tr.js → chat-engine-DLGMy3IH.js} +1 -1
- package/dist-lib/{coding-agents-page-CtwEQuEu.js → coding-agents-page-BSCXdLWC.js} +1 -1
- package/dist-lib/{computer-page-BXjUKQ19.js → computer-page-_4TYKC7j.js} +144 -165
- package/dist-lib/{computer-pointer-C3VB2laK.js → computer-pointer-CZ-tnHkw.js} +1309 -1157
- package/dist-lib/{connectors-page-BpnBb51Z.js → connectors-page-CopZTieF.js} +1 -1
- package/dist-lib/{embedded-DbPku-MI.js → embedded-B_ymIz97.js} +15 -15
- package/dist-lib/expo-signin-sheet-BzsKPAam.js +246 -0
- package/dist-lib/index.js +1 -1
- package/dist-lib/{keyboard-pmRTmquI.js → keyboard-OCqD2cDm.js} +1 -1
- package/dist-lib/{resume-session-sheet-BbShw8SQ.js → resume-session-sheet-9fMPRNvR.js} +1 -1
- package/dist-lib/{session-token-usage-ZG7DpMu1.js → session-token-usage-B67WiKJN.js} +1 -1
- package/dist-lib/{shipped-page-BqKBW8p0.js → shipped-page-DpnnMlPz.js} +1 -1
- package/dist-lib/{streamdown-response-C-LQgtwq.js → streamdown-response-CsVevp3-.js} +1 -1
- package/dist-lib/styles.css +1 -1
- package/package.json +3 -3
- package/dist-lib/expo-signin-sheet-DLKpuDBL.js +0 -234
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { Q as n } from "./embedded-
|
|
2
|
+
import { Q as n } from "./embedded-B_ymIz97.js";
|
|
3
3
|
const t = `# Changelog
|
|
4
4
|
|
|
5
5
|
Recent product updates and deployment notes.
|
|
6
6
|
|
|
7
|
+
## October 9, 2026 - Clipboard support for older Computers (v0.6.212)
|
|
8
|
+
|
|
9
|
+
- Older cloud Computers install the missing clipboard helper when Copy or Paste needs it. Concurrent requests share one installation.
|
|
10
|
+
- Local Computers show the command to install the helper when it is missing.
|
|
11
|
+
|
|
12
|
+
## October 9, 2026 - Computer sign-in and clipboard fixes (v0.6.211)
|
|
13
|
+
|
|
14
|
+
- Expo sign-in opens in the Computer browser even when Linux already has a browser opener installed.
|
|
15
|
+
- Closing and retrying sign-in keeps the browser ready. A Computer can recover an orphan sign-in browser that blocks startup.
|
|
16
|
+
- Copy and Paste work in the full Computer view and the Expo sign-in sheet, with desktop shortcuts, touch buttons, and a keyboard paste fallback. Text keeps Unicode characters and line breaks.
|
|
17
|
+
- New Expo apps use Android safe areas and a keyboard layout that follows the focused field.
|
|
18
|
+
|
|
7
19
|
## October 9, 2026 - Shorter audio settings (v0.6.210)
|
|
8
20
|
|
|
9
21
|
- Web audio settings use two controls and one short status line. Choose Auto, Cloud, or Local and your language.
|
|
@@ -2,7 +2,7 @@ import { jsx as e, jsxs as o, Fragment as te } from "react/jsx-runtime";
|
|
|
2
2
|
import { memo as ne, useState as c, useRef as E, useCallback as v, useEffect as T, useMemo as q, Suspense as U } from "react";
|
|
3
3
|
import { createPortal as re } from "react-dom";
|
|
4
4
|
import { cn as y } from "cnfast";
|
|
5
|
-
import { F as oe, ab as se, aa as W, ac as ae, X as I, ad as ie, ae as le, L as H, af as de, E as ce, m as me, ag as j } from "./embedded-
|
|
5
|
+
import { F as oe, ab as se, aa as W, ac as ae, X as I, ad as ie, ae as le, L as H, af as de, E as ce, m as me, ag as j } from "./embedded-B_ymIz97.js";
|
|
6
6
|
import { c as ue } from "./create-BOwd_pad.js";
|
|
7
7
|
/**
|
|
8
8
|
* @license lucide-react v0.577.0 - ISC
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs as U, jsx as F, Fragment as vA } from "react/jsx-runtime";
|
|
2
2
|
import { useState as L, useRef as R, useEffect as p, useCallback as q } from "react";
|
|
3
|
-
import { F as ZA, q as wQ, X as CA, ah as sQ, E as tQ, ai as eQ, a9 as aQ, aa as MQ, aj as hQ, R as NQ, m as cQ } from "./embedded-
|
|
4
|
-
import { K as jA, C as PA } from "./keyboard-
|
|
3
|
+
import { F as ZA, q as wQ, X as CA, ah as sQ, E as tQ, ai as eQ, a9 as aQ, aa as MQ, aj as hQ, R as NQ, m as cQ } from "./embedded-B_ymIz97.js";
|
|
4
|
+
import { K as jA, C as PA } from "./keyboard-OCqD2cDm.js";
|
|
5
5
|
/**
|
|
6
6
|
* @license lucide-react v0.577.0 - ISC
|
|
7
7
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as r, jsxs as c } from "react/jsx-runtime";
|
|
2
2
|
import { useState as x, useEffect as h, useMemo as b } from "react";
|
|
3
|
-
import { H as y, I as N, J as w, N as k, L as v, O as I, l as A, j } from "./embedded-
|
|
3
|
+
import { H as y, I as N, J as w, N as k, L as v, O as I, l as A, j } from "./embedded-B_ymIz97.js";
|
|
4
4
|
import { cn as g } from "cnfast";
|
|
5
5
|
const u = {
|
|
6
6
|
"needs-you": "Needs you",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as ao } from "react/jsx-runtime";
|
|
2
2
|
import { useRef as Dt, useCallback as Lt, useSyncExternalStore as ut, useEffect as so } from "react";
|
|
3
3
|
import { g as io } from "./_commonjsHelpers-C6fGbg64.js";
|
|
4
|
-
import { ao as uo } from "./embedded-
|
|
4
|
+
import { ao as uo } from "./embedded-B_ymIz97.js";
|
|
5
5
|
var Ar = "vercel.ai.error", co = Symbol.for(Ar), Ut, Ft, se = class Nr extends (Ft = Error, Ut = co, Ft) {
|
|
6
6
|
/**
|
|
7
7
|
* Creates an AI SDK Error.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs as t, jsx as e, Fragment as M } from "react/jsx-runtime";
|
|
2
|
-
import { n as Q, R as z, B as u, L as R, p as j, q as E, M as Y, s as U, u as D, v as f, T as _, w as L, x as Z, y as T, z as ee, E as ne, X as te, K as se } from "./embedded-
|
|
2
|
+
import { n as Q, R as z, B as u, L as R, p as j, q as E, M as Y, s as U, u as D, v as f, T as _, w as L, x as Z, y as T, z as ee, E as ne, X as te, K as se } from "./embedded-B_ymIz97.js";
|
|
3
3
|
import { cn as w } from "cnfast";
|
|
4
4
|
import { useState as O } from "react";
|
|
5
5
|
function K(l) {
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { R as ae, a as ce,
|
|
4
|
-
import { F as ne, aa as Z, a9 as
|
|
5
|
-
import { K as
|
|
1
|
+
import { jsxs as l, jsx as n, Fragment as I } from "react/jsx-runtime";
|
|
2
|
+
import { useState as C, useRef as u, useCallback as p, useEffect as y } from "react";
|
|
3
|
+
import { R as ae, a as ce, b as ie, s as le, r as ue, d as de, c as Q } from "./computer-pointer-CZ-tnHkw.js";
|
|
4
|
+
import { F as ne, aa as Z, a9 as me, B as b, R as pe, X as he, L as ee, ak as fe } from "./embedded-B_ymIz97.js";
|
|
5
|
+
import { K as ve, C as ye } from "./keyboard-OCqD2cDm.js";
|
|
6
6
|
/**
|
|
7
7
|
* @license lucide-react v0.577.0 - ISC
|
|
8
8
|
*
|
|
9
9
|
* This source code is licensed under the ISC license.
|
|
10
10
|
* See the LICENSE file in the root directory of this source tree.
|
|
11
11
|
*/
|
|
12
|
-
const
|
|
12
|
+
const be = [
|
|
13
13
|
["rect", { width: "8", height: "4", x: "8", y: "2", rx: "1", ry: "1", key: "tgr4d6" }],
|
|
14
14
|
["path", { d: "M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2", key: "4jdomd" }],
|
|
15
15
|
["path", { d: "M16 4h2a2 2 0 0 1 2 2v4", key: "3hqy98" }],
|
|
16
16
|
["path", { d: "M21 14H11", key: "1bme5i" }],
|
|
17
17
|
["path", { d: "m15 10-4 4 4 4", key: "5dvupr" }]
|
|
18
|
-
],
|
|
18
|
+
], ge = ne("clipboard-copy", be);
|
|
19
19
|
/**
|
|
20
20
|
* @license lucide-react v0.577.0 - ISC
|
|
21
21
|
*
|
|
22
22
|
* This source code is licensed under the ISC license.
|
|
23
23
|
* See the LICENSE file in the root directory of this source tree.
|
|
24
24
|
*/
|
|
25
|
-
const
|
|
25
|
+
const we = [
|
|
26
26
|
[
|
|
27
27
|
"path",
|
|
28
28
|
{
|
|
@@ -30,217 +30,196 @@ const ye = [
|
|
|
30
30
|
key: "edeuup"
|
|
31
31
|
}
|
|
32
32
|
]
|
|
33
|
-
],
|
|
33
|
+
], xe = ne("mouse-pointer-2", we), X = "The Computer could not start. Try again.";
|
|
34
34
|
function te(d) {
|
|
35
|
-
const
|
|
36
|
-
if (!
|
|
35
|
+
const h = d.trim();
|
|
36
|
+
if (!h) return X;
|
|
37
37
|
try {
|
|
38
|
-
const c = JSON.parse(
|
|
38
|
+
const c = JSON.parse(h);
|
|
39
39
|
if (c && typeof c == "object" && "error" in c) {
|
|
40
|
-
const
|
|
41
|
-
if (typeof
|
|
40
|
+
const g = c.error;
|
|
41
|
+
if (typeof g == "string" && g.trim()) return g.trim();
|
|
42
42
|
}
|
|
43
|
-
return
|
|
43
|
+
return X;
|
|
44
44
|
} catch {
|
|
45
|
-
return
|
|
45
|
+
return h.startsWith("<") ? X : h;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
function
|
|
49
|
-
const [c,
|
|
48
|
+
function Me({ active: d, onClose: h }) {
|
|
49
|
+
const [c, g] = C(null), [w, x] = C("idle"), [k, M] = C(null), [m, K] = C(!0), [E, H] = C(null), [Y, q] = C(
|
|
50
50
|
typeof window < "u" && window.matchMedia?.("(pointer: coarse)").matches
|
|
51
|
-
),
|
|
51
|
+
), U = u(null), f = u(null), T = u(null), i = u(null), P = u(null), j = u(null), L = u(null), V = u(0), A = p(async () => {
|
|
52
52
|
try {
|
|
53
53
|
const e = await Z("/api/computer/status");
|
|
54
54
|
if (!e.ok) return;
|
|
55
|
-
|
|
55
|
+
g(await e.json());
|
|
56
56
|
} catch {
|
|
57
57
|
}
|
|
58
58
|
}, []);
|
|
59
|
-
|
|
59
|
+
y(() => {
|
|
60
60
|
if (!d) return;
|
|
61
61
|
A();
|
|
62
62
|
const e = setInterval(() => void A(), 5e3);
|
|
63
63
|
return () => clearInterval(e);
|
|
64
64
|
}, [d, A]);
|
|
65
|
-
const N =
|
|
65
|
+
const N = p(() => {
|
|
66
66
|
try {
|
|
67
|
-
i.current?.disconnect();
|
|
67
|
+
f.current?.dispose(), f.current = null, i.current?.disconnect();
|
|
68
68
|
} catch {
|
|
69
69
|
}
|
|
70
70
|
i.current = null;
|
|
71
|
-
}, []), O =
|
|
72
|
-
if (!(i.current || !
|
|
73
|
-
|
|
71
|
+
}, []), O = p(async () => {
|
|
72
|
+
if (!(i.current || !T.current)) {
|
|
73
|
+
x("connecting"), M(null);
|
|
74
74
|
try {
|
|
75
|
-
const e = await
|
|
75
|
+
const e = await me("/api/computer"), t = new ae(T.current, new ce(e), {
|
|
76
76
|
shared: !0
|
|
77
77
|
});
|
|
78
|
-
t.scaleViewport = !0, t.background = "#0b0b0d", t.showDotCursor = !0, t.viewOnly = m, t.addEventListener("connect", () =>
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
78
|
+
t.scaleViewport = !0, t.background = "#0b0b0d", t.showDotCursor = !0, t.viewOnly = m, t.addEventListener("connect", () => x("live"));
|
|
79
|
+
const s = ie(t, U.current, {
|
|
80
|
+
notice: H,
|
|
81
|
+
readRemoteText: ue,
|
|
82
|
+
setRemoteText: le,
|
|
83
|
+
focusKeyboard: () => P.current?.focus({ preventScroll: !0 }),
|
|
84
|
+
takeControl: () => K(!1)
|
|
85
|
+
});
|
|
86
|
+
f.current = s, t.addEventListener("disconnect", () => {
|
|
87
|
+
s.dispose(), f.current === s && (f.current = null), i.current = null, x("idle");
|
|
83
88
|
}), i.current = t;
|
|
84
89
|
} catch (e) {
|
|
85
|
-
|
|
90
|
+
x("idle"), M(e instanceof Error ? e.message : "could not open the screen");
|
|
86
91
|
}
|
|
87
92
|
}
|
|
88
93
|
}, [m]);
|
|
89
|
-
|
|
94
|
+
y(() => {
|
|
90
95
|
i.current && (i.current.viewOnly = m);
|
|
91
|
-
}, [m]),
|
|
92
|
-
!d || !c || c.running || !c.deps.ok ||
|
|
93
|
-
}, [d, c?.running, c?.deps.ok,
|
|
96
|
+
}, [m]), y(() => {
|
|
97
|
+
!d || !c || c.running || !c.deps.ok || w === "starting" || k || $();
|
|
98
|
+
}, [d, c?.running, c?.deps.ok, w, k]), y(() => {
|
|
94
99
|
if (!d) {
|
|
95
100
|
N();
|
|
96
101
|
return;
|
|
97
102
|
}
|
|
98
103
|
c?.running && !i.current && O();
|
|
99
|
-
}, [d, c?.running, O, N]),
|
|
100
|
-
const
|
|
101
|
-
() =>
|
|
104
|
+
}, [d, c?.running, O, N]), y(() => N, [N]);
|
|
105
|
+
const D = p(
|
|
106
|
+
() => T.current?.querySelector("canvas") ?? null,
|
|
102
107
|
[]
|
|
103
|
-
),
|
|
104
|
-
(e, t,
|
|
105
|
-
const r =
|
|
106
|
-
!r || !
|
|
108
|
+
), R = p(
|
|
109
|
+
(e, t, s = 0) => {
|
|
110
|
+
const r = D(), o = j.current;
|
|
111
|
+
!r || !o || de(r, o, e, t, s);
|
|
107
112
|
},
|
|
108
|
-
[
|
|
109
|
-
),
|
|
113
|
+
[D]
|
|
114
|
+
), J = p(
|
|
110
115
|
(e, t) => {
|
|
111
|
-
const
|
|
112
|
-
if (!
|
|
113
|
-
const r =
|
|
116
|
+
const s = D();
|
|
117
|
+
if (!s) return;
|
|
118
|
+
const r = s.getBoundingClientRect(), o = j.current ?? { x: r.left + r.width / 2, y: r.top + r.height / 2 };
|
|
114
119
|
j.current = {
|
|
115
|
-
x: Math.min(r.right - 1, Math.max(r.left,
|
|
116
|
-
y: Math.min(r.bottom - 1, Math.max(r.top,
|
|
117
|
-
},
|
|
120
|
+
x: Math.min(r.right - 1, Math.max(r.left, o.x + e)),
|
|
121
|
+
y: Math.min(r.bottom - 1, Math.max(r.top, o.y + t))
|
|
122
|
+
}, R("mousemove", 0);
|
|
118
123
|
},
|
|
119
|
-
[
|
|
120
|
-
),
|
|
124
|
+
[D, R]
|
|
125
|
+
), B = p(
|
|
121
126
|
(e) => {
|
|
122
|
-
|
|
127
|
+
R("mousedown", e === 2 ? 2 : 1, e), R("mouseup", 0, e);
|
|
123
128
|
},
|
|
124
|
-
[
|
|
125
|
-
),
|
|
126
|
-
|
|
127
|
-
const e =
|
|
129
|
+
[R]
|
|
130
|
+
), W = u(null);
|
|
131
|
+
y(() => {
|
|
132
|
+
const e = W.current;
|
|
128
133
|
if (!e) return;
|
|
129
|
-
const t = (
|
|
130
|
-
if (
|
|
131
|
-
const a =
|
|
132
|
-
|
|
133
|
-
},
|
|
134
|
-
|
|
135
|
-
const a =
|
|
136
|
-
if (!a ||
|
|
137
|
-
const
|
|
138
|
-
(Math.abs(
|
|
139
|
-
const
|
|
140
|
-
|
|
141
|
-
}, r = (
|
|
142
|
-
|
|
143
|
-
const a =
|
|
144
|
-
|
|
134
|
+
const t = (o) => {
|
|
135
|
+
if (o.preventDefault(), o.touches.length !== 1) return;
|
|
136
|
+
const a = o.touches[0];
|
|
137
|
+
L.current = { x: a.clientX, y: a.clientY, moved: !1, at: Date.now() };
|
|
138
|
+
}, s = (o) => {
|
|
139
|
+
o.preventDefault();
|
|
140
|
+
const a = L.current;
|
|
141
|
+
if (!a || o.touches.length !== 1) return;
|
|
142
|
+
const S = o.touches[0], F = S.clientX - a.x, _ = S.clientY - a.y;
|
|
143
|
+
(Math.abs(F) > 3 || Math.abs(_) > 3) && (a.moved = !0);
|
|
144
|
+
const G = Math.min(2.5, 1 + Math.hypot(F, _) / 12);
|
|
145
|
+
J(F * G, _ * G), a.x = S.clientX, a.y = S.clientY;
|
|
146
|
+
}, r = (o) => {
|
|
147
|
+
o.preventDefault();
|
|
148
|
+
const a = L.current;
|
|
149
|
+
L.current = null, a && !a.moved && Date.now() - a.at < 400 && B(0);
|
|
145
150
|
};
|
|
146
|
-
return e.addEventListener("touchstart", t, { passive: !1 }), e.addEventListener("touchmove",
|
|
147
|
-
e.removeEventListener("touchstart", t), e.removeEventListener("touchmove",
|
|
151
|
+
return e.addEventListener("touchstart", t, { passive: !1 }), e.addEventListener("touchmove", s, { passive: !1 }), e.addEventListener("touchend", r, { passive: !1 }), e.addEventListener("touchcancel", r, { passive: !1 }), () => {
|
|
152
|
+
e.removeEventListener("touchstart", t), e.removeEventListener("touchmove", s), e.removeEventListener("touchend", r), e.removeEventListener("touchcancel", r);
|
|
148
153
|
};
|
|
149
|
-
}, [
|
|
150
|
-
const
|
|
151
|
-
|
|
154
|
+
}, [J, B, c?.running, m, Y]);
|
|
155
|
+
const re = p(() => {
|
|
156
|
+
K(!1), P.current?.focus();
|
|
152
157
|
}, []);
|
|
153
|
-
|
|
154
|
-
if (!
|
|
155
|
-
const e = setTimeout(() =>
|
|
158
|
+
y(() => {
|
|
159
|
+
if (!E) return;
|
|
160
|
+
const e = setTimeout(() => H(null), 1800);
|
|
156
161
|
return () => clearTimeout(e);
|
|
157
|
-
}, [
|
|
158
|
-
const
|
|
159
|
-
|
|
160
|
-
return !t || !e ? !1 : (t.viewOnly = !1, S(!1), t.clipboardPasteFrom(e), t.sendKey(65507, "ControlLeft", !0), t.sendKey(118, "KeyV", !0), t.sendKey(118, "KeyV", !1), t.sendKey(65507, "ControlLeft", !1), !0);
|
|
161
|
-
}, []), se = l(async () => {
|
|
162
|
-
let e = "";
|
|
163
|
-
try {
|
|
164
|
-
e = await navigator.clipboard.readText();
|
|
165
|
-
} catch {
|
|
166
|
-
B(), h("Use the keyboard's Paste menu");
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
if (!e) {
|
|
170
|
-
h("Your clipboard is empty");
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
h(_(e) ? "Pasted" : "Not connected");
|
|
174
|
-
}, [B, _]), oe = l(async () => {
|
|
175
|
-
if (R)
|
|
176
|
-
try {
|
|
177
|
-
await navigator.clipboard.writeText(R), h("Copied");
|
|
178
|
-
} catch {
|
|
179
|
-
h("Copy was blocked by the browser");
|
|
180
|
-
}
|
|
181
|
-
}, [R]), G = async () => {
|
|
182
|
-
k("starting"), M(null);
|
|
162
|
+
}, [E]);
|
|
163
|
+
const se = () => f.current?.pasteFromDevice(), oe = () => f.current?.copy(), $ = async () => {
|
|
164
|
+
x("starting"), M(null);
|
|
183
165
|
try {
|
|
184
166
|
const e = await Z("/api/computer/start", { method: "POST" });
|
|
185
167
|
if (!e.ok) throw new Error(te(await e.text()));
|
|
186
|
-
|
|
168
|
+
g(await e.json());
|
|
187
169
|
} catch (e) {
|
|
188
|
-
M(e instanceof Error ? e.message : te("")),
|
|
170
|
+
M(e instanceof Error ? e.message : te("")), x("idle");
|
|
189
171
|
}
|
|
190
|
-
},
|
|
172
|
+
}, v = c?.deps, z = !!c?.running;
|
|
191
173
|
return (
|
|
192
174
|
// Full bleed: the screen is the page. No title, no chrome, no padding --
|
|
193
175
|
// every pixel spent on framing is a pixel not spent on the desktop.
|
|
194
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ l(
|
|
195
177
|
"div",
|
|
196
178
|
{
|
|
179
|
+
ref: U,
|
|
197
180
|
className: "relative h-full min-h-0 w-full overflow-hidden bg-[#0b0b0d]",
|
|
198
181
|
onPointerDownCapture: (e) => {
|
|
199
182
|
if (!e.isTrusted) return;
|
|
200
183
|
const t = Date.now();
|
|
201
184
|
if (e.pointerType !== "mouse") {
|
|
202
|
-
|
|
185
|
+
V.current = t, q((s) => s || !0);
|
|
203
186
|
return;
|
|
204
187
|
}
|
|
205
|
-
t -
|
|
188
|
+
t - V.current < 1e3 || q((s) => s && !1);
|
|
206
189
|
},
|
|
207
190
|
children: [
|
|
208
191
|
/* @__PURE__ */ n(
|
|
209
192
|
"div",
|
|
210
193
|
{
|
|
211
|
-
ref:
|
|
194
|
+
ref: T,
|
|
212
195
|
className: "absolute inset-0 touch-none select-none [-webkit-touch-callout:none] [overscroll-behavior:none]"
|
|
213
196
|
}
|
|
214
197
|
),
|
|
215
|
-
|
|
198
|
+
z && !m && Y ? /* @__PURE__ */ n(
|
|
216
199
|
"div",
|
|
217
200
|
{
|
|
218
|
-
ref:
|
|
201
|
+
ref: W,
|
|
219
202
|
className: "absolute inset-0 z-[6] touch-none select-none",
|
|
220
203
|
onContextMenu: (e) => {
|
|
221
|
-
e.preventDefault(),
|
|
204
|
+
e.preventDefault(), B(2);
|
|
222
205
|
}
|
|
223
206
|
}
|
|
224
207
|
) : null,
|
|
225
208
|
/* @__PURE__ */ n(
|
|
226
209
|
"textarea",
|
|
227
210
|
{
|
|
228
|
-
ref:
|
|
211
|
+
ref: P,
|
|
229
212
|
"aria-hidden": !0,
|
|
230
213
|
tabIndex: -1,
|
|
231
214
|
className: "pointer-events-none absolute size-px opacity-0",
|
|
232
215
|
autoCapitalize: "off",
|
|
233
216
|
autoCorrect: "off",
|
|
234
217
|
spellCheck: !1,
|
|
235
|
-
onPaste: (e) => {
|
|
236
|
-
const t = e.clipboardData.getData("text");
|
|
237
|
-
t && (e.preventDefault(), e.currentTarget.value = "", h(_(t) ? "Pasted" : "Not connected"));
|
|
238
|
-
},
|
|
239
218
|
onChange: (e) => {
|
|
240
|
-
const t = i.current,
|
|
219
|
+
const t = i.current, s = e.target.value;
|
|
241
220
|
if (e.target.value = "", !!t)
|
|
242
|
-
for (const r of
|
|
243
|
-
const
|
|
221
|
+
for (const r of s) {
|
|
222
|
+
const o = r.codePointAt(0) ?? 0, a = o < 256 ? o : 16777216 + o;
|
|
244
223
|
t.sendKey(a, null, !0), t.sendKey(a, null, !1);
|
|
245
224
|
}
|
|
246
225
|
},
|
|
@@ -261,59 +240,59 @@ function Ne({ active: d, onClose: p }) {
|
|
|
261
240
|
}
|
|
262
241
|
}
|
|
263
242
|
),
|
|
264
|
-
/* @__PURE__ */
|
|
265
|
-
|
|
266
|
-
/* @__PURE__ */
|
|
267
|
-
|
|
243
|
+
/* @__PURE__ */ l("div", { className: "absolute right-3 top-3 z-10 flex items-center gap-2", children: [
|
|
244
|
+
z ? /* @__PURE__ */ l(I, { children: [
|
|
245
|
+
/* @__PURE__ */ l(
|
|
246
|
+
b,
|
|
268
247
|
{
|
|
269
248
|
variant: m ? "secondary" : "default",
|
|
270
249
|
size: "sm",
|
|
271
250
|
className: "shadow-lg",
|
|
272
|
-
onClick: () =>
|
|
251
|
+
onClick: () => K((e) => !e),
|
|
273
252
|
children: [
|
|
274
|
-
/* @__PURE__ */ n(
|
|
253
|
+
/* @__PURE__ */ n(xe, { className: "mr-1.5 size-3.5" }),
|
|
275
254
|
m ? "Take control" : "Controlling"
|
|
276
255
|
]
|
|
277
256
|
}
|
|
278
257
|
),
|
|
279
|
-
/* @__PURE__ */ n(
|
|
280
|
-
|
|
258
|
+
/* @__PURE__ */ n(I, { children: /* @__PURE__ */ n(
|
|
259
|
+
b,
|
|
281
260
|
{
|
|
282
261
|
variant: "secondary",
|
|
283
262
|
size: "icon-sm",
|
|
284
263
|
className: "shadow-lg",
|
|
285
|
-
onClick:
|
|
264
|
+
onClick: re,
|
|
286
265
|
"aria-label": "Show the keyboard",
|
|
287
266
|
title: "Keyboard",
|
|
288
|
-
children: /* @__PURE__ */ n(
|
|
267
|
+
children: /* @__PURE__ */ n(ve, { className: "size-3.5" })
|
|
289
268
|
}
|
|
290
269
|
) }),
|
|
291
270
|
/* @__PURE__ */ n(
|
|
292
|
-
|
|
271
|
+
b,
|
|
293
272
|
{
|
|
294
273
|
variant: "secondary",
|
|
295
274
|
size: "icon-sm",
|
|
296
275
|
className: "shadow-lg",
|
|
297
|
-
|
|
276
|
+
...Q(() => void se()),
|
|
298
277
|
"aria-label": "Paste from this device",
|
|
299
278
|
title: "Paste",
|
|
300
|
-
children: /* @__PURE__ */ n(
|
|
279
|
+
children: /* @__PURE__ */ n(ye, { className: "size-3.5" })
|
|
301
280
|
}
|
|
302
281
|
),
|
|
303
|
-
|
|
304
|
-
|
|
282
|
+
/* @__PURE__ */ n(
|
|
283
|
+
b,
|
|
305
284
|
{
|
|
306
285
|
variant: "secondary",
|
|
307
286
|
size: "icon-sm",
|
|
308
287
|
className: "shadow-lg",
|
|
309
|
-
|
|
310
|
-
"aria-label": "Copy
|
|
288
|
+
...Q(() => void oe()),
|
|
289
|
+
"aria-label": "Copy selected text from the Computer",
|
|
311
290
|
title: "Copy",
|
|
312
|
-
children: /* @__PURE__ */ n(
|
|
291
|
+
children: /* @__PURE__ */ n(ge, { className: "size-3.5" })
|
|
313
292
|
}
|
|
314
|
-
)
|
|
293
|
+
),
|
|
315
294
|
/* @__PURE__ */ n(
|
|
316
|
-
|
|
295
|
+
b,
|
|
317
296
|
{
|
|
318
297
|
variant: "secondary",
|
|
319
298
|
size: "icon-sm",
|
|
@@ -323,39 +302,39 @@ function Ne({ active: d, onClose: p }) {
|
|
|
323
302
|
},
|
|
324
303
|
"aria-label": "Reconnect",
|
|
325
304
|
title: "Reconnect",
|
|
326
|
-
children: /* @__PURE__ */ n(
|
|
305
|
+
children: /* @__PURE__ */ n(pe, { className: "size-3.5" })
|
|
327
306
|
}
|
|
328
307
|
)
|
|
329
308
|
] }) : null,
|
|
330
|
-
|
|
331
|
-
|
|
309
|
+
h ? /* @__PURE__ */ n(
|
|
310
|
+
b,
|
|
332
311
|
{
|
|
333
312
|
variant: "secondary",
|
|
334
313
|
size: "icon-sm",
|
|
335
314
|
className: "shadow-lg",
|
|
336
|
-
onClick:
|
|
315
|
+
onClick: h,
|
|
337
316
|
"aria-label": "Close the computer",
|
|
338
317
|
title: "Close",
|
|
339
|
-
children: /* @__PURE__ */ n(
|
|
318
|
+
children: /* @__PURE__ */ n(he, { className: "size-4" })
|
|
340
319
|
}
|
|
341
320
|
) : null
|
|
342
321
|
] }),
|
|
343
|
-
|
|
344
|
-
|
|
322
|
+
E ? /* @__PURE__ */ n("div", { className: "pointer-events-none absolute inset-x-0 bottom-6 z-10 flex justify-center", children: /* @__PURE__ */ n("div", { className: "rounded-full bg-card/90 px-3 py-1.5 text-xs shadow-lg backdrop-blur", children: E }) }) : null,
|
|
323
|
+
z && w !== "live" && !k ? /* @__PURE__ */ n("div", { className: "pointer-events-none absolute inset-0 z-[5] flex items-center justify-center", children: /* @__PURE__ */ l("div", { className: "flex items-center gap-2 rounded-full bg-card/90 px-4 py-2 text-sm shadow-lg backdrop-blur", children: [
|
|
345
324
|
/* @__PURE__ */ n(ee, { className: "size-4 animate-spin" }),
|
|
346
|
-
|
|
325
|
+
w === "starting" ? "Starting the computer…" : "Connecting to the screen…"
|
|
347
326
|
] }) }) : null,
|
|
348
|
-
!
|
|
349
|
-
|
|
327
|
+
!z || k || v && !v.ok ? /* @__PURE__ */ n("div", { className: "absolute inset-0 z-[5] flex items-center justify-center p-6", children: /* @__PURE__ */ l("div", { className: "w-full max-w-md space-y-3 rounded-2xl border border-border bg-card/90 p-5 text-center backdrop-blur", children: [
|
|
328
|
+
v && !v.ok ? /* @__PURE__ */ l(I, { children: [
|
|
350
329
|
/* @__PURE__ */ n("p", { className: "text-sm font-medium", children: "The computer needs a few packages." }),
|
|
351
|
-
/* @__PURE__ */
|
|
330
|
+
/* @__PURE__ */ l("p", { className: "text-xs text-muted-foreground", children: [
|
|
352
331
|
"Missing: ",
|
|
353
|
-
|
|
332
|
+
v.missing.join(", ")
|
|
354
333
|
] }),
|
|
355
|
-
/* @__PURE__ */ n("pre", { className: "overflow-x-auto rounded bg-muted p-2 text-left text-xs", children:
|
|
356
|
-
] }) :
|
|
357
|
-
|
|
358
|
-
|
|
334
|
+
/* @__PURE__ */ n("pre", { className: "overflow-x-auto rounded bg-muted p-2 text-left text-xs", children: v.hint })
|
|
335
|
+
] }) : k ? /* @__PURE__ */ n("p", { className: "text-sm text-destructive", children: k }) : /* @__PURE__ */ n("p", { className: "text-sm text-muted-foreground", children: "Start the computer to open a desktop with a browser the agent can drive." }),
|
|
336
|
+
z ? null : /* @__PURE__ */ l(b, { disabled: w === "starting" || v?.ok === !1, onClick: () => void $(), children: [
|
|
337
|
+
w === "starting" ? /* @__PURE__ */ n(ee, { className: "mr-1.5 size-4 animate-spin" }) : /* @__PURE__ */ n(fe, { className: "mr-1.5 size-4" }),
|
|
359
338
|
"Start the computer"
|
|
360
339
|
] })
|
|
361
340
|
] }) }) : null
|
|
@@ -365,6 +344,6 @@ function Ne({ active: d, onClose: p }) {
|
|
|
365
344
|
);
|
|
366
345
|
}
|
|
367
346
|
export {
|
|
368
|
-
|
|
369
|
-
|
|
347
|
+
Me as ComputerPage,
|
|
348
|
+
Me as default
|
|
370
349
|
};
|