@tapflowio/relay 0.11.0 → 0.11.1
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/package.json +3 -3
- package/public/assets/{AppCenter-Cxb5PqES.js → AppCenter-DXghiZpr.js} +5 -5
- package/public/assets/AppCenter-DXghiZpr.js.br +0 -0
- package/public/assets/{Default-B8SzMopQ.js → Default-iwN63mvx.js} +1 -1
- package/public/assets/Default-iwN63mvx.js.br +0 -0
- package/public/assets/{Invite-BmR_FIA1.js → Invite-KgNlAGmi.js} +1 -1
- package/public/assets/Invite-KgNlAGmi.js.br +0 -0
- package/public/assets/{MacResources-CXzOp5kx.js → MacResources-DeoMc2P5.js} +1 -1
- package/public/assets/MacResources-DeoMc2P5.js.br +0 -0
- package/public/assets/{NotFound-BWw23bIi.js → NotFound-DXxeYVTc.js} +1 -1
- package/public/assets/NotFound-DXxeYVTc.js.br +2 -0
- package/public/assets/QASession-D7Jq7r4v.js +130 -0
- package/public/assets/QASession-D7Jq7r4v.js.br +0 -0
- package/public/assets/{ResetPassword-D7mOzqBK.js → ResetPassword-jaM2ctjM.js} +1 -1
- package/public/assets/ResetPassword-jaM2ctjM.js.br +0 -0
- package/public/assets/{Setup-D6qB6jS1.js → Setup-mmxbjJ83.js} +1 -1
- package/public/assets/Setup-mmxbjJ83.js.br +0 -0
- package/public/assets/{Team-3bucAohO.js → Team-C_u-hG_S.js} +1 -1
- package/public/assets/Team-C_u-hG_S.js.br +0 -0
- package/public/assets/{Tokens-1zCnFy4g.js → Tokens-Dkd2LkfB.js} +1 -1
- package/public/assets/Tokens-Dkd2LkfB.js.br +0 -0
- package/public/assets/{alert-dialog-DzfatoQp.js → alert-dialog-CFyLEW41.js} +1 -1
- package/public/assets/alert-dialog-CFyLEW41.js.br +0 -0
- package/public/assets/{badge-D5qRpMwq.js → badge-D6kZI81S.js} +1 -1
- package/public/assets/badge-D6kZI81S.js.br +0 -0
- package/public/assets/{build-format-B2WV0b00.js → build-format-Ff9JwBl0.js} +1 -1
- package/public/assets/build-format-Ff9JwBl0.js.br +0 -0
- package/public/assets/dialog-BZAnuIhx.js +11 -0
- package/public/assets/dialog-BZAnuIhx.js.br +0 -0
- package/public/assets/index-nsRC4db_.js +274 -0
- package/public/assets/index-nsRC4db_.js.br +0 -0
- package/public/assets/{pencil-CrdUncgI.js → pencil-sNgkZjUH.js} +1 -1
- package/public/assets/pencil-sNgkZjUH.js.br +0 -0
- package/public/assets/{table-7RY_yHv1.js → table-CRY1fpd-.js} +1 -1
- package/public/assets/table-CRY1fpd-.js.br +0 -0
- package/public/assets/{tabs-D37o4iWA.js → tabs-C6bzsSdg.js} +1 -1
- package/public/assets/tabs-C6bzsSdg.js.br +0 -0
- package/public/assets/{trash-2-DrcWqmOA.js → trash-2-nLbk3HF-.js} +1 -1
- package/public/assets/trash-2-nLbk3HF-.js.br +0 -0
- package/public/index.html +1 -1
- package/public/index.html.br +0 -0
- package/public/assets/AppCenter-Cxb5PqES.js.br +0 -0
- package/public/assets/Default-B8SzMopQ.js.br +0 -0
- package/public/assets/Invite-BmR_FIA1.js.br +0 -0
- package/public/assets/MacResources-CXzOp5kx.js.br +0 -0
- package/public/assets/NotFound-BWw23bIi.js.br +0 -2
- package/public/assets/QASession-t4xyvUvC.js +0 -130
- package/public/assets/QASession-t4xyvUvC.js.br +0 -0
- package/public/assets/ResetPassword-D7mOzqBK.js.br +0 -0
- package/public/assets/Setup-D6qB6jS1.js.br +0 -0
- package/public/assets/Team-3bucAohO.js.br +0 -0
- package/public/assets/Tokens-1zCnFy4g.js.br +0 -0
- package/public/assets/alert-dialog-DzfatoQp.js.br +0 -0
- package/public/assets/badge-D5qRpMwq.js.br +0 -0
- package/public/assets/build-format-B2WV0b00.js.br +0 -0
- package/public/assets/dialog-CjJMa7RN.js +0 -11
- package/public/assets/dialog-CjJMa7RN.js.br +0 -0
- package/public/assets/index-Ci2ltCHF.js +0 -274
- package/public/assets/index-Ci2ltCHF.js.br +0 -0
- package/public/assets/pencil-CrdUncgI.js.br +0 -0
- package/public/assets/table-7RY_yHv1.js.br +0 -0
- package/public/assets/tabs-D37o4iWA.js.br +0 -0
- package/public/assets/trash-2-DrcWqmOA.js.br +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a7 as o,a4 as t,K as l}from"./index-
|
|
1
|
+
import{a7 as o,a4 as t,K as l}from"./index-nsRC4db_.js";const r=o.forwardRef(({className:a,...e},s)=>t.jsx("div",{className:"relative w-full overflow-auto",children:t.jsx("table",{ref:s,className:l("w-full caption-bottom text-sm",a),...e})}));r.displayName="Table";const d=o.forwardRef(({className:a,...e},s)=>t.jsx("thead",{ref:s,className:l("[&_tr]:border-b",a),...e}));d.displayName="TableHeader";const m=o.forwardRef(({className:a,...e},s)=>t.jsx("tbody",{ref:s,className:l("[&_tr:last-child]:border-0",a),...e}));m.displayName="TableBody";const b=o.forwardRef(({className:a,...e},s)=>t.jsx("tfoot",{ref:s,className:l("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...e}));b.displayName="TableFooter";const c=o.forwardRef(({className:a,...e},s)=>t.jsx("tr",{ref:s,className:l("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",a),...e}));c.displayName="TableRow";const f=o.forwardRef(({className:a,...e},s)=>t.jsx("th",{ref:s,className:l("h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",a),...e}));f.displayName="TableHead";const i=o.forwardRef(({className:a,...e},s)=>t.jsx("td",{ref:s,className:l("p-4 align-middle [&:has([role=checkbox])]:pr-0",a),...e}));i.displayName="TableCell";const n=o.forwardRef(({className:a,...e},s)=>t.jsx("caption",{ref:s,className:l("mt-4 text-sm text-muted-foreground",a),...e}));n.displayName="TableCaption";export{r as T,m as a,i as b,f as c,d,c as e};
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a7 as i,ag as k,af as M,a4 as f,u as g,aj as D,v as L,r as F,N as m,t as V,Q as G,$ as y,K as T}from"./index-
|
|
1
|
+
import{a7 as i,ag as k,af as M,a4 as f,u as g,aj as D,v as L,r as F,N as m,t as V,Q as G,$ as y,K as T}from"./index-nsRC4db_.js";const O=location.protocol==="https:"?"wss:":"ws:",K=`${O}//${location.host}`,J=2e3;function U(e,t){const a=i.useRef(null),[o,c]=i.useState(!1),u=i.useRef(e);u.current=e;const s=i.useRef(t);return s.current=t,i.useEffect(()=>{let l=!1;const d=()=>{if(l)return;const n=new WebSocket(K);n.binaryType="arraybuffer",a.current=n,n.onopen=()=>c(!0),n.onclose=()=>{c(!1),l||setTimeout(d,J)},n.onmessage=r=>{var v;if(r.data instanceof ArrayBuffer){(v=s.current)==null||v.call(s,r.data);return}try{u.current(JSON.parse(r.data))}catch{}}};return d(),()=>{var n;l=!0,(n=a.current)==null||n.close()}},[]),{send:i.useCallback(l=>{var d;((d=a.current)==null?void 0:d.readyState)===WebSocket.OPEN&&a.current.send(JSON.stringify(l))},[]),connected:o}}var p="Tabs",[W]=G(p,[y]),N=y(),[Y,x]=W(p),R=i.forwardRef((e,t)=>{const{__scopeTabs:a,value:o,onValueChange:c,defaultValue:u,orientation:s="horizontal",dir:b,activationMode:l="automatic",...d}=e,n=k(b),[r,v]=M({prop:o,onChange:c,defaultProp:u??"",caller:p});return f.jsx(Y,{scope:a,baseId:D(),value:r,onValueChange:v,orientation:s,dir:n,activationMode:l,children:f.jsx(g.div,{dir:n,"data-orientation":s,...d,ref:t})})});R.displayName=p;var h="TabsList",C=i.forwardRef((e,t)=>{const{__scopeTabs:a,loop:o=!0,...c}=e,u=x(h,a),s=N(a);return f.jsx(L,{asChild:!0,...s,orientation:u.orientation,dir:u.dir,loop:o,children:f.jsx(g.div,{role:"tablist","aria-orientation":u.orientation,...c,ref:t})})});C.displayName=h;var w="TabsTrigger",E=i.forwardRef((e,t)=>{const{__scopeTabs:a,value:o,disabled:c=!1,...u}=e,s=x(w,a),b=N(a),l=j(s.baseId,o),d=A(s.baseId,o),n=o===s.value;return f.jsx(F,{asChild:!0,...b,focusable:!c,active:n,children:f.jsx(g.button,{type:"button",role:"tab","aria-selected":n,"aria-controls":d,"data-state":n?"active":"inactive","data-disabled":c?"":void 0,disabled:c,id:l,...u,ref:t,onMouseDown:m(e.onMouseDown,r=>{!c&&r.button===0&&r.ctrlKey===!1?s.onValueChange(o):r.preventDefault()}),onKeyDown:m(e.onKeyDown,r=>{[" ","Enter"].includes(r.key)&&s.onValueChange(o)}),onFocus:m(e.onFocus,()=>{const r=s.activationMode!=="manual";!n&&!c&&r&&s.onValueChange(o)})})})});E.displayName=w;var I="TabsContent",S=i.forwardRef((e,t)=>{const{__scopeTabs:a,value:o,forceMount:c,children:u,...s}=e,b=x(I,a),l=j(b.baseId,o),d=A(b.baseId,o),n=o===b.value,r=i.useRef(n);return i.useEffect(()=>{const v=requestAnimationFrame(()=>r.current=!1);return()=>cancelAnimationFrame(v)},[]),f.jsx(V,{present:c||n,children:({present:v})=>f.jsx(g.div,{"data-state":n?"active":"inactive","data-orientation":b.orientation,role:"tabpanel","aria-labelledby":l,hidden:!v,id:d,tabIndex:0,...s,ref:t,style:{...e.style,animationDuration:r.current?"0s":void 0},children:v&&u})})});S.displayName=I;function j(e,t){return`${e}-trigger-${t}`}function A(e,t){return`${e}-content-${t}`}var q=R,_=C,P=E,$=S;const X=q,z=i.forwardRef(({className:e,...t},a)=>f.jsx(_,{ref:a,className:T("inline-flex h-9 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));z.displayName=_.displayName;const B=i.forwardRef(({className:e,...t},a)=>f.jsx(P,{ref:a,className:T("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));B.displayName=P.displayName;const H=i.forwardRef(({className:e,...t},a)=>f.jsx($,{ref:a,className:T("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));H.displayName=$.displayName;export{X as T,H as a,z as b,B as c,U as u};
|
|
Binary file
|
|
Binary file
|
package/public/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
7
7
|
<title>tapflow</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-nsRC4db_.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-BI7E3MD-.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/public/index.html.br
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import{Y as J,a7 as o,am as en,a4 as n,K as q,z as Ct,T as ve,E as we,B as ee,y as Se,S as tn,s as Kn,a9 as at,ae as Fe,ag as Gn,u as Ie,t as bt,Q as nn,N as Ue,ad as qe,ak as qn,U as Jn,x as Zn,g as Qn,af as er,an as tr,al as nr,ac as rr,L as sr}from"./index-Ci2ltCHF.js";import{f as or,a as ar,P as rn,c as $t,S as ir,b as cr}from"./build-format-B2WV0b00.js";import{u as sn,T as lr,b as ur,c as Bt,a as zt}from"./tabs-D37o4iWA.js";import{D as on,a as an,d as dr,e as cn,b as fr,c as hr,k as pr,u as mr,S as gr,i as xr,j as br,g as yr,h as Ot}from"./dialog-CjJMa7RN.js";import{B as vr}from"./badge-D5qRpMwq.js";/**
|
|
2
|
-
* @license lucide-react v0.577.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const wr=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Sr=J("arrow-left",wr);/**
|
|
7
|
-
* @license lucide-react v0.577.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Rr=[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]],jr=J("arrow-up",Rr);/**
|
|
12
|
-
* @license lucide-react v0.577.0 - ISC
|
|
13
|
-
*
|
|
14
|
-
* This source code is licensed under the ISC license.
|
|
15
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
16
|
-
*/const kr=[["path",{d:"M13.997 4a2 2 0 0 1 1.76 1.05l.486.9A2 2 0 0 0 18.003 7H20a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V9a2 2 0 0 1 2-2h1.997a2 2 0 0 0 1.759-1.048l.489-.904A2 2 0 0 1 10.004 4z",key:"18u6gg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]],Cr=J("camera",kr);/**
|
|
17
|
-
* @license lucide-react v0.577.0 - ISC
|
|
18
|
-
*
|
|
19
|
-
* This source code is licensed under the ISC license.
|
|
20
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
21
|
-
*/const Er=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],Nr=J("download",Er);/**
|
|
22
|
-
* @license lucide-react v0.577.0 - ISC
|
|
23
|
-
*
|
|
24
|
-
* This source code is licensed under the ISC license.
|
|
25
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
26
|
-
*/const _r=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M7 3v18",key:"bbkbws"}],["path",{d:"M3 7.5h4",key:"zfgn84"}],["path",{d:"M3 12h18",key:"1i2n21"}],["path",{d:"M3 16.5h4",key:"1230mu"}],["path",{d:"M17 3v18",key:"in4fa5"}],["path",{d:"M17 7.5h4",key:"myr1c1"}],["path",{d:"M17 16.5h4",key:"go4c1d"}]],Tr=J("film",_r);/**
|
|
27
|
-
* @license lucide-react v0.577.0 - ISC
|
|
28
|
-
*
|
|
29
|
-
* This source code is licensed under the ISC license.
|
|
30
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
31
|
-
*/const Pr=[["path",{d:"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8",key:"5wwlr5"}],["path",{d:"M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",key:"r6nss1"}]],ln=J("house",Pr);/**
|
|
32
|
-
* @license lucide-react v0.577.0 - ISC
|
|
33
|
-
*
|
|
34
|
-
* This source code is licensed under the ISC license.
|
|
35
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
36
|
-
*/const Ar=[["path",{d:"M16 5h6",key:"1vod17"}],["path",{d:"M19 2v6",key:"4bpg5p"}],["path",{d:"M21 11.5V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7.5",key:"1ue2ih"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}]],Dr=J("image-plus",Ar);/**
|
|
37
|
-
* @license lucide-react v0.577.0 - ISC
|
|
38
|
-
*
|
|
39
|
-
* This source code is licensed under the ISC license.
|
|
40
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
41
|
-
*/const Lr=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],Mr=J("info",Lr);/**
|
|
42
|
-
* @license lucide-react v0.577.0 - ISC
|
|
43
|
-
*
|
|
44
|
-
* This source code is licensed under the ISC license.
|
|
45
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
46
|
-
*/const Hr=[["path",{d:"M10 8h.01",key:"1r9ogq"}],["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M14 8h.01",key:"1primd"}],["path",{d:"M16 12h.01",key:"1l6xoz"}],["path",{d:"M18 8h.01",key:"emo2bl"}],["path",{d:"M6 8h.01",key:"x9i8wu"}],["path",{d:"M7 16h10",key:"wp8him"}],["path",{d:"M8 12h.01",key:"czm47f"}],["rect",{width:"20",height:"16",x:"2",y:"4",rx:"2",key:"18n3k1"}]],Ur=J("keyboard",Hr);/**
|
|
47
|
-
* @license lucide-react v0.577.0 - ISC
|
|
48
|
-
*
|
|
49
|
-
* This source code is licensed under the ISC license.
|
|
50
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
51
|
-
*/const Fr=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],un=J("link-2",Fr);/**
|
|
52
|
-
* @license lucide-react v0.577.0 - ISC
|
|
53
|
-
*
|
|
54
|
-
* This source code is licensed under the ISC license.
|
|
55
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
56
|
-
*/const Ir=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],pt=J("loader-circle",Ir);/**
|
|
57
|
-
* @license lucide-react v0.577.0 - ISC
|
|
58
|
-
*
|
|
59
|
-
* This source code is licensed under the ISC license.
|
|
60
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
61
|
-
*/const $r=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],Br=J("message-square",$r);/**
|
|
62
|
-
* @license lucide-react v0.577.0 - ISC
|
|
63
|
-
*
|
|
64
|
-
* This source code is licensed under the ISC license.
|
|
65
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
66
|
-
*/const zr=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],Or=J("power",zr);/**
|
|
67
|
-
* @license lucide-react v0.577.0 - ISC
|
|
68
|
-
*
|
|
69
|
-
* This source code is licensed under the ISC license.
|
|
70
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
71
|
-
*/const Wr=[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]],Vr=J("rotate-cw",Wr);/**
|
|
72
|
-
* @license lucide-react v0.577.0 - ISC
|
|
73
|
-
*
|
|
74
|
-
* This source code is licensed under the ISC license.
|
|
75
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
76
|
-
*/const Xr=[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}],["path",{d:"M7 12h10",key:"b7w52i"}]],Yr=J("scan-line",Xr);/**
|
|
77
|
-
* @license lucide-react v0.577.0 - ISC
|
|
78
|
-
*
|
|
79
|
-
* This source code is licensed under the ISC license.
|
|
80
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
81
|
-
*/const Kr=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]],Gr=J("square",Kr);/**
|
|
82
|
-
* @license lucide-react v0.577.0 - ISC
|
|
83
|
-
*
|
|
84
|
-
* This source code is licensed under the ISC license.
|
|
85
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
86
|
-
*/const qr=[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]],Jr=J("video",qr);/**
|
|
87
|
-
* @license lucide-react v0.577.0 - ISC
|
|
88
|
-
*
|
|
89
|
-
* This source code is licensed under the ISC license.
|
|
90
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
91
|
-
*/const Zr=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}],["path",{d:"M19.364 18.364a9 9 0 0 0 0-12.728",key:"ijwkga"}]],Qr=J("volume-2",Zr);/**
|
|
92
|
-
* @license lucide-react v0.577.0 - ISC
|
|
93
|
-
*
|
|
94
|
-
* This source code is licensed under the ISC license.
|
|
95
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
96
|
-
*/const es=[["path",{d:"M11 4.702a.705.705 0 0 0-1.203-.498L6.413 7.587A1.4 1.4 0 0 1 5.416 8H3a1 1 0 0 0-1 1v6a1 1 0 0 0 1 1h2.416a1.4 1.4 0 0 1 .997.413l3.383 3.384A.705.705 0 0 0 11 19.298z",key:"uqj9uw"}],["path",{d:"M16 9a5 5 0 0 1 0 6",key:"1q6k2b"}]],ts=J("volume-1",es);function ns(e){const[t,r]=o.useState(null);return o.useEffect(()=>{e&&or(e).then(r)},[e]),{build:t}}function rs(e){const[t,r]=o.useState([]),[s,a]=o.useState(null),[i,c]=o.useState(null),[h,d]=o.useState(""),[m,p]=o.useState(!1),[g,u]=o.useState(""),b=o.useCallback(D=>{D.type==="agents:listed"&&r(D.sessions),D.type==="session:joined"&&(p(!1),u("Connected")),D.type==="error"&&(p(!1),u(`Error: ${D.message}`))},[]),{send:R,connected:L}=sn(b);o.useEffect(()=>{if(!L)return;R({type:"agents:list"});const D=setInterval(()=>R({type:"agents:list"}),5e3);return()=>clearInterval(D)},[L,R]);const k=o.useRef({sessionId:i,deviceId:h});o.useEffect(()=>{k.current={sessionId:i,deviceId:h}},[i,h]),o.useEffect(()=>()=>{const{sessionId:D,deviceId:B}=k.current;D&&B&&R({type:"device:shutdown",sessionId:D,payload:{deviceId:B}})},[R]);const A=t.filter(D=>D.devices.some(B=>B.platform===e)),C=o.useCallback(D=>{d(D.id),p(!0),u("Booting…"),c(D.sessionId)},[]),T=o.useCallback(()=>d(""),[]),N=o.useCallback(()=>{const{sessionId:D,deviceId:B}=k.current;D&&B&&R({type:"device:shutdown",sessionId:D,payload:{deviceId:B}}),c(null),p(!1),u("")},[R]),F=o.useCallback(()=>{const{sessionId:D,deviceId:B}=k.current;D&&B&&R({type:"device:shutdown",sessionId:D,payload:{deviceId:B}}),c(null),a(null),p(!1),u("")},[R]);return{sessions:t,selectedAgent:s,setSelectedAgent:a,activeSessionId:i,deviceId:h,booting:m,status:g,send:R,connected:L,agentGroups:A,startDevice:C,resetDevice:T,handleBack:N,handleBackToMacs:F}}function ss(e,t){const[r,s]=o.useState(""),[a,i]=o.useState(""),[c,h]=o.useState("app-only"),d=(e==null?void 0:e.devices.filter(g=>g.platform===t))??[],m=[...new Set(d.map(g=>g.osVersion).filter(Boolean))].sort((g,u)=>{const b=k=>k.replace(/^[^\d]*/,"").split(".").map(Number),[R,L]=[b(g),b(u)];for(let k=0;k<Math.max(R.length,L.length);k++){const A=(L[k]??0)-(R[k]??0);if(A!==0)return A}return 0}),p=(r?d.filter(g=>g.osVersion===r):d).filter(g=>!a||g.name.toLowerCase().includes(a.toLowerCase()));return{filteredDevices:d,osVersions:m,osVersion:r,setOsVersion:s,deviceSearch:a,setDeviceSearch:i,versionedDevices:p,resetMode:c,setResetMode:h}}function os(){const[e]=en(),t=e.get("perf")==="1",[r,s]=o.useState(t);return o.useEffect(()=>{if(!t){s(!1);return}s(!0);const a=i=>{i.ctrlKey&&i.shiftKey&&i.key==="P"&&s(c=>!c)};return window.addEventListener("keydown",a),()=>window.removeEventListener("keydown",a)},[t]),{perfMode:t,visible:r}}const as=["video/mp4;codecs=avc1","video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function dn({sessionId:e,buildId:t,onRecordingUploaded:r}){const[s,a]=o.useState("idle"),i=o.useRef(null),c=o.useRef(r);o.useEffect(()=>{c.current=r},[r]);const h=o.useRef(!1),d=o.useRef(null),m=o.useRef([]),p=o.useRef(""),g=o.useRef(0),u=o.useRef(null),b=o.useCallback(()=>{var k;h.current&&((k=u.current)==null||k.call(u),g.current=requestAnimationFrame(b))},[]),R=o.useCallback(k=>{const A=i.current;if(!A)return;const C=A.getContext("2d");C&&(C.fillStyle="#000",C.fillRect(0,0,A.width,A.height));const T=as.find(F=>MediaRecorder.isTypeSupported(F))??"";if(!T)return;p.current=T,m.current=[];const N=new MediaRecorder(A.captureStream(30),{mimeType:T});N.ondataavailable=F=>{F.data.size>0&&m.current.push(F.data)},d.current=N,N.start(1e3),u.current=k,h.current=!0,g.current=requestAnimationFrame(b),a("recording")},[b]),L=o.useCallback(async()=>{var F;a("uploading"),h.current=!1,cancelAnimationFrame(g.current);const k=d.current;if(!k){a("idle");return}await new Promise(D=>{const B=setTimeout(D,5e3);k.onstop=()=>{clearTimeout(B),D()};try{k.stop()}catch{clearTimeout(B),D()}}),d.current=null;const A=p.current,C=A.includes("mp4")?".mp4":".webm",T=new Blob(m.current,{type:A});m.current=[];const N=new FormData;N.append("file",T,`tapflow-${Date.now()}${C}`);try{const D=new URLSearchParams({sessionId:e});t&&D.set("buildId",String(t));const B=await fetch(`/api/v1/recordings/upload?${D}`,{method:"POST",credentials:"include",body:N}),X=await B.json();if(B.ok&&X.url){const I=document.createElement("a");I.href=X.url,I.download="",I.click(),(F=c.current)==null||F.call(c),a("done"),setTimeout(()=>a("idle"),2e3)}else a("idle")}catch{a("idle")}},[e,t]);return o.useEffect(()=>{if(s!=="recording")return;const k=()=>{document.visibilityState==="hidden"&&L()};return document.addEventListener("visibilitychange",k),()=>{var A;document.removeEventListener("visibilitychange",k),h.current&&(h.current=!1,cancelAnimationFrame(g.current),(A=d.current)==null||A.stop(),d.current=null)}},[s,L]),{recordState:s,recordCanvasRef:i,startClientRecording:R,stopClientRecording:L}}function fn(){const e=o.useRef(0),[t,r]=o.useState(0);return o.useEffect(()=>{const s=setInterval(()=>{r(e.current),e.current=0},1e3);return()=>clearInterval(s)},[]),{fps:t,frameCount:e}}function Ge({className:e,...t}){return n.jsx("kbd",{"data-slot":"kbd",className:q("bg-muted text-muted-foreground pointer-events-none inline-flex h-5 w-fit min-w-5 select-none items-center justify-center gap-1 rounded-sm px-1 font-sans text-xs font-medium","[&_svg:not([class*='size-'])]:size-3","[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10",e),...t})}function Et({className:e,...t}){return n.jsx("kbd",{"data-slot":"kbd-group",className:q("inline-flex items-center gap-1",e),...t})}function rt({label:e,keys:t}){return n.jsxs("span",{className:"flex items-center gap-3",children:[e,n.jsx(Et,{children:t.map(r=>n.jsx(Ge,{children:r},r))})]})}function hn({joined:e,onScreenshot:t,onRecordToggle:r,recordState:s,onRotate:a,onDeepLink:i,platformSlot:c,launchSlot:h}){return e?n.jsx(Ct,{delayDuration:400,children:n.jsxs("div",{className:"flex flex-col items-center gap-0.5 rounded-2xl border bg-background/90 backdrop-blur-sm px-1.5 py-2.5 shrink-0 mt-3",children:[h,c,n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:i,children:n.jsx(un,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsx(rt,{label:"Deeplink",keys:["⌘","K"]})})]}),n.jsx("div",{className:"w-4 h-px bg-border my-1"}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:t,children:n.jsx(Cr,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsx(rt,{label:"Screenshot",keys:["⌘","S"]})})]}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:q("h-8 w-8",s==="recording"&&"text-red-500 hover:text-red-500"),disabled:s==="uploading"||s==="done",onClick:r,children:s==="uploading"?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):s==="recording"?n.jsx(Gr,{className:"h-4 w-4 fill-current"}):n.jsx(Jr,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:s==="idle"?n.jsx(rt,{label:"Start recording",keys:["⌘","⇧","Y"]}):s==="recording"?n.jsx(rt,{label:"Stop recording",keys:["⌘","⇧","Y"]}):"Processing…"})]}),n.jsx("div",{className:"w-4 h-px bg-border my-1"}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:a,children:n.jsx(Vr,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsx(rt,{label:"Rotate",keys:["⌘","⇧","O"]})})]})]})}):null}class Nt{constructor(t){this.bytes=t,this.bitPos=0}get position(){return this.bitPos}bit(){const t=this.bitPos>>3,r=7-(this.bitPos&7);return this.bitPos++,t>=this.bytes.length?0:this.bytes[t]>>r&1}bits(t){let r=0;for(let s=0;s<t;s++)r=r<<1|this.bit();return r>>>0}flag(){return this.bit()===1}ue(){let t=0;for(;this.bit()===0&&t<32;)t++;return t===0?0:(1<<t)-1+this.bits(t)}se(){const t=this.ue();return t&1?Math.ceil(t/2):-Math.ceil(t/2)}}class is{constructor(){this.bitsArr=[]}bit(t){this.bitsArr.push(t&1)}ue(t){const r=t+1,s=Math.floor(Math.log2(r));for(let a=0;a<s;a++)this.bit(0);for(let a=s;a>=0;a--)this.bit(r>>a&1)}toBytes(){const t=[];for(let r=0;r<this.bitsArr.length;r+=8){let s=0;for(let a=0;a<8;a++)s=s<<1|(this.bitsArr[r+a]??0);t.push(s)}return new Uint8Array(t)}}function pn(e){const t=[];let r=0;for(let s=1;s<e.length;s++){const a=e[s];if(r>=2&&a===3){r=0;continue}t.push(a),r=a===0?r+1:0}return new Uint8Array(t)}function cs(e){const t=[];let r=0;for(const s of e)r>=2&&s<=3&&(t.push(3),r=0),t.push(s),r=s===0?r+1:0;return new Uint8Array(t)}const ls=new Set([100,110,122,244,44,83,86,118,128,138,139,134,135]);function Wt(e){const t=e.ue()+1;e.bits(4),e.bits(4);for(let r=0;r<t;r++)e.ue(),e.ue(),e.flag();e.bits(5),e.bits(5),e.bits(5),e.bits(5)}function mn(e){const t=e.bits(8);e.bits(8);const r=e.bits(8);if(e.ue(),ls.has(t)){const g=e.ue();if(g===3&&e.flag(),e.ue(),e.ue(),e.flag(),e.flag()){const u=g!==3?8:12;for(let b=0;b<u;b++)if(e.flag()){const R=b<6?16:64;let L=8,k=8;for(let A=0;A<R;A++)k!==0&&(k=(L+e.se()+256)%256),L=k===0?L:k}}}e.ue();const s=e.ue();if(s===0)e.ue();else if(s===1){e.flag(),e.se(),e.se();const g=e.ue();for(let u=0;u<g;u++)e.se()}const a=e.ue();e.flag(),e.ue(),e.ue(),e.flag()||e.flag(),e.flag(),e.flag()&&(e.ue(),e.ue(),e.ue(),e.ue());const i={profileIdc:t,levelIdc:r,numRefFrames:a,bitstreamRestriction:!1,maxNumReorderFrames:null,maxDecFrameBuffering:null};if(!e.flag())return{...i,vuiPresent:!1,restrictionFlagPos:-1};e.flag()&&e.bits(8)===255&&(e.bits(16),e.bits(16)),e.flag()&&e.flag(),e.flag()&&(e.bits(3),e.flag(),e.flag()&&(e.bits(8),e.bits(8),e.bits(8))),e.flag()&&(e.ue(),e.ue()),e.flag()&&(e.bits(32),e.bits(32),e.flag());const h=e.flag();h&&Wt(e);const d=e.flag();d&&Wt(e),(h||d)&&e.flag(),e.flag();const m=e.position;return e.flag()?(e.flag(),e.ue(),e.ue(),e.ue(),e.ue(),{...i,vuiPresent:!0,bitstreamRestriction:!0,maxNumReorderFrames:e.ue(),maxDecFrameBuffering:e.ue(),restrictionFlagPos:m}):{...i,vuiPresent:!0,restrictionFlagPos:m}}function us(e){const t=mn(new Nt(pn(e)));return{profileIdc:t.profileIdc,levelIdc:t.levelIdc,vuiPresent:t.vuiPresent,bitstreamRestriction:t.bitstreamRestriction,maxNumReorderFrames:t.maxNumReorderFrames,maxDecFrameBuffering:t.maxDecFrameBuffering}}function ds(e){const t=pn(e),r=mn(new Nt(t));if(!r.vuiPresent||r.restrictionFlagPos<0||r.bitstreamRestriction)return null;const s=new is,a=new Nt(t);for(let i=0;i<r.restrictionFlagPos;i++)s.bit(a.bit());return s.bit(1),s.bit(1),s.ue(0),s.ue(0),s.ue(0),s.ue(0),s.ue(0),s.ue(r.numRefFrames),s.bit(1),Uint8Array.from([e[0],...cs(s.toBytes())])}function fs(e){const t=[],r=e.length;let s=-1,a=0;for(;a+2<r;){const i=a+3<r&&e[a]===0&&e[a+1]===0&&e[a+2]===0&&e[a+3]===1,c=e[a]===0&&e[a+1]===0&&e[a+2]===1;i||c?(s>=0&&t.push(e.subarray(s,a)),a+=i?4:3,s=a):a++}return s>=0&&t.push(e.subarray(s,r)),t}class hs{constructor(t){this.onFrame=t,this.decoder=null,this.sps=null,this.pps=null,this.frameCount=0,this.submitAt=new Map,this.spsLogged=!1}setDecodeSampler(t){this.decodeSampler=t}decode(t){const r=[];let s=!1;for(const m of fs(new Uint8Array(t))){const p=m[0]&31;if(p===7){const g=!this.sps||m.length!==this.sps.length||m.some((u,b)=>u!==this.sps[b]);this.sps=m,g&&this.decoder&&(this.decoder.close(),this.decoder=null)}else p===8?this.pps=m:p>=1&&p<=5&&(p===5&&(s=!0),r.push(m))}if(s&&this.sps&&this.pps&&!this.decoder&&this.initDecoder(this.sps,this.pps),!this.decoder||r.length===0)return;let a=0;for(const m of r)a+=4+m.length;const i=new Uint8Array(a),c=new DataView(i.buffer);let h=0;for(const m of r)c.setUint32(h,m.length,!1),h+=4,i.set(m,h),h+=m.length;const d=Math.round(this.frameCount++*(1e6/30));if(this.decodeSampler&&(this.submitAt.set(d,performance.now()),this.submitAt.size>120)){const m=this.submitAt.keys().next().value;m!==void 0&&this.submitAt.delete(m)}try{this.decoder.decode(new EncodedVideoChunk({type:s?"key":"delta",timestamp:d,data:i}))}catch{}}sampleDecode(t){var s;if(!this.decodeSampler)return;const r=this.submitAt.get(t.timestamp);r!==void 0&&(this.submitAt.delete(t.timestamp),this.decodeSampler({decodeMs:performance.now()-r,queueSize:((s=this.decoder)==null?void 0:s.decodeQueueSize)??0}))}close(){var t;(t=this.decoder)==null||t.close(),this.decoder=null}logSpsVui(t){if(!(this.spsLogged||!this.decodeSampler)){this.spsLogged=!0;try{console.log("[sps-vui]",JSON.stringify(us(t)))}catch(r){console.warn("[sps-vui] parse failed",r)}}}initDecoder(t,r){this.logSpsVui(t);const s=ds(t)??t,a=s[0]===0?s.subarray(4):s,i=`avc1.${a[1].toString(16).padStart(2,"0")}${a[2].toString(16).padStart(2,"0")}${a[3].toString(16).padStart(2,"0")}`,c=this.buildAVCC(s,r);this.decoder=new VideoDecoder({output:h=>{this.sampleDecode(h),this.onFrame(h)},error:h=>console.error("[WebCodecsCore]",h)}),this.decoder.configure({codec:i,description:c,optimizeForLatency:!0})}buildAVCC(t,r){const s=t[0]===0?t.subarray(4):t,a=r[0]===0?r.subarray(4):r,i=new Uint8Array(8+s.length+1+2+a.length);let c=0;return i[c++]=1,i[c++]=s[1],i[c++]=s[2],i[c++]=s[3],i[c++]=255,i[c++]=225,i[c++]=s.length>>8&255,i[c++]=s.length&255,i.set(s,c),c+=s.length,i[c++]=1,i[c++]=a.length>>8&255,i[c++]=a.length&255,i.set(a,c),i}}const ps=`#version 300 es
|
|
97
|
-
in vec2 a_pos;
|
|
98
|
-
out vec2 v_uv;
|
|
99
|
-
void main() {
|
|
100
|
-
v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);
|
|
101
|
-
gl_Position = vec4(a_pos, 0.0, 1.0);
|
|
102
|
-
}`,ms=`#version 300 es
|
|
103
|
-
precision mediump float;
|
|
104
|
-
in vec2 v_uv;
|
|
105
|
-
uniform sampler2D u_tex;
|
|
106
|
-
out vec4 out_color;
|
|
107
|
-
void main() {
|
|
108
|
-
out_color = texture(u_tex, v_uv);
|
|
109
|
-
}`;function gs(e){const t=e.getContext("webgl2",{alpha:!1,antialias:!1,powerPreference:"high-performance",preserveDrawingBuffer:!0});if(!t)return null;const r=(p,g)=>{const u=t.createShader(p);return t.shaderSource(u,g),t.compileShader(u),u},s=t.createProgram(),a=r(t.VERTEX_SHADER,ps),i=r(t.FRAGMENT_SHADER,ms);t.attachShader(s,a),t.attachShader(s,i),t.linkProgram(s),t.deleteShader(a),t.deleteShader(i),t.useProgram(s);const c=t.createVertexArray();t.bindVertexArray(c);const h=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),t.STATIC_DRAW);const d=t.getAttribLocation(s,"a_pos");t.enableVertexAttribArray(d),t.vertexAttribPointer(d,2,t.FLOAT,!1,0,0),t.bindVertexArray(null);const m=t.createTexture();return t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,m),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.uniform1i(t.getUniformLocation(s,"u_tex"),0),{gl:t,program:s,tex:m,vao:c}}class xs{constructor(t){this.canvas=t,this.state=null}init(){return this.state=gs(this.canvas),this.state!==null}drawFrame(t){const r=this.state;if(!r)return t.close(),null;const s=t.displayWidth,a=t.displayHeight;try{return(this.canvas.width!==s||this.canvas.height!==a)&&(this.canvas.width=s,this.canvas.height=a,r.gl.viewport(0,0,s,a)),r.gl.activeTexture(r.gl.TEXTURE0),r.gl.bindTexture(r.gl.TEXTURE_2D,r.tex),r.gl.texImage2D(r.gl.TEXTURE_2D,0,r.gl.RGBA,r.gl.RGBA,r.gl.UNSIGNED_BYTE,t),r.gl.bindVertexArray(r.vao),r.gl.drawArrays(r.gl.TRIANGLES,0,6),r.gl.bindVertexArray(null),r.gl.bindTexture(r.gl.TEXTURE_2D,null),{width:s,height:a}}finally{t.close()}}dispose(){const t=this.state;t&&(t.gl.deleteTexture(t.tex),t.gl.deleteVertexArray(t.vao),t.gl.deleteProgram(t.program),this.state=null)}}function bs(e){const t=new xs(e);return t.init(),t}class ys{constructor(t=bs){this._size=null,this.canvas=document.createElement("canvas"),this.renderer=t(this.canvas),this.core=new hs(r=>this.render(r))}get surface(){return this.canvas}get size(){return this._size}onResize(t){this.resizeCb=t}onDecodedFrame(t){this.decodedCb=t,this.core.setDecodeSampler(r=>{this.lastSample=r})}decode(t){this.core.decode(t)}close(){this.core.close(),this.renderer.dispose()}render(t){var s,a;const r=this.renderer.drawFrame(t);r&&((s=this.decodedCb)==null||s.call(this,performance.now(),this.lastSample),this.lastSample=void 0,(!this._size||this._size.width!==r.width||this._size.height!==r.height)&&(this._size=r,(a=this.resizeCb)==null||a.call(this,r)))}}const vs=`#version 300 es
|
|
110
|
-
in vec2 a_pos;
|
|
111
|
-
out vec2 v_uv;
|
|
112
|
-
void main() {
|
|
113
|
-
v_uv = vec2(a_pos.x * 0.5 + 0.5, 0.5 - a_pos.y * 0.5);
|
|
114
|
-
gl_Position = vec4(a_pos, 0.0, 1.0);
|
|
115
|
-
}`,ws=`#version 300 es
|
|
116
|
-
precision mediump float;
|
|
117
|
-
in vec2 v_uv;
|
|
118
|
-
uniform sampler2D u_texY;
|
|
119
|
-
uniform sampler2D u_texU;
|
|
120
|
-
uniform sampler2D u_texV;
|
|
121
|
-
out vec4 out_color;
|
|
122
|
-
void main() {
|
|
123
|
-
float Y = (texture(u_texY, v_uv).r - 0.0627451) * 1.1643836; // (y-16/255)*255/219
|
|
124
|
-
float U = (texture(u_texU, v_uv).r - 0.5019608) * 1.1383929; // (u-128/255)*255/224
|
|
125
|
-
float V = (texture(u_texV, v_uv).r - 0.5019608) * 1.1383929;
|
|
126
|
-
float r = Y + 1.5748 * V;
|
|
127
|
-
float g = Y - 0.1873 * U - 0.4681 * V;
|
|
128
|
-
float b = Y + 1.8556 * U;
|
|
129
|
-
out_color = vec4(r, g, b, 1.0);
|
|
130
|
-
}`;function Rt(e,t,r,s){const a=e.createTexture();return e.activeTexture(e.TEXTURE0+t),e.bindTexture(e.TEXTURE_2D,a),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.uniform1i(e.getUniformLocation(s,r),t),a}function Ss(e){const t=e.getContext("webgl2",{alpha:!1,antialias:!1,powerPreference:"high-performance",preserveDrawingBuffer:!0});if(!t)return null;const r=(u,b)=>{const R=t.createShader(u);return t.shaderSource(R,b),t.compileShader(R),R},s=t.createProgram(),a=r(t.VERTEX_SHADER,vs),i=r(t.FRAGMENT_SHADER,ws);t.attachShader(s,a),t.attachShader(s,i),t.linkProgram(s),t.deleteShader(a),t.deleteShader(i),t.useProgram(s);const c=t.createVertexArray();t.bindVertexArray(c);const h=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,h),t.bufferData(t.ARRAY_BUFFER,new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),t.STATIC_DRAW);const d=t.getAttribLocation(s,"a_pos");t.enableVertexAttribArray(d),t.vertexAttribPointer(d,2,t.FLOAT,!1,0,0),t.bindVertexArray(null),t.pixelStorei(t.UNPACK_ALIGNMENT,1);const m=Rt(t,0,"u_texY",s),p=Rt(t,1,"u_texU",s),g=Rt(t,2,"u_texV",s);return{gl:t,program:s,texY:m,texU:p,texV:g,vao:c}}class Rs{constructor(t){this.canvas=t,this.state=null}init(){return this.state=Ss(this.canvas),this.state!==null}drawI420(t,r,s){const a=this.state;if(!a)return null;const{gl:i}=a,c=r+1>>1,h=s+1>>1,d=r*s,m=c*h,p=t.subarray(0,d),g=t.subarray(d,d+m),u=t.subarray(d+m,d+2*m);(this.canvas.width!==r||this.canvas.height!==s)&&(this.canvas.width=r,this.canvas.height=s,i.viewport(0,0,r,s));const b=(R,L,k,A,C)=>{i.activeTexture(i.TEXTURE0+R),i.bindTexture(i.TEXTURE_2D,L),i.texImage2D(i.TEXTURE_2D,0,i.R8,k,A,0,i.RED,i.UNSIGNED_BYTE,C)};return b(0,a.texY,r,s,p),b(1,a.texU,c,h,g),b(2,a.texV,c,h,u),i.bindVertexArray(a.vao),i.drawArrays(i.TRIANGLES,0,6),i.bindVertexArray(null),{width:r,height:s}}dispose(){const t=this.state;t&&(t.gl.deleteTexture(t.texY),t.gl.deleteTexture(t.texU),t.gl.deleteTexture(t.texV),t.gl.deleteVertexArray(t.vao),t.gl.deleteProgram(t.program),this.state=null)}}const js=0;function ks(e){const t=new Rs(e);return t.init(),t}function Cs(){return new Worker(new URL("/assets/tinyh264.worker-DiJ50Hai.js",import.meta.url),{type:"module"})}class Es{constructor(t=ks,r=Cs){this.ready=!1,this.pending=[],this._size=null,this.canvas=document.createElement("canvas"),this.renderer=t(this.canvas),this.worker=r(),this.worker.onmessage=s=>this.onMessage(s.data)}get surface(){return this.canvas}get size(){return this._size}onResize(t){this.resizeCb=t}onDecodedFrame(t){this.decodedCb=t}decode(t){if(!this.ready){this.pending.push(t);return}this.post(t)}close(){this.worker.terminate(),this.renderer.dispose()}post(t){this.worker.postMessage({type:"decode",data:t,offset:0,length:t.byteLength,renderStateId:js},[t])}onMessage(t){var s,a;if(t.type==="decoderReady"){this.ready=!0;for(const i of this.pending)this.post(i);this.pending.length=0;return}const r=this.renderer.drawI420(new Uint8Array(t.data),t.width,t.height);r&&((s=this.decodedCb)==null||s.call(this,performance.now()),(!this._size||this._size.width!==r.width||this._size.height!==r.height)&&(this._size=r,(a=this.resizeCb)==null||a.call(this,r)))}}function Tt(){const e=typeof window<"u";let t=!1;try{t=!!document.createElement("canvas").getContext("webgl2")}catch{t=!1}return{secureContext:e&&window.isSecureContext===!0,webCodecs:e&&"VideoDecoder"in window,webgl2:t,wasm:typeof WebAssembly<"u"&&typeof Worker<"u"}}function Ns(e=Tt()){return e.secureContext&&e.webCodecs&&e.webgl2?new ys:e.wasm&&e.webgl2?new Es:null}function _s(e=Tt()){return e.secureContext&&e.webCodecs&&e.webgl2||e.wasm&&e.webgl2}function Ts(e=Tt()){return e.secureContext&&e.webCodecs&&e.webgl2?"high":e.wasm&&e.webgl2?"standard":"unsupported"}const Vt="tapflow.perfModeNoticeDismissed",Ps="https://www.tapflow.dev/reference/configuration#https-secure-context";function As(e,t){return e==="standard"&&!t}function Ds({open:e,onOpenChange:t}){return n.jsx(on,{open:e,onOpenChange:t,children:n.jsxs(an,{className:"sm:max-w-[440px]",children:[n.jsxs(dr,{children:[n.jsx(cn,{children:"Streaming in Standard mode"}),n.jsxs(fr,{className:"space-y-3 pt-1",children:[n.jsx("span",{className:"block",children:"This screen is running in Standard mode. For a faster, smoother picture, switch to Smooth."}),n.jsx("span",{className:"block",children:"Smooth needs the relay served over HTTPS. If you didn't set up tapflow, ask whoever did."})]})]}),n.jsxs(hr,{children:[n.jsx(ee,{variant:"outline",onClick:()=>window.open(Ps,"_blank","noopener,noreferrer"),children:"How to enable"}),n.jsx(ee,{onClick:()=>t(!1),children:"Got it"})]})]})})}const Ls={high:"Smooth",standard:"Standard",unsupported:null};function Ms(e){const{connected:t,joined:r,bootError:s,deviceReady:a,installing:i,installError:c}=e;return t?r?s?`Boot failed: ${s.length>40?s.slice(0,40)+"…":s}`:a?i?"Installing app…":c?`Install failed: ${c}`:null:"Starting device…":"Joining session…":"Connecting…"}function Pt(e){const{joined:t,fps:r,keyboardActive:s}=e,a=Ms(e),i=r>15,c=i?"#10b981":"#94a3b8",h=i?"Active":"Idle",d=o.useMemo(()=>Ts(),[]),m=Ls[d],[p,g]=o.useState(!1);o.useEffect(()=>{let b=!1;try{b=localStorage.getItem(Vt)==="1"}catch{}As(d,b)&&g(!0)},[d]);const u=b=>{if(g(b),!b)try{localStorage.setItem(Vt,"1")}catch{}};return n.jsxs("div",{className:"w-[300px] shrink-0 mt-3 rounded-xl border bg-background px-4 py-4 flex flex-col gap-3",children:[n.jsxs("div",{className:q("flex items-center",s?"text-emerald-500":"text-muted-foreground"),style:{gap:6},children:[n.jsx(Yr,{className:"h-3.5 w-3.5 shrink-0"}),n.jsx("span",{className:"text-[12px] font-medium",children:"Focus"})]}),t&&n.jsxs("div",{className:"flex items-center gap-[12px]",children:[n.jsxs("div",{className:"flex items-center gap-[4px]",children:[n.jsx("span",{className:"h-2 w-2 rounded-full shrink-0 mr-1",style:{background:c}}),n.jsx("span",{className:"text-[12px] font-mono text-foreground/75",children:r}),n.jsx("span",{className:"text-[12px] text-muted-foreground",children:"fps"}),n.jsx("span",{className:"text-[11px] text-muted-foreground/60",children:"·"}),n.jsx("span",{className:q("text-[11px]",i?"text-emerald-500":"text-muted-foreground/60"),children:h})]}),m&&n.jsxs(n.Fragment,{children:[n.jsx(tn,{orientation:"vertical",className:"h-3"}),d==="standard"?n.jsx("button",{type:"button",onClick:()=>g(!0),className:"text-[11px] text-foreground/70 hover:text-foreground underline-offset-2 hover:underline",children:m}):n.jsx("span",{className:"text-[11px] text-muted-foreground",children:m})]})]}),a&&n.jsx("p",{className:"text-[12px] text-muted-foreground leading-relaxed break-all",children:a}),n.jsx(Ds,{open:p,onOpenChange:u})]})}function gn({open:e,onOpenChange:t,sessionId:r,send:s}){const[a,i]=o.useState(""),c=o.useRef(null);o.useEffect(()=>{e?setTimeout(()=>{var d;return(d=c.current)==null?void 0:d.focus()},0):i("")},[e]);const h=()=>{a.trim()&&(s({type:"open-url",sessionId:r,payload:{url:a.trim()}}),t(!1))};return n.jsx(on,{open:e,onOpenChange:t,children:n.jsxs(an,{className:"w-[500px] max-w-[500px] h-[52px] !rounded-[18px] p-[10px] border border-border bg-background shadow-lg overflow-hidden [&>button]:hidden","aria-describedby":void 0,children:[n.jsx(cn,{className:"sr-only",children:"Open Deeplink"}),n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsxs("div",{className:"flex-1 h-[32px] flex items-center gap-2 pl-[4px] pb-[1px]",children:[n.jsx(ar,{className:"h-4 w-4 text-muted-foreground shrink-0"}),n.jsx("input",{ref:c,className:"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground min-w-0",placeholder:"myapp://home...",value:a,onChange:d=>i(d.target.value),onKeyDown:d=>{d.key==="Enter"&&h()}})]}),n.jsx(ee,{size:"sm",disabled:!a.trim(),onClick:h,className:"shrink-0 rounded-xl h-8 px-4",children:"Open"})]})]})})}function Hs(e,t,r,s,a,i){const{x:c,y:h,width:d,height:m}=a;let p,g;if(i){const u=(e.x-t.left)/t.width;p=(1-(e.y-t.top)/t.height)*r,g=u*s}else p=(e.x-t.left)*(r/t.width),g=(e.y-t.top)*(s/t.height);return p<c||p>c+d||g<h||g>h+m?null:{x:(p-c)/d,y:(g-h)/m}}function Us(e,t,r){const s=(e.x-t.left)/t.width,a=(e.y-t.top)/t.height;return s<0||s>1||a<0||a>1?null:r?{x:a,y:1-s}:{x:s,y:a}}function xn(e){return{f0:{x:1-e.x,y:1-e.y},f1:e}}function Fs(e,t){return e>0?Math.min(1,t/e):1}const _t=22,Xt=[84,70,70,69],Is=1,$s=0,mt=1,bn=2,Bs=1,zs=2,Os=4;function Ws(e){if(e.byteLength<_t)return null;const t=new DataView(e);for(let a=0;a<Xt.length;a++)if(t.getUint8(a)!==Xt[a])return null;if(t.getUint8(4)!==Is)return null;const r=t.getUint8(5),s=r&Os?bn:r&Bs?mt:$s;return{capturedAt:Number(t.getBigUint64(6)),relayedAt:Number(t.getBigUint64(14)),codec:s,keyframe:s===mt&&(r&zs)!==0}}function yn(e){const{binaryFrameHandlerRef:t,perfHookRef:r,frameCount:s}=e,a=o.useRef(e);a.current=e,o.useEffect(()=>{let i=null,c=!1,h=!1,d;const m=()=>{if(i)return i;if(c)return null;const p=Ns();return p?(i=p,p.onResize(g=>a.current.onResize(g)),d=a.current.onDecoderReady(p),p):(c=!0,a.current.onUnsupported(),console.warn("[decoder] none available — set up HTTPS or use a supported browser"),null)};return t.current=(p,g)=>{const u=a.current.onJpegFrame;if(u&&(g==null?void 0:g.codec)!==mt){u(p,g);return}const b=m();if(b){if(!h){if(!(g!=null&&g.keyframe))return;h=!0}b.decode(p),s.current+=1}},()=>{t.current=void 0,typeof d=="function"&&d(),i==null||i.close(),i==null||i.surface.remove(),i=null}},[t,r,s])}const Ee=13,Ye=8,Yt=16,Vs=.02,Xs=100;function Ys({sessionId:e,buildId:t,send:r,connected:s,joined:a,deviceReady:i,installing:c,installed:h,installError:d,bootError:m,launching:p,setLaunching:g,chrome:u,binaryFrameHandlerRef:b,onRecordingUploaded:R,swKeyboardVisible:L,swKeyboardPending:k,onKbdToggle:A,perfHookRef:C}){const T=o.useRef(null),N=o.useRef(null),F=o.useRef(null),{fps:D,frameCount:B}=fn(),X=o.useRef(0),{recordState:I,recordCanvasRef:O,startClientRecording:Z,stopClientRecording:Re}=dn({sessionId:e,buildId:t,onRecordingUploaded:R}),fe=o.useRef(0),[ne,je]=o.useState(!1),[De,re]=o.useState(!1),[E,W]=o.useState(!1),[Y,ie]=o.useState(!1),[ke,se]=o.useState(null),[U,z]=o.useState(null),[ce,Q]=o.useState(!1),[K,be]=o.useState(null),he=o.useRef(K);o.useEffect(()=>{he.current=K},[K]);const le=o.useRef(null),ue=o.useRef(null),oe=o.useRef(!1),ae=o.useRef(!1),pe=o.useRef(0),te=o.useRef(null),me=o.useRef(null),Ce=o.useRef("idle"),_e=o.useRef(null),$e=o.useRef(null),Le=o.useRef(null);o.useEffect(()=>{Le.current=u},[u]),o.useEffect(()=>{const l=new Image;l.onload=()=>{$e.current=l},l.src=`data:image/png;base64,${u.framePng}`},[u.framePng]),yn({binaryFrameHandlerRef:b,perfHookRef:C,frameCount:B,onUnsupported:()=>{},onResize:l=>{const x=T.current;if(x&&(x.width!==l.width||x.height!==l.height)&&(x.width=l.width,x.height=l.height,!Le.current)){const f=O.current;f&&(f.width=l.width,f.height=l.height)}re(!0)},onDecoderReady:l=>{var v;const x=l.surface,f=T.current;x.style.position="absolute",f&&(x.style.left=f.style.left,x.style.top=f.style.top,x.style.width=f.style.width,x.style.height=f.style.height,x.style.borderRadius=f.style.borderRadius),x.style.objectFit="fill",x.style.zIndex="3",x.style.pointerEvents="none",(v=N.current)==null||v.appendChild(x);let S=null;const j=()=>{const P=T.current,H=P==null?void 0:P.getContext("2d");if(P&&H&&l.size)try{H.drawImage(l.surface,0,0,P.width,P.height)}catch{}S=requestAnimationFrame(j)};return S=requestAnimationFrame(j),()=>{S!==null&&cancelAnimationFrame(S)}},onJpegFrame:l=>{const x=performance.now();X.current&&x-X.current,X.current=x;const f=fe.current;createImageBitmap(new Blob([l],{type:"image/jpeg"})).then(S=>{if(performance.now()-x,fe.current!==f){S.close();return}const j=T.current,v=j==null?void 0:j.getContext("2d");if(!j||!v){S.close();return}if((j.width!==S.width||j.height!==S.height)&&(j.width=S.width,j.height=S.height,!Le.current)){const H=O.current;H&&(H.width=S.width,H.height=S.height)}const P=performance.now();v.drawImage(S,0,0),performance.now()-P,S.close(),re(!0),B.current+=1}).catch(()=>{})}}),o.useEffect(()=>{const l=O.current,x=N.current;l&&x&&(l.width=x.clientWidth,l.height=x.clientHeight)},[u]);const tt=o.useCallback(()=>{const l=O.current,x=T.current;if(!l||!x)return;const f=l.getContext("2d");if(!f)return;const S=Le.current;if(f.clearRect(0,0,l.width,l.height),S){$e.current&&f.drawImage($e.current,0,0,l.width,l.height);const P=Math.round(S.screenCornerRadius/2*(l.height/(S.compositeHeight/2)));f.save(),f.beginPath(),P>0?f.roundRect(x.offsetLeft,x.offsetTop,x.clientWidth,x.clientHeight,P):f.rect(x.offsetLeft,x.offsetTop,x.clientWidth,x.clientHeight),f.clip(),f.drawImage(x,x.offsetLeft,x.offsetTop,x.clientWidth,x.clientHeight),f.restore()}else f.drawImage(x,0,0,l.width,l.height);const j=he.current;if(j)for(const P of[j.f0,j.f1]){const H=S?x.offsetLeft+P.x*x.clientWidth:P.x*l.width,V=S?x.offsetTop+P.y*x.clientHeight:P.y*l.height;oe.current?(f.beginPath(),f.arc(H,V,Ye,0,Math.PI*2),f.fillStyle="rgba(255,255,255,0.92)",f.fill(),f.strokeStyle="rgba(0,0,0,0.2)",f.lineWidth=1,f.stroke()):(f.beginPath(),f.arc(H,V,Ee,0,Math.PI*2),f.strokeStyle="rgba(0,0,0,0.3)",f.lineWidth=3,f.stroke(),f.beginPath(),f.arc(H,V,Ee,0,Math.PI*2),f.strokeStyle="rgba(255,255,255,0.65)",f.lineWidth=1.5,f.stroke())}const v=me.current;if(v){const P=Ce.current,H=_e.current;if(f.save(),P==="down")f.beginPath(),f.arc(v.x,v.y,Ye,0,Math.PI*2),f.fillStyle="rgba(255,255,255,0.92)",f.fill(),f.strokeStyle="rgba(0,0,0,0.2)",f.lineWidth=1,f.stroke();else if(P==="release"&&H){const V=Math.min((performance.now()-H.startTime)/350,1);f.beginPath(),f.arc(v.x,v.y,Ye+26*V,0,Math.PI*2),f.strokeStyle=`rgba(255,255,255,${(1-V)*.55})`,f.lineWidth=1.5,f.stroke(),V>=1&&(Ce.current="idle",_e.current=null)}else f.beginPath(),f.arc(v.x,v.y,Ee,0,Math.PI*2),f.strokeStyle="rgba(0,0,0,0.3)",f.lineWidth=3,f.stroke(),f.beginPath(),f.arc(v.x,v.y,Ee,0,Math.PI*2),f.strokeStyle="rgba(255,255,255,0.65)",f.lineWidth=1.5,f.stroke();f.restore()}},[]),Be=o.useCallback(()=>{const l=T.current;if(!l)return;const x=document.createElement("canvas"),f=x.getContext("2d");f&&(x.width=l.width,x.height=l.height,f.drawImage(l,0,0),x.toBlob(S=>{if(!S)return;const j=URL.createObjectURL(S),v=document.createElement("a");v.href=j,v.download=`tapflow-${Date.now()}.png`,v.click(),URL.revokeObjectURL(j)},"image/png"))},[]),ye=o.useCallback(()=>{if(I==="idle"){const l=O.current;if(!l)return;const x=N.current;if(x&&x.clientWidth>0)l.width=x.clientWidth,l.height=x.clientHeight;else{const f=T.current;if(f&&f.width>0)l.width=f.width,l.height=f.height;else return}Z(tt)}else I==="recording"&&Re()},[I,Z,Re,tt]),Te=o.useCallback(()=>{r({type:"input:rotate",sessionId:e}),W(l=>!l)},[r,e]),it=o.useRef(E);o.useEffect(()=>{it.current=E},[E]),o.useEffect(()=>()=>{it.current&&r({type:"input:rotate",sessionId:e})},[]),o.useEffect(()=>{const l=new Set(["ShiftLeft","ShiftRight","ControlLeft","ControlRight","MetaLeft","MetaRight"]),x=v=>{if(v.code==="AltLeft"||v.code==="AltRight"){ae.current=!0;return}if(v.metaKey){const H=document.activeElement;if(!H||H.tagName!=="INPUT"&&H.tagName!=="TEXTAREA"){if(!v.shiftKey&&v.code==="KeyK"){v.preventDefault(),je(!0);return}if(!v.shiftKey&&v.code==="KeyS"){v.preventDefault(),Be();return}if(v.shiftKey&&v.code==="KeyY"){v.preventDefault(),ye();return}if(v.shiftKey&&v.code==="KeyO"){v.preventDefault(),Te();return}if(v.shiftKey&&v.code==="KeyU"){v.preventDefault(),r({type:"input:button",sessionId:e,payload:{name:"home"}});return}if(v.shiftKey&&v.code==="KeyK"){v.preventDefault(),k||A();return}}}if(!Y||l.has(v.code))return;v.preventDefault();const P=(v.shiftKey?2:0)|(v.ctrlKey?1:0)|(v.metaKey?8:0);r({type:"input:key",sessionId:e,payload:{code:v.code,modifiers:P}})},f=()=>{oe.current&&(oe.current=!1,Q(!1),r({type:"input:pinch:end",sessionId:e})),ae.current=!1,be(null)},S=v=>{(v.code==="AltLeft"||v.code==="AltRight")&&f()},j=()=>{ae.current&&f()};return window.addEventListener("keydown",x),window.addEventListener("keyup",S),window.addEventListener("blur",j),()=>{window.removeEventListener("keydown",x),window.removeEventListener("keyup",S),window.removeEventListener("blur",j)}},[Y,r,e,Be,ye,Te,A,k]),o.useEffect(()=>{if(!Y)return;const l=x=>{const f=N.current??T.current;f&&!f.contains(x.target)&&ie(!1)};return document.addEventListener("pointerdown",l),()=>document.removeEventListener("pointerdown",l)},[Y]);const Pe=o.useCallback(l=>{const x=(E?F.current:null)??N.current;if(!x)return null;const f=x.getBoundingClientRect(),S=u.compositeWidth/2,j=u.compositeHeight/2,v=u.screenRect.x/2,P=u.screenRect.y/2,H=u.screenRect.width/2,V=u.screenRect.height/2;return Hs({x:l.clientX,y:l.clientY},f,S,j,{x:v,y:P,width:H,height:V},E)},[u,E]),ze=o.useCallback(l=>{const x=Pe(l);return x?xn(x):null},[Pe]),Je=o.useCallback(l=>{const x=E?F.current:N.current;if(!x)return null;const f=x.getBoundingClientRect();let S,j;if(E){const v=f.height-(l.clientY-f.top),P=l.clientX-f.left;S=v*(u.compositeWidth/f.height),j=P*(u.compositeHeight/f.width)}else S=(l.clientX-f.left)*(u.compositeWidth/f.width),j=(l.clientY-f.top)*(u.compositeHeight/f.height);for(const v of u.buttons){const P=S-v.normalOffset.x,H=j-v.normalOffset.y;if(P*P+H*H<Xs**2)return v.name}return null},[u,E]),Oe=o.useCallback(l=>{const x=T.current,f=O.current;return x&&x.clientWidth>0?{x:x.offsetLeft+l.x*x.clientWidth,y:x.offsetTop+l.y*x.clientHeight}:{x:l.x*((f==null?void 0:f.width)??1),y:l.y*((f==null?void 0:f.height)??1)}},[]),ge=o.useCallback(l=>{if(ie(!0),ae.current){const v=ze(l);if(!v)return;oe.current=!0,Q(!0),l.target.setPointerCapture(l.pointerId),be(v),r({type:"input:pinch:start",sessionId:e,payload:v});return}const x=Je(l);if(x){le.current=x,se(x);return}const f=Pe(l);if(!f)return;ue.current=f,l.target.setPointerCapture(l.pointerId),me.current=Oe(f),Ce.current="down",_e.current=null;const S=l.currentTarget.getBoundingClientRect(),j=te.current;j&&(j.style.display="block",j.style.left=`${l.clientX-S.left}px`,j.style.top=`${l.clientY-S.top}px`,j.style.width=`${Ye*2}px`,j.style.height=`${Ye*2}px`,j.style.background="rgba(255,255,255,0.92)",j.style.border="1.5px solid rgba(0,0,0,0.2)",j.style.boxShadow="0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"),r({type:"input:touch:start",sessionId:e,payload:f})},[Je,Pe,ze,Oe,r,e]),ct=o.useCallback(l=>{if(l.buttons===0){if(z(Je(l)),ae.current){be(ze(l)),me.current=null;const P=te.current;P&&(P.style.display="none")}else{be(null);const P=Pe(l);me.current=P?Oe(P):null,Ce.current!=="down"&&(Ce.current="idle");const H=te.current;if(H)if(P){const V=l.currentTarget.getBoundingClientRect();H.style.display="block",H.style.left=`${l.clientX-V.left}px`,H.style.top=`${l.clientY-V.top}px`,H.style.width=`${Ee*2}px`,H.style.height=`${Ee*2}px`,H.style.background="transparent",H.style.border="1.5px solid rgba(255,255,255,0.6)",H.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)"}else H.style.display="none"}return}if(oe.current){const P=ze(l);if(!P)return;const H=performance.now();if(H-pe.current<Yt)return;pe.current=H,be(P),r({type:"input:pinch:move",sessionId:e,payload:P});return}if(le.current||!ue.current)return;const x=Pe(l);if(!x)return;const f=x.x-ue.current.x,S=x.y-ue.current.y;if(Math.sqrt(f*f+S*S)<Vs)return;const j=performance.now();if(j-pe.current<Yt)return;pe.current=j,me.current=Oe(x);const v=te.current;if(v&&v.style.display!=="none"){const P=l.currentTarget.getBoundingClientRect();v.style.left=`${l.clientX-P.left}px`,v.style.top=`${l.clientY-P.top}px`}r({type:"input:touch:move",sessionId:e,payload:x})},[Je,Pe,ze,Oe,r,e]),Me=o.useCallback(()=>{if(oe.current){oe.current=!1,Q(!1),be(null),r({type:"input:pinch:end",sessionId:e});return}if(ue.current=null,le.current){r({type:"input:button",sessionId:e,payload:{name:le.current}}),le.current=null,setTimeout(()=>se(null),100);return}Ce.current="release",_e.current={startTime:performance.now()};const l=te.current;l&&(l.style.width=`${Ee*2}px`,l.style.height=`${Ee*2}px`,l.style.background="transparent",l.style.border="1.5px solid rgba(255,255,255,0.6)",l.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)"),r({type:"input:touch:end",sessionId:e})},[r,e]),We=o.useCallback(()=>{if(oe.current){oe.current=!1,Q(!1),be(null),r({type:"input:pinch:end",sessionId:e});return}if(ue.current=null,le.current){le.current=null,se(null);return}Ce.current="release",_e.current={startTime:performance.now()},r({type:"input:touch:end",sessionId:e})},[r,e]),St=o.useCallback(()=>{z(null),be(null),me.current=null;const l=te.current;l&&(l.style.display="none")},[]),He=u.compositeWidth/2,lt=u.compositeHeight/2,Ze=Fs(lt,750),Ve=Math.round(He*Ze),Xe=Math.round(lt*Ze),Qe=u.screenRect.x/u.compositeWidth*100,y=u.screenRect.y/u.compositeHeight*100,_=u.screenRect.width/u.compositeWidth*100,$=u.screenRect.height/u.compositeHeight*100,w=Math.round(u.screenCornerRadius/2*Ze),G=n.jsxs(n.Fragment,{children:[n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>r({type:"input:button",sessionId:e,payload:{name:"home"}}),children:n.jsx(ln,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsxs("span",{className:"flex items-center gap-3",children:["Home ",n.jsxs(Et,{children:[n.jsx(Ge,{children:"⌘"}),n.jsx(Ge,{children:"⇧"}),n.jsx(Ge,{children:"U"})]})]})})]}),n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:k,onClick:A,"data-active":L,children:k?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):n.jsx(Ur,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:n.jsxs("span",{className:"flex items-center gap-3",children:["Software keyboard ",n.jsxs(Et,{children:[n.jsx(Ge,{children:"⌘"}),n.jsx(Ge,{children:"⇧"}),n.jsx(Ge,{children:"K"})]})]})})]})]}),M=h&&t?n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:p,onClick:()=>{g(!0),r({type:"app:launch",sessionId:e,buildId:t})},children:p?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):n.jsx(rn,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:p?"Launching…":"Launch app"})]}):null;return n.jsxs("div",{className:"flex items-start justify-center gap-16",children:[n.jsx("canvas",{ref:O,style:{display:"none"}}),n.jsx(gn,{open:ne,onOpenChange:je,sessionId:e,send:r}),n.jsx(hn,{joined:a,onDeepLink:()=>je(!0),onScreenshot:Be,onRecordToggle:ye,recordState:I,onRotate:Te,platformSlot:G,launchSlot:M}),n.jsxs("div",{className:"flex items-start gap-8",children:[n.jsxs("div",{ref:F,style:{width:E?Xe:Ve,height:E?Ve:Xe,position:"relative",flexShrink:0},children:[n.jsxs("div",{ref:N,className:`relative ${U?"cursor-pointer":"cursor-default"}`,style:{width:Ve,height:Xe,...E?{position:"absolute",top:(Ve-Xe)/2,left:(Xe-Ve)/2,transform:"rotate(-90deg)",transformOrigin:"center center"}:{}},onPointerDown:ge,onPointerMove:ct,onPointerUp:Me,onPointerCancel:We,onPointerLeave:St,children:[n.jsx("img",{src:`data:image/png;base64,${u.framePng}`,style:{position:"absolute",top:0,left:0,zIndex:2,width:"100%",height:"100%",display:"block",pointerEvents:"none",userSelect:"none"},draggable:!1,alt:""}),n.jsx("canvas",{ref:T,style:{position:"absolute",zIndex:3,left:`${Qe}%`,top:`${y}%`,width:`${_}%`,height:`${$}%`,borderRadius:w>0?`${w}px`:void 0,backgroundColor:"#010101",cursor:"none",visibility:De?"visible":"hidden"}}),!De&&n.jsx("div",{className:"absolute animate-pulse bg-zinc-700",style:{zIndex:3,left:`${Qe}%`,top:`${y}%`,width:`${_}%`,height:`${$}%`,borderRadius:w>0?`${w}px`:void 0}}),K&&(()=>{const l=Qe/100,x=y/100,f=_/100,S=$/100,j=(v,P)=>({left:`${(l+v*f)*100}%`,top:`${(x+P*S)*100}%`});return n.jsx(n.Fragment,{children:[K.f0,K.f1].map((v,P)=>n.jsx("div",{style:{position:"absolute",zIndex:10,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease",...ce?{width:Ye*2,height:Ye*2,background:"rgba(255,255,255,0.92)",border:"1.5px solid rgba(0,0,0,0.2)",boxShadow:"0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"}:{width:Ee*2,height:Ee*2,background:"transparent",border:"1.5px solid rgba(255,255,255,0.6)",boxShadow:"0 0 0 1px rgba(0,0,0,0.3)"},...j(v.x,v.y)}},P))})})(),a&&D===0&&n.jsx("div",{style:{position:"absolute",zIndex:8,left:`${Qe}%`,top:`${y}%`,width:`${_}%`,height:`${$}%`,display:"flex",alignItems:"center",justifyContent:"center",pointerEvents:"none"},children:n.jsx("span",{style:{color:"white",fontSize:"0.875rem"},children:"Waiting for first frame..."})}),u.buttons.map(l=>{const x=ke===l.name,f=U===l.name,S=l.anchor==="bottom",j=l.anchor==="top",v=S?(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100:j?l.rolloverOffset.y/u.compositeHeight*100:(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100,P=l.buttonH/u.compositeHeight*100,H=l.buttonW/u.compositeWidth*100,V=l.buttonW/2,de=(l.rolloverOffset.x-V)/u.compositeWidth*100,Ae=(2*l.rolloverOffset.x-l.normalOffset.x-V)/u.compositeWidth*100,ut=l.rolloverOffset.x/u.compositeWidth*100,nt=S?(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100:j?l.rolloverOffset.y/u.compositeHeight*100:(l.normalOffset.y-l.buttonH/2)/u.compositeHeight*100,It=j?(2*l.rolloverOffset.y-l.normalOffset.y)/u.compositeHeight*100:0,Yn=l.onTop?4:1;return n.jsxs(o.Fragment,{children:[l.buttonPng&&n.jsx("img",{src:`data:image/png;base64,${l.buttonPng}`,style:{position:"absolute",zIndex:Yn,top:`${j&&f?It:v}%`,left:`${j?de:f?Ae:de}%`,width:`${H}%`,height:`${P}%`,transition:j?"top 0.15s ease":"left 0.15s ease",pointerEvents:"none",userSelect:"none"},draggable:!1,alt:""}),x&&l.pressedPng&&l.pressedRect&&n.jsx("img",{src:`data:image/png;base64,${l.pressedPng}`,style:{position:"absolute",zIndex:l.onTop?3:1,left:`${j?de:f?Ae:de}%`,top:`${j&&f?It:v}%`,width:`${l.pressedRect.width/u.compositeWidth*100}%`,height:`${l.pressedRect.height/u.compositeHeight*100}%`,pointerEvents:"none",userSelect:"none"},draggable:!1,alt:""}),f&&n.jsx("div",{className:"bg-foreground/85 text-background text-[11px] px-[7px] py-1.5 rounded-lg whitespace-nowrap pointer-events-none",style:{position:"absolute",zIndex:5,left:`${ut}%`,top:`${nt}%`,transform:"translate(-50%, calc(-100% - 8px))"},children:l.accessibilityTitle})]},l.name)})]}),n.jsx("div",{ref:te,style:{display:"none",position:"absolute",zIndex:20,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease, box-shadow 0.1s ease"}})]}),n.jsx(Pt,{joined:a,fps:D,connected:s,deviceReady:i,bootError:m,installing:c,installError:d,keyboardActive:Y})]})]})}const Ke=13,st=8,Kt=16,Ks=.02,jt=720;function Gs({sessionId:e,buildId:t,send:r,connected:s,joined:a,deviceReady:i,installing:c,installed:h,installError:d,bootError:m,launching:p,setLaunching:g,androidButtons:u,binaryFrameHandlerRef:b,onRecordingUploaded:R,screenWidth:L,screenHeight:k,cornerRadius:A,perfHookRef:C}){const T=o.useRef(null),N=o.useRef(null),F=o.useRef(null),{fps:D,frameCount:B}=fn(),{recordState:X,recordCanvasRef:I,startClientRecording:O,stopClientRecording:Z}=dn({sessionId:e,buildId:t,onRecordingUploaded:R}),[Re,fe]=o.useState(!1),[ne,je]=o.useState(!1),[De,re]=o.useState(!1),E=o.useRef(null),[W,Y]=o.useState(null),[ie,ke]=o.useState(!1),[se,U]=o.useState(!1),[z,ce]=o.useState(!1),[Q,K]=o.useState(null),be=o.useRef(Q);o.useEffect(()=>{be.current=Q},[Q]);const he=o.useRef(!1),le=o.useRef(!1),ue=o.useRef(null),oe=o.useRef(0),ae=o.useRef(null),pe=o.useRef(null),te=o.useRef("idle"),me=o.useRef(null);yn({binaryFrameHandlerRef:b,perfHookRef:C,frameCount:B,onUnsupported:()=>re(!0),onResize:y=>{je(!0);const _=E.current;(!_||_.width!==y.width||_.height!==y.height)&&(E.current=y,Y(y))},onDecoderReady:y=>{var $;F.current=y;const _=y.surface;_.style.display="block",_.style.width="100%",_.style.height="100%",_.style.objectFit="fill",($=T.current)==null||$.appendChild(_)}});const Ce=o.useCallback(()=>{var H;const y=I.current,_=(H=F.current)==null?void 0:H.surface,$=E.current;if(!y||!_||!$)return;const w=y.getContext("2d");if(!w)return;const G=$.width,M=$.height,l=y.width>y.height!=G>M;w.save(),l&&(w.translate(y.width,0),w.rotate(Math.PI/2)),w.drawImage(_,0,0,G,M);const x=Math.max(G,M),f=x>jt?x/jt:1,S=Ke*f,j=st*f,v=be.current;if(v)for(const V of[v.f0,v.f1]){const de=V.x*G,Ae=V.y*M;he.current?(w.beginPath(),w.arc(de,Ae,j,0,Math.PI*2),w.fillStyle="rgba(255,255,255,0.92)",w.fill(),w.strokeStyle="rgba(0,0,0,0.2)",w.lineWidth=f,w.stroke()):(w.beginPath(),w.arc(de,Ae,S,0,Math.PI*2),w.strokeStyle="rgba(0,0,0,0.3)",w.lineWidth=3*f,w.stroke(),w.beginPath(),w.arc(de,Ae,S,0,Math.PI*2),w.strokeStyle="rgba(255,255,255,0.65)",w.lineWidth=1.5*f,w.stroke())}const P=pe.current;if(P){const V=P.x*G,de=P.y*M,Ae=te.current,ut=me.current;if(Ae==="down")w.beginPath(),w.arc(V,de,j,0,Math.PI*2),w.fillStyle="rgba(255,255,255,0.92)",w.fill(),w.strokeStyle="rgba(0,0,0,0.2)",w.lineWidth=f,w.stroke();else if(Ae==="release"&&ut){const nt=Math.min((performance.now()-ut.startTime)/350,1);w.beginPath(),w.arc(V,de,j+26*f*nt,0,Math.PI*2),w.strokeStyle=`rgba(255,255,255,${(1-nt)*.55})`,w.lineWidth=1.5*f,w.stroke(),nt>=1&&(te.current="idle",me.current=null)}else w.beginPath(),w.arc(V,de,S,0,Math.PI*2),w.strokeStyle="rgba(0,0,0,0.3)",w.lineWidth=3*f,w.stroke(),w.beginPath(),w.arc(V,de,S,0,Math.PI*2),w.strokeStyle="rgba(255,255,255,0.65)",w.lineWidth=1.5*f,w.stroke()}w.restore()},[]),_e=o.useCallback(()=>{var G;const y=(G=F.current)==null?void 0:G.surface,_=E.current;if(!y||!_)return;const $=document.createElement("canvas"),w=$.getContext("2d");w&&($.width=_.width,$.height=_.height,w.drawImage(y,0,0,_.width,_.height),$.toBlob(M=>{if(!M)return;const l=URL.createObjectURL(M),x=document.createElement("a");x.href=l,x.download=`tapflow-${Date.now()}.png`,x.click(),URL.revokeObjectURL(l)},"image/png"))},[]),$e=o.useCallback(()=>{if(X==="idle"){const y=I.current;if(!y)return;const _=E.current;if(!_)return;const $=Be.current;y.width=$?_.height:_.width,y.height=$?_.width:_.height,O(Ce)}else X==="recording"&&Z()},[X,O,Z,Ce]),Le=o.useCallback(()=>{r({type:"input:rotate",sessionId:e}),ke(y=>!y)},[r,e]),tt=o.useRef(ie);o.useEffect(()=>{tt.current=ie},[ie]),o.useEffect(()=>()=>{tt.current&&r({type:"input:rotate",sessionId:e})},[]),o.useEffect(()=>{const y=new Set(["ShiftLeft","ShiftRight","ControlLeft","ControlRight","MetaLeft","MetaRight"]),_=M=>{if(M.code==="AltLeft"||M.code==="AltRight"){le.current=!0;return}if(M.metaKey){const x=document.activeElement;if(!x||x.tagName!=="INPUT"&&x.tagName!=="TEXTAREA"){if(!M.shiftKey&&M.code==="KeyK"){M.preventDefault(),fe(!0);return}if(!M.shiftKey&&M.code==="KeyS"){M.preventDefault(),_e();return}if(M.shiftKey&&M.code==="KeyY"){M.preventDefault(),$e();return}if(M.shiftKey&&M.code==="KeyO"){M.preventDefault(),Le();return}}}if(!se||y.has(M.code))return;M.preventDefault();const l=(M.shiftKey?2:0)|(M.ctrlKey?1:0)|(M.metaKey?8:0);r({type:"input:key",sessionId:e,payload:{code:M.code,modifiers:l}})},$=()=>{he.current&&(he.current=!1,ce(!1),r({type:"input:pinch:end",sessionId:e})),le.current=!1,K(null)},w=M=>{(M.code==="AltLeft"||M.code==="AltRight")&&$()},G=()=>{le.current&&$()};return window.addEventListener("keydown",_),window.addEventListener("keyup",w),window.addEventListener("blur",G),()=>{window.removeEventListener("keydown",_),window.removeEventListener("keyup",w),window.removeEventListener("blur",G)}},[se,r,e,_e,$e,Le]),o.useEffect(()=>{if(!se)return;const y=_=>{const $=N.current??T.current;$&&!$.contains(_.target)&&U(!1)};return document.addEventListener("pointerdown",y),()=>document.removeEventListener("pointerdown",y)},[se]);const Be=o.useRef(!1),ye=o.useCallback(y=>{const _=T.current;if(!_)return null;const $=_.getBoundingClientRect();return Us({x:y.clientX,y:y.clientY},$,Be.current)},[]),Te=o.useCallback(y=>{const _=ye(y);return _?xn(_):null},[ye]),it=o.useCallback(y=>{if(le.current){const G=Te(y);if(!G)return;he.current=!0,ce(!0),y.target.setPointerCapture(y.pointerId);const M=ae.current;M&&(M.style.display="none"),K(G),r({type:"input:pinch:start",sessionId:e,payload:G});return}const _=ye(y);if(!_)return;U(!0),ue.current=_,y.target.setPointerCapture(y.pointerId);const $=y.currentTarget.getBoundingClientRect();pe.current=_,te.current="down",me.current=null;const w=ae.current;w&&(w.style.display="block",w.style.left=`${y.clientX-$.left}px`,w.style.top=`${y.clientY-$.top}px`,w.style.width=`${st*2}px`,w.style.height=`${st*2}px`,w.style.background="rgba(255,255,255,0.92)",w.style.border="1.5px solid rgba(0,0,0,0.2)",w.style.boxShadow="0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"),r({type:"input:touch:start",sessionId:e,payload:_})},[ye,Te,r,e]),Pe=o.useCallback(y=>{if(y.buttons===0){if(le.current){K(Te(y)),pe.current=null;const j=ae.current;j&&(j.style.display="none");return}const x=ye(y),f=y.currentTarget.getBoundingClientRect(),S=ae.current;x?(pe.current=x,te.current!=="down"&&(te.current="idle"),S&&(S.style.display="block",S.style.left=`${y.clientX-f.left}px`,S.style.top=`${y.clientY-f.top}px`,S.style.width=`${Ke*2}px`,S.style.height=`${Ke*2}px`,S.style.background="transparent",S.style.border="1.5px solid rgba(255,255,255,0.6)",S.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)")):(pe.current=null,S&&(S.style.display="none"));return}if(he.current){const x=Te(y);if(!x)return;const f=performance.now();if(f-oe.current<Kt)return;oe.current=f,K(x),r({type:"input:pinch:move",sessionId:e,payload:x});return}if(!ue.current)return;const _=ye(y);if(!_)return;const $=_.x-ue.current.x,w=_.y-ue.current.y;if(Math.sqrt($*$+w*w)<Ks)return;const G=performance.now();if(G-oe.current<Kt)return;oe.current=G;const M=y.currentTarget.getBoundingClientRect();pe.current=_;const l=ae.current;l&&l.style.display!=="none"&&(l.style.left=`${y.clientX-M.left}px`,l.style.top=`${y.clientY-M.top}px`),r({type:"input:touch:move",sessionId:e,payload:_})},[ye,Te,r,e]),ze=o.useCallback(()=>{if(he.current){he.current=!1,ce(!1),K(null),r({type:"input:pinch:end",sessionId:e});return}ue.current=null,te.current="release",me.current={startTime:performance.now()};const y=ae.current;y&&(y.style.width=`${Ke*2}px`,y.style.height=`${Ke*2}px`,y.style.background="transparent",y.style.border="1.5px solid rgba(255,255,255,0.6)",y.style.boxShadow="0 0 0 1px rgba(0,0,0,0.3)"),r({type:"input:touch:end",sessionId:e})},[r,e]),Je=o.useCallback(()=>{if(he.current){he.current=!1,ce(!1),K(null),r({type:"input:pinch:end",sessionId:e});return}ue.current=null,te.current="release",me.current={startTime:performance.now()},r({type:"input:touch:end",sessionId:e})},[r,e]),Oe=o.useCallback(()=>{K(null),pe.current=null;const y=ae.current;y&&(y.style.display="none")},[]),ge=W??(L&&k?{width:L,height:k}:null),ct=ge?Math.min(1,jt/Math.max(ge.width,ge.height)):.3,Me=ge?Math.round(ge.width*ct):324,We=ge?Math.round(ge.height*ct):720,St=ge?ge.width>ge.height:!1,He=ie&&!St;o.useLayoutEffect(()=>{Be.current=He},[He]);const lt=He?We:Me,Ft=He?Me:We,Ze=A!=null?Math.round(A*Me):22,Ve=He?{position:"absolute",width:Me,height:We,top:(Me-We)/2,left:(We-Me)/2,transform:"rotate(90deg)",transformOrigin:"center center",visibility:ne?"visible":"hidden",cursor:"none"}:{visibility:ne?"visible":"hidden",cursor:"none"},Xe=n.jsx(n.Fragment,{children:u==null?void 0:u.map(y=>n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",onClick:()=>r({type:"input:button",sessionId:e,payload:{name:y.name}}),children:y.name==="back"?n.jsx(Sr,{className:"h-4 w-4"}):y.name==="recent_apps"?n.jsx(Kn,{className:"h-4 w-4"}):y.name==="volume_up"?n.jsx(Qr,{className:"h-4 w-4"}):y.name==="volume_down"?n.jsx(ts,{className:"h-4 w-4"}):y.name==="power"?n.jsx(Or,{className:"h-4 w-4"}):n.jsx(ln,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:y.accessibilityTitle})]},y.name))}),Qe=h&&t?n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx(ee,{variant:"ghost",size:"icon",className:"h-8 w-8",disabled:p||c,onClick:()=>{g(!0),r({type:"app:launch",sessionId:e,buildId:t})},children:p?n.jsx(pt,{className:"h-4 w-4 animate-spin"}):n.jsx(rn,{className:"h-4 w-4"})})}),n.jsx(Se,{side:"left",children:p?"Launching…":c?"Installing…":"Launch app"})]}):null;return n.jsxs("div",{className:"flex items-start justify-center gap-16",children:[n.jsx("canvas",{ref:I,style:{display:"none"}}),n.jsx(gn,{open:Re,onOpenChange:fe,sessionId:e,send:r}),n.jsx(hn,{joined:a,onDeepLink:()=>fe(!0),onScreenshot:_e,onRecordToggle:$e,recordState:X,onRotate:Le,platformSlot:Xe,launchSlot:Qe}),n.jsxs("div",{className:"flex items-start gap-8",children:[n.jsx("div",{style:{background:"#1c1c1e",borderRadius:`${Ze+12}px`,padding:"12px",flexShrink:0,boxShadow:"0 8px 32px rgba(0,0,0,0.45), inset 0 1px 0 rgba(255,255,255,0.06)"},children:n.jsx("div",{ref:N,className:"relative",style:{width:lt,height:Ft,backgroundColor:"#010101",borderRadius:`${Ze}px`,overflow:"hidden"},children:De?n.jsx("div",{className:"absolute inset-0 flex items-center justify-center p-4 text-center",children:n.jsxs("span",{style:{color:"rgba(255,255,255,0.6)",fontSize:"0.875rem"},children:["이 환경에서는 스트리밍을 표시할 수 없습니다.",n.jsx("br",{}),"Chrome/Edge 또는 HTTPS 환경에서 다시 시도해 주세요."]})}):n.jsxs(n.Fragment,{children:[n.jsx("div",{ref:T,className:He?void 0:"block w-full h-full",style:Ve,onPointerDown:it,onPointerMove:Pe,onPointerUp:ze,onPointerCancel:Je,onPointerLeave:Oe}),!ne&&n.jsx("div",{className:"absolute inset-0 animate-pulse bg-zinc-700"}),!ne&&i&&n.jsx("div",{className:"absolute inset-0 flex items-center justify-center pointer-events-none",children:n.jsx("span",{style:{color:"rgba(255,255,255,0.6)",fontSize:"0.875rem"},children:"Waiting for stream…"})}),n.jsx("div",{ref:ae,style:{display:"none",position:"absolute",zIndex:20,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease, box-shadow 0.1s ease"}}),Q&&n.jsx(n.Fragment,{children:[Q.f0,Q.f1].map((y,_)=>n.jsx("div",{style:{position:"absolute",zIndex:10,borderRadius:"50%",transform:"translate(-50%, -50%)",pointerEvents:"none",transition:"width 0.1s ease, height 0.1s ease, background 0.1s ease",left:`${y.x*100}%`,top:`${y.y*100}%`,...z?{width:st*2,height:st*2,background:"rgba(255,255,255,0.92)",border:"1.5px solid rgba(0,0,0,0.2)",boxShadow:"0 0 0 1px rgba(0,0,0,0.15), 0 0 8px rgba(255,255,255,0.25)"}:{width:Ke*2,height:Ke*2,background:"transparent",border:"1.5px solid rgba(255,255,255,0.6)",boxShadow:"0 0 0 1px rgba(0,0,0,0.3)"}}},_))})]})})}),n.jsx(Pt,{joined:a,fps:D,connected:s,deviceReady:i,bootError:m,installing:c,installError:d,keyboardActive:se})]})]})}function qs(e,t){const r=new DataView(e),s=Math.floor(e.byteLength/2),a=Math.floor(s/t),i=[];for(let c=0;c<t;c++)i.push(new Float32Array(a));for(let c=0;c<a;c++)for(let h=0;h<t;h++){const d=r.getInt16((c*t+h)*2,!0);i[h][c]=d/32768}return i}const Js=44100,kt=2,Gt=.06,Zs=.3;function Qs(){const e=o.useRef(null),t=o.useRef(0),r=o.useCallback(()=>{if(e.current)return e.current;const a=window.AudioContext??window.webkitAudioContext;return a?(e.current=new a,e.current):null},[]),s=o.useCallback(a=>{var u;const i=r();if(!i)return;i.state==="suspended"&&i.resume();const c=qs(a,kt),h=((u=c[0])==null?void 0:u.length)??0;if(h===0)return;const d=i.createBuffer(kt,h,Js);for(let b=0;b<kt;b++)d.getChannelData(b).set(c[b]);const m=i.createBufferSource();m.buffer=d,m.connect(i.destination);const p=i.currentTime;let g=t.current;(g<p+.005||g>p+Zs+Gt)&&(g=p+Gt),m.start(g),t.current=g+d.duration},[r]);return o.useEffect(()=>()=>{var a;(a=e.current)==null||a.close(),e.current=null},[]),{pushFrame:s}}function eo({sessionId:e,deviceId:t,buildId:r,resetMode:s,onRecordingUploaded:a}){const i=o.useRef(()=>{});os();const c=o.useRef(null),h=o.useRef(null),d=o.useRef([]);o.useRef({onFrameBegin:()=>{var U;return(U=c.current)==null?void 0:U.onFrameBegin()},onFrameEnd:U=>{var Q,K;const z=d.current.shift()??null,ce=z?{...U,capturedAt:z.capturedAt,relayedAt:z.relayedAt}:U;(Q=c.current)==null||Q.onFrameEnd(ce),(K=h.current)==null||K.call(h,ce)}});const[m,p]=o.useState(!1),[g,u]=o.useState(!1),[b,R]=o.useState(null),[L,k]=o.useState(!1),[A,C]=o.useState(!1),[T,N]=o.useState(null),[F,D]=o.useState(null),[B,X]=o.useState(!1),[I,O]=o.useState(!1),[Z,Re]=o.useState(!1),fe=o.useRef(void 0),{pushFrame:ne}=Qs(),je=o.useCallback(U=>{if(U.type==="session:joined"&&(p(!0),i.current({type:"device:boot",sessionId:e,payload:{deviceId:t,resetMode:s,acceptH264:_s(),secureContext:window.isSecureContext}})),U.type==="device:boot-error"&&D(U.message),U.type==="device:booting"&&(u(!1),k(!1),C(!1),N(null),D(null),R(null)),U.type==="device:ready"&&(u(!0),r&&(k(!0),i.current({type:"app:install",sessionId:e,buildId:r}))),U.type==="app:install-done"&&(k(!1),C(!0)),U.type==="app:install-error"&&(k(!1),N(U.message)),U.type==="app:launch-done"&&X(!1),U.type==="app:launch-error"&&X(!1),U.type==="session:chrome"&&R(U.payload),U.type==="keyboard:toggled"){const{visible:z}=U.payload;O(z),Re(!1)}U.type==="open-url:done"&&at.success("Deeplink opened"),U.type==="open-url:error"&&at.error(U.message),U.type==="error"&&U.message==="Agent resources exhausted"&&at.error("Could not start session — this Mac is currently overloaded.",{description:"Go back and select a different Mac."})},[e,t,r]),De=o.useCallback(U=>{var K;const z=Ws(U);if(z&&z.codec===bn){ne(U.slice(_t));return}z&&z.codec===mt||d.current.push(z);const ce=z?U.slice(_t):U,Q=z?{codec:z.codec,keyframe:z.keyframe,capturedAt:z.capturedAt,relayedAt:z.relayedAt}:void 0;(K=fe.current)==null||K.call(fe,ce,Q)},[ne]),{send:re,connected:E}=sn(je,De);o.useLayoutEffect(()=>{i.current=re}),o.useEffect(()=>{E&&re({type:"session:start",sessionId:e})},[E,re,e]);const W=b!==null&&"framePng"in b?b:null,Y=b!==null&&!("framePng"in b)?b:null,ke={sessionId:e,buildId:r,send:re,connected:E,joined:m,deviceReady:g,installing:L,installed:A,installError:T,bootError:F,launching:B,setLaunching:X,binaryFrameHandlerRef:fe,onRecordingUploaded:a,swKeyboardVisible:I,swKeyboardPending:Z,onKbdToggle:()=>{Re(!0),re({type:"input:keyboard:toggle",sessionId:e})}};if(!W&&!Y)return n.jsxs("div",{className:"flex items-start justify-center gap-16",children:[n.jsx("div",{className:"flex flex-col items-center gap-0.5 rounded-2xl border bg-background/90 px-1.5 py-2.5 shrink-0 mt-3 opacity-40",children:Array.from({length:5}).map((U,z)=>n.jsx("div",{className:"h-8 w-8 rounded-md bg-muted animate-pulse"},z))}),n.jsxs("div",{className:"flex items-start gap-8",children:[n.jsx("div",{style:{background:"#1c1c1e",borderRadius:"34px",padding:"12px",flexShrink:0},children:n.jsx("div",{className:"animate-pulse bg-zinc-700",style:{width:324,height:720,borderRadius:"22px"}})}),n.jsx(Pt,{joined:m,fps:0,connected:E,deviceReady:g,bootError:F,installing:L,installError:T,keyboardActive:!1})]})]});const se=void 0;return n.jsxs(n.Fragment,{children:[W&&n.jsx(Ys,{...ke,chrome:W,perfHookRef:se}),Y&&n.jsx(Gs,{...ke,androidButtons:Y.buttons,screenWidth:Y.screenWidth,screenHeight:Y.screenHeight,cornerRadius:Y.cornerRadius,perfHookRef:se}),!1]})}const vn=o.forwardRef(({className:e,...t},r)=>n.jsx("textarea",{className:q("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",e),ref:r,...t}));vn.displayName="Textarea";function to(e,t){return o.useReducer((r,s)=>t[r][s]??r,e)}var At="ScrollArea",[wn]=nn(At),[no,xe]=wn(At),Sn=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,type:s="hover",dir:a,scrollHideDelay:i=600,...c}=e,[h,d]=o.useState(null),[m,p]=o.useState(null),[g,u]=o.useState(null),[b,R]=o.useState(null),[L,k]=o.useState(null),[A,C]=o.useState(0),[T,N]=o.useState(0),[F,D]=o.useState(!1),[B,X]=o.useState(!1),I=Fe(t,Z=>d(Z)),O=Gn(a);return n.jsx(no,{scope:r,type:s,dir:O,scrollHideDelay:i,scrollArea:h,viewport:m,onViewportChange:p,content:g,onContentChange:u,scrollbarX:b,onScrollbarXChange:R,scrollbarXEnabled:F,onScrollbarXEnabledChange:D,scrollbarY:L,onScrollbarYChange:k,scrollbarYEnabled:B,onScrollbarYEnabledChange:X,onCornerWidthChange:C,onCornerHeightChange:N,children:n.jsx(Ie.div,{dir:O,...c,ref:I,style:{position:"relative","--radix-scroll-area-corner-width":A+"px","--radix-scroll-area-corner-height":T+"px",...e.style}})})});Sn.displayName=At;var Rn="ScrollAreaViewport",jn=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,children:s,nonce:a,...i}=e,c=xe(Rn,r),h=o.useRef(null),d=Fe(t,h,c.onViewportChange);return n.jsxs(n.Fragment,{children:[n.jsx(ro,{nonce:a}),n.jsx(Ie.div,{"data-radix-scroll-area-viewport":"",...i,ref:d,style:{overflowX:c.scrollbarXEnabled?"scroll":"hidden",overflowY:c.scrollbarYEnabled?"scroll":"hidden",...e.style},children:n.jsx("div",{ref:c.onContentChange,style:{minWidth:"100%",display:"table"},children:s})})]})});jn.displayName=Rn;var ro=o.memo(({nonce:e})=>n.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:e}),(e,t)=>e.nonce===t.nonce),Ne="ScrollAreaScrollbar",Dt=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=xe(Ne,e.__scopeScrollArea),{onScrollbarXEnabledChange:i,onScrollbarYEnabledChange:c}=a,h=e.orientation==="horizontal";return o.useEffect(()=>(h?i(!0):c(!0),()=>{h?i(!1):c(!1)}),[h,i,c]),a.type==="hover"?n.jsx(so,{...s,ref:t,forceMount:r}):a.type==="scroll"?n.jsx(oo,{...s,ref:t,forceMount:r}):a.type==="auto"?n.jsx(kn,{...s,ref:t,forceMount:r}):a.type==="always"?n.jsx(Lt,{...s,ref:t,"data-state":"visible"}):null});Dt.displayName=Ne;var so=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=xe(Ne,e.__scopeScrollArea),[i,c]=o.useState(!1);return o.useEffect(()=>{const h=a.scrollArea;let d=0;if(h){const m=()=>{window.clearTimeout(d),c(!0)},p=()=>{d=window.setTimeout(()=>c(!1),a.scrollHideDelay)};return h.addEventListener("pointerenter",m),h.addEventListener("pointerleave",p),()=>{window.clearTimeout(d),h.removeEventListener("pointerenter",m),h.removeEventListener("pointerleave",p)}}},[a.scrollArea,a.scrollHideDelay]),n.jsx(bt,{present:r||i,children:n.jsx(kn,{"data-state":i?"visible":"hidden",...s,ref:t})})}),oo=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=xe(Ne,e.__scopeScrollArea),i=e.orientation==="horizontal",c=vt(()=>d("SCROLL_END"),100),[h,d]=to("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return o.useEffect(()=>{if(h==="idle"){const m=window.setTimeout(()=>d("HIDE"),a.scrollHideDelay);return()=>window.clearTimeout(m)}},[h,a.scrollHideDelay,d]),o.useEffect(()=>{const m=a.viewport,p=i?"scrollLeft":"scrollTop";if(m){let g=m[p];const u=()=>{const b=m[p];g!==b&&(d("SCROLL"),c()),g=b};return m.addEventListener("scroll",u),()=>m.removeEventListener("scroll",u)}},[a.viewport,i,d,c]),n.jsx(bt,{present:r||h!=="hidden",children:n.jsx(Lt,{"data-state":h==="hidden"?"hidden":"visible",...s,ref:t,onPointerEnter:Ue(e.onPointerEnter,()=>d("POINTER_ENTER")),onPointerLeave:Ue(e.onPointerLeave,()=>d("POINTER_LEAVE"))})})}),kn=o.forwardRef((e,t)=>{const r=xe(Ne,e.__scopeScrollArea),{forceMount:s,...a}=e,[i,c]=o.useState(!1),h=e.orientation==="horizontal",d=vt(()=>{if(r.viewport){const m=r.viewport.offsetWidth<r.viewport.scrollWidth,p=r.viewport.offsetHeight<r.viewport.scrollHeight;c(h?m:p)}},10);return et(r.viewport,d),et(r.content,d),n.jsx(bt,{present:s||i,children:n.jsx(Lt,{"data-state":i?"visible":"hidden",...a,ref:t})})}),Lt=o.forwardRef((e,t)=>{const{orientation:r="vertical",...s}=e,a=xe(Ne,e.__scopeScrollArea),i=o.useRef(null),c=o.useRef(0),[h,d]=o.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),m=Tn(h.viewport,h.content),p={...s,sizes:h,onSizesChange:d,hasThumb:m>0&&m<1,onThumbChange:u=>i.current=u,onThumbPointerUp:()=>c.current=0,onThumbPointerDown:u=>c.current=u};function g(u,b){return fo(u,c.current,h,b)}return r==="horizontal"?n.jsx(ao,{...p,ref:t,onThumbPositionChange:()=>{if(a.viewport&&i.current){const u=a.viewport.scrollLeft,b=qt(u,h,a.dir);i.current.style.transform=`translate3d(${b}px, 0, 0)`}},onWheelScroll:u=>{a.viewport&&(a.viewport.scrollLeft=u)},onDragScroll:u=>{a.viewport&&(a.viewport.scrollLeft=g(u,a.dir))}}):r==="vertical"?n.jsx(io,{...p,ref:t,onThumbPositionChange:()=>{if(a.viewport&&i.current){const u=a.viewport.scrollTop,b=qt(u,h);i.current.style.transform=`translate3d(0, ${b}px, 0)`}},onWheelScroll:u=>{a.viewport&&(a.viewport.scrollTop=u)},onDragScroll:u=>{a.viewport&&(a.viewport.scrollTop=g(u))}}):null}),ao=o.forwardRef((e,t)=>{const{sizes:r,onSizesChange:s,...a}=e,i=xe(Ne,e.__scopeScrollArea),[c,h]=o.useState(),d=o.useRef(null),m=Fe(t,d,i.onScrollbarXChange);return o.useEffect(()=>{d.current&&h(getComputedStyle(d.current))},[d]),n.jsx(En,{"data-orientation":"horizontal",...a,ref:m,sizes:r,style:{bottom:0,left:i.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:i.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":yt(r)+"px",...e.style},onThumbPointerDown:p=>e.onThumbPointerDown(p.x),onDragScroll:p=>e.onDragScroll(p.x),onWheelScroll:(p,g)=>{if(i.viewport){const u=i.viewport.scrollLeft+p.deltaX;e.onWheelScroll(u),An(u,g)&&p.preventDefault()}},onResize:()=>{d.current&&i.viewport&&c&&s({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:d.current.clientWidth,paddingStart:xt(c.paddingLeft),paddingEnd:xt(c.paddingRight)}})}})}),io=o.forwardRef((e,t)=>{const{sizes:r,onSizesChange:s,...a}=e,i=xe(Ne,e.__scopeScrollArea),[c,h]=o.useState(),d=o.useRef(null),m=Fe(t,d,i.onScrollbarYChange);return o.useEffect(()=>{d.current&&h(getComputedStyle(d.current))},[d]),n.jsx(En,{"data-orientation":"vertical",...a,ref:m,sizes:r,style:{top:0,right:i.dir==="ltr"?0:void 0,left:i.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":yt(r)+"px",...e.style},onThumbPointerDown:p=>e.onThumbPointerDown(p.y),onDragScroll:p=>e.onDragScroll(p.y),onWheelScroll:(p,g)=>{if(i.viewport){const u=i.viewport.scrollTop+p.deltaY;e.onWheelScroll(u),An(u,g)&&p.preventDefault()}},onResize:()=>{d.current&&i.viewport&&c&&s({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:d.current.clientHeight,paddingStart:xt(c.paddingTop),paddingEnd:xt(c.paddingBottom)}})}})}),[co,Cn]=wn(Ne),En=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,sizes:s,hasThumb:a,onThumbChange:i,onThumbPointerUp:c,onThumbPointerDown:h,onThumbPositionChange:d,onDragScroll:m,onWheelScroll:p,onResize:g,...u}=e,b=xe(Ne,r),[R,L]=o.useState(null),k=Fe(t,I=>L(I)),A=o.useRef(null),C=o.useRef(""),T=b.viewport,N=s.content-s.viewport,F=qe(p),D=qe(d),B=vt(g,10);function X(I){if(A.current){const O=I.clientX-A.current.left,Z=I.clientY-A.current.top;m({x:O,y:Z})}}return o.useEffect(()=>{const I=O=>{const Z=O.target;(R==null?void 0:R.contains(Z))&&F(O,N)};return document.addEventListener("wheel",I,{passive:!1}),()=>document.removeEventListener("wheel",I,{passive:!1})},[T,R,N,F]),o.useEffect(D,[s,D]),et(R,B),et(b.content,B),n.jsx(co,{scope:r,scrollbar:R,hasThumb:a,onThumbChange:qe(i),onThumbPointerUp:qe(c),onThumbPositionChange:D,onThumbPointerDown:qe(h),children:n.jsx(Ie.div,{...u,ref:k,style:{position:"absolute",...u.style},onPointerDown:Ue(e.onPointerDown,I=>{I.button===0&&(I.target.setPointerCapture(I.pointerId),A.current=R.getBoundingClientRect(),C.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",b.viewport&&(b.viewport.style.scrollBehavior="auto"),X(I))}),onPointerMove:Ue(e.onPointerMove,X),onPointerUp:Ue(e.onPointerUp,I=>{const O=I.target;O.hasPointerCapture(I.pointerId)&&O.releasePointerCapture(I.pointerId),document.body.style.webkitUserSelect=C.current,b.viewport&&(b.viewport.style.scrollBehavior=""),A.current=null})})})}),gt="ScrollAreaThumb",Nn=o.forwardRef((e,t)=>{const{forceMount:r,...s}=e,a=Cn(gt,e.__scopeScrollArea);return n.jsx(bt,{present:r||a.hasThumb,children:n.jsx(lo,{ref:t,...s})})}),lo=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,style:s,...a}=e,i=xe(gt,r),c=Cn(gt,r),{onThumbPositionChange:h}=c,d=Fe(t,g=>c.onThumbChange(g)),m=o.useRef(void 0),p=vt(()=>{m.current&&(m.current(),m.current=void 0)},100);return o.useEffect(()=>{const g=i.viewport;if(g){const u=()=>{if(p(),!m.current){const b=ho(g,h);m.current=b,h()}};return h(),g.addEventListener("scroll",u),()=>g.removeEventListener("scroll",u)}},[i.viewport,p,h]),n.jsx(Ie.div,{"data-state":c.hasThumb?"visible":"hidden",...a,ref:d,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...s},onPointerDownCapture:Ue(e.onPointerDownCapture,g=>{const b=g.target.getBoundingClientRect(),R=g.clientX-b.left,L=g.clientY-b.top;c.onThumbPointerDown({x:R,y:L})}),onPointerUp:Ue(e.onPointerUp,c.onThumbPointerUp)})});Nn.displayName=gt;var Mt="ScrollAreaCorner",_n=o.forwardRef((e,t)=>{const r=xe(Mt,e.__scopeScrollArea),s=!!(r.scrollbarX&&r.scrollbarY);return r.type!=="scroll"&&s?n.jsx(uo,{...e,ref:t}):null});_n.displayName=Mt;var uo=o.forwardRef((e,t)=>{const{__scopeScrollArea:r,...s}=e,a=xe(Mt,r),[i,c]=o.useState(0),[h,d]=o.useState(0),m=!!(i&&h);return et(a.scrollbarX,()=>{var g;const p=((g=a.scrollbarX)==null?void 0:g.offsetHeight)||0;a.onCornerHeightChange(p),d(p)}),et(a.scrollbarY,()=>{var g;const p=((g=a.scrollbarY)==null?void 0:g.offsetWidth)||0;a.onCornerWidthChange(p),c(p)}),m?n.jsx(Ie.div,{...s,ref:t,style:{width:i,height:h,position:"absolute",right:a.dir==="ltr"?0:void 0,left:a.dir==="rtl"?0:void 0,bottom:0,...e.style}}):null});function xt(e){return e?parseInt(e,10):0}function Tn(e,t){const r=e/t;return isNaN(r)?0:r}function yt(e){const t=Tn(e.viewport,e.content),r=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,s=(e.scrollbar.size-r)*t;return Math.max(s,18)}function fo(e,t,r,s="ltr"){const a=yt(r),i=a/2,c=t||i,h=a-c,d=r.scrollbar.paddingStart+c,m=r.scrollbar.size-r.scrollbar.paddingEnd-h,p=r.content-r.viewport,g=s==="ltr"?[0,p]:[p*-1,0];return Pn([d,m],g)(e)}function qt(e,t,r="ltr"){const s=yt(t),a=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,i=t.scrollbar.size-a,c=t.content-t.viewport,h=i-s,d=r==="ltr"?[0,c]:[c*-1,0],m=pr(e,d);return Pn([0,c],[0,h])(m)}function Pn(e,t){return r=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const s=(t[1]-t[0])/(e[1]-e[0]);return t[0]+s*(r-e[0])}}function An(e,t){return e>0&&e<t}var ho=(e,t=()=>{})=>{let r={left:e.scrollLeft,top:e.scrollTop},s=0;return(function a(){const i={left:e.scrollLeft,top:e.scrollTop},c=r.left!==i.left,h=r.top!==i.top;(c||h)&&t(),r=i,s=window.requestAnimationFrame(a)})(),()=>window.cancelAnimationFrame(s)};function vt(e,t){const r=qe(e),s=o.useRef(0);return o.useEffect(()=>()=>window.clearTimeout(s.current),[]),o.useCallback(()=>{window.clearTimeout(s.current),s.current=window.setTimeout(r,t)},[r,t])}function et(e,t){const r=qe(t);qn(()=>{let s=0;if(e){const a=new ResizeObserver(()=>{cancelAnimationFrame(s),s=window.requestAnimationFrame(r)});return a.observe(e),()=>{window.cancelAnimationFrame(s),a.unobserve(e)}}},[e,r])}var Dn=Sn,po=jn,mo=_n;const Ln=o.forwardRef(({className:e,children:t,...r},s)=>n.jsxs(Dn,{ref:s,className:q("relative overflow-hidden",e),...r,children:[n.jsx(po,{className:"h-full w-full rounded-[inherit]",children:t}),n.jsx(Mn,{}),n.jsx(mo,{})]}));Ln.displayName=Dn.displayName;const Mn=o.forwardRef(({className:e,orientation:t="vertical",...r},s)=>n.jsx(Dt,{ref:s,orientation:t,className:q("flex touch-none select-none transition-colors",t==="vertical"&&"h-full w-2.5 border-l border-l-transparent p-[1px]",t==="horizontal"&&"h-2.5 flex-col border-t border-t-transparent p-[1px]",e),...r,children:n.jsx(Nn,{className:"relative flex-1 rounded-full bg-border"})}));Mn.displayName=Dt.displayName;function Hn(e){return/[Zz]|[+-]\d{2}/.test(e)?new Date(e):new Date(e.replace(" ","T")+"Z")}function go(e){const t=new Map;for(const a of e){const i=Hn(a.created_at).toDateString();t.has(i)||t.set(i,[]),t.get(i).push(a)}const r=new Date().toDateString(),s=new Date(Date.now()-864e5).toDateString();return Array.from(t.entries()).map(([a,i])=>{let c;if(a===r)c="Today";else if(a===s)c="Yesterday";else{const h=new Date(a);c=h.toLocaleDateString(void 0,{month:"short",day:"numeric",...h.getFullYear()!==new Date().getFullYear()?{year:"numeric"}:{}})}return{label:c,items:i}})}function xo(e){return Hn(e).toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit"})}const bo=5*1024*1024,yo=["image/png","image/jpeg","image/webp"];function vo({buildId:e}){const[t,r]=o.useState([]),[s,a]=o.useState(""),[i,c]=o.useState(null),[h,d]=o.useState(!1),[m,p]=o.useState(""),g=o.useRef(null),u=o.useRef({});function b(){fetch(`/api/v1/comments?build_id=${e}`,{credentials:"include"}).then(C=>C.ok?C.json():[]).then(r)}o.useEffect(()=>{b()},[e]),o.useEffect(()=>{const C=window.location.hash;if(!C.startsWith("#comment-"))return;const T=Number(C.replace("#comment-","")),N=u.current[T];if(!N)return;N.scrollIntoView({behavior:"smooth"});const F=document.documentElement.classList.contains("dark");N.style.backgroundColor=F?"rgb(0 112 243 / 0.18)":"#d3e5ff",setTimeout(()=>{N.style.backgroundColor=""},2e3)},[t]);function R(C){const T=`${location.origin}${location.pathname}${location.search}#comment-${C}`;navigator.clipboard.writeText(T).then(()=>at.success("Link copied")).catch(()=>at.error("Could not copy link"))}function L(C){if(p(""),!yo.includes(C.type)){p("Only png, jpg, webp allowed");return}if(C.size>bo){p("Max 5MB");return}c(C)}async function k(C){if(C.preventDefault(),!s.trim()&&!i)return;d(!0);const T=new FormData;T.append("build_id",String(e)),T.append("body",s),i&&T.append("attachment",i),(await fetch("/api/v1/comments",{method:"POST",credentials:"include",body:T})).ok&&(a(""),c(null),b()),d(!1)}const A=go(t);return n.jsxs("div",{className:"flex h-full flex-col gap-3 px-1",children:[n.jsx(Ln,{className:"flex-1 rounded-md border",children:n.jsx("div",{className:"p-3",children:t.length===0?n.jsx("p",{className:"text-sm text-muted-foreground text-center py-8",children:"No comments yet."}):n.jsx("div",{className:"flex flex-col",children:A.map(({label:C,items:T})=>n.jsxs("div",{children:[n.jsxs("div",{className:"flex items-center gap-2 py-3",children:[n.jsx("div",{className:"h-px flex-1 bg-border"}),n.jsx("span",{className:"text-[11px] font-medium text-muted-foreground px-1 select-none",children:C}),n.jsx("div",{className:"h-px flex-1 bg-border"})]}),n.jsx("div",{className:"flex flex-col gap-4",children:T.map(N=>n.jsxs("div",{id:`comment-${N.id}`,ref:F=>{u.current[N.id]=F},className:"group flex gap-2.5 rounded-md px-2 py-1.5 transition-all",children:[n.jsx("div",{className:"mt-0.5 shrink-0",children:n.jsx(Jn,{name:N.author,avatarUrl:N.authorAvatarUrl,size:28})}),n.jsxs("div",{className:"flex-1 min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-1.5",children:[n.jsx("span",{className:"text-sm font-semibold leading-none",children:N.author}),n.jsx("span",{className:"text-[11px] text-muted-foreground leading-none",children:xo(N.created_at)}),n.jsx(ee,{variant:"ghost",size:"icon",className:"h-4 w-4 ml-0.5 opacity-0 group-hover:opacity-50 hover:!opacity-100 transition-opacity",onClick:()=>R(N.id),children:n.jsx(un,{className:"h-3 w-3"})})]}),n.jsx("p",{className:"text-sm leading-relaxed whitespace-pre-wrap mt-1",children:N.body}),N.attachments.map(F=>n.jsx("a",{href:F.file_path,target:"_blank",rel:"noreferrer",className:"mt-1.5 block",children:n.jsx("img",{src:F.file_path,alt:"attachment",className:"max-h-48 rounded border object-contain"})},F.id))]})]},N.id))})]},C))})})}),n.jsx("div",{className:"pb-1",children:n.jsx("form",{onSubmit:k,children:n.jsxs("div",{className:"rounded-xl border border-input bg-background ring-offset-background transition-shadow focus-within:outline-none focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2",children:[n.jsx(vn,{placeholder:"Leave a comment…",value:s,onChange:C=>a(C.target.value),className:"min-h-16 resize-none border-0 bg-transparent shadow-none focus-visible:ring-0 focus-visible:ring-offset-0 text-sm"}),(i||m)&&n.jsxs("div",{className:"px-3 -mt-1 pb-1",children:[i&&n.jsx("p",{className:"text-xs text-muted-foreground",children:i.name}),m&&n.jsx("p",{className:"text-xs text-destructive",children:m})]}),n.jsxs("div",{className:"flex items-center gap-2 px-2 py-2",children:[n.jsx(ee,{type:"button",variant:"ghost",size:"icon",className:"h-7 w-7 text-muted-foreground",onClick:()=>{var C;return(C=g.current)==null?void 0:C.click()},children:n.jsx(Dr,{className:"h-4 w-4"})}),n.jsx("input",{ref:g,type:"file",accept:"image/png,image/jpeg,image/webp",className:"hidden",onChange:C=>{var N;const T=(N=C.target.files)==null?void 0:N[0];T&&L(T)}}),n.jsx("div",{className:"flex-1"}),n.jsx(ee,{type:"submit",size:"icon",className:"h-7 w-7 rounded-full",disabled:h||!s.trim()&&!i,children:n.jsx(jr,{className:"h-3.5 w-3.5"})})]})]})})})]})}function wo(e){return e<1024*1024?`${(e/1024).toFixed(0)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function So(e){return new Date(e).toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}function Ro(e){const t=new Date(e).getTime()-Date.now();if(t<=0)return{label:"Expired",urgent:!0};const r=Math.floor(t/36e5);return r<1?{label:"< 1 hour left",urgent:!0}:r<24?{label:`Expires in ${r}h`,urgent:r<6}:{label:`Expires in ${Math.floor(r/24)}d`,urgent:!1}}function jo({buildId:e,refreshKey:t}){const[r,s]=o.useState([]),[a,i]=o.useState(!0),[c,h]=o.useState(!1);return o.useEffect(()=>{i(!0),h(!1);const d=setTimeout(()=>h(!0),250);return fetch(`/api/v1/recordings?buildId=${e}`,{credentials:"include"}).then(m=>m.ok?m.json():[]).then(m=>s(m)).catch(()=>s([])).finally(()=>{clearTimeout(d),i(!1)}),()=>clearTimeout(d)},[e,t]),a?c?n.jsx("p",{className:"text-xs text-muted-foreground",children:"Loading recordings…"}):null:r.length===0?n.jsx("p",{className:"py-8 text-center text-sm text-muted-foreground",children:"No recordings yet."}):n.jsx("div",{className:"flex flex-col gap-2",children:r.map(d=>{const m=Ro(d.expiresAt);return n.jsxs("div",{className:"flex items-center justify-between rounded-md border border-border px-3 py-2 text-sm",children:[n.jsxs("div",{className:"flex flex-col gap-0.5 min-w-0",children:[n.jsx("span",{className:"text-xs font-medium truncate",children:So(d.createdAt)}),n.jsxs("span",{className:`text-xs ${m.urgent?"text-destructive":"text-muted-foreground"}`,children:[m.label," · ",wo(d.fileSize)]})]}),n.jsx(ee,{variant:"ghost",size:"icon",className:"h-7 w-7 shrink-0 ml-2",title:"Download",onClick:()=>{const p=document.createElement("a");p.href=d.url,p.download="",p.click()},children:n.jsx(Nr,{className:"h-3.5 w-3.5"})})]},d.id)})})}function ko({buildId:e,recordingsRefreshKey:t=0}){return n.jsxs(lr,{defaultValue:"comments",className:"flex h-full flex-col",children:[n.jsx("div",{className:"shrink-0 px-1",children:n.jsxs(ur,{className:"w-full",children:[n.jsxs(Bt,{value:"comments",className:"flex-1 gap-1.5",children:[n.jsx(Br,{className:"h-3.5 w-3.5"}),"Comments"]}),n.jsxs(Bt,{value:"recordings",className:"flex-1 gap-1.5",children:[n.jsx(Tr,{className:"h-3.5 w-3.5"}),"Recordings"]})]})}),n.jsx(zt,{value:"comments",className:"mt-3 min-h-0 flex-1 overflow-hidden",children:n.jsx(vo,{buildId:e})}),n.jsx(zt,{value:"recordings",className:"mt-3 min-h-0 flex-1 overflow-y-auto",children:n.jsx(jo,{buildId:e,refreshKey:t})})]})}const Un=o.forwardRef(({...e},t)=>n.jsx("nav",{ref:t,"aria-label":"breadcrumb",...e}));Un.displayName="Breadcrumb";const Fn=o.forwardRef(({className:e,...t},r)=>n.jsx("ol",{ref:r,className:q("flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5",e),...t}));Fn.displayName="BreadcrumbList";const ot=o.forwardRef(({className:e,...t},r)=>n.jsx("li",{ref:r,className:q("inline-flex items-center gap-1.5",e),...t}));ot.displayName="BreadcrumbItem";const dt=o.forwardRef(({asChild:e,className:t,...r},s)=>{const a=e?Zn:"a";return n.jsx(a,{ref:s,className:q("transition-colors hover:text-foreground cursor-pointer",t),...r})});dt.displayName="BreadcrumbLink";const ft=o.forwardRef(({className:e,...t},r)=>n.jsx("span",{ref:r,role:"link","aria-disabled":"true","aria-current":"page",className:q("font-medium text-foreground",e),...t}));ft.displayName="BreadcrumbPage";const ht=({children:e,className:t,...r})=>n.jsx("li",{role:"presentation","aria-hidden":"true",className:q("[&>svg]:h-3.5 [&>svg]:w-3.5",t),...r,children:e??n.jsx(Qn,{})});ht.displayName="BreadcrumbSeparator";var wt="Switch",[Co]=nn(wt),[Eo,Ht]=Co(wt);function No(e){const{__scopeSwitch:t,checked:r,children:s,defaultChecked:a,disabled:i,form:c,name:h,onCheckedChange:d,required:m,value:p="on",internal_do_not_use_render:g}=e,[u,b]=er({prop:r,defaultProp:a??!1,onChange:d,caller:wt}),[R,L]=o.useState(null),[k,A]=o.useState(null),C=o.useRef(!1),T=R?!!c||!!R.closest("form"):!0,N={checked:u,setChecked:b,disabled:i,control:R,setControl:L,name:h,form:c,value:p,hasConsumerStoppedPropagationRef:C,required:m,defaultChecked:a,isFormControl:T,bubbleInput:k,setBubbleInput:A};return n.jsx(Eo,{scope:t,...N,children:_o(g)?g(N):s})}var In="SwitchTrigger",$n=o.forwardRef(({__scopeSwitch:e,onClick:t,...r},s)=>{const{value:a,disabled:i,checked:c,required:h,setControl:d,setChecked:m,hasConsumerStoppedPropagationRef:p,isFormControl:g,bubbleInput:u}=Ht(In,e),b=Fe(s,d);return n.jsx(Ie.button,{type:"button",role:"switch","aria-checked":c,"aria-required":h,"data-state":Vn(c),"data-disabled":i?"":void 0,disabled:i,value:a,...r,ref:b,onClick:Ue(t,R=>{m(L=>!L),u&&g&&(p.current=R.isPropagationStopped(),p.current||R.stopPropagation())})})});$n.displayName=In;var Ut=o.forwardRef((e,t)=>{const{__scopeSwitch:r,name:s,checked:a,defaultChecked:i,required:c,disabled:h,value:d,onCheckedChange:m,form:p,...g}=e;return n.jsx(No,{__scopeSwitch:r,checked:a,defaultChecked:i,disabled:h,required:c,onCheckedChange:m,name:s,form:p,value:d,internal_do_not_use_render:({isFormControl:u})=>n.jsxs(n.Fragment,{children:[n.jsx($n,{...g,ref:t,__scopeSwitch:r}),u&&n.jsx(Wn,{__scopeSwitch:r})]})})});Ut.displayName=wt;var Bn="SwitchThumb",zn=o.forwardRef((e,t)=>{const{__scopeSwitch:r,...s}=e,a=Ht(Bn,r);return n.jsx(Ie.span,{"data-state":Vn(a.checked),"data-disabled":a.disabled?"":void 0,...s,ref:t})});zn.displayName=Bn;var On="SwitchBubbleInput",Wn=o.forwardRef(({__scopeSwitch:e,...t},r)=>{const{control:s,hasConsumerStoppedPropagationRef:a,checked:i,defaultChecked:c,required:h,disabled:d,name:m,value:p,form:g,bubbleInput:u,setBubbleInput:b}=Ht(On,e),R=Fe(r,b),L=mr(i),k=tr(s);o.useEffect(()=>{const C=u;if(!C)return;const T=window.HTMLInputElement.prototype,F=Object.getOwnPropertyDescriptor(T,"checked").set,D=!a.current;if(L!==i&&F){const B=new Event("click",{bubbles:D});F.call(C,i),C.dispatchEvent(B)}},[u,L,i,a]);const A=o.useRef(i);return n.jsx(Ie.input,{type:"checkbox","aria-hidden":!0,defaultChecked:c??A.current,required:h,disabled:d,name:m,value:p,form:g,...t,tabIndex:-1,ref:R,style:{...t.style,...k,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});Wn.displayName=On;function _o(e){return typeof e=="function"}function Vn(e){return e?"checked":"unchecked"}const Xn=o.forwardRef(({className:e,...t},r)=>n.jsx(Ut,{className:q("peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",e),...t,ref:r,children:n.jsx(zn,{className:q("pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0")})}));Xn.displayName=Ut.displayName;const Jt=70,Zt=80;function To(e,t){if(!e||t)return"unknown";const r=e.memUsedMB/e.memTotalMB*100;return e.cpuPercent>Zt||r>Zt?"overloaded":e.cpuPercent>=Jt||r>=Jt?"warning":"healthy"}function Uo(){const[e]=en(),t=nr(),r=e.get("id"),{build:s}=ns(r),[a,i]=o.useState(0),c=(s==null?void 0:s.platform)??"ios",{sessions:h,selectedAgent:d,setSelectedAgent:m,activeSessionId:p,deviceId:g,booting:u,status:b,connected:R,agentGroups:L,startDevice:k,resetDevice:A,handleBack:C,handleBackToMacs:T}=rs(c),N=L.find(E=>E.agentName===d),{osVersions:F,osVersion:D,setOsVersion:B,deviceSearch:X,setDeviceSearch:I,versionedDevices:O,resetMode:Z,setResetMode:Re}=ss(N,c),ne=h.flatMap(E=>E.devices).find(E=>E.id===g),je=ne?`${ne.name}${ne.osVersion?` · ${ne.osVersion}`:""}`:"",De=o.useCallback(()=>i(E=>E+1),[]),{setNode:re}=rr();return o.useEffect(()=>{if(s)return re(n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx(Un,{children:n.jsxs(Fn,{children:[n.jsx(ot,{children:n.jsx(dt,{asChild:!0,children:n.jsx("button",{onClick:()=>t(`/app-center?appId=${s.app_id}`),children:s.name})})}),n.jsx(ht,{}),n.jsx(ot,{children:d?n.jsx(dt,{asChild:!0,children:n.jsx("button",{onClick:T,children:$t(s)})}):n.jsx(ft,{children:$t(s)})}),d&&n.jsxs(n.Fragment,{children:[n.jsx(ht,{}),n.jsx(ot,{children:p?n.jsx(dt,{asChild:!0,children:n.jsx("button",{onClick:C,children:d})}):n.jsx(ft,{children:d})})]}),p&&n.jsxs(n.Fragment,{children:[n.jsx(ht,{}),n.jsx(ot,{children:n.jsx(ft,{children:je})})]})]})}),!d&&s.status_label&&n.jsx(vr,{tone:ir[s.status_label],children:s.status_label})]})),()=>re(null)},[s,d,p,je,t,C,T,re]),n.jsxs("div",{className:"flex h-full min-h-0 gap-6 p-6",children:[n.jsx("div",{className:"flex flex-col gap-3 flex-1 min-w-0 min-h-0",children:n.jsx("div",{className:"flex-1 min-h-0 overflow-auto -ml-1 pl-1 -mr-4 pr-4",children:p?n.jsx("div",{className:"min-h-full flex items-center justify-center py-6 px-8 min-w-max",children:n.jsx(eo,{sessionId:p,deviceId:g,buildId:s==null?void 0:s.id,resetMode:Z,onRecordingUploaded:De})}):d?n.jsxs("div",{className:"flex flex-col gap-5",children:[n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("button",{onClick:T,className:"text-sm text-muted-foreground hover:text-foreground transition-colors",children:"← All Macs"}),n.jsx("h1",{className:"text-xl font-semibold tracking-tight",children:"Select device"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx(cr,{placeholder:"Search device…",value:X,onChange:I}),F.length>0&&n.jsxs(gr,{value:D||"__all__",onValueChange:E=>{B(E==="__all__"?"":E),A()},children:[n.jsx(xr,{className:"h-8 w-36 shrink-0",children:n.jsx(br,{})}),n.jsxs(yr,{children:[n.jsx(Ot,{value:"__all__",children:"Any version"}),F.map(E=>n.jsx(Ot,{value:E,children:E},E))]})]}),n.jsx(Ct,{children:n.jsxs(ve,{children:[n.jsxs("div",{className:"ml-auto flex items-center gap-2 shrink-0",children:[n.jsx(we,{asChild:!0,children:n.jsxs(sr,{htmlFor:"reset-mode",className:"flex items-center gap-1 text-sm cursor-pointer whitespace-nowrap",children:[n.jsx(Mr,{className:"h-3.5 w-3.5 text-muted-foreground"}),"Full reset"]})}),n.jsx(Xn,{id:"reset-mode",checked:Z==="full-erase",onCheckedChange:E=>Re(E?"full-erase":"app-only")})]}),n.jsx(Se,{children:Z==="full-erase"?"Erase all data before booting":"Keep existing data"})]})})]}),O.length===0?n.jsx("p",{className:"text-sm text-muted-foreground",children:R?"No devices available for this OS.":"Connecting to relay…"}):n.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-2",children:O.map(E=>{const W=E.status==="booted",Y=E.busy,ie=Y?"In use":W?"Booted":"Available",ke=Y?"bg-amber-400":W?"bg-emerald-400":"bg-muted-foreground/40";return n.jsxs("button",{disabled:Y||u||!R,onClick:()=>k(E),className:q("flex flex-col gap-3 rounded-lg border p-3 text-left transition-colors min-h-[100px]","hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50"),children:[n.jsx("span",{className:"text-sm font-medium leading-tight",children:E.name}),E.osVersion&&n.jsx("span",{className:"font-mono text-xs text-muted-foreground",children:E.osVersion}),n.jsxs("span",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[n.jsx("span",{className:q("inline-block h-1.5 w-1.5 rounded-full",ke)}),ie]})]},E.id)})}),b&&n.jsx("p",{className:"text-sm text-muted-foreground",children:b})]}):n.jsxs("div",{className:"flex flex-col gap-5",children:[n.jsx("h1",{className:"text-xl font-semibold tracking-tight",children:"Select Mac"}),L.length===0?n.jsx("p",{className:"text-sm text-muted-foreground",children:R?`No agents available for ${c}.`:"Connecting to relay…"}):n.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 2xl:grid-cols-3 gap-2",children:L.map(E=>{const W=E.resources,Y=W?Date.now()-W.reportedAt>3e4:!1,ie=E.devices.filter(ce=>ce.platform===c).length,ke=(W==null?void 0:W.cpuPercent)??0,se=W?W.memUsedMB/W.memTotalMB*100:0,U=To(W,Y),z=U==="overloaded";return n.jsx(Ct,{children:n.jsxs(ve,{children:[n.jsx(we,{asChild:!0,children:n.jsx("span",{tabIndex:z?0:void 0,className:z?"cursor-not-allowed":void 0,children:n.jsxs("button",{disabled:z,"aria-disabled":z,onClick:()=>m(E.agentName??null),className:q("flex flex-col gap-3 rounded-lg border p-3 text-left transition-colors min-h-[100px] w-full",z?"pointer-events-none":"hover:bg-accent"),children:[n.jsxs("div",{className:"flex items-start justify-between gap-2",children:[n.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[n.jsx(Po,{health:U}),n.jsx("span",{className:"text-sm font-medium leading-tight truncate",children:E.agentName??"Unknown"})]}),Y&&n.jsx("span",{className:"shrink-0 text-[10px] font-medium text-amber-500",children:"Stale"})]}),n.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[n.jsxs("span",{children:[ie," device",ie!==1?"s":""]}),W&&n.jsxs(n.Fragment,{children:[n.jsx("span",{children:"·"}),n.jsxs("span",{children:[W.slotsAvailable,"/",W.slotsTotal," slots"]})]})]}),W&&!Y&&n.jsxs("div",{className:"flex flex-col gap-1.5 w-full",children:[n.jsx(Qt,{label:"CPU",percent:ke,colorClass:"bg-blue-400"}),n.jsx(Qt,{label:"RAM",percent:se,colorClass:"bg-violet-400"})]})]})})}),z&&n.jsx(Se,{children:"This Mac is currently overloaded. Try again later."})]})},E.agentName)})})]})})}),r&&n.jsxs(n.Fragment,{children:[n.jsx(tn,{orientation:"vertical",className:"h-auto"}),n.jsx("div",{className:"w-80 shrink-0 h-full",children:n.jsx(ko,{buildId:Number(r),recordingsRefreshKey:a})})]})]})}function Po({health:e}){const t={unknown:"bg-muted-foreground/40",healthy:"bg-emerald-400",warning:"bg-amber-400",overloaded:"bg-red-500"}[e];return n.jsx("span",{"data-testid":"resource-health-dot",className:q("inline-block h-2 w-2 shrink-0 rounded-full",t)})}function Qt({label:e,percent:t,colorClass:r}){return n.jsxs("div",{className:"flex flex-col gap-0.5",children:[n.jsxs("div",{className:"flex justify-between text-[10px] text-muted-foreground",children:[n.jsx("span",{children:e}),n.jsxs("span",{children:[t.toFixed(0),"%"]})]}),n.jsx("div",{className:"h-1 w-full rounded-full bg-muted overflow-hidden",children:n.jsx("div",{className:q("h-full rounded-full transition-all",r),style:{width:`${Math.min(100,t)}%`}})})]})}export{Uo as QASession};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{Y as Oe,a7 as n,a4 as r,ae as B,ak as z,u as D,ag as gt,af as De,aj as Ne,w as xt,V as vt,A as St,N as P,P as wt,t as yt,a6 as Ae,Z as ke,O as Ct,ad as Nt,Q as bt,a3 as Tt,ah as It,R as Pt,F as Rt,q as _t,a0 as Et,h as jt,a as Dt,K as E,f as Mt,D as Ot,p as At,n as kt,k as Le,j as Lt,X as Vt,o as Ve,m as Be,l as He}from"./index-Ci2ltCHF.js";/**
|
|
2
|
-
* @license lucide-react v0.577.0 - ISC
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the ISC license.
|
|
5
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
6
|
-
*/const Bt=[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]],Fe=Oe("chevron-down",Bt);/**
|
|
7
|
-
* @license lucide-react v0.577.0 - ISC
|
|
8
|
-
*
|
|
9
|
-
* This source code is licensed under the ISC license.
|
|
10
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/const Ht=[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]],Ft=Oe("chevron-up",Ht);function Me(t,[o,e]){return Math.min(e,Math.max(o,t))}function Ut(t){const o=n.useRef({value:t,previous:t});return n.useMemo(()=>(o.current.value!==t&&(o.current.previous=o.current.value,o.current.value=t),o.current.previous),[t])}var Wt=[" ","Enter","ArrowUp","ArrowDown"],Kt=[" ","Enter"],te="Select",[pe,fe,$t]=Ct(te),[oe]=bt(te,[$t,ke]),me=ke(),[zt,Y]=oe(te),[Gt,Yt]=oe(te),qt="SelectProvider";function Ue(t){const{__scopeSelect:o,children:e,open:s,defaultOpen:a,onOpenChange:f,value:c,defaultValue:i,onValueChange:l,dir:p,name:x,autoComplete:w,disabled:C,required:I,form:b,internal_do_not_use_render:d}=t,g=me(o),[S,u]=n.useState(null),[m,M]=n.useState(null),[R,X]=n.useState(!1),_=gt(p),[A,ne]=De({prop:s,defaultProp:a??!1,onChange:f,caller:te}),[re,H]=De({prop:c,defaultProp:i,onChange:l,caller:te}),F=n.useRef(null),Z=S?!!b||!!S.closest("form"):!0,[U,k]=n.useState(new Set),W=Ne(),K=Array.from(U).map(V=>V.props.value).join(";"),$=n.useCallback(V=>{k(Q=>new Set(Q).add(V))},[]),L=n.useCallback(V=>{k(Q=>{const ae=new Set(Q);return ae.delete(V),ae})},[]),se={required:I,trigger:S,onTriggerChange:u,valueNode:m,onValueNodeChange:M,valueNodeHasChildren:R,onValueNodeHasChildrenChange:X,contentId:W,value:re,onValueChange:H,open:A,onOpenChange:ne,dir:_,triggerPointerDownPosRef:F,disabled:C,name:x,autoComplete:w,form:b,nativeOptions:U,nativeSelectKey:K,isFormControl:Z};return r.jsx(xt,{...g,children:r.jsx(zt,{scope:o,...se,children:r.jsx(pe.Provider,{scope:o,children:r.jsx(Gt,{scope:o,onNativeOptionAdd:$,onNativeOptionRemove:L,children:uo(d)?d(se):e})})})})}Ue.displayName=qt;var We=t=>{const{__scopeSelect:o,children:e,...s}=t;return r.jsx(Ue,{__scopeSelect:o,...s,internal_do_not_use_render:({isFormControl:a})=>r.jsxs(r.Fragment,{children:[e,a?r.jsx(dt,{__scopeSelect:o}):null]})})};We.displayName=te;var Ke="SelectTrigger",be=n.forwardRef((t,o)=>{const{__scopeSelect:e,disabled:s=!1,...a}=t,f=me(e),c=Y(Ke,e),i=c.disabled||s,l=B(o,c.onTriggerChange),p=fe(e),x=n.useRef("touch"),[w,C,I]=ut(d=>{const g=p().filter(m=>!m.disabled),S=g.find(m=>m.value===c.value),u=pt(g,d,S);u!==void 0&&c.onValueChange(u.value)}),b=d=>{i||(c.onOpenChange(!0),I()),d&&(c.triggerPointerDownPosRef.current={x:Math.round(d.pageX),y:Math.round(d.pageY)})};return r.jsx(St,{asChild:!0,...f,children:r.jsx(D.button,{type:"button",role:"combobox","aria-controls":c.open?c.contentId:void 0,"aria-expanded":c.open,"aria-required":c.required,"aria-autocomplete":"none",dir:c.dir,"data-state":c.open?"open":"closed",disabled:i,"data-disabled":i?"":void 0,"data-placeholder":he(c.value)?"":void 0,...a,ref:l,onClick:P(a.onClick,d=>{d.currentTarget.focus(),x.current!=="mouse"&&b(d)}),onPointerDown:P(a.onPointerDown,d=>{x.current=d.pointerType;const g=d.target;g.hasPointerCapture(d.pointerId)&&g.releasePointerCapture(d.pointerId),d.button===0&&d.ctrlKey===!1&&d.pointerType==="mouse"&&(b(d),d.preventDefault())}),onKeyDown:P(a.onKeyDown,d=>{const g=w.current!=="";!(d.ctrlKey||d.altKey||d.metaKey)&&d.key.length===1&&C(d.key),!(g&&d.key===" ")&&Wt.includes(d.key)&&(b(),d.preventDefault())})})})});be.displayName=Ke;var $e="SelectValue",ze=n.forwardRef((t,o)=>{const{__scopeSelect:e,className:s,style:a,children:f,placeholder:c="",...i}=t,l=Y($e,e),{onValueNodeHasChildrenChange:p}=l,x=f!==void 0,w=B(o,l.onValueNodeChange);z(()=>{p(x)},[p,x]);const C=he(l.value);return r.jsx(D.span,{...i,asChild:C?!1:i.asChild,ref:w,style:{pointerEvents:"none"},children:r.jsx(n.Fragment,{children:C?c:f},C?"placeholder":"value")})});ze.displayName=$e;var Xt="SelectIcon",Ge=n.forwardRef((t,o)=>{const{__scopeSelect:e,children:s,...a}=t;return r.jsx(D.span,{"aria-hidden":!0,...a,ref:o,children:s||"▼"})});Ge.displayName=Xt;var Ye="SelectPortal",[Zt,Qt]=oe(Ye,{forceMount:void 0}),qe=t=>{const{__scopeSelect:o,forceMount:e,...s}=t;return r.jsx(Zt,{scope:t.__scopeSelect,forceMount:e,children:r.jsx(wt,{asChild:!0,...s})})};qe.displayName=Ye;var G="SelectContent",Te=n.forwardRef((t,o)=>{const e=Qt(G,t.__scopeSelect),{forceMount:s=e.forceMount,...a}=t,f=Y(G,t.__scopeSelect),[c,i]=n.useState();return z(()=>{i(new DocumentFragment)},[]),r.jsx(yt,{present:s||f.open,children:({present:l})=>l?r.jsx(Qe,{...a,ref:o}):r.jsx(Xe,{...a,fragment:c})})});Te.displayName=G;var Xe=n.forwardRef((t,o)=>{const{__scopeSelect:e,children:s,fragment:a}=t;return a?Ae.createPortal(r.jsx(Ze,{scope:e,children:r.jsx(pe.Slot,{scope:e,children:r.jsx("div",{ref:o,children:s})})}),a):null});Xe.displayName="SelectContentFragment";var O=10,[Ze,q]=oe(G),Jt="SelectContentImpl",eo=Et("SelectContent.RemoveScroll"),Qe=n.forwardRef((t,o)=>{const{__scopeSelect:e}=t,{position:s="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:f,onPointerDownOutside:c,side:i,sideOffset:l,align:p,alignOffset:x,arrowPadding:w,collisionBoundary:C,collisionPadding:I,sticky:b,hideWhenDetached:d,avoidCollisions:g,...S}=t,u=Y(G,e),[m,M]=n.useState(null),[R,X]=n.useState(null),_=B(o,h=>M(h)),[A,ne]=n.useState(null),[re,H]=n.useState(null),F=fe(e),[Z,U]=n.useState(!1),k=n.useRef(!1);n.useEffect(()=>{if(m)return Tt(m)},[m]),It();const W=n.useCallback(h=>{const[T,...j]=F().map(y=>y.ref.current),[N]=j.slice(-1),v=document.activeElement;for(const y of h)if(y===v||(y==null||y.scrollIntoView({block:"nearest"}),y===T&&R&&(R.scrollTop=0),y===N&&R&&(R.scrollTop=R.scrollHeight),y==null||y.focus(),document.activeElement!==v))return},[F,R]),K=n.useCallback(()=>W([A,m]),[W,A,m]);n.useEffect(()=>{Z&&K()},[Z,K]);const{onOpenChange:$,triggerPointerDownPosRef:L}=u;n.useEffect(()=>{if(m){let h={x:0,y:0};const T=N=>{var v,y;h={x:Math.abs(Math.round(N.pageX)-(((v=L.current)==null?void 0:v.x)??0)),y:Math.abs(Math.round(N.pageY)-(((y=L.current)==null?void 0:y.y)??0))}},j=N=>{h.x<=10&&h.y<=10?N.preventDefault():N.composedPath().includes(m)||$(!1),document.removeEventListener("pointermove",T),L.current=null};return L.current!==null&&(document.addEventListener("pointermove",T),document.addEventListener("pointerup",j,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",T),document.removeEventListener("pointerup",j,{capture:!0})}}},[m,$,L]),n.useEffect(()=>{const h=()=>$(!1);return window.addEventListener("blur",h),window.addEventListener("resize",h),()=>{window.removeEventListener("blur",h),window.removeEventListener("resize",h)}},[$]);const[se,V]=ut(h=>{const T=F().filter(v=>!v.disabled),j=T.find(v=>v.ref.current===document.activeElement),N=pt(T,h,j);N&&setTimeout(()=>{var v;return(v=N.ref.current)==null?void 0:v.focus()})}),Q=n.useCallback((h,T,j)=>{const N=!k.current&&!j;(u.value!==void 0&&u.value===T||N)&&(ne(h),N&&(k.current=!0))},[u.value]),ae=n.useCallback(()=>m==null?void 0:m.focus(),[m]),le=n.useCallback((h,T,j)=>{const N=!k.current&&!j;(u.value!==void 0&&u.value===T||N)&&H(h)},[u.value]),de=s==="popper"?Se:Je,ce=de===Se?{side:i,sideOffset:l,align:p,alignOffset:x,arrowPadding:w,collisionBoundary:C,collisionPadding:I,sticky:b,hideWhenDetached:d,avoidCollisions:g}:{};return r.jsx(Ze,{scope:e,content:m,viewport:R,onViewportChange:X,itemRefCallback:Q,selectedItem:A,onItemLeave:ae,itemTextRefCallback:le,focusSelectedItem:K,selectedItemText:re,position:s,isPositioned:Z,searchRef:se,children:r.jsx(Pt,{as:eo,allowPinchZoom:!0,children:r.jsx(Rt,{asChild:!0,trapped:u.open,onMountAutoFocus:h=>{h.preventDefault()},onUnmountAutoFocus:P(a,h=>{var T;(T=u.trigger)==null||T.focus({preventScroll:!0}),h.preventDefault()}),children:r.jsx(_t,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:f,onPointerDownOutside:c,onFocusOutside:h=>h.preventDefault(),onDismiss:()=>u.onOpenChange(!1),children:r.jsx(de,{role:"listbox",id:u.contentId,"data-state":u.open?"open":"closed",dir:u.dir,onContextMenu:h=>h.preventDefault(),...S,...ce,onPlaced:()=>U(!0),ref:_,style:{display:"flex",flexDirection:"column",outline:"none",...S.style},onKeyDown:P(S.onKeyDown,h=>{const T=h.ctrlKey||h.altKey||h.metaKey;if(h.key==="Tab"&&h.preventDefault(),!T&&h.key.length===1&&V(h.key),["ArrowUp","ArrowDown","Home","End"].includes(h.key)){let N=F().filter(v=>!v.disabled).map(v=>v.ref.current);if(["ArrowUp","End"].includes(h.key)&&(N=N.slice().reverse()),["ArrowUp","ArrowDown"].includes(h.key)){const v=h.target,y=N.indexOf(v);N=N.slice(y+1)}setTimeout(()=>W(N)),h.preventDefault()}})})})})})})});Qe.displayName=Jt;var to="SelectItemAlignedPosition",Je=n.forwardRef((t,o)=>{const{__scopeSelect:e,onPlaced:s,...a}=t,f=Y(G,e),c=q(G,e),[i,l]=n.useState(null),[p,x]=n.useState(null),w=B(o,_=>x(_)),C=fe(e),I=n.useRef(!1),b=n.useRef(!0),{viewport:d,selectedItem:g,selectedItemText:S,focusSelectedItem:u}=c,m=n.useCallback(()=>{if(f.trigger&&f.valueNode&&i&&p&&d&&g&&S){const _=f.trigger.getBoundingClientRect(),A=p.getBoundingClientRect(),ne=f.valueNode.getBoundingClientRect(),re=S.getBoundingClientRect();if(f.dir!=="rtl"){const v=re.left-A.left,y=ne.left-v,J=_.left-y,ee=_.width+J,ge=Math.max(ee,A.width),xe=window.innerWidth-O,ve=Me(y,[O,Math.max(O,xe-ge)]);i.style.minWidth=ee+"px",i.style.left=ve+"px"}else{const v=A.right-re.right,y=window.innerWidth-ne.right-v,J=window.innerWidth-_.right-y,ee=_.width+J,ge=Math.max(ee,A.width),xe=window.innerWidth-O,ve=Me(y,[O,Math.max(O,xe-ge)]);i.style.minWidth=ee+"px",i.style.right=ve+"px"}const H=C(),F=window.innerHeight-O*2,Z=d.scrollHeight,U=window.getComputedStyle(p),k=parseInt(U.borderTopWidth,10),W=parseInt(U.paddingTop,10),K=parseInt(U.borderBottomWidth,10),$=parseInt(U.paddingBottom,10),L=k+W+Z+$+K,se=Math.min(g.offsetHeight*5,L),V=window.getComputedStyle(d),Q=parseInt(V.paddingTop,10),ae=parseInt(V.paddingBottom,10),le=_.top+_.height/2-O,de=F-le,ce=g.offsetHeight/2,h=g.offsetTop+ce,T=k+W+h,j=L-T;if(T<=le){const v=H.length>0&&g===H[H.length-1].ref.current;i.style.bottom="0px";const y=p.clientHeight-d.offsetTop-d.offsetHeight,J=Math.max(de,ce+(v?ae:0)+y+K),ee=T+J;i.style.height=ee+"px"}else{const v=H.length>0&&g===H[0].ref.current;i.style.top="0px";const J=Math.max(le,k+d.offsetTop+(v?Q:0)+ce)+j;i.style.height=J+"px",d.scrollTop=T-le+d.offsetTop}i.style.margin=`${O}px 0`,i.style.minHeight=se+"px",i.style.maxHeight=F+"px",s==null||s(),requestAnimationFrame(()=>I.current=!0)}},[C,f.trigger,f.valueNode,i,p,d,g,S,f.dir,s]);z(()=>m(),[m]);const[M,R]=n.useState();z(()=>{p&&R(window.getComputedStyle(p).zIndex)},[p]);const X=n.useCallback(_=>{_&&b.current===!0&&(m(),u==null||u(),b.current=!1)},[m,u]);return r.jsx(no,{scope:e,contentWrapper:i,shouldExpandOnScrollRef:I,onScrollButtonChange:X,children:r.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:M},children:r.jsx(D.div,{...a,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});Je.displayName=to;var oo="SelectPopperPosition",Se=n.forwardRef((t,o)=>{const{__scopeSelect:e,align:s="start",collisionPadding:a=O,...f}=t,c=me(e);return r.jsx(jt,{...c,...f,ref:o,align:s,collisionPadding:a,style:{boxSizing:"border-box",...f.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Se.displayName=oo;var[no,Ie]=oe(G,{}),we="SelectViewport",et=n.forwardRef((t,o)=>{const{__scopeSelect:e,nonce:s,...a}=t,f=q(we,e),c=Ie(we,e),i=B(o,f.onViewportChange),l=n.useRef(0);return r.jsxs(r.Fragment,{children:[r.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:s}),r.jsx(pe.Slot,{scope:e,children:r.jsx(D.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:i,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:P(a.onScroll,p=>{const x=p.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:C}=c;if(C!=null&&C.current&&w){const I=Math.abs(l.current-x.scrollTop);if(I>0){const b=window.innerHeight-O*2,d=parseFloat(w.style.minHeight),g=parseFloat(w.style.height),S=Math.max(d,g);if(S<b){const u=S+I,m=Math.min(b,u),M=u-m;w.style.height=m+"px",w.style.bottom==="0px"&&(x.scrollTop=M>0?M:0,w.style.justifyContent="flex-end")}}}l.current=x.scrollTop})})})]})});et.displayName=we;var tt="SelectGroup",[ro,so]=oe(tt),ao=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t,a=Ne();return r.jsx(ro,{scope:e,id:a,children:r.jsx(D.div,{role:"group","aria-labelledby":a,...s,ref:o})})});ao.displayName=tt;var ot="SelectLabel",Pe=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t,a=so(ot,e);return r.jsx(D.div,{id:a.id,...s,ref:o})});Pe.displayName=ot;var ue="SelectItem",[lo,nt]=oe(ue),Re=n.forwardRef((t,o)=>{const{__scopeSelect:e,value:s,disabled:a=!1,textValue:f,...c}=t,i=Y(ue,e),l=q(ue,e),p=i.value===s,[x,w]=n.useState(f??""),[C,I]=n.useState(!1),b=B(o,u=>{var m;return(m=l.itemRefCallback)==null?void 0:m.call(l,u,s,a)}),d=Ne(),g=n.useRef("touch"),S=()=>{a||(i.onValueChange(s),i.onOpenChange(!1))};return r.jsx(lo,{scope:e,value:s,disabled:a,textId:d,isSelected:p,onItemTextChange:n.useCallback(u=>{w(m=>m||((u==null?void 0:u.textContent)??"").trim())},[]),children:r.jsx(pe.ItemSlot,{scope:e,value:s,disabled:a,textValue:x,children:r.jsx(D.div,{role:"option","aria-labelledby":d,"data-highlighted":C?"":void 0,"aria-selected":p&&C,"data-state":p?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...c,ref:b,onFocus:P(c.onFocus,()=>I(!0)),onBlur:P(c.onBlur,()=>I(!1)),onClick:P(c.onClick,()=>{g.current!=="mouse"&&S()}),onPointerUp:P(c.onPointerUp,()=>{g.current==="mouse"&&S()}),onPointerDown:P(c.onPointerDown,u=>{g.current=u.pointerType}),onPointerMove:P(c.onPointerMove,u=>{var m;g.current=u.pointerType,a?(m=l.onItemLeave)==null||m.call(l):g.current==="mouse"&&u.currentTarget.focus({preventScroll:!0})}),onPointerLeave:P(c.onPointerLeave,u=>{var m;u.currentTarget===document.activeElement&&((m=l.onItemLeave)==null||m.call(l))}),onKeyDown:P(c.onKeyDown,u=>{var M;((M=l.searchRef)==null?void 0:M.current)!==""&&u.key===" "||(Kt.includes(u.key)&&S(),u.key===" "&&u.preventDefault())})})})})});Re.displayName=ue;var ie="SelectItemText",rt=n.forwardRef((t,o)=>{const{__scopeSelect:e,className:s,style:a,...f}=t,c=Y(ie,e),i=q(ie,e),l=nt(ie,e),p=Yt(ie,e),[x,w]=n.useState(null),C=B(o,S=>w(S),l.onItemTextChange,S=>{var u;return(u=i.itemTextRefCallback)==null?void 0:u.call(i,S,l.value,l.disabled)}),I=x==null?void 0:x.textContent,b=n.useMemo(()=>r.jsx("option",{value:l.value,disabled:l.disabled,children:I},l.value),[l.disabled,l.value,I]),{onNativeOptionAdd:d,onNativeOptionRemove:g}=p;return z(()=>(d(b),()=>g(b)),[d,g,b]),r.jsxs(r.Fragment,{children:[r.jsx(D.span,{id:l.textId,...f,ref:C}),l.isSelected&&c.valueNode&&!c.valueNodeHasChildren&&!he(c.value)?Ae.createPortal(f.children,c.valueNode):null]})});rt.displayName=ie;var st="SelectItemIndicator",at=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t;return nt(st,e).isSelected?r.jsx(D.span,{"aria-hidden":!0,...s,ref:o}):null});at.displayName=st;var ye="SelectScrollUpButton",_e=n.forwardRef((t,o)=>{const e=q(ye,t.__scopeSelect),s=Ie(ye,t.__scopeSelect),[a,f]=n.useState(!1),c=B(o,s.onScrollButtonChange);return z(()=>{if(e.viewport&&e.isPositioned){let i=function(){const p=l.scrollTop>0;f(p)};const l=e.viewport;return i(),l.addEventListener("scroll",i),()=>l.removeEventListener("scroll",i)}},[e.viewport,e.isPositioned]),a?r.jsx(lt,{...t,ref:c,onAutoScroll:()=>{const{viewport:i,selectedItem:l}=e;i&&l&&(i.scrollTop=i.scrollTop-l.offsetHeight)}}):null});_e.displayName=ye;var Ce="SelectScrollDownButton",Ee=n.forwardRef((t,o)=>{const e=q(Ce,t.__scopeSelect),s=Ie(Ce,t.__scopeSelect),[a,f]=n.useState(!1),c=B(o,s.onScrollButtonChange);return z(()=>{if(e.viewport&&e.isPositioned){let i=function(){const p=l.scrollHeight-l.clientHeight,x=Math.ceil(l.scrollTop)<p;f(x)};const l=e.viewport;return i(),l.addEventListener("scroll",i),()=>l.removeEventListener("scroll",i)}},[e.viewport,e.isPositioned]),a?r.jsx(lt,{...t,ref:c,onAutoScroll:()=>{const{viewport:i,selectedItem:l}=e;i&&l&&(i.scrollTop=i.scrollTop+l.offsetHeight)}}):null});Ee.displayName=Ce;var lt=n.forwardRef((t,o)=>{const{__scopeSelect:e,onAutoScroll:s,...a}=t,f=q("SelectScrollButton",e),c=n.useRef(null),i=fe(e),l=n.useCallback(()=>{c.current!==null&&(window.clearInterval(c.current),c.current=null)},[]);return n.useEffect(()=>()=>l(),[l]),z(()=>{var x;const p=i().find(w=>w.ref.current===document.activeElement);(x=p==null?void 0:p.ref.current)==null||x.scrollIntoView({block:"nearest"})},[i]),r.jsx(D.div,{"aria-hidden":!0,...a,ref:o,style:{flexShrink:0,...a.style},onPointerDown:P(a.onPointerDown,()=>{c.current===null&&(c.current=window.setInterval(s,50))}),onPointerMove:P(a.onPointerMove,()=>{var p;(p=f.onItemLeave)==null||p.call(f),c.current===null&&(c.current=window.setInterval(s,50))}),onPointerLeave:P(a.onPointerLeave,()=>{l()})})}),co="SelectSeparator",je=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t;return r.jsx(D.div,{"aria-hidden":!0,...s,ref:o})});je.displayName=co;var ct="SelectArrow",io=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t,a=me(e);return q(ct,e).position==="popper"?r.jsx(Dt,{...a,...s,ref:o}):null});io.displayName=ct;var it="SelectBubbleInput",dt=n.forwardRef(({__scopeSelect:t,...o},e)=>{const s=Y(it,t),{value:a,onValueChange:f,required:c,disabled:i,name:l,autoComplete:p,form:x}=s,{nativeOptions:w,nativeSelectKey:C}=s,I=n.useRef(null),b=B(e,I),d=a??"",g=Ut(d),S=Array.from(w).some(u=>(u.props.value??"")==="");return n.useEffect(()=>{const u=I.current;if(!u)return;const m=window.HTMLSelectElement.prototype,R=Object.getOwnPropertyDescriptor(m,"value").set;if(g!==d&&R){const X=new Event("change",{bubbles:!0});R.call(u,d),u.dispatchEvent(X)}},[g,d]),r.jsxs(D.select,{"aria-hidden":!0,required:c,tabIndex:-1,name:l,autoComplete:p,disabled:i,form:x,onChange:u=>f(u.target.value),...o,style:{...vt,...o.style},ref:b,defaultValue:d,children:[he(a)&&!S?r.jsx("option",{value:""}):null,Array.from(w)]},C)});dt.displayName=it;function uo(t){return typeof t=="function"}function he(t){return t===""||t===void 0}function ut(t){const o=Nt(t),e=n.useRef(""),s=n.useRef(0),a=n.useCallback(c=>{const i=e.current+c;o(i),(function l(p){e.current=p,window.clearTimeout(s.current),p!==""&&(s.current=window.setTimeout(()=>l(""),1e3))})(i)},[o]),f=n.useCallback(()=>{e.current="",window.clearTimeout(s.current)},[]);return n.useEffect(()=>()=>window.clearTimeout(s.current),[]),[e,a,f]}function pt(t,o,e){const a=o.length>1&&Array.from(o).every(p=>p===o[0])?o[0]:o,f=e?t.indexOf(e):-1;let c=po(t,Math.max(f,0));a.length===1&&(c=c.filter(p=>p!==e));const l=c.find(p=>p.textValue.toLowerCase().startsWith(a.toLowerCase()));return l!==e?l:void 0}function po(t,o){return t.map((e,s)=>t[(o+s)%t.length])}const To=We,Io=ze,fo=n.forwardRef(({className:t,children:o,...e},s)=>r.jsxs(be,{ref:s,className:E("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",t),...e,children:[o,r.jsx(Ge,{asChild:!0,children:r.jsx(Fe,{className:"h-4 w-4 opacity-50"})})]}));fo.displayName=be.displayName;const ft=n.forwardRef(({className:t,...o},e)=>r.jsx(_e,{ref:e,className:E("flex cursor-default items-center justify-center py-1",t),...o,children:r.jsx(Ft,{className:"h-4 w-4"})}));ft.displayName=_e.displayName;const mt=n.forwardRef(({className:t,...o},e)=>r.jsx(Ee,{ref:e,className:E("flex cursor-default items-center justify-center py-1",t),...o,children:r.jsx(Fe,{className:"h-4 w-4"})}));mt.displayName=Ee.displayName;const mo=n.forwardRef(({className:t,children:o,position:e="popper",...s},a)=>r.jsx(qe,{children:r.jsxs(Te,{ref:a,className:E("relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",e==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:e,...s,children:[r.jsx(ft,{}),r.jsx(et,{className:E("p-1",e==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:o}),r.jsx(mt,{})]})}));mo.displayName=Te.displayName;const ho=n.forwardRef(({className:t,...o},e)=>r.jsx(Pe,{ref:e,className:E("py-1.5 pl-8 pr-2 text-sm font-semibold",t),...o}));ho.displayName=Pe.displayName;const go=n.forwardRef(({className:t,children:o,...e},s)=>r.jsxs(Re,{ref:s,className:E("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",t),...e,children:[r.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:r.jsx(at,{children:r.jsx(Mt,{className:"h-4 w-4"})})}),r.jsx(rt,{children:o})]}));go.displayName=Re.displayName;const xo=n.forwardRef(({className:t,...o},e)=>r.jsx(je,{ref:e,className:E("-mx-1 my-1 h-px bg-muted",t),...o}));xo.displayName=je.displayName;const Po=Ot,Ro=At,vo=kt,ht=n.forwardRef(({className:t,...o},e)=>r.jsx(Be,{ref:e,className:E("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...o}));ht.displayName=Be.displayName;const So=n.forwardRef(({className:t,children:o,...e},s)=>r.jsxs(vo,{children:[r.jsx(ht,{}),r.jsxs(Le,{ref:s,className:E("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...e,children:[o,r.jsxs(Lt,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[r.jsx(Vt,{className:"h-4 w-4"}),r.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));So.displayName=Le.displayName;const wo=({className:t,...o})=>r.jsx("div",{className:E("flex flex-col space-y-1.5 text-center sm:text-left",t),...o});wo.displayName="DialogHeader";const yo=({className:t,...o})=>r.jsx("div",{className:E("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...o});yo.displayName="DialogFooter";const Co=n.forwardRef(({className:t,...o},e)=>r.jsx(Ve,{ref:e,className:E("text-lg font-semibold leading-none tracking-tight",t),...o}));Co.displayName=Ve.displayName;const No=n.forwardRef(({className:t,...o},e)=>r.jsx(He,{ref:e,className:E("text-sm text-muted-foreground",t),...o}));No.displayName=He.displayName;export{Fe as C,Po as D,To as S,So as a,No as b,yo as c,wo as d,Co as e,Ro as f,mo as g,go as h,fo as i,Io as j,Me as k,Ut as u};
|
|
Binary file
|