1import{j as e,r as g}from"./react-vendor-GZWH45r_.js";import{s as L,w as D,v as I}from"./pipelineClient-DVlC5kbl.js";import{f as B,u as E,a as G,b as H,c as _}from"./table-vendor-CU_kXy5A.js";import{A as O,a as q,b as U,c as W}from"./alert-qBdbGqP_.js";import{B as f}from"./button-TiVoBsTv.js";import{I as $,a as J,c as Z}from"./input-group-DyLzjcaQ.js";import{S as v,a as w,b,c as S,d as R,f as o}from"./select-Ckjy0DVs.js";import{T as Q,a as X,b as y,c as P}from"./tabs-YDnRyshT.js";import{B as N}from"./badge-CXm3EeET.js";import{D as Y,a as ee,b as se,c as F,d as x,f as V}from"./dropdown-menu-DfgQO7LD.js";import{O as re,aM as te,_ as le,N as ne,a6 as ae}from"./icon-vendor-CWfMyO_n.js";import{P as ie,a as oe,b as T,c as ce,e as de,f as ue}from"./pagination-TYq7Qmph.js";import{T as me,a as xe,b as C,c as ge,d as pe,e as k}from"./table-D3MFlWSi.js";import{c as he}from"./utils-glhnvP-C.js";import"./supabase-DN-G-6tX.js";import"./supabase-BdcF6VGv.js";import"./analytics-vendor-DMZBONTi.js";import"./chart-vendor-B-S5PJAS.js";import"./ui-vendor-C6hcvB2m.js";import"./input-DM-ghhbV.js";import"./bundle-mjs-BfpiGUSE.js";const je=[{id:"group",accessorKey:"group",filterFn:"equalsString",enableHiding:!0},{id:"search",accessorFn:s=>[s.role,s.owner,...s.permissionSets].join(" "),filterFn:"includesString",enableHiding:!0},{id:"role",accessorKey:"role",header:"Role",size:180,minSize:180,cell:({row:s})=>e.jsx("span",{className:"block min-w-0 truncate font-medium text-sm",title:s.original.role,children:s.original.role})},{id:"accessLevel",accessorKey:"accessLevel",header:"Access level",size:120,cell:({row:s})=>e.jsx(N,{className:"rounded-sm",variant:"outline",children:s.original.accessLevel})},{id:"users",accessorKey:"users",header:"Users",size:70,cell:({row:s})=>e.jsx("span",{className:"text-sm",children:s.original.users})},{id:"permissionSets",accessorFn:s=>s.permissionSets.join(" "),header:"Permission sets",size:310,cell:({row:s})=>e.jsxs("div",{className:"flex min-w-0 flex-wrap items-center justify-start gap-2",children:[s.original.permissionSets.slice(0,3).map(l=>e.jsx(N,{className:"max-w-32 truncate rounded-sm",variant:"outline",children:l},l)),s.original.permissionSets.length>3?e.jsxs("span",{className:"text-sm tabular-nums",children:["+",s.original.permissionSets.length-3]}):null]})},{id:"lastReview",accessorKey:"lastReview",header:"Last review",size:120,cell:({row:s})=>e.jsx("span",{className:"block truncate text-sm",children:s.original.lastReview})},{id:"owner",accessorKey:"owner",header:"Owner",size:110,filterFn:"equalsString",cell:({row:s})=>e.jsx("span",{className:"block truncate text-sm",title:s.original.owner,children:s.original.owner})},{id:"status",accessorKey:"status",header:"Status",size:130,filterFn:"equalsString",cell:({row:s})=>e.jsx(N,{className:"rounded-sm",variant:"outline",children:s.original.status})},{id:"actions",header:"",size:70,cell:({row:s})=>{const l=s.original.group==="System roles",t=s.original.status==="Needs review";return e.jsxs(Y,{children:[e.jsx(ee,{asChild:!0,children:e.jsx(f,{variant:"ghost",size:"icon-sm",children:e.jsx(re,{})})}),e.jsxs(se,{className:"w-48",align:"end",children:[e.jsxs(F,{children:[t?e.jsx(x,{children:"Review changes"}):null,e.jsx(x,{children:"View details"}),e.jsx(x,{disabled:l,children:"Edit role"}),e.jsx(x,{disabled:l,children:"Duplicate role"})]}),e.jsx(V,{}),e.jsxs(F,{children:[e.jsx(x,{children:"Review permissions"}),e.jsx(x,{children:"Manage members"})]}),e.jsx(V,{}),e.jsx(F,{children:e.jsx(x,{disabled:l,variant:"destructive",children:"Archive role"})})]})]})},enableColumnFilter:!1}];function K(s){return s.reduce((l,t)=>{const i=t.original.group,n=l.find(r=>r.label===i);return n?n.rows.push(t):l.push({label:i,rows:[t]}),l},[])}function fe({table:s}){const{pageIndex:l,pageSize:t}=s.getState().pagination,i=s.getRowModel().rows,n=s.getFilteredRowModel().rows,r=g.useMemo(()=>K(i),[i]),m=g.useMemo(()=>K(n),[n]),p=g.useMemo(()=>new Map(m.map(a=>[a.label,a.rows.length])),[m]),h=n.length===0?0:l*t+1,A=n.length===0?0:h+i.length-1,j=s.getVisibleLeafColumns().length;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"max-w-full overflow-x-auto",children:e.jsxs(me,{className:"min-w-[980px] table-fixed border-collapse",style:{width:s.getTotalSize()},children:[e.jsx(xe,{children:s.getHeaderGroups().map(a=>e.jsx(C,{className:"border-y hover:bg-transparent [&>:not(:last-child)]:border-r",children:a.headers.map(u=>e.jsx(ge,{style:{width:u.getSize()},className:"h-10 px-4 text-center font-medium text-foreground text-sm first:text-left",children:u.isPlaceholder?null:B(u.column.columnDef.header,u.getContext())},u.id))},a.id))}),e.jsx(pe,{children:r.length?r.map(a=>e.jsx(ve,{group:a,totalCount:p.get(a.label)??0,colCount:j},a.label)):e.jsx(C,{children:e.jsx(k,{colSpan:j,className:"h-24 text-center text-muted-foreground",children:"No results."})})})]})}),e.jsxs("div",{className:"flex flex-col gap-3 border-border/70 border-t p-4 lg:flex-row lg:items-center",children:[e.jsxs("div",{className:"text-muted-foreground text-sm",children:["Showing ",h," to ",A," of ",n.length," roles"]}),e.jsx("div",{className:"lg:mx-auto",children:e.jsx(ie,{className:"mx-0 w-auto justify-center",children:e.jsxs(oe,{children:[e.jsx(T,{children:e.jsx(ce,{size:"sm",href:"#",text:"",className:s.getCanPreviousPage()?"":"pointer-events-none opacity-50",onClick:a=>{a.preventDefault(),s.previousPage()}})}),e.jsx(T,{children:e.jsx(de,{size:"sm",href:"#",isActive:!0,onClick:a=>{a.preventDefault()},children:l+1})}),e.jsx(T,{children:e.jsx(ue,{size:"sm",href:"#",text:"",className:s.getCanNextPage()?"":"pointer-events-none opacity-50",onClick:a=>{a.preventDefault(),s.nextPage()}})})]})})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"text-muted-foreground text-sm",children:"Rows per page"}),e.jsxs(v,{value:`${t}`,onValueChange:a=>{s.setPageSize(Number(a))},children:[e.jsx(w,{size:"sm",className:"w-32",children:e.jsx(b,{})}),e.jsx(S,{align:"end",side:"top",children:e.jsxs(R,{children:[e.jsx(o,{value:"12",children:"12"}),e.jsx(o,{value:"24",children:"24"}),e.jsx(o,{value:"48",children:"48"})]})})]})]})]})]})}function ve({group:s,totalCount:l,colCount:t}){return e.jsxs(e.Fragment,{children:[e.jsx(C,{className:"h-10 bg-muted",children:e.jsxs(k,{className:"px-4 text-foreground
1/60 text-sm",colSpan:t,children:[s.label," ",e.jsxs(N,{variant:"outline",className:"ml-2 rounded-sm bg-transparent text-muted-foreground text-xs",children:[s.rows.length," of ",l]})]})}),s.rows.map(i=>e.jsx(C,{className:"h-12 hover:bg-muted/20",children:i.getVisibleCells().map((n,r)=>e.jsx(k,{style:{width:n.column.getSize()},className:he("border-r px-4 align-middle",r===i.getVisibleCells().length-1&&"border-r-0",r===0?"text-left":"text-center"),children:B(n.column.columnDef.cell,n.getContext())},n.id))},i.id))]})}function we(s){return s==="System roles"?"System":s==="Custom roles"?"Custom":"All"}function be(s){if(s==="System")return"System roles";if(s==="Custom")return"Custom roles"}function Se({roles:s}){var a,u,z,M;const[l,t]=g.useState([]),[i,n]=g.useState({pageIndex:0,pageSize:12}),r=E({data:s,columns:je,defaultColumn:{size:140,minSize:80,maxSize:420},state:{columnFilters:l,pagination:i},onColumnFiltersChange:t,onPaginationChange:n,getCoreRowModel:_(),getFilteredRowModel:H(),getPaginationRowModel:G(),autoResetPageIndex:!1,initialState:{columnVisibility:{group:!1,search:!1}}}),m=((a=r.getColumn("search"))==null?void 0:a.getFilterValue())??"",p=((u=r.getColumn("group"))==null?void 0:u.getFilterValue())??"",h=we(p),A=((z=r.getColumn("owner"))==null?void 0:z.getFilterValue())??"All",j=((M=r.getColumn("status"))==null?void 0:M.getFilterValue())??"All";return e.jsxs("div",{className:"flex h-full min-w-0 flex-col gap-4",children:[e.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-4 sm:flex-row sm:justify-between",children:[e.jsxs("div",{className:"flex min-w-0 flex-col gap-1",children:[e.jsx("h1",{className:"text-3xl tracking-tight",children:"Access Control"}),e.jsx("p",{className:"text-muted-foreground text-sm",children:"TV, PM, AL, PTL, and Kunde roles â mirroring THD's Angebot â Bestellung â AB process."})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(f,{size:"sm",variant:"outline",children:[e.jsx(te,{"data-icon":"inline-start"}),"Import JSON"]}),e.jsx(f,{size:"sm",children:"Create role"})]})]}),e.jsxs(Q,{className:"h-full min-w-0 gap-4",defaultValue:"roles",children:[e.jsxs(X,{variant:"line",className:"w-full justify-start gap-2 border-b ps-0 *:data-[slot=tabs-trigger]:flex-none",children:[e.jsx(y,{value:"roles",children:"Roles"}),e.jsx(y,{value:"permission-sets",children:"Permission sets"}),e.jsx(y,{value:"access-reviews",children:"Access reviews"})]}),e.jsx(P,{value:"roles",children:e.jsxs("div",{className:"flex min-w-0 flex-col gap-4",children:[e.jsxs(O,{className:"border-amber-200 bg-amber-50 text-amber-900 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-50",children:[e.jsx(le,{className:"size-4"}),e.jsx(q,{children:"Review required"}),e.jsx(U,{children:"3 roles have unreviewed permission changes."}),e.jsx(W,{children:e.jsxs(f,{size:"sm",variant:"link",children:["Review changes",e.jsx(ne,{"data-icon":"inline-end"})]})})]}),e.jsxs("div",{className:"min-w-0 overflow-hidden rounded-xl border border-border/70 bg-background",children:[e.jsxs("div",{className:"flex flex-col items-stretch gap-4 px-4 py-4 sm:flex-row sm:items-center sm:justify-between sm:gap-6",children:[e.jsxs($,{className:"h-7 w-full rounded-md sm:w-82",children:[e.jsx(J,{children:e.jsx(ae,{})}),e.jsx(Z,{className:"h-7",placeholder:"Search roles...",value:m,onChange:d=>{var c;(c=r.getColumn("search"))==null||c.setFilterValue(d.target.value||void 0),r.setPageIndex(0)}})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(v,{value:h,onValueChange:d=>{var c;(c=r.getColumn("group"))==null||c.setFilterValue(be(d)),r.setPageIndex(0)},children:[e.jsxs(w,{size:"sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Type:"}),e.jsx(b,{placeholder:"All"})]}),e.jsx(S,{position:"popper",align:"start",children:e.jsxs(R,{children:[e.jsx(o,{value:"All",children:"All"}),e.jsx(o,{value:"System",children:"System"}),e.jsx(o,{value:"Custom",children:"Custom"})]})})]}),e.jsxs(v,{value:A,onValueChange:d=>{var c;(c=r.getColumn("owner"))==null||c.setFilterValue(d==="All"?void 0:d),r.setPageIndex(0)},children:[e.jsxs(w,{size:"sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Owner:"}),e.jsx(b,{placeholder:"All"})]}),e.jsx(S,{position:"popper",align:"start",children:e.jsxs(R,{children:[e.jsx(o,{value:"All",children:"All"}),e.jsx(o,{value:"System",children:"System"}),e.jsx(o,{value:"Sabine Ecker",children:"Sabine Ecker"}),e.jsx(o,{value:"Claudia Reinhardt",children:"Claudia Reinhardt"}),e.jsx(o,{value:"Bianca Hofmann",children:"Bianca Hofmann"})]})})]}),e.jsxs(v,{value:j,onValueChange:d=>{var c;(c=r.getColumn("status"))==null||c.setFilterValue(d==="All"?void 0:d),r.setPageIndex(0)},children:[e.jsxs(w,{size:"sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Status:"}),e.jsx(b,{placeholder:"All"})]}),e.jsx(S,{position:"popper",align:"start",children:e.jsxs(R,{children:[e.jsx(o,{value:"All",children:"All"}),e.jsx(o,{value:"Active",children:"Active"}),e.jsx(o,{value:"Needs review",children:"Needs review"})]})})]})]})]}),e.jsx(fe,{table:r})]})]})}),e.jsx(P,{value:"permission-sets",children:e.jsx("div",{className:"flex h-full items-center justify-center rounded-md border border-dashed text-muted-foreground text-sm",children:"Permission Sets Coming Soon"})}),e.jsx(P,{value:"access-reviews",children:e.jsx("div",{className:"flex h-full items-center justify-center rounded-md border border-dashed text-muted-foreground text-sm",children:"Access Reviews Coming Soon"})})]})]})}const Re=[{role:"TV",group:"Needs review",accessLevel:"Scoped",users:3,permissionSets:["Angebote erstellen","Kalkulation","Kundendaten","Reports"],lastReview:"Apr 12, 2026",owner:"System",status:"Needs review"},{role:"PM",group:"Needs review",accessLevel:"Full",users:3,permissionSets:["Angebote freigeben","Kalkulation","Kundendaten","Reports","Bestellungen"],lastReview:"Apr 15, 2026",owner:"Sabine Ecker",status:"Needs review"},{role:"AL",group:"Needs review",accessLevel:"Scoped",users:4,permissionSets:["Auftrag anlegen","Bestellungen","AB erstellen","Lieferungen"],lastReview:"Apr 18, 2026",owner:"Sabine Ecker",status:"Needs review"},{role:"PTL",group:"System roles",accessLevel:"Scoped",users:3,permissionSets:["Technisches Kickoff","Kostencheck","Dokumente","Freigaben"],lastReview:"May 1, 2026",owner:"System",status:"Active"},{role:"Kostencheck-Analyst",group:"System roles",accessLevel:"Scoped",users:3,permissionSets:["Kostencheck","Abweichungen","Dashboards","Exports"],lastReview:"May 5, 2026",owner:"System",status:"Active"},{role:"Kunde",group:"System roles",accessLevel:"Read only",users:1,permissionSets:["Projektstatus","Dokumente"],lastReview:"May 6, 2026",owner:"System",status:"Active"},{role:"Service",group:"System roles",accessLevel:"API access",users:2,permissionSets:["Integrations","API Keys","Webhooks","Logs"],lastReview:"Apr 22, 2026",owner:"System",status:"Active"},{role:"Finanzen",group:"Custom roles",accessLevel:"Scoped",users:2,permissionSets:["Billing","Rechnungen","Zahlungen","Reports"],lastReview:"Apr 28, 2026",owner:"Bianca Hofmann",status:"Active"},{role:"Einkauf",group:"Custom roles",accessLevel:"Scoped",users:2,permissionSets:["Bestellungen","Lieferanten","Reports","Exports"],lastReview:"May 2, 2026",owner:"Nadine Weiss",status:"Active"},{role:"Compliance",group:"Custom roles",accessLevel:"Scoped",users:3,permissionSets:["Audit Logs","Freigaben","Settings","Reports"],lastReview:"May 3, 2026",owner:"Katrin Sommer",status:"Active"},{role:"Projektleiter Technik (Senior)",group:"Custom roles",accessLevel:"Scoped",users:2,permissionSets:["Projekte","Kostencheck","Reports","Freigaben","Settings"],lastReview:"Apr 30, 2026",owner:"Claudia Reinhardt",status:"Active"},{role:"Finance Viewer",group:"Custom roles",accessLevel:"Read only",users:2,permissionSets:["Billing","Reports","Rechnungen","Dashboards"],lastReview:"May 7, 2026",owner:"Bianca Hofmann",status:"Active"}];function Ne(s,l){return s.map(t=>{const i=l.filter(r=>r.role.includes(t.role_name)).length,n=Object.entries(t.permissions).filter(([,r])=>r).map(([r])=>r.replace(/_/g," "));return{role:t.role_name,group:t.group_name??"Custom roles",accessLevel:t.role_name==="Kunde"?"Read only":"Scoped",users:i,permissionSets:n.length>0?n:["â"],lastReview:"â",owner:t.owner_name??"System",status:"Active"}})}function Ue(){const[s,l]=g.useState(Re);return g.useEffect(()=>{let t=!1;const i=()=>{Promise.all([D(),I()]).then(([m,p])=>{t||m.length!==0&&l(Ne(m,p))}).catch(()=>{})};i();const n=L("pipeline_roles",i),r=L("pipeline_team_members",i);return()=>{t=!0,n(),r()}},[]),e.jsx(Se,{roles:s})}export{Ue as default};
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.