1import{a as Ee}from"./chunk-LG3EDHI2.js";import{a as we}from"./chunk-7WFQQHRP.js";import{a as Re}from"./chunk-KKTXMOQN.js";import"./chunk-GUP5TAHO.js";import"./chunk-NU2RSDJ3.js";import{a as ye}from"./chunk-LFZXS3XK.js";import{a as Se}from"./chunk-IVKITQZ3.js";import{a as be}from"./chunk-O7RNIGHW.js";import{l as fe,m as xe,n as he}from"./chunk-334G5XJU.js";import"./chunk-WZNSDGDU.js";import"./chunk-BVHYP4DG.js";import"./chunk-2L4HTWJG.js";import"./chunk-BYTQWEIR.js";import"./chunk-D4QLXQ4H.js";import"./chunk-G3TGCGTL.js";import"./chunk-234HU6EG.js";import{b as pe,c as _e,f as ge,n as ue,q as Ce,x as ve}from"./chunk-AHNLP7LF.js";import"./chunk-EGRTEF32.js";import"./chunk-IN7WO2VB.js";import"./chunk-BSJVWSZ5.js";import"./chunk-COJSXH5T.js";import{q as me}from"./chunk-7YJYMVLT.js";import{b as re,c as se,j as de,k as ce}from"./chunk-ZWFNLA3Q.js";import"./chunk-ZKSAUKTD.js";import{D as le,b as ie,c as ne,f as oe,k as ae}from"./chunk-HPM5D2QR.js";import"./chunk-7VKW5GSR.js";import"./chunk-ILZ2WZ2Y.js";import"./chunk-LBHGEV75.js";import{i as X,l as Z,m as ee,u as te}from"./chunk-JW7NPCB3.js";import"./chunk-JCHE3Z7A.js";import"./chunk-RSOFTNO4.js";import"./chunk-FCXDAJ5A.js";import"./chunk-L5L7JCQV.js";import{$b as E,B as H,Ba as m,Dc as J,Fb as N,Hc as r,Ic as v,Jc as D,Kc as O,Rc as M,Sc as T,Tc as k,Wb as f,Xb as x,Zb as G,_b as w,aa as R,ac as p,bc as o,cb as V,cc as a,cd as K,dc as y,dd as Q,ed as I,f as B,fb as Y,hb as l,hd as L,jd as F,la as b,mc as h,qc as C,sa as _,sc as c,sd as A,ta as g,zb as q}from"./chunk-E725QQR6.js";import{a as U,b as j,i as P}from"./chunk-RKIXE2YC.js";var z=(i,t)=>[i,t],Ue=()=>[1,2,3,4,5],Ie=i=>["/organization/users",i],Ae=(i,t)=>t.name,De=(i,t)=>t.value,Te=(i,t)=>t.id;function Pe(i,t){i&1&&y(0,"lsp-skeleton",10)(1,"lsp-skeleton-card")(2,"lsp-skeleton-card")}function Ve(i,t){if(i&1){let e=h();o(0,"button",8),C("click",function(){_(e);let s=c(3);return g(s.editRole())}),r(1,"Edit"),a()}}function Ne(i,t){if(i&1){let e=h();o(0,"button",21),C("click",function(){_(e);let s=c(3);return g(void s.deleteRole())}),r(1,"Delete"),a()}}function Oe(i,t){if(i&1&&N(0,Ve,2,0,"button",19)(1,Ne,2,0,"button",20),i&2){let e=c(2);p("appHasPermission",I(2,z,e.Action.Update,e.Subject.Role)),l(),p("appHasPermission",I(5,z,e.Action.Delete,e.Subject.Role))}}function Le(i,t){if(i&1){let e=h();o(0,"lsp-form-shell",22),C("save",function(){_(e);let s=c(2);return g(s.saveRole())})("cancelled",function(){_(e);let s=c(2);return g(s.cancelEdit())}),o(1,"div",0)(2,"div",23)(3,"label",24),r(4,"Role Name "),o(5,"span",25),r(6,"*"),a()(),o(7,"input",26),k("ngModelChange",function(s){_(e);let d=c(2);return T(d.editedRole.name,s)||(d.editedRole.name=s),g(s)}),a()(),o(8,"div",23)(9,"label",24),r(10,"Description"),a(),o(11,"textarea",27),k("ngModelChange",function(s){_(e);let d=c(2);return T(d.editedRole.description,s)||(d.editedRole.description=s),g(s)}),a()()()()}if(i&2){let e=c(2);p("saving",e.savingRole())("submitError",e.roleEditError()),l(7),M("ngModel",e.editedRole.name),l(4),M("ngModel",e.editedRole.description)}}function Fe(i,t){i&1&&(o(0,"div",28)(1,"h3",30),r(2,"Owner Role"),a(),o(3,"p",31),r(4," The Owner role has full access and cannot be modified. "),a()())}function ze(i,t){i&1&&y(0,"lsp-skeleton-list-row")}function We(i,t){i&1&&(o(0,"div",29),w(1,ze,1,0,"lsp-skeleton-list-row",null,G),a()),i&2&&(l(),E(K(0,Ue)))}function $e(i,t){if(i&1&&(o(0,"span",41),r(1),a()),i&2){let e=t.$implicit,n=c(5);l(),v(n.getActionName(e.value))}}function je(i,t){if(i&1){let e=h();o(0,"label",43)(1,"input",44),k("ngModelChange",function(s){let d=_(e).$implicit;return T(d.enabled,s)||(d.enabled=s),g(s)}),C("change",function(){_(e);let s=c(5);return g(s.onClaimChange())}),a()()}if(i&2){let e=t.$implicit,n=c(5);l(),M("ngModel",e.enabled),p("disabled",n.isOwnerRole())}}function Be(i,t){if(i&1&&(o(0,"div",34)(1,"div",36)(2,"div",37)(3,"span",38),r(4),a(),o(5,"span",39),r(6),a()(),o(7,"div",40),w(8,$e,2,1,"span",41,De),a()(),o(10,"div",42),w(11,je,2,2,"label",43,De),a()()),i&2){let e=t.$implicit,n=c(4);l(4),v(e.name),l(2),O("",n.getEnabledClaimCount(e),"/",e.claims.length),l(2),E(e.claims),l(3),E(e.claims)}}function He(i,t){if(i&1){let e=h();o(0,"div",35)(1,"span",45),r(2,"You have unsaved claim changes"),a(),o(3,"div",46)(4,"button",8),C("click",function(){_(e);let s=c(4);return g(s.resetClaims())}),r(5,"Reset"),a(),o(6,"button",9),C("click",function(){_(e);let s=c(4);return g(s.saveClaims())}),r(7),a()()()}if(i&2){let e=c(4);l(6),p("disabled",e.savingClaims()),l(),D(" ",e.savingClaims()?"Saving\u2026":"Save Claims"," ")}}function Ye(i,t){if(i&1&&(o(0,"div",32)(1,"div",33),w(2,Be,13,3,"div",34,Ae),a()(),f(4,He,8,2,"div",35)),i&2){let e=c(3);l(2),E(e.claimCategories()),l(2),x(!e.isOwnerRole()&&e.hasClaimChanges()?4:-1)}}function qe(i,t){if(i&1&&(f(0,Fe,5,0,"div",28),f(1,We,3,1,"div",29)(2,Ye,5,1)),i&2){let e=c(2);x(e.isOwnerRole()?0:-1),l(),x(e.claimsLoading()?1:2)}}function Ge(i,t){if(i&1){let e=h();o(0,"button",21),C("click",function(){_(e);let s=c(3);
1return g(s.openAssignModal())}),r(1," Assign User "),a()}}function Je(i,t){i&1&&(o(0,"div",2),r(1," No users have been assigned this role yet. "),a())}function Ke(i,t){if(i&1&&(o(0,"div",49),y(1,"img",50),o(2,"div",51)(3,"div",52),r(4),a(),o(5,"div",16),r(6),a()(),y(7,"lsp-chip",15),o(8,"a",53),r(9,"View"),a()()),i&2){let e=t.$implicit,n=c(4);l(),p("src",e.avatar,V)("alt",e.name),l(3),v(e.name),l(2),v(e.email),l(),p("status",e.status)("label",n.formatStatus(e.status)),l(),p("routerLink",Q(7,Ie,e.id))}}function Qe(i,t){if(i&1&&(o(0,"div",48),w(1,Ke,10,9,"div",49,Te),a()),i&2){let e=c(3);l(),E(e.roleUsers())}}function Xe(i,t){if(i&1&&(o(0,"div",0)(1,"div",47),N(2,Ge,2,0,"button",20),a(),f(3,Je,2,0,"div",2)(4,Qe,3,0,"div",48),a()),i&2){let e=c(2);l(2),p("appHasPermission",I(2,z,e.Action.Update,e.Subject.User)),l(),x(e.roleUsers().length===0?3:4)}}function Ze(i,t){if(i&1&&(o(0,"div",18)(1,"div")(2,"h3",54),r(3,"Role Information"),a(),o(4,"dl",55)(5,"div",56)(6,"dt",57),r(7,"Role ID"),a(),o(8,"dd",58),r(9),a()(),o(10,"div",56)(11,"dt",57),r(12,"Role Name"),a(),o(13,"dd",59),r(14),a()(),o(15,"div",56)(16,"dt",57),r(17,"Description"),a(),o(18,"dd",59),r(19),a()(),o(20,"div",56)(21,"dt",57),r(22,"Type"),a(),o(23,"dd",59),y(24,"lsp-chip",15),a()()()(),o(25,"div")(26,"h3",54),r(27,"Metadata"),a(),o(28,"dl",55)(29,"div",56)(30,"dt",57),r(31,"Total Users"),a(),o(32,"dd",59),r(33),a()(),o(34,"div",56)(35,"dt",57),r(36,"Created At"),a(),o(37,"dd",59),r(38),L(39,"lspDate"),a()(),o(40,"div",56)(41,"dt",57),r(42,"Last Updated"),a(),o(43,"dd",59),r(44),L(45,"lspDate"),a()(),o(46,"div",56)(47,"dt",57),r(48,"Claims"),a(),o(49,"dd",59),r(50),a()()()()()),i&2){let e=c(2);l(9),v(e.role().id),l(5),v(e.role().name),l(5),v(e.role().description),l(5),p("status",e.isSystemRole()?"SYSTEM":"CUSTOM")("label",e.getRoleTypeLabel()),l(9),v(e.role().userCount),l(5),v(F(39,9,e.role().createdAt,"medium")),l(6),v(F(45,12,e.role().updatedAt,"medium")),l(6),D("",e.getTotalEnabledClaims()," configured")}}function et(i,t){if(i&1){let e=h();o(0,"lsp-detail-header",11),f(1,Oe,2,8),a(),f(2,Le,12,4,"lsp-form-shell",12),o(3,"div",13)(4,"div",14),y(5,"lsp-chip",15),o(6,"span",16),r(7),a()()(),o(8,"lsp-segments",17),C("selectedChange",function(s){_(e);let d=c();return g(d.activeTab.set(s))}),a(),o(9,"div",13),f(10,qe,3,2)(11,Xe,5,5,"div",0)(12,Ze,51,15,"div",18),a()}if(i&2){let e,n=c();p("crumbs",n.crumbs)("headTitle",n.role().name??"")("subtitle",n.role().description??""),l(),x(!n.isEditing()&&!n.isOwnerRole()?1:-1),l(),x(n.isEditing()?2:-1),l(3),p("status",n.isSystemRole()?"SYSTEM":"CUSTOM")("label",n.getRoleTypeLabel()),l(2),D("",n.role().userCount," users"),l(),p("segments",n.tabSegments)("selected",n.activeTab()),l(2),x((e=n.activeTab())==="claims"?10:e==="users"?11:e==="details"?12:-1)}}function tt(i,t){if(i&1){let e=h();o(0,"div",1)(1,"h3",60),r(2,"Error Loading Role"),a(),o(3,"p",61),r(4),a(),o(5,"div",62)(6,"button",21),C("click",function(){_(e);let s=c();return g(s.loadRoleData())}),r(7,"Try Again"),a(),o(8,"a",63),r(9,"Back to Roles"),a()()()}if(i&2){let e=c();l(4),v(e.errorMessage())}}function it(i,t){i&1&&(o(0,"div",2),r(1,"Role not found"),a())}function nt(i,t){i&1&&(o(0,"div",4),y(1,"div",64),a())}function ot(i,t){i&1&&(o(0,"div",5)(1,"p"),r(2,"No users available to assign."),a(),o(3,"p",65),r(4,"All users already have this role."),a()())}function at(i,t){i&1&&(o(0,"span",71),r(1,"\u2713"),a())}function lt(i,t){if(i&1){let e=h();o(0,"button",67),C("click",function(){let s=_(e).$implicit,d=c(2);return g(d.selectedUserId.set(s.id))}),y(1,"img",50),o(2,"div",68)(3,"div",69),r(4),a(),o(5,"div",70),r(6),a()(),f(7,at,2,0,"span",71),a()}if(i&2){let e=t.$implicit,n=c(2);J("border-color",n.selectedUserId()===e.id?"var(--indigo)":"var(--stroke)")("background",n.selectedUserId()===e.id?"var(--glass2)":"var(--glass)"),l(),p("src",e.avatar||"https://api.dicebear.com/7.x/avataaars/svg?seed="+e.email,V)("alt",e.firstName||e.email),l(3),O(" ",e.firstName," ",e.lastName," "),l(2),v(e.email),l(),x(n.selectedUserId()===e.id?7:-1)}}function rt(i,t){if(i&1&&(o(0,"div",6),w(1,lt,8,10,"button",66,Te),a()),i&2){let e=c();l(),E(e.availableUsers())}}var Me=class i{destroy$=new B;roleService=b(we);generatedRoleService=b(Re);userService=b(ye);authService=b(me);route=b(X);router=b(Z);toastService=b(be);confirmService=b(Se);Action=re;Subject=se;crumbs=[{label:"Roles",link:"/organization/roles"}];tabSegments=[{label:"Claims",value:"claims"},{label:"Users",value:"users"},{label:"Details",value:"details"}];loading=m(!0);claimsLoading=m(!1);savingClaims=m(!1);savingRole=m(!1);roleEditError=m(null);role=m(null);roleUsers=m([]);claimCategories=m([]);activeTab=m("claims");isEditing=m(!1);hasClaimChanges=m(!1);errorMessage=m(null);
1showAssignModal=m(!1);availableUsers=m([]);loadingUsers=m(!1);assigningUser=m(!1);selectedUserId=m(null);editedRole={name:"",description:""};originalClaims=[];roleClaims=[];roleId=A(()=>this.route.snapshot.paramMap.get("id"));isSystemRole=A(()=>this.role()?.isSystem===!0);isOwnerRole=A(()=>this.role()?.name?.toUpperCase()==="OWNER");ngOnInit(){this.loadRoleData()}loadRoleData(){let t=this.roleId();if(!t){this.router.navigate(["/organization/roles"]);return}this.loading.set(!0),this.errorMessage.set(null),H({role:this.generatedRoleService.getById(t),roleClaims:this.generatedRoleService.getClaims(t),roleUsers:this.generatedRoleService.getUsers(t)}).pipe(R(this.destroy$)).subscribe({next:({role:e,roleClaims:n,roleUsers:s})=>{this.role.set(e),this.roleClaims=n.claims,this.roleUsers.set(s.map(d=>{let u=`${d.firstName||""} ${d.lastName||""}`.trim();return{id:d.id,name:u||d.email.split("@")[0],email:d.email,avatar:d.avatar||`https://api.dicebear.com/7.x/avataaars/svg?seed=${d.email}`,status:d.status||"ACTIVE",createdAt:d.lastLoginAt?new Date(d.lastLoginAt):new Date}})),this.buildClaimCategories(),this.loading.set(!1)},error:e=>{let n=e?.error?.message||e?.message||"Failed to load role data. Please try again.";this.errorMessage.set(n),this.loading.set(!1)}})}buildClaimCategories(){let t=ce,e=new Map,n=new Set(this.roleClaims.filter(u=>u.type==="PERMISSION").map(u=>u.value)),s=this.isOwnerRole();for(let u of t){let{subject:S,action:W}=de(u.value),ke={type:u.type,value:u.value,displayName:`${W} ${S}`,description:`Allows ${W.toLowerCase()} access to ${S}`,enabled:s||n.has(u.value)},$=e.get(S)||[];$.push(ke),e.set(S,$)}let d=Array.from(e.entries()).map(([u,S])=>({name:u,claims:S})).sort((u,S)=>u.name.localeCompare(S.name));this.claimCategories.set(d),this.storeOriginalClaims()}storeOriginalClaims(){this.originalClaims=this.claimCategories().flatMap(t=>t.claims).map(t=>U({},t))}onClaimChange(){let e=this.claimCategories().flatMap(n=>n.claims).some((n,s)=>{let d=this.originalClaims[s];return d&&n.enabled!==d.enabled});this.hasClaimChanges.set(e)}getEnabledClaimCount(t){return t.claims.filter(e=>e.enabled).length}getActionName(t){let e=t.split(":")[1]||t;return e.charAt(0).toUpperCase()+e.slice(1)}getTotalEnabledClaims(){return this.claimCategories().flatMap(t=>t.claims).filter(t=>t.enabled).length}onBeforeUnload(t){this.hasClaimChanges()&&(t.preventDefault(),t.returnValue="You have unsaved changes. Are you sure you want to leave?")}canDeactivate(){return P(this,null,function*(){return this.hasClaimChanges()?this.confirmService.confirm({title:"Unsaved Changes",message:"You have unsaved claim changes. Are you sure you want to leave this page?",confirmText:"Leave",cancelText:"Stay",confirmVariant:"warning"}):!0})}resetClaims(){let t=this.claimCategories().map(e=>j(U({},e),{claims:e.claims.map(n=>{let s=this.originalClaims.find(d=>d.value===n.value);return s?U({},s):n})}));this.claimCategories.set(t),this.hasClaimChanges.set(!1)}saveClaims(){let t=this.roleId();if(!t)return;this.savingClaims.set(!0);let e=this.claimCategories().flatMap(n=>n.claims).filter(n=>n.enabled).map(n=>({type:n.type,value:n.value}));this.roleService.updateRoleClaims(t,{claims:e}).pipe(R(this.destroy$)).subscribe({next:n=>{this.roleClaims=n.claims,this.storeOriginalClaims(),this.hasClaimChanges.set(!1),this.savingClaims.set(!1),this.toastService.success("Claims updated successfully.")},error:()=>{this.savingClaims.set(!1),this.toastService.error("Failed to save claims. Please try again.")}})}editRole(){this.editedRole={name:this.role()?.name||"",description:this.role()?.description||""},this.roleEditError.set(null),this.isEditing.set(!0)}cancelEdit(){this.isEditing.set(!1),this.roleEditError.set(null)}saveRole(){let t=this.roleId();if(!t||!this.editedRole.name.trim()){this.roleEditError.set("Role name is required.");return}this.savingRole.set(!0),this.roleEditError.set(null),this.roleService.updateRole(t,{name:this.editedRole.name,description:this.editedRole.description||void 0}).pipe(R(this.destroy$)).subscribe({next:e=>{this.role.set(e),this.isEditing.set(!1),this.savingRole.set(!1)},error:e=>{this.roleEditError.set(e.error?.message||"Failed to update role. Please try again."),this.savingRole.set(!1)}})}deleteRole(){return P(this,null,function*(){let t=this.role();if(!t)return;(yield this.confirmService.confirm({title:"Delete Role",message:`Are you sure you want to delete the role "${t.name}"? This action cannot be undone.`,confirmText:"Delete",cancelText:"Cancel",confirmVariant:"danger"}))&&this.roleService.deleteRole(t.id).pipe(R(this.destroy$)).subscribe({next:()=>{this.toastService.success("Role deleted successfully."),this.router.navigate(["/organization/roles"])},error:()=>{this.toastService.error("Failed to delete role. Please try again.")}})})}getRoleTypeLabel(){return this.isSystemRole()?"System":"Custom"}
1formatStatus(t){return{ACTIVE:"Active",SUSPENDED:"Suspended",EMAIL_UNVERIFIED:"Pending",INVITED:"Invited",PENDING:"Pending"}[t?.toUpperCase()]||t||"Unknown"}openAssignModal(){this.showAssignModal.set(!0),this.selectedUserId.set(null),this.loadAvailableUsers()}closeAssignModal(){this.showAssignModal.set(!1),this.selectedUserId.set(null),this.availableUsers.set([])}loadAvailableUsers(){this.loadingUsers.set(!0);let t=new Set(this.roleUsers().map(n=>n.id)),e=this.authService.currentUser()?.id;this.userService.list({limit:100}).pipe(R(this.destroy$)).subscribe({next:n=>{let s=n.items.filter(d=>!t.has(d.id)&&d.id!==e);this.availableUsers.set(s),this.loadingUsers.set(!1)},error:()=>{this.loadingUsers.set(!1),this.toastService.error("Failed to load users.")}})}assignUser(){let t=this.selectedUserId(),e=this.roleId();!t||!e||(this.assigningUser.set(!0),this.userService.updateRole(t,{roleId:e}).pipe(R(this.destroy$)).subscribe({next:()=>{this.toastService.success("User assigned to role successfully."),this.closeAssignModal(),this.assigningUser.set(!1),this.loadRoleData()},error:()=>{this.assigningUser.set(!1),this.toastService.error("Failed to assign user to role.")}}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=q({type:i,selectors:[["app-role-detail"]],hostBindings:function(e,n){e&1&&C("beforeunload",function(d){return n.onBeforeUnload(d)},Y)},decls:14,vars:5,consts:[[1,"flex","flex-col","gap-4"],[1,"error-card"],[2,"text-align","center","padding","48px","color","var(--faint)"],["modalTitle","Assign User to Role","size","md",3,"openChange","open"],[1,"flex","items-center","justify-center","py-8"],[2,"text-align","center","padding","32px","color","var(--faint)"],[2,"max-height","256px","overflow-y","auto","display","flex","flex-direction","column","gap","8px"],["modal-footer","",1,"flex","justify-end","gap-3"],["type","button",1,"lsp-btn-g",3,"click"],["type","button",1,"lsp-btn-p",3,"click","disabled"],["variant","line","width","128px"],[3,"crumbs","headTitle","subtitle"],["formTitle","Edit Role","saveLabel","Save Changes",3,"saving","submitError"],[1,"detail-card"],[1,"flex","items-center","gap-3","flex-wrap"],[3,"status","label"],[2,"font-size","var(--t-sm)","color","var(--faint)"],["ariaLabel","Role detail tabs",3,"selectedChange","segments","selected"],[1,"grid","grid-cols-1","md:grid-cols-2","gap-6"],["type","button","class","lsp-btn-g",3,"click",4,"appHasPermission"],["type","button","class","lsp-btn-p",3,"click",4,"appHasPermission"],["type","button",1,"lsp-btn-p",3,"click"],["formTitle","Edit Role","saveLabel","Save Changes",3,"save","cancelled","saving","submitError"],[1,"lsp-field"],[1,"lsp-label"],[1,"lsp-req"],["type","text","placeholder","Enter role name",1,"lsp-input",3,"ngModelChange","ngModel"],["rows","3","placeholder","Enter role description",1,"lsp-textarea",3,"ngModelChange","ngModel"],[1,"warn-box",2,"border-color","var(--gold)","margin-bottom","20px"],[1,"flex","flex-col","gap-3"],[2,"font-weight","500","color","var(--gold)"],[2,"font-size","var(--t-sm)","color","var(--dim)","margin-top","4px"],[1,"claims-scroll"],[2,"border-top","1px solid var(--stroke)","min-width","460px"],[1,"claim-row"],[1,"unsaved-bar"],[1,"flex","items-center","justify-between","mb-2"],[1,"flex","items-center","gap-2"],[2,"font-weight","500","font-size","var(--t-sm)","color","var(--txt)","text-transform","uppercase","letter-spacing","0.06em"],[2,"font-size","var(--t-xs)","color","var(--faint)"],[1,"flex","items-center","gap-4"],[2,"font-size","var(--t-xs)","color","var(--faint)","width","48px","text-align","center"],[1,"flex","items-center","justify-end","gap-4"],[2,"width","48px","display","flex","justify-content","center","cursor","pointer"],["type","checkbox",2,"width","16px","height","16px",3,"ngModelChange","change","ngModel","disabled"],[2,"font-size","var(--t-sm)","font-weight","500","color","var(--indigo)"],[1,"flex","gap-2"],[1,"flex","justify-end"],[2,"border","1px solid var(--stroke)","border-radius","var(--r)","overflow","hidden"],[1,"user-row"],[1,"w-10","h-10","rounded-full",3,"src","alt"],[1,"flex-1","min-w-0"],[2,"font-weight","500","color","var(--txt)"],[1,"lsp-row-act",3,"routerLink"],[1,"sect-title"],[1,"kv-list"],[1,"kv-row"],[1,"kv-key"],[1,"kv-val","font-mono"],[1,"kv-val"],[2,"font-size","var(--t-lg)","font-weight","600","color","var(--rose)","margin-bottom","8px"],[2,"color","var(--dim)","margin-bottom","16px"],[1,"flex","justify-center","gap-4"],["routerLink","/organization/roles",1,"lsp-btn-g"],[1,"spinner"],[2,"font-size","var(--t-sm)","margin-top","4px"],["type","button",1,"user-select-btn",3,"border-color","background"],["type","button",1,"user-select-btn",3,"click"],[1,"flex-1","min-w-0","text-left"],[2,"font-weight","500","color","var(--txt)","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],[2,"font-size","var(--t-sm)","color","var(--faint)","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],[2,"color","var(--indigo)","font-size","var(--t-lg)"]],template:function(e,n){e&1&&(o(0,"div",0),f(1,Pe,3,0)(2,et,13,11)(3,tt,10,1,"div",1)(4,it,2,0,"div",2),a(),o(5,"lsp-modal",3),k("openChange",function(d){return T(n.showAssignMo
1dal,d)||(n.showAssignModal=d),d}),f(6,nt,2,0,"div",4)(7,ot,5,0,"div",5)(8,rt,3,0,"div",6),o(9,"div",7)(10,"button",8),C("click",function(){return n.closeAssignModal()}),r(11,"Cancel"),a(),o(12,"button",9),C("click",function(){return n.assignUser()}),r(13),a()()()),e&2&&(l(),x(n.loading()?1:n.role()?2:n.errorMessage()?3:4),l(4),M("open",n.showAssignModal),l(),x(n.loadingUsers()?6:n.availableUsers().length===0?7:8),l(6),p("disabled",!n.selectedUserId()||n.assigningUser()),l(),D(" ",n.assigningUser()?"Assigning\u2026":"Assign"," "))},dependencies:[le,ne,ie,oe,ae,te,ee,Ee,fe,xe,he,_e,pe,Ce,ge,ue,ve],styles:["[_nghost-%COMP%]{display:block}.detail-card[_ngcontent-%COMP%]{padding:24px;background:var(--card);border:1px solid var(--stroke);border-radius:var(--r)}.error-card[_ngcontent-%COMP%]{padding:40px 24px;background:var(--glass);border:1px solid var(--rose);border-radius:var(--r);text-align:center}.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)}.warn-box[_ngcontent-%COMP%]{padding:14px;border-radius:var(--r-el);background:var(--glass);border:1px solid}.claims-scroll[_ngcontent-%COMP%]{overflow-x:auto;-webkit-overflow-scrolling:touch}.claim-row[_ngcontent-%COMP%]{padding:14px 0;border-bottom:1px solid var(--stroke)}.claim-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.unsaved-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;margin-top:16px;border-radius:var(--r-el);background:var(--glass2);border:1px solid var(--indigo)}.user-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px;background:var(--card);border-bottom:1px solid var(--stroke);transition:background .12s ease}.user-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.user-row[_ngcontent-%COMP%]:hover{background:var(--glass)}.user-select-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px;border-radius:var(--r-el);border:1px solid;cursor:pointer;transition:border-color .12s ease,background .12s ease;width:100%}.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{Me as RoleDetailComponent};
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.