PageSourceSearch

https://app.livestreampro.ai/chunk-JSGE2TCK.js

js livestreampro.ai collected 2026-09-24 14:31:54 UTC 40,178 bytes, 2 lines download raw bytes

1import{a as ke}from"./chunk-YKO3X7FU.js";import{a as we,b as R}from"./chunk-I3D26HGW.js";import{a as Me}from"./chunk-A5NAQZEU.js";import{a as W}from"./chunk-YI4RC7AN.js";import"./chunk-ZCWTDZFK.js";import"./chunk-VPKEFLCS.js";import"./chunk-URB7CGIT.js";import"./chunk-NU2RSDJ3.js";import{a as Se}from"./chunk-JURSKXEE.js";import{a as ye}from"./chunk-RNOJN5IY.js";import"./chunk-HUJGA37I.js";import{a as De}from"./chunk-SDIFARTS.js";import"./chunk-RYRH35XY.js";import"./chunk-UCWPALVB.js";import{l as be}from"./chunk-UUFCBXDF.js";import"./chunk-TFBNTXW3.js";import"./chunk-BGN5ZLKT.js";import{a as he}from"./chunk-7MO5DI6F.js";import"./chunk-PG4DIPJP.js";import"./chunk-OAQMVACB.js";import"./chunk-CTNZ74FM.js";import"./chunk-WUS7R7E6.js";import{b as ue,c as ge,d as _e,n as fe,q as ve,x as Ce,z as xe}from"./chunk-RREKAAKD.js";import"./chunk-FNRAH54O.js";import"./chunk-PPBPBPH7.js";import"./chunk-KGSRPSR4.js";import"./chunk-BSJVWSZ5.js";import"./chunk-COJSXH5T.js";import{r as me}from"./chunk-UAEGT2DC.js";import{c as ce,d as pe}from"./chunk-3BR52HOI.js";import"./chunk-TM7NN3NU.js";import{D as j,c as L,f as B,k as z,s as se,t as le,u as de}from"./chunk-4M6DCBQZ.js";import"./chunk-ZFL2S6QN.js";import"./chunk-RHLGVOS5.js";import"./chunk-EPD3PSTL.js";import{h as ne,k as oe,l as re,r as ae}from"./chunk-DXVQJAHD.js";import"./chunk-C6XWWCUT.js";import"./chunk-DEYJRJKY.js";import{y as P}from"./chunk-EK2LUO54.js";import"./chunk-JQPFVPBT.js";import{$c as A,Ac as g,Bc as h,Cc as N,Ic as w,Jc as M,Kc as k,Pb as _,Qb as f,Sb as Z,Tb as T,Ub as I,Vb as p,Wb as i,Wc as te,Xb as n,Xc as O,Y as y,Yb as S,Za as Q,_c as D,ad as V,cb as s,f as J,fc as x,ha as b,hb as E,jc as m,jd as F,kd as ie,lc as c,oa as v,pa as C,ub as U,vc as ee,xa as u,zb as X,zc as a}from"./chunk-UBTXYZ6Y.js";import{i as G}from"./chunk-RKIXE2YC.js";var $=class r{userId;userName;cancelled=new E;suspended=new E;adminStatusService=b(R);suspendLoading=u(!1);suspendError=u(null);reason="";mfaResult=u(null);onMfaVerified(o){this.mfaResult.set(o),this.suspendError.set(null),this.reason.trim().length>0&&this.confirmSuspend()}canSuspend(){return this.reason.trim().length>0&&this.mfaResult()!==null}confirmSuspend(){let o=this.mfaResult();if(!o||!this.reason.trim())return;this.suspendLoading.set(!0),this.suspendError.set(null);let e={reason:this.reason.trim(),code:o.code};o.methodId&&(e.methodId=o.methodId),this.adminStatusService.suspendUser(this.userId,e).subscribe({next:()=>{this.suspendLoading.set(!1),this.suspended.emit()},error:t=>{this.suspendError.set(t.error?.message||"Failed to suspend user"),this.suspendLoading.set(!1),this.mfaResult.set(null)}})}close(){this.cancelled.emit()}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=U({type:r,selectors:[["app-user-suspend-dialog"]],inputs:{userId:"userId",userName:"userName"},outputs:{cancelled:"cancelled",suspended:"suspended"},decls:22,vars:8,consts:[["role","dialog","aria-modal","true","tabindex","-1",1,"fixed","inset-0","bg-black/50","flex","items-center","justify-center","z-50","p-4",3,"click","keydown.escape"],["tabindex","-1",1,"bg-surface","rounded-lg","max-w-lg","w-full","shadow-xl",3,"click","keydown.escape"],[1,"px-6","py-4","border-b","border-border"],[1,"text-lg","font-semibold","text-red-600","dark:text-red-400"],[1,"text-sm","text-tertiary","mt-1"],[1,"text-text","dark:text-white"],[1,"px-6","py-4","space-y-4"],[1,"block","text-sm","font-medium","text-secondary","mb-1"],[1,"text-red-500"],["placeholder","Reason for suspension (required)","rows","3",1,"w-full","px-3","py-2","border","border-border","rounded-lg","bg-surface","text-text","dark:text-white","text-sm","focus:ring-2","focus:ring-red-500","focus:border-red-500","resize-none",3,"ngModelChange","ngModel"],["title","Two-factor authentication is required to suspend this user.",3,"verified","inline","message","loading","error"],[1,"px-6","py-4","border-t","border-border","flex","gap-3"],[1,"flex-1","px-4","py-2","text-sm","font-medium","text-secondary","border","border-border","rounded-lg","hover:bg-hover",3,"click"],[1,"flex-1","px-4","py-2","text-sm","font-medium","text-white","bg-red-600","rounded-lg","hover:bg-red-700","disabled:opacity-50","disabled:cursor-not-allowed","transition-colors",3,"click","disabled"]],template:function(e,t){e&1&&(i(0,"div",0),m("click",function(){return t.close()})("keydown.escape",function(){return t.close()}),i(1,"div",1),m("click",function(d){return d.stopPropagation()})("keydown.escape",function(d){return d.stopPropagation()}),i(2,"div",2)(3,"h3",3),a(4,"Suspend User"),n(),i(5,"p",4),a(6," Suspend "),i(7,"strong",5),a(8),n()()(),i(9,"div",6)(10,"div")(11,"label",7),a(12," Reason "),i(13,"span",8),a(14,"*"),n()(),i(15,"textarea",9),k("ngModelChange",function(d){return M(t.reason,d)||(t.reason=d),d}),n()(),i(16,"app-mfa-verify",10),m("verified",function(d){return t.onMfaVerified(d)}),n()(),i(17,"div",11)(18,"button",12),m("click",function(){return t.close()}),a(19," Cancel "),n(),i(20,"button",13),m("click",function(){return t.confirmSuspend()}),a(21),n()()()()),e&2&&(s(8),g(t.userName),s(7),w("ngModel",t.reason),s(),p("inline",!0)("message",null)("loading",t.suspendLoading())("error",t.suspendError()),s(4),p("disabled",!t.canSuspend()||t.suspendLoading()),s(),h(" ",t.suspendLoading()?"Suspending...":"
1Verify & Suspend"," "))},dependencies:[P,j,L,B,z,W],encapsulation:2})};var q=class r{userId;userName;cancelled=new E;deleted=new E;adminStatusService=b(R);deleteLoading=u(!1);deleteError=u(null);mfaResult=u(null);onMfaVerified(o){this.mfaResult.set(o),this.deleteError.set(null),this.confirmDelete()}canDelete(){return this.mfaResult()!==null}confirmDelete(){let o=this.mfaResult();if(!o)return;this.deleteLoading.set(!0),this.deleteError.set(null);let e={code:o.code};o.methodId&&(e.methodId=o.methodId),this.adminStatusService.deleteUser(this.userId,e).subscribe({next:()=>{this.deleteLoading.set(!1),this.deleted.emit()},error:t=>{this.deleteError.set(t.error?.message||"Failed to delete user"),this.deleteLoading.set(!1),this.mfaResult.set(null)}})}close(){this.cancelled.emit()}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=U({type:r,selectors:[["app-user-delete-dialog"]],inputs:{userId:"userId",userName:"userName"},outputs:{cancelled:"cancelled",deleted:"deleted"},decls:20,vars:7,consts:[["role","dialog","aria-modal","true","tabindex","-1",1,"fixed","inset-0","bg-black/50","flex","items-center","justify-center","z-50","p-4",3,"click","keydown.escape"],["tabindex","-1",1,"bg-surface","rounded-lg","max-w-lg","w-full","shadow-xl",3,"click","keydown.escape"],[1,"px-6","py-4","border-b","border-border"],[1,"text-lg","font-semibold","text-red-600","dark:text-red-400"],[1,"text-sm","text-tertiary","mt-1"],[1,"text-text","dark:text-white"],[1,"px-6","py-4","space-y-4"],[1,"bg-red-50","dark:bg-red-900/20","border","border-red-200","dark:border-red-800","rounded-lg","p-3"],[1,"text-sm","text-red-700","dark:text-red-300"],["title","Two-factor authentication is required to delete this user.",3,"verified","inline","message","loading","error"],[1,"px-6","py-4","border-t","border-border","flex","gap-3"],[1,"flex-1","px-4","py-2","text-sm","font-medium","text-secondary","border","border-border","rounded-lg","hover:bg-hover",3,"click"],[1,"flex-1","px-4","py-2","text-sm","font-medium","text-white","bg-red-600","rounded-lg","hover:bg-red-700","disabled:opacity-50","disabled:cursor-not-allowed","transition-colors",3,"click","disabled"]],template:function(e,t){e&1&&(i(0,"div",0),m("click",function(){return t.close()})("keydown.escape",function(){return t.close()}),i(1,"div",1),m("click",function(d){return d.stopPropagation()})("keydown.escape",function(d){return d.stopPropagation()}),i(2,"div",2)(3,"h3",3),a(4,"Delete User"),n(),i(5,"p",4),a(6," Remove "),i(7,"strong",5),a(8),n(),a(9," from the tenant "),n()(),i(10,"div",6)(11,"div",7)(12,"p",8),a(13," This will remove the user from the tenant and deactivate their membership. They will lose access to all tenant resources. "),n()(),i(14,"app-mfa-verify",9),m("verified",function(d){return t.onMfaVerified(d)}),n()(),i(15,"div",10)(16,"button",11),m("click",function(){return t.close()}),a(17," Cancel "),n(),i(18,"button",12),m("click",function(){return t.confirmDelete()}),a(19),n()()()()),e&2&&(s(8),g(t.userName),s(6),p("inline",!0)("message",null)("loading",t.deleteLoading())("error",t.deleteError()),s(4),p("disabled",!t.canDelete()||t.deleteLoading()),s(),h(" ",t.deleteLoading()?"Deleting...":"Verify & Delete"," "))},dependencies:[P,W],encapsulation:2})};var H=(r,o)=>[r,o],Re=r=>["/platform/tenants",r],Ve=(r,o)=>o.tenantId,K=(r,o)=>o.id;function Ne(r,o){r&1&&S(0,"lsp-skeleton-card")(1,"lsp-skeleton-card")}function Oe(r,o){if(r&1){let e=x();i(0,"button",40),m("click",function(){v(e);let l=c(2);return C(l.openImpersonationModal())}),a(1,"Impersonate"),n()}}function Ae(r,o){if(r&1){let e=x();i(0,"button",40),m("click",function(){v(e);let l=c(2);return C(l.editUser())}),a(1,"Edit"),n()}}function Fe(r,o){if(r&1){let e=x();i(0,"button",40),m("click",function(){v(e);let l=c(2);return C(l.suspendUser())}),a(1),n()}if(r&2){let e,t=c(2);s(),g(((e=t.user())==null?null:e.status)==="SUSPENDED"?"Unsuspend":"Suspend")}}function Pe(r,o){if(r&1){let e=x();i(0,"button",41),m("click",function(){v(e);let l=c(2);return C(l.deleteUser())}),a(1,"Delete"),n()}}function Le(r,o){if(r&1){let e=x();i(0,"div",25)(1,"span"),a(2),n(),i(3,"button",42),m("click",function(){v(e);let l=c(2);return C(l.suspendError.set(null))}),a(4,"Dismiss"),n()()}if(r&2){let e=c(2);s(2),g(e.suspendError())}}function Be(r,o){if(r&1&&S(0,"img",28),r&2){let e=c(2);p("src",e.user().avatar,Q)("alt",e.user().name)}}function ze(r,o){if(r&1&&(i(0,"div",29),a(1),n()),r&2){let e=c(2);s(),g(e.user().initial)}}function je(r,o){if(r&1){let e=x();i(0,"button",43),m("click",function(){v(e);let l=c(2);return C(l.showRoleSelector.set(!0))}),a(1,"Change role"),n()}}function We(r,o){r&1&&(i(0,"span",34),a(1,"Verified"),n())}function $e(r,o){r&1&&(i(0,"span",35),a(1,"2FA Enabled"),n())}function qe(r,o){if(r&1&&(i(0,"div",37)(1,"div")(2,"h3",44),a(3,"Personal Information"),n(),i(4,"dl",45)(5,"div",46)(6,"dt",47),a(7,"Full Name"),n(),i(8,"dd",48),a(9),n()(),i(10,"div",46)(11,"dt",47),a(12,"Email Address"),n(),i(13,"dd",48),a(14),n()(),i(15,"div",46)(16,"dt",47),a(17,"Phone Number"),n(),i(18,"dd",48),a(19),n()(),i(20,"div",46)(21,"dt",47),a(22,"Timezone"),n(),i(23,"dd",48),a(24),n()()()(),i(25,"div")(26,"h3",44),a(27,"Account Information"),n(),i(28,"dl",45)(29,"div",46)(30,"dt",47),a(31,"User ID"),n(),i(32,"dd",49),a(33),n()(),i(34,"div",46)(35,"dt",47),a(36,"Status"),n(),i(37,"dd",48),S(38,"lsp-chip",31),n()(),i(39,"div",46)(40,"dt",47),a(41,"Role"),n(),i(42,"dd",48),a(43),n()(),i(44,"div",46)(45,"dt",47),a(46,"Created At"),n(),i(47,"dd",48),a(48),D(49,"lspDate"),n()(),i(50,"div",46)(51,"dt",47),a(52,"Last Login"),n(),i(53,"dd",48),a(54),D(55,"lspDate"),n()()()()()),r&2){let e=c(2);s(9),g(e.user().name),s(5),g(e.user().email),s(5),g(e.user().phone||"\u2014"),s(5),g(e.user().timezone||"\u2014"),s(9),g(e.user().id),s(5),p("status",e.user().status),s(5),g(e.user().role),s(5),g(V(49,9,e.user().createdAt,"long")),s(6),g(V(55,12,e.user().lastLogin,"long"))}}function Ge(r,o){if(r&1&&(i(0,"div",50)(1,"div",51),a(2),n(),i(3,"div",52)(4,"h4",53),a(5),n(),i(6,"p",54),a(7),D(8,"lspDate"),n()(),S(9,"lsp-chip",31),i(10,"a",55),a(11,"View Tenant"),n()()),r&2){let e=o.$implicit;s(2),g(e.tenantName.charAt(0)),s(3),g(e.tenantName),s(2),N(" ",e.role," \xB7 Joined ",A(8,6,e.joinedAt)," "),s(2),p("status",e.status),s(),p("routerLink",te(8,Re,e.tenantId))}}function He(r,o){if(r&1&&(i(0,"div",38),T(1,Ge,12,10,"div",50,Ve),n()),r&2){let e=c(2);s(),I(e.tenantMemberships())}}function Ke(r,o){if(r&1&&(i(0,"div",56)(1,"div",57),a(2,"\u{1F4DD}"),n(),i(3,"div",52)(4,"div",58)(5,"div")(6,"h4",53),a(7),n(),i(8,"p",59),a(9),n(),i(10,"div",60)(11,"span"),a(12),D(13,"lspDate"),n(),i(14,"span"),a(15,"\xB7"),n(),i(16,"span"),a(17),n()()(),i(18,"time",61),a(19),D(20,"lspRelativeTime"),n()()()()),r&2){let e=o.$implicit;s(7),g(e.action),s(2),g(e.description),s(3),g(V(13,5,e.timestamp,"long")),s(5),g(e.ipAddress),s(2),h(" ",A(20,8,e.timestamp)," ")}}function Ye(r,o){if(r&1&&(i(0,"div",38),T(1,Ke,21,10,"div",56,K),n()),r&2){let e=c(2);s(),I(e.activityLogs())}}function Je(r,o){r&1&&(i(0,"div",17),S(1,"div",63),n())}function Qe(r,o){r&1&&S(0,"lsp-chip",78)}function Xe(r,o){if(r&1&&(a(0),D(1,"lspDate")),r&2){let e=c().$implicit;h(" \xB7 Last used ",A(1,1,e.lastUsedAt)," ")}}function Ze(r,o){r&1&&a(0," Removing\u2026 ")}function et(r,o){r&1&&a(0," Remove ")}function tt(r,o){if(r&1){let e=x();i(0,"div",74)(1,"div",75),a(2),n(),i(3,"div",52)(4,"div",76)(5,"span",53),a(6),n(),S(7,"lsp-chip",77
1),_(8,Qe,1,0,"lsp-chip",78),n(),i(9,"p",54),a(10),_(11,Xe,2,3),n()(),i(12,"button",79),m("click",function(){let l=v(e).$implicit,d=c(5);return C(d.removeMethod(l.id))}),_(13,Ze,1,0)(14,et,1,0),n()()}if(r&2){let e=o.$implicit,t=c(5);s(2),h(" ",e.type==="TOTP"?"\u{1F4F1}":e.type==="SMS"?"\u{1F4AC}":"\u2709\uFE0F"," "),s(4),g(e.name),s(),p("status",e.verified?"ACTIVE":"PENDING")("label",e.verified?"Verified":"Pending"),s(),f(e.isPrimary?8:-1),s(2),N(" ",e.type," \xB7 ",e.identifier," "),s(),f(e.lastUsedAt?11:-1),s(),p("disabled",t.removingMethod()===e.id),s(),f(t.removingMethod()===e.id?13:14)}}function it(r,o){if(r&1&&(i(0,"div")(1,"h4",44),a(2,"MFA Methods"),n(),i(3,"div",73),T(4,tt,15,10,"div",74,K),n()()),r&2){let e=c(4);s(4),I(e.mfaStatus().methods)}}function nt(r,o){if(r&1){let e=x();i(0,"button",80),m("click",function(){v(e);let l=c(4);return C(l.disableMfa())}),a(1),n()}if(r&2){let e=c(4);p("disabled",e.disablingMfa()),s(),h(" ",e.disablingMfa()?"Disabling\u2026":"Force Disable MFA"," ")}}function ot(r,o){if(r&1&&(i(0,"code",84),a(1),n()),r&2){let e=o.$implicit;s(),g(e)}}function rt(r,o){if(r&1){let e=x();i(0,"div",71)(1,"h4",81),a(2,"New Backup Codes Generated"),n(),i(3,"p",82),a(4," Share these codes securely with the user. They will only be shown once. "),n(),i(5,"div",83),T(6,ot,2,1,"code",84,Z),n(),i(8,"button",43),m("click",function(){v(e);let l=c(4);return C(l.copyBackupCodes())}),a(9,"Copy all codes"),n()()}if(r&2){let e=c(4);s(6),I(e.generatedBackupCodes())}}function at(r,o){if(r&1){let e=x();i(0,"div",72)(1,"h4",85),a(2,"Override Code Generated"),n(),i(3,"p",82),a(4," Share this code securely with the user. It will only be shown once. "),n(),i(5,"div",86)(6,"code",87),a(7),n(),i(8,"button",40),m("click",function(){v(e);let l=c(4);return C(l.copyOverrideCode())}),a(9,"Copy"),n()(),i(10,"p",88),a(11),D(12,"lspDate"),n()()}if(r&2){let e=c(4);s(7),g(e.generatedOverrideCode().code),s(4),h(" Expires: ",V(12,2,e.generatedOverrideCode().expiresAt,"long")," ")}}function st(r,o){if(r&1){let e=x();i(0,"div",64)(1,"div")(2,"h4",65),a(3),n(),i(4,"p",66),a(5),n()()(),_(6,it,6,0,"div"),i(7,"div")(8,"h4",44),a(9,"Admin Actions"),n(),i(10,"div",67)(11,"button",68),m("click",function(){v(e);let l=c(3);return C(l.showOverrideCodeModal.set(!0))}),a(12," Generate Override Code "),n(),i(13,"button",69),m("click",function(){v(e);let l=c(3);return C(l.generateBackupCodes())}),a(14),n(),_(15,nt,2,2,"button",70),n()(),_(16,rt,10,0,"div",71),_(17,at,13,5,"div",72)}if(r&2){let e=c(3);ee("border-color",e.mfaStatus().enabled?"var(--aqua)":"var(--stroke)"),s(3),h(" ",e.mfaStatus().enabled?"MFA Enabled":"MFA Not Enabled"," "),s(2),N(" ",e.mfaStatus().methods.length," method(s) configured \xB7 ",e.mfaStatus().backupCodesRemaining," backup codes remaining "),s(),f(e.mfaStatus().methods.length>0?6:-1),s(7),p("disabled",e.generatingBackupCodes()),s(),h(" ",e.generatingBackupCodes()?"Generating\u2026":"Generate New Backup Codes"," "),s(),f(e.mfaStatus().enabled?15:-1),s(),f(e.generatedBackupCodes().length>0?16:-1),s(),f(e.generatedOverrideCode()?17:-1)}}function lt(r,o){if(r&1){let e=x();i(0,"div",62)(1,"p",89),a(2,"Unable to load MFA status"),n(),i(3,"button",40),m("click",function(){v(e);let l=c(3);return C(l.loadMfaStatus())}),a(4,"Retry"),n()()}}function dt(r,o){if(r&1&&(i(0,"div",39),_(1,Je,2,0,"div",17)(2,st,18,11)(3,lt,5,0,"div",62),n()),r&2){let e=c(2);s(),f(e.loadingMfa()?1:e.mfaStatus()?2:3)}}function ct(r,o){if(r&1){let e=x();i(0,"lsp-detail-header",21),_(1,Oe,2,0,"button",22),X(2,Ae,2,0,"button",23)(3,Fe,2,1,"button",23)(4,Pe,2,0,"button",24),n(),_(5,Le,5,1,"div",25),i(6,"div",26)(7,"div",27),_(8,Be,1,2,"img",28)(9,ze,2,1,"div",29),i(10,"div",30),S(11,"lsp-chip",31),i(12,"span",32),a(13),n(),_(14,je,2,0,"button",33),_(15,We,2,0,"span",34),_(16,$e,2,0,"span",35),n()()(),i(17,"lsp-segments",36),m("selectedChange",function(l){v(e);let d=c();return C(d.onTabChange(l))}),n(),i(18,"div",26),_(19,qe,56,15,"div",37)(20,He,3,0,"div",38)(21,Ye,3,0,"div",38)(22,dt,4,1,"div",39),n()}if(r&2){let e,t=c();p("crumbs",t.crumbs)("headTitle",t.user().name)("status",t.user().status)("subtitle",t.user().email),s(),f(t.canImpersonate()?1:-1),s(),p("appHasPermission",O(18,H,t.Action.Update,t.Subject.User)),s(),p("appHasPermission",O(21,H,t.Action.Update,t.Subject.User)),s(),p("appHasPermission",O(24,H,t.Action.Delete,t.Subject.User)),s(),f(t.suspendError()?5:-1),s(3),f(t.user().avatar?8:9),s(3),p("status",t.user().status),s(2),g(t.user().role),s(),f(t.canChangeRole()?14:-1),s(),f(t.user().emailVerified?15:-1),s(),f(t.user().twoFactorEnabled?16:-1),s(),p("segments",t.tabSegments)("selected",t.activeTab()),s(2),f((e=t.activeTab())==="details"?19:e==="tenants"?20:e==="activity"?21:e==="security"?22:-1)}}function pt(r,o){r&1&&(i(0,"div",1),a(1,"User not found"),n())}function mt(r,o){r&1&&(i(0,"div",17),S(1,"div",63),n())}function ut(r,o){if(r&1&&(i(0,"option",91),a(1),n()),r&2){let e=o.$implicit;p("value",e.id),s(),g(e.name)}
1}function gt(r,o){if(r&1&&(i(0,"lsp-field-error"),a(1),n()),r&2){let e=c(2);s(),g(e.roleChangeError())}}function _t(r,o){if(r&1){let e=x();i(0,"div",7)(1,"label",8),a(2,"Role"),n(),i(3,"select",11),k("ngModelChange",function(l){v(e);let d=c();return M(d.selectedRoleId,l)||(d.selectedRoleId=l),C(l)}),i(4,"option",90),a(5,"Select a role"),n(),T(6,ut,2,2,"option",91,K),n()(),_(8,gt,2,1,"lsp-field-error")}if(r&2){let e=c();s(3),w("ngModel",e.selectedRoleId),s(3),I(e.availableRoles()),s(2),f(e.roleChangeError()?8:-1)}}function ft(r,o){r&1&&(i(0,"lsp-field-error"),a(1,"Reason must be at least 10 characters"),n())}function vt(r,o){if(r&1){let e=x();i(0,"app-user-suspend-dialog",92),m("cancelled",function(){v(e);let l=c();return C(l.showSuspendDialog.set(!1))})("suspended",function(){v(e);let l=c();return C(l.onUserSuspended())}),n()}if(r&2){let e=c();p("userId",e.user().id)("userName",e.user().name)}}function Ct(r,o){if(r&1){let e=x();i(0,"app-user-delete-dialog",93),m("cancelled",function(){v(e);let l=c();return C(l.showDeleteDialog.set(!1))})("deleted",function(){v(e);let l=c();return C(l.onUserDeleted())}),n()}if(r&2){let e=c();p("userId",e.user().id)("userName",e.user().name)}}var Te=class r{destroy$=new J;route=b(ne);router=b(oe);adminStatusService=b(R);userService=b(Se);authService=b(me);impersonationService=b(ye);roleService=b(Me);adminMfaService=b(we);confirmService=b(De);Action=ce;Subject=pe;crumbs=[{label:"Users",link:"/organization/users"}];tabSegments=[{label:"Details",value:"details"},{label:"Tenants",value:"tenants"},{label:"Activity",value:"activity"},{label:"Security",value:"security"}];loading=u(!0);user=u(null);tenantMemberships=u([]);activityLogs=u([]);activeTab=u("details");loadingMfa=u(!1);mfaStatus=u(null);removingMethod=u(null);disablingMfa=u(!1);generatingBackupCodes=u(!1);generatedBackupCodes=u([]);showOverrideCodeModal=u(!1);overrideCodeReason=u("");overrideCodeExpiry=u(24);generatingOverrideCode=u(!1);generatedOverrideCode=u(null);showRoleSelector=u(!1);availableRoles=u([]);loadingRoles=u(!1);selectedRoleId=u("");changingRole=u(!1);roleChangeError=u(null);showSuspendDialog=u(!1);showDeleteDialog=u(!1);suspendError=u(null);userId=F(()=>this.route.snapshot.paramMap.get("id"));canChangeRole=F(()=>{let o=this.authService.currentUser(),e=this.user();return!(!o||!this.authService.isTenantAdmin()||e&&o.id===e.id)});canImpersonate=F(()=>{let o=this.authService.currentUser(),e=this.user();return!o||!e||o.id===e.id?!1:o.isSuperAdmin?!0:this.authService.isTenantAdmin()});impersonating=u(!1);showImpersonationModal=u(!1);impersonationReason=u("");constructor(){ie(()=>{this.showRoleSelector()&&this.loadAvailableRoles()})}ngOnInit(){this.loadUserData()}onTabChange(o){this.activeTab.set(o),o==="security"&&this.loadMfaStatus()}loadAvailableRoles(){this.loadingRoles.set(!0),this.roleChangeError.set(null),this.roleService.list().pipe(y(this.destroy$)).subscribe({next:o=>{this.availableRoles.set(o||[]),this.loadingRoles.set(!1);let e=o?.find(t=>t.name===this.user()?.role);e&&this.selectedRoleId.set(e.id)},error:o=>{console.error("Failed to load roles:",o),this.roleChangeError.set("Failed to load available roles. Please try again."),this.loadingRoles.set(!1)}})}changeUserRole(){let o=this.user()?.id,e=this.selectedRoleId();!o||!e||(this.changingRole.set(!0),this.roleChangeError.set(null),this.userService.updateRole(o,{roleId:e}).pipe(y(this.destroy$)).subscribe({next:()=>{this.changingRole.set(!1),this.showRoleSelector.set(!1),this.loadUserData()},error:t=>{console.error("Failed to update user role:",t),this.roleChangeError.set(t.error?.message||"Failed to update user role. Please try again."),this.changingRole.set(!1)}}))}loadUserData(){let o=this.userId();if(!o){this.loading.set(!1);return}this.loading.set(!0),this.userService.getById(o).pipe(y(this.destroy$)).subscribe({next:e=>{let t=e,l=t.tenantUser,d=[t.firstName,t.lastName].filter(Boolean).join(" ")||t.email.split("@")[0];this.user.set({id:t.id,name:d,email:t.email,avatar:t.avatar??"",initial:this.initialFor(t),role:l?.role?.name||"Unknown",status:l?.status||"Unknown",phone:t.phone||"",timezone:"",createdAt:new Date(t.createdAt||Date.now()),lastLogin:t.lastLoginAt?new Date(t.lastLoginAt):new Date,emailVerified:t.emailVerified||!1,twoFactorEnabled:t.twoFactorEnabled||!1}),l?this.tenantMemberships.set([{tenantId:l.id||"",tenantName:"Current Tenant",role:l.role?.name||"Unknown",joinedAt:new Date(l.createdAt||Date.now()),status:l.status||"Unknown"}]):this.tenantMemberships.set([]),this.activityLogs.set([]),this.loading.set(!1)},error:e=>{console.error("Error loading user:",e),this.loading.set(!1)}})}editUser(){}openImpersonationModal(){this.showImpersonationModal.set(!0),this.impersonationReason.set("")}closeImpersonationModal(){this.showImpersonationModal.set(!1),this.impersonationReason.set("")}startImpersonation(){let o=this.user()?.id,e=this.impersonationReason();!o||e.length<10||(this.impersonating.set(!0),this.impersonationService.startImpersonation(o,e).pipe(y(this.destroy$)).subscribe({next:()=>{this.impersonating.set(!1),this.closeImpersonationModal(),this.router.navigate(["/dashboard"])},error:t=>{console.error("Failed to start impersonation:",t),this.impersonating.set(!1),this.confirmService.confirm({title:"Error",message:t.error?.message||"Failed to start impersonation. Please try again.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})}}))}suspendUser(){let o=this.user();o&&(o.status==="SUSPENDED"?this.confirmService.confirm({title:"Unsuspend User",message:`Are you sure you want to unsuspend ${o.name}? They will regain access to the system.`,confirmText:"Unsuspend",cancelText:"Cancel",confirmVariant:"primary"}).then(e=>{e&&(this.suspendError.set(null),this.adminStatusService.unsuspendUser(o.id).subscribe({next:()=>{this.loadUserData()},error:t=>{console.error("Failed to unsuspend user:",t),this.suspendError.set(t.error?.message||"Failed to unsuspend user")}}))}):this.showSuspendDialog.set(!0))}onUserSuspended(){this.showSuspendDialog.set(!1),this.loadUserData()}deleteUser(){this.user()&&this.showDeleteDialog.set(!0)}onUserDeleted(){this.showDeleteDialog.set(!1),this.router.navigate(["/admin/users"])}loadMfaStatus(){let o=this.user()?.id;o&&(this.loadingMfa.set(!0),this.generatedBackupCodes.set([]),this.generatedOverrideCode.set(null),this.adminMfaService.getUserMfaStatus(o).pipe(y(this.destroy$)).subscribe({next:e=>{this.mfaStatus.set(e),this.loadingMfa.set(!1)},error:e=>{console.error("Failed to load MFA status:",e),this.mfaStatus.set(null),this.loadingMfa.set(!1)}}))}removeMethod(o){let e=this.user()?.id;e&&(this.removingMethod.set(o),this.adminMfaService.deleteUserMethod(e,o).pipe(y(this.destroy$)).subscribe({next:()=>{this.removingMethod.set(null),this.loadMfaStatus()},error:t=>{console.error("Failed to remove MFA method:",t),this.removingMethod.set(null),this.confirmService.confirm({title:"Error",message:t.error?.message||"Failed to remove MFA method.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})}}))}disableMfa(){return G(this,null,function*(){let o=this.user()?.id,e=this.user()?.name;!o||!(yield this.confirmService.confirm({title:"Disable MFA",message:`Are you sure you want to disable MFA for ${e}? This will remove all their MFA methods and backup codes.`,confirmText:"Disable MFA",cancelText:"Cancel",confirmVariant:"danger"}))||(this.disablingMfa.set(!0),this.adminMfaService.forceDisableMfa(o).pipe(y(this.destroy$)).subscribe({next:()=>{this.disablingMfa.set(!1),this.loadMfaStatus()},error:l=>{console.error("Failed to disable MFA:",l),this.disablingMfa.set(!1),this.confirmService.confirm({title:"Error",message:l.error?.message||"Failed to disable MFA.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})}}))})}generateBackupCodes(){let o=this.user()?.id;o&&(this.generatingBackupCodes.set(!0),this.adminMfaService.generateUserBackupCodes(o).pipe(y(this.destroy$)).subscribe({next:e=>{this.generatingBackupCodes.set(!1),this.generatedBackupCodes.set(e.codes),this.loadMfaStatus()},error:e=>{console.error("Failed to generate backup codes:",e),this.generatingBackupCodes.set(!1),this.confirmService.confirm({title:"Error",message:e.error?.message||"Failed to generate backup codes.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})}}))}createOverrideCode(){let o=this.user()?.id,e=this.overrideCodeReason(),t=this.overrideCodeExpiry();!o||e.length<5||(this.generatingOverrideCode.set(!0),this.adminMfaService.createOverrideCode(o,{reason:e,expiryHours:t}).pipe(y(this.destroy$)).subscribe({next:l=>{this.generatingOverrideCode.set(!1),this.showOverrideCodeModal.set(!1),this.generatedOverrideCode.set(l),this.overrideCodeReason.set("")},error:l=>{console.error("Failed to create override code:",l),this.generatingOverrideCode.set(!1),this.confirmService.confirm({title:"Error",message:l.error?.message||"Failed to create override code.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})}}))}copyBackupCodes(){let o=this.generatedBackupCodes().join(`
2`);navigator.clipboard.writeText(o).then(()=>{this.confirmService.confirm({title:"Copied",message:"Backup codes copied to clipboard.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})})}copyOverrideCode(){let o=this.generatedOverrideCode()?.code;o&&navigator.clipboard.writeText(o).then(()=>{this.confirmService.confirm({title:"Copied",message:"Override code 
2copied to clipboard.",confirmText:"OK",cancelText:"",confirmVariant:"primary"})})}canDeactivate(){return G(this,null,function*(){return this.changingRole()||this.impersonating()||this.generatingBackupCodes()||this.generatingOverrideCode()||this.disablingMfa()?this.confirmService.confirm({title:"Operation in Progress",message:"An operation is currently in progress. Are you sure you want to leave?",confirmText:"Leave",cancelText:"Stay",confirmVariant:"warning"}):this.showRoleSelector()&&this.selectedRoleId()?this.confirmService.confirm({title:"Unsaved Changes",message:"You have selected a new role but have not saved. Are you sure you want to leave?",confirmText:"Leave",cancelText:"Stay",confirmVariant:"warning"}):!0})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}initialFor(o){let e=o.firstName?.trim();if(e)return e[0].toUpperCase();let t=o.lastName?.trim();return t?t[0].toUpperCase():o.email[0].toUpperCase()}static \u0275fac=function(e){return new(e||r)};static \u0275cmp=U({type:r,selectors:[["app-user-detail"]],decls:74,vars:28,consts:[[1,"flex","flex-col","gap-4"],[2,"text-align","center","padding","48px","color","var(--faint)"],["modalTitle","Generate Override Code","size","sm",3,"openChange","open"],[2,"font-size","var(--t-sm)","color","var(--dim)","margin-bottom","12px"],[2,"color","var(--txt)"],[1,"info-box",2,"border-color","var(--gold)","margin-bottom","16px"],[2,"font-size","var(--t-sm)","color","var(--gold)"],[1,"lsp-field"],[1,"lsp-label"],[1,"lsp-req"],["rows","2","placeholder","e.g., User lost phone with authenticator app",1,"lsp-textarea",3,"ngModelChange","ngModel"],[1,"lsp-select",3,"ngModelChange","ngModel"],[3,"ngValue"],["modal-footer","",1,"flex","justify-end","gap-2"],["type","button",1,"lsp-btn-g",3,"click","disabled"],["type","button",1,"lsp-btn-p",3,"click","disabled"],["modalTitle","Change User Role","size","sm",3,"openChange","open"],[1,"flex","items-center","justify-center","py-8"],["modalTitle","Impersonate User","size","sm",3,"openChange","open"],["rows","3","placeholder","e.g., Investigating reported issue with user account settings...",1,"lsp-textarea",3,"ngModelChange","ngModel"],[3,"userId","userName"],[3,"crumbs","headTitle","status","subtitle"],["type","button",1,"lsp-btn-g"],["type","button","class","lsp-btn-g",3,"click",4,"appHasPermission"],["type","button","class","lsp-btn-p",3,"click",4,"appHasPermission"],["role","alert",2,"padding","10px 14px","border-radius","var(--r-el)","border","1px solid rgb(var(--rose-rgb, 239 68 68) / 0.35)","background","rgb(var(--rose-rgb, 239 68 68) / 0.07)","color","var(--txt)","font-size","var(--t-sm)","display","flex","align-items","center","justify-content","space-between","gap","12px"],[1,"detail-card"],[1,"flex","flex-col","sm:flex-row","items-start","gap-5"],[1,"w-20","h-20","rounded-full","object-cover",2,"border","3px solid var(--stroke)",3,"src","alt"],["aria-hidden","true",1,"w-20","h-20","rounded-full","flex","items-center","justify-center","flex-none",2,"border","3px solid var(--stroke)","background","linear-gradient(135deg, var(--rose), var(--indigo))","color","#fff","font","700 var(--t-2xl) var(--sh-fdisp), sans-serif"],[1,"flex","flex-wrap","items-center","gap-2"],[3,"status"],[1,"chip-plain"],["type","button",1,"lsp-row-act"],[1,"chip-plain",2,"color","var(--aqua)"],[1,"chip-plain",2,"color","var(--indigo)"],["ariaLabel","User detail tabs",3,"selectedChange","segments","selected"],[1,"grid","grid-cols-1","md:grid-cols-2","gap-6"],[1,"flex","flex-col","gap-3"],[1,"flex","flex-col","gap-5"],["type","button",1,"lsp-btn-g",3,"click"],["type","button",1,"lsp-btn-p",3,"click"],["type","button",1,"lsp-row-act",2,"white-space","nowrap",3,"click"],["type","button",1,"lsp-row-act",3,"click"],[1,"sect-title"],[1,"kv-list"],[1,"kv-row"],[1,"kv-key"],[1,"kv-val"],[1,"kv-val","font-mono"],[1,"member-row"],[1,"member-avatar"],[1,"flex-1","min-w-0"],[2,"font-weight","500","color","var(--txt)"],[2,"font-size","var(--t-xs)","color","var(--faint)"],[1,"lsp-row-act",3,"routerLink"],[1,"act-row"],[1,"act-icon"],[1,"flex","items-start","justify-between","gap-4"],[2,"font-size","var(--t-sm)","color","var(--dim)","margin-top","2px"],[2,"display","flex","gap","12px","margin-top","6px","font-size","var(--t-xs)","color","var(--faint)"],[2,"font-size","var(--t-sm)","color","var(--faint)","white-space","nowrap"],[1,"flex","flex-col","items-center","py-8","gap-3"],[1,"spinner"],[1,"mfa-banner"],[2,"font-weight","600","color","var(--txt)"],[2,"font-size","var(--t-sm)","color","var(--dim)"],[1,"grid","grid-cols-1","sm:grid-cols-2","gap-3"],["type","button",1,"admin-action-btn",3,"click"],["type","button",1,"admin-action-btn",3,"click","disabled"],["type","button",1,"admin-action-btn",2,"color","var(--rose)","border-color","var(--rose)",3,"disabled"],[1,"info-box",2,"border-color","var(--aqua)"],[1,"info-box",2,"border-color","var(--gold)"],[1,"flex","flex-col","gap-2"],[1,"method-row"],[1,"method-icon"],[1,"flex","items-center","gap-2","flex-wrap"],[3,"status","label"],["status","PRIMARY","label","Primary"],["type","button","lspTip","Remove method",1,"lsp-row-act",2,"color","var(--rose)",3,"click","disabled"],["type","button",1,"admin-action-btn",2,"color","var(--rose)","border-color","var(--rose)",3,"click","disabled"],[2,"font-weight","600","color","var(--aqua)","margin-bottom","6px"],[2,"font-size","var(--t-sm)","color","var(--dim)","margin-bottom","10px"],[1,"grid","grid-cols-2","sm:grid-cols-5","gap-2","mb-3"],[1,"backup-code"],[2,"font-weight","600","color","var(--gold)","margin-bottom","6px"],[1,"flex","items-center","gap-3"],[1,"flex-1","override-code"],[2,"font-size","var(--t-xs)","color","var(--faint)","margin-top","8px"],[2,"color","var(--faint)"],["value",""],[3,"value"],[3,"cancelled","suspended","userId","userName"],[3,"cancelled","deleted","userId","userName"]],template:function(e,t){if(e&1&&(i(0,"div",0),_(1,Ne,2,0)(2,ct,23,27)(3,pt,2,0,"div",1),n(),i(4,"lsp-modal",2),k("openChange",function(d){return M(t.showOverrideCodeModal,d)||(t.showOverrideCodeModal=d),d}),i(5,"p",3),a(6," Create a one-time override code for "),i(7,"strong",4),a(8),n(),a(9," to bypass MFA. "),n(),i(10,"div",5)(11,"p",6)(12,"strong"),a(13,"Warning:"),n(),a(14," This code allows MFA bypass. Use only when the user has lost access to all MFA methods. "),n()(),i(15,"div",0)(16,"div",7)(17,"label",8),a(18,"Reason "),i(19,"span",9),a(20,"*"),n()(),i(21,"textarea",10),m("ngModelChange",function(d){return t.overrideCodeReason.set(d)}),n()(),i(22,"div",7)(23,"label",8),a(24,"Expiry (hours)"),n(),i(25,"select",11),m("ngModelChange",function(d){return t.overrideCodeExpiry.set(d)}),i(26,"option",12),a(27,"1 hour"),n(),i(28,"option",12),a(29,"4 hours"),n(),i(30,"option",12),a(31,"24 hours"),n(),i(32,"option",12),a(33,"48 hours"),n(),i(34,"option",12),a(35,"7 days"),n()()()(),i(36,"div",13)(37,"button",14),m("click",function(){return t.showOverrideCodeModal.set(!1)}),a(38,"Cancel"),n(),i(39,"button",15),m("click",function(){return t.createOverrideCode()}),a(40),n()()(),i(41,"lsp-modal",16),k("openChange",function(d){return M(t.showRoleSelector,d)||(t.showRoleSelector=d),d}),i(42,"p",3),a(43),n(),_(44,mt,2,0,"div",17)(45,_t,9,2),i(46,"div",13)(47,"button",14),m("click",function(){return t.showRoleSelector.set(!1)}),a(48,"Cancel"),n(),i(49,"button",15),m("click",function(){return t.changeUserRole()}),a(50),n()()(),i(51,"lsp-modal",18),k("openChange",function(d){return M(t.showImpersonationModal,d)||(t.showImpersonationModal=d),d}),i(52,"p",3),a(53," You are about to impersonate "),i(54,"strong",4),a(55),n(),a(56,". Please provide a reason for this action (required for audit purposes). "),n(),i(57,"div",5)(58,"p",6)(59,"strong"),a(60,"Warning:"),n(),a(61," All actions taken while impersonating will be logged with your original identity. "),n()(),i(62,"div",7)(63,"label",8),a(64,"Reason for Impersonation"),n(),i(65,"textarea",19),m("ngModelChange",function(d){return t.impersonationReason.set(d)}),n(),_(66,ft,2,0,"lsp-field-error"),n(),i(67,"div",13)(68,"button",14),m("click",function(){return t.closeImpersonationModal()}),a(69,"Cancel"),n(),i(70,"button",15),m("click",function(){return t.startImpersonation()}),a(71),n()()(),_(72,vt,1,2,"app-user-suspend-dialog",20),_(73,Ct,1,2,"app-user-delete-dialog",20)),e&2){let l,d,Y;s(),f(t.loading()?1:t.user()?2:3),s(3),w("open",t.showOverrideCodeModal),s(4),g((l=t.user())==null?null:l.name),s(13),p("ngModel",t.overrideCodeReason()),s(4),p("ngModel",t.overrideCodeExpiry()),s(),p("ngValue",1),s(2),p("ngValue",4),s(2),p("ngValue",24),s(2),p("ngValue",48),s(2),p("ngValue",168),s(3),p("disabled",t.generatingOverrideCode()),s(2),p("disabled",t.generatingOverrideCode()||t.overrideCodeReason().length<5),s(),h(" ",t.generatingOverrideCode()?"Generating\u2026":"Generate Code"," "),s(),w("open",t.showRoleSelector),s(2),h(" Select a new role for ",(d=t.user())==null?null:d.name," "),s(),f(t.loadingRoles()?44:45),s(3),p("disabled",t.changingRole()),s(2),p("disabled",t.changingRole()||!t.selectedRoleId()),s(),h(" ",t.changingRole()?"Saving\u2026":"Save"," "),s(),w("open",t.showImpersonationModal),s(4),g((Y=t.user())==null?null:Y.name),s(10),p("ngModel",t.impersonationReason()),s(),f(t.impersonationReason().length>0&&t.impersonationReason().length<10?66:-1),s(2),p("disabled",t.impersonating()),s(2),p("disabled",t.impersonating()||t.impersonationReason().length<10),s(),h(" ",t.impersonating()?"Starting\u2026":"Start Impersonation"," "),s(),f(t.showSuspendDialog()?72:-1),s(),f(t.showDeleteDialog()?73:-1)}},dependencies:[he,j,le,de,L,se,B,z,ae,re,ke,be,$,q,ge,ue,fe,ve,_e,Ce,xe],styles:["[_nghost-%COMP%]{display:block}.detail-card[_ngcontent-%COMP%]{padding:24px;background:var(--card);border:1px solid var(--stroke);border-radius:var(--r)}.sect-title[_ngcontent-%COMP%]{font:600 var(--t-md) var(--sh-fdisp),sans-serif;color:var(--txt);margin:0 0 12px}.kv-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.kv-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.kv-key[_ngcontent-%COMP%]{font-size:var(--t-xs);color:var(--faint)}.kv-val[_ngcontent-%COMP%]{font-size:var(--t-sm);font-weight:500;color:var(--txt)}.chip-plain[_ngcontent-%COMP%]{display:inline-flex;align-items:center;padding:2px 8px;border-radius:999px;background:var(--glass);border:1px solid var(--stroke);font-size:var(--t-xs);color:var(--dim)}.member-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:16px;padding:12px;border-radius:var(--r-el);background:var(--glass);border:1px solid var(--stroke)}
2.member-avatar[_ngcontent-%COMP%]{width:48px;height:48px;border-radius:var(--r-el);background:linear-gradient(135deg,var(--indigo),var(--aqua));display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:var(--t-lg);flex-shrink:0}.act-row[_ngcontent-%COMP%]{display:flex;gap:16px;padding-bottom:16px;border-bottom:1px solid var(--stroke)}.act-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.act-icon[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:999px;background:var(--glass);border:1px solid var(--stroke);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:18px}.mfa-banner[_ngcontent-%COMP%]{padding:16px;border-radius:var(--r-el);background:var(--glass);border:1px solid}.method-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px;border-radius:var(--r-el);background:var(--glass);border:1px solid var(--stroke)}.method-icon[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:var(--r-el);background:var(--card2);border:1px solid var(--stroke2);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}.admin-action-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 16px;border-radius:var(--r-el);background:var(--glass);border:1px solid var(--stroke);color:var(--dim);font-size:var(--t-sm);font-weight:500;cursor:pointer;transition:background .15s ease,border-color .15s ease}.admin-action-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--glass2);border-color:var(--stroke2)}.admin-action-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.info-box[_ngcontent-%COMP%]{padding:14px;border-radius:var(--r-el);background:var(--glass);border:1px solid}.backup-code[_ngcontent-%COMP%]{display:block;padding:6px 8px;background:var(--card);border:1px solid var(--stroke);border-radius:var(--r-el);font-family:monospace;font-size:var(--t-sm);text-align:center;color:var(--txt)}.override-code[_ngcontent-%COMP%]{display:block;padding:12px 16px;background:var(--card);border:1px solid var(--stroke);border-radius:var(--r-el);font-family:monospace;font-size:var(--t-lg);text-align:center;color:var(--txt)}.spinner[_ngcontent-%COMP%]{width:32px;height:32px;border-radius:999px;border:3px solid var(--stroke);border-top-color:var(--indigo);animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"],changeDetection:0})};export{Te as UserDetailComponent};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.