PageSourceSearch

https://flightscan.com/build/assets/Index-YR61iEVV.js

js flightscan.com collected 2026-10-03 00:55:26 UTC 8,246 bytes, 16 lines download raw bytes

1import{j as e,H as f,r as g}from"./app-D11wjgzX.js";import{A as u,C as y}from"./AdminLayout-B4MAZl89.js";import{C as s}from"./Card-CWzAHXhN.js";import{E as b}from"./eye-YWR0Zi6c.js";import{U as w}from"./users-9shzt2jL.js";import{C as v}from"./circle-x-C0T5d143.js";import{c}from"./createLucideIcon-CnCIH0pn.js";import"./dollar-sign-Pv5ec262.js";import"./x-CmRQUYDG.js";import"./tag-DL9tTKju.js";import"./mail-De4iO8tV.js";import"./file-text-DUdybKfE.js";import"./key-round-CBIDatJT.js";import"./shield-alert-DtzCzsuv.js";/**
2 * @license lucide-react v0.475.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 k=[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]],_=c("Monitor",k);/**
7 * @license lucide-react v0.475.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const S=[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]],L=c("Smartphone",S);/**
12 * @license lucide-react v0.475.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const C=[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]],M=c("Tablet",C),A=[7,30,90],E={mobile:e.jsx(L,{className:"w-3.5 h-3.5"}),desktop:e.jsx(_,{className:"w-3.5 h-3.5"}),tablet:e.jsx(M,{className:"w-3.5 h-3.5"})};function X({days:h,summary:l,dailyViews:i,topPages:x,topReferrers:n,topCampaigns:d,deviceBreakdown:o,funnel:r}){const p=Math.max(1,...i.map(t=>t.views)),j=Math.max(1,...r.map(t=>t.count));return e.jsxs(u,{children:[e.jsx(f,{title:"Analytics"}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between flex-wrap gap-3",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-extrabold text-white tracking-tight flex items-center gap-2",children:[e.jsx(y,{className:"w-6 h-6 text-primary-400"})," Analytics"]}),e.jsx("p",{className:"text-xs text-slate-400 mt-1 max-w-2xl",children:"First-party traffic and funnel data, recorded server-side — not Mixpanel or GA, so it isn't missing visits blocked by ad-blockers or declined outside those tools."})]}),e.jsx("div",{className:"flex items-center gap-1.5",children:A.map(t=>e.jsxs("button",{onClick:()=>g.get("/admin/analytics",{days:t},{preserveState:!0}),className:`px-3 py-1.5 rounded-lg text-xs font-semibold ${h===t?"bg-primary-600 text-white":"text-slate-400 hover:bg-slate-800"}`,children:[t,"d"]},t))})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs(s,{children:[e.jsxs("p",{className:"text-xs text-slate-500 flex items-center gap-1.5",children:[e.jsx(b,{className:"w-3.5 h-3.5"})," Page views"]}),e.jsx("p",{className:"text-2xl font-extrabold text-white mt-1",children:l.total_page_views.toLocaleString()})]}),e.jsxs(s,{children:[e.jsxs("p",{className:"text-xs text-slate-500 flex items-center gap-1.5",children:[e.jsx(w,{className:"w-3.5 h-3.5"})," Sessions"]}),e.jsx("p",{className:"text-2xl font-extrabold text-white mt-1",children:l.total_sessions.toLocaleString()})]}),e.jsxs(s,{children:[e.jsxs("p",{className:"text-xs text-slate-500 flex items-center gap-1.5",children:[e.jsx(v,{className:"w-3.5 h-3.5"})," Failed bookings"]}),e.jsx("p",{className:"text-2xl font-extrabold text-white mt-1",children:l.booking_failed.toLocaleString()})]})]}),e.jsxs(s,{children:[e.jsx("h2",{className:"text-sm font-bold text-slate-300 uppercase tracking-wide mb-4",children:"Daily Page Views"}),i.length===0?e.jsx("p",{className:"text-sm text-slate-500",children:"No traffic recorded yet in this range."}):e.jsx("div",{className:"flex items-end gap-1 h-32",children:i.map(t=>e.jsxs("div",{className:"flex-1 flex flex-col items-center justify-end h-full group relative",children:[e.jsx("div",{className:"w-full bg-primary-600/70 hover:bg-primary-500 rounded-t transition-colors",style:{height:`${Math.max(2,t.views/p*100)}%`}}),e.jsxs("div",{className:"absolute -top-6 opacity-0 group-hover:opacity-100 text-[10px] text-white bg-slate-800 px-1.5 py-0.5 rounded whitespace-nowrap",children:[t.date,": ",t.views]})]},t.date))})]}),e.jsxs(s,{children:[e.jsx("h2",{className:"text-sm font-bold text-slate-300 uppercase tracking-wide mb-4",children:"Booking Funnel"}),e.jsx("div",{className:"space-y-3",children:r.map((t,a)=>{const m=a>0?r[a-1].count:t.count,N=m>0?Math.round(t.count/m*100):0;return e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between text-xs mb-1",children:[e.jsx("span",{className:"text-slate-300 font-medium",children:t.step}),e.jsxs("span",{className:"text-slate-400",children:[t.count.toLocaleStr
16ing(),a>0&&e.jsxs("span",{className:"text-slate-600 ml-2",children:["(",N,"% of previous step)"]})]})]}),e.jsx("div",{className:"w-full h-2 bg-slate-800 rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary-600 rounded-full",style:{width:`${Math.max(2,t.count/j*100)}%`}})})]},t.step)})})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs(s,{className:"p-0 overflow-hidden border-slate-800",children:[e.jsx("h2",{className:"text-sm font-bold text-slate-300 uppercase tracking-wide p-4 pb-0",children:"Top Pages"}),e.jsx("table",{className:"w-full text-left text-xs mt-3",children:e.jsxs("tbody",{className:"divide-y divide-slate-800/80",children:[x.length===0&&e.jsx("tr",{children:e.jsx("td",{className:"p-4 text-slate-500",children:"No page views yet."})}),x.map(t=>e.jsxs("tr",{children:[e.jsx("td",{className:"p-3 pl-4 text-slate-300 truncate max-w-xs",children:t.url}),e.jsx("td",{className:"p-3 pr-4 text-right text-white font-semibold",children:t.views.toLocaleString()})]},t.url))]})})]}),e.jsxs(s,{className:"p-0 overflow-hidden border-slate-800",children:[e.jsx("h2",{className:"text-sm font-bold text-slate-300 uppercase tracking-wide p-4 pb-0",children:"Top Referrers"}),e.jsx("table",{className:"w-full text-left text-xs mt-3",children:e.jsxs("tbody",{className:"divide-y divide-slate-800/80",children:[n.length===0&&e.jsx("tr",{children:e.jsx("td",{className:"p-4 text-slate-500",children:"No external referrers yet."})}),n.map(t=>e.jsxs("tr",{children:[e.jsx("td",{className:"p-3 pl-4 text-slate-300 truncate max-w-xs",children:t.referrer}),e.jsx("td",{className:"p-3 pr-4 text-right text-white font-semibold",children:t.sessions.toLocaleString()})]},t.referrer))]})})]}),e.jsxs(s,{className:"p-0 overflow-hidden border-slate-800",children:[e.jsx("h2",{className:"text-sm font-bold text-slate-300 uppercase tracking-wide p-4 pb-0",children:"UTM Campaigns"}),e.jsx("table",{className:"w-full text-left text-xs mt-3",children:e.jsxs("tbody",{className:"divide-y divide-slate-800/80",children:[d.length===0&&e.jsx("tr",{children:e.jsx("td",{className:"p-4 text-slate-500",children:"No campaign traffic yet."})}),d.map((t,a)=>e.jsxs("tr",{children:[e.jsxs("td",{className:"p-3 pl-4 text-slate-300",children:[t.utm_source,t.utm_campaign&&e.jsxs("span",{className:"text-slate-500",children:[" / ",t.utm_campaign]})]}),e.jsx("td",{className:"p-3 pr-4 text-right text-white font-semibold",children:t.sessions.toLocaleString()})]},a))]})})]}),e.jsxs(s,{className:"p-0 overflow-hidden border-slate-800",children:[e.jsx("h2",{className:"text-sm font-bold text-slate-300 uppercase tracking-wide p-4 pb-0",children:"Devices"}),e.jsx("table",{className:"w-full text-left text-xs mt-3",children:e.jsxs("tbody",{className:"divide-y divide-slate-800/80",children:[o.length===0&&e.jsx("tr",{children:e.jsx("td",{className:"p-4 text-slate-500",children:"No session data yet."})}),o.map(t=>e.jsxs("tr",{children:[e.jsxs("td",{className:"p-3 pl-4 text-slate-300 flex items-center gap-1.5 capitalize",children:[E[t.device_type]??null," ",t.device_type]}),e.jsx("td",{className:"p-3 pr-4 text-right text-white font-semibold",children:t.sessions.toLocaleString()})]},t.device_type))]})})]})]})]})]})}export{X 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.