2 lines
31 KiB
JavaScript
2 lines
31 KiB
JavaScript
import"../chunks/DsnmJJEf.js";import{o as mt}from"../chunks/DukJHxi2.js";import{p as rt,u as ut,g as e,j as n,d as r,r as t,a as v,b as at,i as g,s,f as pe,t as N,c,n as $e,l as Ze,e as lt,m as et,h as B,v as Et,k as pt,o as gt,$ as At}from"../chunks/krC2xWPP.js";import{d as st,s as u,a as je,e as xt}from"../chunks/CddAxf8c.js";import{p as bt,i as I}from"../chunks/DjsWWzyL.js";import{h as Tt,s as nt}from"../chunks/j_DJpx8B.js";import{i,c as Be,a as It}from"../chunks/Cu5ilWky.js";import{p as _t}from"../chunks/euuZp6ft.js";import{g as it}from"../chunks/BVTiZ3e2.js";import{b as ot}from"../chunks/BSopV7IU.js";import{p as Nt,a as ct,c as Dt,s as ht,v as yt,h as St,B as ft}from"../chunks/D7PIEGLR.js";import{a as Rt,e as Ot,b as Ft,f as Lt,h as Mt,i as Ct,j as wt,k as Xt,l as kt,u as Ut,d as Pt}from"../chunks/SVx5UhLg.js";import{h as Kt}from"../chunks/Lyt-zgeV.js";import{P as Yt}from"../chunks/DHzx-VDt.js";import{h as zt}from"../chunks/DSIsCMt7.js";import{B as xe,r as qe,t as O,s as Qe,e as Wt,c as Vt}from"../chunks/Lvd_r9sp.js";import{b as tt}from"../chunks/ciapVzar.js";import{S as Bt}from"../chunks/I1BkiK6s.js";import{L as Re}from"../chunks/C_E2vM9U.js";import{S as $t}from"../chunks/Efbhffrv.js";import{S as Gt}from"../chunks/BeCwQYrA.js";import{C as dt}from"../chunks/CqW2kplp.js";import{K as Ht}from"../chunks/B51cP8nR.js";import{T as vt}from"../chunks/CSNyvbvN.js";import{C as jt}from"../chunks/DEuEFefA.js";import{C as Qt}from"../chunks/Cv606Ht4.js";import{T as Jt}from"../chunks/zdwqcrP5.js";import{b as qt}from"../chunks/CpuCZOqP.js";import{r as Zt}from"../chunks/CY9LEyBT.js";import{U as er}from"../chunks/hiAQl6ey.js";import{c as tr,U as rr}from"../chunks/Cp407y3V.js";import{S as ar}from"../chunks/K87jKp17.js";import{p as He}from"../chunks/BzvfRedh.js";import{c as sr}from"../chunks/CU9nfEd1.js";import{D as nr}from"../chunks/nlum2O0L.js";import{c as ir}from"../chunks/CuDfWLaU.js";import{A as or}from"../chunks/CsG_FdPZ.js";import{U as lr,C as dr}from"../chunks/mRQytvOt.js";import{S as ur}from"../chunks/CV_JZMCk.js";import{U as vr}from"../chunks/X8LnsEA_.js";var _r=c("<!> ",1),cr=c('<div class="flex items-center gap-3"><!> <div class="flex-1"><p class="text-sm font-medium text-foreground"> </p> <p class="text-xs text-muted-foreground"> </p></div> <!></div>'),fr=c('<div class="flex flex-col items-center gap-4 sm:flex-row sm:items-start"><div class="shrink-0 overflow-hidden rounded-lg border border-border bg-white p-2"><img class="h-40 w-40"/></div> <div class="min-w-0 flex-1"><span class="text-xs font-medium text-muted-foreground"> </span> <code class="mt-1 block rounded bg-muted px-3 py-2 font-mono text-sm font-semibold tracking-widest text-foreground"> </code></div></div>'),mr=c('<div class="rounded-md border border-dashed border-border bg-background px-3 py-3 text-xs text-muted-foreground"> <button type="button" class="ms-1 font-medium text-foreground underline-offset-2 hover:underline"> </button></div>'),Er=c("<!> ",1),pr=c('<div class="space-y-4"><div class="flex items-start gap-3"><!> <div class="flex-1"><p class="text-sm font-medium text-foreground"> </p> <p class="text-xs text-muted-foreground"> </p></div></div> <!> <div class="space-y-1.5"><label for="enroll-code" class="text-xs font-medium text-foreground"> </label> <div class="flex gap-2"><input id="enroll-code" type="text" inputmode="numeric" pattern="[0-9]*" maxlength="6" placeholder="000000" class="flex h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-center font-mono text-sm tracking-[0.3em] shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"/> <!></div></div></div>'),gr=c("<!> ",1),Ar=c('<div class="rounded-md border border-destructive/30 bg-destructive/5 px-3 py-3"><p class="text-xs text-foreground"></p> <div class="mt-2 flex gap-2"><!> <!></div></div>'),xr=c("<!> ",1),br=c('<div class="space-y-1.5 rounded-md border border-border bg-background px-3 py-3"><label for="disable-code" class="text-xs font-medium text-foreground"> </label> <div class="flex gap-2"><input id="disable-code" type="text" inputmode="numeric" pattern="[0-9]*" maxlength="6" placeholder="000000" class="flex h-9 flex-1 rounded-md border border-input bg-transparent px-3 py-1 text-center font-mono text-sm tracking-[0.3em] shadow-sm focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"/> <!> <!></div></div>'),Tr=c('<div class="space-y-3"><div class="flex items-center gap-3"><!> <div class="flex-1"><p class="text-sm font-medium text-foreground"> </p> <p class="text-xs text-muted-foreground"> </p></div> <!></div> <!></div>'),Ir=c('<div class="rounded-lg border border-border bg-muted/30 p-4"><!></div>');function Nr(ze,E){rt(E,!0);let fe=bt(E,"isAdminActor",3,!1),$=g("idle"),G=g(null),H=g(""),se=g(""),A=g(!1),me=g(!1);ut(()=>{const x=E.twofaEnabled?"enabled":E.hasSecret?"pending":"idle";x===e($)||e(A)||e($)==="pending"&&x==="idle"&&e(G)||(n($,x,!0),x!=="pending"&&n(G,null))});async function y(){n(A,!0);try{n(G,await Rt(E.username),!0),n($,"pending"),n(H,""),O.success(i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.SCAN_THE_QR_CODE_WITH_YOUR"))}catch{O.error(i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.FAILED_TO_GENERATE_2FA_SECRET"))}finally{n(A,!1)}}async function Ee(){if(!/^\d{6}$/.test(e(H).trim())){O.error(i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.ENTER_THE_6_DIGIT_CODE_FROM_YOUR"));return}n(A,!0);try{await Ot(E.username,e(H).trim()),n($,"enabled"),n(G,null),n(H,""),O.success(i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.2FA_ENABLED")),E.onstatechange?.(!0)}catch(x){const D=x&&typeof x=="object"&&"message"in x?String(x.message):"Invalid code";O.error(D)}finally{n(A,!1)}}async function p(x=!1){if(!x&&!/^\d{6}$/.test(e(se).trim())){O.error(i.t("ADMIN_NEXT.TOASTS.TOTP_CODE_REQUIRED"));return}n(A,!0);try{await Ft(E.username,x?void 0:e(se).trim()),n($,"idle"),n(se,""),n(me,!1),O.success(i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.2FA_DISABLED")),E.onstatechange?.(!1)}catch(D){const b=D&&typeof D=="object"&&"message"in D?String(D.message):"Failed to disable 2FA";O.error(b)}finally{n(A,!1)}}var ee=Ir(),De=r(ee);{var Ce=x=>{var D=cr(),b=r(D);Bt(b,{size:20,class:"text-muted-foreground"});var F=s(b,2),ae=r(F),z=r(ae,!0);t(ae);var le=s(ae,2),j=r(le,!0);t(le),t(F);var de=s(F,2);xe(de,{size:"sm",onclick:y,get disabled(){return e(A)},children:(ne,W)=>{var Te=_r(),ue=pe(Te);{var l=S=>{Re(S,{size:13,class:"animate-spin"})};I(ue,S=>{e(A)&&S(l)})}var f=s(ue);N(S=>u(f,` ${S??""}`),[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.ENABLE_2FA")]),v(ne,Te)},$$slots:{default:!0}}),t(D),N((ne,W)=>{u(z,ne),u(j,W)},[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.TWO_FACTOR_AUTHENTICATION_IS_OFF"),()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.ADD_AN_EXTRA_LAYER_OF_SECURITY_BY")]),v(x,D)},ge=x=>{var D=pr(),b=r(D),F=r(b);$t(F,{size:20,class:"mt-0.5 text-amber-500"});var ae=s(F,2),z=r(ae),le=r(z,!0);t(z);var j=s(z,2),de=r(j,!0);t(j),t(ae),t(b);var ne=s(b,2);{var W=h=>{var T=fr(),L=r(T),Q=r(L);t(L);var te=s(L,2),Z=r(te),P=r(Z,!0);t(Z);var V=s(Z,2),J=r(V,!0);t(V),t(te),t(T),N((_,m)=>{Qe(Q,"src",e(G).qr_code),Qe(Q,"alt",_),u(P,m),u(J,e(G).secret)},[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.2FA_QR_CODE"),()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.SECRET_FOR_MANUAL_ENTRY")]),v(h,T)},Te=h=>{var T=mr(),L=r(T),Q=s(L),te=r(Q,!0);t(Q),t(T),N((Z,P)=>{u(L,`${Z??""} `),Q.disabled=e(A),u(te,P)},[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.A_SECRET_IS_ALREADY_GENERATED_BUT_NOT"),()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.REGENERATE_AND_SHOW_QR")]),je("click",Q,y),v(h,T)};I(ne,h=>{e(G)?h(W):h(Te,-1)})}var ue=s(ne,2),l=r(ue),f=r(l,!0);t(l);var S=s(l,2),U=r(S);qe(U);var ve=s(U,2);xe(ve,{size:"sm",onclick:Ee,get disabled(){return e(A)},children:(h,T)=>{var L=Er(),Q=pe(L);{var te=P=>{Re(P,{size:13,class:"animate-spin"})};I(Q,P=>{e(A)&&P(te)})}var Z=s(Q);N(P=>u(Z,` ${P??""}`),[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.VERIFY_ENABLE")]),v(h,L)},$$slots:{default:!0}}),t(S),t(ue),t(D),N((h,T,L)=>{u(le,h),u(de,T),u(f,L),U.disabled=e(A)},[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.FINISH_ENABLING_2FA"),()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.SCAN_THE_QR_CODE_WITH_YOUR_2"),()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.VERIFICATION_CODE")]),tt(U,()=>e(H),h=>n(H,h)),v(x,D)},be=x=>{var D=Tr(),b=r(D),F=r(b);Gt(F,{size:20,class:"text-green-500"});var ae=s(F,2),z=r(ae),le=r(z,!0);t(z);var j=s(z,2),de=r(j,!0);t(j),t(ae);var ne=s(ae,2);{var W=l=>{xe(l,{variant:"outline",size:"sm",onclick:()=>n(me,!0),get disabled(){return e(A)},children:(f,S)=>{$e();var U=Ze();N(ve=>u(U,ve),[()=>i.t("ADMIN_NEXT.DISABLE")]),v(f,U)},$$slots:{default:!0}})};I(ne,l=>{e(me)||l(W)})}t(b);var Te=s(b,2);{var ue=l=>{var f=lt(),S=pe(f);{var U=h=>{var T=Ar(),L=r(T);zt(L,()=>i.tHtml("ADMIN_NEXT.TWO_FACTOR_FIELD.FORCE_DISABLE_PROMPT",{username:E.username}),!0),t(L);var Q=s(L,2),te=r(Q);xe(te,{variant:"destructive",size:"sm",onclick:()=>p(!0),get disabled(){return e(A)},children:(P,V)=>{var J=gr(),_=pe(J);{var m=M=>{Re(M,{size:13,class:"animate-spin"})};I(_,M=>{e(A)&&M(m)})}var q=s(_);N(M=>u(q,` ${M??""}`),[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.FORCE_DISABLE")]),v(P,J)},$$slots:{default:!0}});var Z=s(te,2);xe(Z,{variant:"outline",size:"sm",onclick:()=>n(me,!1),get disabled(){return e(A)},children:(P,V)=>{$e();var J=Ze();N(_=>u(J,_),[()=>i.t("ADMIN_NEXT.CANCEL")]),v(P,J)},$$slots:{default:!0}}),t(Q),t(T),v(h,T)},ve=h=>{var T=br(),L=r(T),Q=r(L,!0);t(L);var te=s(L,2),Z=r(te);qe(Z);var P=s(Z,2);xe(P,{variant:"destructive",size:"sm",onclick:()=>p(!1),get disabled(){return e(A)},children:(J,_)=>{var m=xr(),q=pe(m);{var M=ie=>{Re(ie,{size:13,class:"animate-spin"})};I(q,ie=>{e(A)&&ie(M)})}var Ie=s(q);N(ie=>u(Ie,` ${ie??""}`),[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.CONFIRM_DISABLE")]),v(J,m)},$$slots:{default:!0}});var V=s(P,2);xe(V,{variant:"outline",size:"sm",onclick:()=>n(me,!1),get disabled(){return e(A)},children:(J,_)=>{$e();var m=Ze("Cancel");v(J,m)},$$slots:{default:!0}}),t(te),t(T),N(J=>{u(Q,J),Z.disabled=e(A)},[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.ENTER_YOUR_CURRENT_6_DIGIT_CODE_TO")]),tt(Z,()=>e(se),J=>n(se,J)),v(h,T)};I(S,h=>{fe()?h(U):h(ve,-1)})}v(l,f)};I(Te,l=>{e(me)&&l(ue)})}t(D),N((l,f)=>{u(le,l),u(de,f)},[()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.2FA_IS_ENABLED"),()=>i.t("ADMIN_NEXT.TWO_FACTOR_FIELD.A_ONE_TIME_CODE_IS_REQUIRED_WHENEVER")]),v(x,D)};I(De,x=>{e($)==="idle"?x(Ce):e($)==="pending"?x(ge,1):x(be,-1)})}t(ee),v(ze,ee),at()}st(["click"]);var Dr=c('<div class="flex items-center justify-center py-6"><!></div>'),hr=c('<p class="py-4 text-sm text-muted-foreground"> </p>'),yr=c('<tr class="border-b border-border/50 last:border-0"><td class="py-2.5 pe-4 font-medium text-foreground"> </td><td class="py-2.5 pe-4"><code class="rounded bg-muted px-1.5 py-0.5 font-mono text-xs text-muted-foreground"> </code></td><td class="py-2.5 pe-4 text-muted-foreground"> </td><td class="py-2.5 pe-4 text-muted-foreground"> </td><td class="py-2.5 pe-4 text-muted-foreground"> </td><td class="py-2.5"><button type="button" class="inline-flex h-7 w-7 items-center justify-center rounded-md text-destructive/70 transition-colors hover:bg-destructive/10 hover:text-destructive disabled:opacity-50"><!></button></td></tr>'),Sr=c('<div class="overflow-x-auto"><table class="w-full text-sm"><thead><tr class="border-b border-border text-start text-xs font-medium uppercase tracking-wider text-muted-foreground"><th class="pb-2 pe-4">Name</th><th class="pb-2 pe-4"> </th><th class="pb-2 pe-4"> </th><th class="pb-2 pe-4"> </th><th class="pb-2 pe-4"> </th><th class="pb-2 w-16"></th></tr></thead><tbody></tbody></table></div>'),Rr=c('<div class="mt-4 rounded-lg border border-amber-500/30 bg-amber-500/5 p-3"><div class="flex items-center gap-2"><input type="text" readonly="" class="flex-1 rounded-md border border-amber-500/30 bg-amber-500/5 px-3 py-2 font-mono text-sm text-foreground focus:outline-none"/> <!></div> <p class="mt-2 flex items-center gap-1.5 text-xs text-amber-600 dark:text-amber-400"><!> </p></div>'),Or=c("<!> ",1),Fr=c("<!> ",1),Lr=c('<div class="rounded-xl border border-border bg-card p-5"><h2 class="text-sm font-semibold text-foreground"> </h2> <div class="mt-4"><!> <!> <div class="mt-4 flex flex-wrap items-end gap-3 border-t border-border/50 pt-4"><div class="min-w-0 flex-1"><label class="text-xs font-medium text-muted-foreground" for="api-key-name"> </label> <input id="api-key-name" type="text" class="mt-1 flex h-9 w-full rounded-lg border border-input bg-muted/50 px-3 text-sm shadow-sm placeholder:text-muted-foreground/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"/></div> <div class="w-20"><label class="text-xs font-medium text-muted-foreground" for="api-key-expiry"> </label> <div class="mt-1 flex items-center gap-1.5"><input id="api-key-expiry" type="number" placeholder="Days" min="1" class="flex h-9 w-full rounded-lg border border-input bg-muted/50 px-2 text-sm shadow-sm placeholder:text-muted-foreground/60 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"/></div></div> <div class="flex h-9 items-center text-xs text-muted-foreground">days <span class="ms-1 italic"> </span></div> <!></div></div></div> <!>',1);function Mr(ze,E){rt(E,!0);let fe=g(et([])),$=g(!0),G=g(""),H=g(""),se=g(!1),A=g(""),me=g(!1),y=g(!1),Ee=g(null),p=g(!1);function ee(_){if(!_)return"Never";const m=new Date(_*1e3);return m.toLocaleDateString(void 0,{year:"numeric",month:"2-digit",day:"2-digit"})+" "+m.toLocaleTimeString(void 0,{hour:"2-digit",minute:"2-digit",hour12:!1})}async function De(){n($,!0);try{n(fe,await Lt(E.username),!0)}catch{O.error(i.t("ADMIN_NEXT.API_KEYS_FIELD.FAILED_TO_LOAD_API_KEYS"))}finally{n($,!1)}}async function Ce(){if(!e(G).trim()){O.error(i.t("ADMIN_NEXT.API_KEYS_FIELD.PLEASE_ENTER_A_KEY_NAME"));return}n(se,!0),n(A,"");try{const _=e(H)?parseInt(e(H),10):void 0,m=await Mt(E.username,e(G).trim(),_);n(A,m.api_key,!0),n(G,""),n(H,""),await De(),O.success(i.t("ADMIN_NEXT.API_KEYS_FIELD.API_KEY_GENERATED"))}catch{O.error(i.t("ADMIN_NEXT.API_KEYS_FIELD.FAILED_TO_GENERATE_API_KEY"))}finally{n(se,!1)}}function ge(_){n(Ee,_,!0),n(y,!0)}async function be(){if(e(Ee)){n(y,!1),n(p,!0);try{await Ct(E.username,e(Ee).id),await De(),O.success(i.t("ADMIN_NEXT.TOASTS.API_KEY_REVOKED",{name:e(Ee).name}))}catch{O.error(i.t("ADMIN_NEXT.API_KEYS_FIELD.FAILED_TO_REVOKE_API_KEY"))}finally{n(p,!1),n(Ee,null)}}}async function x(){try{await navigator.clipboard.writeText(e(A)),n(me,!0),setTimeout(()=>{n(me,!1)},2e3)}catch{O.error(i.t("ADMIN_NEXT.API_KEYS_FIELD.FAILED_TO_COPY_TO_CLIPBOARD"))}}ut(()=>{E.username,De()});var D=Lr(),b=pe(D),F=r(b),ae=r(F,!0);t(F);var z=s(F,2),le=r(z);{var j=_=>{var m=Dr(),q=r(m);Re(q,{size:20,class:"animate-spin text-muted-foreground"}),t(m),v(_,m)},de=_=>{var m=hr(),q=r(m,!0);t(m),N(M=>u(q,M),[()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.NO_API_KEYS_HAVE_BEEN_GENERATED_YET")]),v(_,m)},ne=_=>{var m=Sr(),q=r(m),M=r(q),Ie=r(M),ie=s(r(Ie)),Pe=r(ie,!0);t(ie);var _e=s(ie),Ae=r(_e,!0);t(_e);var a=s(_e),o=r(a,!0);t(a);var d=s(a),w=r(d,!0);t(d),$e(),t(Ie),t(M);var R=s(M);Wt(R,21,()=>e(fe),X=>X.id,(X,K)=>{var k=yr(),he=r(k),Ke=r(he,!0);t(he);var Oe=s(he),We=r(Oe),Ge=r(We,!0);t(We),t(Oe);var Y=s(Oe),ce=r(Y,!0);t(Y);var oe=s(Y),we=r(oe,!0);t(oe);var ye=s(oe),Ve=r(ye,!0);t(ye);var C=s(ye),re=r(C),Xe=r(re);vt(Xe,{size:14}),t(re),t(C),t(k),N((ke,Fe,Se,Ye)=>{u(Ke,e(K).name),u(Ge,e(K).prefix),u(ce,ke),u(we,Fe),u(Ve,Se),re.disabled=e(p),Qe(re,"title",Ye)},[()=>ee(e(K).created),()=>ee(e(K).expires),()=>ee(e(K).last_used),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.REVOKE_KEY")]),je("click",re,()=>ge(e(K))),v(X,k)}),t(R),t(q),t(m),N((X,K,k,he)=>{u(Pe,X),u(Ae,K),u(o,k),u(w,he)},[()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.KEY_PREFIX"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.CREATED"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.EXPIRES"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.LAST_USED")]),v(_,m)};I(le,_=>{e($)?_(j):e(fe).length===0?_(de,1):_(ne,-1)})}var W=s(le,2);{var Te=_=>{var m=Rr(),q=r(m),M=r(q);qe(M);var Ie=s(M,2);xe(Ie,{variant:"outline",size:"sm",onclick:x,class:"shrink-0",children:(Ae,a)=>{var o=lt(),d=pe(o);{var w=X=>{jt(X,{size:14,class:"text-green-500"})},R=X=>{Qt(X,{size:14})};I(d,X=>{e(me)?X(w):X(R,-1)})}v(Ae,o)},$$slots:{default:!0}}),t(q);var ie=s(q,2),Pe=r(ie);Jt(Pe,{size:12});var _e=s(Pe);t(ie),t(m),N(Ae=>{Vt(M,e(A)),u(_e,` ${Ae??""}`)},[()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.COPY_THIS_KEY_NOW_IT_WILL_NOT_BE_SHOWN")]),v(_,m)};I(W,_=>{e(A)&&_(Te)})}var ue=s(W,2),l=r(ue),f=r(l),S=r(f,!0);t(f);var U=s(f,2);qe(U),t(l);var ve=s(l,2),h=r(ve),T=r(h,!0);t(h);var L=s(h,2),Q=r(L);qe(Q),t(L),t(ve);var te=s(ve,2),Z=s(r(te)),P=r(Z,!0);t(Z),t(te);var V=s(te,2);{let _=B(()=>e(se)||!e(G).trim());xe(V,{size:"sm",onclick:Ce,get disabled(){return e(_)},children:(m,q)=>{var M=lt(),Ie=pe(M);{var ie=_e=>{var Ae=Or(),a=pe(Ae);Re(a,{size:14,class:"me-1.5 animate-spin"});var o=s(a);N(d=>u(o,` ${d??""}`),[()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.GENERATING")]),v(_e,Ae)},Pe=_e=>{var Ae=Fr(),a=pe(Ae);Ht(a,{size:14,class:"me-1.5"});var o=s(a);N(d=>u(o,` ${d??""}`),[()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.GENERATE_KEY")]),v(_e,Ae)};I(Ie,_e=>{e(se)?_e(ie):_e(Pe,-1)})}v(m,M)},$$slots:{default:!0}})}t(ue),t(z),t(b);var J=s(b,2);{let _=B(()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.REVOKE_API_KEY")),m=B(()=>`Are you sure you want to revoke "${e(Ee)?.name}"? This action cannot be undone and any applications using this key will lose access.`);dt(J,{get open(){return e(y)},get title(){return e(_)},get message(){return e(m)},confirmLabel:"Revoke",variant:"destructive",onconfirm:be,oncancel:()=>{n(y,!1),n(Ee,null)}})}N((_,m,q,M,Ie)=>{u(ae,_),u(S,m),Qe(U,"placeholder",q),u(T,M),u(P,Ie)},[()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.API_KEYS"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.KEY_NAME"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.E_G_MY_CLI_TOOL"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.EXPIRY"),()=>i.t("ADMIN_NEXT.API_KEYS_FIELD.BLANK_NEVER")]),tt(U,()=>e(G),_=>n(G,_)),tt(Q,()=>e(H),_=>n(H,_)),v(ze,D),at()}st(["click"]);var Cr=c('<div class="absolute inset-0 flex items-center justify-center rounded-full bg-black/40"><!></div>'),wr=c('<span class="text-primary"> </span>'),Xr=c("<span> </span>"),kr=c('<button type="button" class="inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive"><!> </button>'),Ur=c('<div class="rounded-xl border border-border bg-card p-6"><div class="flex items-center gap-6"><div class="relative shrink-0"><img class="h-24 w-24 rounded-full object-cover ring-4 ring-background shadow-lg"/> <!></div> <div class="min-w-0 flex-1"><h2 class="text-xl font-semibold text-foreground"> </h2> <div class="mt-1 flex flex-wrap items-center gap-2 text-sm text-muted-foreground"><!> <!></div> <div class="mt-3 flex items-center gap-2"><input type="file" accept="image/*" class="hidden"/> <button type="button" class="inline-flex items-center gap-1.5 rounded-md border border-border px-3 py-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"><!> </button> <!></div></div></div></div>');function Pr(ze,E){rt(E,!0);let fe=g(!1),$=g(!1),G=g(null);function H(l){l.username===Be.username&&Be.setUser(l.username,l.fullname||l.username,l.email||"",l.avatar_url||"")}const se=B(()=>Zt(E.user.avatar_url,E.user.email,E.user.fullname,E.user.username));async function A(l){const f=l.target,S=f.files?.[0];if(S){n(fe,!0);try{const U=await wt(E.user.username,S);E.onupdated(U),H(U),O.success(i.t("ADMIN_NEXT.USER_AVATAR_CARD.AVATAR_UPDATED"))}catch{O.error(i.t("ADMIN_NEXT.USER_AVATAR_CARD.FAILED_TO_UPLOAD_AVATAR"))}finally{n(fe,!1),f&&(f.value="")}}}async function me(){n($,!0);try{const l=await Xt(E.user.username);E.onupdated(l),H(l),O.success(i.t("ADMIN_NEXT.USER_AVATAR_CARD.AVATAR_REMOVED"))}catch{O.error(i.t("ADMIN_NEXT.USER_AVATAR_CARD.FAILED_TO_REMOVE_AVATAR"))}finally{n($,!1)}}var y=Ur(),Ee=r(y),p=r(Ee),ee=r(p),De=s(ee,2);{var Ce=l=>{var f=Cr(),S=r(f);Re(S,{size:20,class:"animate-spin text-white"}),t(f),v(l,f)};I(De,l=>{e(fe)&&l(Ce)})}t(p);var ge=s(p,2),be=r(ge),x=r(be,!0);t(be);var D=s(be,2),b=r(D);{var F=l=>{var f=wr(),S=r(f,!0);t(f),N(()=>u(S,E.user.email)),v(l,f)};I(b,l=>{E.user.email&&l(F)})}var ae=s(b,2);{var z=l=>{var f=Xr(),S=r(f);t(f),N(()=>u(S,`— ${E.user.title??""}`)),v(l,f)};I(ae,l=>{E.user.title&&l(z)})}t(D);var le=s(D,2),j=r(le);qt(j,l=>n(G,l),()=>e(G));var de=s(j,2),ne=r(de);er(ne,{size:12});var W=s(ne);t(de);var Te=s(de,2);{var ue=l=>{var f=kr(),S=r(f);{var U=T=>{Re(T,{size:12,class:"animate-spin"})},ve=T=>{vt(T,{size:12})};I(S,T=>{e($)?T(U):T(ve,-1)})}var h=s(S);t(f),N(T=>{f.disabled=e($),u(h,` ${T??""}`)},[()=>i.t("ADMIN_NEXT.REMOVE")]),je("click",f,me),v(l,f)};I(Te,l=>{E.user.avatar_url&&l(ue)})}t(le),t(ge),t(Ee),t(y),N(l=>{Qe(ee,"src",e(se)),Qe(ee,"alt",E.user.fullname??E.user.username),u(x,E.user.fullname||E.user.username),de.disabled=e(fe),u(W,` ${l??""}`)},[()=>i.t("ADMIN_NEXT.USER_AVATAR_CARD.UPLOAD_AVATAR")]),je("change",j,A),je("click",de,()=>e(G)?.click()),v(ze,y),at()}st(["change","click"]);var Kr=c('<div class="flex h-9 w-9 items-center justify-center rounded-full bg-primary/10 text-primary"><!></div>'),Yr=c('<p class="text-xs text-muted-foreground"> </p>'),zr=c('<div class="flex items-center gap-3"><!> <div class="min-w-0"><h1> </h1> <!></div></div>'),Wr=c("<!> Undo",1),Vr=c('<!> <span class="hidden sm:inline"> </span>',1),Br=c('<!> <span class="hidden sm:inline">Save</span>',1),$r=c('<div><div><div class="flex min-w-0 items-center gap-3"><button type="button" class="inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground"><!></button> <!></div> <div class="flex shrink-0 items-center gap-2"><!> <!> <!> <!></div></div></div>'),Gr=c('<div class="flex flex-1 items-center justify-center"><!></div>'),Hr=c('<div class="px-6 py-4"><!></div>'),jr=c('<div class="flex flex-1 items-center justify-center"><div class="text-center"><!> <p class="mt-2 text-sm text-destructive"> </p> <!></div></div>'),Qr=c('<div class="rounded-xl border border-border bg-card p-5"><h2 class="text-sm font-semibold text-foreground"> </h2> <div class="mt-4"><!></div></div>'),Jr=c('<div class="rounded-xl border border-border bg-card p-5"><!></div>'),qr=c('<div class="rounded-xl border border-border bg-card p-5"><h2 class="text-sm font-semibold text-foreground"> </h2> <div class="mt-4"><!></div></div>'),Zr=c('<div class="flex-1 overflow-y-auto"><div class="space-y-6 px-6 py-6"><!> <!> <!> <!> <!> <!></div></div>'),ea=c('<div class="flex h-full flex-col"><!> <!></div> <!> <!>',1);function Ya(ze,E){rt(E,!0);const fe=B(()=>ir("users")),$=B(()=>_t.params.username===Be.username),G=B(()=>e(fe)||e($)),H=B(()=>e(fe));let se=g(!1);const A="********",me=new Set(["permissions","userinfo","2fa_secret","api_keys"]),y=B(()=>_t.params.username??"");Et("blueprintScope",()=>e(y)?"users/"+e(y):"");const Ee=Nt();let p=g(null),ee=g(null),De=g(""),Ce=g(!0),ge=g(!1),be=g(!1),x=g(""),D=g(!1),b=g(et({})),F=g(et({})),ae=g("{}"),z=g(et({})),le=g("{}");const j=B(()=>ct(e(b))!==e(ae)||e(H)&&JSON.stringify(e(z))!==e(le)),de=new Set(["security","twofa_check","avatar","multiavatar_only","api_check","api_section","language"]);function ne(a){return a.filter(o=>!(me.has(o.type)||de.has(o.name))).map(o=>o.fields?{...o,fields:ne(o.fields)}:o)}const W=B(()=>e(ee)?{...e(ee),fields:ne(e(ee).fields)}:null);let Te=B(()=>!e(W)||!St(e(W).fields,e(b)));function ue(a){for(const o of a){if(o.name==="groups")return o;if(o.fields){const d=ue(o.fields);if(d)return d}}return null}const l=B(()=>{if(!e(ee))return null;const a=ue(e(ee).fields);if(!a)return null;const{type:o,...d}=a.validate??{};return{...a,selectize:{...a.selectize??{},store_keys:!0},validate:d}});function f(a){n(b,{username:a.username,email:a.email??"",fullname:a.fullname??"",title:a.title??"",state:a.state,language:a.language??"",content_editor:a.content_editor??"",groups:a.groups??[]},!0),n(ae,ct(e(b)),!0),n(z,structuredClone(a.access),!0),n(le,JSON.stringify(e(z)),!0)}async function S(){n(Ce,!0),n(x,""),n(se,!1);try{const[a,o]=await Promise.all([kt(e(y)),Kt().catch(()=>null)]);n(p,a.user,!0),n(De,a.etag,!0),n(ee,o,!0),f(a.user)}catch(a){(a&&typeof a=="object"&&"status"in a?a.status:0)===403?n(se,!0):n(x,`Failed to load user '${e(y)}'.`)}finally{n(Ce,!1)}}function U(a,o){const d=a.split("."),w={...e(b)};let R=w;for(let K=0;K<d.length-1;K++){const k=d[K];typeof R[k]!="object"||R[k]===null?R[k]={}:R[k]={...R[k]},R=R[k]}R[d[d.length-1]]=o,n(b,w,!0);const X=e(W)?yt(e(W).fields,a,w):null;if(X)n(F,{...e(F),[a]:X},!0);else if(e(F)[a]){const{[a]:K,...k}=e(F);n(F,k,!0)}}function ve(a){if(typeof a=="string")return a===A?void 0:a;if(Array.isArray(a))return a.map(ve);if(a&&typeof a=="object"){const o={};for(const[d,w]of Object.entries(a)){const R=ve(w);R!==void 0&&(o[d]=R)}return o}return a}async function h(){if(n(F,e(W)?Dt(e(W).fields,e(b)):{},!0),Object.keys(e(F)).length>0){ht();return}n(ge,!0);try{const o={...ve(e(b)),access:e(z)};delete o.username,(!o.password||o.password==="")&&delete o.password,e(H)||(delete o.access,delete o.state,delete o.groups);const d=await Ut(e(y),o,e(De));n(p,d.user,!0),n(De,d.etag,!0),f(d.user),e(y)===Be.username&&Be.setUser(e(y),d.user.fullname||e(y),d.user.email||"",d.user.avatar_url||"",d.user.content_editor),await Ee.emit(),O.success(i.t("ADMIN_NEXT.TOASTS.USER_SAVED",{username:e(y)}))}catch(a){a&&typeof a=="object"&&"status"in a&&a.status===409?O.error(i.t("ADMIN_NEXT.USERS.USER_WAS_MODIFIED_ELSEWHERE_PLEASE")):O.error(i.t("ADMIN_NEXT.USERS.FAILED_TO_SAVE_USER"))}finally{n(ge,!1)}}function T(){if(e(p)){if(e(p).username===Be.username){O.error(i.t("ADMIN_NEXT.USERS.YOU_CANNOT_DELETE_YOUR_OWN_ACCOUNT"));return}n(D,!0)}}async function L(){n(D,!1),n(be,!0);try{await Pt(e(y)),O.success(i.t("ADMIN_NEXT.TOASTS.USER_DELETED",{username:e(y)})),it(`${ot}/users`)}catch{O.error(i.t("ADMIN_NEXT.TOASTS.USER_DELETE_FAILED",{username:e(y)}))}finally{n(be,!1)}}function Q(a){n(z,a,!0)}function te(a){n(p,a,!0)}function Z(a){if((a.metaKey||a.ctrlKey)&&a.key==="s"&&(a.preventDefault(),He.autoSaveEnabled?V.forceSave():e(j)&&!e(ge)&&h()),(a.metaKey||a.ctrlKey)&&a.key==="z"&&!a.shiftKey&&He.autoSaveEnabled){const o=(document.activeElement?.tagName??"").toLowerCase();o==="input"||o==="textarea"||document.activeElement?.isContentEditable||(a.preventDefault(),V.undo())}}const P=sr(()=>He.autoSaveEnabled?e(j)||V.saving||V.undoStack.some(a=>!a.savedToServer):e(j)),V=tr({save:h,getValue:a=>{const o=a.split(".");let d=e(b);for(const w of o){if(d==null||typeof d!="object")return;d=d[w]}return d},applyChange:U,formName:i.t("ADMIN_NEXT.TOASTS.FORM_LABEL.USER")});ut(()=>{e(y),V.reset(),S()}),mt(()=>{const a=It.subscribe("users:update",o=>{o.id===e(y)&&(e(j)?O.info(i.t("ADMIN_NEXT.USERS.USER_CHANGED_ELSEWHERE_SAVE_TO")):S())},{dirtyGuard:()=>e(ge)||V.saving});return()=>{a()}});var J=ea();Tt("n7odka",a=>{pt(o=>{At.title=o??""},[()=>i.t("ADMIN_NEXT.USERS.PAGE_TITLE",{name:e(p)?.fullname??e(y)})])}),xt("keydown",gt,Z);var _=pe(J),m=r(_);ar(m,{children:(o,d)=>{let w=()=>d?.().scrolled;var R=$r(),X=r(R),K=r(X),k=r(K),he=r(k);nr(he,{name:"arrow-back",size:16}),t(k);var Ke=s(k,2);{var Oe=C=>{var re=zr(),Xe=r(re);{var ke=Me=>{var Ue=Kr(),Ne=r(Ue);vr(Ne,{size:16}),t(Ue),v(Me,Ue)};I(Xe,Me=>{w()||Me(ke)})}var Fe=s(Xe,2),Se=r(Fe),Ye=r(Se,!0);t(Se);var Je=s(Se,2);{var Le=Me=>{var Ue=Yr(),Ne=r(Ue);t(Ue),N(()=>u(Ne,`@${e(p).username??""}`)),v(Me,Ue)};I(Je,Me=>{w()||Me(Le)})}t(Fe),t(re),N(()=>{nt(Se,1,`truncate font-semibold text-foreground transition-[font-size] duration-200 ${w()?"text-sm":"text-lg"}`),u(Ye,e(p).fullname||e(p).username)}),v(C,re)};I(Ke,C=>{e(p)&&C(Oe)})}t(K);var We=s(K,2),Ge=r(We);rr(Ge,{get hasChanges(){return e(j)},get saving(){return V.saving},get lastSavedAt(){return V.lastSavedAt},get autoSaveEnabled(){return He.autoSaveEnabled}});var Y=s(Ge,2);{var ce=C=>{xe(C,{variant:"outline",size:"sm",onclick:()=>V.undo(),children:(re,Xe)=>{var ke=Wr(),Fe=pe(ke);lr(Fe,{size:14}),$e(),v(re,ke)},$$slots:{default:!0}})};I(Y,C=>{He.autoSaveEnabled&&He.autoSaveToolbarUndo&&V.canUndo&&C(ce)})}var oe=s(Y,2);{var we=C=>{{let re=B(()=>i.t("ADMIN_NEXT.DELETE")),Xe=B(()=>i.t("ADMIN_NEXT.DELETE"));xe(C,{variant:"destructive",size:"sm",onclick:T,get disabled(){return e(be)},get"aria-label"(){return e(re)},get title(){return e(Xe)},children:(ke,Fe)=>{var Se=Vr(),Ye=pe(Se);{var Je=Ne=>{Re(Ne,{size:14,class:"sm:me-1.5 animate-spin"})},Le=Ne=>{vt(Ne,{size:14,class:"sm:me-1.5"})};I(Ye,Ne=>{e(be)?Ne(Je):Ne(Le,-1)})}var Me=s(Ye,2),Ue=r(Me,!0);t(Me),N(Ne=>u(Ue,Ne),[()=>i.t("ADMIN_NEXT.DELETE")]),v(ke,Se)},$$slots:{default:!0}})}};I(oe,C=>{e(p)&&e(fe)&&!e($)&&C(we)})}var ye=s(oe,2);{var Ve=C=>{{let re=B(()=>!e(j)||e(ge)||!e(Te));xe(C,{size:"sm",onclick:h,get disabled(){return e(re)},"aria-label":"Save",title:"Save",children:(Xe,ke)=>{var Fe=Br(),Se=pe(Fe);{var Ye=Le=>{Re(Le,{size:14,class:"sm:me-1.5 animate-spin"})},Je=Le=>{ur(Le,{size:14,class:"sm:me-1.5"})};I(Se,Le=>{e(ge)?Le(Ye):Le(Je,-1)})}$e(2),v(Xe,Fe)},$$slots:{default:!0}})}};I(ye,C=>{e(p)&&e(G)&&C(Ve)})}t(We),t(X),t(R),N(()=>{nt(R,1,`px-6 transition-[padding] duration-200 ${w()?"py-2":"pt-6 pb-3"}`),nt(X,1,`flex items-center justify-between gap-4 ${w()?"min-h-6":"min-h-8"}`)}),je("click",k,()=>it(`${ot}/users`)),v(o,R)},$$slots:{default:!0}});var q=s(m,2);{var M=a=>{var o=Gr(),d=r(o);Re(d,{size:24,class:"animate-spin text-muted-foreground"}),t(o),v(a,o)},Ie=a=>{var o=Hr(),d=r(o);or(d,{message:"You don't have permission to view this user."}),t(o),v(a,o)},ie=a=>{var o=jr(),d=r(o),w=r(d);dr(w,{size:32,class:"mx-auto text-destructive"});var R=s(w,2),X=r(R,!0);t(R);var K=s(R,2);xe(K,{variant:"outline",size:"sm",class:"mt-3",onclick:()=>it(`${ot}/users`),children:(k,he)=>{$e();var Ke=Ze();N(Oe=>u(Ke,Oe),[()=>i.t("ADMIN_NEXT.USERS.BACK_TO_USERS")]),v(k,Ke)},$$slots:{default:!0}}),t(d),t(o),N(()=>u(X,e(x))),v(a,o)},Pe=a=>{var o=Zr(),d=r(o),w=r(d);Pr(w,{get user(){return e(p)},onupdated:te});var R=s(w,2);{var X=Y=>{ft(Y,{get fields(){return e(W).fields},get data(){return e(b)},onchange:U,get oncommit(){return V.oncommit},get errors(){return e(F)}})};I(R,Y=>{e(W)&&e(W).fields.length>0&&Y(X)})}var K=s(R,2);{var k=Y=>{var ce=Qr(),oe=r(ce),we=r(oe,!0);t(oe);var ye=s(oe,2),Ve=r(ye);{let C=B(()=>e(p).username!==Be.username);Nr(Ve,{get username(){return e(p).username},get twofaEnabled(){return e(p).twofa_enabled},get hasSecret(){return e(p).twofa_secret},get isAdminActor(){return e(C)},onstatechange:re=>{e(p)&&n(p,{...e(p),twofa_enabled:re,twofa_secret:re},!0)}})}t(ye),t(ce),N(C=>u(we,C),[()=>i.t("ADMIN_NEXT.USERS.2_FACTOR_AUTHENTICATION")]),v(Y,ce)};I(K,Y=>{e(p)&&e(p).twofa_global_enabled&&Y(k)})}var he=s(K,2);{var Ke=Y=>{var ce=Jr(),oe=r(ce);{let we=B(()=>[e(l)]);ft(oe,{get fields(){return e(we)},get data(){return e(b)},onchange:U,get oncommit(){return V.oncommit},get errors(){return e(F)}})}t(ce),v(Y,ce)};I(he,Y=>{e(H)&&e(l)&&Y(Ke)})}var Oe=s(he,2);{var We=Y=>{var ce=qr(),oe=r(ce),we=r(oe,!0);t(oe);var ye=s(oe,2),Ve=r(ye);Yt(Ve,{get value(){return e(z)},onchange:Q}),t(ye),t(ce),N(C=>u(we,C),[()=>i.t("ADMIN_NEXT.USERS.PERMISSIONS")]),v(Y,ce)};I(Oe,Y=>{e(H)&&Y(We)})}var Ge=s(Oe,2);Mr(Ge,{get username(){return e(p).username}}),t(d),t(o),v(a,o)};I(q,a=>{e(Ce)?a(M):e(se)?a(Ie,1):e(x)?a(ie,2):e(p)&&a(Pe,3)})}t(_);var _e=s(_,2);{let a=B(()=>i.t("ADMIN_NEXT.USERS.DELETE_USER")),o=B(()=>`Are you sure you want to delete "${e(p)?.fullname||e(y)}"? This action cannot be undone.`);dt(_e,{get open(){return e(D)},get title(){return e(a)},get message(){return e(o)},confirmLabel:"Delete",variant:"destructive",onconfirm:L,oncancel:()=>{n(D,!1)}})}var Ae=s(_e,2);{let a=B(()=>i.t("ADMIN_NEXT.UNSAVED_CHANGES"));dt(Ae,{get open(){return P.showModal},get title(){return e(a)},message:"You have unsaved changes. Leave anyway?",confirmLabel:"Leave",cancelLabel:"Stay",get onconfirm(){return P.confirm},get oncancel(){return P.cancel}})}v(ze,J),at()}st(["click"]);export{Ya as component};
|