@omg-dev/app 0.6.209 → 0.6.211

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.
@@ -1,9 +1,20 @@
1
1
  import { jsx as e } from "react/jsx-runtime";
2
- import { Q as n } from "./embedded-DYhLh9dW.js";
2
+ import { Q as n } from "./embedded-DHN1s_lv.js";
3
3
  const t = `# Changelog
4
4
 
5
5
  Recent product updates and deployment notes.
6
6
 
7
+ ## October 9, 2026 - Computer sign-in and clipboard fixes (v0.6.211)
8
+
9
+ - Expo sign-in opens in the Computer browser even when Linux already has a browser opener installed.
10
+ - Closing and retrying sign-in keeps the browser ready. A Computer can recover an orphan sign-in browser that blocks startup.
11
+ - 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.
12
+ - New Expo apps use Android safe areas and a keyboard layout that follows the focused field.
13
+
14
+ ## October 9, 2026 - Shorter audio settings (v0.6.210)
15
+
16
+ - Web audio settings use two controls and one short status line. Choose Auto, Cloud, or Local and your language.
17
+
7
18
  ## October 9, 2026 - Clear computer resume progress (v0.6.209)
8
19
 
9
20
  - A paused computer shows resume progress while it wakes. The app keeps trying without asking you to press Retry.
@@ -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-DYhLh9dW.js";
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-DHN1s_lv.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-DYhLh9dW.js";
4
- import { K as jA, C as PA } from "./keyboard-BzO5S1u9.js";
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-DHN1s_lv.js";
4
+ import { K as jA, C as PA } from "./keyboard-DEDrZHyF.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-DYhLh9dW.js";
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-DHN1s_lv.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-DYhLh9dW.js";
4
+ import { ao as uo } from "./embedded-DHN1s_lv.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-DYhLh9dW.js";
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-DHN1s_lv.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 u, jsx as n, Fragment as X } from "react/jsx-runtime";
2
- import { useState as v, useRef as y, useCallback as l, useEffect as b } from "react";
3
- import { R as ae, a as ce, d as ie } from "./computer-pointer-C3VB2laK.js";
4
- import { F as ne, aa as Z, a9 as le, B as g, R as ue, X as de, L as ee, ak as me } from "./embedded-DYhLh9dW.js";
5
- import { K as pe, C as he } from "./keyboard-BzO5S1u9.js";
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-iRZ5cqQA.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-DHN1s_lv.js";
5
+ import { K as ve, C as ye } from "./keyboard-DEDrZHyF.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 fe = [
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
- ], ve = ne("clipboard-copy", fe);
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 ye = [
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
- ], be = ne("mouse-pointer-2", ye), Y = "The Computer could not start. Try again.";
33
+ ], xe = ne("mouse-pointer-2", we), X = "The Computer could not start. Try again.";
34
34
  function te(d) {
35
- const p = d.trim();
36
- if (!p) return Y;
35
+ const h = d.trim();
36
+ if (!h) return X;
37
37
  try {
38
- const c = JSON.parse(p);
38
+ const c = JSON.parse(h);
39
39
  if (c && typeof c == "object" && "error" in c) {
40
- const w = c.error;
41
- if (typeof w == "string" && w.trim()) return w.trim();
40
+ const g = c.error;
41
+ if (typeof g == "string" && g.trim()) return g.trim();
42
42
  }
43
- return Y;
43
+ return X;
44
44
  } catch {
45
- return p.startsWith("<") ? Y : p;
45
+ return h.startsWith("<") ? X : h;
46
46
  }
47
47
  }
48
- function Ne({ active: d, onClose: p }) {
49
- const [c, w] = v(null), [x, k] = v("idle"), [C, M] = v(null), [m, S] = v(!0), [R, re] = v(null), [T, h] = v(null), [U, q] = v(
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
- ), L = y(null), i = y(null), H = y(null), j = y(null), D = y(null), J = y(0), A = l(async () => {
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
- w(await e.json());
55
+ g(await e.json());
56
56
  } catch {
57
57
  }
58
58
  }, []);
59
- b(() => {
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 = l(() => {
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 = l(async () => {
72
- if (!(i.current || !L.current)) {
73
- k("connecting"), M(null);
71
+ }, []), O = p(async () => {
72
+ if (!(i.current || !T.current)) {
73
+ x("connecting"), M(null);
74
74
  try {
75
- const e = await le("/api/computer"), t = new ae(L.current, new ce(e), {
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", () => k("live")), t.addEventListener("clipboard", (o) => {
79
- const r = o.detail?.text ?? "";
80
- re(r || null);
81
- }), t.addEventListener("disconnect", () => {
82
- i.current = null, k("idle");
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
- k("idle"), M(e instanceof Error ? e.message : "could not open the screen");
90
+ x("idle"), M(e instanceof Error ? e.message : "could not open the screen");
86
91
  }
87
92
  }
88
93
  }, [m]);
89
- b(() => {
94
+ y(() => {
90
95
  i.current && (i.current.viewOnly = m);
91
- }, [m]), b(() => {
92
- !d || !c || c.running || !c.deps.ok || x === "starting" || C || G();
93
- }, [d, c?.running, c?.deps.ok, x, C]), b(() => {
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]), b(() => N, [N]);
100
- const K = l(
101
- () => L.current?.querySelector("canvas") ?? null,
104
+ }, [d, c?.running, O, N]), y(() => N, [N]);
105
+ const D = p(
106
+ () => T.current?.querySelector("canvas") ?? null,
102
107
  []
103
- ), z = l(
104
- (e, t, o = 0) => {
105
- const r = K(), s = j.current;
106
- !r || !s || ie(r, s, e, t, o);
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
- [K]
109
- ), W = l(
113
+ [D]
114
+ ), J = p(
110
115
  (e, t) => {
111
- const o = K();
112
- if (!o) return;
113
- const r = o.getBoundingClientRect(), s = j.current ?? { x: r.left + r.width / 2, y: r.top + r.height / 2 };
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, s.x + e)),
116
- y: Math.min(r.bottom - 1, Math.max(r.top, s.y + t))
117
- }, z("mousemove", 0);
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
- [K, z]
120
- ), F = l(
124
+ [D, R]
125
+ ), B = p(
121
126
  (e) => {
122
- z("mousedown", e === 2 ? 2 : 1, e), z("mouseup", 0, e);
127
+ R("mousedown", e === 2 ? 2 : 1, e), R("mouseup", 0, e);
123
128
  },
124
- [z]
125
- ), $ = y(null);
126
- b(() => {
127
- const e = $.current;
129
+ [R]
130
+ ), W = u(null);
131
+ y(() => {
132
+ const e = W.current;
128
133
  if (!e) return;
129
- const t = (s) => {
130
- if (s.preventDefault(), s.touches.length !== 1) return;
131
- const a = s.touches[0];
132
- D.current = { x: a.clientX, y: a.clientY, moved: !1, at: Date.now() };
133
- }, o = (s) => {
134
- s.preventDefault();
135
- const a = D.current;
136
- if (!a || s.touches.length !== 1) return;
137
- const P = s.touches[0], I = P.clientX - a.x, V = P.clientY - a.y;
138
- (Math.abs(I) > 3 || Math.abs(V) > 3) && (a.moved = !0);
139
- const Q = Math.min(2.5, 1 + Math.hypot(I, V) / 12);
140
- W(I * Q, V * Q), a.x = P.clientX, a.y = P.clientY;
141
- }, r = (s) => {
142
- s.preventDefault();
143
- const a = D.current;
144
- D.current = null, a && !a.moved && Date.now() - a.at < 400 && F(0);
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", o, { passive: !1 }), e.addEventListener("touchend", r, { passive: !1 }), e.addEventListener("touchcancel", r, { passive: !1 }), () => {
147
- e.removeEventListener("touchstart", t), e.removeEventListener("touchmove", o), e.removeEventListener("touchend", r), e.removeEventListener("touchcancel", r);
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
- }, [W, F, c?.running, m, U]);
150
- const B = l(() => {
151
- S(!1), H.current?.focus();
154
+ }, [J, B, c?.running, m, Y]);
155
+ const re = p(() => {
156
+ K(!1), P.current?.focus();
152
157
  }, []);
153
- b(() => {
154
- if (!T) return;
155
- const e = setTimeout(() => h(null), 1800);
158
+ y(() => {
159
+ if (!E) return;
160
+ const e = setTimeout(() => H(null), 1800);
156
161
  return () => clearTimeout(e);
157
- }, [T]);
158
- const _ = l((e) => {
159
- const t = i.current;
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
- w(await e.json());
168
+ g(await e.json());
187
169
  } catch (e) {
188
- M(e instanceof Error ? e.message : te("")), k("idle");
170
+ M(e instanceof Error ? e.message : te("")), x("idle");
189
171
  }
190
- }, f = c?.deps, E = !!c?.running;
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__ */ u(
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
- J.current = t, q((o) => o || !0);
185
+ V.current = t, q((s) => s || !0);
203
186
  return;
204
187
  }
205
- t - J.current < 1e3 || q((o) => o && !1);
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: L,
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
- E && !m && U ? /* @__PURE__ */ n(
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(), F(2);
204
+ e.preventDefault(), B(2);
222
205
  }
223
206
  }
224
207
  ) : null,
225
208
  /* @__PURE__ */ n(
226
209
  "textarea",
227
210
  {
228
- ref: H,
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, o = e.target.value;
219
+ const t = i.current, s = e.target.value;
241
220
  if (e.target.value = "", !!t)
242
- for (const r of o) {
243
- const s = r.codePointAt(0) ?? 0, a = s < 256 ? s : 16777216 + s;
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__ */ u("div", { className: "absolute right-3 top-3 z-10 flex items-center gap-2", children: [
265
- E ? /* @__PURE__ */ u(X, { children: [
266
- /* @__PURE__ */ u(
267
- g,
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: () => S((e) => !e),
251
+ onClick: () => K((e) => !e),
273
252
  children: [
274
- /* @__PURE__ */ n(be, { className: "mr-1.5 size-3.5" }),
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(X, { children: /* @__PURE__ */ n(
280
- g,
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: B,
264
+ onClick: re,
286
265
  "aria-label": "Show the keyboard",
287
266
  title: "Keyboard",
288
- children: /* @__PURE__ */ n(pe, { className: "size-3.5" })
267
+ children: /* @__PURE__ */ n(ve, { className: "size-3.5" })
289
268
  }
290
269
  ) }),
291
270
  /* @__PURE__ */ n(
292
- g,
271
+ b,
293
272
  {
294
273
  variant: "secondary",
295
274
  size: "icon-sm",
296
275
  className: "shadow-lg",
297
- onClick: () => void se(),
276
+ ...Q(() => void se()),
298
277
  "aria-label": "Paste from this device",
299
278
  title: "Paste",
300
- children: /* @__PURE__ */ n(he, { className: "size-3.5" })
279
+ children: /* @__PURE__ */ n(ye, { className: "size-3.5" })
301
280
  }
302
281
  ),
303
- R ? /* @__PURE__ */ n(
304
- g,
282
+ /* @__PURE__ */ n(
283
+ b,
305
284
  {
306
285
  variant: "secondary",
307
286
  size: "icon-sm",
308
287
  className: "shadow-lg",
309
- onClick: () => void oe(),
310
- "aria-label": "Copy the computer's clipboard to this device",
288
+ ...Q(() => void oe()),
289
+ "aria-label": "Copy selected text from the Computer",
311
290
  title: "Copy",
312
- children: /* @__PURE__ */ n(ve, { className: "size-3.5" })
291
+ children: /* @__PURE__ */ n(ge, { className: "size-3.5" })
313
292
  }
314
- ) : null,
293
+ ),
315
294
  /* @__PURE__ */ n(
316
- g,
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(ue, { className: "size-3.5" })
305
+ children: /* @__PURE__ */ n(pe, { className: "size-3.5" })
327
306
  }
328
307
  )
329
308
  ] }) : null,
330
- p ? /* @__PURE__ */ n(
331
- g,
309
+ h ? /* @__PURE__ */ n(
310
+ b,
332
311
  {
333
312
  variant: "secondary",
334
313
  size: "icon-sm",
335
314
  className: "shadow-lg",
336
- onClick: p,
315
+ onClick: h,
337
316
  "aria-label": "Close the computer",
338
317
  title: "Close",
339
- children: /* @__PURE__ */ n(de, { className: "size-4" })
318
+ children: /* @__PURE__ */ n(he, { className: "size-4" })
340
319
  }
341
320
  ) : null
342
321
  ] }),
343
- T ? /* @__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: T }) }) : null,
344
- E && x !== "live" && !C ? /* @__PURE__ */ n("div", { className: "pointer-events-none absolute inset-0 z-[5] flex items-center justify-center", children: /* @__PURE__ */ u("div", { className: "flex items-center gap-2 rounded-full bg-card/90 px-4 py-2 text-sm shadow-lg backdrop-blur", children: [
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
- x === "starting" ? "Starting the computer…" : "Connecting to the screen…"
325
+ w === "starting" ? "Starting the computer…" : "Connecting to the screen…"
347
326
  ] }) }) : null,
348
- !E || C || f && !f.ok ? /* @__PURE__ */ n("div", { className: "absolute inset-0 z-[5] flex items-center justify-center p-6", children: /* @__PURE__ */ u("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: [
349
- f && !f.ok ? /* @__PURE__ */ u(X, { children: [
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__ */ u("p", { className: "text-xs text-muted-foreground", children: [
330
+ /* @__PURE__ */ l("p", { className: "text-xs text-muted-foreground", children: [
352
331
  "Missing: ",
353
- f.missing.join(", ")
332
+ v.missing.join(", ")
354
333
  ] }),
355
- /* @__PURE__ */ n("pre", { className: "overflow-x-auto rounded bg-muted p-2 text-left text-xs", children: f.hint })
356
- ] }) : C ? /* @__PURE__ */ n("p", { className: "text-sm text-destructive", children: C }) : /* @__PURE__ */ n("p", { className: "text-sm text-muted-foreground", children: "Start the computer to open a desktop with a browser the agent can drive." }),
357
- E ? null : /* @__PURE__ */ u(g, { disabled: x === "starting" || f?.ok === !1, onClick: () => void G(), children: [
358
- x === "starting" ? /* @__PURE__ */ n(ee, { className: "mr-1.5 size-4 animate-spin" }) : /* @__PURE__ */ n(me, { className: "mr-1.5 size-4" }),
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
- Ne as ComputerPage,
369
- Ne as default
347
+ Me as ComputerPage,
348
+ Me as default
370
349
  };