1import{j as e}from"./motion-CghpQXKE.js";import{u as m,d as o,r as x,O as p}from"./router-epi9CWfp.js";import{B as b}from"./bar-chart-3-BJ1hMGNU.js";import{c as h,M as u,ad as g,bJ as f,al as y,T as v,X as j}from"./index-_-9kgWZ5.js";import{M as w}from"./message-square-quote-O_oYtgMg.js";import{G as N}from"./gift-D-9FN6p5.js";import{S as k}from"./scan-line-BYBAHEUu.js";import{S}from"./scroll-text-BHja74r0.js";import"./supabase-CTBn71hm.js";(function(){try{var t=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};t.SENTRY_RELEASE={id:"19ca80bcc68db376b793c8a886be03b6d5ea8a5c"};var s=new t.Error().stack;s&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[s]="5105a053-2d12-43f9-a3b9-4053d0608e69",t._sentryDebugIdIdentifier="sentry-dbid-5105a053-2d12-43f9-a3b9-4053d0608e69")}catch{}})();/** 2 * @license lucide-react v0.344.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const C=h("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]),T="https://chvmzsawxhcwzgwywqam.supabase.co/storage/v1/object/public/logos-twinforge/TwinForgeLogoGC.png",L=[{to:"/admin/stats",label:"Stats Produit",icon:b,description:"Vue globale â membres, repas, messages, séances"},{to:"/admin/chat",label:"Chat user",icon:u,description:"Simuler un user, profil, consentements, media"},{to:"/admin/feedback",label:"Avis",icon:w,description:"Verbatims utilisateurs â web et WhatsApp"},{to:"/admin/emails",label:"Emails",icon:g,description:"Templates preview + activité envois"},{to:"/admin/costs",label:"Coûts IA",icon:f,description:"Coût par user, par modèle, ratio coût/MRR"},{to:"/admin/notifications-proactives",label:"Notifications",icon:y,description:"Catalogue 70 types + timeline messages par user"},{to:"/admin/gaming",label:"Gaming",icon:v,description:"Challenges globaux + buddy pairs + forge quests"},{to:"/admin/influenceurs",label:"Influenceurs",icon:N,description:"Comptes offerts : invitations + upgrades"},{to:"/admin/morphology-lab",label:"Twin 3D",icon:k,description:"Solveur morphologique + diagnostics GLB v25"},{to:"/admin/logs",label:"Logs",icon:S,description:"Santé système + tous les logs unifiés"}];function A({open:t,onClose:s}){const i=m(),r=e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"px-5 py-6 border-b border-white/10",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("img",{src:T,alt:"TwinForge",width:32,height:32,className:"rounded-lg"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-display font-bold text-text-primary leading-none",children:"Admin"}),e.jsx("div",{className:"text-[10px] uppercase tracking-wider text-text-tertiary",children:"TwinForge"})]})]})}),e.jsx("nav",{className:"p-3 space-y-1",children:L.map(({to:a,label:l,icon:c,description:d})=>{const n=i.pathname===a||i.pathname.startsWith(`${a}/`);return e.jsxs(o,{to:a,onClick:s,className:`group flex items-start gap-3 px-3 py-2.5 rounded-lg transition-colors ${n?"bg-accent/15 border border-accent/30 text-text-primary":"border border-transparent text-text-secondary hover:bg-white/5 hover:text-text-primary"}`,children:[e.jsx(c,{className:`w-4 h-4 mt-0.5 shrink-0 ${n?"text-accent":"text-text-tertiary group-hover:text-text-secondary"}`}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium leading-tight",children:l}),e.jsx("div",{className:"text-xs text-text-tertiary leading-tight mt-0.5 truncate",children:d})]})]},a)})}),e.jsx("div",{className:"mt-auto p-3 border-t border-white/10",children:e.jsx(o,{to:"/dashboard",className:"text-xs text-text-tertiary hover:text-accent transition-colors block px-3 py-2",children:"â Retour à l'app"})})]});return e.jsxs(e.Fragment,{children:[e.jsx("aside",{className:"hidden lg:flex flex-col w-60 shrink-0 bg-surface-solid/70 border-r border-white/10 min-h-screen sticky top-0",children:r}),t&&e.jsxs("div",{className:"lg:hidden fixed inset-0 z-modal flex",children:[e.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm",onClick:s}),e.jsxs("aside",{className:"relative flex flex-col w-64 bg-surface-solid border-r border-white/10 min-h-screen",children:[e.jsx("button",{onClick:s,className:"absolute top-3 right-3 text-text-tertiary hover:text-text-primary","aria-label":"Close menu",children:e.jsx(j,{className:"w-5 h-5"})}),r]})]})]})}function F(){const[t,s]=x.useState(!1);return e.jsxs("div",{className:"flex min-h-screen bg-background text-text-primary",children:[e.jsx(A,{open:t,onClose:()=>s(!1)}),e.jsxs("div",{className:"flex-1 min-w-0 flex flex-col",children:[e.jsxs("header",{className:"lg:hidden sticky top-0 z-40 flex items-center justify-between px-4 py-3 bg-surface-solid/80 backdrop-blur border-b border-white/10",children:[e.jsx("button",{onClick:()=>s(!0),className:"p-1.5 rounded-lg text-text-secondary hover:bg-white/5 hover:text-text-primary transition-colors","aria-label":"Open menu",children:e.jsx(C,{className:"w-5 h-5"})}),e.jsx("div",{className:"text-sm font-semibold text-text-primary",children:"Admin"}),e.jsx("div",{className:"w-5"})," "]}),e.jsx("main",{className:"flex-1 min-w-0",children:e.jsx(p,{})})]})]})}export{F as AdminLayout};
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.