PageSourceSearch

https://www.vcn.be/assets/VisitorAnalyticsDashboard-ToYELXLo.js

js vcn.be collected 2026-10-08 08:10:06 UTC 44,463 bytes, 7 lines download raw bytes

1import{r as o,j as e}from"./vendor-react-DtVE4p7m.js";import{h as q,s as Y,am as $e,an as Be,ao as Ue,ap as Fe}from"./index-CuIfIfPZ.js";import{C as p,a as h,b as w,c as y,d as T}from"./card-M5gKzrRd.js";import{B as H}from"./badge-zNpvEMkJ.js";import{B as Ke}from"./button-BbC7hWJa.js";import{I as Oe}from"./input-FK_Vqpem.js";import{S as He,a as Ge,b as ze,c as Ye,d as W}from"./select-5ZM9fXiV.js";import{S as F}from"./isToday-CQwSWUH3.js";import{T as E,a as V,b as v,c as l,d as R,e as n}from"./table-VgrHIncu.js";import{R as J,T as We,X as Qe,Y as Xe,B as le,C as we}from"./generateCategoricalChart-BMYLzPPO.js";import{L as Ze}from"./loader-circle-CZSQyEiL.js";import{R as Je}from"./halo-DgJMmm_r.js";import{I as Pe}from"./info-tz84DjRK.js";import{W as es}from"./wifi-BrnzUU-n.js";import{U as ye}from"./users-6K1J0842.js";import{E as ne}from"./eye-DCT8QJoe.js";import{M as de,T as ss}from"./GestionPage-C6ioTuvE.js";import{T as ts}from"./timer-4lEgtxJn.js";import{T as rs}from"./target-u1MbLWdl.js";import{A as ae}from"./activity-C1WKYIJW.js";import{G as is}from"./globe-BPv6bbkY.js";import{M as ls}from"./map-pin-BuvcVW5d.js";import{T as ns}from"./trending-up-D2es9xZN.js";import{B as as,P as ke,a as Ce}from"./PieChart-C2lUYTOS.js";import{C as cs}from"./CartesianGrid-DysxZoYw.js";import{C as Se}from"./clock-CrvVV96c.js";import{E as me}from"./external-link-DwpxHVzR.js";import{T as os}from"./triangle-alert-DfAYi5Rt.js";import{aU as De,F as Te}from"./AssignDocumentDialog-uaDrlJ6a.js";import{L as xe}from"./link-2-DC-ybt9W.js";import{S as ds}from"./search-9_5j8WRJ.js";import{P as ms}from"./phone-D_6SWHU8.js";import{M as xs}from"./mail-BQDDviC2.js";import{M as us}from"./message-circle-MSMaSfrx.js";import{D as ps}from"./download-DQ3RYQB4.js";import{Z as hs}from"./zap-DF0qDEhc.js";import{S as gs}from"./send-mcUvXyjf.js";import{S as js}from"./smartphone-nRYEwMty.js";import{M as fs}from"./settings-DWvSeYun.js";import{s as Me}from"./subDays-BYLyyUJM.js";import{a as ce,f as K}from"./fr-C2y5yrxE.js";import{f as Q}from"./formatDistanceToNow-ByZ2JzoZ.js";import"./vendor-supabase-6P6EowNV.js";import"./index-CbwLjnrV.js";import"./index-BdQq_4o_.js";import"./index-TTt1xBeC.js";import"./index-7NXcIC7w.js";import"./index-CLZsXb1W.js";import"./index-C-BM2eTS.js";import"./index-DN_jKayA.js";import"./chevron-up-Cs51XhZm.js";import"./createLucideIcon-SnDx3gtb.js";import"./check-C9orChF5.js";import"./constructNow--F23BciR.js";import"./isSameDay-CXsNz7CX.js";import"./index-Dm3nMtF6.js";import"./rangsFidelite-jfgCu9F-.js";import"./gift-CSaEZ3We.js";import"./star-nFd_wCuZ.js";import"./LienVcnOs-jfWrFpp8.js";import"./shield-alert-CudqjwkV.js";import"./circle-check-big-3YKffNHB.js";import"./blogArticles-eT7r-Mwp.js";import"./calendar-rsFpKxf2.js";import"./heart-D0rOpTOW.js";import"./share-2-CvYfj62A.js";import"./proxy-CuJZE8q4.js";import"./skeleton-EkF51naa.js";import"./credit-card-CRYBX6a_.js";import"./filter-B0Yt-s3v.js";import"./user-BzG5OAmz.js";import"./x-B1pGnJqQ.js";import"./eye-off-DhQc7r6t.js";import"./label-CTRtSlF0.js";import"./textarea-DSieXh4O.js";import"./dialog-JEKqHgOg.js";import"./progress-CBigzh1c.js";import"./use-mobile-8bl1kxbK.js";import"./GlassKit-DaU46Wig.js";import"./thermometer-58pNjdcb.js";import"./fan-SZpqgUz3.js";import"./gauge-CUhUcP1Q.js";import"./shield-D1TGR-Sy.js";import"./droplets-DPcc_W2l.js";import"./wrench-CJIMx8mH.js";import"./upload-C_OBFvg5.js";import"./arrow-right-ztlyhmiM.js";import"./circle-alert-DK4zipd-.js";import"./package-CdTGTTu-.js";import"./plus-mwSXTDKv.js";import"./trending-down-ruOp6Qhq.js";import"./trash-2-DpWa64kf.js";import"./OdooChatterDialog-x12kyuKW.js";import"./file-text-BfEtGLsL.js";import"./index-CWCHH1HQ.js";import"./paperclip-B3VveoOh.js";import"./message-square-DqeBUtxw.js";import"./file-image-DHi2G5fO.js";import"./file-video-BILZSMhf.js";import"./nl-_raTgDzV.js";import"./receipt-C_OZsMp0.js";import"./useQuery-CWWGdF8d.js";import"./separator-Bh05FhbL.js";import"./OneLogo-Db73NCwG.js";import"./flame-BmVsx4_6.js";import"./AvatarPersonne-aLrP_t5Q.js";import"./avatars-D_u09z8W.js";import"./inbox-DtP_PtgI.js";import"./history-Be_HNYR7.js";import"./fuel-DuzlHigq.js";import"./pen-line-Dwr98dtV.js";import"./user-plus-nbrI9Uyx.js";import"./shield-check-CJhtFeD0.js";import"./bot-K8CWIVOV.js";import"./shopping-cart-C2Ikym9S.js";import"./chart-column-DSCkqXo7.js";import"./trophy-oojQI8ar.js";import"./chevron-right-DQYHMVum.js";import"./checkbox-Co0MCdt1.js";import"./startOfMonth-0rS4VKyx.js";import"./dropdown-menu-Bj5wFsFT.js";import"./addMonths-OLFTCB_x.js";import"./tabs-BYmKOdZw.js";import"./endOfMonth-BwMbEow_.js";import"./arrow-up-right-CLLkChhX.js";import"./euro-Bmx1p65G.js";import"./chevron-left-CnSrxpsC.js";import"./adresse-DgTOwCyO.js";import"./navigation-D5EAVXTQ.js";import"./save-DjcVuBpL.js";import"./SelecteurEmoji-CfpWBjBR.js";import"./sparkles-BlhGzX0R.js";import"./calendar-BNqQIFjV.js";import"./addDays-9XPO_0Dl.js";import"./differenceInCalendarMonths-C3IzcLhc.js";import"./isSameMonth-Bx3vfSU-.js";import"./startOfToday-BBdT1UWg.js";import"./addYears-BHTpUTkr.js";import"./tag-DDT2Xl49.js";import"./rotate-ccw-rPg8llHy.js";import"./purify.es-pma1kJhd.js";import"./rocket-rLa2glDn.js";import"./circle-check-CKl-A0-C.js";import"./circle-x-CCDk-LnG.js";import"./arrow-up-DdkBgKZM.js";import"./file-down-DnmzPh5s.js";import"./pencil-DisSXQQB.js";import"./bell-ring-B4jci0O6.js";import"./user-check-DbE3YvVN.js";import"./arrow-left-J2UTWT__.js";import"./camera-CyqIBMI4.js";import"./minus-CrTgd89K.js";import"./avatar-CGXKA8--.js";import"./banknote-ES1h0_5A.js";import"./building-BTdUKwbx.js";import"./bell-192PSXrB.js";import"./alert-dialog-CQAASJh5.js";import"./parseISO-B0YN08UW.js";import"./AreaChart-BCEpgzVn.js";import"./calendar-check-7kB7KPp7.js";import"./file-check-Dr3y9nLh.js";import"./LineChart-DbtI4H7r.js";import"./endOfDay-CkcMYuCy.js";import"./eachDayOfInterval-CQH3pdm2.js";import"./switch-Dkv-7Ga4.js";import"./pricingZones-pNHt1zXu.js";import"./belgianCommunes-D8bcibGq.js";import"./edgeFunctionRetry-Ct27zYMx.js";import"./index-C_PA_9uD.js";import"./pricing-BdHSANX5.js";import"./SuggestionEmail-D1IrZbTX.js";import"./house-DN3P2cHX.js";import"./index-B9EzCjNr.js";import"./video-BwIfRvi6.js";import"./file-pen-line-Bc54AV-g.js";import"./calendar-plus-DC1j01jg.js";import"./database-BC0oy-zT.js";import"./managedPages-BMp1ZDUm.js";import"./index-DGehaHg6.js";import"./heatPumps-Bumbqnhe.js";import"./pelletStoves-CR7fVCpe.js";import"./airConditioning-AGXtV7lJ.js";import"./ventilation-l-yKQRnO.js";import"./brandLogos-3fD6gRGF.js";import"./use-toast-CItfLm7o.js";import"./copy-DAZ_0WNO.js";import"./list-ordered-GhT32539.js";import"./quote-BKadjCqZ.js";import"./wand-sparkles-DZXE0lr4.js";import"./VcnScoreGauge-DL5BwmrL.js";import"./HaloPersonne-BhJSW8X8.js";import"./log-in-B_37VX56.js";import"./SignupPromptPopup-D3duqxVe.js";import"./companyStats-B97m5qnN.js";import"./BadgeUnlockedToast-BmXNJUGw.js";import"./usePerfMode-C-R8hjyp.js";import"./confetti.module-VZ8jr8H-.js";import"./CookieBanner-C9nvuatj.js";import"./scale-CmPdJeqS.js";import"./flag-DoTPzR0m.js";import"./wifi-off-D4Wq-Req.js";import"./list-checks--nFG-cgt.js";import"./lock-D0GWofbz.js";import"./snowflake-BiQat_50.js";import"./useGroupesMazout-8hRGa3NT.js";import"./VeenyFrame-BeWm2E9D.js";import"./useAvatars-B1apZ1FY.js";import"./besoin-C2a5n3wL.js";import"./site-Bv0WtfSV.js";import"./jspdf.plugin.autotable-bFqVo_pq.js";import"./ouvrirDocument-BZYnifFL.js";import"./appInstallee-CQSFopTT.js";import"./truck-DsGJ-ZHn.js";import"./getRoundingMethod-D0I6Z7xl.js";import"./differenceInMilliseconds-Mi_zcy6v.js";
vendor: 4,391 bytes, lines 1-7
1const vs={light:"",dark:".dark"},Le=o.createContext(null);function Ee(){const i=o.useContext(Le);if(!i)throw new Error("useChart must be used within a <ChartContainer />");return i}const ee=o.forwardRef(({id:i,className:a,children:c,config:x,...u},A)=>{const d=o.useId(),f=`chart-${i||d.replace(/:/g,"")}`;return e.jsx(Le.Provider,{value:{config:x},children:e.jsxs("div",{"data-chart":f,ref:A,className:q("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",a),...u,children:[e.jsx(bs,{id:f,config:x}),e.jsx(J,{children:c})]})})});ee.displayName="Chart";const bs=({id:i,config:a})=>{const c=Object.entries(a).filter(([x,u])=>u.theme||u.color);return c.length?e.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(vs).map(([x,u])=>`
2${u} [data-chart=${i}] {
3${c.map(([A,d])=>{var k;const f=((k=d.theme)==null?void 0:k[x])||d.color;return f?`  --color-${A}: ${f};`:null}).join(`
4`)}
5}
6`).join(`
7`)}}):null},oe=We,se=o.forwardRef(({active:i,payload:a,className:c,indicator:x="dot",hideLabel:u=!1,hideIndicator:A=!1,label:d,labelFormatter:f,labelClassName:k,formatter:N,color:I,nameKey:te,labelKey:P},re)=>{const{config:_}=Ee(),z=o.useMemo(()=>{var S;if(u||!(a!=null&&a.length))return null;const[m]=a,B=`${P||m.dataKey||m.name||"value"}`,D=ue(_,m,B),b=!P&&typeof d=="string"?((S=_[d])==null?void 0:S.label)||d:D==null?void 0:D.label;return f?e.jsx("div",{className:q("font-medium",k),children:f(b,a)}):b?e.jsx("div",{className:q("font-medium",k),children:b}):null},[d,f,a,u,k,_,P]);if(!i||!(a!=null&&a.length))return null;const C=a.length===1&&x!=="dot";return e.jsxs("div",{ref:re,className:q("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",c),children:[C?null:z,e.jsx("div",{className:"grid gap-1.5",children:a.map((m,B)=>{const D=`${te||m.name||m.dataKey||"value"}`,b=ue(_,m,D),S=I||m.payload.fill||m.color;return e.jsx("div",{className:q("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",x==="dot"&&"items-center"),children:N&&(m==null?void 0:m.value)!==void 0&&m.name?N(m.value,m.name,m,B,m.payload):e.jsxs(e.Fragment,{children:[b!=null&&b.icon?e.jsx(b.icon,{}):!A&&e.jsx("div",{className:q("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":x==="dot","w-1":x==="line","w-0 border-[1.5px] border-dashed bg-transparent":x==="dashed","my-0.5":C&&x==="dashed"}),style:{"--color-bg":S,"--color-border":S}}),e.jsxs("div",{className:q("flex flex-1 justify-between leading-none",C?"items-end":"items-center"),children:[e.jsxs("div",{className:"grid gap-1.5",children:[C?z:null,e.jsx("span",{className:"text-muted-foreground",children:(b==null?void 0:b.label)||m.name})]}),m.value&&e.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:m.value.toLocaleString()})]})]})},m.dataKey)})})]})});se.displayName="ChartTooltip";const Ns=o.forwardRef(({className:i,hideIcon:a=!1,payload:c,verticalAlign:x="bottom",nameKey:u},A)=>{const{config:d}=Ee();return c!=null&&c.length?e.jsx("div",{ref:A,className:q("flex items-center justify-center gap-4",x==="top"?"pb-3":"pt-3",i),children:c.map(f=>{const k=`${u||f.dataKey||"value"}`,N=ue(d,f,k);return e.jsxs("div",{className:q("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[N!=null&&N.icon&&!a?e.jsx(N.icon,{}):e.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:f.color}}),N==null?void 0:N.label]},f.value)})}):null});Ns.displayName="ChartLegend";function ue(i,a,c){if(typeof a!="object"||a===null)return;const x="payload"in a&&typeof a.payload=="object"&&a.payload!==null?a.payload:void 0;let u=c;return c in a&&typeof a[c]=="string"?u=a[c]:x&&c in x&&typeof x[c]=="string"&&(u=x[
7c]),u in i?i[u]:i[c]}const X=["#3b82f6","#10b981","#f59e0b","#ef4444","#8b5cf6","#ec4899","#06b6d4","#f97316"],O=new Set(["click","link_click","button_click","phone_click","email_click","whatsapp_click","outbound_click","internal_link","anchor_click","download_click"]),G={phone_click:{label:"Téléphone",icon:ms,color:"bg-green-500/15 text-green-600 border-green-500/30",help:"Clic sur un lien tel: — appel téléphonique déclenché."},email_click:{label:"E-mail",icon:xs,color:"bg-blue-500/15 text-blue-600 border-blue-500/30",help:"Clic sur un lien mailto: — ouverture du client mail."},whatsapp_click:{label:"WhatsApp",icon:us,color:"bg-emerald-500/15 text-emerald-600 border-emerald-500/30",help:"Clic sur un lien WhatsApp."},outbound_click:{label:"Vers extérieur",icon:me,color:"bg-amber-500/15 text-amber-600 border-amber-500/30",help:"Clic vers un autre site (le visiteur quitte vcn.be)."},download_click:{label:"Téléchargement",icon:ps,color:"bg-purple-500/15 text-purple-600 border-purple-500/30",help:"Clic sur un fichier (PDF, image, vidéo…)."},internal_link:{label:"Lien interne",icon:xe,color:"bg-cyan-500/15 text-cyan-600 border-cyan-500/30",help:"Clic vers une autre page du site."},anchor_click:{label:"Ancre",icon:Te,color:"bg-slate-500/15 text-slate-600 border-slate-500/30",help:"Clic vers une section (#) de la même page."},button_click:{label:"Bouton",icon:de,color:"bg-primary/15 text-primary border-primary/30",help:"Clic sur un bouton (action / formulaire)."},click:{label:"Autre clic",icon:De,color:"bg-muted text-muted-foreground border-border",help:"Clic sur un autre élément interactif."},link_click:{label:"Lien",icon:xe,color:"bg-cyan-500/15 text-cyan-600 border-cyan-500/30",help:"Clic sur un lien."},rage_click:{label:"Rage clic",icon:hs,color:"bg-red-500/15 text-red-600 border-red-500/30",help:"3 clics rapides au même endroit — le visiteur est frustré, signal fort à investiguer."},form_submit:{label:"Formulaire envoyé",icon:gs,color:"bg-indigo-500/15 text-indigo-600 border-indigo-500/30",help:"Soumission d'un formulaire (devis, contact, inscription…)."},scroll_milestone:{label:"Scroll",icon:Te,color:"bg-muted text-muted-foreground border-border",help:"Le visiteur a atteint un palier de défilement (25/50/75/100%)."}},Ae=({type:i})=>{const a=G[i]||G.click,c=a.icon;return e.jsxs(H,{variant:"outline",className:`text-[10px] gap-1 ${a.color}`,children:[e.jsx(c,{className:"h-3 w-3"}),a.label]})},_s=(i,a)=>
7{if(a)return a;if(!i)return"Direct";const c=i.toLowerCase();if(c.includes("google."))return"Google";if(c.includes("bing."))return"Bing";if(c.includes("facebook."))return"Facebook";if(c.includes("instagram."))return"Instagram";if(c.includes("linkedin."))return"LinkedIn";if(c.includes("duckduckgo"))return"DuckDuckGo";try{return new URL(i).hostname.replace("www.","")}catch{return"Referral"}},qe=({type:i,className:a="h-3.5 w-3.5"})=>i==="mobile"?e.jsx(js,{className:a}):i==="tablet"?e.jsx(ss,{className:a}):e.jsx(fs,{className:a}),Z=i=>{if(!i||i<1)return"< 1s";if(i<60)return`${Math.round(i)}s`;const a=Math.floor(i/60),c=Math.round(i%60);return a<60?`${a}m ${c.toString().padStart(2,"0")}s`:`${Math.floor(a/60)}h ${(a%60).toString().padStart(2,"0")}m`},$=i=>i?i==="/"||i===""?"Accueil":i:"—",M=({text:i})=>e.jsx($e,{delayDuration:150,children:e.jsxs(Be,{children:[e.jsx(Ue,{asChild:!0,children:e.jsx("button",{type:"button",className:"inline-flex text-muted-foreground hover:text-foreground","aria-label":"Aide",children:e.jsx(Pe,{className:"h-3.5 w-3.5"})})}),e.jsx(Fe,{className:"max-w-xs text-xs leading-relaxed",children:i})]})}),_l=()=>{const[i,a]=o.useState([]),[c,x]=o.useState([]),[u,A]=o.useState([]),[d,f]=o.useState([]),[k,N]=o.useState(!0),[I,te]=o.useState("7"),[P,re]=o.useState(""),[_,z]=o.useState("live"),C=o.useCallback(async()=>{N(!0);try{const s=Me(new Date,parseInt(I)).toISOString(),[t,r,g,j]=await Promise.all([Y.from("visitors").select("*").gte("last_seen_at",s).order("last_seen_at",{ascending:!1}).limit(500),Y.from("visitor_sessions").select("*").gte("started_at",s).order("started_at",{ascending:!1}).limit(1e3),Y.from("visitor_page_views").select("*").gte("entered_at",s).order("entered_at",{ascending:!1}).limit(2e3),Y.from("visitor_events").select("*").gte("created_at",s).order("created_at",{ascending:!1}).limit(2e3)]);a(t.data||[]),x(r.data||[]),A(g.data||[]),f(j.data||[])}catch(s){console.error("Failed to load visitor analytics:",s)}finally{N(!1)}},[I]);o.useEffect(()=>{C()},[C]),o.useEffect(()=>{if(_!=="live")return;const s=setInterval(C,15e3);return()=>clearInterval(s)},[_,C]);const m=o.useMemo(()=>{const s=Date.now()-3e5;return i.filter(t=>new Date(t.last_seen_at).getTime()>s)},[i]),B=o.useMemo(()=>{const s=new Date;return s.setHours(0,0,0,0),i.filter(t=>new Date(t.last_seen_at)>=s)},[i]),D=u.length,b=o.useMemo(()=>d.filter(s=>O.has(s.event_type)).length,[d]);o.useMemo(()=>d.filter(s=>s.event_type==="form_submit").length,[d]);const S=o.useMemo(()=>d.filter(s=>s.event_type==="rage_click"),[d]),Ve=o.useMemo(()=>{const s=c.filter(t=>(t.duration_seconds??0)>0);return s.length?Math.round(s.reduce((t,r)=>t+(r.duration_seconds||0),0)/s.length):0},[c]),ie=o.useMemo(()=>c.length?c.filter(t=>(t.pages_viewed??1)<=1).length/c.length*100:0,[c]),Re=o.useMemo(()=>i.length?i.filter(s=>s.is_converted).length/i.length*100:0,[i]),pe=o.useMemo(()=>{const s=new Map;return u.forEach(t=>{const r=s.get(t.page_url)||{url:t.page_url,views:0,totalTime:0,samples:0,totalScroll:0,scrollSamples:0,uniqueVisitors:new Set};r.views++,r.uniqueVisitors.add(t.visitor_id),t.time_spent&&t.time_spent>0&&(r.totalTime+=t.time_spent,r.samples++),t.scroll_depth!=null&&t.scroll_depth>0&&(r.totalScroll+=t.scroll_depth,r.scrollSamples++),s.set(t.page_url,r)}),Array.from(s.values()).map(t=>({url:t.url,views:t.views,unique:t.uniqueVisitors.size,avgTime:t.samples>0?Math.round(t.totalTime/t.samples):0,avgScroll:t.scrollSamples>0?Math.round(t.totalScroll/t.scrollSamples):0})).sort((t,r)=>r.views-t.views)},[u]),he=o.useMemo(()=>{const s=new Map;return d.filter(t=>O.has(t.event_type)).forEach(t=>{var U;const r=(t.element_text||t.element_href||`[${t.element_tag||"élément"}]`).slice(0,80),g=`${t.event_type}|${r}|${t.element_href||""}|${t.page_url||""}`,j=s.get(g)||{label:r,href:t.element_href,page:t.page_url||"—",tag:t.element_tag||"—",type:t.event_type,section:t.page_section,count:0,uniqueVisitors:new Set,totalTimeToClick:0,ttcSamples:0,totalScrollAtClick:0,scrollSamples:0,lastClickAt:t.created_at};j.count++,t.visitor_id&&j.uniqueVisitors.add(t.visitor_id);const L=(U=t.metadata)==null?void 0:U.time_on_page_sec;typeof L=="number"&&L>=0&&(j.totalTimeToClick+=L,j.ttcSamples++),typeof t.scroll_percent=="number"&&(j.totalScrollAtClick+=t.scroll_percent,j.scrollSamples++),t.created_at>j.lastClickAt&&(j.lastClickAt=t.created_at),s.set(g,j)}),Array.from(s.values()).map(t=>({label:t.label,href:t.href,page:t.page,tag:t.tag,type:t.type,section:t.section,count:t.count,unique:t.uniqueVisitors.size,avgTimeToClick:t.ttcSamples>0?Math.round(t.totalTimeToClick/t.ttcSamples):null,avgScrollAtClick:t.scrollSamples>0?Math.round(t.totalScrollAtClick/t.scrollSamples):null,lastClickAt:t.lastClickAt})).sort((t,r)=>r.count-t.count)},[d]),ge=o.useMemo(()=>{const s=new Map;return d.filter(t=>
7O.has(t.event_type)).forEach(t=>{s.set(t.event_type,(s.get(t.event_type)||0)+1)}),Array.from(s.entries()).map(([t,r])=>{var g;return{type:t,label:((g=G[t])==null?void 0:g.label)||t,value:r}}).sort((t,r)=>r.value-t.value)},[d]),je=o.useMemo(()=>{const s=new Map;return d.filter(t=>t.event_type==="outbound_click").forEach(t=>{var g;const r=((g=t.metadata)==null?void 0:g.outbound_host)||(()=>{try{return t.element_href?new URL(t.element_href).host:null}catch{return null}})();r&&s.set(r,(s.get(r)||0)+1)}),Array.from(s.entries()).map(([t,r])=>({host:t,count:r})).sort((t,r)=>r.count-t.count)},[d]),fe=o.useMemo(()=>d.filter(s=>O.has(s.event_type)||s.event_type==="form_submit"||s.event_type==="rage_click").slice(0,50),[d]),ve=o.useMemo(()=>{const s=new Map;return d.filter(t=>O.has(t.event_type)).forEach(t=>{const r=t.page_url||"—";s.set(r,(s.get(r)||0)+1)}),s},[d]),be=o.useMemo(()=>{const s=new Map;return c.forEach(t=>{const r=_s(t.referrer,t.utm_source);s.set(r,(s.get(r)||0)+1)}),Array.from(s.entries()).map(([t,r])=>({name:t,value:r})).sort((t,r)=>r.value-t.value).slice(0,8)},[c]),Ne=o.useMemo(()=>{const s=new Map;return i.forEach(t=>{const r=t.device_type||"inconnu";s.set(r,(s.get(r)||0)+1)}),Array.from(s.entries()).map(([t,r])=>({name:t,value:r}))},[i]),Ie=o.useMemo(()=>{const s={};for(let t=parseInt(I)-1;t>=0;t--){const r=Me(new Date,t),g=ce(r,"yyyy-MM-dd");s[g]={date:ce(r,"dd/MM"),visitors:0,pageviews:0,clicks:0}}return i.forEach(t=>{const r=t.first_seen_at.slice(0,10);s[r]&&s[r].visitors++}),u.forEach(t=>{const r=t.entered_at.slice(0,10);s[r]&&s[r].pageviews++}),d.forEach(t=>{if(t.event_type!=="click"&&t.event_type!=="link_click")return;const r=t.created_at.slice(0,10);s[r]&&s[r].clicks++}),Object.values(s)},[i,u,d,I]),_e=o.useMemo(()=>{if(!P)return i;const s=P.toLowerCase();return i.filter(t=>{var r,g,j,L,U;return((r=t.visitor_number)==null?void 0:r.toLowerCase().includes(s))||((g=t.country)==null?void 0:g.toLowerCase().includes(s))||((j=t.city)==null?void 0:j.toLowerCase().includes(s))||((L=t.last_page)==null?void 0:L.toLowerCase().includes(s))||((U=t.browser)==null?void 0:U.toLowerCase().includes(s))})},[i,P]);return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-2xl font-bold",children:"Tracking visiteurs"}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[m.length>0&&e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-green-500 font-medium mr-3",children:[e.jsxs("span",{className:"relative flex h-2 w-2",children:[e.jsx("span",{className:"animate-ping absolute inline-flex h-full w-full rounded-full bg-green-400 opacity-75"}),e.jsx("span",{className:"relative inline-flex rounded-full h-2 w-2 bg-green-500"})]}),m.length," en ligne maintenant"]}),i.length," visiteurs · ",D," pages vues · ",b," clics suivis"]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(He,{value:I,onValueChange:te,children:[e.jsx(Ge,{className:"w-32",children:e.jsx(ze,{})}),e.jsxs(Ye,{children:[e.jsx(W,{value:"1",children:"Aujourd'hui"}),e.jsx(W,{value:"7",children:"7 jours"}),e.jsx(W,{value:"30",children:"30 jours"}),e.jsx(W,{value:"90",children:"90 jours"})]})]}),e.jsx(Ke,{variant:"outline",size:"icon",onClick:C,disabled:k,children:k?e.jsx(Ze,{className:"h-4 w-4 animate-spin"}):e.jsx(Je,{className:"h-4 w-4"})})]})]}),e.jsx(p,{className:"border-primary/20 bg-primary/5",children:e.jsxs(h,{className:"p-4 text-sm flex gap-3",children:[e.jsx(Pe,{className:"h-5 w-5 text-primary shrink-0 mt-0.5"}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:"font-medium",children:"Comment lire ce tableau de bord ?"}),e.jsxs("p",{className:"text-muted-foreground",children:[e.jsx("strong",{children:"Visiteur"})," = une personne unique (identifiée par son navigateur).",e.jsx("strong",{children:" Session"})," = une visite continue (max 30 min d'inactivité).",e.jsx("strong",{children:" Vue de page"})," = chaque chargement d'une page.",e.jsx("strong",{children:" Durée"})," = temps réellement passé sur la page (mesuré jusqu'à ce que la personne ferme l'onglet ou change de page).",e.jsx("strong",{children:" Clic"})," = lien ou bouton réellement cliqué par le visiteur."]})]})]})}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-3",children:[e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(es,{className:"h-3.5 w-3.5"})," EN LIGNE ",e.jsx(M,{text:"Visiteurs actifs sur le site dans les 5 dernières minutes."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1 text-green-500",children:m.length})]})}),e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(ye,{className:"h-3.5 w-3.5"})," AUJOURD'HUI ",e.jsx(M,{text:"Nombre de visiteurs uniques venus depuis minuit."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:B.length})]})}),e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(ne,{className:"h-3.5 w-3.5"})," PAGES VUES ",e.jsx(M,{text:"Total de pages chargées sur la période sélectionnée."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:D})]})}),e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(de,{className:"h-3.5 w-3.5"})," CLICS ",e.jsx(M,{text:"Tous les clics sur des liens et boutons captés sur le site."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:b})]})}),e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(ts,{className:"h-3.5 w-3.5"})," DURÉE MOY. ",e.jsx(M,{text:"Durée moyenne d'une session (visite continue), tous visiteurs confondus."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:Z(Ve)})]})}),e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(rs,{className:"h-3.5 w-3.5"})," CONVERSION ",e.jsx(M,{text:"Pourcentage de visiteurs qui se sont inscrits, ont réservé ou souscrit."})]}),e.jsxs("div",{className:"text-2xl font-bold mt-1",children:[Re.toFixed(1),"%"]})]})})]}),e.jsx("div",{className:"flex gap-1 border-b overflow-x-auto",children:[{k:"live",label:"Temps réel",icon:ae},{k:"pages",label:"Pages & durée",icon:ne},{k:"clicks",label:"Clics & boutons",icon:de},{k:"sources",label:"Sources & appareils",icon:is},{k:"visitors",label:"Visiteurs",icon:ye}].map(s=>e.jsxs("button",{onClick:()=>z(s.k),className:`px-4 py-2 text-sm font-medium border-b-2 transition-colors flex items-center gap-1.5 whitespace-nowrap ${_===s.k?"border-primary text-primary":"border-transparent text-muted-foreground hover:text-foreground"}`,children:[e.jsx(s.icon,{className:"h-4 w-4"}),s.label]},s.k))}),_==="live"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2",children:[e.jsx(ae,{className:"h-4 w-4"}),"Visiteurs actifs maintenant"]}),e.jsx(T,{children:"Personnes ayant chargé une page dans les 5 dernières minutes. La page actuelle correspond à la dernière page consultée."})]}),e.jsx(h,{children:m.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-6",children:"Aucun visiteur actif en ce moment."}):e.jsx(F,{className:"h-[380px]",children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"Visiteur"}),e.jsx(l,{children:"Localisation"}),e.jsx(l,{children:"Page actuelle"}),e.jsx(l,{children:"Appareil"}),e.jsx(l,{children:"Vu il y a"})]})}),e.jsx(R,{children:m.map(s=>e.jsxs(v,{children:[e.jsxs(n,{children:[e.jsx("div",{className:"font-mono text-xs",children:s.visitor_number||s.visitor_uid.slice(0,8)}),s.user_id&&e.jsx(H,{variant:"secondary",className:"text-xs mt-1",children:"Connecté"})]}),e.jsx(n,{className:"text-xs",children:s.country||s.city?e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(ls,{className:"h-3 w-3"}
7),[s.city,s.country].filter(Boolean).join(", ")]}):"—"}),e.jsx(n,{className:"text-xs max-w-[280px] truncate",children:$(s.last_page)}),e.jsx(n,{children:e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs",children:[e.jsx(qe,{type:s.device_type}),s.browser||"—"]})}),e.jsx(n,{className:"text-xs text-muted-foreground",children:Q(new Date(s.last_seen_at),{addSuffix:!0,locale:K})})]},s.id))})]})})})]}),e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2",children:[e.jsx(ns,{className:"h-4 w-4"}),"Trafic quotidien"]}),e.jsx(T,{children:"Visiteurs uniques (bleu), pages vues (vert) et clics (orange) par jour."})]}),e.jsx(h,{children:e.jsx(ee,{config:{},className:"h-[280px] w-full",children:e.jsx(J,{children:e.jsxs(as,{data:Ie,children:[e.jsx(cs,{strokeDasharray:"3 3",opacity:.3}),e.jsx(Qe,{dataKey:"date",tick:{fontSize:11}}),e.jsx(Xe,{tick:{fontSize:11}}),e.jsx(oe,{content:e.jsx(se,{})}),e.jsx(le,{dataKey:"visitors",fill:"#3b82f6",name:"Visiteurs uniques",radius:[4,4,0,0]}),e.jsx(le,{dataKey:"pageviews",fill:"#10b981",name:"Pages vues",radius:[4,4,0,0]}),e.jsx(le,{dataKey:"clicks",fill:"#f59e0b",name:"Clics",radius:[4,4,0,0]})]})})})})]})]}),_==="pages"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2",children:[e.jsx(ne,{className:"h-4 w-4"}),"Pages les plus consultées"]}),e.jsx(T,{children:"Pour chaque page : combien de fois elle a été vue, par combien de personnes différentes, combien de temps en moyenne les gens y restent, jusqu'à quel pourcentage ils descendent (scroll), et combien de clics ils y font. Trié par nombre de vues."})]}),e.jsx(h,{children:e.jsx(F,{className:"h-[600px]",children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"#"}),e.jsx(l,{children:"Page"}),e.jsx(l,{className:"text-right",children:"Vues"}),e.jsx(l,{className:"text-right",children:"Visiteurs uniques"}),e.jsx(l,{className:"text-right",children:e.jsxs("span",{className:"inline-flex items-center gap-1 justify-end",children:[e.jsx(Se,{className:"h-3 w-3"}),"Temps moyen"]})}),e.jsx(l,{className:"text-right",children:"Scroll moyen"}),e.jsx(l,{className:"text-right",children:"Clics"}),e.jsx(l,{})]})}),e.jsx(R,{children:pe.slice(0,100).map((s,t)=>e.jsxs(v,{children:[e.jsx(n,{className:"text-muted-foreground text-xs",children:t+1}),e.jsx(n,{className:"font-mono text-xs max-w-[360px] truncate",title:s.url,children:$(s.url)}),e.jsx(n,{className:"text-right font-semibold",children:s.views}),e.jsx(n,{className:"text-right text-sm",children:s.unique}),e.jsx(n,{className:"text-right text-sm",children:Z(s.avgTime)}),e.jsx(n,{className:"text-right text-sm",children:e.jsxs("span",{className:s.avgScroll>=75?"text-green-500":s.avgScroll>=40?"text-amber-500":"text-muted-foreground",children:[s.avgScroll,"%"]})}),e.jsx(n,{className:"text-right text-sm",children:ve.get(s.url)||0}),e.jsx(n,{children:e.jsx("a",{href:s.url,target:"_blank",rel:"noopener noreferrer",className:"text-primary inline-flex",children:e.jsx(me,{className:"h-3.5 w-3.5"})})})]},s.url))})]})})})]}),e.jsxs(p,{children:[e.jsx(w,{children:e.jsx(y,{className:"text-base",children:"Comprendre la durée et le scroll"})}),e.jsxs(h,{className:"text-sm space-y-2 text-muted-foreground",children:[e.jsxs("p",{children:[e.jsx("strong",{className:"text-foreground",children:"Temps moyen sur la page"})," : mesuré côté navigateur entre l'arrivée du visiteur et le moment où il quitte la page (changement de page, fermeture de l'onglet ou mise en arrière-plan). Si une personne laisse l'onglet ouvert sans bouger, on n'attend pas indéfiniment : la mesure s'arrête quand l'onglet n'est plus actif."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-foreground",children:"Scroll moyen"})," : pourcentage de la page descendu par le visiteur (0% = il n'a rien vu sous l'écran, 100% = il a vu jusqu'en bas). Plus de 75% = excellent engagement, moins de 40% = la page perd l'attention."]}),e.jsxs("p",{children:[e.jsx("strong",{className:"text-foreground",children:"Clics"})," : nombre total de clics sur des liens ou boutons de cette page (voir l'onglet « Clics & boutons » pour le détail)."]})]})]})]}),_==="clicks"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-3",children:[ge.length===0&&e.jsx(p,{className:"col-span-full",children:e.jsx(h,{className:"p-4 text-sm text-muted-foreground text-center",children:"Aucun clic enregistré sur la période. Le tracking de clics est récent — laissez quelques minutes de trafic."})}),ge.map(s=>{const t=G[s.type]||G.click,r=t.icon;return e.jsx(p,{children:e.jsxs(h,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(r,{className:"h-3.5 w-3.5"})," ",t.label.toUpperCase()," ",e.jsx(M,{text:t.help})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:s.value})]})},s.type)})]}),S.length>0&&e.jsxs(p,{className:"border-red-500/30 bg-red-500/5",children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2 text-red-600",children:[e.jsx(os,{className:"h-4 w-4"}),"Frustration détectée — ",S.length," rage clic",S.length>
71?"s":""]}),e.jsx(T,{children:"Un visiteur a cliqué 3 fois ou plus très rapidement au même endroit (signe que quelque chose ne marche pas comme prévu)."})]}),e.jsx(h,{children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"Quand"}),e.jsx(l,{children:"Page"}),e.jsx(l,{children:"Élément"}),e.jsx(l,{children:"Section"})]})}),e.jsx(R,{children:S.slice(0,10).map(s=>e.jsxs(v,{children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:Q(new Date(s.created_at),{addSuffix:!0,locale:K})}),e.jsx(n,{className:"font-mono text-xs max-w-[260px] truncate",children:$(s.page_url)}),e.jsx(n,{className:"text-xs",children:s.element_text||`[${s.element_tag}]`}),e.jsx(n,{className:"text-xs text-muted-foreground",children:s.page_section||"—"})]},s.id))})]})})]}),e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2",children:[e.jsx(De,{className:"h-4 w-4"}),"Sur quoi vos visiteurs cliquent"]}),e.jsxs(T,{children:["Pour chaque bouton ou lien : ",e.jsx("strong",{children:"type"})," de clic (téléphone, e-mail, externe, interne, téléchargement…), texte cliqué, page de départ, destination, nombre de clics, visiteurs uniques,",e.jsx("strong",{children:" temps moyen avant clic"})," (combien de temps après être arrivé sur la page) et",e.jsx("strong",{children:" niveau de scroll au moment du clic"}),"."]})]}),e.jsx(h,{children:he.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center py-6",children:"Aucun clic à afficher."}):e.jsx(F,{className:"h-[600px]",children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"#"}),e.jsx(l,{children:"Type"}),e.jsx(l,{children:"Bouton / Lien cliqué"}),e.jsx(l,{children:"Sur la page"}),e.jsx(l,{children:"Mène vers"}),e.jsx(l,{className:"text-right",children:"Visiteurs"}),e.jsx(l,{className:"text-right",children:e.jsxs("span",{className:"inline-flex items-center gap-1 justify-end",children:[e.jsx(Se,{className:"h-3 w-3"}),"Avant clic"]})}),e.jsx(l,{className:"text-right",children:"Scroll au clic"}),e.jsx(l,{className:"text-right",children:"Clics"})]})}),e.jsx(R,{children:he.slice(0,150).map((s,t)=>e.jsxs(v,{children:[e.jsx(n,{className:"text-xs text-muted-foreground",children:t+1}),e.jsx(n,{children:e.jsx(Ae,{type:s.type})}),e.jsxs(n,{children:[e.jsx("div",{className:"text-sm font-medium max-w-[280px] truncate",title:s.label,children:s.label||e.jsx("span",{className:"text-muted-foreground italic",children:"(sans texte)"})}),e.jsxs("div",{className:"flex items-center gap-1 mt-0.5 text-[10px] text-muted-foreground",children:[e.jsx("code",{children:s.tag}),s.section&&e.jsxs(e.Fragment,{children:[e.jsx("span",{children:"·"}),e.jsx("span",{children:s.section})]})]})]}),e.jsx(n,{className:"font-mono text-xs max-w-[200px] truncate",title:s.page,children:$(s.page)}),e.jsx(n,{className:"font-mono text-xs max-w-[240px] truncate",title:s.href||"—",children:s.href?e.jsxs("span",{className:"inline-flex items-center gap-1",children:[e.jsx(xe,{className:"h-3 w-3"}),s.href.replace(/^https?:\/\/(www\.)?/,"")]}):"—"}),e.jsx(n,{className:"text-right text-sm",children:s.unique}),e.jsx(n,{className:"text-right text-sm",children:s.avgTimeToClick!=null?Z(s.avgTimeToClick):"—"}),e.jsx(n,{className:"text-right text-sm",children:s.avgScrollAtClick!=null?e.jsxs("span",{className:s.avgScrollAtClick>=50?"text-green-500":s.avgScrollAtClick>=20?"text-amber-500":"text-muted-foreground",children:[s.avgScrollAtClick,"%"]}):"—"}),e.jsx(n,{className:"text-right font-semibold",children:s.count})]},`${s.type}-${s.label}-${t}`))})]})})})]}),je.length>0&&e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2",children:[e.jsx(me,{className:"h-4 w-4"}),"Vers quels sites externes les visiteurs partent"]}),e.jsx(T,{children:"Liens vers des domaines tiers cliqués depuis le site."})]}),e.jsx(h,{children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"Domaine"}),e.jsx(l,{className:"text-right",children:"Clics"})]})}),e.jsx(R,{children:je.slice(0,15).map(s=>e.jsxs(v,{children:[e.jsx(n,{className:"font-mono text-xs",children:s.host}),e.jsx(n,{className:"text-right font-semibold",children:s.count})]},s.host))})]})})]}),e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsxs(y,{className:"text-base flex items-center gap-2",children:[e.jsx(ae,{className:"h-4 w-4"}),"Flux temps réel des clics (",fe.length,")"]}),e.jsx(T,{children:"Les 50 dernières actions enregistrées, du plus récent au plus ancien."})]}),e.jsx(h,{children:e.jsx(F,{className:"h-[420px]",children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"Quand"}),e.jsx(l,{children:"Type"}),e.jsx(l,{children:"Élément"}),e.jsx(l,{children:"Page"}),e.jsx(l,{className:"text-right",children:"Avant clic"}),e.jsx(l,{className:"text-right",children:"Scroll"})]})}),e.jsx(R,{children:fe.map(s=>{var t;return e.jsxs(v,{children:[e.jsx(n,{className:"text-xs text-muted-foreground whitespace-nowrap",children:Q(new Date(s.created_at),{addSuffix:!0,locale:K})}),e.jsx(n,{children:e.jsx(Ae,{type:s.event_type})}),e.jsxs(n,{className:"text-xs max-w-[260px] truncate",title:s.element_text||"",children:[s.element_text||e.jsxs("span",{className:"text-muted-foreground italic",children:["[",s.element_tag,"]"]}),s.element_href&&e.jsxs("div",{className:"font-mono text-[10px] text-muted-foreground truncate",children:["→ ",s.element_href.replace(/^https?:\/\/(www\.)?/,"")]})]}),e.jsx(n,{className:"font-mono text-xs max-w-[200px] truncate",children:$(s.page_url)}),e.jsx(n,{className:"text-right text-xs",children:typeof((t=s.metadata)==null?void 0:t.t
7ime_on_page_sec)=="number"?Z(s.metadata.time_on_page_sec):"—"}),e.jsx(n,{className:"text-right text-xs",children:typeof s.scroll_percent=="number"?`${s.scroll_percent}%`:"—"})]},s.id)})})]})})})]}),e.jsxs(p,{children:[e.jsx(w,{children:e.jsx(y,{className:"text-base",children:"Pages qui génèrent le plus de clics"})}),e.jsx(h,{children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"Page"}),e.jsx(l,{className:"text-right",children:"Clics"}),e.jsx(l,{className:"text-right",children:"Vues"}),e.jsx(l,{className:"text-right",children:"Clics par vue"})]})}),e.jsx(R,{children:Array.from(ve.entries()).sort((s,t)=>t[1]-s[1]).slice(0,15).map(([s,t])=>{var j;const r=((j=pe.find(L=>L.url===s))==null?void 0:j.views)||0,g=r>0?(t/r).toFixed(2):"—";return e.jsxs(v,{children:[e.jsx(n,{className:"font-mono text-xs max-w-[400px] truncate",children:$(s)}),e.jsx(n,{className:"text-right font-semibold",children:t}),e.jsx(n,{className:"text-right text-sm",children:r}),e.jsx(n,{className:"text-right text-sm",children:g})]},s)})})]})})]})]}),_==="sources"&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsx(y,{className:"text-base",children:"D'où viennent vos visiteurs ?"}),e.jsx(T,{children:"« Direct » = ils ont tapé l'adresse ou utilisé un favori. « Google » = recherche Google. « Facebook/Instagram » = clic depuis ces réseaux."})]}),e.jsx(h,{children:e.jsx(ee,{config:{},className:"h-[320px]",children:e.jsx(J,{children:e.jsxs(ke,{children:[e.jsx(Ce,{data:be,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:110,label:({name:s,value:t})=>`${s}: ${t}`,children:be.map((s,t)=>e.jsx(we,{fill:X[t%X.length]},t))}),e.jsx(oe,{content:e.jsx(se,{})})]})})})})]}),e.jsxs(p,{children:[e.jsxs(w,{children:[e.jsx(y,{className:"text-base",children:"Quel appareil utilisent-ils ?"}),e.jsx(T,{children:"Mobile / Tablette / Desktop. Si la majorité est sur mobile, vérifiez bien l'ergonomie sur petit écran."})]}),e.jsx(h,{children:e.jsx(ee,{config:{},className:"h-[320px]",children:e.jsx(J,{children:e.jsxs(ke,{children:[e.jsx(Ce,{data:Ne,dataKey:"value",nameKey:"name",cx:"50%",cy:"50%",outerRadius:110,label:({name:s,value:t})=>`${s}: ${t}`,children:Ne.map((s,t)=>e.jsx(we,{fill:X[t%X.length]},t))}),e.jsx(oe,{content:e.jsx(se,{})})]})})})})]})]}),_==="visitors"&&e.jsxs(p,{children:[e.jsx(w,{children:e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap",children:[e.jsxs("div",{children:[e.jsxs(y,{className:"text-base",children:["Tous les visiteurs (",_e.length,")"]}),e.jsx(T,{children:"Chaque ligne = une personne unique. « Visites » = nombre de fois revenue, « Pages » = total de pages vues."})]}),e.jsxs("div",{className:"relative w-72",children:[e.jsx(ds,{className:"absolute left-2 top-2.5 h-4 w-4 text-muted-foreground"}),e.jsx(Oe,{placeholder:"Rechercher pays, ville, page...",value:P,onChange:s=>re(s.target.value),className:"pl-8 h-9"})]})]})}),e.jsx(h,{children:e.jsx(F,{className:"h-[600px]",children:e.jsxs(E,{children:[e.jsx(V,{children:e.jsxs(v,{children:[e.jsx(l,{children:"Visiteur"}),e.jsx(l,{children:"Localisation"}),e.jsx(l,{children:"1ère visite"}),e.jsx(l,{children:"Dernière visite"}),e.jsx(l,{className:"text-right",children:"Visites"}),e.jsx(l,{className:"text-right",children:"Pages"}),e.jsx(l,{children:"Appareil"}),e.jsx(l,{children:"Statut"})]})}),e.jsx(R,{children:_e.slice(0,200).map(s=>e.jsxs(v,{children:[e.jsx(n,{className:"font-mono text-xs",children:s.visitor_number||s.visitor_uid.slice(0,12)}),e.jsx(n,{className:"text-xs",children:[s.city,s.country].filter(Boolean).join(", ")||"—"}),e.jsx(n,{className:"text-xs text-muted-foreground",children:ce(new Date(s.first_seen_at),"dd/MM HH:mm",{locale:K})}),e.jsx(n,{className:"text-xs text-muted-foreground",children:Q(new Date(s.last_seen_at),{addSuffix:!0,locale:K})}),e.jsx(n,{className:"text-right text-sm font-medium",children:s.total_visits}),e.jsx(n,{className:"text-right text-sm",children:s.total_page_views}),e.jsx(n,{children:e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-xs",children:[e.jsx(qe,{type:s.device_type}),s.browser]})}),e.jsx(n,{children:s.is_converted?e.jsx(H,{className:"text-xs bg-green-500/10 text-green-600 border-green-500/30",children:"Converti"}):s.user_id?e.jsx(H,{variant:"secondary",className:"text-xs",children:"Connecté"}):e.jsx(H,{variant:"outline",className:"text-xs",children:"Anonyme"})})]},s.id))})]})})})]}),e.jsxs(p,{children:[e.jsx(w,{children:e.jsx(y,{className:"text-base",children:"Indicateurs d'engagement"})}),e.jsxs(h,{className:"grid md:grid-cols-3 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center gap-1",children:["TAUX DE REBOND ",e.jsx(M,{text:"Pourcentage de sessions où le visiteur n'a vu qu'une seule page avant de partir. Plus c'est bas, mieux c'est."})]}),e.jsxs("div",{className:"text-2xl font-bold mt-1",children:[ie.toFixed(0),"%"]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:ie<40?"Excellent":ie<60?"Correct":"À améliorer"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center gap-1",children:["PAGES PAR SESSION ",e.jsx(M,{text:"Nombre moyen de pages vues lors d'une visite continue."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:c.length>0?(c.reduce((s,t)=>s+(t.pages_viewed||1),0)/c.length).toFixed(1):"0"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-xs text-muted-foreground flex items-center gap-1",children:["CLICS PAR VISITEUR ",e.jsx(M,{text:"Nombre moyen de clics réalisés par chaque visiteur."})]}),e.jsx("div",{className:"text-2xl font-bold mt-1",children:i.length>0?(b/i.length).toFixed(1):"0"})]})]})]})]})};export{_l 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.