@tapflowio/relay 0.13.0 → 0.15.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.
Files changed (83) hide show
  1. package/dist/RelayServer.d.ts +6 -0
  2. package/dist/RelayServer.d.ts.map +1 -1
  3. package/dist/RelayServer.js +98 -2
  4. package/dist/RelayServer.js.map +1 -1
  5. package/dist/api/builds.d.ts +35 -0
  6. package/dist/api/builds.d.ts.map +1 -1
  7. package/dist/api/builds.js +62 -30
  8. package/dist/api/builds.js.map +1 -1
  9. package/dist/lib/config.d.ts.map +1 -1
  10. package/dist/lib/config.js +18 -4
  11. package/dist/lib/config.js.map +1 -1
  12. package/dist/lib/dataDir.d.ts +8 -0
  13. package/dist/lib/dataDir.d.ts.map +1 -0
  14. package/dist/lib/dataDir.js +18 -0
  15. package/dist/lib/dataDir.js.map +1 -0
  16. package/dist/types.d.ts +4 -3
  17. package/dist/types.d.ts.map +1 -1
  18. package/package.json +4 -4
  19. package/public/assets/{AppCenter-DbFf7BKA.js → AppCenter-DHKav0MA.js} +2 -2
  20. package/public/assets/AppCenter-DHKav0MA.js.br +0 -0
  21. package/public/assets/Default-FOVo8D6L.js +1 -0
  22. package/public/assets/Default-FOVo8D6L.js.br +0 -0
  23. package/public/assets/Invite-DdjwJ4DV.js +1 -0
  24. package/public/assets/Invite-DdjwJ4DV.js.br +0 -0
  25. package/public/assets/{MacResources-D-j1pG9s.js → MacResources-Dl1w6E1h.js} +2 -2
  26. package/public/assets/MacResources-Dl1w6E1h.js.br +0 -0
  27. package/public/assets/{NotFound-BwAREUV8.js → NotFound-BMUavI-G.js} +1 -1
  28. package/public/assets/NotFound-BMUavI-G.js.br +0 -0
  29. package/public/assets/{QASession-Du5LOUTZ.js → QASession-BzfWUo9F.js} +6 -6
  30. package/public/assets/QASession-BzfWUo9F.js.br +0 -0
  31. package/public/assets/{ResetPassword-C6cya_7-.js → ResetPassword-Yn2hnB_M.js} +1 -1
  32. package/public/assets/ResetPassword-Yn2hnB_M.js.br +0 -0
  33. package/public/assets/{Setup-DHS2ZvMu.js → Setup-BaGV0xx6.js} +1 -1
  34. package/public/assets/Setup-BaGV0xx6.js.br +0 -0
  35. package/public/assets/{Team-DkIXb37o.js → Team-BOwoos5_.js} +2 -2
  36. package/public/assets/Team-BOwoos5_.js.br +0 -0
  37. package/public/assets/Tokens-Bu1FtE_n.js +1 -0
  38. package/public/assets/Tokens-Bu1FtE_n.js.br +0 -0
  39. package/public/assets/{alert-dialog-CPQLr1ij.js → alert-dialog-dsCcQ1NM.js} +1 -1
  40. package/public/assets/alert-dialog-dsCcQ1NM.js.br +0 -0
  41. package/public/assets/{badge-B63ynAZJ.js → badge-CNtq_oBK.js} +1 -1
  42. package/public/assets/badge-CNtq_oBK.js.br +0 -0
  43. package/public/assets/{build-format-CcGvUI_j.js → build-format-D6egYX-U.js} +1 -1
  44. package/public/assets/build-format-D6egYX-U.js.br +0 -0
  45. package/public/assets/dialog-Blqnc3tq.js +11 -0
  46. package/public/assets/dialog-Blqnc3tq.js.br +0 -0
  47. package/public/assets/index-IvDXNTVd.js +274 -0
  48. package/public/assets/index-IvDXNTVd.js.br +0 -0
  49. package/public/assets/{pencil-BAhJ8VF-.js → pencil-CzKUUBmE.js} +1 -1
  50. package/public/assets/pencil-CzKUUBmE.js.br +0 -0
  51. package/public/assets/{table-IfQacRqI.js → table-CU0HMyju.js} +1 -1
  52. package/public/assets/table-CU0HMyju.js.br +0 -0
  53. package/public/assets/tabs-C9nZOMC5.js +1 -0
  54. package/public/assets/tabs-C9nZOMC5.js.br +0 -0
  55. package/public/assets/{trash-2-Bfw6hch4.js → trash-2-Bw_edyHa.js} +1 -1
  56. package/public/assets/trash-2-Bw_edyHa.js.br +0 -0
  57. package/public/index.html +1 -1
  58. package/public/index.html.br +0 -0
  59. package/public/assets/AppCenter-DbFf7BKA.js.br +0 -0
  60. package/public/assets/Default-BXiTKHz2.js +0 -1
  61. package/public/assets/Default-BXiTKHz2.js.br +0 -0
  62. package/public/assets/Invite-Dw4wdx9j.js +0 -1
  63. package/public/assets/Invite-Dw4wdx9j.js.br +0 -0
  64. package/public/assets/MacResources-D-j1pG9s.js.br +0 -0
  65. package/public/assets/NotFound-BwAREUV8.js.br +0 -2
  66. package/public/assets/QASession-Du5LOUTZ.js.br +0 -0
  67. package/public/assets/ResetPassword-C6cya_7-.js.br +0 -0
  68. package/public/assets/Setup-DHS2ZvMu.js.br +0 -0
  69. package/public/assets/Team-DkIXb37o.js.br +0 -0
  70. package/public/assets/Tokens-DxZUmUPI.js +0 -1
  71. package/public/assets/Tokens-DxZUmUPI.js.br +0 -0
  72. package/public/assets/alert-dialog-CPQLr1ij.js.br +0 -0
  73. package/public/assets/badge-B63ynAZJ.js.br +0 -0
  74. package/public/assets/build-format-CcGvUI_j.js.br +0 -0
  75. package/public/assets/dialog-CEEdc-Oq.js +0 -11
  76. package/public/assets/dialog-CEEdc-Oq.js.br +0 -0
  77. package/public/assets/index-D8ViYmeP.js +0 -274
  78. package/public/assets/index-D8ViYmeP.js.br +0 -0
  79. package/public/assets/pencil-BAhJ8VF-.js.br +0 -0
  80. package/public/assets/table-IfQacRqI.js.br +0 -0
  81. package/public/assets/tabs-DKQ2XF1o.js +0 -1
  82. package/public/assets/tabs-DKQ2XF1o.js.br +0 -0
  83. package/public/assets/trash-2-Bfw6hch4.js.br +0 -0
@@ -1,4 +1,4 @@
1
- import{Y as a}from"./index-D8ViYmeP.js";/**
1
+ import{Y as a}from"./index-IvDXNTVd.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{a7 as o,a4 as t,K as l}from"./index-D8ViYmeP.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};
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};
@@ -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};
@@ -1,4 +1,4 @@
1
- import{Y as a}from"./index-D8ViYmeP.js";/**
1
+ import{Y as a}from"./index-IvDXNTVd.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
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-D8ViYmeP.js"></script>
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>
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};
@@ -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
@@ -1,2 +0,0 @@
1
- +�dkN?���J���n����/��M}0~�ֲ9�����)��Ȧn�(���S+� ��_��+Ɖ٣���?x�]�Gl_��bR��H�pb<w9{갑��+�z��p"�a����Ty�> ��W�3\<�� W���H���k
2
- /���2��.9��e���v�ڹ�dbN줅Mk�{�FY�
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
@@ -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