1import{r,j as e,B as G,aP as N,I as $,q,s as H}from"./index-BcUlxWxm.js";import{C as i}from"./card-BpS3IMSH.js";import{S as w,a as b,b as y,c as S,d as f}from"./select-CdT5qiHQ.js";import{T as U,a as X,b as _,c as d,d as Y,e as m}from"./table-CetJ5375.js";import{A as Z}from"./activity-VuiIxHBQ.js";import{D as Q}from"./download-wOGSrqXH.js";import{R as C,C as E,X as L,Y as T,T as A,B as W}from"./generateCategoricalChart-uI6IDTLa.js";import{L as J,a as ee}from"./LineChart-Dg1dVdMw.js";import{B as se}from"./BarChart-BDHQ31Cp.js";import"./index-CmWSgNP6.js";import"./chevron-down-T8P_UdNr.js";import"./chevron-up-CkcnKXQ8.js";import"./index-Cghw9wOT.js";const D={"24h":1,"7d":7,"30d":30,"90d":90},je=()=>{const[l,u]=r.useState([]),[B,v]=r.useState(!0),[x,M]=r.useState("7d"),[p,R]=r.useState("all"),[c,k]=r.useState("");r.useEffect(()=>{(async()=>{v(!0);const a=new Date(Date.now()-D[x]*864e5).toISOString(),{data:t,error:o}=await H.from("analytics_events").select("*").gte("created_at",a).order("created_at",{ascending:!1}).limit(5e3);!o&&t&&u(t),v(!1)})()},[x]);const z=r.useMemo(()=>Array.from(new Set(l.map(s=>s.event_name))).sort(),[l]),n=r.useMemo(()=>l.filter(s=>!(p!=="all"&&s.event_name!==p||c&&!(s.page_path??"").toLowerCase().includes(c.toLowerCase())&&!(s.page_title??"").toLowerCase().includes(c.toLowerCase()))),[l,p,c]),h=r.useMemo(()=>{const s=new Set(n.map(t=>t.session_id).filter(Boolean)),a=n.filter(t=>t.event_name==="page_view").length;return{total:n.length,sessions:s.size,pageViews:a,countries:new Set(n.map(t=>t.country).filter(Boolean)).size}},[n]),V=r.useMemo(()=>{const s=new Map;return n.forEach(a=>{const t=a.created_at.slice(0,10);s.set(t,(s.get(t)??0)+1)}),Array.from(s.entries()).sort(([a],[t])=>a.localeCompare(t)).map(([a,t])=>({date:a,count:t}))},[n]),K=r.useMemo(()=>{const s=new Map;return n.filter(a=>a.event_name==="page_view").forEach(a=>{const t=a.page_path??"â";s.set(t,(s.get(t)??0)+1)}),Array.from(s.entries()).sort((a,t)=>t[1]-a[1]).slice(0,10).map(([a,t])=>({path:a.length>40?a.slice(0,40)+"â¦":a,count:t}))},[n]),g=r.useMemo(()=>{const s=new Map;return n.forEach(a=>{s.set(a.event_name,(s.get(a.event_name)??0)+1)}),Array.from(s.entries()).sort((a,t)=>t[1]-a[1]).slice(0,10)},[n]),I=r.useMemo(()=>{const s=new Map;return n.forEach(a=>{const t=a.country??"â";s.set(t,(s.get(t)??0)+1)}),Array.from(s.entries()).sort((a,t)=>t[1]-a[1])},[n]),P=()=>{const s=["created_at","event_name","page_path","page_title","country","lang","referrer","session_id"],a=[s.join(",")].concat(n.map(O=>s.map(F=>`"${String(O[F]??"").replace(/"/g,'""')}"`).join(","))).join(` 2`),t=new Blob([a],{type:"text/csv"}),o=document.createElement("a");o.href=URL.createObjectURL(t),o.download=`events-${x}-${new Date().toISOString().slice(0,10)}.csv`,o.click()};return e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-4",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(Z,{className:"w-6 h-6"})," Event-Tracking"]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Globales Nutzerverhalten in Echtzeit."})]}),e.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[e.jsxs(w,{value:x,onValueChange:s=>M(s),children:[e.jsx(b,{className:"w-32",children:e.jsx(y,{})}),e.jsx(S,{children:Object.keys(D).map(s=>e.jsx(f,{value:s,children:s},s))})]}),e.jsxs(G,{variant:"outline",onClick:P,children:[e.jsx(Q,{className:"w-4 h-4 mr-2"}),"CSV"]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(j,{label:"Events",value:h.total}),e.jsx(j,{label:"Sessions",value:h.sessions}),e.jsx(j,{label:"Page Views",value:h.pageViews}),e.jsx(j,{label:"Länder",value:h.countries})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(i,{className:"p-4",children:[e.jsx("div",{className:"text-sm font-semibold mb-3",children:"Aktivität"}),e.jsx("div",{className:"h-64",children:e.jsx(C,{children:e.jsxs(J,{data:V,children:[e.jsx(E,{strokeDasharray:"3 3",opacity:.2}),e.jsx(L,{dataKey:"date",fontSize:11}),e.jsx(T,{fontSize:11}),e.jsx(A,{}),e.jsx(ee,{type:"monotone",dataKey:"count",stroke:"hsl(var(--primary))",strokeWidth:2})]})})})]}),e.jsxs(i,{className:"p-4",children:[e.jsx("div",{className:"text-sm font-semibold mb-3",children:"Top Seiten"}),e.jsx("div",{className:"h-64",children:e.jsx(C,{children:e.jsxs(se,{data:K,layout:"vertical",margin:{left:10},children:[e.jsx(E,{strokeDasharray:"3 3",opacity:.2}),e.jsx(L,{type:"number",fontSize:11}),e.jsx(T,{type:"category",dataKey:"path",fontSize:10,width:200}),e.jsx(A,{}),e.jsx(W,{dataKey:"count",fill:"hsl(var(--primary))"})]})})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(i,{className:"p-4",children:[e.jsx("div",{className:"text-sm font-semibold mb-3",children:"Top Events"}),e.jsxs("div",{className:"space-y-2",children:[g.map(([s,a])=>e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx(N,{variant:"outline",children:s}),e.jsx("span",{className:"font-semibold tabular-nums",children:a})]},s)),g.length===0&&e.jsx("div",{className:"text-sm text-muted-foreground",children:"Keine Daten."})]})]}),e.jsxs(i,{className:"p-4",children:[e.jsx("div",{className:"text-sm font-semibold mb-3",children:"Nach Land"}),e.jsx("div",{className:"space-y-2",children:I.slice(0,10).map(([s,a])=>e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"uppercase",children:s}),e.jsx("span",{className:"font-semibold tabular-nums",children:a})]},s))})]})]}),e.jsxs(i,{className:"p-4",children:[e.jsxs("div",{className:"flex gap-2 mb-4 flex-wrap",children:[e.jsx($,{placeholder:"Filter Pfad / Titelâ¦",value:c,onChange:s=>k(s.target.value),className:"max-w-sm"}),e.jsxs(w,{value:p,onValueChange:R,children:[e.jsx(b,{className:"w-48",children:e.jsx(y,{})}),e.jsxs(S,{children:[e.jsx(f,{value:"all",children:"Alle Events"}),z.map(s=>e.jsx(f,{value:s,children:s},s))]})]})]}),B?e.jsxs("div",{className:"flex items-center justify-center py-8 text-muted-foreground",children:[e.jsx(q,{className:"w-4 h-4 animate-spin mr-2"}),"Ladenâ¦"]}):e.jsxs("div",{className:"overflow-x-auto",children:[e.jsxs(U,{children:[e.jsx(X,{children:e.jsxs(_,{children:[e.jsx(d,{children:"Zeit"}),e.jsx(d,{children:"Event"}),e.jsx(d,{children:"Pfad"}),e.jsx(d,{children:"Land"}),e.jsx(d,{children:"Referrer"})]})}),e.jsx(Y,{children:n.slice(0,200).map(s=>e.jsxs(_,{children:[e.jsx(m,{className:"text-xs whitespace-nowrap",children:new Date(s.created_at).toLocaleStr
2ing("de-DE")}),e.jsx(m,{children:e.jsx(N,{variant:"outline",children:s.event_name})}),e.jsx(m,{className:"text-xs max-w-xs truncate",children:s.page_path??"â"}),e.jsx(m,{className:"text-xs uppercase",children:s.country??"â"}),e.jsx(m,{className:"text-xs max-w-xs truncate",children:s.referrer??"â"})]},s.id))})]}),n.length>200&&e.jsxs("div",{className:"text-xs text-muted-foreground mt-2 text-center",children:["Zeige 200 von ",n.length," Events. CSV exportieren für vollständige Daten."]})]})]})]})},j=({label:l,value:u})=>e.jsxs(i,{className:"p-4",children:[e.jsx("div",{className:"text-xs uppercase tracking-wider text-muted-foreground",children:l}),e.jsx("div",{className:"text-2xl font-bold tabular-nums mt-1",children:u.toLocaleString("de-DE")})]});export{je 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.