1import{a as de}from"./chunk-OKRWPSPX.js";import{a as se}from"./chunk-VKKP36RW.js";import{a as me,b as j}from"./chunk-RBSCVMWA.js";import"./chunk-PSL4TQVF.js";import"./chunk-32MVKEGG.js";import"./chunk-UNIMAODD.js";import{a as re}from"./chunk-TPEH54NC.js";import{c as ae}from"./chunk-DNFLHLBL.js";import{a as le}from"./chunk-Z4TL7GKA.js";import{a as oe}from"./chunk-KSCKDLJY.js";import{a as ne}from"./chunk-77FKT5JT.js";import{a as ee}from"./chunk-UDAFKW5T.js";import{b as ie}from"./chunk-QT4Y6DAG.js";import"./chunk-I27FSOWI.js";import"./chunk-YDHC32EP.js";import"./chunk-JJ3UGRRV.js";import"./chunk-PFKBWYNX.js";import"./chunk-BYRCIEHW.js";import"./chunk-KM2WX4AO.js";import"./chunk-LFU76I3C.js";import"./chunk-FDCJHWSN.js";import{a as te}from"./chunk-HPDJFCJP.js";import{a as Y,c as P,g as Z}from"./chunk-VFH6MHTA.js";import{c as J,e as K}from"./chunk-DTI2P45D.js";import"./chunk-ZIUGQAJ6.js";import"./chunk-UPMGB634.js";import{a as Q}from"./chunk-XAAKPWGS.js";import{a as X}from"./chunk-HV3GO5Z2.js";import"./chunk-XZBHOAEY.js";import"./chunk-RQPHNGPS.js";import{b as C}from"./chunk-2XTP3JNB.js";import"./chunk-NWDWORH2.js";import"./chunk-5MUAM7JS.js";import"./chunk-IHJCQUK6.js";import{a as h}from"./chunk-HRGIHHFE.js";import"./chunk-KLAEZ5UA.js";import"./chunk-FJMQYAVB.js";import"./chunk-T5P3A2XG.js";import{l as H}from"./chunk-UFD3WH34.js";import"./chunk-4GRCKKS4.js";import{$b as r,Ab as S,B as O,Ca as W,Dc as o,Ec as M,Fc as w,Hb as A,L as g,Ub as x,Vb as v,X as z,Yb as R,Zb as I,_b as f,ac as n,bc as b,bd as c,ed as G,fc as V,ga as p,gc as T,ic as y,ka as B,lb as l,ma as u,mc as m,na as _,oc as d,pb as E,qb as N,sa as U,t as $,za as D,zc as q}from"./chunk-WOGKWOFI.js";import"./chunk-HT2G6UXV.js";import{a as L}from"./chunk-QJI7QS7F.js";var F=class a{dialogRef;data;firmOptions=D([]);model=D({seat_id:"",firm_id:null});form=Y(this.model,t=>{P(t.seat_id,({value:e})=>{let i=Number(e());return e().trim()!==""&&Number.isInteger(i)&&i>=1?null:{kind:"min",message:"Enter the numeric seat ID"}}),P(t.firm_id,({value:e})=>e()!=null?null:{kind:"required",message:"Pick the firm to assign it to"})});canSubmit=c(()=>!this.form().invalid());ngOnInit(){this.firmOptions.set((this.data?.firms??[]).filter(t=>t.is_active).map(t=>({value:t.id,label:t.name})))}close(){this.dialogRef.close()}submit(){if(this.form().invalid())return;let t=this.model();this.dialogRef.close({seatId:Number(t.seat_id),firmId:t.firm_id})}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=S({type:a,selectors:[["app-assign-seat-dialog"]],decls:19,vars:4,consts:[["role","dialog","aria-modal","true","aria-labelledby","assign-seat-title",1,"bg-linear-to-br","from-[#0d1a2d]","to-[#1a2332]","shadow-2xl","flex","flex-col","w-[95svw]","md:w-[480px]","mx-auto","overflow-hidden","relative","rounded-xl"],[1,"flex","items-start","justify-between","px-5","py-3","border-b","border-white/10","shrink-0"],[1,"min-w-0"],["id","assign-seat-title",1,"text-base","font-semibold","text-white","truncate"],[1,"text-xs","text-white/60","truncate"],["variant","close","size","sm","aria-label","Close dialog",3,"clicked"],[1,"px-5","py-5"],["type","signal",1,"space-y-0","flex","flex-col","gap-4",3,"submitted"],["id","assign-seat-id","type","number","label","Seat ID",3,"formField"],["id","assign-seat-firm","label","Assign to firm",3,"options","formField"],[1,"-mt-1","text-xs",2,"color","var(--mm-fg-3)"],[1,"flex","items-center","justify-end","gap-3"],["variant","outline","size","default",1,"text-white",3,"clicked"],["variant","primary","size","default","type","submit",3,"disabled"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"h2",3),o(4," Assign a pool seat "),n(),r(5,"p",4),o(6,"Move an unassigned seat onto a member firm"),n()(),r(7,"app-button",5),m("clicked",function(){return i.close()}),n()(),r(8,"div",6)(9,"app-forms",7),m("submitted",function(){return i.submit()}),b(10,"app-aria-input",8),E(),b(11,"app-aria-select",9),E(),r(12,"p",10),o(13," Enter the seat's numeric ID \u2014 it's on the minting confirmation and in the Seat Tracker row. Only unassigned network-pool seats (no firm yet) can be moved. "),n(),r(14,"div",11)(15,"app-button",12),m("clicked",function(){return i.close()}),o(16," Cancel "),n(),r(17,"app-button",13),o(18," Assign seat "),n()()()()()),e&2&&(l(10),f("formField",i.form.seat_id),N(),l(),f("options",i.firmOptions())("formField",i.form.firm_id),N(),l(6),f("disabled",!i.canSubmit()))},dependencies:[Z,te,ee,oe,C],encapsulation:2})};var ue=(a,t)=>t.label,_e=(a,t)=>t.id;function ge(a,t){if(a&1){let e=y();r(0,"app-button",16),m("clicked",function(){u(e);let s=d(2);return _(s.openEdit())}),o(1," Edit / mint seats "),n()}}function xe(a,t){if(a&1){let e=y();V(0),r(1,"app-button",6),m("clicked",function(){u(e);let s=d();return _(s.openCreateFirm())}),o(2," Create firm "),n(),r(3,"app-button",6),m("clicked",function(){u(e);let s=d();return _(s.openAssignSeat())}),o(4," Assign pool seat "),n(),x(5,ge,2,0,"app-button",15),T()}if(a&2){let e=d();l(5),v(e.canEdit()?5:-1)}}function ve(a,t){if(a&1&&(r(0,"div",8),o(1),n()),a&2){let e=d();l(),w(" ",e.error()," ")}}function be(a,t){a&1&&(r(0,"div",9),b(1,"app-spinner",17),n())}function ye(a,t){if(a&1&&b(0,"app-stat-card",18),a&2){let e=t.$implicit;f("label",e.label)("value",e.value)("accent",e.accent)}}function we(a,t){if(a&1&&(r(0,"div",10),R(1,ye,1,3,"app-stat-card",18,ue),n()),a&2){let e=d();l(),I(e.cards())}}function he(a,t){if(a&1){let e=y();r(0,"app-button",16),m("clicked",function(){u(e);let s=d(2).$implicit,k=d(2);return _(k.openEditFirm(s))}),o(1," Edit "),n()}}function ke(a,t){if(a&1){let e=y();V(0),r(1,"app-button",32),m("clicked",function(){u(e);let s=d().$implicit,k=d(2);return _(k.openAllocate(s))}),o(2," Add seats "),n(),x(3,he,2,0,"app-button",15),T()}if(a&2){let e=d(3);l(3),v(e.canEdit()?3:-1)}}function De(a,t){if(a&1){let e=y();r(0,"tr",24)(1,"td",25),o(2),n(),r(3,"td",26),o(4),n(),r(5,"td",27),o(6),n(),r(7,"td",27),o(8),n(),r(9,"td",28)(10,"span",29),o(11),n()(),r(12,"td",30)(13,"div",31)(14,"app-button",32),m("clicked",function(){let s=u(e).$implicit,k=d(2);return _(k.openFirmReports(s))}),o(15," Reports "),n(),A(16,ke,4,1,"ng-container",7),n()()()}if(a&2){let e=t.$implicit,i=d(2);l(2),M(e.name),l(2),w(" ",e.email_domains.join(", ")||"\u2014"," "),l(2),w(" ",e.allocated_seats," "),l(2),w(" ",e.used_seats," "),l(2),q("background",e.is_active?"var(--mm-success-bg)":"var(--mm-surface-2)")("color",e.is_active?"var(--mm-success-fg)":"var(--mm-fg-3)"),l(
1),w(" ",e.is_active?"Active":"Inactive"," "),l(5),f("hasPermission",i.PERM.PARTNER_PLATFORM_MANAGE)}}function Se(a,t){if(a&1&&(r(0,"div",13)(1,"table",19)(2,"thead",20)(3,"tr")(4,"th",21),o(5,"Firm"),n(),r(6,"th",21),o(7,"Email domains"),n(),r(8,"th",22),o(9,"Allocated"),n(),r(10,"th",22),o(11,"Used"),n(),r(12,"th",21),o(13,"Status"),n(),r(14,"th",22),o(15,"Seats"),n()()(),r(16,"tbody",23),R(17,De,17,10,"tr",24,_e),n()()()),a&2){let e=d();l(17),I(e.firms())}}function Ce(a,t){a&1&&(r(0,"p",14),o(1," This network has no member firms yet. "),n())}var ce=class a{PERM=ne;facade=p(re);route=p(J);router=p(K);dialog=p(Q);envInjector=p(B);destroyRef=p(U);isBrowser=H(p(W));canEdit=p(ie).isSuperAdmin;networkId=D(Number(this.route.snapshot.paramMap.get("id")));detailResource=G({params:()=>this.isBrowser&&this.networkId()>0?{id:this.networkId()}:void 0,loader:({params:t,abortSignal:e})=>$(this.facade.networkDetail(t.id).pipe(z(O(e,"abort"))))});detail=c(()=>this.detailResource.value());isLoading=c(()=>this.detailResource.isLoading());error=c(()=>ae(this.detailResource.error(),"Failed to load the network."));network=c(()=>this.detail()?.network);networkName=c(()=>this.network()?.name??"Network");firms=c(()=>this.detail()?.firms??[]);cards=c(()=>{let t=this.network();return t?[{label:"Total seats",value:t.total_seats,accent:"var(--mm-fg-3)"},{label:"Allocated",value:t.allocated_seats,accent:"var(--chart-1)"},{label:"Unallocated",value:t.unallocated_seats,accent:"var(--chart-5)"},{label:"Used",value:t.used_seats,accent:"var(--chart-3)"}]:[]});openEdit(){let t=this.network();if(!t)return;this.dialog.open(se,{data:{network:t},environmentInjector:this.envInjector,maxWidth:"520px",ariaLabel:"Edit network"}).afterClosed$.pipe(g(1),h(this.destroyRef)).subscribe(async i=>{if(!i)return;await this.facade.updateNetwork(t.id,L({name:i.name,total_seats:i.total_seats,is_active:i.is_active},i.allocations.length?{allocations:i.allocations}:{}))&&this.detailResource.reload()})}openAllocate(t){this.dialog.open(me,{data:{firm:t},environmentInjector:this.envInjector,maxWidth:"520px",ariaLabel:`Add seats to ${t.name}`}).afterClosed$.pipe(g(1),h(this.destroyRef)).subscribe(i=>{i!=null&&this.detailResource.reload()})}openAssignSeat(){this.dialog.open(F,{data:{firms:this.firms()},environmentInjector:this.envInjector,maxWidth:"480px",ariaLabel:"Assign a pool seat to a firm"}).afterClosed$.pipe(g(1),h(this.destroyRef)).subscribe(async e=>{if(!e)return;await this.facade.assignSeatToFirm(e.seatId,e.firmId)&&this.detailResource.reload()})}openCreateFirm(){this.dialog.open(j,{data:{networkId:this.networkId()},environmentInjector:this.envInjector,maxWidth:"560px",ariaLabel:"Create firm"}).afterClosed$.pipe(g(1),h(this.destroyRef)).subscribe(e=>{e&&this.detailResource.reload()})}openEditFirm(t){this.dialog.open(j,{data:{firm:t},environmentInjector:this.envInjector,maxWidth:"560px",ariaLabel:`Edit ${t.name}`}).afterClosed$.pipe(g(1),h(this.destroyRef)).subscribe(i=>{i&&this.detailResource.reload()})}openFirmReports(t){this.router.navigate(["/admin/partner-v2/superadmin/reports"],{queryParams:{firm:t.id}})}openReports(){this.router.navigate(["/admin/partner-v2/superadmin/reports"],{queryParams:{network:this.networkId()}})}static \u0275fac=function(e){return new(e||a)};static \u0275cmp=S({type:a,selectors:[["app-network-detail-v2"]],hostAttrs:[1,"block","w-full"],decls:19,vars:5,consts:[[1,"admin-theme","flex","flex-col","gap-8","p-6","text-white","min-h-full"],[1,"flex","flex-wrap","items-start","justify-between","gap-3"],[1,"flex","flex-col","gap-1"],[1,"text-base","font-semibold",2,"color","var(--mm-fg-3)"],[1,"text-3xl","font-extrabold","leading-tight"],[1,"flex","items-center","gap-2"],["variant","outline","size","sm",1,"text-white",3,"clicked"],[4,"hasPermission"],["role","alert",1,"px-3","py-2","text-sm","rounded-md",2,"background","var(--mm-danger-bg)","color","var(--mm-danger-fg)"],[1,"flex","justify-center","py-10"],[1,"grid","grid-cols-2","gap-6","md:grid-cols-4"],[1,"flex","flex-col","gap-5"],[1,"text-xl","font-bold"],[1,"overflow-x-auto","rounded-lg","border","border-white/10"],[1,"py-12","text-center","text-sm","text-neutral-500"],["variant","primary","size","sm"],["variant","primary","size","sm",3,"clicked"],["size","lg"],[3,"label","value","accent"],[1,"w-full","min-w-[680px]","text-left","text-sm"],[1,"text-[11px]","uppercase","tracking-wider",2,"color","var(--mm-fg-3)","background","var(--mm-surface-2)"],[1,"px-4","py-3","font-semibold"],[1,"px-4","py-3","font-semibold","text-right"],[1,"divi
1de-y","divide-white/5"],[1,"hover:bg-white/3","transition-colors"],[1,"px-4","py-3","font-medium","text-neutral-100"],[1,"px-4","py-3","text-neutral-300"],[1,"px-4","py-3","text-right","tabular-nums","text-neutral-300"],[1,"px-4","py-3"],[1,"inline-flex","items-center","px-2","py-1","rounded-full","text-xs","font-medium"],[1,"px-4","py-3","text-right"],[1,"inline-flex","items-center","gap-2"],["variant","outline","size","sm",1,"border-white/15","text-white","hover:bg-white/5",3,"clicked"]],template:function(e,i){e&1&&(r(0,"section",0)(1,"header",1)(2,"div",2)(3,"p",3),o(4,"Network"),n(),r(5,"h1",4),o(6),n()(),r(7,"div",5)(8,"app-button",6),m("clicked",function(){return i.openReports()}),o(9," View reports "),n(),A(10,xe,6,1,"ng-container",7),n()(),x(11,ve,2,1,"div",8),x(12,be,2,0,"div",9)(13,we,3,0,"div",10),r(14,"div",11)(15,"h2",12),o(16,"Member firms"),n(),x(17,Se,19,0,"div",13)(18,Ce,2,0,"p",14),n()()),e&2&&(l(6),M(i.networkName()),l(4),f("hasPermission",i.PERM.PARTNER_PLATFORM_MANAGE),l(),v(i.error()?11:-1),l(),v(i.isLoading()&&!i.cards().length?12:13),l(5),v(i.firms().length?17:i.isLoading()?-1:18))},dependencies:[C,X,de,le],encapsulation:2})};export{ce as NetworkDetailV2};
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.