@tapflowio/relay 0.27.1 → 0.28.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/dist/RelayServer.d.ts +54 -0
- package/dist/RelayServer.d.ts.map +1 -1
- package/dist/RelayServer.js +384 -37
- package/dist/RelayServer.js.map +1 -1
- package/dist/SessionManager.d.ts +63 -2
- package/dist/SessionManager.d.ts.map +1 -1
- package/dist/SessionManager.js +123 -1
- package/dist/SessionManager.js.map +1 -1
- package/dist/api/apps.d.ts +2 -1
- package/dist/api/apps.d.ts.map +1 -1
- package/dist/api/apps.js +20 -7
- package/dist/api/apps.js.map +1 -1
- package/dist/api/builds.d.ts +2 -1
- package/dist/api/builds.d.ts.map +1 -1
- package/dist/api/builds.js +13 -39
- package/dist/api/builds.js.map +1 -1
- package/dist/api/profile.d.ts.map +1 -1
- package/dist/api/profile.js +3 -1
- package/dist/api/profile.js.map +1 -1
- package/dist/api/runVideos.d.ts +85 -0
- package/dist/api/runVideos.d.ts.map +1 -0
- package/dist/api/runVideos.js +494 -0
- package/dist/api/runVideos.js.map +1 -0
- package/dist/api/runs.d.ts +77 -0
- package/dist/api/runs.d.ts.map +1 -0
- package/dist/api/runs.js +579 -0
- package/dist/api/runs.js.map +1 -0
- package/dist/api/settings.d.ts +1 -1
- package/dist/api/settings.d.ts.map +1 -1
- package/dist/api/settings.js +43 -3
- package/dist/api/settings.js.map +1 -1
- package/dist/db.d.ts +2 -0
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +4 -0
- package/dist/db.js.map +1 -1
- package/dist/lib/buildDeletion.d.ts +21 -0
- package/dist/lib/buildDeletion.d.ts.map +1 -0
- package/dist/lib/buildDeletion.js +58 -0
- package/dist/lib/buildDeletion.js.map +1 -0
- package/dist/lib/watchActions.d.ts +10 -0
- package/dist/lib/watchActions.d.ts.map +1 -0
- package/dist/lib/watchActions.js +27 -0
- package/dist/lib/watchActions.js.map +1 -0
- package/dist/middleware/auth.d.ts +1 -0
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +1 -1
- package/dist/middleware/auth.js.map +1 -1
- package/dist/migrations/015_flow_runs.sql +59 -0
- package/dist/migrations/016_flow_run_videos.sql +51 -0
- package/dist/router.d.ts +5 -0
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +24 -0
- package/dist/router.js.map +1 -1
- package/package.json +9 -9
- package/public/assets/AISessionWatch-C2h4NZ_I.js +31 -0
- package/public/assets/AISessionWatch-C2h4NZ_I.js.br +0 -0
- package/public/assets/AISessionWatch-C2h4NZ_I.js.gz +0 -0
- package/public/assets/AndroidDeviceScreen-C55msKfh.js +35 -0
- package/public/assets/AndroidDeviceScreen-C55msKfh.js.br +0 -0
- package/public/assets/AndroidDeviceScreen-C55msKfh.js.gz +0 -0
- package/public/assets/AppCenter-S1y-8_7l.js +26 -0
- package/public/assets/AppCenter-S1y-8_7l.js.br +0 -0
- package/public/assets/AppCenter-S1y-8_7l.js.gz +0 -0
- package/public/assets/Default-C-l1O-g9.js +6 -0
- package/public/assets/Default-C-l1O-g9.js.br +0 -0
- package/public/assets/Default-C-l1O-g9.js.gz +0 -0
- package/public/assets/Invite-BCndVxaO.js +1 -0
- package/public/assets/Invite-BCndVxaO.js.br +0 -0
- package/public/assets/Invite-BCndVxaO.js.gz +0 -0
- package/public/assets/MacResources-41cFDgE1.js +1 -0
- package/public/assets/MacResources-41cFDgE1.js.br +0 -0
- package/public/assets/MacResources-41cFDgE1.js.gz +0 -0
- package/public/assets/{NotFound-wHOnT2Fl.js → NotFound-DVq_rCKc.js} +1 -1
- package/public/assets/NotFound-DVq_rCKc.js.br +0 -0
- package/public/assets/NotFound-DVq_rCKc.js.gz +0 -0
- package/public/assets/QASession-B67RsIPm.js +81 -0
- package/public/assets/QASession-B67RsIPm.js.br +0 -0
- package/public/assets/QASession-B67RsIPm.js.gz +0 -0
- package/public/assets/ResetPassword-8rj7ASt1.js +1 -0
- package/public/assets/ResetPassword-8rj7ASt1.js.br +0 -0
- package/public/assets/ResetPassword-8rj7ASt1.js.gz +0 -0
- package/public/assets/RunDetail-BIgq9gJ0.js +16 -0
- package/public/assets/RunDetail-BIgq9gJ0.js.br +0 -0
- package/public/assets/RunDetail-BIgq9gJ0.js.gz +0 -0
- package/public/assets/Runs-DpK5aoBr.js +6 -0
- package/public/assets/Runs-DpK5aoBr.js.br +0 -0
- package/public/assets/Runs-DpK5aoBr.js.gz +0 -0
- package/public/assets/Setup-DZrhA_7b.js +1 -0
- package/public/assets/Setup-DZrhA_7b.js.br +0 -0
- package/public/assets/Setup-DZrhA_7b.js.gz +0 -0
- package/public/assets/Team-CJThCjd3.js +6 -0
- package/public/assets/Team-CJThCjd3.js.br +0 -0
- package/public/assets/Team-CJThCjd3.js.gz +0 -0
- package/public/assets/Tokens-DGURtHWi.js +1 -0
- package/public/assets/Tokens-DGURtHWi.js.br +0 -0
- package/public/assets/Tokens-DGURtHWi.js.gz +0 -0
- package/public/assets/WatchedDevice-CpaKHa1x.js +1 -0
- package/public/assets/WatchedDevice-CpaKHa1x.js.br +0 -0
- package/public/assets/WatchedDevice-CpaKHa1x.js.gz +0 -0
- package/public/assets/aiSession-BW09Jhqz.js +26 -0
- package/public/assets/aiSession-BW09Jhqz.js.br +0 -0
- package/public/assets/aiSession-BW09Jhqz.js.gz +0 -0
- package/public/assets/alert-dialog-t5vlOabq.js +1 -0
- package/public/assets/alert-dialog-t5vlOabq.js.br +0 -0
- package/public/assets/alert-dialog-t5vlOabq.js.gz +0 -0
- package/public/assets/{badge-DNaS0Mu3.js → badge-DrDCTAQQ.js} +1 -1
- package/public/assets/badge-DrDCTAQQ.js.br +0 -0
- package/public/assets/badge-DrDCTAQQ.js.gz +0 -0
- package/public/assets/build-format-ofd2iIzf.js +1 -0
- package/public/assets/build-format-ofd2iIzf.js.br +0 -0
- package/public/assets/build-format-ofd2iIzf.js.gz +0 -0
- package/public/assets/dialog-BOFZkCES.js +1 -0
- package/public/assets/dialog-BOFZkCES.js.br +0 -0
- package/public/assets/dialog-BOFZkCES.js.gz +0 -0
- package/public/assets/field-hint-B9fPUgi7.js +1 -0
- package/public/assets/field-hint-B9fPUgi7.js.br +0 -0
- package/public/assets/field-hint-B9fPUgi7.js.gz +0 -0
- package/public/assets/index-Bixhy5MB.js +248 -0
- package/public/assets/index-Bixhy5MB.js.br +0 -0
- package/public/assets/index-Bixhy5MB.js.gz +0 -0
- package/public/assets/index-D17hSi50.js +1 -0
- package/public/assets/index-D17hSi50.js.br +0 -0
- package/public/assets/index-D17hSi50.js.gz +0 -0
- package/public/assets/index-h2hiZ2OM.css +1 -0
- package/public/assets/index-h2hiZ2OM.css.br +0 -0
- package/public/assets/index-h2hiZ2OM.css.gz +0 -0
- package/public/assets/list-view-BpOY1e-d.js +1 -0
- package/public/assets/list-view-BpOY1e-d.js.br +0 -0
- package/public/assets/list-view-BpOY1e-d.js.gz +0 -0
- package/public/assets/{pencil-BN18R4oa.js → pencil-ZlrAsWuU.js} +2 -2
- package/public/assets/pencil-ZlrAsWuU.js.br +0 -0
- package/public/assets/pencil-ZlrAsWuU.js.gz +0 -0
- package/public/assets/play-4CsGZdQU.js +6 -0
- package/public/assets/play-4CsGZdQU.js.br +0 -0
- package/public/assets/play-4CsGZdQU.js.gz +0 -0
- package/public/assets/resource-health-oWJ8hy9X.js +1 -0
- package/public/assets/resource-health-oWJ8hy9X.js.br +0 -0
- package/public/assets/resource-health-oWJ8hy9X.js.gz +0 -0
- package/public/assets/runs-CInQb6v1.js +1 -0
- package/public/assets/runs-CInQb6v1.js.br +0 -0
- package/public/assets/runs-CInQb6v1.js.gz +0 -0
- package/public/assets/search-input-G_QpBvPM.js +6 -0
- package/public/assets/search-input-G_QpBvPM.js.br +0 -0
- package/public/assets/search-input-G_QpBvPM.js.gz +0 -0
- package/public/assets/select-DDzv2YfY.js +11 -0
- package/public/assets/select-DDzv2YfY.js.br +0 -0
- package/public/assets/select-DDzv2YfY.js.gz +0 -0
- package/public/assets/slider-DE7lQdK4.js +1 -0
- package/public/assets/slider-DE7lQdK4.js.br +0 -0
- package/public/assets/slider-DE7lQdK4.js.gz +0 -0
- package/public/assets/tabs-Co1N3x_X.js +1 -0
- package/public/assets/tabs-Co1N3x_X.js.br +0 -0
- package/public/assets/tabs-Co1N3x_X.js.gz +0 -0
- package/public/assets/tech-label-BMvuJmUf.js +1 -0
- package/public/assets/tech-label-BMvuJmUf.js.br +0 -0
- package/public/assets/tech-label-BMvuJmUf.js.gz +0 -0
- package/public/assets/{trash-D1l1Fm-Z.js → trash-Cwj2dbgB.js} +3 -3
- package/public/assets/trash-Cwj2dbgB.js.br +0 -0
- package/public/assets/trash-Cwj2dbgB.js.gz +0 -0
- package/public/assets/{useFocusAfterSwap-BY3N9f9v.js → useFocusAfterSwap-BdItkQCu.js} +1 -1
- package/public/assets/useFocusAfterSwap-BdItkQCu.js.br +0 -0
- package/public/assets/useFocusAfterSwap-BdItkQCu.js.gz +0 -0
- package/public/assets/useRelay-CES3I1Mt.js +1 -0
- package/public/assets/useRelay-CES3I1Mt.js.br +0 -0
- package/public/assets/useRelay-CES3I1Mt.js.gz +0 -0
- package/public/assets/useShownAfter-By1Yxysz.js +1 -0
- package/public/assets/useShownAfter-By1Yxysz.js.br +0 -0
- package/public/assets/useShownAfter-By1Yxysz.js.gz +0 -0
- package/public/assets/{vendor-charts-BykzUV2D.js → vendor-charts-BE7R_8yA.js} +2 -2
- package/public/assets/vendor-charts-BE7R_8yA.js.br +0 -0
- package/public/assets/vendor-charts-BE7R_8yA.js.gz +0 -0
- package/public/assets/{vendor-react-BlPSzrEe.js → vendor-react-DTSdA8m-.js} +4 -4
- package/public/assets/vendor-react-DTSdA8m-.js.br +0 -0
- package/public/assets/{vendor-react-BlPSzrEe.js.gz → vendor-react-DTSdA8m-.js.gz} +0 -0
- package/public/assets/{vendor-router-B_lVHrKl.js → vendor-router-B1pQim9Z.js} +3 -3
- package/public/assets/vendor-router-B1pQim9Z.js.br +0 -0
- package/public/assets/vendor-router-B1pQim9Z.js.gz +0 -0
- package/public/assets/video-swsaHrfi.js +6 -0
- package/public/assets/video-swsaHrfi.js.br +0 -0
- package/public/assets/video-swsaHrfi.js.gz +0 -0
- package/public/index.html +30 -4
- package/public/index.html.br +0 -0
- package/public/index.html.gz +0 -0
- package/public/og-image.jpg +0 -0
- package/public/assets/AppCenter-CeLjUbnR.js +0 -26
- package/public/assets/AppCenter-CeLjUbnR.js.br +0 -0
- package/public/assets/AppCenter-CeLjUbnR.js.gz +0 -0
- package/public/assets/Default-UB0Pa3lN.js +0 -1
- package/public/assets/Default-UB0Pa3lN.js.br +0 -0
- package/public/assets/Default-UB0Pa3lN.js.gz +0 -0
- package/public/assets/Invite-Dv3omu3x.js +0 -1
- package/public/assets/Invite-Dv3omu3x.js.br +0 -0
- package/public/assets/Invite-Dv3omu3x.js.gz +0 -0
- package/public/assets/MacResources-CY4-OdGt.js +0 -1
- package/public/assets/MacResources-CY4-OdGt.js.br +0 -0
- package/public/assets/MacResources-CY4-OdGt.js.gz +0 -0
- package/public/assets/NotFound-wHOnT2Fl.js.br +0 -0
- package/public/assets/NotFound-wHOnT2Fl.js.gz +0 -0
- package/public/assets/QASession-H5eRSwZv.js +0 -150
- package/public/assets/QASession-H5eRSwZv.js.br +0 -0
- package/public/assets/QASession-H5eRSwZv.js.gz +0 -0
- package/public/assets/ResetPassword-nFTigYt2.js +0 -1
- package/public/assets/ResetPassword-nFTigYt2.js.br +0 -0
- package/public/assets/ResetPassword-nFTigYt2.js.gz +0 -0
- package/public/assets/Setup-UmLtF2PF.js +0 -1
- package/public/assets/Setup-UmLtF2PF.js.br +0 -0
- package/public/assets/Setup-UmLtF2PF.js.gz +0 -0
- package/public/assets/Team-DW40kt3H.js +0 -6
- package/public/assets/Team-DW40kt3H.js.br +0 -0
- package/public/assets/Team-DW40kt3H.js.gz +0 -0
- package/public/assets/Tokens-B1a4ChJK.js +0 -1
- package/public/assets/Tokens-B1a4ChJK.js.br +0 -0
- package/public/assets/Tokens-B1a4ChJK.js.gz +0 -0
- package/public/assets/alert-dialog-aoqYdAwx.js +0 -1
- package/public/assets/alert-dialog-aoqYdAwx.js.br +0 -0
- package/public/assets/alert-dialog-aoqYdAwx.js.gz +0 -0
- package/public/assets/badge-DNaS0Mu3.js.br +0 -0
- package/public/assets/badge-DNaS0Mu3.js.gz +0 -0
- package/public/assets/build-format-DF5aFcag.js +0 -11
- package/public/assets/build-format-DF5aFcag.js.br +0 -0
- package/public/assets/build-format-DF5aFcag.js.gz +0 -0
- package/public/assets/dialog-DE2WUMuX.js +0 -11
- package/public/assets/dialog-DE2WUMuX.js.br +0 -0
- package/public/assets/dialog-DE2WUMuX.js.gz +0 -0
- package/public/assets/field-hint-Csb40Gzp.js +0 -1
- package/public/assets/field-hint-Csb40Gzp.js.br +0 -2
- package/public/assets/field-hint-Csb40Gzp.js.gz +0 -0
- package/public/assets/index-BbCkTtjO.css +0 -1
- package/public/assets/index-BbCkTtjO.css.br +0 -0
- package/public/assets/index-BbCkTtjO.css.gz +0 -0
- package/public/assets/index-DSW9h8XX.js +0 -218
- package/public/assets/index-DSW9h8XX.js.br +0 -0
- package/public/assets/index-DSW9h8XX.js.gz +0 -0
- package/public/assets/list-view-C0w97ltJ.js +0 -1
- package/public/assets/list-view-C0w97ltJ.js.br +0 -0
- package/public/assets/list-view-C0w97ltJ.js.gz +0 -0
- package/public/assets/pencil-BN18R4oa.js.br +0 -0
- package/public/assets/pencil-BN18R4oa.js.gz +0 -0
- package/public/assets/resource-health-Bi20EUDs.js +0 -1
- package/public/assets/resource-health-Bi20EUDs.js.br +0 -0
- package/public/assets/resource-health-Bi20EUDs.js.gz +0 -0
- package/public/assets/trash-D1l1Fm-Z.js.br +0 -0
- package/public/assets/trash-D1l1Fm-Z.js.gz +0 -0
- package/public/assets/useFocusAfterSwap-BY3N9f9v.js.br +0 -0
- package/public/assets/useFocusAfterSwap-BY3N9f9v.js.gz +0 -0
- package/public/assets/vendor-charts-BykzUV2D.js.br +0 -0
- package/public/assets/vendor-charts-BykzUV2D.js.gz +0 -0
- package/public/assets/vendor-react-BlPSzrEe.js.br +0 -0
- package/public/assets/vendor-router-B_lVHrKl.js.br +0 -0
- package/public/assets/vendor-router-B_lVHrKl.js.gz +0 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{r as a,j as e,c as je}from"./vendor-react-DTSdA8m-.js";import{G as ve,b as fe,c as ge,u as be,a as ye,B as k,L as _,I as ee,F as Q,n as ke,h as Ce,C as we,d as Se,e as De,f as Te,H as h,o as E,s as C,q as V,aJ as se,aK as Ne}from"./index-Bixhy5MB.js";import{d as q,c as H,a as M,b as B,e as Re,D as Ae}from"./dialog-BOFZkCES.js";import{g as Ee,d as Ie,A as $e,a as Fe,b as Oe,e as Le,c as Pe,f as _e}from"./alert-dialog-t5vlOabq.js";import{d as U,S as z,a as J,b as K,c as x}from"./select-DDzv2YfY.js";import{l as Qe,T as Ve,c as qe,d as G,e as S,a as He,L as Me,b as D}from"./list-view-BpOY1e-d.js";import{j as W,l as X}from"./publicLink-D6zKS_wu.js";import{u as Be}from"./useFocusAfterSwap-BdItkQCu.js";import"./vendor-router-B1pQim9Z.js";import"./index-D17hSi50.js";import"./useShownAfter-By1Yxysz.js";/**
|
|
2
|
+
* @license lucide-react v1.58.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 te={name:"user-plus",size:24,node:[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]};te.node;const Ue=ve(te),ze=E({email:C().email("Enter a valid email"),role:C().min(1,"Pick a role")}),Je=E({token:C(),emailSent:se(),inviteUrl:C().nullable()}),Ke=E({token:C(),emailSent:se(),resetUrl:C().nullable()});function Y(p){return(navigator.clipboard?navigator.clipboard.writeText(p):Promise.reject(new Error("no clipboard"))).then(()=>!0,()=>!1)}function Z(p){const s=je.c(15),{link:r,copied:f,noun:m}=p,u=a.useId(),n=a.useRef(null);let g;s[0]===Symbol.for("react.memo_cache_sentinel")?(g=()=>{var T;(T=n.current)==null||T.focus()},s[0]=g):g=s[0];let b;s[1]!==r?(b=[r],s[1]=r,s[2]=b):b=s[2],a.useEffect(g,b);let l;s[3]!==f||s[4]!==m?(l=f?`${m[0].toUpperCase()}${m.slice(1)} copied to clipboard:`:`Copy this ${m}:`,s[3]=f,s[4]=m,s[5]=l):l=s[5];let o;s[6]!==u||s[7]!==l?(o=e.jsx("p",{id:u,className:"text-sm text-muted-foreground",children:l}),s[6]=u,s[7]=l,s[8]=o):o=s[8];let c;s[9]!==u||s[10]!==r?(c=e.jsx(ee,{ref:n,readOnly:!0,value:r,"aria-labelledby":u,onFocus:Ge,className:"font-mono"}),s[9]=u,s[10]=r,s[11]=c):c=s[11];let j;return s[12]!==o||s[13]!==c?(j=e.jsxs(e.Fragment,{children:[o,c]}),s[12]=o,s[13]=c,s[14]=j):j=s[14],j}function Ge(p){return p.currentTarget.select()}function rs(){var L,P;const p=fe(),s=ge({queryKey:V.teamMembers,queryFn:Ne}),r=s.data??[],f=Qe(s),m=a.useRef(null),u=Be(f,m),[n,g]=a.useState(null),[b,l]=a.useState(!1),o=a.useRef(null),[c,j]=a.useState(""),[T,I]=a.useState(!1),[ie,N]=a.useState(""),[ne,ae]=a.useState(!1),[R,A]=a.useState(null),{register:le,handleSubmit:re,control:oe,reset:ce,setError:de,formState:{errors:v,isSubmitting:$,submitCount:me}}=be({shouldFocusError:!1,resolver:ye(ze),defaultValues:{email:"",role:"QA"}}),F=()=>{p.invalidateQueries({queryKey:V.teamMembers})};async function ue(t){N("");try{const i=await fetch("/api/v1/team/invite",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:t.email,role:t.role})});if(i.status===409){de("email",{message:"Already a member. Change their role in the list instead."});return}if(!i.ok)throw new Error(`Server error: ${i.status}`);const d=Je.parse(await i.json()),w=d.inviteUrl??W((await X()).linkBase,`/invite?token=${d.token}`),y=await Y(w);j(w),I(y),N(`${d.emailSent?`Invite email sent to ${t.email}.`:"Email could not be sent."} ${y?"Invite link copied to clipboard.":"Copy the invite link."}`),d.emailSent?h.success(`Invite email sent to ${t.email}`):y?h.warning("Invite link copied — email could not be sent. Check your SMTP settings."):h.warning("Email could not be sent. Copy the invite link from the dialog, and check your SMTP settings.")}catch{h.error("Failed to create invite link"),N("Failed to create invite link.")}}function O(t){ae(t),t&&(j(""),I(!1),N(""),ce())}async function he(t,i){await fetch(`/api/v1/team/members/${t}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({role:i})}),F()}async function xe(t){try{const i=await fetch(`/api/v1/team/members/${t.id}/send-reset`,{method:"POST",credentials:"include"});if(!i.ok)throw new Error(`Server error: ${i.status}`);const d=Ke.parse(await i.json()),w=d.resetUrl??W((await X()).linkBase,`/reset-password?token=${d.token}`),y=await Y(w);g({email:t.email,link:w,copied:y,emailSent:d.emailSent}),l(!0),d.emailSent?h.success(`Reset email sent to ${t.email}`):y?h.warning("Reset link copied — email could not be sent. Send the link to the member yourself."):h.warning("Email could not be sent. Copy the reset link from the dialog and send it to the member.")}catch{h.error("Failed to create reset link")}}async function pe(t){await fetch(`/api/v1/team/members/${t}`,{method:"DELETE",credentials:"include"}),A(null),F()}return e.jsxs("div",{className:"flex flex-col gap-6 max-w-[900px] mx-auto w-full p-6",children:[e.jsx(Ee,{open:R!==null,onOpenChange:t=>{t||A(null)},children:e.jsxs(Ie,{children:[e.jsxs($e,{children:[e.jsx(Fe,{children:"Remove this member?"}),e.jsx(Oe,{children:"This member will lose access to the team immediately."})]}),e.jsxs(Le,{children:[e.jsx(Pe,{children:"Cancel"}),e.jsx(_e,{className:"bg-destructive/10 text-destructive hover:bg-destructive/20 border-0",onClick:()=>R!==null&&pe(R),children:"Remove"})]})]})}),e.jsx(q,{open:b,onOpenChange:l,children:e.jsxs(H,{className:"sm:max-w-md",onCloseAutoFocus:t=>{var i;t.preventDefault(),(i=o.current)==null||i.focus()},children:[e.jsxs(M,{children:[e.jsx(B,{children:"Password reset link"}),e.jsxs(Re,{children:[n!=null&&n.emailSent?`Reset email sent to ${n.email}.`:`Email could not be sent to ${(n==null?void 0:n.email)??""}.`," ","The link works once, for 2 hours. Making a new one turns this one off. Completing the reset signs the member out everywhere and revokes their personal access tokens, so agents using those tokens disconnect until new ones are issued."]})]}),n&&e.jsxs("div",{className:"flex flex-col gap-3 pt-2",children:[e.jsx(Z,{link:n.link,copied:n.copied,noun:"reset link"}),e.jsx(k,{onClick:()=>l(!1),children:"Done"})]})]})}),e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-xl font-semibold",children:"Team"}),e.jsxs(q,{open:ne,onOpenChange:O,children:[e.jsx(Ae,{asChild:!0,children:e.jsxs(k,{ref:m,size:"sm",children:[e.jsx(Ue,{className:"mr-2 h-4 w-4"}),"Invite member"]})}),e.jsxs(H,{className:"sm:max-w-md",children:[e.jsx(M,{children:e.jsx(B,{children:"Invite team member"})}),e.jsx("p",{role:"status",className:"sr-only",children:ie}),c?e.jsxs("div",{className:"flex flex-col gap-3 pt-2",children:[e.jsx(Z,{link:c,copied:T,noun:"invite link"}),e.jsx(k,{onClick:()=>O(!1),children:"Done"})]}):e.jsxs("form",{onSubmit:re(ue),className:"flex flex-col gap-4 pt-2",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(_,{htmlFor:"invite-email",children:"Email"}),e.jsx(ee,{id:"invite-email",type:"email","aria-required":"true","aria-invalid":!!v.email,"aria-describedby":v.email?"email-error":void 0,...le("email")}),e.jsx(Q,{id:"email-error",message:(L=v.email)==null?void 0:L.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(_,{htmlFor:"invite-role",children:"Role"}),e.jsx(ke,{name:"role",control:oe,render:({field:t})=>e.jsxs(U,{value:t.value,onValueChange:t.onChange,children:[e.jsx(z,{id:"invite-role","aria-invalid":!!v.role,"aria-describedby":v.role?"role-error":void 0,children:e.jsx(J,{})}),e.jsxs(K,{children:[e.jsx(x,{value:"Admin",children:"Admin"}),e.jsx(x,{value:"Developer",children:"Developer"}),e.jsx(x,{value:"QA",children:"QA"}),e.jsx(x,{value:"Viewer",children:"Viewer"})]})]})}),e.jsx(Q,{id:"role-error",message:(P=v.role)==null?void 0:P.message})]}),e.jsx(k,{type:"submit",disabled:$,children:$?"Creating link…":"Generate invite link"}),e.jsx(Ce,{errors:v,submitCount:me})]})]})]})]}),e.jsxs(we,{children:[e.jsx(Se,{children:e.jsxs(De,{children:["Members",s.data?` (${r.length})`:""]})}),e.jsx(Te,{className:"px-4 pt-0 pb-2",children:e.jsxs(Ve,{children:[e.jsx(qe,{children:e.jsxs(G,{children:[e.jsx(S,{children:"Nickname"}),e.jsx(S,{children:"Email"}),e.jsx(S,{children:"Role"}),e.jsx(S,{children:"Joined"}),e.jsx(S,{className:"w-10"})]})}),e.jsxs(He,{...u,children:[e.jsx(Me,{view:f,colSpan:5,noun:"team members",emptyText:"No members yet.",onRetry:()=>{s.refetch()}}),r.map(t=>e.jsxs(G,{className:"hover:bg-transparent",children:[e.jsx(D,{className:"font-medium",children:t.display_name||"—"}),e.jsx(D,{className:"text-muted-foreground text-sm",children:t.email}),e.jsx(D,{children:e.jsxs(U,{value:t.role,onValueChange:i=>he(t.id,i),children:[e.jsx(z,{className:"h-7 w-28",children:e.jsx(J,{})}),e.jsxs(K,{children:[e.jsx(x,{value:"Admin",children:"Admin"}),e.jsx(x,{value:"Developer",children:"Developer"}),e.jsx(x,{value:"QA",children:"QA"}),e.jsx(x,{value:"Viewer",children:"Viewer"})]})]})}),e.jsx(D,{className:"text-muted-foreground text-sm",children:new Date(t.joined_at).toLocaleDateString()}),e.jsx(D,{children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(k,{variant:"secondary",size:"nav",onClick:i=>{o.current=i.currentTarget,xe(t)},children:"Reset pwd"}),e.jsx(k,{variant:"destructive",size:"nav",onClick:()=>A(t.id),children:"Remove"})]})})]},t.id))]})]})})]})]})}export{rs as TeamSettings};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as a,j as e}from"./vendor-react-DTSdA8m-.js";import{b as ce,R as de,c as xe,u as ue,a as me,l as pe,B as u,I as j,H as n,L as y,F as Q,n as he,h as je,C as ye,d as ge,e as fe,m as ve,f as ke,o as be,aL as Ne,s as z,q as K,aM as we}from"./index-Bixhy5MB.js";import{B as N}from"./badge-DrDCTAQQ.js";import{g as Ce,d as Te,A as De,a as Se,b as Ae,e as Fe,c as Ie}from"./alert-dialog-t5vlOabq.js";import{d as Re,D as Ee,c as Be,a as Le,b as Pe}from"./dialog-BOFZkCES.js";import{d as M,S as $,a as G,b as J,c as m}from"./select-DDzv2YfY.js";import{l as qe,T as Oe,c as He,d as U,e as p,a as Ve,L as We,b as h}from"./list-view-BpOY1e-d.js";import{l as _e}from"./publicLink-D6zKS_wu.js";import{u as Qe}from"./useFocusAfterSwap-BdItkQCu.js";import{P as ze,T as Ke}from"./trash-Cwj2dbgB.js";import"./vendor-router-B1pQim9Z.js";import"./index-D17hSi50.js";import"./useShownAfter-By1Yxysz.js";const X=["7","30","60","90"],Me=be({name:z().min(1,"Give the token a name"),expiry:Ne([...X,"custom","never"]),expiresDays:z()}).superRefine((r,g)=>{if(r.expiry!=="custom")return;const o=Number(r.expiresDays);(!Number.isInteger(o)||o<1||o>365)&&g.addIssue({code:"custom",path:["expiresDays"],message:"Must be between 1 and 365"})});function $e(r){if(r.expiry!=="never")return Number(r.expiry==="custom"?r.expiresDays:r.expiry)}function is(){var V,W,_;const r=ce(),g=((V=de().user)==null?void 0:V.role)==="Admin",o=xe({queryKey:K.tokens,queryFn:we}),Y=o.data??[],w=qe(o),C=a.useRef(null),Z=Qe(w,C),[ee,se]=a.useState(!1),[l,T]=a.useState(""),[x,D]=a.useState("api"),[S,A]=a.useState(""),[f,v]=a.useState(null),F=a.useId(),I=a.useId(),k=a.useRef(null),[ae,c]=a.useState(""),R=a.useId(),{register:E,control:B,handleSubmit:re,reset:te,formState:{errors:i,isSubmitting:L,submitCount:ne}}=ue({shouldFocusError:!1,resolver:me(Me),defaultValues:{name:"",expiry:"30",expiresDays:"30"}}),P=pe({control:B,name:"expiry"}),q=()=>{r.invalidateQueries({queryKey:K.tokens})};a.useEffect(()=>{var s;l&&((s=k.current)==null||s.focus())},[l]);async function oe(s){c("");try{const t=$e(s),b=await fetch("/api/v1/tokens",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s.name,...t!==void 0?{expires_in_days:t}:{},...x==="agent"?{scope:"agent"}:{}})});if(!b.ok){const d=await b.json().catch(()=>null);n.error((d==null?void 0:d.error)??"Failed to create token"),c((d==null?void 0:d.error)??"Failed to create token");return}const le=await b.json();x==="agent"&&A((await _e()).agentWsBase),n.success("Token created"),T(le.token),q()}catch{n.error("Network error"),c("Network error")}}function O(s){se(s),s&&(T(""),D("api"),A(""),c(""),te())}async function ie(s){try{return(await fetch(`/api/v1/tokens/${s}`,{method:"DELETE",credentials:"include"})).ok?(n.success("Token revoked"),q(),!0):(n.error("Failed to revoke token"),!1)}catch{return n.error("Network error"),!1}}function H(s){return s.expires_at&&new Date(s.expires_at)<new Date}return e.jsxs("div",{className:"flex flex-col gap-6 max-w-[900px] mx-auto w-full p-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h1",{className:"text-xl font-semibold",children:"Personal Access Tokens"}),e.jsxs(Re,{open:ee,onOpenChange:O,children:[e.jsx(Ee,{asChild:!0,children:e.jsxs(u,{ref:C,size:"sm",children:[e.jsx(ze,{className:"mr-2 h-4 w-4"}),"New token"]})}),e.jsxs(Be,{className:"sm:max-w-md",children:[e.jsx(Le,{children:e.jsx(Pe,{children:"Create token"})}),e.jsx("p",{role:"status",className:"sr-only",children:ae}),l?e.jsxs("div",{className:"flex flex-col gap-3 pt-2",children:[e.jsx("p",{id:F,className:"text-sm text-muted-foreground",children:"Copy this token now — it won't be shown again."}),e.jsx(j,{ref:k,readOnly:!0,value:l,"aria-labelledby":F,onFocus:s=>s.currentTarget.select(),className:"font-mono"}),x==="agent"&&S&&e.jsxs(e.Fragment,{children:[e.jsx("p",{id:I,className:"text-sm text-muted-foreground",children:"Run this on the agent Mac to connect it to this relay:"}),e.jsx(j,{readOnly:!0,value:`tapflow agent start --relay ${S} --token ${l}`,"aria-labelledby":I,onFocus:s=>s.currentTarget.select(),className:"font-mono"})]}),e.jsx(u,{onClick:()=>{c(""),(navigator.clipboard?navigator.clipboard.writeText(l):Promise.reject(new Error("no clipboard"))).then(()=>{n.success("Token copied to clipboard"),O(!1)}).catch(()=>{var s;n.error("Failed to copy — copy manually"),c("Could not copy the token. Select it and copy it by hand."),(s=k.current)==null||s.focus()})},children:"Copy & close"})]}):e.jsxs("form",{onSubmit:re(oe),className:"flex flex-col gap-4 pt-2",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"token-name",children:"Name"}),e.jsx(j,{id:"token-name",placeholder:"e.g. ci-deploy","aria-required":"true","aria-invalid":!!i.name,"aria-describedby":i.name?"name-error":void 0,...E("name")}),e.jsx(Q,{id:"name-error",message:(W=i.name)==null?void 0:W.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"token-expiry",children:"Expiration"}),e.jsx(he,{control:B,name:"expiry",render:({field:s})=>e.jsxs(M,{value:s.value,onValueChange:t=>s.onChange(t),children:[e.jsx($,{id:"token-expiry",ref:s.ref,onBlur:s.onBlur,"aria-describedby":s.value==="never"?R:void 0,children:e.jsx(G,{})}),e.jsxs(J,{children:[X.map(t=>e.jsxs(m,{value:t,children:[t," days"]},t)),e.jsx(m,{value:"custom",children:"Custom…"}),e.jsx(m,{value:"never",children:"No expiration"})]})]})}),P==="never"&&e.jsx("p",{id:R,className:"text-sm text-amber-700 dark:text-amber-300",children:"A token without an expiry stays valid until you revoke it. For CI, 90 days or less is recommended."})]}),P==="custom"&&e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"expires",children:"Expires in (days)"}),e.jsx(j,{id:"expires",type:"number","aria-required":"true","aria-invalid":!!i.expiresDays,"aria-describedby":i.expiresDays?"expiresDays-error":void 0,...E("expiresDays")}),e.jsx(Q,{id:"expiresDays-error",message:(_=i.expiresDays)==null?void 0:_.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(y,{htmlFor:"token-type",children:"Type"}),e.jsxs(M,{value:x,onValueChange:s=>D(s),children:[e.jsx($,{id:"token-type",children:e.jsx(G,{})}),e.jsxs(J,{children:[e.jsx(m,{value:"api",children:"API — CI uploads & API access"}),g&&e.jsx(m,{value:"agent",children:"Agent — connect remote device agents (Admin only)"})]})]})]}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:["Scope: ",e.jsx(N,{variant:"secondary",children:x==="agent"?"agent":"view, builds:write"})]}),e.jsx(u,{type:"submit",disabled:L,children:L?"Creating…":"Create token"}),e.jsx(je,{errors:i,submitCount:ne})]})]})]})]}),e.jsxs(ye,{children:[e.jsxs(ge,{children:[e.jsx(fe,{children:"Active tokens"}),e.jsxs(ve,{children:["Use these tokens with ",e.jsx("code",{className:"text-xs",children:"Authorization: Bearer <token>"})," for API deployments."]})]}),e.jsx(ke,{className:"px-4 pt-0 pb-2",children:e.jsxs(Oe,{children:[e.jsx(He,{children:e.jsxs(U,{children:[e.jsx(p,{children:"Name"}),e.jsx(p,{children:"Scope"}),e.jsx(p,{children:"Last used"}),e.jsx(p,{children:"Expires"}),e.jsx(p,{className:"w-10"})]})}),e.jsxs(Ve,{...Z,children:[e.jsx(We,{view:w,colSpan:5,noun:"tokens",emptyText:"No tokens yet.",onRetry:()=>{o.refetch()}}),Y.map(s=>e.jsxs(U,{className:"hover:bg-transparent",children:[e.jsx(h,{className:"font-medium",children:s.name}),e.jsx(h,{children:e.jsx(N,{variant:"secondary",children:s.scope})}),e.jsx(h,{className:"text-muted-foreground text-sm",children:s.last_used_at?new Date(s.last_used_at).toLocaleDateString():"Never"}),e.jsx(h,{children:s.expires_at?e.jsx("span",{className:H(s)?"text-destructive text-sm":"text-muted-foreground text-sm",children:H(s)?"Expired":new Date(s.expires_at).toLocaleDateString()}):e.jsx(N,{variant:"outline",children:"No expiration"})}),e.jsx(h,{children:e.jsx(u,{variant:"destructive",size:"icon",className:"h-7 w-7","aria-label":"Revoke token",onClick:()=>v(s.id),children:e.jsx(Ke,{className:"h-4 w-4"})})})]},s.id))]})]})})]}),e.jsx(Ce,{open:f!==null,onOpenChange:s=>{s||v(null)},children:e.jsxs(Te,{children:[e.jsxs(De,{children:[e.jsx(Se,{children:"Revoke token?"}),e.jsx(Ae,{children:"Any active API calls using this token will immediately fail."})]}),e.jsxs(Fe,{children:[e.jsx(Ie,{children:"Cancel"}),e.jsx(u,{variant:"destructive",onClick:async()=>{if(f===null)return;await ie(f)&&v(null)},children:"Revoke"})]})]})})]})}export{is as TokenSettings};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as _,j as u,r as $}from"./vendor-react-DTSdA8m-.js";import{h as z,s as g,u as v,a as W,i as M,d as F,I,A as N}from"./AndroidDeviceScreen-C55msKfh.js";const O="rgb(59 130 246)";function R(s){const e=_.c(14),{marks:t,place:r}=s;let p;e[0]!==t.cursor||e[1]!==r?(p=t.cursor&&r(t.cursor.x,t.cursor.y),e[0]=t.cursor,e[1]=r,e[2]=p):p=e[2];const a=p,l=P;let m;e[3]===Symbol.for("react.memo_cache_sentinel")?(m={zIndex:5},e[3]=m):m=e[3];let n;if(e[4]!==t.trails||e[5]!==r){let c;e[7]!==r?(c=d=>{const f=r(...d.to),h=d.from&&r(...d.from);return u.jsxs("span",{children:[h&&u.jsx("svg",{"data-testid":"trail",className:"absolute inset-0 size-full overflow-visible motion-safe:animate-[swipe-mark_0.8s_ease-out_forwards]",children:u.jsx("line",{x1:l(h.left),y1:l(h.top),x2:l(f.left),y2:l(f.top),stroke:O,strokeOpacity:d.kind==="swipe"?.7:.45,strokeWidth:d.kind==="swipe"?6:3,strokeLinecap:"round",...d.kind==="tap"?{strokeDasharray:"1 7"}:{}})}),u.jsx("span",{"data-testid":"ripple",className:"absolute size-10 rounded-full border-2 border-blue-500 opacity-0 motion-safe:animate-[tap-mark_0.7s_ease-out_0.2s_forwards]",style:{left:l(f.left),top:l(f.top),transform:"translate(-50%, -50%)"}})]},d.id)},e[7]=r,e[8]=c):c=e[8],n=t.trails.map(c),e[4]=t.trails,e[5]=r,e[6]=n}else n=e[6];let o;e[9]!==a?(o=a&&u.jsx("span",{"data-testid":"tap-cursor",className:"absolute size-7 rounded-full border-2 border-blue-500 bg-blue-500/35 shadow-[0_0_0_2px_rgba(255,255,255,0.85),0_2px_8px_rgba(0,0,0,0.3)] motion-safe:transition-[left,top] motion-safe:duration-300 motion-safe:ease-out",style:{left:l(a.left),top:l(a.top),transform:"translate(-50%, -50%)"}}),e[9]=a,e[10]=o):o=e[10];let i;return e[11]!==n||e[12]!==o?(i=u.jsxs("div",{"aria-hidden":"true","data-testid":"tap-marks",className:"pointer-events-none absolute inset-0",style:m,children:[n,o]}),e[11]=n,e[12]=o,e[13]=i):i=e[13],i}function P(s){return`${s*100}%`}const K=100,E=900,B={cursor:null,trails:[]};function X(s,e,t){return e.kind==="tap"?{id:s,kind:"tap",from:t?[t.x,t.y]:null,to:[e.x,e.y]}:{id:s,kind:"swipe",from:e.from,to:e.to}}function q(s){const e=t=>`${Math.round(t*100)}%`;switch(s.kind){case"label":return s.label;case"tap":return`Tap at ${e(s.x)}, ${e(s.y)}`;case"swipe":return`Swipe ${A(s.from,s.to)}`;case"key":return s.key==="character"?"Key (a character)":`Key ${s.key}`;case"button":return`Button ${s.button}`;case"type":return`Typed ${s.chars} ${s.chars===1?"character":"characters"}`;case"pinch":return"Pinch";case"launch":return"Launched the app";case"install":return"Installed a build";case"clear-state":return"Cleared the app's data";case"open-url":return"Opened a link"}}function A(s,e){const t=e[0]-s[0],r=e[1]-s[1];return Math.abs(t)>Math.abs(r)?t>0?"right":"left":r>0?"down":"up"}function G(s){return s.kind==="tap"||s.kind==="swipe"}function H(s){return(e,t)=>({left:(s.screenPctLeft+e*s.screenPctW)/100,top:(s.screenPctTop+t*s.screenPctH)/100})}function J(s){const e=_.c(27),{chrome:t,deviceReady:r,platform:p,formFactor:a,binaryFrameHandlerRef:l,replay:m,screenKey:n,marks:o}=s,i=m===void 0?!1:m,[c,d]=$.useState(null),f=t!==null&&"framePng"in t?t:null,h=t!==null&&!("framePng"in t)?t:null;let x;e[0]!==h||e[1]!==r||e[2]!==a||e[3]!==p||e[4]!==i||e[5]!==f||e[6]!==c?(x=f??(r&&p==="ios"&&!h?z(c??g(a,p),i?0:void 0):null),e[0]=h,e[1]=r,e[2]=a,e[3]=p,e[4]=i,e[5]=f,e[6]=c,e[7]=x):x=e[7];const b=x;if(b){let S;return e[8]!==l||e[9]!==a||e[10]!==b||e[11]!==o||e[12]!==i||e[13]!==n?(S=u.jsx(U,{chrome:b,formFactor:a,binaryFrameHandlerRef:l,onStreamSize:d,replay:i,marks:o},n),e[8]=l,e[9]=a,e[10]=b,e[11]=o,e[12]=i,e[13]=n,e[14]=S):S=e[14],S}if(h){let S;return e[15]!==h||e[16]!==l||e[17]!==r||e[18]!==o||e[19]!==n?(S=u.jsx(L,{chrome:h,deviceReady:r,binaryFrameHandlerRef:l,marks:o},n),e[15]=h,e[16]=l,e[17]=r,e[18]=o,e[19]=n,e[20]=S):S=e[20],S}let y;e[21]===Symbol.for("react.memo_cache_sentinel")?(y={background:"#1c1c1e",borderRadius:"34px",padding:"12px"},e[21]=y):y=e[21];let k;e[22]!==a||e[23]!==p?(k=g(a,p),e[22]=a,e[23]=p,e[24]=k):k=e[24];let j;return e[25]!==k?(j=u.jsx("div",{"aria-hidden":"true",style:y,children:u.jsx("div",{"data-testid":"watch-skeleton",className:"animate-pulse bg-zinc-700",style:{...k,borderRadius:"22px"}})}),e[25]=k,e[26]=j):j=e[26],j}function U(s){const e=_.c(23),{chrome:t,formFactor:r,binaryFrameHandlerRef:p,onStreamSize:a,replay:l,marks:m}=s,{fps:n,frameCount:o}=v();let i;e[0]!==p||e[1]!==t||e[2]!==n||e[3]!==o||e[4]!==a?(i={chrome:t,binaryFrameHandlerRef:p,fps:n,frameCount:o,onCanvasResize:a},e[0]=p,e[1]=t,e[2]=n,e[3]=o,e[4]=a,e[5]=i):i=e[5];const c=W(i);let d;e[6]!==t?(d=H(M(t)),e[6]=t,e[7]=d):d=e[7];const f=d,h=!l;let x;e[8]!==m||e[9]!==f?(x=m?u.jsx(R,{marks:m,place:f}):void 0,e[8]=m,e[9]=f,e[10]=x):x=e[10];let b;e[11]!==t||e[12]!==r||e[13]!==n||e[14]!==c||e[15]!==h||e[16]!==x?(b=u.jsx(I,{screen:c,chrome:t,formFactor:r,isLandscape:!1,joined:h,fps:n,overlay:x}),e[11]=t,e[12]=r,e[13]=n,e[14]=c,e[15]=h,e[16]=x,e[17]=b):b=e[17];let y;e[18]!==c.decoderUnsupported?(y=c.decoderUnsupported&&u.jsx(w,{}),e[18]=c.decoderUnsupported,e[19]=y):y=e[19];let k;return e[20]!==b||e[21]!==y?(k=u.jsxs(u.Fragment,{children:[b,y]}),e[20]=b,e[21]=y,e[22]=k):k=e[22],k}function L(s){const e=_.c(18),{chrome:t,deviceReady:r,binaryFrameHandlerRef:p,marks:a}=s,{frameCount:l}=v(),m=t.streamRotation??0;let n;e[0]!==p||e[1]!==t.cornerRadius||e[2]!==t.screenHeight||e[3]!==t.screenWidth||e[4]!==l||e[5]!==m?(n={binaryFrameHandlerRef:p,frameCount:l,screenWidth:t.screenWidth,screenHeight:t.screenHeight,streamRotation:m,cornerRadius:t.cornerRadius,userWantsLandscape:!1,rotatePending:!1},e[0]=p,e[1]=t.cornerRadius,e[2]=t.screenHeight,e[3]=t.screenWidth,e[4]=l,e[5]=m,e[6]=n):n=e[6];const o=F(n);let i;e[7]!==a?(i=a?u.jsx(R,{marks:a,place:C}):void 0,e[7]=a,e[8]=i):i=e[8];let c;e[9]!==r||e[10]!==o||e[11]!==i?(c=u.jsx(N,{screen:o,deviceReady:r,posturePending:!1,overlay:i}),e[9]=r,e[10]=o,e[11]=i,e[12]=c):c=e[12];let d;e[13]!==o.decoderUnsupported?(d=o.decoderUnsupported&&u.jsx(w,{}),e[13]=o.decoderUnsupported,e[14]=d):d=e[14];let f;return e[15]!==c||e[16]!==d?(f=u.jsxs(u.Fragment,{children:[c,d]}),e[15]=c,e[16]=d,e[17]=f):f=e[17],f}function C(s,e){return{left:s,top:e}}function w(){const s=_.c(1);let e;return s[0]===Symbol.for("react.memo_cache_sentinel")?(e=u.jsx("p",{role:"status",className:"max-w-xs text-sm text-muted-foreground",children:"Streaming is not supported in this environment."}),s[0]=e):e=s[0],e}export{K as M,B as N,J as W,E as a,q as b,G as i,X as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import{G as a}from"./index-Bixhy5MB.js";/**
|
|
2
|
+
* @license lucide-react v1.58.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 n={name:"arrow-left",size:24,node:[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]};n.node;const i=a(n);/**
|
|
7
|
+
* @license lucide-react v1.58.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 t={name:"download",size:24,node:[["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"}]]};t.node;const c=a(t);/**
|
|
12
|
+
* @license lucide-react v1.58.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 s={name:"house",size:24,node:[["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"}]],aliases:["home"]};s.node;const r=a(s);/**
|
|
17
|
+
* @license lucide-react v1.58.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 o={name:"keyboard",size:24,node:[["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"}]]};o.node;const y=a(o);/**
|
|
22
|
+
* @license lucide-react v1.58.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 h={name:"link-2",size:24,node:[["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"}]]};h.node;const l=a(h);function p(e){return e==="mcp"?"Coding agent":"Flow runner"}function k(e){switch(e){case"session-not-found":return"This session has ended.";case"not-watchable":return"This device is not being driven by an AI agent, so it cannot be watched.";case"not-permitted":return"Sign in to the dashboard to watch a session.";case"watchers-full":return"This session already has as many viewers as it allows. Try again later."}}function w(e){switch(e){case"session-ended":return"The session ended.";case"holder-changed":return"Someone else picked up this device, so the watch ended."}}export{i as A,c as D,r as H,y as K,l as L,w as a,p as h,k as w};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as n,j as i,c as d}from"./vendor-react-DTSdA8m-.js";import{aQ as S,a5 as u,aR as O,ad as T,aS as b,aT as E,aV as x,b7 as N,a8 as h,aO as z,aP as F,aU as H,a2 as f,aG as v}from"./index-Bixhy5MB.js";var M=Object.defineProperty,c=(s,t)=>M(s,"name",{value:t,configurable:!0}),k="AlertDialog",[V,oe]=h(k,[N]),p=N(),G=c(s=>{const{__scopeAlertDialog:t,...e}=s,a=p(t);return i.jsx(z,{...a,...e,modal:!0})},"AlertDialog"),I=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,...l}=t,o=p(a);return i.jsx(F,{...o,...l,ref:e})},"AlertDialogTrigger")),L=c(s=>{const{__scopeAlertDialog:t,...e}=s,a=p(t);return i.jsx(S,{...a,...e})},"AlertDialogPortal"),_=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,...l}=t,o=p(a);return i.jsx(H,{...o,...l,ref:e})},"AlertDialogOverlay")),Q="AlertDialogContent",[U,q]=V(Q),y=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,children:l,...o}=t,r=p(a),g=n.useRef(null),$=u(e,g),m=n.useRef(null);return i.jsx(U,{scope:a,cancelRef:m,children:i.jsx(O,{role:"alertdialog",...r,...o,ref:$,onOpenAutoFocus:T(o.onOpenAutoFocus,D=>{var A;D.preventDefault(),(A=m.current)==null||A.focus({preventScroll:!0})}),onPointerDownOutside:D=>D.preventDefault(),onInteractOutside:D=>D.preventDefault(),children:l})})},"AlertDialogContent")),j=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,...l}=t,o=p(a);return i.jsx(b,{...o,...l,ref:e})},"AlertDialogTitle")),R=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,...l}=t,o=p(a);return i.jsx(E,{...o,...l,ref:e})},"AlertDialogDescription")),C=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,...l}=t,o=p(a);return i.jsx(x,{...o,...l,ref:e})},"AlertDialogAction")),B="AlertDialogCancel",w=n.forwardRef(c(function(t,e){const{__scopeAlertDialog:a,...l}=t,{cancelRef:o}=q(B,a),r=p(a),g=u(e,o);return i.jsx(x,{...r,...l,ref:g})},"AlertDialogCancel"));const se=G,re=I,J=L,P=n.forwardRef((s,t)=>{const e=d.c(9);let a,l;e[0]!==s?({className:a,...l}=s,e[0]=s,e[1]=a,e[2]=l):(a=e[1],l=e[2]);let o;e[3]!==a?(o=f("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",a),e[3]=a,e[4]=o):o=e[4];let r;return e[5]!==l||e[6]!==t||e[7]!==o?(r=i.jsx(_,{className:o,...l,ref:t}),e[5]=l,e[6]=t,e[7]=o,e[8]=r):r=e[8],r});P.displayName=_.displayName;const K=n.forwardRef((s,t)=>{const e=d.c(10);let a,l;e[0]!==s?({className:a,...l}=s,e[0]=s,e[1]=a,e[2]=l):(a=e[1],l=e[2]);let o;e[3]===Symbol.for("react.memo_cache_sentinel")?(o=i.jsx(P,{}),e[3]=o):o=e[3];let r;e[4]!==a?(r=f("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 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-1/2 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-1/2 sm:rounded-lg",a),e[4]=a,e[5]=r):r=e[5];let g;return e[6]!==l||e[7]!==t||e[8]!==r?(g=i.jsxs(J,{children:[o,i.jsx(y,{ref:t,className:r,...l})]}),e[6]=l,e[7]=t,e[8]=r,e[9]=g):g=e[9],g});K.displayName=y.displayName;const W=s=>{const t=d.c(8);let e,a;t[0]!==s?({className:e,...a}=s,t[0]=s,t[1]=e,t[2]=a):(e=t[1],a=t[2]);let l;t[3]!==e?(l=f("flex flex-col space-y-2 text-center sm:text-left",e),t[3]=e,t[4]=l):l=t[4];let o;return t[5]!==a||t[6]!==l?(o=i.jsx("div",{className:l,...a}),t[5]=a,t[6]=l,t[7]=o):o=t[7],o};W.displayName="AlertDialogHeader";const X=s=>{const t=d.c(8);let e,a;t[0]!==s?({className:e,...a}=s,t[0]=s,t[1]=e,t[2]=a):(e=t[1],a=t[2]);let l;t[3]!==e?(l=f("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),t[3]=e,t[4]=l):l=t[4];let o;return t[5]!==a||t[6]!==l?(o=i.jsx("div",{className:l,...a}),t[5]=a,t[6]=l,t[7]=o):o=t[7],o};X.displayName="AlertDialogFooter";const Y=n.forwardRef((s,t)=>{const e=d.c(9);let a,l;e[0]!==s?({className:a,...l}=s,e[0]=s,e[1]=a,e[2]=l):(a=e[1],l=e[2]);let o;e[3]!==a?(o=f("text-lg font-semibold",a),e[3]=a,e[4]=o):o=e[4];let r;return e[5]!==l||e[6]!==t||e[7]!==o?(r=i.jsx(j,{ref:t,className:o,...l}),e[5]=l,e[6]=t,e[7]=o,e[8]=r):r=e[8],r});Y.displayName=j.displayName;const Z=n.forwardRef((s,t)=>{const e=d.c(9);let a,l;e[0]!==s?({className:a,...l}=s,e[0]=s,e[1]=a,e[2]=l):(a=e[1],l=e[2]);let o;e[3]!==a?(o=f("text-sm text-muted-foreground",a),e[3]=a,e[4]=o):o=e[4];let r;return e[5]!==l||e[6]!==t||e[7]!==o?(r=i.jsx(R,{ref:t,className:o,...l}),e[5]=l,e[6]=t,e[7]=o,e[8]=r):r=e[8],r});Z.displayName=R.displayName;const ee=n.forwardRef((s,t)=>{const e=d.c(9);let a,l;e[0]!==s?({className:a,...l}=s,e[0]=s,e[1]=a,e[2]=l):(a=e[1],l=e[2]);let o;e[3]!==a?(o=f(v(),a),e[3]=a,e[4]=o):o=e[4];let r;return e[5]!==l||e[6]!==t||e[7]!==o?(r=i.jsx(C,{ref:t,className:o,...l}),e[5]=l,e[6]=t,e[7]=o,e[8]=r):r=e[8],r});ee.displayName=C.displayName;const te=n.forwardRef((s,t)=>{const e=d.c(9);let a,l;e[0]!==s?({className:a,...l}=s,e[0]=s,e[1]=a,e[2]=l):(a=e[1],l=e[2]);let o;e[3]!==a?(o=f(v({variant:"outline"}),"mt-2 sm:mt-0",a),e[3]=a,e[4]=o):o=e[4];let r;return e[5]!==l||e[6]!==t||e[7]!==o?(r=i.jsx(w,{ref:t,className:o,...l}),e[5]=l,e[6]=t,e[7]=o,e[8]=r):r=e[8],r});te.displayName=w.displayName;export{W as A,Y as a,Z as b,te as c,K as d,X as e,ee as f,se as g,re as h};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{c as i,j as b}from"./vendor-react-DTSdA8m-.js";import{a2 as l,aN as g}from"./index-Bixhy5MB.js";const x=g("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive text-destructive-foreground",outline:"text-foreground"},tone:{backlog:"border-transparent bg-zinc-100 text-zinc-600 dark:bg-zinc-800 dark:text-zinc-400",progress:"border-transparent bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300",done:"border-transparent bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300",rejected:"border-transparent bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300",ios:"border-transparent bg-sky-50 text-sky-700 dark:bg-sky-950 dark:text-sky-300",android:"border-transparent bg-emerald-50 text-emerald-700 dark:bg-emerald-950 dark:text-emerald-300"}},defaultVariants:{variant:"default"}});function u(o){const e=i.c(12);let r,t,a,n;e[0]!==o?({className:r,variant:n,tone:a,...t}=o,e[0]=o,e[1]=r,e[2]=t,e[3]=a,e[4]=n):(r=e[1],t=e[2],a=e[3],n=e[4]);let d;e[5]!==r||e[6]!==a||e[7]!==n?(d=l(x({variant:n,tone:a}),r),e[5]=r,e[6]=a,e[7]=n,e[8]=d):d=e[8];let s;return e[9]!==t||e[10]!==d?(s=b.jsx("div",{className:d,...t}),e[9]=t,e[10]=d,e[11]=s):s=e[11],s}export{u as B};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const i={Backlog:"backlog","In Progress":"progress",Done:"done",Rejected:"rejected"},u={ios:"iOS",android:"Android",both:"Both"};function a(e){return e.version_name&&e.build_number?`${e.version_name} · build ${e.build_number}`:e.version_name??e.version_label??(e.build_number?`build ${e.build_number}`:"Build")}function s(e){return`${e.platform} build ${e.build_number??"without a number"}, ${e.version_name??"Unversioned"}`}function o(e){const n=/[zZ]|[+-]\d{2}:?\d{2}$/.test(e);return new Date(n?e:e.replace(" ","T")+"Z").getTime()-Date.now()}function l(e){const n=o(e);if(n<=0)return{label:"Deleting…",urgent:!0};const r=Math.floor(n/36e5);return r<1?{label:"Deletes in < 1h",urgent:!0}:r<24?{label:`Deletes in ${r}h`,urgent:r<6}:{label:`Deletes in ${Math.floor(r/24)}d`,urgent:!1}}function d(e){const n=o(e);if(n<=0)return"now";if(n<36e5)return"within an hour";const r=Math.round(n/36e5);if(r<24)return`in ${r} hour${r===1?"":"s"}`;const t=Math.round(n/864e5);return`in ${t} day${t===1?"":"s"}`}export{u as P,i as S,a,s as b,d,l as f};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as p,c,j as n}from"./vendor-react-DTSdA8m-.js";import{aO as y,aP as j,a2 as d,aQ as $,aR as g,aS as x,aT as u,aU as N,aV as h,am as b}from"./index-Bixhy5MB.js";const E=y,O=j,w=$,D=p.forwardRef((o,a)=>{const e=c.c(9);let s,t;e[0]!==o?({className:s,...t}=o,e[0]=o,e[1]=s,e[2]=t):(s=e[1],t=e[2]);let l;e[3]!==s?(l=d("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",s),e[3]=s,e[4]=l):l=e[4];let i;return e[5]!==t||e[6]!==a||e[7]!==l?(i=n.jsx(N,{ref:a,className:l,...t}),e[5]=t,e[6]=a,e[7]=l,e[8]=i):i=e[8],i});D.displayName=N.displayName;const R=p.forwardRef((o,a)=>{const e=c.c(13);let s,t,l;e[0]!==o?({className:t,children:s,...l}=o,e[0]=o,e[1]=s,e[2]=t,e[3]=l):(s=e[1],t=e[2],l=e[3]);let i;e[4]===Symbol.for("react.memo_cache_sentinel")?(i=n.jsx(D,{}),e[4]=i):i=e[4];let r;e[5]!==t?(r=d("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 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-1/2 data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-1/2 sm:rounded-lg",t),e[5]=t,e[6]=r):r=e[6];let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=n.jsxs(h,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",children:[n.jsx(b,{className:"h-4 w-4"}),n.jsx("span",{className:"sr-only",children:"Close"})]}),e[7]=m):m=e[7];let f;return e[8]!==s||e[9]!==l||e[10]!==a||e[11]!==r?(f=n.jsxs(w,{children:[i,n.jsxs(g,{ref:a,className:r,...l,children:[s,m]})]}),e[8]=s,e[9]=l,e[10]=a,e[11]=r,e[12]=f):f=e[12],f});R.displayName=g.displayName;const v=o=>{const a=c.c(8);let e,s;a[0]!==o?({className:e,...s}=o,a[0]=o,a[1]=e,a[2]=s):(e=a[1],s=a[2]);let t;a[3]!==e?(t=d("flex flex-col space-y-1.5 text-center sm:text-left",e),a[3]=e,a[4]=t):t=a[4];let l;return a[5]!==s||a[6]!==t?(l=n.jsx("div",{className:t,...s}),a[5]=s,a[6]=t,a[7]=l):l=a[7],l};v.displayName="DialogHeader";const T=o=>{const a=c.c(8);let e,s;a[0]!==o?({className:e,...s}=o,a[0]=o,a[1]=e,a[2]=s):(e=a[1],s=a[2]);let t;a[3]!==e?(t=d("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",e),a[3]=e,a[4]=t):t=a[4];let l;return a[5]!==s||a[6]!==t?(l=n.jsx("div",{className:t,...s}),a[5]=s,a[6]=t,a[7]=l):l=a[7],l};T.displayName="DialogFooter";const k=p.forwardRef((o,a)=>{const e=c.c(9);let s,t;e[0]!==o?({className:s,...t}=o,e[0]=o,e[1]=s,e[2]=t):(s=e[1],t=e[2]);let l;e[3]!==s?(l=d("text-lg font-semibold leading-none tracking-tight",s),e[3]=s,e[4]=l):l=e[4];let i;return e[5]!==t||e[6]!==a||e[7]!==l?(i=n.jsx(x,{ref:a,className:l,...t}),e[5]=t,e[6]=a,e[7]=l,e[8]=i):i=e[8],i});k.displayName=x.displayName;const z=p.forwardRef((o,a)=>{const e=c.c(9);let s,t;e[0]!==o?({className:s,...t}=o,e[0]=o,e[1]=s,e[2]=t):(s=e[1],t=e[2]);let l;e[3]!==s?(l=d("text-sm text-muted-foreground",s),e[3]=s,e[4]=l):l=e[4];let i;return e[5]!==t||e[6]!==a||e[7]!==l?(i=n.jsx(u,{ref:a,className:l,...t}),e[5]=t,e[6]=a,e[7]=l,e[8]=i):i=e[8],i});z.displayName=u.displayName;export{O as D,v as a,k as b,R as c,E as d,z as e,T as f};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as n,j as c}from"./vendor-react-DTSdA8m-.js";import{a2 as a}from"./index-Bixhy5MB.js";function x(m){const t=n.c(6),{id:o,children:r,className:i}=m;let e;t[0]!==i?(e=a("text-sm text-muted-foreground",i),t[0]=i,t[1]=e):e=t[1];let s;return t[2]!==r||t[3]!==o||t[4]!==e?(s=c.jsx("p",{id:o,className:e,children:r}),t[2]=r,t[3]=o,t[4]=e,t[5]=s):s=t[5],s}export{x as F};
|
|
Binary file
|
|
Binary file
|