@tapflowio/relay 0.14.0 → 0.16.0
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/api/builds.d.ts +35 -0
- package/dist/api/builds.d.ts.map +1 -1
- package/dist/api/builds.js +62 -30
- package/dist/api/builds.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +18 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/dataDir.d.ts +8 -0
- package/dist/lib/dataDir.d.ts.map +1 -0
- package/dist/lib/dataDir.js +18 -0
- package/dist/lib/dataDir.js.map +1 -0
- package/package.json +4 -4
- package/public/assets/{AppCenter-DbFf7BKA.js → AppCenter-DHKav0MA.js} +2 -2
- package/public/assets/AppCenter-DHKav0MA.js.br +0 -0
- package/public/assets/Default-FOVo8D6L.js +1 -0
- package/public/assets/Default-FOVo8D6L.js.br +0 -0
- package/public/assets/Invite-DdjwJ4DV.js +1 -0
- package/public/assets/Invite-DdjwJ4DV.js.br +0 -0
- package/public/assets/{MacResources-D-j1pG9s.js → MacResources-Dl1w6E1h.js} +2 -2
- package/public/assets/MacResources-Dl1w6E1h.js.br +0 -0
- package/public/assets/{NotFound-BwAREUV8.js → NotFound-BMUavI-G.js} +1 -1
- package/public/assets/NotFound-BMUavI-G.js.br +0 -0
- package/public/assets/{QASession-Du5LOUTZ.js → QASession-BzfWUo9F.js} +6 -6
- package/public/assets/QASession-BzfWUo9F.js.br +0 -0
- package/public/assets/{ResetPassword-C6cya_7-.js → ResetPassword-Yn2hnB_M.js} +1 -1
- package/public/assets/ResetPassword-Yn2hnB_M.js.br +0 -0
- package/public/assets/{Setup-DHS2ZvMu.js → Setup-BaGV0xx6.js} +1 -1
- package/public/assets/Setup-BaGV0xx6.js.br +0 -0
- package/public/assets/{Team-DkIXb37o.js → Team-BOwoos5_.js} +2 -2
- package/public/assets/Team-BOwoos5_.js.br +0 -0
- package/public/assets/Tokens-Bu1FtE_n.js +1 -0
- package/public/assets/Tokens-Bu1FtE_n.js.br +0 -0
- package/public/assets/{alert-dialog-CPQLr1ij.js → alert-dialog-dsCcQ1NM.js} +1 -1
- package/public/assets/alert-dialog-dsCcQ1NM.js.br +0 -0
- package/public/assets/{badge-B63ynAZJ.js → badge-CNtq_oBK.js} +1 -1
- package/public/assets/badge-CNtq_oBK.js.br +0 -0
- package/public/assets/{build-format-CcGvUI_j.js → build-format-D6egYX-U.js} +1 -1
- package/public/assets/build-format-D6egYX-U.js.br +0 -0
- package/public/assets/dialog-Blqnc3tq.js +11 -0
- package/public/assets/dialog-Blqnc3tq.js.br +0 -0
- package/public/assets/index-IvDXNTVd.js +274 -0
- package/public/assets/index-IvDXNTVd.js.br +0 -0
- package/public/assets/{pencil-BAhJ8VF-.js → pencil-CzKUUBmE.js} +1 -1
- package/public/assets/pencil-CzKUUBmE.js.br +0 -0
- package/public/assets/{table-IfQacRqI.js → table-CU0HMyju.js} +1 -1
- package/public/assets/table-CU0HMyju.js.br +0 -0
- package/public/assets/tabs-C9nZOMC5.js +1 -0
- package/public/assets/tabs-C9nZOMC5.js.br +0 -0
- package/public/assets/{trash-2-Bfw6hch4.js → trash-2-Bw_edyHa.js} +1 -1
- package/public/assets/trash-2-Bw_edyHa.js.br +0 -0
- package/public/index.html +1 -1
- package/public/index.html.br +0 -0
- package/public/assets/AppCenter-DbFf7BKA.js.br +0 -0
- package/public/assets/Default-BXiTKHz2.js +0 -1
- package/public/assets/Default-BXiTKHz2.js.br +0 -0
- package/public/assets/Invite-Dw4wdx9j.js +0 -1
- package/public/assets/Invite-Dw4wdx9j.js.br +0 -0
- package/public/assets/MacResources-D-j1pG9s.js.br +0 -0
- package/public/assets/NotFound-BwAREUV8.js.br +0 -2
- package/public/assets/QASession-Du5LOUTZ.js.br +0 -0
- package/public/assets/ResetPassword-C6cya_7-.js.br +0 -0
- package/public/assets/Setup-DHS2ZvMu.js.br +0 -0
- package/public/assets/Team-DkIXb37o.js.br +0 -0
- package/public/assets/Tokens-DxZUmUPI.js +0 -1
- package/public/assets/Tokens-DxZUmUPI.js.br +0 -0
- package/public/assets/alert-dialog-CPQLr1ij.js.br +0 -0
- package/public/assets/badge-B63ynAZJ.js.br +0 -0
- package/public/assets/build-format-CcGvUI_j.js.br +0 -0
- package/public/assets/dialog-CEEdc-Oq.js +0 -11
- package/public/assets/dialog-CEEdc-Oq.js.br +0 -0
- package/public/assets/index-D8ViYmeP.js +0 -274
- package/public/assets/index-D8ViYmeP.js.br +0 -0
- package/public/assets/pencil-BAhJ8VF-.js.br +0 -0
- package/public/assets/table-IfQacRqI.js.br +0 -0
- package/public/assets/tabs-DKQ2XF1o.js +0 -1
- package/public/assets/tabs-DKQ2XF1o.js.br +0 -0
- package/public/assets/trash-2-Bfw6hch4.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-IvDXNTVd.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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a7 as c,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-IvDXNTVd.js";const O=location.protocol==="https:"?"wss:":"ws:",K=`${O}//${location.host}`,J=2e3;function U(e,t){const a=c.useRef(null),[r,i]=c.useState(!1),u=c.useRef(e);u.current=e;const s=c.useRef(t);return s.current=t,c.useEffect(()=>{let l=!1;const d=()=>{if(l)return;const n=new WebSocket(K);n.binaryType="arraybuffer",a.current=n,n.onopen=()=>i(!0),n.onclose=()=>{i(!1),l||setTimeout(d,J)},n.onmessage=o=>{var v;if(o.data instanceof ArrayBuffer){(v=s.current)==null||v.call(s,o.data);return}try{u.current(JSON.parse(o.data))}catch{}}};return d(),()=>{var n;l=!0,(n=a.current)==null||n.close()}},[]),{send:c.useCallback(l=>{var d;((d=a.current)==null?void 0:d.readyState)===WebSocket.OPEN&&a.current.send(JSON.stringify(l))},[]),connected:r}}var p="Tabs",[W]=G(p,[y]),N=y(),[Y,x]=W(p),R=c.forwardRef((e,t)=>{const{__scopeTabs:a,value:r,onValueChange:i,defaultValue:u,orientation:s="horizontal",dir:b,activationMode:l="automatic",...d}=e,n=k(b),[o,v]=M({prop:r,onChange:i,defaultProp:u??"",caller:p});return f.jsx(Y,{scope:a,baseId:D(),value:o,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=c.forwardRef((e,t)=>{const{__scopeTabs:a,loop:r=!0,...i}=e,u=x(h,a),s=N(a);return f.jsx(L,{asChild:!0,...s,orientation:u.orientation,dir:u.dir,loop:r,children:f.jsx(g.div,{role:"tablist","aria-orientation":u.orientation,...i,ref:t})})});C.displayName=h;var w="TabsTrigger",E=c.forwardRef((e,t)=>{const{__scopeTabs:a,value:r,disabled:i=!1,...u}=e,s=x(w,a),b=N(a),l=j(s.baseId,r),d=A(s.baseId,r),n=r===s.value;return f.jsx(F,{asChild:!0,...b,focusable:!i,active:n,children:f.jsx(g.button,{type:"button",role:"tab","aria-selected":n,"aria-controls":d,"data-state":n?"active":"inactive","data-disabled":i?"":void 0,disabled:i,id:l,...u,ref:t,onMouseDown:m(e.onMouseDown,o=>{!i&&o.button===0&&o.ctrlKey===!1?s.onValueChange(r):o.preventDefault()}),onKeyDown:m(e.onKeyDown,o=>{i||o.target!==o.currentTarget||[" ","Enter"].includes(o.key)&&s.onValueChange(r)}),onFocus:m(e.onFocus,()=>{const o=s.activationMode!=="manual";!n&&!i&&o&&s.onValueChange(r)})})})});E.displayName=w;var I="TabsContent",S=c.forwardRef((e,t)=>{const{__scopeTabs:a,value:r,forceMount:i,children:u,...s}=e,b=x(I,a),l=j(b.baseId,r),d=A(b.baseId,r),n=r===b.value,o=c.useRef(n);return c.useEffect(()=>{const v=requestAnimationFrame(()=>o.current=!1);return()=>cancelAnimationFrame(v)},[]),f.jsx(V,{present:i||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:o.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=c.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=c.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=c.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-IvDXNTVd.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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ap as X,ab as Z,a7 as i,ai as S,aa as y,ao as I,a4 as e,C as g,d as j,e as v,b as w,L as m,I as u,S as M,i as O,a9 as n,B as h,G as ee,K as se,J as ae,a5 as A,_ as $,a8 as p}from"./index-D8ViYmeP.js";import{B as re}from"./badge-B63ynAZJ.js";import{A as te,h as oe,c as ne,f as ie,g as le,d as ce,e as de,b as me,a as ue}from"./alert-dialog-CPQLr1ij.js";import{P as W}from"./pencil-BAhJ8VF-.js";const he=A({teamName:p().min(1),logo:$(File).nullable().optional()}),pe=A({displayName:p().min(1),avatar:$(File).nullable().optional()}),fe=A({currentPassword:p().min(1),newPassword:p().min(8),confirmPassword:p()}).refine(f=>f.newPassword===f.confirmPassword,{message:"Passwords do not match",path:["confirmPassword"]});function we(){const{resolvedTheme:f}=X(),J=f==="dark"?"/logo-dark.svg":"/logo.svg",{user:o}=Z(),b=(o==null?void 0:o.role)==="Admin",N=(o==null?void 0:o.role)==="Admin"||(o==null?void 0:o.role)==="Developer",[V,P]=i.useState(null),C=i.useRef(null),d=S({resolver:y(he),mode:"onBlur",defaultValues:{teamName:"",logo:null}});i.useEffect(()=>{b&&fetch("/api/v1/settings",{credentials:"include"}).then(s=>s.ok?s.json():null).then(s=>{s&&(d.reset({teamName:s.team_name,logo:null}),P(s.logo_url))})},[b]);async function G(s){const a=new FormData;a.append("team_name",s.teamName),s.logo&&a.append("logo",s.logo);try{if(!(await fetch("/api/v1/settings",{method:"PATCH",credentials:"include",body:a})).ok){n.error("Failed to update workspace");return}n.success("Workspace updated")}catch{n.error("Failed to update workspace")}}const[k,F]=i.useState(null),D=i.useRef(null),c=S({resolver:y(pe),mode:"onBlur",defaultValues:{displayName:"",avatar:null}});i.useEffect(()=>{o&&(c.reset({displayName:o.displayName??"",avatar:null}),F(o.avatarUrl??null))},[o]);async function K(s){const a=new FormData;a.append("display_name",s.displayName),s.avatar&&a.append("avatar",s.avatar);try{if(!(await fetch("/api/v1/profile",{method:"PATCH",credentials:"include",body:a})).ok){n.error("Failed to update profile");return}n.success("Profile updated")}catch{n.error("Failed to update profile")}}const t=S({resolver:y(fe),mode:"onBlur"});async function Q(s){try{const a=await fetch("/api/v1/auth/change-password",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({currentPassword:s.currentPassword,newPassword:s.newPassword})});if(!a.ok){const r=await a.json();t.setError("root",{message:r.error??"Failed to change password"});return}t.reset(),n.success("Password changed")}catch{t.setError("root",{message:"Network error"})}}const[T,E]=i.useState([]),[B,L]=i.useState({}),[U,z]=i.useState({}),[R,_]=i.useState({});i.useEffect(()=>{N&&fetch("/api/v1/apps",{credentials:"include"}).then(s=>s.ok?s.json():null).then(s=>{if(!s)return;E(s.items);const a={};s.items.forEach(r=>{a[r.id]=r.name}),L(a)})},[N]);async function Y(s){_(a=>({...a,[s]:!0}));try{if(!(await fetch(`/api/v1/apps/${s}`,{method:"DELETE",credentials:"include"})).ok){n.error("Failed to delete app");return}E(r=>r.filter(l=>l.id!==s)),n.success("App deleted")}catch{n.error("Failed to delete app")}finally{_(a=>({...a,[s]:!1}))}}async function q(s){z(a=>({...a,[s]:!0}));try{if(!(await fetch(`/api/v1/apps/${s}`,{method:"PATCH",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:B[s]})})).ok){n.error("Failed to update app");return}n.success("App updated")}catch{n.error("Failed to update app")}finally{z(a=>({...a,[s]:!1}))}}const x=I({control:c.control,name:"displayName"});return e.jsxs("div",{className:"flex flex-col gap-6 max-w-[900px] mx-auto w-full p-6",children:[e.jsx("h1",{className:"text-xl font-semibold tracking-display-sm",children:"Settings"}),b&&e.jsxs(g,{children:[e.jsx(j,{children:e.jsx(v,{children:"Workspace"})}),e.jsx(w,{children:e.jsxs("form",{onSubmit:d.handleSubmit(G),className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(m,{htmlFor:"team-name",children:"Team name"}),e.jsx(u,{id:"team-name",placeholder:"My QA Team",...d.register("teamName")}),d.formState.errors.teamName&&e.jsx("p",{className:"text-sm text-destructive",children:d.formState.errors.teamName.message})]}),e.jsx(M,{}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs(m,{children:["Logo ",e.jsx("span",{className:"text-muted-foreground text-xs",children:"(png · jpg, max 2MB)"})]}),e.jsx(O,{name:"logo",control:d.control,render:({field:s})=>e.jsxs("div",{className:"relative w-16 h-16",children:[e.jsx("img",{src:V??J,alt:"logo",className:"w-16 h-16 rounded-lg object-contain"}),e.jsx("button",{type:"button",onClick:()=>{var a;return(a=C.current)==null?void 0:a.click()},className:"absolute bottom-0 right-0 w-6 h-6 rounded-full bg-background border border-border shadow-sm flex items-center justify-center hover:bg-accent transition-colors",children:e.jsx(W,{className:"w-3 h-3"})}),e.jsx("input",{ref:C,type:"file",accept:".png,.jpg,.jpeg",className:"hidden",onChange:a=>{var l;const r=(l=a.target.files)==null?void 0:l[0];if(r&&r.size>2*1024*1024){n.error("Image must be 2MB or less");return}r&&(s.onChange(r),P(URL.createObjectURL(r)))}})]})})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(h,{type:"submit",size:"sm",disabled:d.formState.isSubmitting,children:d.formState.isSubmitting?"Saving…":"Save changes"})})]})})]}),e.jsxs(g,{children:[e.jsx(j,{children:e.jsx(v,{children:"Profile"})}),e.jsx(w,{children:e.jsxs("form",{onSubmit:c.handleSubmit(K),className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(m,{htmlFor:"display-name",children:"Nickname"}),e.jsx(u,{id:"display-name",placeholder:"Your name",...c.register("displayName")}),c.formState.errors.displayName&&e.jsx("p",{className:"text-sm text-destructive",children:c.formState.errors.displayName.message})]}),e.jsx(M,{}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs(m,{children:["Avatar ",e.jsx("span",{className:"text-muted-foreground text-xs",children:"(png · jpg, max 2MB)"})]}),e.jsx(O,{name:"avatar",control:c.control,render:({field:s})=>{var a;return e.jsxs("div",{className:"relative w-14 h-14",children:[k?e.jsx("img",{src:k,alt:"avatar",className:"w-14 h-14 rounded-full object-cover border"}):e.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center text-lg font-medium",style:(()=>{const r=ee(x||(o==null?void 0:o.email)||"");return{backgroundColor:r.bg,color:r.fg}})(),children:((a=x==null?void 0:x[0])==null?void 0:a.toUpperCase())??"?"}),e.jsx("button",{type:"button",onClick:()=>{var r;return(r=D.current)==null?void 0:r.click()},className:"absolute bottom-0 right-0 w-6 h-6 rounded-full bg-background border border-border shadow-sm flex items-center justify-center hover:bg-accent transition-colors",children:e.jsx(W,{className:"w-3 h-3"})}),e.jsx("input",{ref:D,type:"file",accept:".png,.jpg,.jpeg",className:"hidden",onChange:r=>{var H;const l=(H=r.target.files)==null?void 0:H[0];if(l&&l.size>2*1024*1024){n.error("Image must be 2MB or less");return}l&&(s.onChange(l),F(URL.createObjectURL(l)))}})]})}})]}),e.jsx("div",{className:"flex justify-end",children:e.jsx(h,{type:"submit",size:"sm",disabled:c.formState.isSubmitting,children:c.formState.isSubmitting?"Saving…":"Save changes"})})]})})]}),e.jsxs(g,{children:[e.jsx(j,{children:e.jsx(v,{children:"Password"})}),e.jsx(w,{children:e.jsxs("form",{onSubmit:t.handleSubmit(Q),className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(m,{htmlFor:"current-password",children:"Current password"}),e.jsx(u,{id:"current-password",type:"password",...t.register("currentPassword")}),t.formState.errors.currentPassword&&e.jsx("p",{className:"text-sm text-destructive",children:t.formState.errors.currentPassword.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(m,{htmlFor:"new-password",children:"New password"}),e.jsx(u,{id:"new-password",type:"password",...t.register("newPassword")}),t.formState.errors.newPassword&&e.jsx("p",{className:"text-sm text-destructive",children:t.formState.errors.newPassword.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(m,{htmlFor:"confirm-password",children:"Confirm new password"}),e.jsx(u,{id:"confirm-password",type:"password",...t.register("confirmPassword")}),t.formState.errors.confirmPassword&&e.jsx("p",{className:"text-sm text-destructive",children:t.formState.errors.confirmPassword.message})]}),t.formState.errors.root&&e.jsx("p",{className:"text-sm text-destructive",children:t.formState.errors.root.message}),e.jsx("div",{className:"flex justify-end",children:e.jsx(h,{type:"submit",size:"sm",disabled:t.formState.isSubmitting,children:t.formState.isSubmitting?"Saving…":"Change password"})})]})})]}),N&&T.length>0&&e.jsxs(g,{children:[e.jsx(j,{children:e.jsx(v,{children:"Apps"})}),e.jsx(w,{children:e.jsx("div",{className:"flex flex-col divide-y divide-border",children:T.map(s=>e.jsxs("div",{className:"flex flex-col gap-2 py-4 first:pt-0 last:pb-0",children:[e.jsx(m,{htmlFor:`app-${s.id}`,children:"App Name"}),e.jsx(u,{id:`app-${s.id}`,value:B[s.id]??"",onChange:a=>L(r=>({...r,[s.id]:a.target.value}))}),e.jsxs("div",{className:"flex flex-col gap-1.5 mt-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground font-mono",children:s.bundle_id_key}),e.jsx(re,{tone:s.platform==="ios"?"ios":s.platform==="android"?"android":void 0,variant:s.platform==="both"?"secondary":void 0,className:"capitalize",children:s.platform})]}),e.jsxs("div",{className:"flex items-center justify-end gap-2",children:[e.jsx(h,{size:"sm",variant:"outline",disabled:U[s.id],onClick:()=>q(s.id),children:U[s.id]?"Saving…":"Save"}),e.jsxs(te,{children:[e.jsx(oe,{asChild:!0,children:e.jsx(h,{size:"sm",variant:"destructive",disabled:R[s.id],children:R[s.id]?"Deleting…":"Delete"})}),e.jsxs(ne,{children:[e.jsxs(ie,{children:[e.jsx(le,{children:"Delete app?"}),e.jsxs(ce,{children:["This will permanently delete ",e.jsx("strong",{children:s.name})," and all its builds. This action cannot be undone."]})]}),e.jsxs(de,{children:[e.jsx(me,{className:"w-24",children:"Cancel"}),e.jsx(ue,{className:se(ae({variant:"destructive"}),"w-24"),onClick:()=>Y(s.id),children:"Delete"})]})]})]})]})]})]},s.id))})})]})]})}export{we as DefaultSettings};
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{al as E,am as L,a7 as i,ai as A,aa as M,ao as T,a4 as e,C as b,d as y,e as C,c as k,b as U,L as d,I as x,i as _,G as D,S as O,B as Y,a5 as z,a8 as h,_ as G}from"./index-D8ViYmeP.js";import{P as H}from"./pencil-BAhJ8VF-.js";const V=z({displayName:h().optional(),avatar:G(File).nullable().optional(),password:h().min(8),confirm:h()}).refine(o=>o.password===o.confirm,{message:"Passwords do not match",path:["confirm"]});function q(){const o=E(),[S]=L(),c=S.get("token")??"",[f,m]=i.useState("loading"),[P,F]=i.useState(""),[v,R]=i.useState(null),j=i.useRef(null),{register:p,handleSubmit:B,control:g,setError:u,formState:{errors:t,isSubmitting:w}}=A({resolver:M(V),mode:"onBlur",defaultValues:{displayName:"",avatar:null}}),l=T({control:g,name:"displayName"})??"";i.useEffect(()=>{if(!c){m("invalid");return}fetch(`/api/v1/invitations/verify?token=${c}`).then(a=>a.ok?a.json():Promise.reject()).then(a=>{F(a.role),m("valid")}).catch(()=>m("invalid"))},[c]);async function I(a){var r;try{const s=new FormData;if(s.append("token",c),s.append("password",a.password),(r=a.displayName)!=null&&r.trim()&&s.append("display_name",a.displayName.trim()),a.avatar&&s.append("avatar",a.avatar),!(await fetch("/api/v1/invitations/accept",{method:"POST",body:s})).ok){u("root",{message:"Failed to accept invitation"});return}o("/app-center",{replace:!0})}catch{u("root",{message:"Network error. Please try again."})}}return f==="loading"?e.jsx("div",{className:"flex min-h-svh items-center justify-center"}):f==="invalid"?e.jsx("div",{className:"bg-mesh-gradient flex min-h-svh items-center justify-center overflow-hidden p-4",children:e.jsx(b,{level:4,className:"w-full max-w-sm text-center",children:e.jsxs(y,{children:[e.jsx(C,{children:"Invitation expired"}),e.jsx(k,{children:"This invite link is invalid or has expired. Ask your admin for a new one."})]})})}):e.jsx("div",{className:"bg-mesh-gradient flex min-h-svh items-center justify-center overflow-hidden p-4",children:e.jsxs(b,{level:4,className:"w-full max-w-sm",children:[e.jsxs(y,{className:"text-center",children:[e.jsx(C,{children:"Set up your account"}),e.jsxs(k,{children:["You're joining as ",e.jsx("strong",{children:P})]})]}),e.jsx(U,{children:e.jsxs("form",{onSubmit:B(I),className:"flex flex-col gap-4",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsxs(d,{htmlFor:"display-name",children:["Nickname ",e.jsx("span",{className:"text-muted-foreground text-xs",children:"(optional)"})]}),e.jsx(x,{id:"display-name",placeholder:"Your name",...p("displayName")})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsxs(d,{children:["Avatar ",e.jsx("span",{className:"text-muted-foreground text-xs",children:"(optional, png · jpg, max 2MB)"})]}),e.jsx(_,{name:"avatar",control:g,render:({field:a})=>{var r;return e.jsxs("div",{className:"relative w-14 h-14",children:[v?e.jsx("img",{src:v,alt:"avatar",className:"w-14 h-14 rounded-full object-cover border"}):e.jsx("div",{className:"w-14 h-14 rounded-full flex items-center justify-center text-lg font-medium",style:(()=>{const s=D(l);return{backgroundColor:s.bg,color:s.fg}})(),children:((r=l==null?void 0:l[0])==null?void 0:r.toUpperCase())??"?"}),e.jsx("button",{type:"button",onClick:()=>{var s;return(s=j.current)==null?void 0:s.click()},className:"absolute bottom-0 right-0 w-6 h-6 rounded-full bg-background border border-border shadow-sm flex items-center justify-center hover:bg-accent transition-colors",children:e.jsx(H,{className:"w-3 h-3"})}),e.jsx("input",{ref:j,type:"file",accept:"image/png,image/jpeg",className:"hidden",onChange:s=>{var N;const n=(N=s.target.files)==null?void 0:N[0];if(n){if(n.size>2*1024*1024){u("avatar",{message:"Max 2MB for avatar"});return}a.onChange(n),R(URL.createObjectURL(n))}}})]})}}),t.avatar&&e.jsx("p",{className:"text-sm text-destructive",children:t.avatar.message})]}),e.jsx(O,{}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(d,{htmlFor:"password",children:"Password"}),e.jsx(x,{id:"password",type:"password",...p("password")}),t.password&&e.jsx("p",{className:"text-sm text-destructive",children:t.password.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(d,{htmlFor:"confirm",children:"Confirm password"}),e.jsx(x,{id:"confirm",type:"password",...p("confirm")}),t.confirm&&e.jsx("p",{className:"text-sm text-destructive",children:t.confirm.message})]}),t.root&&e.jsx("p",{className:"text-sm text-destructive",children:t.root.message}),e.jsx(Y,{type:"submit",disabled:w,className:"w-full",children:w?"Creating account…":"Create account"})]})})]})})}export{q as Invite};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a7 as n,ai as $,aa as H,a4 as e,B as d,a9 as a,L as k,I as S,C as O,d as z,e as V,c as W,b as M,a5 as J,a8 as A}from"./index-D8ViYmeP.js";import{B as I}from"./badge-B63ynAZJ.js";import{A as U,c as q,f as G,g as K,d as Q,e as X,b as Y}from"./alert-dialog-CPQLr1ij.js";import{D as Z,f as ee,a as se,d as ae,e as te,S as ne,i as re,j as oe,g as ie,h as B}from"./dialog-CEEdc-Oq.js";import{T as le,d as ce,e as w,c as x,a as de,b as i}from"./table-IfQacRqI.js";import{P as xe,T as he}from"./trash-2-Bfw6hch4.js";async function me(){const t=window.location.protocol==="https:"?"wss":"ws";if(["localhost","127.0.0.1","[::1]"].includes(window.location.hostname))try{const h=await fetch("/api/v1/relay/host",{credentials:"include"});if(h.ok){const{lanHost:l,port:o}=await h.json();if(l)return`${t}://${l}:${o}`}}catch{}return`${t}://${window.location.host}`}const pe=J({name:A().min(1),expiresDays:A().refine(t=>{const r=parseInt(t,10);return!isNaN(r)&&r>=1&&r<=365},{message:"Must be between 1 and 365"})});function ye(){const[t,r]=n.useState([]),[h,l]=n.useState(!1),[o,y]=n.useState(""),[c,v]=n.useState("api"),[N,b]=n.useState(""),[u,j]=n.useState(null),{register:T,handleSubmit:E,reset:_,formState:{errors:m,isSubmitting:C}}=$({resolver:H(pe),mode:"onBlur",defaultValues:{name:"",expiresDays:"30"}});function g(){fetch("/api/v1/tokens",{credentials:"include"}).then(s=>s.json()).then(r)}n.useEffect(()=>{g()},[]);async function R(s){try{const p=await fetch("/api/v1/tokens",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:s.name,expires_in_days:parseInt(s.expiresDays,10),...c==="agent"?{scope:"agent"}:{}})});if(!p.ok){const f=await p.json().catch(()=>null);a.error((f==null?void 0:f.error)??"Failed to create token");return}const P=await p.json();c==="agent"&&b(await me()),a.success("Token created"),y(P.token),g()}catch{a.error("Network error")}}function F(s){l(s),s||(y(""),v("api"),b(""),_())}async function L(s){try{return(await fetch(`/api/v1/tokens/${s}`,{method:"DELETE",credentials:"include"})).ok?(a.success("Token revoked"),g(),!0):(a.error("Failed to revoke token"),!1)}catch{return a.error("Network error"),!1}}function D(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(Z,{open:h,onOpenChange:F,children:[e.jsx(ee,{asChild:!0,children:e.jsxs(d,{size:"sm",children:[e.jsx(xe,{className:"mr-2 h-4 w-4"}),"New token"]})}),e.jsxs(se,{className:"sm:max-w-md",children:[e.jsx(ae,{children:e.jsx(te,{children:"Create token"})}),o?e.jsxs("div",{className:"flex flex-col gap-3 pt-2",children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Copy this token now — it won't be shown again."}),e.jsx("code",{className:"rounded bg-muted px-3 py-2 text-xs break-all font-mono",children:o}),c==="agent"&&N&&e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-sm text-muted-foreground",children:"Run this on the agent Mac to connect it to this relay:"}),e.jsx("code",{className:"rounded bg-muted px-3 py-2 text-xs break-all font-mono",children:`tapflow agent start --relay ${N} --token ${o}`})]}),e.jsx(d,{onClick:()=>{navigator.clipboard.writeText(o).then(()=>{a.success("Token copied to clipboard"),l(!1)}).catch(()=>a.error("Failed to copy — copy manually"))},children:"Copy & close"})]}):e.jsxs("form",{onSubmit:E(R),className:"flex flex-col gap-4 pt-2",children:[e.jsxs("div",{className:"grid gap-2",children:[e.jsx(k,{htmlFor:"token-name",children:"Name"}),e.jsx(S,{id:"token-name",placeholder:"e.g. ci-deploy",...T("name")}),m.name&&e.jsx("p",{className:"text-sm text-destructive",children:m.name.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(k,{htmlFor:"expires",children:"Expires in (days)"}),e.jsx(S,{id:"expires",type:"number",...T("expiresDays")}),m.expiresDays&&e.jsx("p",{className:"text-sm text-destructive",children:m.expiresDays.message})]}),e.jsxs("div",{className:"grid gap-2",children:[e.jsx(k,{children:"Type"}),e.jsxs(ne,{value:c,onValueChange:s=>v(s),children:[e.jsx(re,{children:e.jsx(oe,{})}),e.jsxs(ie,{children:[e.jsx(B,{value:"api",children:"API — CI uploads & API access"}),e.jsx(B,{value:"agent",children:"Agent — connect remote device agents (Admin only)"})]})]})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Scope: ",e.jsx(I,{variant:"secondary",children:c==="agent"?"agent":"view, builds:write"})]}),e.jsx(d,{type:"submit",disabled:C,children:C?"Creating…":"Create token"})]})]})]})]}),e.jsxs(O,{children:[e.jsxs(z,{children:[e.jsx(V,{children:"Active tokens"}),e.jsxs(W,{children:["Use these tokens with ",e.jsx("code",{className:"text-xs",children:"Authorization: Bearer <token>"})," for API deployments."]})]}),e.jsx(M,{className:"px-4 pt-0 pb-2",children:e.jsxs(le,{children:[e.jsx(ce,{children:e.jsxs(w,{children:[e.jsx(x,{children:"Name"}),e.jsx(x,{children:"Scope"}),e.jsx(x,{children:"Last used"}),e.jsx(x,{children:"Expires"}),e.jsx(x,{className:"w-10"})]})}),e.jsx(de,{children:t.length===0?e.jsx(w,{children:e.jsx(i,{colSpan:5,className:"h-20 text-center text-muted-foreground",children:"No tokens yet."})}):t.map(s=>e.jsxs(w,{className:"hover:bg-transparent",children:[e.jsx(i,{className:"font-medium",children:s.name}),e.jsx(i,{children:e.jsx(I,{variant:"secondary",children:s.scope})}),e.jsx(i,{className:"text-muted-foreground text-sm",children:s.last_used_at?new Date(s.last_used_at).toLocaleDateString():"Never"}),e.jsx(i,{children:s.expires_at?e.jsx("span",{className:D(s)?"text-destructive text-sm":"text-muted-foreground text-sm",children:D(s)?"Expired":new Date(s.expires_at).toLocaleDateString()}):e.jsx("span",{className:"text-muted-foreground text-sm",children:"Never"})}),e.jsx(i,{children:e.jsx(d,{variant:"destructive",size:"icon",className:"h-7 w-7","aria-label":"Revoke token",onClick:()=>j(s.id),children:e.jsx(he,{className:"h-4 w-4"})})})]},s.id))})]})})]}),e.jsx(U,{open:u!==null,onOpenChange:s=>{s||j(null)},children:e.jsxs(q,{children:[e.jsxs(G,{children:[e.jsx(K,{children:"Revoke token?"}),e.jsx(Q,{children:"Any active API calls using this token will immediately fail."})]}),e.jsxs(X,{children:[e.jsx(Y,{children:"Cancel"}),e.jsx(d,{variant:"destructive",onClick:async()=>{if(u===null)return;await L(u)&&j(null)},children:"Revoke"})]})]})})]})}export{ye as TokenSettings};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{Y as Ae,a7 as n,a4 as r,ae as B,ak as z,u as D,ag as xt,af as Me,aj as Ne,w as vt,V as St,A as wt,N as _,P as yt,t as Ct,ad as be,a6 as ke,Z as Le,O as Nt,Q as bt,a3 as It,ah as Tt,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 Ve,j as Lt,X as Vt,o as Be,m as He,l as Fe}from"./index-D8ViYmeP.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"}]],Ue=Ae("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=Ae("chevron-up",Ht);function Oe(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]=Nt(te),[oe]=bt(te,[$t,Le]),me=Le(),[zt,Y]=oe(te),[Gt,Yt]=oe(te),qt="SelectProvider";function We(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:P,form:I,internal_do_not_use_render:d}=t,g=me(o),[v,m]=n.useState(null),[u,T]=n.useState(null),[R,X]=n.useState(!1),M=xt(p),[A,ne]=Me({prop:s,defaultProp:a??!1,onChange:f,caller:te}),[re,H]=Me({prop:c,defaultProp:i,onChange:l,caller:te}),F=n.useRef(null),Z=v?!!I||!!v.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:P,trigger:v,onTriggerChange:m,valueNode:u,onValueNodeChange:T,valueNodeHasChildren:R,onValueNodeHasChildrenChange:X,contentId:W,value:re,onValueChange:H,open:A,onOpenChange:ne,dir:M,triggerPointerDownPosRef:F,disabled:C,name:x,autoComplete:w,form:I,nativeOptions:U,nativeSelectKey:K,isFormControl:Z};return r.jsx(vt,{...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})})})})}We.displayName=qt;var Ke=t=>{const{__scopeSelect:o,children:e,...s}=t;return r.jsx(We,{__scopeSelect:o,...s,internal_do_not_use_render:({isFormControl:a})=>r.jsxs(r.Fragment,{children:[e,a?r.jsx(ut,{__scopeSelect:o}):null]})})};Ke.displayName=te;var $e="SelectTrigger",Ie=n.forwardRef((t,o)=>{const{__scopeSelect:e,disabled:s=!1,...a}=t,f=me(e),c=Y($e,e),i=c.disabled||s,l=B(o,c.onTriggerChange),p=fe(e),x=n.useRef("touch"),[w,C,P]=pt(d=>{const g=p().filter(u=>!u.disabled),v=g.find(u=>u.value===c.value),m=ft(g,d,v);m!==void 0&&c.onValueChange(m.value)}),I=d=>{i||(c.onOpenChange(!0),P()),d&&(c.triggerPointerDownPosRef.current={x:Math.round(d.pageX),y:Math.round(d.pageY)})};return r.jsx(wt,{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:_(a.onClick,d=>{d.currentTarget.focus(),x.current!=="mouse"&&I(d)}),onPointerDown:_(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"&&(I(d),d.preventDefault())}),onKeyDown:_(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)&&(I(),d.preventDefault())})})})});Ie.displayName=$e;var ze="SelectValue",Ge=n.forwardRef((t,o)=>{const{__scopeSelect:e,className:s,style:a,children:f,placeholder:c="",...i}=t,l=Y(ze,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")})});Ge.displayName=ze;var Xt="SelectIcon",Ye=n.forwardRef((t,o)=>{const{__scopeSelect:e,children:s,...a}=t;return r.jsx(D.span,{"aria-hidden":!0,...a,ref:o,children:s||"▼"})});Ye.displayName=Xt;var qe="SelectPortal",[Zt,Qt]=oe(qe,{forceMount:void 0}),Xe=t=>{const{__scopeSelect:o,forceMount:e,...s}=t;return r.jsx(Zt,{scope:t.__scopeSelect,forceMount:e,children:r.jsx(yt,{asChild:!0,...s})})};Xe.displayName=qe;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(Ct,{present:s||f.open,children:({present:l})=>l?r.jsx(Je,{...a,ref:o}):r.jsx(Ze,{...a,fragment:c})})});Te.displayName=G;var Ze=n.forwardRef((t,o)=>{const{__scopeSelect:e,children:s,fragment:a}=t;return a?ke.createPortal(r.jsx(Qe,{scope:e,children:r.jsx(pe.Slot,{scope:e,children:r.jsx("div",{ref:o,children:s})})}),a):null});Ze.displayName="SelectContentFragment";var O=10,[Qe,q]=oe(G),Jt="SelectContentImpl",eo=Et("SelectContent.RemoveScroll"),Je=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:P,sticky:I,hideWhenDetached:d,avoidCollisions:g,...v}=t,m=Y(G,e),[u,T]=n.useState(null),[R,X]=n.useState(null),M=B(o,T),[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(u)return It(u)},[u]),Tt();const W=n.useCallback(h=>{const[b,...j]=F().map(y=>y.ref.current),[N]=j.slice(-1),S=document.activeElement;for(const y of h)if(y===S||(y==null||y.scrollIntoView({block:"nearest"}),y===b&&R&&(R.scrollTop=0),y===N&&R&&(R.scrollTop=R.scrollHeight),y==null||y.focus(),document.activeElement!==S))return},[F,R]),K=n.useCallback(()=>W([A,u]),[W,A,u]);n.useEffect(()=>{Z&&K()},[Z,K]);const{onOpenChange:$,triggerPointerDownPosRef:L}=m;n.useEffect(()=>{if(u){let h={x:0,y:0};const b=N=>{var S,y;h={x:Math.abs(Math.round(N.pageX)-(((S=L.current)==null?void 0:S.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(u)||$(!1),document.removeEventListener("pointermove",b),L.current=null};return L.current!==null&&(document.addEventListener("pointermove",b),document.addEventListener("pointerup",j,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",b),document.removeEventListener("pointerup",j,{capture:!0})}}},[u,$,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]=pt(h=>{const b=F().filter(S=>!S.disabled),j=b.find(S=>S.ref.current===document.activeElement),N=ft(b,h,j);N&&setTimeout(()=>{var S;return(S=N.ref.current)==null?void 0:S.focus()})}),Q=n.useCallback((h,b,j)=>{const N=!k.current&&!j;(m.value!==void 0&&m.value===b||N)&&(ne(h),N&&(k.current=!0))},[m.value]),ae=n.useCallback(()=>u==null?void 0:u.focus(),[u]),le=n.useCallback((h,b,j)=>{const N=!k.current&&!j;(m.value!==void 0&&m.value===b||N)&&H(h)},[m.value]),de=s==="popper"?Se:et,ce=de===Se?{side:i,sideOffset:l,align:p,alignOffset:x,arrowPadding:w,collisionBoundary:C,collisionPadding:P,sticky:I,hideWhenDetached:d,avoidCollisions:g}:{};return r.jsx(Qe,{scope:e,content:u,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:m.open,onMountAutoFocus:h=>{h.preventDefault()},onUnmountAutoFocus:_(a,h=>{var b;(b=m.trigger)==null||b.focus({preventScroll:!0}),h.preventDefault()}),children:r.jsx(_t,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:f,onPointerDownOutside:c,onFocusOutside:h=>h.preventDefault(),onDismiss:()=>m.onOpenChange(!1),children:r.jsx(de,{role:"listbox",id:m.contentId,"data-state":m.open?"open":"closed",dir:m.dir,onContextMenu:h=>h.preventDefault(),...v,...ce,onPlaced:()=>U(!0),ref:M,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:_(v.onKeyDown,h=>{const b=h.ctrlKey||h.altKey||h.metaKey;if(h.key==="Tab"&&h.preventDefault(),!b&&h.key.length===1&&V(h.key),["ArrowUp","ArrowDown","Home","End"].includes(h.key)){let N=F().filter(S=>!S.disabled).map(S=>S.ref.current);if(["ArrowUp","End"].includes(h.key)&&(N=N.slice().reverse()),["ArrowUp","ArrowDown"].includes(h.key)){const S=h.target,y=N.indexOf(S);N=N.slice(y+1)}setTimeout(()=>W(N)),h.preventDefault()}})})})})})})});Je.displayName=Jt;var to="SelectItemAlignedPosition",et=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),P=n.useRef(!1),I=n.useRef(!0),{viewport:d,selectedItem:g,selectedItemText:v,focusSelectedItem:m}=c,u=n.useCallback(()=>{if(f.trigger&&f.valueNode&&i&&p&&d&&g&&v){const M=f.trigger.getBoundingClientRect(),A=p.getBoundingClientRect(),ne=f.valueNode.getBoundingClientRect(),re=v.getBoundingClientRect();if(f.dir!=="rtl"){const S=re.left-A.left,y=ne.left-S,J=M.left-y,ee=M.width+J,ge=Math.max(ee,A.width),xe=window.innerWidth-O,ve=Oe(y,[O,Math.max(O,xe-ge)]);i.style.minWidth=ee+"px",i.style.left=ve+"px"}else{const S=A.right-re.right,y=window.innerWidth-ne.right-S,J=window.innerWidth-M.right-y,ee=M.width+J,ge=Math.max(ee,A.width),xe=window.innerWidth-O,ve=Oe(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=M.top+M.height/2-O,de=F-le,ce=g.offsetHeight/2,h=g.offsetTop+ce,b=k+W+h,j=L-b;if(b<=le){const S=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+(S?ae:0)+y+K),ee=b+J;i.style.height=ee+"px"}else{const S=H.length>0&&g===H[0].ref.current;i.style.top="0px";const J=Math.max(le,k+d.offsetTop+(S?Q:0)+ce)+j;i.style.height=J+"px",d.scrollTop=b-le+d.offsetTop}i.style.margin=`${O}px 0`,i.style.minHeight=se+"px",i.style.maxHeight=F+"px",s==null||s(),requestAnimationFrame(()=>P.current=!0)}},[C,f.trigger,f.valueNode,i,p,d,g,v,f.dir,s]);z(()=>u(),[u]);const[T,R]=n.useState();z(()=>{p&&R(window.getComputedStyle(p).zIndex)},[p]);const X=n.useCallback(M=>{M&&I.current===!0&&(u(),m==null||m(),I.current=!1)},[u,m]);return r.jsx(no,{scope:e,contentWrapper:i,shouldExpandOnScrollRef:P,onScrollButtonChange:X,children:r.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:T},children:r.jsx(D.div,{...a,ref:w,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});et.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,Pe]=oe(G,{}),we="SelectViewport",tt=n.forwardRef((t,o)=>{const{__scopeSelect:e,nonce:s,...a}=t,f=q(we,e),c=Pe(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:_(a.onScroll,p=>{const x=p.currentTarget,{contentWrapper:w,shouldExpandOnScrollRef:C}=c;if(C!=null&&C.current&&w){const P=Math.abs(l.current-x.scrollTop);if(P>0){const I=window.innerHeight-O*2,d=parseFloat(w.style.minHeight),g=parseFloat(w.style.height),v=Math.max(d,g);if(v<I){const m=v+P,u=Math.min(I,m),T=m-u;w.style.height=u+"px",w.style.bottom==="0px"&&(x.scrollTop=T>0?T:0,w.style.justifyContent="flex-end")}}}l.current=x.scrollTop})})})]})});tt.displayName=we;var ot="SelectGroup",[ro,so]=oe(ot),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=ot;var nt="SelectLabel",Re=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t,a=so(nt,e);return r.jsx(D.div,{id:a.id,...s,ref:o})});Re.displayName=nt;var ue="SelectItem",[lo,rt]=oe(ue),_e=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,P]=n.useState(!1),I=be(u=>{var T;return(T=l.itemRefCallback)==null?void 0:T.call(l,u,s,a)}),d=B(o,I),g=Ne(),v=n.useRef("touch"),m=()=>{a||(i.onValueChange(s),i.onOpenChange(!1))};return r.jsx(lo,{scope:e,value:s,disabled:a,textId:g,isSelected:p,onItemTextChange:n.useCallback(u=>{w(T=>T||((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":g,"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:d,onFocus:_(c.onFocus,()=>P(!0)),onBlur:_(c.onBlur,()=>P(!1)),onClick:_(c.onClick,()=>{v.current!=="mouse"&&m()}),onPointerUp:_(c.onPointerUp,()=>{v.current==="mouse"&&m()}),onPointerDown:_(c.onPointerDown,u=>{v.current=u.pointerType}),onPointerMove:_(c.onPointerMove,u=>{var T;v.current=u.pointerType,a?(T=l.onItemLeave)==null||T.call(l):v.current==="mouse"&&u.currentTarget.focus({preventScroll:!0})}),onPointerLeave:_(c.onPointerLeave,u=>{var T;u.currentTarget===document.activeElement&&((T=l.onItemLeave)==null||T.call(l))}),onKeyDown:_(c.onKeyDown,u=>{var R;((R=l.searchRef)==null?void 0:R.current)!==""&&u.key===" "||(Kt.includes(u.key)&&m(),u.key===" "&&u.preventDefault())})})})})});_e.displayName=ue;var ie="SelectItemText",st=n.forwardRef((t,o)=>{const{__scopeSelect:e,className:s,style:a,...f}=t,c=Y(ie,e),i=q(ie,e),l=rt(ie,e),p=Yt(ie,e),[x,w]=n.useState(null),C=be(m=>{var u;return(u=i.itemTextRefCallback)==null?void 0:u.call(i,m,l.value,l.disabled)}),P=B(o,w,l.onItemTextChange,C),I=x==null?void 0:x.textContent,d=n.useMemo(()=>r.jsx("option",{value:l.value,disabled:l.disabled,children:I},l.value),[l.disabled,l.value,I]),{onNativeOptionAdd:g,onNativeOptionRemove:v}=p;return z(()=>(g(d),()=>v(d)),[g,v,d]),r.jsxs(r.Fragment,{children:[r.jsx(D.span,{id:l.textId,...f,ref:P}),l.isSelected&&c.valueNode&&!c.valueNodeHasChildren&&!he(c.value)?ke.createPortal(f.children,c.valueNode):null]})});st.displayName=ie;var at="SelectItemIndicator",lt=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t;return rt(at,e).isSelected?r.jsx(D.span,{"aria-hidden":!0,...s,ref:o}):null});lt.displayName=at;var ye="SelectScrollUpButton",Ee=n.forwardRef((t,o)=>{const e=q(ye,t.__scopeSelect),s=Pe(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(ct,{...t,ref:c,onAutoScroll:()=>{const{viewport:i,selectedItem:l}=e;i&&l&&(i.scrollTop=i.scrollTop-l.offsetHeight)}}):null});Ee.displayName=ye;var Ce="SelectScrollDownButton",je=n.forwardRef((t,o)=>{const e=q(Ce,t.__scopeSelect),s=Pe(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(ct,{...t,ref:c,onAutoScroll:()=>{const{viewport:i,selectedItem:l}=e;i&&l&&(i.scrollTop=i.scrollTop+l.offsetHeight)}}):null});je.displayName=Ce;var ct=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:_(a.onPointerDown,()=>{c.current===null&&(c.current=window.setInterval(s,50))}),onPointerMove:_(a.onPointerMove,()=>{var p;(p=f.onItemLeave)==null||p.call(f),c.current===null&&(c.current=window.setInterval(s,50))}),onPointerLeave:_(a.onPointerLeave,()=>{l()})})}),co="SelectSeparator",De=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t;return r.jsx(D.div,{"aria-hidden":!0,...s,ref:o})});De.displayName=co;var it="SelectArrow",io=n.forwardRef((t,o)=>{const{__scopeSelect:e,...s}=t,a=me(e);return q(it,e).position==="popper"?r.jsx(Dt,{...a,...s,ref:o}):null});io.displayName=it;var dt="SelectBubbleInput",ut=n.forwardRef(({__scopeSelect:t,...o},e)=>{const s=Y(dt,t),{value:a,onValueChange:f,required:c,disabled:i,name:l,autoComplete:p,form:x}=s,{nativeOptions:w,nativeSelectKey:C}=s,P=n.useRef(null),I=B(e,P),d=a??"",g=Ut(d),v=Array.from(w).some(m=>(m.props.value??"")==="");return n.useEffect(()=>{const m=P.current;if(!m)return;const u=window.HTMLSelectElement.prototype,R=Object.getOwnPropertyDescriptor(u,"value").set;if(g!==d&&R){const X=new Event("change",{bubbles:!0});R.call(m,d),m.dispatchEvent(X)}},[g,d]),r.jsxs(D.select,{"aria-hidden":!0,required:c,tabIndex:-1,name:l,autoComplete:p,disabled:i,form:x,onChange:m=>f(m.target.value),...o,style:{...St,...o.style},ref:I,defaultValue:d,children:[he(a)&&!v?r.jsx("option",{value:""}):null,Array.from(w)]},C)});ut.displayName=dt;function uo(t){return typeof t=="function"}function he(t){return t===""||t===void 0}function pt(t){const o=be(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 ft(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 Io=Ke,To=Ge,fo=n.forwardRef(({className:t,children:o,...e},s)=>r.jsxs(Ie,{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(Ye,{asChild:!0,children:r.jsx(Ue,{className:"h-4 w-4 opacity-50"})})]}));fo.displayName=Ie.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(Ft,{className:"h-4 w-4"})}));mt.displayName=Ee.displayName;const ht=n.forwardRef(({className:t,...o},e)=>r.jsx(je,{ref:e,className:E("flex cursor-default items-center justify-center py-1",t),...o,children:r.jsx(Ue,{className:"h-4 w-4"})}));ht.displayName=je.displayName;const mo=n.forwardRef(({className:t,children:o,position:e="popper",...s},a)=>r.jsx(Xe,{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(mt,{}),r.jsx(tt,{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(ht,{})]})}));mo.displayName=Te.displayName;const ho=n.forwardRef(({className:t,...o},e)=>r.jsx(Re,{ref:e,className:E("py-1.5 pl-8 pr-2 text-sm font-semibold",t),...o}));ho.displayName=Re.displayName;const go=n.forwardRef(({className:t,children:o,...e},s)=>r.jsxs(_e,{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(lt,{children:r.jsx(Mt,{className:"h-4 w-4"})})}),r.jsx(st,{children:o})]}));go.displayName=_e.displayName;const xo=n.forwardRef(({className:t,...o},e)=>r.jsx(De,{ref:e,className:E("-mx-1 my-1 h-px bg-muted",t),...o}));xo.displayName=De.displayName;const Po=Ot,Ro=At,vo=kt,gt=n.forwardRef(({className:t,...o},e)=>r.jsx(He,{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}));gt.displayName=He.displayName;const So=n.forwardRef(({className:t,children:o,...e},s)=>r.jsxs(vo,{children:[r.jsx(gt,{}),r.jsxs(Ve,{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=Ve.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(Be,{ref:e,className:E("text-lg font-semibold leading-none tracking-tight",t),...o}));Co.displayName=Be.displayName;const No=n.forwardRef(({className:t,...o},e)=>r.jsx(Fe,{ref:e,className:E("text-sm text-muted-foreground",t),...o}));No.displayName=Fe.displayName;export{Ue as C,Po as D,Io 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,To as j,Oe as k,Ut as u};
|
|
Binary file
|